Exemplo n.º 1
0
 private State transition(Typechar c) {
   return table_f[current_state.ordinal()][c.ordinal()];
 }
Exemplo n.º 2
0
  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;
  }