| /* This file was generated by SableCC (http://www.sablecc.org/). */ |
| |
| package com.google.clearsilver.jsilver.syntax.lexer; |
| |
| import java.io.*; |
| import com.google.clearsilver.jsilver.syntax.node.*; |
| |
| @SuppressWarnings("nls") |
| public class Lexer |
| { |
| protected Token token; |
| protected State state = State.CONTENT; |
| |
| private PushbackReader in; |
| private int line; |
| private int pos; |
| private boolean cr; |
| private boolean eof; |
| private final StringBuffer text = new StringBuffer(); |
| |
| @SuppressWarnings("unused") |
| protected void filter() throws LexerException, IOException |
| { |
| // Do nothing |
| } |
| |
| public Lexer(@SuppressWarnings("hiding") PushbackReader in) |
| { |
| this.in = in; |
| } |
| |
| public Token peek() throws LexerException, IOException |
| { |
| while(this.token == null) |
| { |
| this.token = getToken(); |
| filter(); |
| } |
| |
| return this.token; |
| } |
| |
| public Token next() throws LexerException, IOException |
| { |
| while(this.token == null) |
| { |
| this.token = getToken(); |
| filter(); |
| } |
| |
| Token result = this.token; |
| this.token = null; |
| return result; |
| } |
| |
| protected Token getToken() throws IOException, LexerException |
| { |
| int dfa_state = 0; |
| |
| int start_pos = this.pos; |
| int start_line = this.line; |
| |
| int accept_state = -1; |
| int accept_token = -1; |
| int accept_length = -1; |
| int accept_pos = -1; |
| int accept_line = -1; |
| |
| @SuppressWarnings("hiding") int[][][] gotoTable = Lexer.gotoTable[this.state.id()]; |
| @SuppressWarnings("hiding") int[] accept = Lexer.accept[this.state.id()]; |
| this.text.setLength(0); |
| |
| while(true) |
| { |
| int c = getChar(); |
| |
| if(c != -1) |
| { |
| switch(c) |
| { |
| case 10: |
| if(this.cr) |
| { |
| this.cr = false; |
| } |
| else |
| { |
| this.line++; |
| this.pos = 0; |
| } |
| break; |
| case 13: |
| this.line++; |
| this.pos = 0; |
| this.cr = true; |
| break; |
| default: |
| this.pos++; |
| this.cr = false; |
| break; |
| } |
| |
| this.text.append((char) c); |
| |
| do |
| { |
| int oldState = (dfa_state < -1) ? (-2 -dfa_state) : dfa_state; |
| |
| dfa_state = -1; |
| |
| int[][] tmp1 = gotoTable[oldState]; |
| int low = 0; |
| int high = tmp1.length - 1; |
| |
| while(low <= high) |
| { |
| int middle = (low + high) / 2; |
| int[] tmp2 = tmp1[middle]; |
| |
| if(c < tmp2[0]) |
| { |
| high = middle - 1; |
| } |
| else if(c > tmp2[1]) |
| { |
| low = middle + 1; |
| } |
| else |
| { |
| dfa_state = tmp2[2]; |
| break; |
| } |
| } |
| }while(dfa_state < -1); |
| } |
| else |
| { |
| dfa_state = -1; |
| } |
| |
| if(dfa_state >= 0) |
| { |
| if(accept[dfa_state] != -1) |
| { |
| accept_state = dfa_state; |
| accept_token = accept[dfa_state]; |
| accept_length = this.text.length(); |
| accept_pos = this.pos; |
| accept_line = this.line; |
| } |
| } |
| else |
| { |
| if(accept_state != -1) |
| { |
| switch(accept_token) |
| { |
| case 0: |
| { |
| @SuppressWarnings("hiding") Token token = new0( |
| getText(accept_length), |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 0: state = State.CONTENT; break; |
| } |
| return token; |
| } |
| case 1: |
| { |
| @SuppressWarnings("hiding") Token token = new1( |
| getText(accept_length), |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 3: state = State.COMMENT; break; |
| } |
| return token; |
| } |
| case 2: |
| { |
| @SuppressWarnings("hiding") Token token = new2( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 1: state = State.COMMAND; break; |
| } |
| return token; |
| } |
| case 3: |
| { |
| @SuppressWarnings("hiding") Token token = new3( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 1: state = State.COMMAND; break; |
| } |
| return token; |
| } |
| case 4: |
| { |
| @SuppressWarnings("hiding") Token token = new4( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 1: state = State.COMMAND; break; |
| } |
| return token; |
| } |
| case 5: |
| { |
| @SuppressWarnings("hiding") Token token = new5( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 1: state = State.COMMAND; break; |
| } |
| return token; |
| } |
| case 6: |
| { |
| @SuppressWarnings("hiding") Token token = new6( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 1: state = State.COMMAND; break; |
| } |
| return token; |
| } |
| case 7: |
| { |
| @SuppressWarnings("hiding") Token token = new7( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 1: state = State.COMMAND; break; |
| } |
| return token; |
| } |
| case 8: |
| { |
| @SuppressWarnings("hiding") Token token = new8( |
| getText(accept_length), |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 1: state = State.COMMAND; break; |
| } |
| return token; |
| } |
| case 9: |
| { |
| @SuppressWarnings("hiding") Token token = new9( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 1: state = State.COMMAND; break; |
| } |
| return token; |
| } |
| case 10: |
| { |
| @SuppressWarnings("hiding") Token token = new10( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 1: state = State.COMMAND; break; |
| } |
| return token; |
| } |
| case 11: |
| { |
| @SuppressWarnings("hiding") Token token = new11( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 1: state = State.COMMAND; break; |
| } |
| return token; |
| } |
| case 12: |
| { |
| @SuppressWarnings("hiding") Token token = new12( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 1: state = State.COMMAND; break; |
| } |
| return token; |
| } |
| case 13: |
| { |
| @SuppressWarnings("hiding") Token token = new13( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 1: state = State.COMMAND; break; |
| } |
| return token; |
| } |
| case 14: |
| { |
| @SuppressWarnings("hiding") Token token = new14( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 1: state = State.COMMAND; break; |
| } |
| return token; |
| } |
| case 15: |
| { |
| @SuppressWarnings("hiding") Token token = new15( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 1: state = State.COMMAND; break; |
| } |
| return token; |
| } |
| case 16: |
| { |
| @SuppressWarnings("hiding") Token token = new16( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 1: state = State.COMMAND; break; |
| } |
| return token; |
| } |
| case 17: |
| { |
| @SuppressWarnings("hiding") Token token = new17( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 1: state = State.COMMAND; break; |
| } |
| return token; |
| } |
| case 18: |
| { |
| @SuppressWarnings("hiding") Token token = new18( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 1: state = State.COMMAND; break; |
| } |
| return token; |
| } |
| case 19: |
| { |
| @SuppressWarnings("hiding") Token token = new19( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 1: state = State.COMMAND; break; |
| } |
| return token; |
| } |
| case 20: |
| { |
| @SuppressWarnings("hiding") Token token = new20( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 1: state = State.COMMAND; break; |
| } |
| return token; |
| } |
| case 21: |
| { |
| @SuppressWarnings("hiding") Token token = new21( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 1: state = State.COMMAND; break; |
| } |
| return token; |
| } |
| case 22: |
| { |
| @SuppressWarnings("hiding") Token token = new22( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 1: state = State.COMMAND; break; |
| } |
| return token; |
| } |
| case 23: |
| { |
| @SuppressWarnings("hiding") Token token = new23( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 2: state = State.ARGS; break; |
| } |
| return token; |
| } |
| case 24: |
| { |
| @SuppressWarnings("hiding") Token token = new24( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 2: state = State.ARGS; break; |
| } |
| return token; |
| } |
| case 25: |
| { |
| @SuppressWarnings("hiding") Token token = new25( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 2: state = State.ARGS; break; |
| } |
| return token; |
| } |
| case 26: |
| { |
| @SuppressWarnings("hiding") Token token = new26( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 2: state = State.ARGS; break; |
| } |
| return token; |
| } |
| case 27: |
| { |
| @SuppressWarnings("hiding") Token token = new27( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 2: state = State.ARGS; break; |
| } |
| return token; |
| } |
| case 28: |
| { |
| @SuppressWarnings("hiding") Token token = new28( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 2: state = State.ARGS; break; |
| } |
| return token; |
| } |
| case 29: |
| { |
| @SuppressWarnings("hiding") Token token = new29( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 2: state = State.ARGS; break; |
| } |
| return token; |
| } |
| case 30: |
| { |
| @SuppressWarnings("hiding") Token token = new30( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 2: state = State.ARGS; break; |
| } |
| return token; |
| } |
| case 31: |
| { |
| @SuppressWarnings("hiding") Token token = new31( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 2: state = State.ARGS; break; |
| } |
| return token; |
| } |
| case 32: |
| { |
| @SuppressWarnings("hiding") Token token = new32( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 2: state = State.ARGS; break; |
| } |
| return token; |
| } |
| case 33: |
| { |
| @SuppressWarnings("hiding") Token token = new33( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 2: state = State.ARGS; break; |
| } |
| return token; |
| } |
| case 34: |
| { |
| @SuppressWarnings("hiding") Token token = new34( |
| getText(accept_length), |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 2: state = State.ARGS; break; |
| } |
| return token; |
| } |
| case 35: |
| { |
| @SuppressWarnings("hiding") Token token = new35( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 2: state = State.ARGS; break; |
| } |
| return token; |
| } |
| case 36: |
| { |
| @SuppressWarnings("hiding") Token token = new36( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 2: state = State.ARGS; break; |
| } |
| return token; |
| } |
| case 37: |
| { |
| @SuppressWarnings("hiding") Token token = new37( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 2: state = State.ARGS; break; |
| } |
| return token; |
| } |
| case 38: |
| { |
| @SuppressWarnings("hiding") Token token = new38( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 2: state = State.ARGS; break; |
| } |
| return token; |
| } |
| case 39: |
| { |
| @SuppressWarnings("hiding") Token token = new39( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 2: state = State.ARGS; break; |
| } |
| return token; |
| } |
| case 40: |
| { |
| @SuppressWarnings("hiding") Token token = new40( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 2: state = State.ARGS; break; |
| } |
| return token; |
| } |
| case 41: |
| { |
| @SuppressWarnings("hiding") Token token = new41( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 2: state = State.ARGS; break; |
| } |
| return token; |
| } |
| case 42: |
| { |
| @SuppressWarnings("hiding") Token token = new42( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 2: state = State.ARGS; break; |
| } |
| return token; |
| } |
| case 43: |
| { |
| @SuppressWarnings("hiding") Token token = new43( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 2: state = State.ARGS; break; |
| } |
| return token; |
| } |
| case 44: |
| { |
| @SuppressWarnings("hiding") Token token = new44( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 2: state = State.ARGS; break; |
| } |
| return token; |
| } |
| case 45: |
| { |
| @SuppressWarnings("hiding") Token token = new45( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 2: state = State.ARGS; break; |
| } |
| return token; |
| } |
| case 46: |
| { |
| @SuppressWarnings("hiding") Token token = new46( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 2: state = State.ARGS; break; |
| } |
| return token; |
| } |
| case 47: |
| { |
| @SuppressWarnings("hiding") Token token = new47( |
| getText(accept_length), |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 2: state = State.ARGS; break; |
| } |
| return token; |
| } |
| case 48: |
| { |
| @SuppressWarnings("hiding") Token token = new48( |
| getText(accept_length), |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 2: state = State.ARGS; break; |
| } |
| return token; |
| } |
| case 49: |
| { |
| @SuppressWarnings("hiding") Token token = new49( |
| getText(accept_length), |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 2: state = State.ARGS; break; |
| } |
| return token; |
| } |
| case 50: |
| { |
| @SuppressWarnings("hiding") Token token = new50( |
| getText(accept_length), |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 2: state = State.ARGS; break; |
| } |
| return token; |
| } |
| case 51: |
| { |
| @SuppressWarnings("hiding") Token token = new51( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 2: state = State.ARGS; break; |
| case 1: state = State.COMMAND; break; |
| } |
| return token; |
| } |
| case 52: |
| { |
| @SuppressWarnings("hiding") Token token = new52( |
| getText(accept_length), |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 0: state = State.COMMAND; break; |
| } |
| return token; |
| } |
| case 53: |
| { |
| @SuppressWarnings("hiding") Token token = new53( |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 1: state = State.COMMENT; break; |
| } |
| return token; |
| } |
| case 54: |
| { |
| @SuppressWarnings("hiding") Token token = new54( |
| getText(accept_length), |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 1: state = State.ARGS; break; |
| } |
| return token; |
| } |
| case 55: |
| { |
| @SuppressWarnings("hiding") Token token = new55( |
| getText(accept_length), |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 1: state = State.ARGS; break; |
| } |
| return token; |
| } |
| case 56: |
| { |
| @SuppressWarnings("hiding") Token token = new56( |
| getText(accept_length), |
| start_line + 1, |
| start_pos + 1); |
| pushBack(accept_length); |
| this.pos = accept_pos; |
| this.line = accept_line; |
| switch(state.id()) |
| { |
| case 2: state = State.CONTENT; break; |
| case 1: state = State.CONTENT; break; |
| case 3: state = State.CONTENT; break; |
| } |
| return token; |
| } |
| } |
| } |
| else |
| { |
| if(this.text.length() > 0) |
| { |
| throw new LexerException( |
| "[" + (start_line + 1) + "," + (start_pos + 1) + "]" + |
| " Unknown token: " + this.text); |
| } |
| |
| @SuppressWarnings("hiding") EOF token = new EOF( |
| start_line + 1, |
| start_pos + 1); |
| return token; |
| } |
| } |
| } |
| } |
| |
| Token new0(@SuppressWarnings("hiding") String text, @SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TData(text, line, pos); } |
| Token new1(@SuppressWarnings("hiding") String text, @SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TComment(text, line, pos); } |
| Token new2(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TVar(line, pos); } |
| Token new3(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TLvar(line, pos); } |
| Token new4(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TEvar(line, pos); } |
| Token new5(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TUvar(line, pos); } |
| Token new6(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TSet(line, pos); } |
| Token new7(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TIf(line, pos); } |
| Token new8(@SuppressWarnings("hiding") String text, @SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TElseIf(text, line, pos); } |
| Token new9(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TElse(line, pos); } |
| Token new10(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TWith(line, pos); } |
| Token new11(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TEscape(line, pos); } |
| Token new12(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TAutoescape(line, pos); } |
| Token new13(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TLoop(line, pos); } |
| Token new14(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TEach(line, pos); } |
| Token new15(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TAlt(line, pos); } |
| Token new16(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TName(line, pos); } |
| Token new17(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TDef(line, pos); } |
| Token new18(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TCall(line, pos); } |
| Token new19(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TInclude(line, pos); } |
| Token new20(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TLinclude(line, pos); } |
| Token new21(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TContentType(line, pos); } |
| Token new22(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TInline(line, pos); } |
| Token new23(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TComma(line, pos); } |
| Token new24(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TBang(line, pos); } |
| Token new25(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TAssignment(line, pos); } |
| Token new26(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TEq(line, pos); } |
| Token new27(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TNe(line, pos); } |
| Token new28(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TLt(line, pos); } |
| Token new29(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TGt(line, pos); } |
| Token new30(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TLte(line, pos); } |
| Token new31(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TGte(line, pos); } |
| Token new32(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TAnd(line, pos); } |
| Token new33(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TOr(line, pos); } |
| Token new34(@SuppressWarnings("hiding") String text, @SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TString(text, line, pos); } |
| Token new35(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new THash(line, pos); } |
| Token new36(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TPlus(line, pos); } |
| Token new37(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TMinus(line, pos); } |
| Token new38(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TStar(line, pos); } |
| Token new39(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TPercent(line, pos); } |
| Token new40(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TBracketOpen(line, pos); } |
| Token new41(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TBracketClose(line, pos); } |
| Token new42(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TParenOpen(line, pos); } |
| Token new43(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TParenClose(line, pos); } |
| Token new44(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TDot(line, pos); } |
| Token new45(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TDollar(line, pos); } |
| Token new46(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TQuestion(line, pos); } |
| Token new47(@SuppressWarnings("hiding") String text, @SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TDecNumber(text, line, pos); } |
| Token new48(@SuppressWarnings("hiding") String text, @SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new THexNumber(text, line, pos); } |
| Token new49(@SuppressWarnings("hiding") String text, @SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TWord(text, line, pos); } |
| Token new50(@SuppressWarnings("hiding") String text, @SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TArgWhitespace(text, line, pos); } |
| Token new51(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TSlash(line, pos); } |
| Token new52(@SuppressWarnings("hiding") String text, @SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TCsOpen(text, line, pos); } |
| Token new53(@SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TCommentStart(line, pos); } |
| Token new54(@SuppressWarnings("hiding") String text, @SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TCommandDelimiter(text, line, pos); } |
| Token new55(@SuppressWarnings("hiding") String text, @SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new THardDelimiter(text, line, pos); } |
| Token new56(@SuppressWarnings("hiding") String text, @SuppressWarnings("hiding") int line, @SuppressWarnings("hiding") int pos) { return new TCsClose(text, line, pos); } |
| |
| private int getChar() throws IOException |
| { |
| if(this.eof) |
| { |
| return -1; |
| } |
| |
| int result = this.in.read(); |
| |
| if(result == -1) |
| { |
| this.eof = true; |
| } |
| |
| return result; |
| } |
| |
| private void pushBack(int acceptLength) throws IOException |
| { |
| int length = this.text.length(); |
| for(int i = length - 1; i >= acceptLength; i--) |
| { |
| this.eof = false; |
| |
| this.in.unread(this.text.charAt(i)); |
| } |
| } |
| |
| protected void unread(@SuppressWarnings("hiding") Token token) throws IOException |
| { |
| @SuppressWarnings("hiding") String text = token.getText(); |
| int length = text.length(); |
| |
| for(int i = length - 1; i >= 0; i--) |
| { |
| this.eof = false; |
| |
| this.in.unread(text.charAt(i)); |
| } |
| |
| this.pos = token.getPos() - 1; |
| this.line = token.getLine() - 1; |
| } |
| |
| private String getText(int acceptLength) |
| { |
| StringBuffer s = new StringBuffer(acceptLength); |
| for(int i = 0; i < acceptLength; i++) |
| { |
| s.append(this.text.charAt(i)); |
| } |
| |
| return s.toString(); |
| } |
| |
| private static int[][][][] gotoTable; |
| /* { |
| { // CONTENT |
| {{0, 59, 1}, {60, 60, 2}, {61, 65535, 1}, }, |
| {{0, 59, 1}, {60, 60, 3}, {61, 65535, 1}, }, |
| {{0, 62, 4}, {63, 63, 5}, {64, 65535, 4}, }, |
| {{0, 62, 4}, {63, 63, 6}, {64, 65535, 4}, }, |
| {{0, 65535, -3}, }, |
| {{0, 98, 7}, {99, 99, 8}, {100, 65535, 7}, }, |
| {{0, 98, 7}, {99, 99, 9}, {100, 65535, 7}, }, |
| {{0, 65535, -3}, }, |
| {{0, 114, 10}, {115, 115, 11}, {116, 65535, 10}, }, |
| {{0, 114, 10}, {115, 115, 12}, {116, 65535, 10}, }, |
| {{0, 65535, -3}, }, |
| {{0, 8, 13}, {9, 9, 14}, {10, 10, 15}, {11, 12, 13}, {13, 13, 16}, {14, 31, 13}, {32, 32, 17}, {33, 65535, 13}, }, |
| {{0, 8, 13}, {11, 12, 13}, {14, 31, 13}, {33, 65535, 13}, }, |
| {{0, 65535, -3}, }, |
| {{9, 10, -13}, {13, 13, 16}, {32, 32, 17}, }, |
| {{9, 32, -16}, }, |
| {{9, 32, -16}, }, |
| {{9, 32, -16}, }, |
| } |
| { // COMMAND |
| {{9, 9, 1}, {10, 10, 2}, {13, 13, 3}, {32, 32, 4}, {33, 33, 5}, {35, 35, 6}, {47, 47, 7}, {58, 58, 8}, {63, 63, 9}, {97, 97, 10}, {99, 99, 11}, {100, 100, 12}, {101, 101, 13}, {105, 105, 14}, {108, 108, 15}, {110, 110, 16}, {115, 115, 17}, {117, 117, 18}, {118, 118, 19}, {119, 119, 20}, }, |
| {{9, 9, 21}, {10, 10, 22}, {13, 13, 23}, {32, 32, 24}, {63, 63, 9}, }, |
| {{9, 63, -3}, }, |
| {{9, 63, -3}, }, |
| {{9, 63, -3}, }, |
| {}, |
| {}, |
| {}, |
| {}, |
| {{62, 62, 25}, }, |
| {{108, 108, 26}, {117, 117, 27}, }, |
| {{97, 97, 28}, {111, 111, 29}, }, |
| {{101, 101, 30}, }, |
| {{97, 97, 31}, {108, 108, 32}, {115, 115, 33}, {118, 118, 34}, }, |
| {{102, 102, 35}, {110, 110, 36}, }, |
| {{105, 105, 37}, {111, 111, 38}, {118, 118, 39}, }, |
| {{97, 97, 40}, }, |
| {{101, 101, 41}, }, |
| {{118, 118, 42}, }, |
| {{97, 97, 43}, }, |
| {{105, 105, 44}, }, |
| {{9, 63, -3}, }, |
| {{9, 63, -3}, }, |
| {{9, 63, -3}, }, |
| {{9, 63, -3}, }, |
| {}, |
| {{116, 116, 45}, }, |
| {{116, 116, 46}, }, |
| {{108, 108, 47}, }, |
| {{110, 110, 48}, }, |
| {{102, 102, 49}, }, |
| {{99, 99, 50}, }, |
| {{105, 105, 51}, {115, 115, 52}, }, |
| {{99, 99, 53}, }, |
| {{97, 97, 54}, }, |
| {}, |
| {{99, 99, 55}, {108, 108, 56}, }, |
| {{110, 110, 57}, }, |
| {{111, 111, 58}, }, |
| {{97, 97, 59}, }, |
| {{109, 109, 60}, }, |
| {{116, 116, 61}, }, |
| {{97, 97, 62}, }, |
| {{114, 114, 63}, }, |
| {{116, 116, 64}, }, |
| {}, |
| {{111, 111, 65}, }, |
| {{108, 108, 66}, }, |
| {{116, 116, 67}, }, |
| {}, |
| {{104, 104, 68}, }, |
| {{102, 102, 69}, }, |
| {{101, 101, 70}, }, |
| {{97, 97, 71}, }, |
| {{114, 114, 72}, }, |
| {{108, 108, 73}, }, |
| {{105, 105, 74}, }, |
| {{99, 99, 75}, }, |
| {{112, 112, 76}, }, |
| {{114, 114, 77}, }, |
| {{101, 101, 78}, }, |
| {}, |
| {{114, 114, 79}, }, |
| {}, |
| {{104, 104, 80}, }, |
| {{101, 101, 81}, }, |
| {}, |
| {{101, 101, 82}, }, |
| {}, |
| {}, |
| {{105, 105, 83}, }, |
| {{112, 112, 84}, }, |
| {}, |
| {{117, 117, 85}, }, |
| {{110, 110, 86}, }, |
| {{108, 108, 87}, }, |
| {}, |
| {}, |
| {}, |
| {}, |
| {}, |
| {{115, 115, 88}, }, |
| {{110, 110, 89}, }, |
| {{102, 102, 90}, }, |
| {{101, 101, 91}, }, |
| {{100, 100, 92}, }, |
| {{101, 101, 93}, }, |
| {{117, 117, 94}, }, |
| {{99, 99, 95}, }, |
| {{116, 116, 96}, }, |
| {}, |
| {}, |
| {{101, 101, 97}, }, |
| {}, |
| {{100, 100, 98}, }, |
| {{97, 97, 99}, }, |
| {{45, 45, 100}, }, |
| {}, |
| {{101, 101, 101}, }, |
| {{112, 112, 102}, }, |
| {{116, 116, 103}, }, |
| {}, |
| {{101, 101, 104}, }, |
| {{121, 121, 105}, }, |
| {}, |
| {{112, 112, 106}, }, |
| {{101, 101, 107}, }, |
| {}, |
| } |
| { // ARGS |
| {{9, 9, 1}, {10, 10, 2}, {13, 13, 3}, {32, 32, 4}, {33, 33, 5}, {34, 34, 6}, {35, 35, 7}, {36, 36, 8}, {37, 37, 9}, {38, 38, 10}, {39, 39, 11}, {40, 40, 12}, {41, 41, 13}, {42, 42, 14}, {43, 43, 15}, {44, 44, 16}, {45, 45, 17}, {46, 46, 18}, {47, 47, 19}, {48, 48, 20}, {49, 57, 21}, {60, 60, 22}, {61, 61, 23}, {62, 62, 24}, {63, 63, 25}, {65, 90, 26}, {91, 91, 27}, {93, 93, 28}, {95, 95, 29}, {97, 122, 30}, {124, 124, 31}, }, |
| {{9, 32, -2}, {63, 63, 32}, }, |
| {{9, 63, -3}, }, |
| {{9, 63, -3}, }, |
| {{9, 63, -3}, }, |
| {{61, 61, 33}, }, |
| {{0, 33, 34}, {34, 34, 35}, {35, 65535, 34}, }, |
| {}, |
| {}, |
| {}, |
| {{38, 38, 36}, }, |
| {{0, 38, 37}, {39, 39, 38}, {40, 65535, 37}, }, |
| {}, |
| {}, |
| {}, |
| {}, |
| {}, |
| {}, |
| {}, |
| {}, |
| {{48, 57, 21}, {65, 87, 26}, {88, 88, 39}, {89, 90, 26}, {95, 95, 29}, {97, 119, 30}, {120, 120, 40}, {121, 122, 30}, }, |
| {{48, 57, 21}, {65, 90, 26}, {95, 122, -2}, }, |
| {{61, 61, 41}, }, |
| {{61, 61, 42}, }, |
| {{61, 61, 43}, }, |
| {{62, 62, 44}, }, |
| {{48, 57, 45}, {65, 122, -23}, }, |
| {}, |
| {}, |
| {{48, 122, -28}, }, |
| {{48, 122, -28}, }, |
| {{124, 124, 46}, }, |
| {{62, 62, 44}, }, |
| {}, |
| {{0, 65535, -8}, }, |
| {}, |
| {}, |
| {{0, 65535, -13}, }, |
| {}, |
| {{48, 57, 47}, {65, 70, 48}, {71, 90, 26}, {95, 95, 29}, {97, 102, 49}, {103, 122, 30}, }, |
| {{48, 122, -41}, }, |
| {}, |
| {}, |
| {}, |
| {}, |
| {{48, 122, -28}, }, |
| {}, |
| {{48, 122, -41}, }, |
| {{48, 122, -41}, }, |
| {{48, 122, -41}, }, |
| } |
| { // COMMENT |
| {{0, 8, 1}, {9, 9, 2}, {10, 10, 3}, {11, 12, 1}, {13, 13, 4}, {14, 31, 1}, {32, 32, 5}, {33, 62, 1}, {63, 63, 6}, {64, 65535, 1}, }, |
| {{0, 62, 1}, {63, 63, 7}, {64, 65535, 1}, }, |
| {{0, 65535, -2}, }, |
| {{0, 65535, -2}, }, |
| {{0, 65535, -2}, }, |
| {{0, 65535, -2}, }, |
| {{0, 61, 8}, {62, 62, 9}, {63, 65535, 8}, }, |
| {{0, 61, 8}, {63, 65535, 8}, }, |
| {{0, 65535, -3}, }, |
| {}, |
| } |
| };*/ |
| |
| private static int[][] accept; |
| /* { |
| // CONTENT |
| {-1, 0, -1, -1, 0, -1, -1, 0, -1, -1, 0, -1, -1, 0, 52, 52, 52, 52, }, |
| // COMMAND |
| {-1, 54, 54, 54, 54, 55, 53, 51, 54, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 56, -1, -1, -1, -1, -1, -1, -1, -1, -1, 7, -1, -1, -1, -1, -1, -1, -1, -1, -1, 15, -1, -1, -1, 17, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6, -1, 2, -1, -1, 18, -1, 14, 8, 9, -1, 4, -1, -1, -1, 13, 3, 16, 5, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, 8, 11, -1, 22, -1, -1, -1, 19, -1, -1, -1, 20, -1, -1, 12, -1, -1, 21, }, |
| // ARGS |
| {-1, 50, 50, 50, 50, 24, -1, 35, 45, 39, -1, -1, 42, 43, 38, 36, 23, 37, 44, 51, 47, 47, 28, 25, 29, 46, 49, 40, 41, 49, 49, -1, -1, 27, -1, 34, 32, -1, 34, 49, 49, 30, 26, 31, 56, 49, 33, 48, 48, 48, }, |
| // COMMENT |
| {-1, 1, 1, 1, 1, 1, -1, -1, 1, 56, }, |
| |
| };*/ |
| |
| public static class State |
| { |
| public final static State CONTENT = new State(0); |
| public final static State COMMAND = new State(1); |
| public final static State ARGS = new State(2); |
| public final static State COMMENT = new State(3); |
| |
| private int id; |
| |
| private State(@SuppressWarnings("hiding") int id) |
| { |
| this.id = id; |
| } |
| |
| public int id() |
| { |
| return this.id; |
| } |
| } |
| |
| static |
| { |
| try |
| { |
| DataInputStream s = new DataInputStream( |
| new BufferedInputStream( |
| Lexer.class.getResourceAsStream("lexer.dat"))); |
| |
| // read gotoTable |
| int length = s.readInt(); |
| gotoTable = new int[length][][][]; |
| for(int i = 0; i < gotoTable.length; i++) |
| { |
| length = s.readInt(); |
| gotoTable[i] = new int[length][][]; |
| for(int j = 0; j < gotoTable[i].length; j++) |
| { |
| length = s.readInt(); |
| gotoTable[i][j] = new int[length][3]; |
| for(int k = 0; k < gotoTable[i][j].length; k++) |
| { |
| for(int l = 0; l < 3; l++) |
| { |
| gotoTable[i][j][k][l] = s.readInt(); |
| } |
| } |
| } |
| } |
| |
| // read accept |
| length = s.readInt(); |
| accept = new int[length][]; |
| for(int i = 0; i < accept.length; i++) |
| { |
| length = s.readInt(); |
| accept[i] = new int[length]; |
| for(int j = 0; j < accept[i].length; j++) |
| { |
| accept[i][j] = s.readInt(); |
| } |
| } |
| |
| s.close(); |
| } |
| catch(Exception e) |
| { |
| throw new RuntimeException("The file \"lexer.dat\" is either missing or corrupted."); |
| } |
| } |
| } |