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