1 | /* This file was generated by SableCC (http://www.sablecc.org/). */ |
2 | |
3 | package uk.co.zonetora.fj.ast.parser; |
4 | |
5 | import uk.co.zonetora.fj.ast.lexer.*; |
6 | import uk.co.zonetora.fj.ast.node.*; |
7 | import uk.co.zonetora.fj.ast.analysis.*; |
8 | import java.util.*; |
9 | |
10 | import java.io.DataInputStream; |
11 | import java.io.BufferedInputStream; |
12 | import java.io.IOException; |
13 | |
14 | public class Parser |
15 | { |
16 | public final Analysis ignoredTokens = new AnalysisAdapter(); |
17 | |
18 | protected Node node; |
19 | |
20 | private final Lexer lexer; |
21 | private final ListIterator stack = new LinkedList().listIterator(); |
22 | private int last_shift; |
23 | private int last_pos; |
24 | private int last_line; |
25 | private Token last_token; |
26 | private final TokenIndex converter = new TokenIndex(); |
27 | private final int[] action = new int[2]; |
28 | |
29 | private final static int SHIFT = 0; |
30 | private final static int REDUCE = 1; |
31 | private final static int ACCEPT = 2; |
32 | private final static int ERROR = 3; |
33 | |
34 | protected void filter() throws ParserException, LexerException, IOException |
35 | { |
36 | } |
37 | |
38 | public Parser(Lexer lexer) |
39 | { |
40 | this.lexer = lexer; |
41 | |
42 | if(actionTable == null) |
43 | { |
44 | try |
45 | { |
46 | DataInputStream s = new DataInputStream( |
47 | new BufferedInputStream( |
48 | Parser.class.getResourceAsStream("parser.dat"))); |
49 | |
50 | // read actionTable |
51 | int length = s.readInt(); |
52 | actionTable = new int[length][][]; |
53 | for(int i = 0; i < actionTable.length; i++) |
54 | { |
55 | length = s.readInt(); |
56 | actionTable[i] = new int[length][3]; |
57 | for(int j = 0; j < actionTable[i].length; j++) |
58 | { |
59 | for(int k = 0; k < 3; k++) |
60 | { |
61 | actionTable[i][j][k] = s.readInt(); |
62 | } |
63 | } |
64 | } |
65 | |
66 | // read gotoTable |
67 | length = s.readInt(); |
68 | gotoTable = new int[length][][]; |
69 | for(int i = 0; i < gotoTable.length; i++) |
70 | { |
71 | length = s.readInt(); |
72 | gotoTable[i] = new int[length][2]; |
73 | for(int j = 0; j < gotoTable[i].length; j++) |
74 | { |
75 | for(int k = 0; k < 2; k++) |
76 | { |
77 | gotoTable[i][j][k] = s.readInt(); |
78 | } |
79 | } |
80 | } |
81 | |
82 | // read errorMessages |
83 | length = s.readInt(); |
84 | errorMessages = new String[length]; |
85 | for(int i = 0; i < errorMessages.length; i++) |
86 | { |
87 | length = s.readInt(); |
88 | StringBuffer buffer = new StringBuffer(); |
89 | |
90 | for(int j = 0; j < length; j++) |
91 | { |
92 | buffer.append(s.readChar()); |
93 | } |
94 | errorMessages[i] = buffer.toString(); |
95 | } |
96 | |
97 | // read errors |
98 | length = s.readInt(); |
99 | errors = new int[length]; |
100 | for(int i = 0; i < errors.length; i++) |
101 | { |
102 | errors[i] = s.readInt(); |
103 | } |
104 | |
105 | s.close(); |
106 | } |
107 | catch(Exception e) |
108 | { |
109 | throw new RuntimeException("The file \"parser.dat\" is either missing or corrupted."); |
110 | } |
111 | } |
112 | } |
113 | |
114 | private int goTo(int index) |
115 | { |
116 | int state = state(); |
117 | int low = 1; |
118 | int high = gotoTable[index].length - 1; |
119 | int value = gotoTable[index][0][1]; |
120 | |
121 | while(low <= high) |
122 | { |
123 | int middle = (low + high) / 2; |
124 | |
125 | if(state < gotoTable[index][middle][0]) |
126 | { |
127 | high = middle - 1; |
128 | } |
129 | else if(state > gotoTable[index][middle][0]) |
130 | { |
131 | low = middle + 1; |
132 | } |
133 | else |
134 | { |
135 | value = gotoTable[index][middle][1]; |
136 | break; |
137 | } |
138 | } |
139 | |
140 | return value; |
141 | } |
142 | |
143 | private void push(int state, Node node, boolean filter) throws ParserException, LexerException, IOException |
144 | { |
145 | this.node = node; |
146 | |
147 | if(filter) |
148 | { |
149 | filter(); |
150 | } |
151 | |
152 | if(!stack.hasNext()) |
153 | { |
154 | stack.add(new State(state, this.node)); |
155 | return; |
156 | } |
157 | |
158 | State s = (State) stack.next(); |
159 | s.state = state; |
160 | s.node = this.node; |
161 | } |
162 | |
163 | private int state() |
164 | { |
165 | State s = (State) stack.previous(); |
166 | stack.next(); |
167 | return s.state; |
168 | } |
169 | |
170 | private Node pop() |
171 | { |
172 | return (Node) ((State) stack.previous()).node; |
173 | } |
174 | |
175 | private int index(Switchable token) |
176 | { |
177 | converter.index = -1; |
178 | token.apply(converter); |
179 | return converter.index; |
180 | } |
181 | |
182 | public Start parse() throws ParserException, LexerException, IOException |
183 | { |
184 | push(0, null, false); |
185 | |
186 | List ign = null; |
187 | while(true) |
188 | { |
189 | while(index(lexer.peek()) == -1) |
190 | { |
191 | if(ign == null) |
192 | { |
193 | ign = new TypedLinkedList(NodeCast.instance); |
194 | } |
195 | |
196 | ign.add(lexer.next()); |
197 | } |
198 | |
199 | if(ign != null) |
200 | { |
201 | ignoredTokens.setIn(lexer.peek(), ign); |
202 | ign = null; |
203 | } |
204 | |
205 | last_pos = lexer.peek().getPos(); |
206 | last_line = lexer.peek().getLine(); |
207 | last_token = lexer.peek(); |
208 | |
209 | int index = index(lexer.peek()); |
210 | action[0] = actionTable[state()][0][1]; |
211 | action[1] = actionTable[state()][0][2]; |
212 | |
213 | int low = 1; |
214 | int high = actionTable[state()].length - 1; |
215 | |
216 | while(low <= high) |
217 | { |
218 | int middle = (low + high) / 2; |
219 | |
220 | if(index < actionTable[state()][middle][0]) |
221 | { |
222 | high = middle - 1; |
223 | } |
224 | else if(index > actionTable[state()][middle][0]) |
225 | { |
226 | low = middle + 1; |
227 | } |
228 | else |
229 | { |
230 | action[0] = actionTable[state()][middle][1]; |
231 | action[1] = actionTable[state()][middle][2]; |
232 | break; |
233 | } |
234 | } |
235 | |
236 | switch(action[0]) |
237 | { |
238 | case SHIFT: |
239 | push(action[1], lexer.next(), true); |
240 | last_shift = action[1]; |
241 | break; |
242 | case REDUCE: |
243 | switch(action[1]) |
244 | { |
245 | case 0: { Node node = new0(); push(goTo(0), node, true); } break; |
246 | case 1: { Node node = new1(); push(goTo(0), node, true); } break; |
247 | case 2: { Node node = new2(); push(goTo(16), node, false); } break; |
248 | case 3: { Node node = new3(); push(goTo(16), node, false); } break; |
249 | case 4: { Node node = new4(); push(goTo(1), node, true); } break; |
250 | case 5: { Node node = new5(); push(goTo(1), node, true); } break; |
251 | case 6: { Node node = new6(); push(goTo(17), node, false); } break; |
252 | case 7: { Node node = new7(); push(goTo(17), node, false); } break; |
253 | case 8: { Node node = new8(); push(goTo(1), node, true); } break; |
254 | case 9: { Node node = new9(); push(goTo(18), node, false); } break; |
255 | case 10: { Node node = new10(); push(goTo(18), node, false); } break; |
256 | case 11: { Node node = new11(); push(goTo(1), node, true); } break; |
257 | case 12: { Node node = new12(); push(goTo(2), node, true); } break; |
258 | case 13: { Node node = new13(); push(goTo(3), node, true); } break; |
259 | case 14: { Node node = new14(); push(goTo(3), node, true); } break; |
260 | case 15: { Node node = new15(); push(goTo(19), node, false); } break; |
261 | case 16: { Node node = new16(); push(goTo(19), node, false); } break; |
262 | case 17: { Node node = new17(); push(goTo(4), node, true); } break; |
263 | case 18: { Node node = new18(); push(goTo(5), node, true); } break; |
264 | case 19: { Node node = new19(); push(goTo(5), node, true); } break; |
265 | case 20: { Node node = new20(); push(goTo(20), node, false); } break; |
266 | case 21: { Node node = new21(); push(goTo(20), node, false); } break; |
267 | case 22: { Node node = new22(); push(goTo(5), node, true); } break; |
268 | case 23: { Node node = new23(); push(goTo(6), node, true); } break; |
269 | case 24: { Node node = new24(); push(goTo(6), node, true); } break; |
270 | case 25: { Node node = new25(); push(goTo(7), node, true); } break; |
271 | case 26: { Node node = new26(); push(goTo(8), node, true); } break; |
272 | case 27: { Node node = new27(); push(goTo(8), node, true); } break; |
273 | case 28: { Node node = new28(); push(goTo(21), node, false); } break; |
274 | case 29: { Node node = new29(); push(goTo(21), node, false); } break; |
275 | case 30: { Node node = new30(); push(goTo(8), node, true); } break; |
276 | case 31: { Node node = new31(); push(goTo(9), node, true); } break; |
277 | case 32: { Node node = new32(); push(goTo(10), node, true); } break; |
278 | case 33: { Node node = new33(); push(goTo(11), node, true); } break; |
279 | case 34: { Node node = new34(); push(goTo(12), node, true); } break; |
280 | case 35: { Node node = new35(); push(goTo(12), node, true); } break; |
281 | case 36: { Node node = new36(); push(goTo(12), node, true); } break; |
282 | case 37: { Node node = new37(); push(goTo(12), node, true); } break; |
283 | case 38: { Node node = new38(); push(goTo(13), node, true); } break; |
284 | case 39: { Node node = new39(); push(goTo(13), node, true); } break; |
285 | case 40: { Node node = new40(); push(goTo(13), node, true); } break; |
286 | case 41: { Node node = new41(); push(goTo(13), node, true); } break; |
287 | case 42: { Node node = new42(); push(goTo(14), node, true); } break; |
288 | case 43: { Node node = new43(); push(goTo(14), node, true); } break; |
289 | case 44: { Node node = new44(); push(goTo(22), node, false); } break; |
290 | case 45: { Node node = new45(); push(goTo(22), node, false); } break; |
291 | case 46: { Node node = new46(); push(goTo(14), node, true); } break; |
292 | case 47: { Node node = new47(); push(goTo(15), node, true); } break; |
293 | } |
294 | break; |
295 | case ACCEPT: |
296 | { |
297 | EOF node2 = (EOF) lexer.next(); |
298 | PProg node1 = (PProg) pop(); |
299 | Start node = new Start(node1, node2); |
300 | return node; |
301 | } |
302 | case ERROR: |
303 | throw new ParserException(last_token, |
304 | "[" + last_line + "," + last_pos + "] " + |
305 | errorMessages[errors[action[1]]]); |
306 | } |
307 | } |
308 | } |
309 | |
310 | Node new0() |
311 | { |
312 | XPClassDecl node1 = null; |
313 | AProg node = new AProg(node1); |
314 | return node; |
315 | } |
316 | |
317 | Node new1() |
318 | { |
319 | XPClassDecl node1 = (XPClassDecl) pop(); |
320 | AProg node = new AProg(node1); |
321 | return node; |
322 | } |
323 | |
324 | Node new2() |
325 | { |
326 | PClassDecl node2 = (PClassDecl) pop(); |
327 | XPClassDecl node1 = (XPClassDecl) pop(); |
328 | X1PClassDecl node = new X1PClassDecl(node1, node2); |
329 | return node; |
330 | } |
331 | |
332 | Node new3() |
333 | { |
334 | PClassDecl node1 = (PClassDecl) pop(); |
335 | X2PClassDecl node = new X2PClassDecl(node1); |
336 | return node; |
337 | } |
338 | |
339 | Node new4() |
340 | { |
341 | TRBrace node9 = (TRBrace) pop(); |
342 | XPMethodDecl node8 = null; |
343 | PConstructorDecl node7 = (PConstructorDecl) pop(); |
344 | XPFieldDecl node6 = null; |
345 | TLBrace node5 = (TLBrace) pop(); |
346 | TIdentifier node4 = (TIdentifier) pop(); |
347 | TExtends node3 = (TExtends) pop(); |
348 | TIdentifier node2 = (TIdentifier) pop(); |
349 | TTclass node1 = (TTclass) pop(); |
350 | AClassDecl node = new AClassDecl(node1, node2, node3, node4, node5, node6, node7, node8, node9); |
351 | return node; |
352 | } |
353 | |
354 | Node new5() |
355 | { |
356 | TRBrace node9 = (TRBrace) pop(); |
357 | XPMethodDecl node8 = null; |
358 | PConstructorDecl node7 = (PConstructorDecl) pop(); |
359 | XPFieldDecl node6 = (XPFieldDecl) pop(); |
360 | TLBrace node5 = (TLBrace) pop(); |
361 | TIdentifier node4 = (TIdentifier) pop(); |
362 | TExtends node3 = (TExtends) pop(); |
363 | TIdentifier node2 = (TIdentifier) pop(); |
364 | TTclass node1 = (TTclass) pop(); |
365 | AClassDecl node = new AClassDecl(node1, node2, node3, node4, node5, node6, node7, node8, node9); |
366 | return node; |
367 | } |
368 | |
369 | Node new6() |
370 | { |
371 | PFieldDecl node2 = (PFieldDecl) pop(); |
372 | XPFieldDecl node1 = (XPFieldDecl) pop(); |
373 | X1PFieldDecl node = new X1PFieldDecl(node1, node2); |
374 | return node; |
375 | } |
376 | |
377 | Node new7() |
378 | { |
379 | PFieldDecl node1 = (PFieldDecl) pop(); |
380 | X2PFieldDecl node = new X2PFieldDecl(node1); |
381 | return node; |
382 | } |
383 | |
384 | Node new8() |
385 | { |
386 | TRBrace node9 = (TRBrace) pop(); |
387 | XPMethodDecl node8 = (XPMethodDecl) pop(); |
388 | PConstructorDecl node7 = (PConstructorDecl) pop(); |
389 | XPFieldDecl node6 = null; |
390 | TLBrace node5 = (TLBrace) pop(); |
391 | TIdentifier node4 = (TIdentifier) pop(); |
392 | TExtends node3 = (TExtends) pop(); |
393 | TIdentifier node2 = (TIdentifier) pop(); |
394 | TTclass node1 = (TTclass) pop(); |
395 | AClassDecl node = new AClassDecl(node1, node2, node3, node4, node5, node6, node7, node8, node9); |
396 | return node; |
397 | } |
398 | |
399 | Node new9() |
400 | { |
401 | PMethodDecl node2 = (PMethodDecl) pop(); |
402 | XPMethodDecl node1 = (XPMethodDecl) pop(); |
403 | X1PMethodDecl node = new X1PMethodDecl(node1, node2); |
404 | return node; |
405 | } |
406 | |
407 | Node new10() |
408 | { |
409 | PMethodDecl node1 = (PMethodDecl) pop(); |
410 | X2PMethodDecl node = new X2PMethodDecl(node1); |
411 | return node; |
412 | } |
413 | |
414 | Node new11() |
415 | { |
416 | TRBrace node9 = (TRBrace) pop(); |
417 | XPMethodDecl node8 = (XPMethodDecl) pop(); |
418 | PConstructorDecl node7 = (PConstructorDecl) pop(); |
419 | XPFieldDecl node6 = (XPFieldDecl) pop(); |
420 | TLBrace node5 = (TLBrace) pop(); |
421 | TIdentifier node4 = (TIdentifier) pop(); |
422 | TExtends node3 = (TExtends) pop(); |
423 | TIdentifier node2 = (TIdentifier) pop(); |
424 | TTclass node1 = (TTclass) pop(); |
425 | AClassDecl node = new AClassDecl(node1, node2, node3, node4, node5, node6, node7, node8, node9); |
426 | return node; |
427 | } |
428 | |
429 | Node new12() |
430 | { |
431 | TSemicolon node3 = (TSemicolon) pop(); |
432 | TIdentifier node2 = (TIdentifier) pop(); |
433 | TIdentifier node1 = (TIdentifier) pop(); |
434 | AFieldDecl node = new AFieldDecl(node1, node2, node3); |
435 | return node; |
436 | } |
437 | |
438 | Node new13() |
439 | { |
440 | TRBrace node12 = (TRBrace) pop(); |
441 | XPThisFieldAssig node11 = null; |
442 | TSemicolon node10 = (TSemicolon) pop(); |
443 | TRPar node9 = (TRPar) pop(); |
444 | PFieldList node8 = (PFieldList) pop(); |
445 | TLPar node7 = (TLPar) pop(); |
446 | TSuper node6 = (TSuper) pop(); |
447 | TLBrace node5 = (TLBrace) pop(); |
448 | TRPar node4 = (TRPar) pop(); |
449 | PParamDeclList node3 = (PParamDeclList) pop(); |
450 | TLPar node2 = (TLPar) pop(); |
451 | TIdentifier node1 = (TIdentifier) pop(); |
452 | AConstructorDecl node = new AConstructorDecl(node1, node2, node3, node4, node5, node6, node7, node8, node9, node10, node11, node12); |
453 | return node; |
454 | } |
455 | |
456 | Node new14() |
457 | { |
458 | TRBrace node12 = (TRBrace) pop(); |
459 | XPThisFieldAssig node11 = (XPThisFieldAssig) pop(); |
460 | TSemicolon node10 = (TSemicolon) pop(); |
461 | TRPar node9 = (TRPar) pop(); |
462 | PFieldList node8 = (PFieldList) pop(); |
463 | TLPar node7 = (TLPar) pop(); |
464 | TSuper node6 = (TSuper) pop(); |
465 | TLBrace node5 = (TLBrace) pop(); |
466 | TRPar node4 = (TRPar) pop(); |
467 | PParamDeclList node3 = (PParamDeclList) pop(); |
468 | TLPar node2 = (TLPar) pop(); |
469 | TIdentifier node1 = (TIdentifier) pop(); |
470 | AConstructorDecl node = new AConstructorDecl(node1, node2, node3, node4, node5, node6, node7, node8, node9, node10, node11, node12); |
471 | return node; |
472 | } |
473 | |
474 | Node new15() |
475 | { |
476 | PThisFieldAssig node2 = (PThisFieldAssig) pop(); |
477 | XPThisFieldAssig node1 = (XPThisFieldAssig) pop(); |
478 | X1PThisFieldAssig node = new X1PThisFieldAssig(node1, node2); |
479 | return node; |
480 | } |
481 | |
482 | Node new16() |
483 | { |
484 | PThisFieldAssig node1 = (PThisFieldAssig) pop(); |
485 | X2PThisFieldAssig node = new X2PThisFieldAssig(node1); |
486 | return node; |
487 | } |
488 | |
489 | Node new17() |
490 | { |
491 | TRBrace node10 = (TRBrace) pop(); |
492 | TSemicolon node9 = (TSemicolon) pop(); |
493 | PTerm node8 = (PTerm) pop(); |
494 | TReturn node7 = (TReturn) pop(); |
495 | TLBrace node6 = (TLBrace) pop(); |
496 | TRPar node5 = (TRPar) pop(); |
497 | PParamDeclList node4 = (PParamDeclList) pop(); |
498 | TLPar node3 = (TLPar) pop(); |
499 | TIdentifier node2 = (TIdentifier) pop(); |
500 | TIdentifier node1 = (TIdentifier) pop(); |
501 | AMethodDecl node = new AMethodDecl(node1, node2, node3, node4, node5, node6, node7, node8, node9, node10); |
502 | return node; |
503 | } |
504 | |
505 | Node new18() |
506 | { |
507 | XPCommaParamArgList node2 = null; |
508 | PParamArg node1 = (PParamArg) pop(); |
509 | AParamArgsParamDeclList node = new AParamArgsParamDeclList(node1, node2); |
510 | return node; |
511 | } |
512 | |
513 | Node new19() |
514 | { |
515 | XPCommaParamArgList node2 = (XPCommaParamArgList) pop(); |
516 | PParamArg node1 = (PParamArg) pop(); |
517 | AParamArgsParamDeclList node = new AParamArgsParamDeclList(node1, node2); |
518 | return node; |
519 | } |
520 | |
521 | Node new20() |
522 | { |
523 | PCommaParamArgList node2 = (PCommaParamArgList) pop(); |
524 | XPCommaParamArgList node1 = (XPCommaParamArgList) pop(); |
525 | X1PCommaParamArgList node = new X1PCommaParamArgList(node1, node2); |
526 | return node; |
527 | } |
528 | |
529 | Node new21() |
530 | { |
531 | PCommaParamArgList node1 = (PCommaParamArgList) pop(); |
532 | X2PCommaParamArgList node = new X2PCommaParamArgList(node1); |
533 | return node; |
534 | } |
535 | |
536 | Node new22() |
537 | { |
538 | AEmptyParamDeclList node = new AEmptyParamDeclList(); |
539 | return node; |
540 | } |
541 | |
542 | Node new23() |
543 | { |
544 | TIdentifier node2 = (TIdentifier) pop(); |
545 | TIdentifier node1 = (TIdentifier) pop(); |
546 | AIdentParamArg node = new AIdentParamArg(node1, node2); |
547 | return node; |
548 | } |
549 | |
550 | Node new24() |
551 | { |
552 | TIdentifier node2 = (TIdentifier) pop(); |
553 | TThis node1 = (TThis) pop(); |
554 | AThisParamArg node = new AThisParamArg(node1, node2); |
555 | return node; |
556 | } |
557 | |
558 | Node new25() |
559 | { |
560 | PParamArg node2 = (PParamArg) pop(); |
561 | TComma node1 = (TComma) pop(); |
562 | ACommaParamArgList node = new ACommaParamArgList(node1, node2); |
563 | return node; |
564 | } |
565 | |
566 | Node new26() |
567 | { |
568 | XPCommaField node2 = null; |
569 | PFieldName node1 = (PFieldName) pop(); |
570 | AFieldListFieldList node = new AFieldListFieldList(node1, node2); |
571 | return node; |
572 | } |
573 | |
574 | Node new27() |
575 | { |
576 | XPCommaField node2 = (XPCommaField) pop(); |
577 | PFieldName node1 = (PFieldName) pop(); |
578 | AFieldListFieldList node = new AFieldListFieldList(node1, node2); |
579 | return node; |
580 | } |
581 | |
582 | Node new28() |
583 | { |
584 | PCommaField node2 = (PCommaField) pop(); |
585 | XPCommaField node1 = (XPCommaField) pop(); |
586 | X1PCommaField node = new X1PCommaField(node1, node2); |
587 | return node; |
588 | } |
589 | |
590 | Node new29() |
591 | { |
592 | PCommaField node1 = (PCommaField) pop(); |
593 | X2PCommaField node = new X2PCommaField(node1); |
594 | return node; |
595 | } |
596 | |
597 | Node new30() |
598 | { |
599 | AEmptyFieldList node = new AEmptyFieldList(); |
600 | return node; |
601 | } |
602 | |
603 | Node new31() |
604 | { |
605 | TIdentifier node1 = (TIdentifier) pop(); |
606 | AFieldName node = new AFieldName(node1); |
607 | return node; |
608 | } |
609 | |
610 | Node new32() |
611 | { |
612 | PFieldName node2 = (PFieldName) pop(); |
613 | TComma node1 = (TComma) pop(); |
614 | ACommaField node = new ACommaField(node1, node2); |
615 | return node; |
616 | } |
617 | |
618 | Node new33() |
619 | { |
620 | TSemicolon node6 = (TSemicolon) pop(); |
621 | TIdentifier node5 = (TIdentifier) pop(); |
622 | TEq node4 = (TEq) pop(); |
623 | TIdentifier node3 = (TIdentifier) pop(); |
624 | TPeriod node2 = (TPeriod) pop(); |
625 | TThis node1 = (TThis) pop(); |
626 | AThisFieldAssig node = new AThisFieldAssig(node1, node2, node3, node4, node5, node6); |
627 | return node; |
628 | } |
629 | |
630 | Node new34() |
631 | { |
632 | PNonLeftRecTerm node1 = (PNonLeftRecTerm) pop(); |
633 | ANonLeftRecTermTerm node = new ANonLeftRecTermTerm(node1); |
634 | return node; |
635 | } |
636 | |
637 | Node new35() |
638 | { |
639 | TIdentifier node3 = (TIdentifier) pop(); |
640 | TPeriod node2 = (TPeriod) pop(); |
641 | PNonLeftRecTerm node1 = (PNonLeftRecTerm) pop(); |
642 | AFieldAccessTerm node = new AFieldAccessTerm(node1, node2, node3); |
643 | return node; |
644 | } |
645 | |
646 | Node new36() |
647 | { |
648 | TRPar node6 = (TRPar) pop(); |
649 | PTermList node5 = (PTermList) pop(); |
650 | TLPar node4 = (TLPar) pop(); |
651 | TIdentifier node3 = (TIdentifier) pop(); |
652 | TPeriod node2 = (TPeriod) pop(); |
653 | PNonLeftRecTerm node1 = (PNonLeftRecTerm) pop(); |
654 | AMethodCallTerm node = new AMethodCallTerm(node1, node2, node3, node4, node5, node6); |
655 | return node; |
656 | } |
657 | |
658 | Node new37() |
659 | { |
660 | PNonLeftRecTerm node4 = (PNonLeftRecTerm) pop(); |
661 | TRSq node3 = (TRSq) pop(); |
662 | TIdentifier node2 = (TIdentifier) pop(); |
663 | TLSq node1 = (TLSq) pop(); |
664 | ACastTerm node = new ACastTerm(node1, node2, node3, node4); |
665 | return node; |
666 | } |
667 | |
668 | Node new38() |
669 | { |
670 | TIdentifier node1 = (TIdentifier) pop(); |
671 | AVariableNonLeftRecTerm node = new AVariableNonLeftRecTerm(node1); |
672 | return node; |
673 | } |
674 | |
675 | Node new39() |
676 | { |
677 | TThis node1 = (TThis) pop(); |
678 | AThisNonLeftRecTerm node = new AThisNonLeftRecTerm(node1); |
679 | return node; |
680 | } |
681 | |
682 | Node new40() |
683 | { |
684 | TRPar node5 = (TRPar) pop(); |
685 | PTermList node4 = (PTermList) pop(); |
686 | TLPar node3 = (TLPar) pop(); |
687 | TIdentifier node2 = (TIdentifier) pop(); |
688 | TNew node1 = (TNew) pop(); |
689 | AObjectCreationNonLeftRecTerm node = new AObjectCreationNonLeftRecTerm(node1, node2, node3, node4, node5); |
690 | return node; |
691 | } |
692 | |
693 | Node new41() |
694 | { |
695 | TRPar node3 = (TRPar) pop(); |
696 | PTerm node2 = (PTerm) pop(); |
697 | TLPar node1 = (TLPar) pop(); |
698 | ABracketNonLeftRecTerm node = new ABracketNonLeftRecTerm(node1, node2, node3); |
699 | return node; |
700 | } |
701 | |
702 | Node new42() |
703 | { |
704 | XPCommaTerm node2 = null; |
705 | PTerm node1 = (PTerm) pop(); |
706 | ATermListTermList node = new ATermListTermList(node1, node2); |
707 | return node; |
708 | } |
709 | |
710 | Node new43() |
711 | { |
712 | XPCommaTerm node2 = (XPCommaTerm) pop(); |
713 | PTerm node1 = (PTerm) pop(); |
714 | ATermListTermList node = new ATermListTermList(node1, node2); |
715 | return node; |
716 | } |
717 | |
718 | Node new44() |
719 | { |
720 | PCommaTerm node2 = (PCommaTerm) pop(); |
721 | XPCommaTerm node1 = (XPCommaTerm) pop(); |
722 | X1PCommaTerm node = new X1PCommaTerm(node1, node2); |
723 | return node; |
724 | } |
725 | |
726 | Node new45() |
727 | { |
728 | PCommaTerm node1 = (PCommaTerm) pop(); |
729 | X2PCommaTerm node = new X2PCommaTerm(node1); |
730 | return node; |
731 | } |
732 | |
733 | Node new46() |
734 | { |
735 | AEmptyTermList node = new AEmptyTermList(); |
736 | return node; |
737 | } |
738 | |
739 | Node new47() |
740 | { |
741 | PTerm node2 = (PTerm) pop(); |
742 | TComma node1 = (TComma) pop(); |
743 | ACommaTerm node = new ACommaTerm(node1, node2); |
744 | return node; |
745 | } |
746 | |
747 | private static int[][][] actionTable; |
748 | /* { |
749 | {{-1, REDUCE, 0}, {0, SHIFT, 1}, }, |
750 | {{-1, ERROR, 1}, {16, SHIFT, 5}, }, |
751 | {{-1, ERROR, 2}, {17, ACCEPT, -1}, }, |
752 | {{-1, REDUCE, 3}, }, |
753 | {{-1, REDUCE, 1}, {0, SHIFT, 1}, }, |
754 | {{-1, ERROR, 5}, {1, SHIFT, 7}, }, |
755 | {{-1, REDUCE, 2}, }, |
756 | {{-1, ERROR, 7}, {16, SHIFT, 8}, }, |
757 | {{-1, ERROR, 8}, {6, SHIFT, 9}, }, |
758 | {{-1, ERROR, 9}, {16, SHIFT, 10}, }, |
759 | {{-1, ERROR, 10}, {10, SHIFT, 14}, {16, SHIFT, 15}, }, |
760 | {{-1, REDUCE, 7}, }, |
761 | {{-1, ERROR, 12}, {7, SHIFT, 16}, {16, SHIFT, 17}, }, |
762 | {{-1, ERROR, 13}, {16, SHIFT, 10}, }, |
763 | {{-1, REDUCE, 22}, {3, SHIFT, 22}, {16, SHIFT, 23}, }, |
764 | {{-1, ERROR, 15}, {8, SHIFT, 26}, }, |
765 | {{-1, REDUCE, 4}, }, |
766 | {{-1, ERROR, 17}, {16, SHIFT, 27}, }, |
767 | {{-1, REDUCE, 10}, }, |
768 | {{-1, ERROR, 19}, {7, SHIFT, 28}, {16, SHIFT, 17}, }, |
769 | {{-1, REDUCE, 6}, }, |
770 | {{-1, ERROR, 21}, {7, SHIFT, 30}, {16, SHIFT, 17}, }, |
771 | {{-1, ERROR, 22}, {16, SHIFT, 32}, }, |
772 | {{-1, ERROR, 23}, {16, SHIFT, 33}, }, |
773 | {{-1, ERROR, 24}, {11, SHIFT, 34}, }, |
774 | {{-1, REDUCE, 18}, {9, SHIFT, 35}, }, |
775 | {{-1, REDUCE, 12}, }, |
776 | {{-1, ERROR, 27}, {10, SHIFT, 38}, }, |
777 | {{-1, REDUCE, 8}, }, |
778 | {{-1, REDUCE, 9}, }, |
779 | {{-1, REDUCE, 5}, }, |
780 | {{-1, ERROR, 31}, {7, SHIFT, 39}, {16, SHIFT, 17}, }, |
781 | {{-1, REDUCE, 24}, }, |
782 | {{-1, REDUCE, 23}, }, |
783 | {{-1, ERROR, 34}, {6, SHIFT, 40}, }, |
784 | {{-1, ERROR, 35}, {3, SHIFT, 22}, {16, SHIFT, 23}, }, |
785 | {{-1, REDUCE, 21}, }, |
786 | {{-1, REDUCE, 19}, {9, SHIFT, 35}, }, |
787 | {{-1, REDUCE, 22}, {3, SHIFT, 22}, {16, SHIFT, 23}, }, |
788 | {{-1, REDUCE, 11}, }, |
789 | {{-1, ERROR, 40}, {2, SHIFT, 44}, }, |
790 | {{-1, REDUCE, 25}, }, |
791 | {{-1, REDUCE, 20}, }, |
792 | {{-1, ERROR, 43}, {11, SHIFT, 45}, }, |
793 | {{-1, ERROR, 44}, {10, SHIFT, 46}, }, |
794 | {{-1, ERROR, 45}, {6, SHIFT, 47}, }, |
795 | {{-1, REDUCE, 30}, {16, SHIFT, 48}, }, |
796 | {{-1, ERROR, 47}, {5, SHIFT, 51}, }, |
797 | {{-1, REDUCE, 31}, }, |
798 | {{-1, ERROR, 49}, {11, SHIFT, 52}, }, |
799 | {{-1, REDUCE, 26}, {9, SHIFT, 53}, }, |
800 | {{-1, ERROR, 51}, {3, SHIFT, 56}, {4, SHIFT, 57}, {10, SHIFT, 58}, {12, SHIFT, 59}, {16, SHIFT, 60}, }, |
801 | {{-1, ERROR, 52}, {8, SHIFT, 63}, }, |
802 | {{-1, ERROR, 53}, {16, SHIFT, 48}, }, |
803 | {{-1, REDUCE, 29}, }, |
804 | {{-1, REDUCE, 27}, {9, SHIFT, 53}, }, |
805 | {{-1, REDUCE, 39}, }, |
806 | {{-1, ERROR, 57}, {16, SHIFT, 66}, }, |
807 | {{-1, ERROR, 58}, {3, SHIFT, 56}, {4, SHIFT, 57}, {10, SHIFT, 58}, {12, SHIFT, 59}, {16, SHIFT, 60}, }, |
808 | {{-1, ERROR, 59}, {16, SHIFT, 68}, }, |
809 | {{-1, REDUCE, 38}, }, |
810 | {{-1, ERROR, 61}, {8, SHIFT, 69}, }, |
811 | {{-1, REDUCE, 34}, {14, SHIFT, 70}, }, |
812 | {{-1, ERROR, 63}, {3, SHIFT, 71}, {7, SHIFT, 72}, }, |
813 | {{-1, REDUCE, 32}, }, |
814 | {{-1, REDUCE, 28}, }, |
815 | {{-1, ERROR, 66}, {10, SHIFT, 75}, }, |
816 | {{-1, ERROR, 67}, {11, SHIFT, 76}, }, |
817 | {{-1, ERROR, 68}, {13, SHIFT, 77}, }, |
818 | {{-1, ERROR, 69}, {7, SHIFT, 78}, }, |
819 | {{-1, ERROR, 70}, {16, SHIFT, 79}, }, |
820 | {{-1, ERROR, 71}, {14, SHIFT, 80}, }, |
821 | {{-1, REDUCE, 13}, }, |
822 | {{-1, REDUCE, 16}, }, |
823 | {{-1, ERROR, 74}, {3, SHIFT, 71}, {7, SHIFT, 81}, }, |
824 | {{-1, REDUCE, 46}, {3, SHIFT, 56}, {4, SHIFT, 57}, {10, SHIFT, 58}, {12, SHIFT, 59}, {16, SHIFT, 60}, }, |
825 | {{-1, REDUCE, 41}, }, |
826 | {{-1, ERROR, 77}, {3, SHIFT, 56}, {4, SHIFT, 57}, {10, SHIFT, 58}, {16, SHIFT, 60}, }, |
827 | {{-1, REDUCE, 17}, }, |
828 | {{-1, REDUCE, 35}, {10, SHIFT, 86}, }, |
829 | {{-1, ERROR, 80}, {16, SHIFT, 87}, }, |
830 | {{-1, REDUCE, 14}, }, |
831 | {{-1, REDUCE, 15}, }, |
832 | {{-1, REDUCE, 42}, {9, SHIFT, 88}, }, |
833 | {{-1, ERROR, 84}, {11, SHIFT, 91}, }, |
834 | {{-1, REDUCE, 37}, }, |
835 | {{-1, REDUCE, 46}, {3, SHIFT, 56}, {4, SHIFT, 57}, {10, SHIFT, 58}, {12, SHIFT, 59}, {16, SHIFT, 60}, }, |
836 | {{-1, ERROR, 87}, {15, SHIFT, 93}, }, |
837 | {{-1, ERROR, 88}, {3, SHIFT, 56}, {4, SHIFT, 57}, {10, SHIFT, 58}, {12, SHIFT, 59}, {16, SHIFT, 60}, }, |
838 | {{-1, REDUCE, 45}, }, |
839 | {{-1, REDUCE, 43}, {9, SHIFT, 88}, }, |
840 | {{-1, REDUCE, 40}, }, |
841 | {{-1, ERROR, 92}, {11, SHIFT, 96}, }, |
842 | {{-1, ERROR, 93}, {16, SHIFT, 97}, }, |
843 | {{-1, REDUCE, 47}, }, |
844 | {{-1, REDUCE, 44}, }, |
845 | {{-1, REDUCE, 36}, }, |
846 | {{-1, ERROR, 97}, {8, SHIFT, 98}, }, |
847 | {{-1, REDUCE, 33}, }, |
848 | };*/ |
849 | private static int[][][] gotoTable; |
850 | /* { |
851 | {{-1, 2}, }, |
852 | {{-1, 3}, {4, 6}, }, |
853 | {{-1, 11}, {13, 20}, }, |
854 | {{-1, 12}, {13, 21}, }, |
855 | {{-1, 18}, {19, 29}, {31, 29}, }, |
856 | {{-1, 24}, {38, 43}, }, |
857 | {{-1, 25}, {35, 41}, }, |
858 | {{-1, 36}, {37, 42}, }, |
859 | {{-1, 49}, }, |
860 | {{-1, 50}, {53, 64}, }, |
861 | {{-1, 54}, {55, 65}, }, |
862 | {{-1, 73}, {74, 82}, }, |
863 | {{-1, 83}, {51, 61}, {58, 67}, {88, 94}, }, |
864 | {{-1, 62}, {77, 85}, }, |
865 | {{-1, 84}, {86, 92}, }, |
866 | {{-1, 89}, {90, 95}, }, |
867 | {{-1, 4}, }, |
868 | {{-1, 13}, }, |
869 | {{-1, 19}, {21, 31}, }, |
870 | {{-1, 74}, }, |
871 | {{-1, 37}, }, |
872 | {{-1, 55}, }, |
873 | {{-1, 90}, }, |
874 | };*/ |
875 | private static String[] errorMessages; |
876 | /* { |
877 | "expecting: 'class', EOF", |
878 | "expecting: identifier", |
879 | "expecting: EOF", |
880 | "expecting: 'extends'", |
881 | "expecting: '{'", |
882 | "expecting: '(', identifier", |
883 | "expecting: '}', identifier", |
884 | "expecting: 'this', ')', identifier", |
885 | "expecting: ';'", |
886 | "expecting: ')'", |
887 | "expecting: ',', ')'", |
888 | "expecting: '('", |
889 | "expecting: 'this', identifier", |
890 | "expecting: 'super'", |
891 | "expecting: ')', identifier", |
892 | "expecting: 'return'", |
893 | "expecting: 'this', 'new', '(', '[', identifier", |
894 | "expecting: ';', ',', ')', '.'", |
895 | "expecting: 'this', '}'", |
896 | "expecting: ']'", |
897 | "expecting: '}'", |
898 | "expecting: '.'", |
899 | "expecting: 'this', 'new', '(', ')', '[', identifier", |
900 | "expecting: 'this', 'new', '(', identifier", |
901 | "expecting: ';', ',', '(', ')'", |
902 | "expecting: ';', ',', ')'", |
903 | "expecting: '='", |
904 | };*/ |
905 | private static int[] errors; |
906 | /* { |
907 | 0, 1, 2, 0, 0, 3, 0, 1, 4, 1, 5, 1, 6, 1, 7, 8, 0, 1, 6, 6, 1, 6, 1, 1, 9, 10, 1, 11, 0, 6, 0, 6, 10, 10, 4, 12, 10, 10, 7, 0, 13, 10, 10, 9, 11, 4, 14, 15, 10, 9, 10, 16, 8, 1, 10, 10, 17, 1, 16, 1, 17, 8, 17, 18, 10, 10, 11, 9, 19, 20, 1, 21, 6, 18, 18, 22, 17, 23, 6, 24, 1, 6, 18, 10, 9, 25, 22, 26, 16, 10, 10, 17, 9, 1, 10, 10, 25, 8, 18, |
908 | };*/ |
909 | } |