diff options
Diffstat (limited to '')
-rw-r--r-- | LuaSL/src/LuaSL_lemon_yaccer.y | 72 |
1 files changed, 46 insertions, 26 deletions
diff --git a/LuaSL/src/LuaSL_lemon_yaccer.y b/LuaSL/src/LuaSL_lemon_yaccer.y index 5899052..3df7def 100644 --- a/LuaSL/src/LuaSL_lemon_yaccer.y +++ b/LuaSL/src/LuaSL_lemon_yaccer.y | |||
@@ -1,5 +1,5 @@ | |||
1 | %include { | 1 | %include { |
2 | #include "LuaSL_LSL_tree.h" | 2 | #include "LuaSL.h" |
3 | } | 3 | } |
4 | 4 | ||
5 | %extra_argument {LuaSL_yyparseParam *param} | 5 | %extra_argument {LuaSL_yyparseParam *param} |
@@ -89,40 +89,40 @@ exprList ::= expr. | |||
89 | exprList ::= . | 89 | exprList ::= . |
90 | 90 | ||
91 | %right LSL_BOOL_AND. | 91 | %right LSL_BOOL_AND. |
92 | expr(A) ::= expr(B) LSL_BOOL_AND(C) expr(D). { A = addOperation(B, C, D); } | 92 | expr(A) ::= expr(B) LSL_BOOL_AND(C) expr(D). { A = addOperation(param, B, C, D); } |
93 | %right LSL_BOOL_OR. | 93 | %right LSL_BOOL_OR. |
94 | expr(A) ::= expr(B) LSL_BOOL_OR(C) expr(D). { A = addOperation(B, C, D); } | 94 | expr(A) ::= expr(B) LSL_BOOL_OR(C) expr(D). { A = addOperation(param, B, C, D); } |
95 | 95 | ||
96 | %left LSL_BIT_AND LSL_BIT_XOR LSL_BIT_OR. | 96 | %left LSL_BIT_AND LSL_BIT_XOR LSL_BIT_OR. |
97 | expr(A) ::= expr(B) LSL_BIT_OR(C) expr(D). { A = addOperation(B, C, D); } | 97 | expr(A) ::= expr(B) LSL_BIT_OR(C) expr(D). { A = addOperation(param, B, C, D); } |
98 | expr(A) ::= expr(B) LSL_BIT_XOR(C) expr(D). { A = addOperation(B, C, D); } | 98 | expr(A) ::= expr(B) LSL_BIT_XOR(C) expr(D). { A = addOperation(param, B, C, D); } |
99 | expr(A) ::= expr(B) LSL_BIT_AND(C) expr(D). { A = addOperation(B, C, D); } | 99 | expr(A) ::= expr(B) LSL_BIT_AND(C) expr(D). { A = addOperation(param, B, C, D); } |
100 | 100 | ||
101 | %right LSL_EQUAL LSL_NOT_EQUAL. | 101 | %right LSL_EQUAL LSL_NOT_EQUAL. |
102 | expr(A) ::= expr(B) LSL_NOT_EQUAL(C) expr(D). { A = addOperation(B, C, D); } | 102 | expr(A) ::= expr(B) LSL_NOT_EQUAL(C) expr(D). { A = addOperation(param, B, C, D); } |
103 | expr(A) ::= expr(B) LSL_EQUAL(C) expr(D). { A = addOperation(B, C, D); } | 103 | expr(A) ::= expr(B) LSL_EQUAL(C) expr(D). { A = addOperation(param, B, C, D); } |
104 | %right LSL_LESS_THAN LSL_GREATER_THAN LSL_LESS_EQUAL LSL_GREATER_EQUAL. | 104 | %right LSL_LESS_THAN LSL_GREATER_THAN LSL_LESS_EQUAL LSL_GREATER_EQUAL. |
105 | expr(A) ::= expr(B) LSL_GREATER_EQUAL(C) expr(D). { A = addOperation(B, C, D); } | 105 | expr(A) ::= expr(B) LSL_GREATER_EQUAL(C) expr(D). { A = addOperation(param, B, C, D); } |
106 | expr(A) ::= expr(B) LSL_LESS_EQUAL(C) expr(D). { A = addOperation(B, C, D); } | 106 | expr(A) ::= expr(B) LSL_LESS_EQUAL(C) expr(D). { A = addOperation(param, B, C, D); } |
107 | expr(A) ::= expr(B) LSL_GREATER_THAN(C) expr(D). { A = addOperation(B, C, D); } | 107 | expr(A) ::= expr(B) LSL_GREATER_THAN(C) expr(D). { A = addOperation(param, B, C, D); } |
108 | expr(A) ::= expr(B) LSL_LESS_THAN(C) expr(D). { A = addOperation(B, C, D); } | 108 | expr(A) ::= expr(B) LSL_LESS_THAN(C) expr(D). { A = addOperation(param, B, C, D); } |
109 | 109 | ||
110 | %left LSL_LEFT_SHIFT LSL_RIGHT_SHIFT. | 110 | %left LSL_LEFT_SHIFT LSL_RIGHT_SHIFT. |
111 | expr(A) ::= expr(B) LSL_RIGHT_SHIFT(C) expr(D). { A = addOperation(B, C, D); } | 111 | expr(A) ::= expr(B) LSL_RIGHT_SHIFT(C) expr(D). { A = addOperation(param, B, C, D); } |
112 | expr(A) ::= expr(B) LSL_LEFT_SHIFT(C) expr(D). { A = addOperation(B, C, D); } | 112 | expr(A) ::= expr(B) LSL_LEFT_SHIFT(C) expr(D). { A = addOperation(param, B, C, D); } |
113 | 113 | ||
114 | %left LSL_SUBTRACT LSL_ADD LSL_CONCATENATE. | 114 | %left LSL_SUBTRACT LSL_ADD LSL_CONCATENATE. |
115 | expr(A) ::= expr(B) LSL_ADD(C) expr(D). { A = addOperation(B, C, D); } | 115 | expr(A) ::= expr(B) LSL_ADD(C) expr(D). { A = addOperation(param, B, C, D); } |
116 | expr(A) ::= expr(B) LSL_SUBTRACT(C) expr(D). { A = addOperation(B, C, D); } | 116 | expr(A) ::= expr(B) LSL_SUBTRACT(C) expr(D). { A = addOperation(param, B, C, D); } |
117 | %left LSL_DIVIDE LSL_MODULO LSL_MULTIPLY LSL_DOT_PRODUCT LSL_CROSS_PRODUCT. | 117 | %left LSL_DIVIDE LSL_MODULO LSL_MULTIPLY LSL_DOT_PRODUCT LSL_CROSS_PRODUCT. |
118 | expr(A) ::= expr(B) LSL_MULTIPLY(C) expr(D). { A = addOperation(B, C, D); } | 118 | expr(A) ::= expr(B) LSL_MULTIPLY(C) expr(D). { A = addOperation(param, B, C, D); } |
119 | expr(A) ::= expr(B) LSL_MODULO(C) expr(D). { A = addOperation(B, C, D); } | 119 | expr(A) ::= expr(B) LSL_MODULO(C) expr(D). { A = addOperation(param, B, C, D); } |
120 | expr(A) ::= expr(B) LSL_DIVIDE(C) expr(D). { A = addOperation(B, C, D); } | 120 | expr(A) ::= expr(B) LSL_DIVIDE(C) expr(D). { A = addOperation(param, B, C, D); } |
121 | 121 | ||
122 | %right LSL_BIT_NOT LSL_BOOL_NOT LSL_NEGATION. | 122 | %right LSL_BIT_NOT LSL_BOOL_NOT LSL_NEGATION. |
123 | expr(A) ::= LSL_BIT_NOT(B) expr(C). { A = addOperation(NULL, B, C); } | 123 | expr(A) ::= LSL_BIT_NOT(B) expr(C). { A = addOperation(param, NULL, B, C); } |
124 | expr(A) ::= LSL_BOOL_NOT(B) expr(C). { A = addOperation(NULL, B, C); } | 124 | expr(A) ::= LSL_BOOL_NOT(B) expr(C). { A = addOperation(param, NULL, B, C); } |
125 | expr(A) ::= LSL_SUBTRACT(B) expr(C). [LSL_NEGATION] { A = addOperation(NULL, B, C); } | 125 | expr(A) ::= LSL_SUBTRACT(B) expr(C). [LSL_NEGATION] { A = addOperation(param, NULL, B, C); } |
126 | 126 | ||
127 | // Types, typecasts, and expression reordering. | 127 | // Types, typecasts, and expression reordering. |
128 | 128 | ||
@@ -198,13 +198,33 @@ expr ::= LSL_ANGLE_OPEN expr LSL_COMMA expr LSL_COMMA expr LSL_ANGLE_CLOSE. [L | |||
198 | 198 | ||
199 | // Parser callbacks. | 199 | // Parser callbacks. |
200 | 200 | ||
201 | %parse_accept {printf("Parsing complete.\n");} | 201 | %parse_accept |
202 | { | ||
203 | gameGlobals *game = param->game; | ||
202 | 204 | ||
203 | %parse_failure {fprintf(stderr,"Giving up. Parser is hopelessly lost!\n");} | 205 | PI("Parsing complete."); |
206 | } | ||
207 | |||
208 | %parse_failure | ||
209 | { | ||
210 | gameGlobals *game = param->game; | ||
211 | |||
212 | PE("Giving up. Parser is hopelessly lost!"); | ||
213 | } | ||
204 | 214 | ||
205 | %stack_overflow {fprintf(stderr,"*******************************************************************Giving up. Parser stack overflow @ line %04d column %04d\n", yypMinor->yy0->line, yypMinor->yy0->column);} // Gotta love consistancy, if it ever happens. | 215 | %stack_overflow |
216 | { | ||
217 | gameGlobals *game = param->game; | ||
206 | 218 | ||
207 | %syntax_error {fprintf(stderr,"*******************************************************************Syntax error @ line %04d column %04d\n", yyminor.yy0->line, yyminor.yy0->column);} | 219 | PE("Giving up. Parser stack overflow @ line %04d column %04d.", yypMinor->yy0->line, yypMinor->yy0->column); // Gotta love consistancy, if it ever happens. |
220 | } | ||
221 | |||
222 | %syntax_error | ||
223 | { | ||
224 | gameGlobals *game = param->game; | ||
225 | |||
226 | PE("Syntax error @ line %04d column %04d.", yyminor.yy0->line, yyminor.yy0->column); | ||
227 | } | ||
208 | 228 | ||
209 | 229 | ||
210 | /* Undocumented shit that might be useful later. Pffft | 230 | /* Undocumented shit that might be useful later. Pffft |