?? parser.java
字號:
/* This file was generated by SableCC (http://www.sablecc.org/). */package org.sablecc.sablecc.parser;import org.sablecc.sablecc.lexer.*;import org.sablecc.sablecc.node.*;import org.sablecc.sablecc.analysis.*;import java.util.*;import java.io.DataInputStream;import java.io.BufferedInputStream;import java.io.IOException;public class Parser{ public final Analysis ignoredTokens = new AnalysisAdapter(); protected Node node; private final Lexer lexer; private final ListIterator stack = new LinkedList().listIterator(); private int last_shift; private int last_pos; private int last_line; private Token last_token; private final TokenIndex converter = new TokenIndex(); private final int[] action = new int[2]; private final static int SHIFT = 0; private final static int REDUCE = 1; private final static int ACCEPT = 2; private final static int ERROR = 3; protected void filter() throws ParserException, LexerException, IOException {} public Parser(Lexer lexer) { this.lexer = lexer; if(actionTable == null) { try { DataInputStream s = new DataInputStream( new BufferedInputStream( Parser.class.getResourceAsStream("parser.dat"))); // read actionTable int length = s.readInt(); actionTable = new int[length][][]; for(int i = 0; i < actionTable.length; i++) { length = s.readInt(); actionTable[i] = new int[length][3]; for(int j = 0; j < actionTable[i].length; j++) { for(int k = 0; k < 3; k++) { actionTable[i][j][k] = s.readInt(); } } } // read gotoTable length = s.readInt(); gotoTable = new int[length][][]; for(int i = 0; i < gotoTable.length; i++) { length = s.readInt(); gotoTable[i] = new int[length][2]; for(int j = 0; j < gotoTable[i].length; j++) { for(int k = 0; k < 2; k++) { gotoTable[i][j][k] = s.readInt(); } } } // read errorMessages length = s.readInt(); errorMessages = new String[length]; for(int i = 0; i < errorMessages.length; i++) { length = s.readInt(); StringBuffer buffer = new StringBuffer(); for(int j = 0; j < length; j++) { buffer.append(s.readChar()); } errorMessages[i] = buffer.toString(); } // read errors length = s.readInt(); errors = new int[length]; for(int i = 0; i < errors.length; i++) { errors[i] = s.readInt(); } s.close(); } catch(Exception e) { throw new RuntimeException("The file \"parser.dat\" is either missing or corrupted."); } } } private int goTo(int index) { int state = state(); int low = 1; int high = gotoTable[index].length - 1; int value = gotoTable[index][0][1]; while(low <= high) { int middle = (low + high) / 2; if(state < gotoTable[index][middle][0]) { high = middle - 1; } else if(state > gotoTable[index][middle][0]) { low = middle + 1; } else { value = gotoTable[index][middle][1]; break; } } return value; } private void push(int state, Node node, boolean filter) throws ParserException, LexerException, IOException { this.node = node; if(filter) { filter(); } if(!stack.hasNext()) { stack.add(new State(state, this.node)); return; } State s = (State) stack.next(); s.state = state; s.node = this.node; } private int state() { State s = (State) stack.previous(); stack.next(); return s.state; } private Node pop() { return (Node) ((State) stack.previous()).node; } private int index(Switchable token) { converter.index = -1; token.apply(converter); return converter.index; } public Start parse() throws ParserException, LexerException, IOException { push(0, null, false); List ign = null; while(true) { while(index(lexer.peek()) == -1) { if(ign == null) { ign = new TypedLinkedList(NodeCast.instance); } ign.add(lexer.next()); } if(ign != null) { ignoredTokens.setIn(lexer.peek(), ign); ign = null; } last_pos = lexer.peek().getPos(); last_line = lexer.peek().getLine(); last_token = lexer.peek(); int index = index(lexer.peek()); action[0] = actionTable[state()][0][1]; action[1] = actionTable[state()][0][2]; int low = 1; int high = actionTable[state()].length - 1; while(low <= high) { int middle = (low + high) / 2; if(index < actionTable[state()][middle][0]) { high = middle - 1; } else if(index > actionTable[state()][middle][0]) { low = middle + 1; } else { action[0] = actionTable[state()][middle][1]; action[1] = actionTable[state()][middle][2]; break; } } switch(action[0]) { case SHIFT: push(action[1], lexer.next(), true); last_shift = action[1]; break; case REDUCE: switch(action[1]) { case 0: { Node node = new0(); push(goTo(0), node, true); } break; case 1: { Node node = new1(); push(goTo(0), node, true); } break; case 2: { Node node = new2(); push(goTo(0), node, true); } break; case 3: { Node node = new3(); push(goTo(0), node, true); } break; case 4: { Node node = new4(); push(goTo(0), node, true); } break; case 5: { Node node = new5(); push(goTo(0), node, true); } break; case 6: { Node node = new6(); push(goTo(0), node, true); } break; case 7: { Node node = new7(); push(goTo(0), node, true); } break; case 8: { Node node = new8(); push(goTo(0), node, true); } break; case 9: { Node node = new9(); push(goTo(0), node, true); } break; case 10: { Node node = new10(); push(goTo(0), node, true); } break; case 11: { Node node = new11(); push(goTo(0), node, true); } break; case 12: { Node node = new12(); push(goTo(0), node, true); } break; case 13: { Node node = new13(); push(goTo(0), node, true); } break; case 14: { Node node = new14(); push(goTo(0), node, true); } break; case 15: { Node node = new15(); push(goTo(0), node, true); } break; case 16: { Node node = new16(); push(goTo(0), node, true); } break; case 17: { Node node = new17(); push(goTo(0), node, true); } break; case 18: { Node node = new18(); push(goTo(0), node, true); } break; case 19: { Node node = new19(); push(goTo(0), node, true); } break; case 20: { Node node = new20(); push(goTo(0), node, true); } break; case 21: { Node node = new21(); push(goTo(0), node, true); } break; case 22: { Node node = new22(); push(goTo(0), node, true); } break; case 23: { Node node = new23(); push(goTo(0), node, true); } break; case 24: { Node node = new24(); push(goTo(0), node, true); } break; case 25: { Node node = new25(); push(goTo(0), node, true); } break; case 26: { Node node = new26(); push(goTo(0), node, true); } break; case 27: { Node node = new27(); push(goTo(0), node, true); } break; case 28: { Node node = new28(); push(goTo(0), node, true); } break; case 29: { Node node = new29(); push(goTo(0), node, true); } break; case 30: { Node node = new30(); push(goTo(0), node, true); } break; case 31: { Node node = new31(); push(goTo(0), node, true); } break; case 32: { Node node = new32(); push(goTo(0), node, true); } break; case 33: { Node node = new33(); push(goTo(0), node, true); } break; case 34: { Node node = new34(); push(goTo(0), node, true); } break; case 35: { Node node = new35(); push(goTo(0), node, true); } break; case 36: { Node node = new36(); push(goTo(0), node, true); } break; case 37: { Node node = new37(); push(goTo(0), node, true); } break; case 38: { Node node = new38(); push(goTo(0), node, true); } break; case 39: { Node node = new39(); push(goTo(0), node, true); } break; case 40: { Node node = new40(); push(goTo(0), node, true); } break; case 41: { Node node = new41(); push(goTo(0), node, true); } break; case 42: { Node node = new42(); push(goTo(0), node, true); } break; case 43: { Node node = new43(); push(goTo(0), node, true); } break; case 44: { Node node = new44(); push(goTo(0), node, true); } break; case 45: { Node node = new45(); push(goTo(0), node, true); } break; case 46: { Node node = new46(); push(goTo(0), node, true); } break; case 47: { Node node = new47(); push(goTo(0), node, true); } break; case 48: { Node node = new48(); push(goTo(0), node, true); } break; case 49: { Node node = new49(); push(goTo(0), node, true); } break; case 50: { Node node = new50(); push(goTo(0), node, true); } break; case 51: { Node node = new51(); push(goTo(0), node, true); } break; case 52:
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -