001 // Generated from /home/csz-naf/examples/PicoJavaMethods/AST/PicoJavaParser.all 002 package AST; 003 import AST.*; 004 import java.util.ArrayList; 005 import beaver.*; 006 007 /** 008 * This class is a LALR parser generated by 009 * <a href="http://beaver.sourceforge.net">Beaver</a> v0.9.4 010 * from the grammar specification "PicoJavaParser.beaver". 011 */ 012 public class PicoJavaParser extends Parser { 013 static public class Terminals { 014 static public final short EOF = 0; 015 static public final short WHILE = 1; 016 static public final short LPAREN = 2; 017 static public final short RPAREN = 3; 018 static public final short IDENTIFIER = 4; 019 static public final short LBRACE = 5; 020 static public final short RBRACE = 6; 021 static public final short CLASS = 7; 022 static public final short SEMICOLON = 8; 023 static public final short ASSIGN = 9; 024 static public final short RETURN = 10; 025 static public final short EXTENDS = 11; 026 static public final short DOT = 12; 027 static public final short BOOLEAN_LITERAL = 13; 028 static public final short COMMA = 14; 029 030 static public final String[] NAMES = { 031 "EOF", 032 "WHILE", 033 "LPAREN", 034 "RPAREN", 035 "IDENTIFIER", 036 "LBRACE", 037 "RBRACE", 038 "CLASS", 039 "SEMICOLON", 040 "ASSIGN", 041 "RETURN", 042 "EXTENDS", 043 "DOT", 044 "BOOLEAN_LITERAL", 045 "COMMA" 046 }; 047 } 048 049 static final ParsingTables PARSING_TABLES = new ParsingTables( 050 "U9p5b3biKq4GXlzdFqCIV2GXTWxin748TxZlMxI04AAXGtG88I4QH8D20JHGKI4A2gWG3QA" + 051 "XGnGW6WeG3H3kAq32OSWDPFXsyuWIAGqL7it$$ZbsTZqxxmM1sjIXkPgcBVPU1LKfhfWMQ8" + 052 "b2LQXIAxIIZ1bgr2fDDxCVP3GeeGtsMDNZ6Ul9o9CnqtgTE9z$BjOgC0L$wKHDQlJiXGfOh" + 053 "MYpzLYFSaghv5bSUR0EFegul57DyVmJCgfsyXnxXNnIPenfjMh10lotabWrseZrt7ufQIFs" + 054 "NHl1f#Y83QlUeJr3Xsq8hyDtw90DuWMLXGtQ1otqM6iVa3vExd2MzO6jLWRZLbOELcQlRZ1" + 055 "ltMg1TTitJWdQ6$IR3QZ3eRr61wmVBwX5i7xhmklmBTfbNrNqEC##8a$mWfeFUs8$sSNXSl" + 056 "k9VB7Fu4UjSOopVQItiprV1b$AVQrstUP62rgBvhM9dWYsJYNY9JnDsWoMb46gLQkPT3$aB" + 057 "XBqhu6riuWMrAmMugre6naYcbEMUSbejh$riOmS6KKoOhv6mllST8Juac0wyYTPv$pEIb8d" + 058 "7QreKfrIFfAWJf9JfTahyB6Gd6cQxdaLEQa95Mh8SrRWBRUFomnKJsP8pfYLc6Ib$z4A8ol" + 059 "ZhNflPR6hgEjExkpGsqMUfIWxDQbIPegwZLFk6PyYioQoGczLHDs8Hszh1UAwElR$qxwhbN" + 060 "W2tsrt$YnQ1AlCVEqKyPJlSmMOqjPEmvlJVcvXXmxei8xgk4xg3D#6MctJEUtJ8UvxZKupE" + 061 "mTrKKVqI6UrMu#Pg#swhRqwfYwzqYvTu4HtTLwNrAa7kigtvBfkgLVtTKNNT4CtzKnVrAyU" + 062 "tL5PFpIWUthOQJQ4bZkDayGS$XM#H3l1FPxFYtoXnnEHTMfYFbM#uxlb8vV7gpoSLFCfclJ" + 063 "iHUJvtxyvT3VWdkEyTK83#kuqnZiNZ6ikqZotM4TU7V42QvgnMvX6DvLPF$s1l$yCiMAqjf" + 064 "MfgMPDDRp1Qvm9ZFa9gVTpApHWdft6$JvjFDl$0F3ffzG="); 065 // Generated from /home/csz-naf/examples/PicoJavaMethods/AST/PicoJavaParser.all 066 class Events extends Parser.Events { 067 public void syntaxError(Symbol token) { 068 StringBuffer s = new StringBuffer(); 069 s.append(token.getLine(token.getStart()) + ", " + token.getColumn(token.getStart()) + "\n"); 070 s.append(" *** Syntactic error: unexpected token " + Terminals.NAMES[token.getId()]); 071 throw new Error(s.toString()); 072 } 073 public void scannerError(Scanner.Exception e) { 074 StringBuffer s = new StringBuffer(); 075 s.append(e.line + ", " + e.column + "\n"); 076 s.append(" *** Lexical error: " + e.getMessage()); 077 throw new Error(s.toString()); 078 } 079 } 080 { report = new Events(); } // Use error handler in parser 081 082 public PicoJavaParser() { 083 super(PARSING_TABLES); 084 } 085 086 protected Symbol invokeReduceAction(int rule_num, int offset) { 087 switch(rule_num) { 088 case 0: // goal = block.block 089 { 090 final Symbol _symbol_block = _symbols[offset + 1]; 091 final Block block = (Block) _symbol_block.value; 092 ASTNode _node_ = new Program(block); 093 _node_.setStart(Symbol.getLine(_symbol_block.getStart()), (short) Symbol.getColumn(_symbol_block.getStart())); 094 _node_.setEnd(Symbol.getLine(_symbol_block.getEnd()), (short) Symbol.getColumn(_symbol_block.getEnd())); 095 return new Symbol(_node_); 096 } 097 case 1: // block = LBRACE.LBRACE block_stmt_list_opt.block_stmt_list_opt RBRACE.RBRACE 098 { 099 final Symbol LBRACE = _symbols[offset + 1]; 100 final Symbol _symbol_block_stmt_list_opt = _symbols[offset + 2]; 101 final List block_stmt_list_opt = (List) _symbol_block_stmt_list_opt.value; 102 final Symbol RBRACE = _symbols[offset + 3]; 103 ASTNode _node_ = new Block(block_stmt_list_opt); 104 _node_.setStart(Symbol.getLine(LBRACE.getStart()), (short) Symbol.getColumn(LBRACE.getStart())); 105 _node_.setEnd(Symbol.getLine(RBRACE.getEnd()), (short) Symbol.getColumn(RBRACE.getEnd())); 106 return new Symbol(_node_); 107 } 108 case 2: // block_stmt_list_opt = 109 { 110 return new Symbol(new List()); 111 } 112 case 3: // block_stmt_list_opt = block_stmt_list.block_stmt_list 113 { 114 final Symbol _symbol_block_stmt_list = _symbols[offset + 1]; 115 final List block_stmt_list = (List) _symbol_block_stmt_list.value; 116 ASTNode _node_ = block_stmt_list; 117 _node_.setStart(Symbol.getLine(_symbol_block_stmt_list.getStart()), (short) Symbol.getColumn(_symbol_block_stmt_list.getStart())); 118 _node_.setEnd(Symbol.getLine(_symbol_block_stmt_list.getEnd()), (short) Symbol.getColumn(_symbol_block_stmt_list.getEnd())); 119 return new Symbol(_node_); 120 } 121 case 4: // block_stmt_list = block_stmt.block_stmt 122 { 123 final Symbol _symbol_block_stmt = _symbols[offset + 1]; 124 final BlockStmt block_stmt = (BlockStmt) _symbol_block_stmt.value; 125 ASTNode _node_ = new List().add(block_stmt); 126 _node_.setStart(Symbol.getLine(_symbol_block_stmt.getStart()), (short) Symbol.getColumn(_symbol_block_stmt.getStart())); 127 _node_.setEnd(Symbol.getLine(_symbol_block_stmt.getEnd()), (short) Symbol.getColumn(_symbol_block_stmt.getEnd())); 128 return new Symbol(_node_); 129 } 130 case 5: // block_stmt_list = block_stmt_list.block_stmt_list block_stmt.block_stmt 131 { 132 final Symbol _symbol_block_stmt_list = _symbols[offset + 1]; 133 final List block_stmt_list = (List) _symbol_block_stmt_list.value; 134 final Symbol _symbol_block_stmt = _symbols[offset + 2]; 135 final BlockStmt block_stmt = (BlockStmt) _symbol_block_stmt.value; 136 ASTNode _node_ = block_stmt_list.add(block_stmt); 137 _node_.setStart(Symbol.getLine(_symbol_block_stmt_list.getStart()), (short) Symbol.getColumn(_symbol_block_stmt_list.getStart())); 138 _node_.setEnd(Symbol.getLine(_symbol_block_stmt.getEnd()), (short) Symbol.getColumn(_symbol_block_stmt.getEnd())); 139 return new Symbol(_node_); 140 } 141 case 11: // class_decl = CLASS.CLASS IDENTIFIER.IDENTIFIER extends_opt.extends_opt block.block 142 { 143 final Symbol CLASS = _symbols[offset + 1]; 144 final Symbol IDENTIFIER = _symbols[offset + 2]; 145 final Symbol _symbol_extends_opt = _symbols[offset + 3]; 146 final Opt extends_opt = (Opt) _symbol_extends_opt.value; 147 final Symbol _symbol_block = _symbols[offset + 4]; 148 final Block block = (Block) _symbol_block.value; 149 ASTNode _node_ = new ClassDecl(((String)IDENTIFIER.value), extends_opt, block); 150 _node_.setStart(Symbol.getLine(CLASS.getStart()), (short) Symbol.getColumn(CLASS.getStart())); 151 _node_.setEnd(Symbol.getLine(_symbol_block.getEnd()), (short) Symbol.getColumn(_symbol_block.getEnd())); 152 return new Symbol(_node_); 153 } 154 case 12: // extends_opt = 155 { 156 return new Symbol(new Opt()); 157 } 158 case 13: // extends_opt = EXTENDS.EXTENDS use.use 159 { 160 final Symbol EXTENDS = _symbols[offset + 1]; 161 final Symbol _symbol_use = _symbols[offset + 2]; 162 final Use use = (Use) _symbol_use.value; 163 ASTNode _node_ = new Opt(use); 164 _node_.setStart(Symbol.getLine(EXTENDS.getStart()), (short) Symbol.getColumn(EXTENDS.getStart())); 165 _node_.setEnd(Symbol.getLine(_symbol_use.getEnd()), (short) Symbol.getColumn(_symbol_use.getEnd())); 166 return new Symbol(_node_); 167 } 168 case 14: // var_decl = name.name IDENTIFIER.IDENTIFIER SEMICOLON.SEMICOLON 169 { 170 final Symbol _symbol_name = _symbols[offset + 1]; 171 final Access name = (Access) _symbol_name.value; 172 final Symbol IDENTIFIER = _symbols[offset + 2]; 173 final Symbol SEMICOLON = _symbols[offset + 3]; 174 ASTNode _node_ = new VarDecl(((String)IDENTIFIER.value), name); 175 _node_.setStart(Symbol.getLine(_symbol_name.getStart()), (short) Symbol.getColumn(_symbol_name.getStart())); 176 _node_.setEnd(Symbol.getLine(SEMICOLON.getEnd()), (short) Symbol.getColumn(SEMICOLON.getEnd())); 177 return new Symbol(_node_); 178 } 179 case 15: // assign_stmt = name.name ASSIGN.ASSIGN exp.exp SEMICOLON.SEMICOLON 180 { 181 final Symbol _symbol_name = _symbols[offset + 1]; 182 final Access name = (Access) _symbol_name.value; 183 final Symbol ASSIGN = _symbols[offset + 2]; 184 final Symbol _symbol_exp = _symbols[offset + 3]; 185 final Exp exp = (Exp) _symbol_exp.value; 186 final Symbol SEMICOLON = _symbols[offset + 4]; 187 ASTNode _node_ = new AssignStmt(name, exp); 188 _node_.setStart(Symbol.getLine(_symbol_name.getStart()), (short) Symbol.getColumn(_symbol_name.getStart())); 189 _node_.setEnd(Symbol.getLine(SEMICOLON.getEnd()), (short) Symbol.getColumn(SEMICOLON.getEnd())); 190 return new Symbol(_node_); 191 } 192 case 16: // while_stmt = WHILE.WHILE LPAREN.LPAREN exp.exp RPAREN.RPAREN stmt.stmt 193 { 194 final Symbol WHILE = _symbols[offset + 1]; 195 final Symbol LPAREN = _symbols[offset + 2]; 196 final Symbol _symbol_exp = _symbols[offset + 3]; 197 final Exp exp = (Exp) _symbol_exp.value; 198 final Symbol RPAREN = _symbols[offset + 4]; 199 final Symbol _symbol_stmt = _symbols[offset + 5]; 200 final Stmt stmt = (Stmt) _symbol_stmt.value; 201 ASTNode _node_ = new WhileStmt(exp, stmt); 202 _node_.setStart(Symbol.getLine(WHILE.getStart()), (short) Symbol.getColumn(WHILE.getStart())); 203 _node_.setEnd(Symbol.getLine(_symbol_stmt.getEnd()), (short) Symbol.getColumn(_symbol_stmt.getEnd())); 204 return new Symbol(_node_); 205 } 206 case 19: // use = IDENTIFIER.IDENTIFIER 207 { 208 final Symbol IDENTIFIER = _symbols[offset + 1]; 209 ASTNode _node_ = new Use(((String)IDENTIFIER.value)); 210 _node_.setStart(Symbol.getLine(IDENTIFIER.getStart()), (short) Symbol.getColumn(IDENTIFIER.getStart())); 211 _node_.setEnd(Symbol.getLine(IDENTIFIER.getEnd()), (short) Symbol.getColumn(IDENTIFIER.getEnd())); 212 return new Symbol(_node_); 213 } 214 case 20: // name = IDENTIFIER.IDENTIFIER 215 { 216 final Symbol IDENTIFIER = _symbols[offset + 1]; 217 ASTNode _node_ = new Use(((String)IDENTIFIER.value)); 218 _node_.setStart(Symbol.getLine(IDENTIFIER.getStart()), (short) Symbol.getColumn(IDENTIFIER.getStart())); 219 _node_.setEnd(Symbol.getLine(IDENTIFIER.getEnd()), (short) Symbol.getColumn(IDENTIFIER.getEnd())); 220 return new Symbol(_node_); 221 } 222 case 21: // name = name.name DOT.DOT use.use 223 { 224 final Symbol _symbol_name = _symbols[offset + 1]; 225 final Access name = (Access) _symbol_name.value; 226 final Symbol DOT = _symbols[offset + 2]; 227 final Symbol _symbol_use = _symbols[offset + 3]; 228 final Use use = (Use) _symbol_use.value; 229 ASTNode _node_ = new Dot(name, use); 230 _node_.setStart(Symbol.getLine(_symbol_name.getStart()), (short) Symbol.getColumn(_symbol_name.getStart())); 231 _node_.setEnd(Symbol.getLine(_symbol_use.getEnd()), (short) Symbol.getColumn(_symbol_use.getEnd())); 232 return new Symbol(_node_); 233 } 234 case 22: // boolean_literal = BOOLEAN_LITERAL.BOOLEAN_LITERAL 235 { 236 final Symbol BOOLEAN_LITERAL = _symbols[offset + 1]; 237 ASTNode _node_ = new BooleanLiteral(((String)BOOLEAN_LITERAL.value)); 238 _node_.setStart(Symbol.getLine(BOOLEAN_LITERAL.getStart()), (short) Symbol.getColumn(BOOLEAN_LITERAL.getStart())); 239 _node_.setEnd(Symbol.getLine(BOOLEAN_LITERAL.getEnd()), (short) Symbol.getColumn(BOOLEAN_LITERAL.getEnd())); 240 return new Symbol(_node_); 241 } 242 case 24: // method_decl = name.name IDENTIFIER.IDENTIFIER LPAREN.LPAREN param_list_opt.param_list_opt RPAREN.RPAREN block.block 243 { 244 final Symbol _symbol_name = _symbols[offset + 1]; 245 final Access name = (Access) _symbol_name.value; 246 final Symbol IDENTIFIER = _symbols[offset + 2]; 247 final Symbol LPAREN = _symbols[offset + 3]; 248 final Symbol _symbol_param_list_opt = _symbols[offset + 4]; 249 final List param_list_opt = (List) _symbol_param_list_opt.value; 250 final Symbol RPAREN = _symbols[offset + 5]; 251 final Symbol _symbol_block = _symbols[offset + 6]; 252 final Block block = (Block) _symbol_block.value; 253 ASTNode _node_ = new MethodDecl(((String)IDENTIFIER.value), name, param_list_opt, block); 254 _node_.setStart(Symbol.getLine(_symbol_name.getStart()), (short) Symbol.getColumn(_symbol_name.getStart())); 255 _node_.setEnd(Symbol.getLine(_symbol_block.getEnd()), (short) Symbol.getColumn(_symbol_block.getEnd())); 256 return new Symbol(_node_); 257 } 258 case 25: // param_list_opt = 259 { 260 return new Symbol(new List()); 261 } 262 case 26: // param_list_opt = param_list.param_list 263 { 264 final Symbol _symbol_param_list = _symbols[offset + 1]; 265 final List param_list = (List) _symbol_param_list.value; 266 ASTNode _node_ = param_list; 267 _node_.setStart(Symbol.getLine(_symbol_param_list.getStart()), (short) Symbol.getColumn(_symbol_param_list.getStart())); 268 _node_.setEnd(Symbol.getLine(_symbol_param_list.getEnd()), (short) Symbol.getColumn(_symbol_param_list.getEnd())); 269 return new Symbol(_node_); 270 } 271 case 27: // param_list = param.param 272 { 273 final Symbol _symbol_param = _symbols[offset + 1]; 274 final ParamDecl param = (ParamDecl) _symbol_param.value; 275 ASTNode _node_ = new List().add(param); 276 _node_.setStart(Symbol.getLine(_symbol_param.getStart()), (short) Symbol.getColumn(_symbol_param.getStart())); 277 _node_.setEnd(Symbol.getLine(_symbol_param.getEnd()), (short) Symbol.getColumn(_symbol_param.getEnd())); 278 return new Symbol(_node_); 279 } 280 case 28: // param_list = param_list.param_list COMMA.COMMA param.param 281 { 282 final Symbol _symbol_param_list = _symbols[offset + 1]; 283 final List param_list = (List) _symbol_param_list.value; 284 final Symbol COMMA = _symbols[offset + 2]; 285 final Symbol _symbol_param = _symbols[offset + 3]; 286 final ParamDecl param = (ParamDecl) _symbol_param.value; 287 ASTNode _node_ = param_list.add(param); 288 _node_.setStart(Symbol.getLine(_symbol_param_list.getStart()), (short) Symbol.getColumn(_symbol_param_list.getStart())); 289 _node_.setEnd(Symbol.getLine(_symbol_param.getEnd()), (short) Symbol.getColumn(_symbol_param.getEnd())); 290 return new Symbol(_node_); 291 } 292 case 29: // param = name.name IDENTIFIER.IDENTIFIER 293 { 294 final Symbol _symbol_name = _symbols[offset + 1]; 295 final Access name = (Access) _symbol_name.value; 296 final Symbol IDENTIFIER = _symbols[offset + 2]; 297 ASTNode _node_ = new ParamDecl(((String)IDENTIFIER.value), name); 298 _node_.setStart(Symbol.getLine(_symbol_name.getStart()), (short) Symbol.getColumn(_symbol_name.getStart())); 299 _node_.setEnd(Symbol.getLine(IDENTIFIER.getEnd()), (short) Symbol.getColumn(IDENTIFIER.getEnd())); 300 return new Symbol(_node_); 301 } 302 case 30: // name = IDENTIFIER.IDENTIFIER LPAREN.LPAREN arg_list_opt.arg_list_opt RPAREN.RPAREN 303 { 304 final Symbol IDENTIFIER = _symbols[offset + 1]; 305 final Symbol LPAREN = _symbols[offset + 2]; 306 final Symbol _symbol_arg_list_opt = _symbols[offset + 3]; 307 final List arg_list_opt = (List) _symbol_arg_list_opt.value; 308 final Symbol RPAREN = _symbols[offset + 4]; 309 ASTNode _node_ = new MethodUse(((String)IDENTIFIER.value), arg_list_opt); 310 _node_.setStart(Symbol.getLine(IDENTIFIER.getStart()), (short) Symbol.getColumn(IDENTIFIER.getStart())); 311 _node_.setEnd(Symbol.getLine(RPAREN.getEnd()), (short) Symbol.getColumn(RPAREN.getEnd())); 312 return new Symbol(_node_); 313 } 314 case 31: // use = IDENTIFIER.IDENTIFIER LPAREN.LPAREN arg_list_opt.arg_list_opt RPAREN.RPAREN 315 { 316 final Symbol IDENTIFIER = _symbols[offset + 1]; 317 final Symbol LPAREN = _symbols[offset + 2]; 318 final Symbol _symbol_arg_list_opt = _symbols[offset + 3]; 319 final List arg_list_opt = (List) _symbol_arg_list_opt.value; 320 final Symbol RPAREN = _symbols[offset + 4]; 321 ASTNode _node_ = new MethodUse(((String)IDENTIFIER.value), arg_list_opt); 322 _node_.setStart(Symbol.getLine(IDENTIFIER.getStart()), (short) Symbol.getColumn(IDENTIFIER.getStart())); 323 _node_.setEnd(Symbol.getLine(RPAREN.getEnd()), (short) Symbol.getColumn(RPAREN.getEnd())); 324 return new Symbol(_node_); 325 } 326 case 32: // arg_list_opt = 327 { 328 return new Symbol(new List()); 329 } 330 case 33: // arg_list_opt = arg_list.arg_list 331 { 332 final Symbol _symbol_arg_list = _symbols[offset + 1]; 333 final List arg_list = (List) _symbol_arg_list.value; 334 ASTNode _node_ = arg_list; 335 _node_.setStart(Symbol.getLine(_symbol_arg_list.getStart()), (short) Symbol.getColumn(_symbol_arg_list.getStart())); 336 _node_.setEnd(Symbol.getLine(_symbol_arg_list.getEnd()), (short) Symbol.getColumn(_symbol_arg_list.getEnd())); 337 return new Symbol(_node_); 338 } 339 case 34: // arg_list = exp.exp 340 { 341 final Symbol _symbol_exp = _symbols[offset + 1]; 342 final Exp exp = (Exp) _symbol_exp.value; 343 ASTNode _node_ = new List().add(exp); 344 _node_.setStart(Symbol.getLine(_symbol_exp.getStart()), (short) Symbol.getColumn(_symbol_exp.getStart())); 345 _node_.setEnd(Symbol.getLine(_symbol_exp.getEnd()), (short) Symbol.getColumn(_symbol_exp.getEnd())); 346 return new Symbol(_node_); 347 } 348 case 35: // arg_list = arg_list.arg_list COMMA.COMMA exp.exp 349 { 350 final Symbol _symbol_arg_list = _symbols[offset + 1]; 351 final List arg_list = (List) _symbol_arg_list.value; 352 final Symbol COMMA = _symbols[offset + 2]; 353 final Symbol _symbol_exp = _symbols[offset + 3]; 354 final Exp exp = (Exp) _symbol_exp.value; 355 ASTNode _node_ = arg_list.add(exp); 356 _node_.setStart(Symbol.getLine(_symbol_arg_list.getStart()), (short) Symbol.getColumn(_symbol_arg_list.getStart())); 357 _node_.setEnd(Symbol.getLine(_symbol_exp.getEnd()), (short) Symbol.getColumn(_symbol_exp.getEnd())); 358 return new Symbol(_node_); 359 } 360 case 37: // return_stmt = RETURN.RETURN exp.exp SEMICOLON.SEMICOLON 361 { 362 final Symbol RETURN = _symbols[offset + 1]; 363 final Symbol _symbol_exp = _symbols[offset + 2]; 364 final Exp exp = (Exp) _symbol_exp.value; 365 final Symbol SEMICOLON = _symbols[offset + 3]; 366 ASTNode _node_ = new ReturnStmt(exp); 367 _node_.setStart(Symbol.getLine(RETURN.getStart()), (short) Symbol.getColumn(RETURN.getStart())); 368 _node_.setEnd(Symbol.getLine(SEMICOLON.getEnd()), (short) Symbol.getColumn(SEMICOLON.getEnd())); 369 return new Symbol(_node_); 370 } 371 case 6: // block_stmt = class_decl.class_decl 372 case 7: // block_stmt = var_decl.var_decl 373 case 8: // block_stmt = stmt.stmt 374 case 9: // stmt = assign_stmt.assign_stmt 375 case 10: // stmt = while_stmt.while_stmt 376 case 17: // exp = name.name 377 case 18: // exp = boolean_literal.boolean_literal 378 case 23: // block_stmt = method_decl.method_decl 379 case 36: // stmt = return_stmt.return_stmt 380 { 381 return _symbols[offset + 1]; 382 } 383 default: 384 throw new IllegalArgumentException("unknown production #" + rule_num); 385 } 386 } 387 }