83e36a389f6e78f9923437d127126701b259ebb7
[idea/community.git] / tools / lexer / jflex-1.4 / src / JFlex / Options.java
1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
2  * JFlex 1.4.3                                                             *
3  * Copyright (C) 1998-2009  Gerwin Klein <lsf@jflex.de>                    *
4  * All rights reserved.                                                    *
5  *                                                                         *
6  * This program is free software; you can redistribute it and/or modify    *
7  * it under the terms of the GNU General Public License. See the file      *
8  * COPYRIGHT for more information.                                         *
9  *                                                                         *
10  * This program is distributed in the hope that it will be useful,         *
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of          *
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           *
13  * GNU General Public License for more details.                            *
14  *                                                                         *
15  * You should have received a copy of the GNU General Public License along *
16  * with this program; if not, write to the Free Software Foundation, Inc., *
17  * 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                 *
18  *                                                                         *
19  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
20
21 package JFlex;
22
23 import java.io.File;
24
25 /**
26  * Collects all global JFlex options. Can be set from command line parser,
27  * ant taks, gui, etc.
28  * 
29  * @author Gerwin Klein
30  * @version $Revision: 1.4.3 $, $Date: 2009/12/21 15:58:48 $
31  */
32 public class Options {
33
34   /** If true, additional verbose debug information is produced
35    *  This is a compile time option */
36   public final static boolean DEBUG = false;
37
38         /** code generation method: maximum packing */
39         final public static int PACK   = 0;
40         /** code generation method: traditional */
41         final public static int TABLE  = 1;
42         /** code generation method: switch statement */
43         final public static int SWITCH = 2;
44
45
46         /** output directory */
47         private static File directory;
48   /** strict JLex compatibility */
49   public static boolean jlex;
50   /** don't run minimization algorithm if this is true */
51   public static boolean no_minimize; 
52   /** don't write backup files if this is true */
53   public static boolean no_backup;
54   /** use charAt function for accessing the zzBuffer */
55   public static boolean char_at;
56
57   /** use charAt function for accessing the zzBuffer and [] for zzBufferArray */
58   public static boolean sliceAndCharAt;
59
60   /** default code generation method */
61   public static int gen_method;
62   /** If false, only error/warning output will be generated */
63   public static boolean verbose;
64   /** If true, progress dots will be printed */
65   public static boolean progress;
66   /** If true, jflex will print time statistics about the generation process */
67   public static boolean time;
68   /** If true, jflex will write graphviz .dot files for generated automata */
69   public static boolean dot;
70   /** If true, you will be flooded with information (e.g. dfa tables).  */
71   public static boolean dump;
72
73         static { setDefaults(); }
74
75
76   /**
77    * @return the output directory
78    */
79   public static File getDir() {    
80     return directory;
81   }
82
83   /**
84    * Set output directory
85    * 
86    * @param dirName the name of the directory to write output files to
87    */
88   public static void setDir(String dirName) {
89         setDir(new File(dirName)); 
90   }
91   
92
93         /**
94          * Set output directory
95          * 
96          * @param d  the directory to write output files to
97          */
98   public static void setDir(File d) {
99     if ( d.isFile() ) {
100       Out.error("Error: \""+d+"\" is not a directory.");
101       throw new GeneratorException();
102     }
103     
104     if ( !d.isDirectory() && !d.mkdirs() ) {
105       Out.error("Error: couldn't create directory \""+d+"\"");
106       throw new GeneratorException();
107     }
108   
109     directory = d;
110   }
111
112   /**
113    * Sets all options back to default values. 
114    */
115   public static void setDefaults() {
116         directory = null;
117     jlex = false;
118                 no_minimize = false;
119                 no_backup = false;
120                 gen_method = Options.PACK;    
121     verbose = true;
122     progress = true;
123     time = false;
124     dot = false;
125     dump = false;
126     Skeleton.readDefault();
127   }
128
129   public static void setSkeleton(File skel) {
130     Skeleton.readSkelFile(skel);
131   }   
132 }