]>
Commit | Line | Data |
---|---|---|
878ddf1f | 1 | /* dlg header file\r |
2 | *\r | |
3 | * SOFTWARE RIGHTS\r | |
4 | *\r | |
5 | * We reserve no LEGAL rights to the Purdue Compiler Construction Tool\r | |
6 | * Set (PCCTS) -- PCCTS is in the public domain. An individual or\r | |
7 | * company may do whatever they wish with source code distributed with\r | |
8 | * PCCTS or the code generated by PCCTS, including the incorporation of\r | |
9 | * PCCTS, or its output, into commerical software.\r | |
10 | *\r | |
11 | * We encourage users to develop software with PCCTS. However, we do ask\r | |
12 | * that credit is given to us for developing PCCTS. By "credit",\r | |
13 | * we mean that if you incorporate our source code into one of your\r | |
14 | * programs (commercial product, research project, or otherwise) that you\r | |
15 | * acknowledge this fact somewhere in the documentation, research report,\r | |
16 | * etc... If you like PCCTS and have developed a nice tool with the\r | |
17 | * output, please mention that you developed it using PCCTS. In\r | |
18 | * addition, we ask that this header remain intact in our source code.\r | |
19 | * As long as these guidelines are kept, we expect to continue enhancing\r | |
20 | * this system and expect to make other tools available as they are\r | |
21 | * completed.\r | |
22 | *\r | |
23 | * DLG 1.33\r | |
24 | * Will Cohen\r | |
25 | * With mods by Terence Parr; AHPCRC, University of Minnesota\r | |
26 | * 1989-2001\r | |
27 | */\r | |
28 | \r | |
29 | /* MR1 Move pcctscfg.h to top of file */\r | |
30 | \r | |
31 | #include "pcctscfg.h" \r | |
32 | \r | |
33 | /* turn off warnings for unreferenced labels */\r | |
34 | \r | |
35 | #ifdef _MSC_VER\r | |
36 | #pragma warning(disable:4102)\r | |
37 | #endif\r | |
38 | \r | |
39 | #include "set.h"\r | |
40 | \r | |
41 | #define TRUE 1\r | |
42 | #define FALSE 0\r | |
43 | \r | |
44 | /***** output related stuff *******************/\r | |
45 | #define IN input_stream\r | |
46 | #define OUT output_stream\r | |
47 | \r | |
48 | #define MAX_MODES 50 /* number of %%names allowed */\r | |
49 | #define MAX_ON_LINE 10\r | |
50 | \r | |
51 | #define NFA_MIN 64 /* minimum nfa_array size */\r | |
52 | #define DFA_MIN 64 /* minimum dfa_array size */\r | |
53 | \r | |
54 | #define DEFAULT_CLASSNAME "DLGLexer"\r | |
55 | \r | |
56 | /* these macros allow the size of the character set to be easily changed */\r | |
57 | /* NOTE: do NOT change MIN_CHAR since EOF is the lowest char, -1 */\r | |
58 | #define MIN_CHAR (-1) /* lowest possible character possible on input */\r | |
59 | #define MAX_CHAR 255 /* highest possible character possible on input */\r | |
60 | #define CHAR_RANGE (1+(MAX_CHAR) - (MIN_CHAR))\r | |
61 | \r | |
62 | /* indicates that the not an "array" reference */\r | |
63 | #define NIL_INDEX 0\r | |
64 | \r | |
65 | /* size of hash table used to find dfa_states quickly */\r | |
66 | #define HASH_SIZE 211\r | |
67 | \r | |
68 | #define nfa_node struct _nfa_node\r | |
69 | nfa_node {\r | |
70 | int node_no;\r | |
71 | int nfa_set;\r | |
72 | int accept; /* what case to use */\r | |
73 | nfa_node *trans[2];\r | |
74 | set label; /* one arc always labelled with epsilon */\r | |
75 | };\r | |
76 | \r | |
77 | #define dfa_node struct _dfa_node\r | |
78 | dfa_node {\r | |
79 | int node_no;\r | |
80 | int dfa_set;\r | |
81 | int alternatives; /* used for interactive mode */\r | |
82 | /* are more characters needed */\r | |
83 | int done;\r | |
84 | set nfa_states;\r | |
85 | int trans[1];/* size of transition table depends on\r | |
86 | * number of classes required for automata.\r | |
87 | */\r | |
88 | \r | |
89 | \r | |
90 | };\r | |
91 | \r | |
92 | /******** macros for accessing the NFA and DFA nodes ****/\r | |
93 | #define NFA(x) (nfa_array[x])\r | |
94 | #define DFA(x) (dfa_array[x])\r | |
95 | #define DFA_NO(x) ( (x) ? (x)->node_no : NIL_INDEX)\r | |
96 | #define NFA_NO(x) ( (x) ? (x)->node_no : NIL_INDEX)\r | |
97 | \r | |
98 | /******** wrapper for memory checking ***/\r | |
99 | /*#define malloc(x) dlg_malloc((x),__FILE__,__LINE__)*/\r | |
100 | \r | |
101 | /*#define calloc(x,y) dlg_calloc((x),(y),__FILE__,__LINE__)*/\r | |
102 | \r | |
103 | /******** antlr attributes *************/\r | |
104 | typedef struct {\r | |
105 | unsigned char letter;\r | |
106 | nfa_node *l,*r;\r | |
107 | set label;\r | |
108 | } Attrib;\r | |
109 | \r | |
110 | #define zzcr_attr(attr, token, text) { \\r | |
111 | (attr)->letter = text[0]; (attr)->l = NULL; \\r | |
112 | (attr)->r = NULL; (attr)->label = empty; \\r | |
113 | }\r | |
114 | #define zzd_attr(a) set_free((a)->label);\r | |
115 | \r | |
116 | /******************** Variable ******************************/\r | |
117 | extern char program[]; /* tells what program this is */\r | |
118 | extern char version[]; /* tells what version this is */\r | |
119 | extern char *file_str[]; /* file names being used */\r | |
120 | extern int err_found; /* flag to indicate error occured */\r | |
121 | extern int action_no; /* last action function printed */\r | |
122 | extern int func_action; /* should actions be turned into functions?*/\r | |
123 | extern set used_chars; /* used to label trans. arcs */\r | |
124 | extern set used_classes; /* classes or chars used to label trans. arcs */\r | |
125 | extern int class_no; /* number of classes used */\r | |
126 | extern set class_sets[]; /* shows char. in each class */\r | |
127 | extern set normal_chars; /* mask off unused portion of set */\r | |
128 | extern int comp_level; /* what compression level to use */\r | |
129 | extern int interactive; /* interactive scanner (avoid lookahead)*/\r | |
130 | extern int mode_counter; /* keeps track of the number of %%name */\r | |
131 | extern int dfa_basep[]; /* start of each group of dfa */\r | |
132 | extern int dfa_class_nop[];/* number of transistion arcs in */\r | |
133 | /* each dfa in each mode */\r | |
134 | extern int nfa_allocated;\r | |
135 | extern int dfa_allocated;\r | |
136 | extern nfa_node **nfa_array; /* start of nfa "array" */\r | |
137 | extern dfa_node **dfa_array; /* start of dfa "array" */\r | |
138 | extern int operation_no; /* unique number for each operation */\r | |
139 | extern FILE *input_stream; /* where description read from */\r | |
140 | extern FILE *output_stream; /* where to put the output */\r | |
141 | extern FILE *mode_stream; /* where to put the mode output */\r | |
142 | extern FILE *class_stream;\r | |
143 | extern char *mode_file; /* name of file for mode output */\r | |
144 | extern int gen_ansi; /* produce ansi compatible code */\r | |
145 | extern int case_insensitive;/* ignore case of input spec. */\r | |
146 | extern int warn_ambig; /* show if regular expressions ambiguous */\r | |
147 | extern int gen_cpp;\r | |
148 | extern char *cl_file_str;\r | |
149 | extern int firstLexMember; /* MR1 */\r | |
150 | extern char *OutputDirectory;\r | |
151 | extern char *class_name;\r | |
152 | \r | |
153 | /******************** Functions ******************************/\r | |
154 | #ifdef __USE_PROTOS\r | |
155 | extern char *dlg_malloc(int, char *, int); /* wrapper malloc */\r | |
156 | extern char *dlg_calloc(int, int, char *, int); /* wrapper calloc */\r | |
157 | extern int reach(unsigned *, register int, unsigned *);\r | |
158 | extern set closure(set *, unsigned *);\r | |
159 | extern dfa_node *new_dfa_node(set);\r | |
160 | extern nfa_node *new_nfa_node(void);\r | |
161 | extern dfa_node *dfastate(set);\r | |
162 | extern dfa_node **nfa_to_dfa(nfa_node *);\r | |
163 | extern void internal_error(char *, char *, int); /* MR9 23-Sep-97 */\r | |
164 | extern FILE *read_stream(char *); /* opens file for reading */\r | |
165 | extern FILE *write_stream(char *); /* opens file for writing */\r | |
166 | extern void make_nfa_model_node(void);\r | |
167 | extern void make_dfa_model_node(int);\r | |
168 | extern char *ClassName(char *);\r | |
169 | extern char *OutMetaName(char *);\r | |
170 | extern void error(char*, int);\r | |
171 | extern void warning(char*, int);\r | |
172 | extern void p_head(void);\r | |
173 | extern void p_class_hdr(void);\r | |
174 | extern void p_includes(void);\r | |
175 | extern void p_tables(void);\r | |
176 | extern void p_tail(void); /* MR1 */\r | |
177 | extern void p_class_def1(void); /* MR1 */\r | |
178 | extern void new_automaton_mode(void); /* MR1 */\r | |
179 | extern int relabel(nfa_node *,int); /* MR1 */\r | |
180 | extern void p_shift_table(int); /* MR1 */\r | |
181 | extern void p_bshift_table(void); /* MR1 */\r | |
182 | extern void p_class_table(void); /* MR1 */\r | |
183 | extern void p_mode_def(char *,int); /* MR1 */\r | |
184 | extern void init(void); /* MR1 */\r | |
185 | extern void p_class_def2(void); /* MR1 */\r | |
186 | extern void clear_hash(void); /* MR1 */\r | |
187 | extern void p_alternative_table(void); /* MR1 */\r | |
188 | extern void p_node_table(void); /* MR1 */\r | |
189 | extern void p_dfa_table(void); /* MR1 */\r | |
190 | extern void p_accept_table(void); /* MR1 */\r | |
191 | extern void p_action_table(void); /* MR1 */\r | |
192 | extern void p_base_table(void); /* MR1 */\r | |
193 | extern void p_single_node(int,int); /* MR1 */\r | |
194 | extern char * minsize(int); /* MR1 */\r | |
195 | extern void close1(nfa_node *,int,set *); /* MR1 */\r | |
196 | extern void partition(nfa_node *,int); /* MR1 */\r | |
197 | extern void intersect_nfa_labels(nfa_node *,set *); /* MR1 */\r | |
198 | extern void r_intersect(nfa_node *,set *); /* MR1 */\r | |
199 | extern void label_node(nfa_node *); /* MR1 */\r | |
200 | extern void label_with_classes(nfa_node *); /* MR1 */\r | |
201 | \r | |
202 | #else\r | |
203 | extern char *dlg_malloc(); /* wrapper malloc */\r | |
204 | extern char *dlg_calloc(); /* wrapper calloc */\r | |
205 | extern int reach();\r | |
206 | extern set closure();\r | |
207 | extern dfa_node *new_dfa_node();\r | |
208 | extern nfa_node *new_nfa_node();\r | |
209 | extern dfa_node *dfastate();\r | |
210 | extern dfa_node **nfa_to_dfa();\r | |
211 | extern void internal_error(); /* MR9 23-Sep-97 */\r | |
212 | extern FILE *read_stream(); /* opens file for reading */\r | |
213 | extern FILE *write_stream(); /* opens file for writing */\r | |
214 | extern void make_nfa_model_node();\r | |
215 | extern void make_dfa_model_node();\r | |
216 | extern char *ClassName();\r | |
217 | extern char *OutMetaName();\r | |
218 | extern void error();\r | |
219 | extern void warning();\r | |
220 | extern void p_head(); /* MR9 */\r | |
221 | extern void p_class_hdr(); /* MR9 */\r | |
222 | extern void p_includes(); /* MR9 */\r | |
223 | extern void p_tables(); /* MR9 */\r | |
224 | extern void p_tail(); /* MR1 */\r | |
225 | extern void p_class_def1(); /* MR1 */\r | |
226 | extern void new_automaton_mode(); /* MR1 */\r | |
227 | extern int relabel(); /* MR1 */\r | |
228 | extern void p_shift_table(); /* MR1 */\r | |
229 | extern void p_bshift_table(); /* MR1 */\r | |
230 | extern void p_class_table(); /* MR1 */\r | |
231 | extern void p_mode_def(); /* MR1 */\r | |
232 | extern void init(); /* MR1 */\r | |
233 | extern void p_class_def2(); /* MR1 */\r | |
234 | extern void clear_hash(); /* MR1 */\r | |
235 | extern void p_alternative_table(); /* MR1 */\r | |
236 | extern void p_node_table(); /* MR1 */\r | |
237 | extern void p_dfa_table(); /* MR1 */\r | |
238 | extern void p_accept_table(); /* MR1 */\r | |
239 | extern void p_action_table(); /* MR1 */\r | |
240 | extern void p_base_table(); /* MR1 */\r | |
241 | extern void p_single_node(); /* MR1 */\r | |
242 | extern char * minsize(); /* MR1 */\r | |
243 | extern void close1(); /* MR1 */\r | |
244 | extern void partition(); /* MR1 */\r | |
245 | extern void intersect_nfa_labels(); /* MR1 */\r | |
246 | extern void r_intersect(); /* MR1 */\r | |
247 | extern void label_node(); /* MR1 */\r | |
248 | extern void label_with_classes(); /* MR1 */\r | |
249 | \r | |
250 | #endif\r |