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    }