📄 parsegen.java
字号:
ostr.println(""); if (!Options.B("CACHE_TOKENS")) { ostr.println(" " + staticOpt() + "final private int jj_ntk() {"); ostr.println(" if ((jj_nt=token.next) == null)"); ostr.println(" return (jj_ntk = (token.next=token_source.getNextToken()).kind);"); ostr.println(" else"); ostr.println(" return (jj_ntk = jj_nt.kind);"); ostr.println(" }"); ostr.println(""); } if (Options.B("ERROR_REPORTING")) { ostr.println(" " + staticOpt() + "private java.util.Vector jj_expentries = new java.util.Vector();"); ostr.println(" " + staticOpt() + "private int[] jj_expentry;"); ostr.println(" " + staticOpt() + "private int jj_kind = -1;"); if (jj2index != 0) { ostr.println(" " + staticOpt() + "private int[] jj_lasttokens = new int[100];"); ostr.println(" " + staticOpt() + "private int jj_endpos;"); ostr.println(""); ostr.println(" " + staticOpt() + "private void jj_add_error_token(int kind, int pos) {"); ostr.println(" if (pos >= 100) return;"); ostr.println(" if (pos == jj_endpos + 1) {"); ostr.println(" jj_lasttokens[jj_endpos++] = kind;"); ostr.println(" } else if (jj_endpos != 0) {"); ostr.println(" jj_expentry = new int[jj_endpos];"); ostr.println(" for (int i = 0; i < jj_endpos; i++) {"); ostr.println(" jj_expentry[i] = jj_lasttokens[i];"); ostr.println(" }"); ostr.println(" boolean exists = false;"); ostr.println(" for (java.util.Enumeration e = jj_expentries.elements(); e.hasMoreElements();) {"); ostr.println(" int[] oldentry = (int[])(e.nextElement());"); ostr.println(" if (oldentry.length == jj_expentry.length) {"); ostr.println(" exists = true;"); ostr.println(" for (int i = 0; i < jj_expentry.length; i++) {"); ostr.println(" if (oldentry[i] != jj_expentry[i]) {"); ostr.println(" exists = false;"); ostr.println(" break;"); ostr.println(" }"); ostr.println(" }"); ostr.println(" if (exists) break;"); ostr.println(" }"); ostr.println(" }"); ostr.println(" if (!exists) jj_expentries.addElement(jj_expentry);"); ostr.println(" if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind;"); ostr.println(" }"); ostr.println(" }"); } ostr.println(""); ostr.println(" " + staticOpt() + "public ParseException generateParseException() {"); ostr.println(" jj_expentries.removeAllElements();"); ostr.println(" boolean[] la1tokens = new boolean[" + tokenCount + "];"); ostr.println(" for (int i = 0; i < " + tokenCount + "; i++) {"); ostr.println(" la1tokens[i] = false;"); ostr.println(" }"); ostr.println(" if (jj_kind >= 0) {"); ostr.println(" la1tokens[jj_kind] = true;"); ostr.println(" jj_kind = -1;"); ostr.println(" }"); ostr.println(" for (int i = 0; i < " + maskindex + "; i++) {"); ostr.println(" if (jj_la1[i] == jj_gen) {"); ostr.println(" for (int j = 0; j < 32; j++) {"); for (int i = 0; i < (tokenCount-1)/32 + 1; i++) { ostr.println(" if ((jj_la1_" + i + "[i] & (1<<j)) != 0) {"); ostr.print(" la1tokens["); if (i != 0) { ostr.print((32*i) + "+"); } ostr.println("j] = true;"); ostr.println(" }"); } ostr.println(" }"); ostr.println(" }"); ostr.println(" }"); ostr.println(" for (int i = 0; i < " + tokenCount + "; i++) {"); ostr.println(" if (la1tokens[i]) {"); ostr.println(" jj_expentry = new int[1];"); ostr.println(" jj_expentry[0] = i;"); ostr.println(" jj_expentries.addElement(jj_expentry);"); ostr.println(" }"); ostr.println(" }"); if (jj2index != 0) { ostr.println(" jj_endpos = 0;"); ostr.println(" jj_rescan_token();"); ostr.println(" jj_add_error_token(0, 0);"); } ostr.println(" int[][] exptokseq = new int[jj_expentries.size()][];"); ostr.println(" for (int i = 0; i < jj_expentries.size(); i++) {"); ostr.println(" exptokseq[i] = (int[])jj_expentries.elementAt(i);"); ostr.println(" }"); ostr.println(" return new ParseException(token, exptokseq, tokenImage);"); ostr.println(" }"); } else { ostr.println(" " + staticOpt() + "public ParseException generateParseException() {"); ostr.println(" Token errortok = token.next;"); if (Options.B("KEEP_LINE_COLUMN")) ostr.println(" int line = errortok.beginLine, column = errortok.beginColumn;"); ostr.println(" String mess = (errortok.kind == 0) ? tokenImage[0] : errortok.image;"); if (Options.B("KEEP_LINE_COLUMN")) ostr.println(" return new ParseException(\"Parse error at line \" + line + \", column \" + column + \". Encountered: \" + mess);"); else ostr.println(" return new ParseException(\"Parse error at <unknown location>. Encountered: \" + mess);"); ostr.println(" }"); } ostr.println(""); if (Options.B("DEBUG_PARSER")) { ostr.println(" " + staticOpt() + "private int trace_indent = 0;"); ostr.println(" " + staticOpt() + "private boolean trace_enabled = true;"); ostr.println(""); ostr.println(" " + staticOpt() + "final public void enable_tracing() {"); ostr.println(" trace_enabled = true;"); ostr.println(" }"); ostr.println(""); ostr.println(" " + staticOpt() + "final public void disable_tracing() {"); ostr.println(" trace_enabled = false;"); ostr.println(" }"); ostr.println(""); ostr.println(" " + staticOpt() + "final private void trace_call(String s) {"); ostr.println(" if (trace_enabled) {"); ostr.println(" for (int i = 0; i < trace_indent; i++) { System.out.print(\" \"); }"); ostr.println(" System.out.println(\"Call: \" + s);"); ostr.println(" }"); ostr.println(" trace_indent = trace_indent + 2;"); ostr.println(" }"); ostr.println(""); ostr.println(" " + staticOpt() + "final private void trace_return(String s) {"); ostr.println(" trace_indent = trace_indent - 2;"); ostr.println(" if (trace_enabled) {"); ostr.println(" for (int i = 0; i < trace_indent; i++) { System.out.print(\" \"); }"); ostr.println(" System.out.println(\"Return: \" + s);"); ostr.println(" }"); ostr.println(" }"); ostr.println(""); ostr.println(" " + staticOpt() + "final private void trace_token(Token t, String where) {"); ostr.println(" if (trace_enabled) {"); ostr.println(" for (int i = 0; i < trace_indent; i++) { System.out.print(\" \"); }"); ostr.println(" System.out.print(\"Consumed token: <\" + tokenImage[t.kind]);"); ostr.println(" if (t.kind != 0 && !tokenImage[t.kind].equals(\"\\\"\" + t.image + \"\\\"\")) {"); ostr.println(" System.out.print(\": \\\"\" + t.image + \"\\\"\");"); ostr.println(" }"); ostr.println(" System.out.println(\">\" + where);"); ostr.println(" }"); ostr.println(" }"); ostr.println(""); ostr.println(" " + staticOpt() + "final private void trace_scan(Token t1, int t2) {"); ostr.println(" if (trace_enabled) {"); ostr.println(" for (int i = 0; i < trace_indent; i++) { System.out.print(\" \"); }"); ostr.println(" System.out.print(\"Visited token: <\" + tokenImage[t1.kind]);"); ostr.println(" if (t1.kind != 0 && !tokenImage[t1.kind].equals(\"\\\"\" + t1.image + \"\\\"\")) {"); ostr.println(" System.out.print(\": \\\"\" + t1.image + \"\\\"\");"); ostr.println(" }"); ostr.println(" System.out.println(\">; Expected token: <\" + tokenImage[t2] + \">\");"); ostr.println(" }"); ostr.println(" }"); ostr.println(""); } else { ostr.println(" " + staticOpt() + "final public void enable_tracing() {"); ostr.println(" }"); ostr.println(""); ostr.println(" " + staticOpt() + "final public void disable_tracing() {"); ostr.println(" }"); ostr.println(""); } if (jj2index != 0 && Options.B("ERROR_REPORTING")) { ostr.println(" " + staticOpt() + "final private void jj_rescan_token() {"); ostr.println(" jj_rescan = true;"); ostr.println(" for (int i = 0; i < " + jj2index + "; i++) {"); ostr.println(" JJCalls p = jj_2_rtns[i];"); ostr.println(" do {"); ostr.println(" if (p.gen > jj_gen) {"); ostr.println(" jj_la = p.arg; jj_lastpos = jj_scanpos = p.first;"); ostr.println(" switch (i) {"); for (int i = 0; i < jj2index; i++) { ostr.println(" case " + i + ": jj_3_" + (i+1) + "(); break;"); } ostr.println(" }"); ostr.println(" }"); ostr.println(" p = p.next;"); ostr.println(" } while (p != null);"); ostr.println(" }"); ostr.println(" jj_rescan = false;"); ostr.println(" }"); ostr.println(""); ostr.println(" " + staticOpt() + "final private void jj_save(int index, int xla) {"); ostr.println(" JJCalls p = jj_2_rtns[index];"); ostr.println(" while (p.gen > jj_gen) {"); ostr.println(" if (p.next == null) { p = p.next = new JJCalls(); break; }"); ostr.println(" p = p.next;"); ostr.println(" }"); ostr.println(" p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla;"); ostr.println(" }"); ostr.println(""); } if (jj2index != 0 && Options.B("ERROR_REPORTING")) { ostr.println(" static final class JJCalls {"); ostr.println(" int gen;"); ostr.println(" Token first;"); ostr.println(" int arg;"); ostr.println(" JJCalls next;"); ostr.println(" }"); ostr.println(""); } if (cu_from_insertion_point_2.size() != 0) { printTokenSetup((Token)(cu_from_insertion_point_2.elementAt(0))); ccol = 1; for (Enumeration enum = cu_from_insertion_point_2.elements(); enum.hasMoreElements();) { t = (Token)enum.nextElement(); printToken(t, ostr); } printTrailingComments(t, ostr); } ostr.println(""); ostr.close(); } // matches "if (Options.B("BUILD_PARSER"))" } static private PrintWriter ostr; public static void reInit() { ostr = null; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -