| 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 | } |