1 /*
2 * Generated by ./misc/optlib2c from optlib/yacc.ctags, Don't edit this manually.
3 */
4 #include "general.h"
5 #include "parse.h"
6 #include "routines.h"
7 #include "field.h"
8 #include "xtag.h"
9
10
initializeYACCParser(const langType language)11 static void initializeYACCParser (const langType language)
12 {
13 addLanguageOptscriptToHook (language, SCRIPT_HOOK_PRELUDE,
14 "{{ /token-type false def\n"
15 " /type-dict 57 dict def\n"
16 "}}");
17
18 addLanguageRegexTable (language, "toplevel");
19 addLanguageRegexTable (language, "comment");
20 addLanguageRegexTable (language, "cPrologue");
21 addLanguageRegexTable (language, "grammar");
22 addLanguageRegexTable (language, "cEpilogue");
23 addLanguageRegexTable (language, "token");
24 addLanguageRegexTable (language, "cUnion");
25 addLanguageRegexTable (language, "cString");
26 addLanguageRegexTable (language, "iString");
27 addLanguageRegexTable (language, "rule");
28 addLanguageRegexTable (language, "cActionCommon");
29 addLanguageRegexTable (language, "cAction");
30 addLanguageRegexTable (language, "type");
31 addLanguageRegexTable (language, "cCharlit");
32
33 addLanguageTagMultiTableRegex (language, "toplevel",
34 "^/\\*",
35 "", "", "{tenter=comment}", NULL);
36 addLanguageTagMultiTableRegex (language, "toplevel",
37 "^%token[ \t\n]+",
38 "", "", "{tenter=token}"
39 "{{\n"
40 " /token-type false def\n"
41 "}}", NULL);
42 addLanguageTagMultiTableRegex (language, "toplevel",
43 "^%(union)[^\\{]*\\{",
44 "", "", "{tenter=cUnion}{_guest=C,1start,}", NULL);
45 addLanguageTagMultiTableRegex (language, "toplevel",
46 "^%(code[^\\{]*)?\\{",
47 "", "", "{tenter=cPrologue}{_guest=C,0end,}", NULL);
48 addLanguageTagMultiTableRegex (language, "toplevel",
49 "^%(type|nterm)[ \n\t]*",
50 "", "", "{tenter=type}"
51 "{{\n"
52 " /token-type false def\n"
53 "}}", NULL);
54 addLanguageTagMultiTableRegex (language, "toplevel",
55 "^%%",
56 "", "", "{tjump=grammar}", NULL);
57 addLanguageTagMultiTableRegex (language, "toplevel",
58 "^[^\n]*\n",
59 "", "", "", NULL);
60 addLanguageTagMultiTableRegex (language, "comment",
61 "^[^*]+",
62 "", "", "", NULL);
63 addLanguageTagMultiTableRegex (language, "comment",
64 "^\\*/",
65 "", "", "{tleave}", NULL);
66 addLanguageTagMultiTableRegex (language, "comment",
67 "^.",
68 "", "", "", NULL);
69 addLanguageTagMultiTableRegex (language, "cPrologue",
70 "^[^%]+",
71 "", "", "", NULL);
72 addLanguageTagMultiTableRegex (language, "cPrologue",
73 "^%\\}",
74 "", "", "{tleave}{_guest=,,0start}", NULL);
75 addLanguageTagMultiTableRegex (language, "cPrologue",
76 "^.",
77 "", "", "", NULL);
78 addLanguageTagMultiTableRegex (language, "grammar",
79 "^%%",
80 "", "", "{tjump=cEpilogue}{_guest=C,0end,}", NULL);
81 addLanguageTagMultiTableRegex (language, "grammar",
82 "^([a-zA-Z_.][-a-zA-Z_.0-9]+)[ \t\n]*:[ \t\n]*",
83 "\\1", "l", "{tenter=rule}"
84 "{{\n"
85 " type-dict \\1 known {\n"
86 " type-dict \\1 get . exch typeref:\n"
87 " } if\n"
88 "}}", NULL);
89 addLanguageTagMultiTableRegex (language, "grammar",
90 "^.",
91 "", "", "", NULL);
92 addLanguageTagMultiTableRegex (language, "cEpilogue",
93 "^.+",
94 "", "", "{_guest=,,0end}", NULL);
95 addLanguageTagMultiTableRegex (language, "token",
96 "^N?_[ \t]*\\(",
97 "", "", "{tenter=iString}", NULL);
98 addLanguageTagMultiTableRegex (language, "token",
99 "^([_a-zA-Z][_a-zA-Z0-9]*)[ \t\n]*",
100 "\\1", "t", ""
101 "{{\n"
102 " token-type false ne {\n"
103 " . token-type typeref:\n"
104 " } if\n"
105 "}}", NULL);
106 addLanguageTagMultiTableRegex (language, "token",
107 "^<[ \t]*([_a-zA-Z][_a-zA-Z0-9 *]*)[ \t]*>[ \t\n]*",
108 "", "", ""
109 "{{\n"
110 " /token-type \\1 def\n"
111 "}}", NULL);
112 addLanguageTagMultiTableRegex (language, "token",
113 "^\"",
114 "", "", "{tenter=cString}", NULL);
115 addLanguageTagMultiTableRegex (language, "token",
116 "^'",
117 "", "", "{tenter=cCharlit}", NULL);
118 addLanguageTagMultiTableRegex (language, "token",
119 "^-?[ \t\n]*(0x)?[0-9]+[ \t\n]*",
120 "", "", "", NULL);
121 addLanguageTagMultiTableRegex (language, "token",
122 "^%",
123 "", "", "{tleave}{_advanceTo=0start}"
124 "{{\n"
125 " /token-type false def\n"
126 "}}", NULL);
127 addLanguageTagMultiTableRegex (language, "token",
128 "^.|\n",
129 "", "", "", NULL);
130 addLanguageTagMultiTableRegex (language, "cUnion",
131 "^[^\"/\\{\\}]+",
132 "", "", "", NULL);
133 addLanguageTagMultiTableRegex (language, "cUnion",
134 "^\"",
135 "", "", "{tenter=cString}", NULL);
136 addLanguageTagMultiTableRegex (language, "cUnion",
137 "^'",
138 "", "", "{tenter=cCharlit}", NULL);
139 addLanguageTagMultiTableRegex (language, "cUnion",
140 "^/\\*",
141 "", "", "{tenter=comment}", NULL);
142 addLanguageTagMultiTableRegex (language, "cUnion",
143 "^\\{",
144 "", "", "{tenter=cAction}", NULL);
145 addLanguageTagMultiTableRegex (language, "cUnion",
146 "^\\}",
147 "", "", "{tleave}{_guest=,,0end}{tleave}", NULL);
148 addLanguageTagMultiTableRegex (language, "cString",
149 "^[\\\\\"]+",
150 "", "", "", NULL);
151 addLanguageTagMultiTableRegex (language, "cString",
152 "^\\\\.",
153 "", "", "", NULL);
154 addLanguageTagMultiTableRegex (language, "cString",
155 "^\"",
156 "", "", "{tleave}", NULL);
157 addLanguageTagMultiTableRegex (language, "iString",
158 "^\"",
159 "", "", "{tenter=cString}", NULL);
160 addLanguageTagMultiTableRegex (language, "iString",
161 "^\\)",
162 "", "", "{tleave}", NULL);
163 addLanguageTagMultiTableRegex (language, "iString",
164 "^.",
165 "", "", "", NULL);
166 addLanguageTagMultiTableRegex (language, "rule",
167 "^[^\\{;]+",
168 "", "", "", NULL);
169 addLanguageTagMultiTableRegex (language, "rule",
170 "^\\{",
171 "", "", "{tenter=cAction}", NULL);
172 addLanguageTagMultiTableRegex (language, "rule",
173 "^;",
174 "", "", "{tleave}", NULL);
175 addLanguageTagMultiTableRegex (language, "rule",
176 "^.",
177 "", "", "", NULL);
178 addLanguageTagMultiTableRegex (language, "cActionCommon",
179 "^[^\"/\\{\\}]+",
180 "", "", "", NULL);
181 addLanguageTagMultiTableRegex (language, "cActionCommon",
182 "^\"",
183 "", "", "{tenter=cString}", NULL);
184 addLanguageTagMultiTableRegex (language, "cActionCommon",
185 "^'",
186 "", "", "{tenter=cCharlit}", NULL);
187 addLanguageTagMultiTableRegex (language, "cActionCommon",
188 "^/\\*",
189 "", "", "{tenter=comment}", NULL);
190 addLanguageTagMultiTableRegex (language, "cActionCommon",
191 "^\\{",
192 "", "", "{tenter=cAction}", NULL);
193 addLanguageTagMultiTableRegex (language, "cAction",
194 "^[^\"/\\{\\}]+",
195 "", "", "", NULL);
196 addLanguageTagMultiTableRegex (language, "cAction",
197 "^\"",
198 "", "", "{tenter=cString}", NULL);
199 addLanguageTagMultiTableRegex (language, "cAction",
200 "^'",
201 "", "", "{tenter=cCharlit}", NULL);
202 addLanguageTagMultiTableRegex (language, "cAction",
203 "^/\\*",
204 "", "", "{tenter=comment}", NULL);
205 addLanguageTagMultiTableRegex (language, "cAction",
206 "^\\{",
207 "", "", "{tenter=cAction}", NULL);
208 addLanguageTagMultiTableRegex (language, "cAction",
209 "^\\}",
210 "", "", "{tleave}", NULL);
211 addLanguageTagMultiTableRegex (language, "type",
212 "^N?_[ \t]*\\(",
213 "", "", "{tenter=iString}", NULL);
214 addLanguageTagMultiTableRegex (language, "type",
215 "^([_a-zA-Z][_a-zA-Z0-9]*)[ \t\n]*",
216 "", "", ""
217 "{{\n"
218 " token-type false ne {\n"
219 " type-dict \\1 token-type put\n"
220 " } if\n"
221 "}}", NULL);
222 addLanguageTagMultiTableRegex (language, "type",
223 "^<[ \t]*([_a-zA-Z][_a-zA-Z0-9 *]*)[ \t]*>[ \t\n]*",
224 "", "", ""
225 "{{\n"
226 " /token-type \\1 def\n"
227 "}}", NULL);
228 addLanguageTagMultiTableRegex (language, "type",
229 "^\"",
230 "", "", "{tenter=cString}", NULL);
231 addLanguageTagMultiTableRegex (language, "type",
232 "^'",
233 "", "", "{tenter=cCharlit}", NULL);
234 addLanguageTagMultiTableRegex (language, "type",
235 "^%",
236 "", "", "{tleave}{_advanceTo=0start}"
237 "{{\n"
238 " /token-type false def\n"
239 "}}", NULL);
240 addLanguageTagMultiTableRegex (language, "type",
241 "^.|\n",
242 "", "", "", NULL);
243 addLanguageTagMultiTableRegex (language, "cCharlit",
244 "^[^\\\\]'",
245 "", "", "{tleave}", NULL);
246 addLanguageTagMultiTableRegex (language, "cCharlit",
247 "^\\\\.'",
248 "", "", "{tleave}", NULL);
249 addLanguageTagMultiTableRegex (language, "cCharlit",
250 "^'",
251 "", "", "{tleave}", NULL);
252 addLanguageTagMultiTableRegex (language, "cCharlit",
253 "^.",
254 "", "", "", NULL);
255 }
256
YACCParser(void)257 extern parserDefinition* YACCParser (void)
258 {
259 static const char *const extensions [] = {
260 "y",
261 NULL
262 };
263
264 static const char *const aliases [] = {
265 NULL
266 };
267
268 static const char *const patterns [] = {
269 NULL
270 };
271
272 static kindDefinition YACCKindTable [] = {
273 {
274 true, 't', "token", "tokens",
275 },
276 {
277 true, 'l', "label", "labels",
278 },
279 };
280
281 parserDefinition* const def = parserNew ("YACC");
282
283 def->enabled = true;
284 def->extensions = extensions;
285 def->patterns = patterns;
286 def->aliases = aliases;
287 def->method = METHOD_NOT_CRAFTED|METHOD_REGEX;
288 def->useCork = CORK_QUEUE;
289 def->kindTable = YACCKindTable;
290 def->kindCount = ARRAY_SIZE(YACCKindTable);
291 def->initialize = initializeYACCParser;
292
293 return def;
294 }
295