private boolean is_final_state(State s) { return s.ordinal() > State.SFINAL.ordinal(); }
public Lexer(Reader in) throws IOException { reader = new BufferedReader(in); current_char = (char) reader.read(); // initialize the table for FSM // TODO: refactor with static initializer final int ROWS = State.SFINAL.ordinal(); final int COLS = Typechar.values().length; table_f = new State[ROWS][COLS]; // initialize the FSM itself table_f[State.S_INITIAL.ordinal()][Typechar.TC_QUOTE.ordinal()] = State.S_STRING; table_f[State.S_INITIAL.ordinal()][Typechar.TC_LPAREN.ordinal()] = State.SFINAL_LPAREN; table_f[State.S_INITIAL.ordinal()][Typechar.TC_RPAREN.ordinal()] = State.SFINAL_RPAREN; table_f[State.S_INITIAL.ordinal()][Typechar.TC_DOT.ordinal()] = State.S_FLOAT; table_f[State.S_INITIAL.ordinal()][Typechar.TC_HYPHEN.ordinal()] = State.S_HYPHEN; table_f[State.S_INITIAL.ordinal()][Typechar.TC_DIGIT.ordinal()] = State.S_NUMERIC; table_f[State.S_INITIAL.ordinal()][Typechar.TC_IDSTART.ordinal()] = State.S_ID; table_f[State.S_INITIAL.ordinal()][Typechar.TC_OTHER.ordinal()] = State.SFINAL_ERROR; table_f[State.S_STRING.ordinal()][Typechar.TC_QUOTE.ordinal()] = State.SFINAL_STRING; table_f[State.S_STRING.ordinal()][Typechar.TC_LPAREN.ordinal()] = State.S_STRING; table_f[State.S_STRING.ordinal()][Typechar.TC_RPAREN.ordinal()] = State.S_STRING; table_f[State.S_STRING.ordinal()][Typechar.TC_DOT.ordinal()] = State.S_STRING; table_f[State.S_STRING.ordinal()][Typechar.TC_HYPHEN.ordinal()] = State.S_STRING; table_f[State.S_STRING.ordinal()][Typechar.TC_DIGIT.ordinal()] = State.S_STRING; table_f[State.S_STRING.ordinal()][Typechar.TC_IDSTART.ordinal()] = State.S_STRING; table_f[State.S_STRING.ordinal()][Typechar.TC_OTHER.ordinal()] = State.S_STRING; table_f[State.S_NUMERIC.ordinal()][Typechar.TC_QUOTE.ordinal()] = State.SFINAL_INTEGER; table_f[State.S_NUMERIC.ordinal()][Typechar.TC_LPAREN.ordinal()] = State.SFINAL_INTEGER; table_f[State.S_NUMERIC.ordinal()][Typechar.TC_RPAREN.ordinal()] = State.SFINAL_INTEGER; table_f[State.S_NUMERIC.ordinal()][Typechar.TC_DOT.ordinal()] = State.S_FLOAT; table_f[State.S_NUMERIC.ordinal()][Typechar.TC_HYPHEN.ordinal()] = State.SFINAL_INTEGER; table_f[State.S_NUMERIC.ordinal()][Typechar.TC_DIGIT.ordinal()] = State.S_NUMERIC; table_f[State.S_NUMERIC.ordinal()][Typechar.TC_IDSTART.ordinal()] = State.SFINAL_INTEGER; table_f[State.S_NUMERIC.ordinal()][Typechar.TC_OTHER.ordinal()] = State.SFINAL_INTEGER; table_f[State.S_FLOAT.ordinal()][Typechar.TC_QUOTE.ordinal()] = State.SFINAL_FLOAT; table_f[State.S_FLOAT.ordinal()][Typechar.TC_LPAREN.ordinal()] = State.SFINAL_FLOAT; table_f[State.S_FLOAT.ordinal()][Typechar.TC_RPAREN.ordinal()] = State.SFINAL_FLOAT; table_f[State.S_FLOAT.ordinal()][Typechar.TC_DOT.ordinal()] = State.S_FLOAT; table_f[State.S_FLOAT.ordinal()][Typechar.TC_HYPHEN.ordinal()] = State.SFINAL_FLOAT; table_f[State.S_FLOAT.ordinal()][Typechar.TC_DIGIT.ordinal()] = State.S_FLOAT; table_f[State.S_FLOAT.ordinal()][Typechar.TC_IDSTART.ordinal()] = State.SFINAL_FLOAT; table_f[State.S_FLOAT.ordinal()][Typechar.TC_OTHER.ordinal()] = State.SFINAL_FLOAT; table_f[State.S_ID.ordinal()][Typechar.TC_QUOTE.ordinal()] = State.SFINAL_ID; table_f[State.S_ID.ordinal()][Typechar.TC_LPAREN.ordinal()] = State.SFINAL_ID; table_f[State.S_ID.ordinal()][Typechar.TC_RPAREN.ordinal()] = State.SFINAL_ID; table_f[State.S_ID.ordinal()][Typechar.TC_DOT.ordinal()] = State.S_ID; table_f[State.S_ID.ordinal()][Typechar.TC_HYPHEN.ordinal()] = State.SFINAL_ID; table_f[State.S_ID.ordinal()][Typechar.TC_DIGIT.ordinal()] = State.S_ID; table_f[State.S_ID.ordinal()][Typechar.TC_IDSTART.ordinal()] = State.S_ID; table_f[State.S_ID.ordinal()][Typechar.TC_OTHER.ordinal()] = State.SFINAL_ID; table_f[State.S_HYPHEN.ordinal()][Typechar.TC_QUOTE.ordinal()] = State.SFINAL_ID; table_f[State.S_HYPHEN.ordinal()][Typechar.TC_LPAREN.ordinal()] = State.SFINAL_ID; table_f[State.S_HYPHEN.ordinal()][Typechar.TC_RPAREN.ordinal()] = State.SFINAL_ID; table_f[State.S_HYPHEN.ordinal()][Typechar.TC_DOT.ordinal()] = State.S_FLOAT; table_f[State.S_HYPHEN.ordinal()][Typechar.TC_HYPHEN.ordinal()] = State.S_ID; table_f[State.S_HYPHEN.ordinal()][Typechar.TC_DIGIT.ordinal()] = State.S_NUMERIC; table_f[State.S_HYPHEN.ordinal()][Typechar.TC_IDSTART.ordinal()] = State.S_ID; table_f[State.S_HYPHEN.ordinal()][Typechar.TC_OTHER.ordinal()] = State.SFINAL_ID; }