001 // Generated from spec/StateMachineParser.parser 002 // this code is inlined before the generated parser 003 package 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.6.1 010 * from the grammar specification "StateMachineParser.beaver". 011 */ 012 public class StateMachineParser extends Parser { 013 static public class Terminals { 014 static public final short EOF = 0; 015 static public final short TRANS = 1; 016 static public final short IDENTIFIER = 2; 017 static public final short COLON = 3; 018 static public final short ARROW = 4; 019 static public final short SEMI = 5; 020 static public final short STATE = 6; 021 022 static public final String[] NAMES = { 023 "EOF", 024 "TRANS", 025 "IDENTIFIER", 026 "COLON", 027 "ARROW", 028 "SEMI", 029 "STATE" 030 }; 031 } 032 033 static final ParsingTables PARSING_TABLES = new ParsingTables( 034 "U9oLpyaMmY0CXU5BAT2YjWuBXvMFwcjhX$ZJgdkJyvsJ1a91qbsTAdkPATb4ZZQgbhT9WNe" + 035 "WPvkLjB51BLMjg4PPMwsnOwrHI#L#8hse2j#EM#OyeW8hf2t1bzG$rhCEy2YzZ1CIpZZYKl" + 036 "RYYXiwxCii1ptBRAd$yOd0$HslA2h#w96KtoeNBji="); 037 // Generated from spec/StateMachineParser.parser 038 // this code is inlined in the generated parser class 039 040 public StateMachineParser() { 041 super(PARSING_TABLES); 042 } 043 044 protected Symbol invokeReduceAction(int rule_num, int offset) { 045 switch(rule_num) { 046 case 0: // goal = declaration_list.declaration_list 047 { 048 final Symbol _symbol_declaration_list = _symbols[offset + 1]; 049 final List declaration_list = (List) _symbol_declaration_list.value; 050 ASTNode _node_ = new StateMachine(declaration_list); 051 _node_.setStart(Symbol.getLine(_symbol_declaration_list.getStart()), (short) Symbol.getColumn(_symbol_declaration_list.getStart())); 052 _node_.setEnd(Symbol.getLine(_symbol_declaration_list.getEnd()), (short) Symbol.getColumn(_symbol_declaration_list.getEnd())); 053 return new Symbol(_node_); 054 } 055 case 1: // declaration_list = declaration.declaration 056 { 057 final Symbol _symbol_declaration = _symbols[offset + 1]; 058 final Declaration declaration = (Declaration) _symbol_declaration.value; 059 ASTNode _node_ = new List().add(declaration); 060 _node_.setStart(Symbol.getLine(_symbol_declaration.getStart()), (short) Symbol.getColumn(_symbol_declaration.getStart())); 061 _node_.setEnd(Symbol.getLine(_symbol_declaration.getEnd()), (short) Symbol.getColumn(_symbol_declaration.getEnd())); 062 return new Symbol(_node_); 063 } 064 case 2: // declaration_list = declaration_list.declaration_list declaration.declaration 065 { 066 final Symbol _symbol_declaration_list = _symbols[offset + 1]; 067 final List declaration_list = (List) _symbol_declaration_list.value; 068 final Symbol _symbol_declaration = _symbols[offset + 2]; 069 final Declaration declaration = (Declaration) _symbol_declaration.value; 070 ASTNode _node_ = declaration_list.add(declaration); 071 _node_.setStart(Symbol.getLine(_symbol_declaration_list.getStart()), (short) Symbol.getColumn(_symbol_declaration_list.getStart())); 072 _node_.setEnd(Symbol.getLine(_symbol_declaration.getEnd()), (short) Symbol.getColumn(_symbol_declaration.getEnd())); 073 return new Symbol(_node_); 074 } 075 case 3: // declaration = STATE.STATE IDENTIFIER.IDENTIFIER SEMI.SEMI 076 { 077 final Symbol STATE = _symbols[offset + 1]; 078 final Symbol IDENTIFIER = _symbols[offset + 2]; 079 final Symbol SEMI = _symbols[offset + 3]; 080 ASTNode _node_ = new State(((String)IDENTIFIER.value)); 081 _node_.setStart(Symbol.getLine(STATE.getStart()), (short) Symbol.getColumn(STATE.getStart())); 082 _node_.setEnd(Symbol.getLine(SEMI.getEnd()), (short) Symbol.getColumn(SEMI.getEnd())); 083 return new Symbol(_node_); 084 } 085 case 4: // declaration = TRANS.TRANS IDENTIFIER.ID1 COLON.COLON IDENTIFIER.ID2 ARROW.ARROW IDENTIFIER.ID3 SEMI.SEMI 086 { 087 final Symbol TRANS = _symbols[offset + 1]; 088 final Symbol ID1 = _symbols[offset + 2]; 089 final Symbol COLON = _symbols[offset + 3]; 090 final Symbol ID2 = _symbols[offset + 4]; 091 final Symbol ARROW = _symbols[offset + 5]; 092 final Symbol ID3 = _symbols[offset + 6]; 093 final Symbol SEMI = _symbols[offset + 7]; 094 ASTNode _node_ = new Transition(((String)ID1.value), ((String)ID2.value), ((String)ID3.value)); 095 _node_.setStart(Symbol.getLine(TRANS.getStart()), (short) Symbol.getColumn(TRANS.getStart())); 096 _node_.setEnd(Symbol.getLine(SEMI.getEnd()), (short) Symbol.getColumn(SEMI.getEnd())); 097 return new Symbol(_node_); 098 } 099 default: 100 throw new IllegalArgumentException("unknown production #" + rule_num); 101 } 102 } 103 }