⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parseengine.java

📁 java 编译器java复杂编译器,可以编译java文件的类库
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
    }    return retval;  }  static void dumpFormattedString(String str) {    char ch = ' ';    char prevChar;    boolean indentOn = true;    for (int i = 0; i < str.length(); i++) {      prevChar = ch;      ch = str.charAt(i);      if (ch == '\n' && prevChar == '\r') {        // do nothing - we've already printed a new line for the '\r'        // during the previous iteration.      } else if (ch == '\n' || ch == '\r') {        if (indentOn) {          phase1NewLine();        } else {          ostr.println("");        }      } else if (ch == '\u0001') {        indentamt += 2;      } else if (ch == '\u0002') {        indentamt -= 2;      } else if (ch == '\u0003') {        indentOn = false;      } else if (ch == '\u0004') {        indentOn = true;      } else {        ostr.print(ch);      }    }  }  static void buildPhase1Routine(BNFProduction p) {    Token t;    t = (Token)(p.return_type_tokens.elementAt(0));    boolean voidReturn = false;    if (t.kind == JavaCCParserConstants.VOID) {      voidReturn = true;    }    printTokenSetup(t); ccol = 1;    printLeadingComments(t, ostr);    ostr.print("  " + staticOpt() + "final public ");    cline = t.beginLine; ccol = t.beginColumn;    printTokenOnly(t, ostr);    for (int i = 1; i < p.return_type_tokens.size(); i++) {      t = (Token)(p.return_type_tokens.elementAt(i));      printToken(t, ostr);    }    printTrailingComments(t, ostr);    ostr.print(" " + p.lhs + "(");    if (p.parameter_list_tokens.size() != 0) {      printTokenSetup((Token)(p.parameter_list_tokens.elementAt(0)));      for (java.util.Enumeration enum = p.parameter_list_tokens.elements(); enum.hasMoreElements();) {        t = (Token)enum.nextElement();        printToken(t, ostr);      }      printTrailingComments(t, ostr);    }    ostr.print(") throws ParseException");    for (java.util.Enumeration enum = p.throws_list.elements(); enum.hasMoreElements();) {      ostr.print(", ");      java.util.Vector name = (java.util.Vector)enum.nextElement();      for (java.util.Enumeration enum1 = name.elements(); enum1.hasMoreElements();) {        t = (Token)enum1.nextElement();        ostr.print(t.image);      }    }    ostr.print(" {");    indentamt = 4;    if (Options.B("DEBUG_PARSER")) {      ostr.println("");      ostr.println("    trace_call(\"" + p.lhs + "\");");      ostr.print("    try {");      indentamt = 6;    }    if (p.declaration_tokens.size() != 0) {      printTokenSetup((Token)(p.declaration_tokens.elementAt(0))); cline--;      for (java.util.Enumeration enum = p.declaration_tokens.elements(); enum.hasMoreElements();) {        t = (Token)enum.nextElement();        printToken(t, ostr);      }      printTrailingComments(t, ostr);    }    String code = phase1ExpansionGen(p.expansion);    dumpFormattedString(code);    ostr.println("");    if (p.jumpPatched && !voidReturn) {      ostr.println("    throw new Error(\"Missing return statement in function\");");    }    if (Options.B("DEBUG_PARSER")) {      ostr.println("    } finally {");      ostr.println("      trace_return(\"" + p.lhs + "\");");      ostr.println("    }");    }    ostr.println("  }");    ostr.println("");  }  static void phase1NewLine() {    ostr.println("");    for (int i = 0; i < indentamt; i++) {      ostr.print(" ");    }  }  static String phase1ExpansionGen(Expansion e) {    String retval = "";    Token t = null;    Lookahead[] conds;    String[] actions;    if (e instanceof RegularExpression) {      RegularExpression e_nrw = (RegularExpression)e;      retval += "\n";      if (e_nrw.lhsTokens.size() != 0) {        printTokenSetup((Token)(e_nrw.lhsTokens.elementAt(0)));        for (java.util.Enumeration enum = e_nrw.lhsTokens.elements(); enum.hasMoreElements();) {          t = (Token)enum.nextElement();          retval += printToken(t);        }        retval += printTrailingComments(t);        retval += " = ";      }      if (e_nrw.label.equals("")) {        Object label = names_of_tokens.get(new Integer(e_nrw.ordinal));        if (label != null) {          retval += "jj_consume_token(" + (String)label + ");";        } else {          retval += "jj_consume_token(" + e_nrw.ordinal + ");";        }      } else {        retval += "jj_consume_token(" + e_nrw.label + ");";      }    } else if (e instanceof NonTerminal) {      NonTerminal e_nrw = (NonTerminal)e;      retval += "\n";      if (e_nrw.lhsTokens.size() != 0) {        printTokenSetup((Token)(e_nrw.lhsTokens.elementAt(0)));        for (java.util.Enumeration enum = e_nrw.lhsTokens.elements(); enum.hasMoreElements();) {          t = (Token)enum.nextElement();          retval += printToken(t);        }        retval += printTrailingComments(t);        retval += " = ";      }      retval += e_nrw.name + "(";      if (e_nrw.argument_tokens.size() != 0) {        printTokenSetup((Token)(e_nrw.argument_tokens.elementAt(0)));        for (java.util.Enumeration enum = e_nrw.argument_tokens.elements(); enum.hasMoreElements();) {          t = (Token)enum.nextElement();          retval += printToken(t);        }        retval += printTrailingComments(t);      }      retval += ");";    } else if (e instanceof Action) {      Action e_nrw = (Action)e;      retval += "\u0003\n";      if (e_nrw.action_tokens.size() != 0) {        printTokenSetup((Token)(e_nrw.action_tokens.elementAt(0))); ccol = 1;        for (java.util.Enumeration enum = e_nrw.action_tokens.elements(); enum.hasMoreElements();) {          t = (Token)enum.nextElement();          retval += printToken(t);        }        retval += printTrailingComments(t);      }      retval += "\u0004";    } else if (e instanceof Choice) {      Choice e_nrw = (Choice)e;      conds = new Lookahead[e_nrw.choices.size()];      actions = new String[e_nrw.choices.size() + 1];      actions[e_nrw.choices.size()] = "\n" + "jj_consume_token(-1);\n" + "throw new ParseException();";      // In previous line, the "throw" never throws an exception since the      // evaluation of jj_consume_token(-1) causes ParseException to be      // thrown first.      Sequence nestedSeq;      for (int i = 0; i < e_nrw.choices.size(); i++) {        nestedSeq = (Sequence)(e_nrw.choices.elementAt(i));        actions[i] = phase1ExpansionGen(nestedSeq);        conds[i] = (Lookahead)(nestedSeq.units.elementAt(0));      }      retval = buildLookaheadChecker(conds, actions);    } else if (e instanceof Sequence) {      Sequence e_nrw = (Sequence)e;      // We skip the first element in the following iteration since it is the      // Lookahead object.      for (int i = 1; i < e_nrw.units.size(); i++) {        retval += phase1ExpansionGen((Expansion)(e_nrw.units.elementAt(i)));      }    } else if (e instanceof OneOrMore) {      OneOrMore e_nrw = (OneOrMore)e;      Expansion nested_e = e_nrw.expansion;      Lookahead la;      if (nested_e instanceof Sequence) {        la = (Lookahead)(((Sequence)nested_e).units.elementAt(0));      } else {        la = new Lookahead();        la.amount = Options.I("LOOKAHEAD");        la.la_expansion = nested_e;      }      retval += "\n";      int labelIndex = ++gensymindex;      retval += "label_" + labelIndex + ":\n";      retval += "while (true) {\u0001";      retval += phase1ExpansionGen(nested_e);      conds = new Lookahead[1];      conds[0] = la;      actions = new String[2];      actions[0] = "\n;";      actions[1] = "\nbreak label_" + labelIndex + ";";      retval += buildLookaheadChecker(conds, actions);      retval += "\u0002\n" + "}";    } else if (e instanceof ZeroOrMore) {      ZeroOrMore e_nrw = (ZeroOrMore)e;      Expansion nested_e = e_nrw.expansion;      Lookahead la;      if (nested_e instanceof Sequence) {        la = (Lookahead)(((Sequence)nested_e).units.elementAt(0));      } else {        la = new Lookahead();        la.amount = Options.I("LOOKAHEAD");        la.la_expansion = nested_e;      }      retval += "\n";      int labelIndex = ++gensymindex;      retval += "label_" + labelIndex + ":\n";      retval += "while (true) {\u0001";      conds = new Lookahead[1];      conds[0] = la;      actions = new String[2];      actions[0] = "\n;";      actions[1] = "\nbreak label_" + labelIndex + ";";      retval += buildLookaheadChecker(conds, actions);      retval += phase1ExpansionGen(nested_e);      retval += "\u0002\n" + "}";    } else if (e instanceof ZeroOrOne) {      ZeroOrOne e_nrw = (ZeroOrOne)e;      Expansion nested_e = e_nrw.expansion;      Lookahead la;      if (nested_e instanceof Sequence) {        la = (Lookahead)(((Sequence)nested_e).units.elementAt(0));      } else {        la = new Lookahead();        la.amount = Options.I("LOOKAHEAD");        la.la_expansion = nested_e;      }      conds = new Lookahead[1];      conds[0] = la;      actions = new String[2];      actions[0] = phase1ExpansionGen(nested_e);      actions[1] = "\n;";      retval += buildLookaheadChecker(conds, actions);    } else if (e instanceof TryBlock) {      TryBlock e_nrw = (TryBlock)e;      Expansion nested_e = e_nrw.exp;      java.util.Vector v;      retval += "\n";      retval += "try {\u0001";      retval += phase1ExpansionGen(nested_e);      retval += "\u0002\n" + "}";      for (int i = 0; i < e_nrw.catchblks.size(); i++) {        retval += " catch (";        v = (java.util.Vector)(e_nrw.types.elementAt(i));        if (v.size() != 0) {          printTokenSetup((Token)(v.elementAt(0)));          for (java.util.Enumeration enum = v.elements(); enum.hasMoreElements();) {            t = (Token)enum.nextElement();            retval += printToken(t);          }          retval += printTrailingComments(t);        }        retval += " ";        t = (Token)(e_nrw.ids.elementAt(i));        printTokenSetup(t);        retval += printToken(t);        retval += printTrailingComments(t);        retval += ") {\u0003\n";        v = (java.util.Vector)(e_nrw.catchblks.elementAt(i));        if (v.size() != 0) {          printTokenSetup((Token)(v.elementAt(0))); ccol = 1;          for (java.util.Enumeration enum = v.elements(); enum.hasMoreElements();) {            t = (Token)enum.nextElement();            retval += printToken(t);          }          retval += printTrailingComments(t);        }        retval += "\u0004\n" + "}";      }      if (e_nrw.finallyblk != null) {        retval += " finally {\u0003\n";        if (e_nrw.finallyblk.size() != 0) {          printTokenSetup((Token)(e_nrw.finallyblk.elementAt(0))); ccol = 1;          for (java.util.Enumeration enum = e_nrw.finallyblk.elements(); enum.hasMoreElements();) {            t = (Token)enum.nextElement();            retval += printToken(t);          }          retval += printTrailingComments(t);        }        retval += "\u0004\n" + "}";      }    }    return retval;  }  static void buildPhase2Routine(Lookahead la) {    Expansion e = la.la_expansion;    ostr.println("  " + staticOpt() + "final private boolean jj_2" + e.internal_name + "(int xla) {");    ostr.println("    jj_la = xla; jj_lastpos = jj_scanpos = token;");    ostr.println("    try { return !jj_3" + e.internal_name + "(); }");    ostr.println("    catch(LookaheadSuccess ls) { return true; }");    if (Options.B("ERROR_REPORTING"))      ostr.println("    finally { jj_save(" + (Integer.parseInt(e.internal_name.substring(1))-1) + ", xla); }");    ostr.println("  }");    ostr.println("");    Phase3Data p3d = new Phase3Data(e, la.amount);    phase3list.addElement(p3d);    phase3table.put(e, p3d);  }  static private boolean xsp_declared;  static Expansion jj3_expansion;  static String genReturn(boolean value) {    String retval = (value ? "true" : "false");    if (Options.B("DEBUG_LOOKAHEAD") && jj3_expansion != null) {      String tracecode = "trace_return(\"" + ((NormalProduction)jj3_expansion.parent).lhs +                         "(LOOKAHEAD " + (value ? "FAILED" : "SUCCEEDED") + ")\");";      if (Options.B("ERROR_REPORTING")) {        tracecode = "if (!jj_rescan) " + tracecode;      }      return "{ " + tracecode + " return " + retval + "; }";    } else {      return "return " + retval + ";";    }  }  private static void generate3R(Expansion e, Phase3Data inf)  {    Expansion seq = e;    if (e.internal_name.equals(""))    {      while (true)      {         if (seq instanceof Sequence && ((Sequence)seq).units.size() == 2)         {            seq = (Expansion)((Sequence)seq).units.elementAt(1);         }         else if (seq instanceof NonTerminal)         {            NonTerminal e_nrw = (NonTerminal)seq;            NormalProduction ntprod = (NormalProduction)(production_table.get(e_nrw.name));            if (ntprod instanceof JavaCodeProduction)            {              break; // nothing to do here            }            else            {              seq = ntprod.expansion;            }         }         else            break;      }      if (seq instanceof RegularExpression)      {         e.internal_name = "jj_scan_token(" + ((RegularExpression)seq).ordinal + ")";         return;      }      gensymindex++;//if (gensymindex == 100)//{//new Error().printStackTrace();//System.out.println(" ***** seq: " + seq.internal_name + "; size: " + ((Sequence)seq).units.size());//}      e.internal_name = "R_" + gensymindex;    }    Phase3Data p3d = (Phase3Data)(phase3table.get(e));    if (p3d == null || p3d.count < inf.count) {      p3d = new Phase3Data(e, inf.count);      phase3list.addElement(p3d);      phase3table.put(e, p3d);    }  }  static void setupPhase3Builds(Phase3Data inf) {    Expansion e = inf.exp;    if (e instanceof RegularExpression) {      ; // nothing to here    } else if (e instanceof NonTerminal) {      // All expansions of non-terminals have the "name" fields set.  So

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -