Mercurial > hg > index.cgi
annotate lwcc/parse_c.c @ 583:000381ee2d5c default tip
Guard against single operand multiplication when detecting like terms
This *shouldn't* happen, but it apparently does in some pathological cases
so guard against a single operand multiplication to prevent a crash.
author | William Astle <lost@l-w.ca> |
---|---|
date | Mon, 04 Nov 2024 23:48:23 -0700 |
parents | a3e277c58df9 |
children |
rev | line source |
---|---|
314
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1 /* Driver template for the LEMON parser generator. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
2 ** The author disclaims copyright to this source code. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
3 */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
4 /* First off, code is included that follows the "include" declaration |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
5 ** in the input grammar file. */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
6 #include <stdio.h> |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
7 #line 1 "lwcc/parse_c.y" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
8 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
9 #include <assert.h> // only needed due to a bug in lemon |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
10 #include <stdio.h> |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
11 #include "parse.h" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
12 #include "tree.h" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
13 #line 14 "lwcc/parse_c.c" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
14 /* Next is all token values, in a form suitable for use by makeheaders. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
15 ** This section will be null unless lemon is run with the -m switch. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
16 */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
17 /* |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
18 ** These constants (all generated automatically by the parser generator) |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
19 ** specify the various kinds of tokens (terminals) that the parser |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
20 ** understands. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
21 ** |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
22 ** Each symbol here is a terminal symbol in the grammar. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
23 */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
24 /* Make sure the INTERFACE macro is defined. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
25 */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
26 #ifndef INTERFACE |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
27 # define INTERFACE 1 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
28 #endif |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
29 /* The next thing included is series of defines which control |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
30 ** various aspects of the generated parser. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
31 ** YYCODETYPE is the data type used for storing terminal |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
32 ** and nonterminal numbers. "unsigned char" is |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
33 ** used if there are fewer than 250 terminals |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
34 ** and nonterminals. "int" is used otherwise. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
35 ** YYNOCODE is a number of type YYCODETYPE which corresponds |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
36 ** to no legal terminal or nonterminal number. This |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
37 ** number is used to fill in empty slots of the hash |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
38 ** table. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
39 ** YYFALLBACK If defined, this indicates that one or more tokens |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
40 ** have fall-back values which should be used if the |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
41 ** original value of the token will not parse. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
42 ** YYACTIONTYPE is the data type used for storing terminal |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
43 ** and nonterminal numbers. "unsigned char" is |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
44 ** used if there are fewer than 250 rules and |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
45 ** states combined. "int" is used otherwise. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
46 ** ParseTOKENTYPE is the data type used for minor tokens given |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
47 ** directly to the parser from the tokenizer. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
48 ** YYMINORTYPE is the data type used for all minor tokens. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
49 ** This is typically a union of many types, one of |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
50 ** which is ParseTOKENTYPE. The entry in the union |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
51 ** for base tokens is called "yy0". |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
52 ** YYSTACKDEPTH is the maximum depth of the parser's stack. If |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
53 ** zero the stack is dynamically sized using realloc() |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
54 ** ParseARG_SDECL A static variable declaration for the %extra_argument |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
55 ** ParseARG_PDECL A parameter declaration for the %extra_argument |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
56 ** ParseARG_STORE Code to store %extra_argument into yypParser |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
57 ** ParseARG_FETCH Code to extract %extra_argument from yypParser |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
58 ** YYNSTATE the combined number of states. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
59 ** YYNRULE the number of rules in the grammar |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
60 ** YYERRORSYMBOL is the code number of the error symbol. If not |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
61 ** defined, then do no error processing. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
62 */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
63 #define YYCODETYPE unsigned char |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
64 #define YYNOCODE 30 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
65 #define YYACTIONTYPE unsigned char |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
66 #define ParseTOKENTYPE struct tokendata * |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
67 typedef union { |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
68 int yyinit; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
69 ParseTOKENTYPE yy0; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
70 node_t * yy18; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
71 } YYMINORTYPE; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
72 #ifndef YYSTACKDEPTH |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
73 #define YYSTACKDEPTH 100 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
74 #endif |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
75 #define ParseARG_SDECL struct parserinfo *pinfo ; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
76 #define ParseARG_PDECL , struct parserinfo *pinfo |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
77 #define ParseARG_FETCH struct parserinfo *pinfo = yypParser->pinfo |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
78 #define ParseARG_STORE yypParser->pinfo = pinfo |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
79 #define YYNSTATE 36 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
80 #define YYNRULE 30 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
81 #define YY_NO_ACTION (YYNSTATE+YYNRULE+2) |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
82 #define YY_ACCEPT_ACTION (YYNSTATE+YYNRULE+1) |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
83 #define YY_ERROR_ACTION (YYNSTATE+YYNRULE) |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
84 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
85 /* The yyzerominor constant is used to initialize instances of |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
86 ** YYMINORTYPE objects to zero. */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
87 static const YYMINORTYPE yyzerominor = { 0 }; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
88 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
89 /* Define the yytestcase() macro to be a no-op if is not already defined |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
90 ** otherwise. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
91 ** |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
92 ** Applications can choose to define yytestcase() in the %include section |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
93 ** to a macro that can assist in verifying code coverage. For production |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
94 ** code the yytestcase() macro should be turned off. But it is useful |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
95 ** for testing. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
96 */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
97 #ifndef yytestcase |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
98 # define yytestcase(X) |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
99 #endif |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
100 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
101 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
102 /* Next are the tables used to determine what action to take based on the |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
103 ** current state and lookahead token. These tables are used to implement |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
104 ** functions that take a state number and lookahead value and return an |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
105 ** action integer. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
106 ** |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
107 ** Suppose the action integer is N. Then the action is determined as |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
108 ** follows |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
109 ** |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
110 ** 0 <= N < YYNSTATE Shift N. That is, push the lookahead |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
111 ** token onto the stack and goto state N. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
112 ** |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
113 ** YYNSTATE <= N < YYNSTATE+YYNRULE Reduce by rule N-YYNSTATE. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
114 ** |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
115 ** N == YYNSTATE+YYNRULE A syntax error has occurred. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
116 ** |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
117 ** N == YYNSTATE+YYNRULE+1 The parser accepts its input. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
118 ** |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
119 ** N == YYNSTATE+YYNRULE+2 No such action. Denotes unused |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
120 ** slots in the yy_action[] table. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
121 ** |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
122 ** The action table is constructed as a single large table named yy_action[]. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
123 ** Given state S and lookahead X, the action is computed as |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
124 ** |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
125 ** yy_action[ yy_shift_ofst[S] + X ] |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
126 ** |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
127 ** If the index value yy_shift_ofst[S]+X is out of range or if the value |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
128 ** yy_lookahead[yy_shift_ofst[S]+X] is not equal to X or if yy_shift_ofst[S] |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
129 ** is equal to YY_SHIFT_USE_DFLT, it means that the action is not in the table |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
130 ** and that yy_default[S] should be used instead. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
131 ** |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
132 ** The formula above is for computing the action when the lookahead is |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
133 ** a terminal symbol. If the lookahead is a non-terminal (as occurs after |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
134 ** a reduce action) then the yy_reduce_ofst[] array is used in place of |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
135 ** the yy_shift_ofst[] array and YY_REDUCE_USE_DFLT is used in place of |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
136 ** YY_SHIFT_USE_DFLT. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
137 ** |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
138 ** The following are the tables generated in this section: |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
139 ** |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
140 ** yy_action[] A single table containing all actions. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
141 ** yy_lookahead[] A table containing the lookahead for each entry in |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
142 ** yy_action. Used to detect hash collisions. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
143 ** yy_shift_ofst[] For each state, the offset into yy_action for |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
144 ** shifting terminals. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
145 ** yy_reduce_ofst[] For each state, the offset into yy_action for |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
146 ** shifting non-terminals after a reduce. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
147 ** yy_default[] Default action for each state. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
148 */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
149 #define YY_ACTTAB_COUNT (44) |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
150 static const YYACTIONTYPE yy_action[] = { |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
151 /* 0 */ 36, 27, 26, 29, 24, 23, 22, 7, 3, 2, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
152 /* 10 */ 16, 9, 14, 35, 34, 33, 6, 8, 25, 18, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
153 /* 20 */ 16, 9, 14, 21, 10, 10, 32, 20, 20, 30, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
154 /* 30 */ 67, 1, 19, 28, 15, 5, 4, 68, 11, 68, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
155 /* 40 */ 17, 31, 13, 12, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
156 }; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
157 static const YYCODETYPE yy_lookahead[] = { |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
158 /* 0 */ 0, 2, 3, 16, 4, 5, 6, 7, 8, 9, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
159 /* 10 */ 10, 11, 12, 20, 21, 22, 23, 7, 25, 26, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
160 /* 20 */ 10, 11, 12, 6, 7, 7, 1, 10, 10, 1, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
161 /* 30 */ 18, 19, 10, 14, 10, 24, 27, 29, 13, 29, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
162 /* 40 */ 26, 28, 26, 15, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
163 }; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
164 #define YY_SHIFT_USE_DFLT (-14) |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
165 #define YY_SHIFT_COUNT (12) |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
166 #define YY_SHIFT_MIN (-13) |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
167 #define YY_SHIFT_MAX (28) |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
168 static const signed char yy_shift_ofst[] = { |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
169 /* 0 */ -14, 0, 10, 10, 28, 25, -1, 17, 18, 24, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
170 /* 10 */ 22, 19, -13, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
171 }; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
172 #define YY_REDUCE_USE_DFLT (-8) |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
173 #define YY_REDUCE_COUNT (6) |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
174 #define YY_REDUCE_MIN (-7) |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
175 #define YY_REDUCE_MAX (16) |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
176 static const signed char yy_reduce_ofst[] = { |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
177 /* 0 */ 12, -7, 16, 14, 13, 9, 11, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
178 }; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
179 static const YYACTIONTYPE yy_default[] = { |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
180 /* 0 */ 38, 66, 51, 50, 66, 66, 66, 55, 55, 58, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
181 /* 10 */ 57, 66, 66, 52, 61, 60, 54, 53, 49, 59, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
182 /* 20 */ 56, 48, 47, 46, 45, 43, 44, 42, 64, 65, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
183 /* 30 */ 63, 62, 41, 40, 39, 37, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
184 }; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
185 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
186 /* The next table maps tokens into fallback tokens. If a construct |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
187 ** like the following: |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
188 ** |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
189 ** %fallback ID X Y Z. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
190 ** |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
191 ** appears in the grammar, then ID becomes a fallback token for X, Y, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
192 ** and Z. Whenever one of the tokens X, Y, or Z is input to the parser |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
193 ** but it does not parse, the type of the token is changed to ID and |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
194 ** the parse is retried before an error is thrown. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
195 */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
196 #ifdef YYFALLBACK |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
197 static const YYCODETYPE yyFallback[] = { |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
198 }; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
199 #endif /* YYFALLBACK */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
200 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
201 /* The following structure represents a single element of the |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
202 ** parser's stack. Information stored includes: |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
203 ** |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
204 ** + The state number for the parser at this level of the stack. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
205 ** |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
206 ** + The value of the token stored at this level of the stack. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
207 ** (In other words, the "major" token.) |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
208 ** |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
209 ** + The semantic value stored at this level of the stack. This is |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
210 ** the information used by the action routines in the grammar. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
211 ** It is sometimes called the "minor" token. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
212 */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
213 struct yyStackEntry { |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
214 YYACTIONTYPE stateno; /* The state-number */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
215 YYCODETYPE major; /* The major token value. This is the code |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
216 ** number for the token at this stack level */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
217 YYMINORTYPE minor; /* The user-supplied minor token value. This |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
218 ** is the value of the token */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
219 }; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
220 typedef struct yyStackEntry yyStackEntry; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
221 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
222 /* The state of the parser is completely contained in an instance of |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
223 ** the following structure */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
224 struct yyParser { |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
225 int yyidx; /* Index of top element in stack */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
226 #ifdef YYTRACKMAXSTACKDEPTH |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
227 int yyidxMax; /* Maximum value of yyidx */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
228 #endif |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
229 int yyerrcnt; /* Shifts left before out of the error */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
230 ParseARG_SDECL /* A place to hold %extra_argument */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
231 #if YYSTACKDEPTH<=0 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
232 int yystksz; /* Current side of the stack */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
233 yyStackEntry *yystack; /* The parser's stack */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
234 #else |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
235 yyStackEntry yystack[YYSTACKDEPTH]; /* The parser's stack */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
236 #endif |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
237 }; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
238 typedef struct yyParser yyParser; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
239 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
240 #ifndef NDEBUG |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
241 #include <stdio.h> |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
242 static FILE *yyTraceFILE = 0; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
243 static char *yyTracePrompt = 0; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
244 #endif /* NDEBUG */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
245 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
246 #ifndef NDEBUG |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
247 /* |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
248 ** Turn parser tracing on by giving a stream to which to write the trace |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
249 ** and a prompt to preface each trace message. Tracing is turned off |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
250 ** by making either argument NULL |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
251 ** |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
252 ** Inputs: |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
253 ** <ul> |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
254 ** <li> A FILE* to which trace output should be written. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
255 ** If NULL, then tracing is turned off. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
256 ** <li> A prefix string written at the beginning of every |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
257 ** line of trace output. If NULL, then tracing is |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
258 ** turned off. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
259 ** </ul> |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
260 ** |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
261 ** Outputs: |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
262 ** None. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
263 */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
264 void ParseTrace(FILE *TraceFILE, char *zTracePrompt){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
265 yyTraceFILE = TraceFILE; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
266 yyTracePrompt = zTracePrompt; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
267 if( yyTraceFILE==0 ) yyTracePrompt = 0; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
268 else if( yyTracePrompt==0 ) yyTraceFILE = 0; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
269 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
270 #endif /* NDEBUG */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
271 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
272 #ifndef NDEBUG |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
273 /* For tracing shifts, the names of all terminals and nonterminals |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
274 ** are required. The following table supplies these names */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
275 static const char *const yyTokenName[] = { |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
276 "$", "ENDS", "IDENTIFIER", "STAR", |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
277 "KW_VOID", "KW_FLOAT", "KW_DOUBLE", "KW_LONG", |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
278 "KW_UNSIGNED", "KW_SIGNED", "KW_INT", "KW_SHORT", |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
279 "KW_CHAR", "OPAREN", "CPAREN", "OBRACE", |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
280 "CBRACE", "error", "program", "rprogram", |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
281 "globaldecl", "vardecl", "fundecl", "datatype", |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
282 "ident", "typename", "baseint", "arglist", |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
283 "statementblock", |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
284 }; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
285 #endif /* NDEBUG */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
286 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
287 #ifndef NDEBUG |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
288 /* For tracing reduce actions, the names of all rules are required. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
289 */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
290 static const char *const yyRuleName[] = { |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
291 /* 0 */ "program ::= rprogram", |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
292 /* 1 */ "rprogram ::= rprogram globaldecl", |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
293 /* 2 */ "rprogram ::=", |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
294 /* 3 */ "globaldecl ::= vardecl", |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
295 /* 4 */ "globaldecl ::= fundecl", |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
296 /* 5 */ "vardecl ::= datatype ident ENDS", |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
297 /* 6 */ "ident ::= IDENTIFIER", |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
298 /* 7 */ "datatype ::= typename", |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
299 /* 8 */ "datatype ::= datatype STAR", |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
300 /* 9 */ "typename ::= KW_VOID", |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
301 /* 10 */ "typename ::= KW_FLOAT", |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
302 /* 11 */ "typename ::= KW_DOUBLE", |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
303 /* 12 */ "typename ::= KW_LONG KW_DOUBLE", |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
304 /* 13 */ "typename ::= baseint", |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
305 /* 14 */ "typename ::= KW_UNSIGNED", |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
306 /* 15 */ "typename ::= KW_SIGNED", |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
307 /* 16 */ "typename ::= KW_SIGNED baseint", |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
308 /* 17 */ "typename ::= KW_UNSIGNED baseint", |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
309 /* 18 */ "baseint ::= KW_INT", |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
310 /* 19 */ "baseint ::= KW_LONG", |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
311 /* 20 */ "baseint ::= KW_LONG KW_INT", |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
312 /* 21 */ "baseint ::= KW_LONG KW_LONG", |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
313 /* 22 */ "baseint ::= KW_SHORT", |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
314 /* 23 */ "baseint ::= KW_LONG KW_LONG KW_INT", |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
315 /* 24 */ "baseint ::= KW_SHORT KW_INT", |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
316 /* 25 */ "baseint ::= KW_CHAR", |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
317 /* 26 */ "fundecl ::= datatype ident arglist statementblock", |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
318 /* 27 */ "fundecl ::= datatype ident arglist ENDS", |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
319 /* 28 */ "arglist ::= OPAREN CPAREN", |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
320 /* 29 */ "statementblock ::= OBRACE CBRACE", |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
321 }; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
322 #endif /* NDEBUG */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
323 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
324 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
325 #if YYSTACKDEPTH<=0 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
326 /* |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
327 ** Try to increase the size of the parser stack. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
328 */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
329 static void yyGrowStack(yyParser *p){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
330 int newSize; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
331 yyStackEntry *pNew; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
332 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
333 newSize = p->yystksz*2 + 100; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
334 pNew = realloc(p->yystack, newSize*sizeof(pNew[0])); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
335 if( pNew ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
336 p->yystack = pNew; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
337 p->yystksz = newSize; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
338 #ifndef NDEBUG |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
339 if( yyTraceFILE ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
340 fprintf(yyTraceFILE,"%sStack grows to %d entries!\n", |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
341 yyTracePrompt, p->yystksz); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
342 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
343 #endif |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
344 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
345 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
346 #endif |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
347 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
348 /* |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
349 ** This function allocates a new parser. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
350 ** The only argument is a pointer to a function which works like |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
351 ** malloc. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
352 ** |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
353 ** Inputs: |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
354 ** A pointer to the function used to allocate memory. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
355 ** |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
356 ** Outputs: |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
357 ** A pointer to a parser. This pointer is used in subsequent calls |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
358 ** to Parse and ParseFree. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
359 */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
360 void *ParseAlloc(void *(*mallocProc)(size_t)){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
361 yyParser *pParser; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
362 pParser = (yyParser*)(*mallocProc)( (size_t)sizeof(yyParser) ); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
363 if( pParser ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
364 pParser->yyidx = -1; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
365 #ifdef YYTRACKMAXSTACKDEPTH |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
366 pParser->yyidxMax = 0; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
367 #endif |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
368 #if YYSTACKDEPTH<=0 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
369 pParser->yystack = NULL; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
370 pParser->yystksz = 0; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
371 yyGrowStack(pParser); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
372 #endif |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
373 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
374 return pParser; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
375 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
376 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
377 /* The following function deletes the value associated with a |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
378 ** symbol. The symbol can be either a terminal or nonterminal. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
379 ** "yymajor" is the symbol code, and "yypminor" is a pointer to |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
380 ** the value. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
381 */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
382 static void yy_destructor( |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
383 yyParser *yypParser, /* The parser */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
384 YYCODETYPE yymajor, /* Type code for object to destroy */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
385 YYMINORTYPE *yypminor /* The object to be destroyed */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
386 ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
387 ParseARG_FETCH; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
388 switch( yymajor ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
389 /* Here is inserted the actions which take place when a |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
390 ** terminal or non-terminal is destroyed. This can happen |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
391 ** when the symbol is popped from the stack during a |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
392 ** reduce or during error processing or when a parser is |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
393 ** being destroyed before it is finished parsing. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
394 ** |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
395 ** Note: during a reduce, the only symbols destroyed are those |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
396 ** which appear on the RHS of the rule, but which are not used |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
397 ** inside the C code. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
398 */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
399 /* TERMINAL Destructor */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
400 case 1: /* ENDS */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
401 case 2: /* IDENTIFIER */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
402 case 3: /* STAR */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
403 case 4: /* KW_VOID */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
404 case 5: /* KW_FLOAT */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
405 case 6: /* KW_DOUBLE */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
406 case 7: /* KW_LONG */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
407 case 8: /* KW_UNSIGNED */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
408 case 9: /* KW_SIGNED */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
409 case 10: /* KW_INT */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
410 case 11: /* KW_SHORT */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
411 case 12: /* KW_CHAR */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
412 case 13: /* OPAREN */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
413 case 14: /* CPAREN */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
414 case 15: /* OBRACE */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
415 case 16: /* CBRACE */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
416 { |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
417 #line 10 "lwcc/parse_c.y" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
418 tokendata_free((yypminor->yy0)); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
419 #line 420 "lwcc/parse_c.c" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
420 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
421 break; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
422 default: break; /* If no destructor action specified: do nothing */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
423 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
424 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
425 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
426 /* |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
427 ** Pop the parser's stack once. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
428 ** |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
429 ** If there is a destructor routine associated with the token which |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
430 ** is popped from the stack, then call it. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
431 ** |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
432 ** Return the major token number for the symbol popped. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
433 */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
434 static int yy_pop_parser_stack(yyParser *pParser){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
435 YYCODETYPE yymajor; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
436 yyStackEntry *yytos = &pParser->yystack[pParser->yyidx]; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
437 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
438 if( pParser->yyidx<0 ) return 0; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
439 #ifndef NDEBUG |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
440 if( yyTraceFILE && pParser->yyidx>=0 ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
441 fprintf(yyTraceFILE,"%sPopping %s\n", |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
442 yyTracePrompt, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
443 yyTokenName[yytos->major]); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
444 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
445 #endif |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
446 yymajor = yytos->major; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
447 yy_destructor(pParser, yymajor, &yytos->minor); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
448 pParser->yyidx--; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
449 return yymajor; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
450 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
451 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
452 /* |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
453 ** Deallocate and destroy a parser. Destructors are all called for |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
454 ** all stack elements before shutting the parser down. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
455 ** |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
456 ** Inputs: |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
457 ** <ul> |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
458 ** <li> A pointer to the parser. This should be a pointer |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
459 ** obtained from ParseAlloc. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
460 ** <li> A pointer to a function used to reclaim memory obtained |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
461 ** from malloc. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
462 ** </ul> |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
463 */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
464 void ParseFree( |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
465 void *p, /* The parser to be deleted */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
466 void (*freeProc)(void*) /* Function used to reclaim memory */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
467 ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
468 yyParser *pParser = (yyParser*)p; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
469 if( pParser==0 ) return; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
470 while( pParser->yyidx>=0 ) yy_pop_parser_stack(pParser); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
471 #if YYSTACKDEPTH<=0 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
472 free(pParser->yystack); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
473 #endif |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
474 (*freeProc)((void*)pParser); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
475 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
476 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
477 /* |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
478 ** Return the peak depth of the stack for a parser. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
479 */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
480 #ifdef YYTRACKMAXSTACKDEPTH |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
481 int ParseStackPeak(void *p){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
482 yyParser *pParser = (yyParser*)p; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
483 return pParser->yyidxMax; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
484 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
485 #endif |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
486 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
487 /* |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
488 ** Find the appropriate action for a parser given the terminal |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
489 ** look-ahead token iLookAhead. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
490 ** |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
491 ** If the look-ahead token is YYNOCODE, then check to see if the action is |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
492 ** independent of the look-ahead. If it is, return the action, otherwise |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
493 ** return YY_NO_ACTION. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
494 */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
495 static int yy_find_shift_action( |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
496 yyParser *pParser, /* The parser */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
497 YYCODETYPE iLookAhead /* The look-ahead token */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
498 ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
499 int i; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
500 int stateno = pParser->yystack[pParser->yyidx].stateno; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
501 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
502 if( stateno>YY_SHIFT_COUNT |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
503 || (i = yy_shift_ofst[stateno])==YY_SHIFT_USE_DFLT ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
504 return yy_default[stateno]; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
505 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
506 assert( iLookAhead!=YYNOCODE ); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
507 i += iLookAhead; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
508 if( i<0 || i>=YY_ACTTAB_COUNT || yy_lookahead[i]!=iLookAhead ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
509 if( iLookAhead>0 ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
510 #ifdef YYFALLBACK |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
511 YYCODETYPE iFallback; /* Fallback token */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
512 if( iLookAhead<sizeof(yyFallback)/sizeof(yyFallback[0]) |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
513 && (iFallback = yyFallback[iLookAhead])!=0 ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
514 #ifndef NDEBUG |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
515 if( yyTraceFILE ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
516 fprintf(yyTraceFILE, "%sFALLBACK %s => %s\n", |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
517 yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[iFallback]); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
518 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
519 #endif |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
520 return yy_find_shift_action(pParser, iFallback); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
521 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
522 #endif |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
523 #ifdef YYWILDCARD |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
524 { |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
525 int j = i - iLookAhead + YYWILDCARD; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
526 if( |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
527 #if YY_SHIFT_MIN+YYWILDCARD<0 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
528 j>=0 && |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
529 #endif |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
530 #if YY_SHIFT_MAX+YYWILDCARD>=YY_ACTTAB_COUNT |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
531 j<YY_ACTTAB_COUNT && |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
532 #endif |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
533 yy_lookahead[j]==YYWILDCARD |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
534 ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
535 #ifndef NDEBUG |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
536 if( yyTraceFILE ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
537 fprintf(yyTraceFILE, "%sWILDCARD %s => %s\n", |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
538 yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[YYWILDCARD]); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
539 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
540 #endif /* NDEBUG */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
541 return yy_action[j]; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
542 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
543 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
544 #endif /* YYWILDCARD */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
545 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
546 return yy_default[stateno]; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
547 }else{ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
548 return yy_action[i]; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
549 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
550 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
551 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
552 /* |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
553 ** Find the appropriate action for a parser given the non-terminal |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
554 ** look-ahead token iLookAhead. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
555 ** |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
556 ** If the look-ahead token is YYNOCODE, then check to see if the action is |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
557 ** independent of the look-ahead. If it is, return the action, otherwise |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
558 ** return YY_NO_ACTION. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
559 */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
560 static int yy_find_reduce_action( |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
561 int stateno, /* Current state number */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
562 YYCODETYPE iLookAhead /* The look-ahead token */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
563 ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
564 int i; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
565 #ifdef YYERRORSYMBOL |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
566 if( stateno>YY_REDUCE_COUNT ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
567 return yy_default[stateno]; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
568 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
569 #else |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
570 assert( stateno<=YY_REDUCE_COUNT ); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
571 #endif |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
572 i = yy_reduce_ofst[stateno]; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
573 assert( i!=YY_REDUCE_USE_DFLT ); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
574 assert( iLookAhead!=YYNOCODE ); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
575 i += iLookAhead; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
576 #ifdef YYERRORSYMBOL |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
577 if( i<0 || i>=YY_ACTTAB_COUNT || yy_lookahead[i]!=iLookAhead ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
578 return yy_default[stateno]; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
579 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
580 #else |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
581 assert( i>=0 && i<YY_ACTTAB_COUNT ); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
582 assert( yy_lookahead[i]==iLookAhead ); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
583 #endif |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
584 return yy_action[i]; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
585 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
586 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
587 /* |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
588 ** The following routine is called if the stack overflows. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
589 */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
590 static void yyStackOverflow(yyParser *yypParser, YYMINORTYPE *yypMinor){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
591 ParseARG_FETCH; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
592 yypParser->yyidx--; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
593 #ifndef NDEBUG |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
594 if( yyTraceFILE ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
595 fprintf(yyTraceFILE,"%sStack Overflow!\n",yyTracePrompt); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
596 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
597 #endif |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
598 while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
599 /* Here code is inserted which will execute if the parser |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
600 ** stack every overflows */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
601 #line 90 "lwcc/parse_c.y" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
602 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
603 fprintf(stderr, "Parser stack overflow\n"); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
604 #line 605 "lwcc/parse_c.c" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
605 ParseARG_STORE; /* Suppress warning about unused %extra_argument var */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
606 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
607 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
608 /* |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
609 ** Perform a shift action. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
610 */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
611 static void yy_shift( |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
612 yyParser *yypParser, /* The parser to be shifted */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
613 int yyNewState, /* The new state to shift in */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
614 int yyMajor, /* The major token to shift in */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
615 YYMINORTYPE *yypMinor /* Pointer to the minor token to shift in */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
616 ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
617 yyStackEntry *yytos; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
618 yypParser->yyidx++; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
619 #ifdef YYTRACKMAXSTACKDEPTH |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
620 if( yypParser->yyidx>yypParser->yyidxMax ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
621 yypParser->yyidxMax = yypParser->yyidx; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
622 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
623 #endif |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
624 #if YYSTACKDEPTH>0 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
625 if( yypParser->yyidx>=YYSTACKDEPTH ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
626 yyStackOverflow(yypParser, yypMinor); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
627 return; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
628 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
629 #else |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
630 if( yypParser->yyidx>=yypParser->yystksz ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
631 yyGrowStack(yypParser); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
632 if( yypParser->yyidx>=yypParser->yystksz ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
633 yyStackOverflow(yypParser, yypMinor); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
634 return; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
635 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
636 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
637 #endif |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
638 yytos = &yypParser->yystack[yypParser->yyidx]; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
639 yytos->stateno = (YYACTIONTYPE)yyNewState; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
640 yytos->major = (YYCODETYPE)yyMajor; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
641 yytos->minor = *yypMinor; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
642 #ifndef NDEBUG |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
643 if( yyTraceFILE && yypParser->yyidx>0 ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
644 int i; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
645 fprintf(yyTraceFILE,"%sShift %d\n",yyTracePrompt,yyNewState); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
646 fprintf(yyTraceFILE,"%sStack:",yyTracePrompt); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
647 for(i=1; i<=yypParser->yyidx; i++) |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
648 fprintf(yyTraceFILE," %s",yyTokenName[yypParser->yystack[i].major]); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
649 fprintf(yyTraceFILE,"\n"); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
650 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
651 #endif |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
652 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
653 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
654 /* The following table contains information about every rule that |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
655 ** is used during the reduce. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
656 */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
657 static const struct { |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
658 YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
659 unsigned char nrhs; /* Number of right-hand side symbols in the rule */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
660 } yyRuleInfo[] = { |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
661 { 18, 1 }, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
662 { 19, 2 }, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
663 { 19, 0 }, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
664 { 20, 1 }, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
665 { 20, 1 }, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
666 { 21, 3 }, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
667 { 24, 1 }, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
668 { 23, 1 }, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
669 { 23, 2 }, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
670 { 25, 1 }, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
671 { 25, 1 }, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
672 { 25, 1 }, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
673 { 25, 2 }, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
674 { 25, 1 }, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
675 { 25, 1 }, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
676 { 25, 1 }, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
677 { 25, 2 }, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
678 { 25, 2 }, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
679 { 26, 1 }, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
680 { 26, 1 }, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
681 { 26, 2 }, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
682 { 26, 2 }, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
683 { 26, 1 }, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
684 { 26, 3 }, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
685 { 26, 2 }, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
686 { 26, 1 }, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
687 { 22, 4 }, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
688 { 22, 4 }, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
689 { 27, 2 }, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
690 { 28, 2 }, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
691 }; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
692 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
693 static void yy_accept(yyParser*); /* Forward Declaration */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
694 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
695 /* |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
696 ** Perform a reduce action and the shift that must immediately |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
697 ** follow the reduce. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
698 */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
699 static void yy_reduce( |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
700 yyParser *yypParser, /* The parser */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
701 int yyruleno /* Number of the rule by which to reduce */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
702 ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
703 int yygoto; /* The next state */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
704 int yyact; /* The next action */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
705 YYMINORTYPE yygotominor; /* The LHS of the rule reduced */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
706 yyStackEntry *yymsp; /* The top of the parser's stack */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
707 int yysize; /* Amount to pop the stack */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
708 ParseARG_FETCH; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
709 yymsp = &yypParser->yystack[yypParser->yyidx]; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
710 #ifndef NDEBUG |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
711 if( yyTraceFILE && yyruleno>=0 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
712 && yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
713 fprintf(yyTraceFILE, "%sReduce [%s].\n", yyTracePrompt, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
714 yyRuleName[yyruleno]); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
715 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
716 #endif /* NDEBUG */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
717 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
718 /* Silence complaints from purify about yygotominor being uninitialized |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
719 ** in some cases when it is copied into the stack after the following |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
720 ** switch. yygotominor is uninitialized when a rule reduces that does |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
721 ** not set the value of its left-hand side nonterminal. Leaving the |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
722 ** value of the nonterminal uninitialized is utterly harmless as long |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
723 ** as the value is never used. So really the only thing this code |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
724 ** accomplishes is to quieten purify. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
725 ** |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
726 ** 2007-01-16: The wireshark project (www.wireshark.org) reports that |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
727 ** without this code, their parser segfaults. I'm not sure what there |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
728 ** parser is doing to make this happen. This is the second bug report |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
729 ** from wireshark this week. Clearly they are stressing Lemon in ways |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
730 ** that it has not been previously stressed... (SQLite ticket #2172) |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
731 */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
732 /*memset(&yygotominor, 0, sizeof(yygotominor));*/ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
733 yygotominor = yyzerominor; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
734 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
735 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
736 switch( yyruleno ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
737 /* Beginning here are the reduction cases. A typical example |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
738 ** follows: |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
739 ** case 0: |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
740 ** #line <lineno> <grammarfile> |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
741 ** { ... } // User supplied code |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
742 ** #line <lineno> <thisfile> |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
743 ** break; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
744 */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
745 case 0: /* program ::= rprogram */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
746 #line 14 "lwcc/parse_c.y" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
747 { yygotominor.yy18 = yymsp[0].minor.yy18; pinfo -> parsetree = yygotominor.yy18; } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
748 #line 749 "lwcc/parse_c.c" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
749 break; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
750 case 1: /* rprogram ::= rprogram globaldecl */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
751 #line 16 "lwcc/parse_c.y" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
752 { |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
753 yygotominor.yy18 = yymsp[-1].minor.yy18; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
754 node_addchild(yygotominor.yy18, yymsp[0].minor.yy18); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
755 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
756 #line 757 "lwcc/parse_c.c" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
757 break; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
758 case 2: /* rprogram ::= */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
759 #line 20 "lwcc/parse_c.y" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
760 { yygotominor.yy18 = node_create(NODE_PROGRAM); } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
761 #line 762 "lwcc/parse_c.c" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
762 break; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
763 case 3: /* globaldecl ::= vardecl */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
764 case 4: /* globaldecl ::= fundecl */ yytestcase(yyruleno==4); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
765 case 7: /* datatype ::= typename */ yytestcase(yyruleno==7); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
766 case 13: /* typename ::= baseint */ yytestcase(yyruleno==13); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
767 #line 22 "lwcc/parse_c.y" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
768 { yygotominor.yy18 = yymsp[0].minor.yy18; } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
769 #line 770 "lwcc/parse_c.c" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
770 break; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
771 case 5: /* vardecl ::= datatype ident ENDS */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
772 #line 25 "lwcc/parse_c.y" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
773 { |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
774 yygotominor.yy18 = node_create(NODE_DECL, yymsp[-2].minor.yy18, yymsp[-1].minor.yy18); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
775 yy_destructor(yypParser,1,&yymsp[0].minor); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
776 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
777 #line 778 "lwcc/parse_c.c" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
778 break; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
779 case 6: /* ident ::= IDENTIFIER */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
780 #line 29 "lwcc/parse_c.y" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
781 { yygotominor.yy18 = node_create(NODE_IDENT, yymsp[0].minor.yy0 -> strval); } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
782 #line 783 "lwcc/parse_c.c" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
783 break; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
784 case 8: /* datatype ::= datatype STAR */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
785 #line 32 "lwcc/parse_c.y" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
786 { yygotominor.yy18 = node_create(NODE_TYPE_PTR, yymsp[-1].minor.yy18); yy_destructor(yypParser,3,&yymsp[0].minor); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
787 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
788 #line 789 "lwcc/parse_c.c" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
789 break; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
790 case 9: /* typename ::= KW_VOID */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
791 #line 34 "lwcc/parse_c.y" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
792 { yygotominor.yy18 = node_create(NODE_TYPE_VOID); yy_destructor(yypParser,4,&yymsp[0].minor); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
793 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
794 #line 795 "lwcc/parse_c.c" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
795 break; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
796 case 10: /* typename ::= KW_FLOAT */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
797 #line 35 "lwcc/parse_c.y" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
798 { yygotominor.yy18 = node_create(NODE_TYPE_FLOAT); yy_destructor(yypParser,5,&yymsp[0].minor); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
799 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
800 #line 801 "lwcc/parse_c.c" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
801 break; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
802 case 11: /* typename ::= KW_DOUBLE */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
803 #line 36 "lwcc/parse_c.y" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
804 { yygotominor.yy18 = node_create(NODE_TYPE_DOUBLE); yy_destructor(yypParser,6,&yymsp[0].minor); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
805 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
806 #line 807 "lwcc/parse_c.c" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
807 break; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
808 case 12: /* typename ::= KW_LONG KW_DOUBLE */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
809 #line 37 "lwcc/parse_c.y" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
810 { yygotominor.yy18 = node_create(NODE_TYPE_LDOUBLE); yy_destructor(yypParser,7,&yymsp[-1].minor); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
811 yy_destructor(yypParser,6,&yymsp[0].minor); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
812 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
813 #line 814 "lwcc/parse_c.c" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
814 break; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
815 case 14: /* typename ::= KW_UNSIGNED */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
816 #line 39 "lwcc/parse_c.y" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
817 { yygotominor.yy18 = node_create(NODE_TYPE_UINT); yy_destructor(yypParser,8,&yymsp[0].minor); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
818 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
819 #line 820 "lwcc/parse_c.c" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
820 break; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
821 case 15: /* typename ::= KW_SIGNED */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
822 #line 40 "lwcc/parse_c.y" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
823 { yygotominor.yy18 = node_create(NODE_TYPE_INT); yy_destructor(yypParser,9,&yymsp[0].minor); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
824 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
825 #line 826 "lwcc/parse_c.c" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
826 break; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
827 case 16: /* typename ::= KW_SIGNED baseint */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
828 #line 41 "lwcc/parse_c.y" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
829 { yygotominor.yy18 = yymsp[0].minor.yy18; if (yygotominor.yy18 -> type == NODE_TYPE_CHAR) yygotominor.yy18 -> type = NODE_TYPE_SCHAR; yy_destructor(yypParser,9,&yymsp[-1].minor); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
830 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
831 #line 832 "lwcc/parse_c.c" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
832 break; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
833 case 17: /* typename ::= KW_UNSIGNED baseint */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
834 #line 42 "lwcc/parse_c.y" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
835 { |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
836 yygotominor.yy18 = yymsp[0].minor.yy18; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
837 switch (yygotominor.yy18 -> type) |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
838 { |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
839 case NODE_TYPE_CHAR: |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
840 yygotominor.yy18 -> type = NODE_TYPE_UCHAR; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
841 break; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
842 case NODE_TYPE_SHORT: |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
843 yygotominor.yy18 -> type = NODE_TYPE_USHORT; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
844 break; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
845 case NODE_TYPE_INT: |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
846 yygotominor.yy18 -> type = NODE_TYPE_UINT; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
847 break; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
848 case NODE_TYPE_LONG: |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
849 yygotominor.yy18 -> type = NODE_TYPE_ULONG; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
850 break; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
851 case NODE_TYPE_LONGLONG: |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
852 yygotominor.yy18 -> type = NODE_TYPE_ULONGLONG; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
853 break; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
854 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
855 yy_destructor(yypParser,8,&yymsp[-1].minor); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
856 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
857 #line 858 "lwcc/parse_c.c" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
858 break; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
859 case 18: /* baseint ::= KW_INT */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
860 #line 64 "lwcc/parse_c.y" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
861 { yygotominor.yy18 = node_create(NODE_TYPE_INT); yy_destructor(yypParser,10,&yymsp[0].minor); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
862 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
863 #line 864 "lwcc/parse_c.c" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
864 break; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
865 case 19: /* baseint ::= KW_LONG */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
866 #line 65 "lwcc/parse_c.y" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
867 { yygotominor.yy18 = node_create(NODE_TYPE_LONG); yy_destructor(yypParser,7,&yymsp[0].minor); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
868 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
869 #line 870 "lwcc/parse_c.c" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
870 break; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
871 case 20: /* baseint ::= KW_LONG KW_INT */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
872 #line 66 "lwcc/parse_c.y" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
873 { yygotominor.yy18 = node_create(NODE_TYPE_LONG); yy_destructor(yypParser,7,&yymsp[-1].minor); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
874 yy_destructor(yypParser,10,&yymsp[0].minor); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
875 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
876 #line 877 "lwcc/parse_c.c" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
877 break; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
878 case 21: /* baseint ::= KW_LONG KW_LONG */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
879 #line 67 "lwcc/parse_c.y" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
880 { yygotominor.yy18 = node_create(NODE_TYPE_LONGLONG); yy_destructor(yypParser,7,&yymsp[-1].minor); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
881 yy_destructor(yypParser,7,&yymsp[0].minor); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
882 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
883 #line 884 "lwcc/parse_c.c" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
884 break; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
885 case 22: /* baseint ::= KW_SHORT */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
886 #line 68 "lwcc/parse_c.y" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
887 { yygotominor.yy18 = node_create(NODE_TYPE_SHORT); yy_destructor(yypParser,11,&yymsp[0].minor); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
888 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
889 #line 890 "lwcc/parse_c.c" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
890 break; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
891 case 23: /* baseint ::= KW_LONG KW_LONG KW_INT */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
892 #line 69 "lwcc/parse_c.y" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
893 { yygotominor.yy18 = node_create(NODE_TYPE_LONGLONG); yy_destructor(yypParser,7,&yymsp[-2].minor); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
894 yy_destructor(yypParser,7,&yymsp[-1].minor); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
895 yy_destructor(yypParser,10,&yymsp[0].minor); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
896 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
897 #line 898 "lwcc/parse_c.c" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
898 break; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
899 case 24: /* baseint ::= KW_SHORT KW_INT */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
900 #line 70 "lwcc/parse_c.y" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
901 { yygotominor.yy18 = node_create(NODE_TYPE_SHORT); yy_destructor(yypParser,11,&yymsp[-1].minor); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
902 yy_destructor(yypParser,10,&yymsp[0].minor); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
903 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
904 #line 905 "lwcc/parse_c.c" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
905 break; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
906 case 25: /* baseint ::= KW_CHAR */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
907 #line 71 "lwcc/parse_c.y" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
908 { yygotominor.yy18 = node_create(NODE_TYPE_CHAR); yy_destructor(yypParser,12,&yymsp[0].minor); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
909 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
910 #line 911 "lwcc/parse_c.c" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
911 break; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
912 case 26: /* fundecl ::= datatype ident arglist statementblock */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
913 #line 74 "lwcc/parse_c.y" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
914 { |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
915 yygotominor.yy18 = node_create(NODE_FUNDEF, yymsp[-3].minor.yy18, yymsp[-2].minor.yy18, yymsp[-1].minor.yy18, yymsp[0].minor.yy18); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
916 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
917 #line 918 "lwcc/parse_c.c" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
918 break; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
919 case 27: /* fundecl ::= datatype ident arglist ENDS */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
920 #line 78 "lwcc/parse_c.y" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
921 { |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
922 yygotominor.yy18 = node_create(NODE_FUNDECL, yymsp[-3].minor.yy18, yymsp[-2].minor.yy18, yymsp[-1].minor.yy18); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
923 yy_destructor(yypParser,1,&yymsp[0].minor); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
924 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
925 #line 926 "lwcc/parse_c.c" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
926 break; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
927 case 28: /* arglist ::= OPAREN CPAREN */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
928 #line 82 "lwcc/parse_c.y" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
929 { yygotominor.yy18 = node_create(NODE_FUNARGS); yy_destructor(yypParser,13,&yymsp[-1].minor); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
930 yy_destructor(yypParser,14,&yymsp[0].minor); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
931 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
932 #line 933 "lwcc/parse_c.c" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
933 break; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
934 case 29: /* statementblock ::= OBRACE CBRACE */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
935 #line 84 "lwcc/parse_c.y" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
936 { yygotominor.yy18 = node_create(NODE_BLOCK); yy_destructor(yypParser,15,&yymsp[-1].minor); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
937 yy_destructor(yypParser,16,&yymsp[0].minor); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
938 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
939 #line 940 "lwcc/parse_c.c" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
940 break; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
941 default: |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
942 break; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
943 }; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
944 yygoto = yyRuleInfo[yyruleno].lhs; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
945 yysize = yyRuleInfo[yyruleno].nrhs; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
946 yypParser->yyidx -= yysize; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
947 yyact = yy_find_reduce_action(yymsp[-yysize].stateno,(YYCODETYPE)yygoto); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
948 if( yyact < YYNSTATE ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
949 #ifdef NDEBUG |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
950 /* If we are not debugging and the reduce action popped at least |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
951 ** one element off the stack, then we can push the new element back |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
952 ** onto the stack here, and skip the stack overflow test in yy_shift(). |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
953 ** That gives a significant speed improvement. */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
954 if( yysize ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
955 yypParser->yyidx++; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
956 yymsp -= yysize-1; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
957 yymsp->stateno = (YYACTIONTYPE)yyact; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
958 yymsp->major = (YYCODETYPE)yygoto; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
959 yymsp->minor = yygotominor; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
960 }else |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
961 #endif |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
962 { |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
963 yy_shift(yypParser,yyact,yygoto,&yygotominor); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
964 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
965 }else{ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
966 assert( yyact == YYNSTATE + YYNRULE + 1 ); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
967 yy_accept(yypParser); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
968 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
969 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
970 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
971 /* |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
972 ** The following code executes when the parse fails |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
973 */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
974 #ifndef YYNOERRORRECOVERY |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
975 static void yy_parse_failed( |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
976 yyParser *yypParser /* The parser */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
977 ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
978 ParseARG_FETCH; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
979 #ifndef NDEBUG |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
980 if( yyTraceFILE ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
981 fprintf(yyTraceFILE,"%sFail!\n",yyTracePrompt); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
982 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
983 #endif |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
984 while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
985 /* Here code is inserted which will be executed whenever the |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
986 ** parser fails */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
987 #line 86 "lwcc/parse_c.y" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
988 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
989 fprintf(stderr, "Parse error\n"); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
990 #line 991 "lwcc/parse_c.c" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
991 ParseARG_STORE; /* Suppress warning about unused %extra_argument variable */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
992 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
993 #endif /* YYNOERRORRECOVERY */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
994 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
995 /* |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
996 ** The following code executes when a syntax error first occurs. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
997 */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
998 static void yy_syntax_error( |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
999 yyParser *yypParser, /* The parser */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1000 int yymajor, /* The major type of the error token */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1001 YYMINORTYPE yyminor /* The minor type of the error token */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1002 ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1003 ParseARG_FETCH; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1004 #define TOKEN (yyminor.yy0) |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1005 #line 94 "lwcc/parse_c.y" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1006 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1007 fprintf(stderr, "Undexpected token %d: ", TOKEN -> tokid); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1008 tokendata_print(stderr, TOKEN); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1009 #line 1010 "lwcc/parse_c.c" |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1010 ParseARG_STORE; /* Suppress warning about unused %extra_argument variable */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1011 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1012 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1013 /* |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1014 ** The following is executed when the parser accepts |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1015 */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1016 static void yy_accept( |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1017 yyParser *yypParser /* The parser */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1018 ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1019 ParseARG_FETCH; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1020 #ifndef NDEBUG |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1021 if( yyTraceFILE ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1022 fprintf(yyTraceFILE,"%sAccept!\n",yyTracePrompt); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1023 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1024 #endif |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1025 while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1026 /* Here code is inserted which will be executed whenever the |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1027 ** parser accepts */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1028 ParseARG_STORE; /* Suppress warning about unused %extra_argument variable */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1029 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1030 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1031 /* The main parser program. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1032 ** The first argument is a pointer to a structure obtained from |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1033 ** "ParseAlloc" which describes the current state of the parser. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1034 ** The second argument is the major token number. The third is |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1035 ** the minor token. The fourth optional argument is whatever the |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1036 ** user wants (and specified in the grammar) and is available for |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1037 ** use by the action routines. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1038 ** |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1039 ** Inputs: |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1040 ** <ul> |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1041 ** <li> A pointer to the parser (an opaque structure.) |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1042 ** <li> The major token number. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1043 ** <li> The minor token number. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1044 ** <li> An option argument of a grammar-specified type. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1045 ** </ul> |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1046 ** |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1047 ** Outputs: |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1048 ** None. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1049 */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1050 void Parse( |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1051 void *yyp, /* The parser */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1052 int yymajor, /* The major token code number */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1053 ParseTOKENTYPE yyminor /* The value for the token */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1054 ParseARG_PDECL /* Optional %extra_argument parameter */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1055 ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1056 YYMINORTYPE yyminorunion; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1057 int yyact; /* The parser action. */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1058 int yyendofinput; /* True if we are at the end of input */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1059 #ifdef YYERRORSYMBOL |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1060 int yyerrorhit = 0; /* True if yymajor has invoked an error */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1061 #endif |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1062 yyParser *yypParser; /* The parser */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1063 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1064 /* (re)initialize the parser, if necessary */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1065 yypParser = (yyParser*)yyp; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1066 if( yypParser->yyidx<0 ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1067 #if YYSTACKDEPTH<=0 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1068 if( yypParser->yystksz <=0 ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1069 /*memset(&yyminorunion, 0, sizeof(yyminorunion));*/ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1070 yyminorunion = yyzerominor; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1071 yyStackOverflow(yypParser, &yyminorunion); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1072 return; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1073 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1074 #endif |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1075 yypParser->yyidx = 0; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1076 yypParser->yyerrcnt = -1; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1077 yypParser->yystack[0].stateno = 0; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1078 yypParser->yystack[0].major = 0; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1079 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1080 yyminorunion.yy0 = yyminor; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1081 yyendofinput = (yymajor==0); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1082 ParseARG_STORE; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1083 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1084 #ifndef NDEBUG |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1085 if( yyTraceFILE ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1086 fprintf(yyTraceFILE,"%sInput %s\n",yyTracePrompt,yyTokenName[yymajor]); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1087 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1088 #endif |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1089 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1090 do{ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1091 yyact = yy_find_shift_action(yypParser,(YYCODETYPE)yymajor); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1092 if( yyact<YYNSTATE ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1093 assert( !yyendofinput ); /* Impossible to shift the $ token */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1094 yy_shift(yypParser,yyact,yymajor,&yyminorunion); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1095 yypParser->yyerrcnt--; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1096 yymajor = YYNOCODE; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1097 }else if( yyact < YYNSTATE + YYNRULE ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1098 yy_reduce(yypParser,yyact-YYNSTATE); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1099 }else{ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1100 assert( yyact == YY_ERROR_ACTION ); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1101 #ifdef YYERRORSYMBOL |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1102 int yymx; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1103 #endif |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1104 #ifndef NDEBUG |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1105 if( yyTraceFILE ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1106 fprintf(yyTraceFILE,"%sSyntax Error!\n",yyTracePrompt); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1107 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1108 #endif |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1109 #ifdef YYERRORSYMBOL |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1110 /* A syntax error has occurred. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1111 ** The response to an error depends upon whether or not the |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1112 ** grammar defines an error token "ERROR". |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1113 ** |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1114 ** This is what we do if the grammar does define ERROR: |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1115 ** |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1116 ** * Call the %syntax_error function. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1117 ** |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1118 ** * Begin popping the stack until we enter a state where |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1119 ** it is legal to shift the error symbol, then shift |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1120 ** the error symbol. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1121 ** |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1122 ** * Set the error count to three. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1123 ** |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1124 ** * Begin accepting and shifting new tokens. No new error |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1125 ** processing will occur until three tokens have been |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1126 ** shifted successfully. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1127 ** |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1128 */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1129 if( yypParser->yyerrcnt<0 ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1130 yy_syntax_error(yypParser,yymajor,yyminorunion); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1131 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1132 yymx = yypParser->yystack[yypParser->yyidx].major; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1133 if( yymx==YYERRORSYMBOL || yyerrorhit ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1134 #ifndef NDEBUG |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1135 if( yyTraceFILE ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1136 fprintf(yyTraceFILE,"%sDiscard input token %s\n", |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1137 yyTracePrompt,yyTokenName[yymajor]); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1138 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1139 #endif |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1140 yy_destructor(yypParser, (YYCODETYPE)yymajor,&yyminorunion); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1141 yymajor = YYNOCODE; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1142 }else{ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1143 while( |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1144 yypParser->yyidx >= 0 && |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1145 yymx != YYERRORSYMBOL && |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1146 (yyact = yy_find_reduce_action( |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1147 yypParser->yystack[yypParser->yyidx].stateno, |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1148 YYERRORSYMBOL)) >= YYNSTATE |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1149 ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1150 yy_pop_parser_stack(yypParser); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1151 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1152 if( yypParser->yyidx < 0 || yymajor==0 ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1153 yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1154 yy_parse_failed(yypParser); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1155 yymajor = YYNOCODE; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1156 }else if( yymx!=YYERRORSYMBOL ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1157 YYMINORTYPE u2; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1158 u2.YYERRSYMDT = 0; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1159 yy_shift(yypParser,yyact,YYERRORSYMBOL,&u2); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1160 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1161 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1162 yypParser->yyerrcnt = 3; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1163 yyerrorhit = 1; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1164 #elif defined(YYNOERRORRECOVERY) |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1165 /* If the YYNOERRORRECOVERY macro is defined, then do not attempt to |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1166 ** do any kind of error recovery. Instead, simply invoke the syntax |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1167 ** error routine and continue going as if nothing had happened. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1168 ** |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1169 ** Applications can set this macro (for example inside %include) if |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1170 ** they intend to abandon the parse upon the first syntax error seen. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1171 */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1172 yy_syntax_error(yypParser,yymajor,yyminorunion); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1173 yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1174 yymajor = YYNOCODE; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1175 |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1176 #else /* YYERRORSYMBOL is not defined */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1177 /* This is what we do if the grammar does not define ERROR: |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1178 ** |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1179 ** * Report an error message, and throw away the input token. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1180 ** |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1181 ** * If the input token is $, then fail the parse. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1182 ** |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1183 ** As before, subsequent error messages are suppressed until |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1184 ** three input tokens have been successfully shifted. |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1185 */ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1186 if( yypParser->yyerrcnt<=0 ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1187 yy_syntax_error(yypParser,yymajor,yyminorunion); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1188 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1189 yypParser->yyerrcnt = 3; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1190 yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1191 if( yyendofinput ){ |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1192 yy_parse_failed(yypParser); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1193 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1194 yymajor = YYNOCODE; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1195 #endif |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1196 } |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1197 }while( yymajor!=YYNOCODE && yypParser->yyidx>=0 ); |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1198 return; |
a3e277c58df9
Checkpoint parser development for lwcc
William Astle <lost@l-w.ca>
parents:
diff
changeset
|
1199 } |