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

📄 emitter.java

📁 java语法解释器生成器
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
        println("  /**");    println("   * Creates a new scanner.");    println("   * There is also java.io.Reader version of this constructor.");    println("   *");    println("   * @param   in  the java.io.Inputstream to read input from.");    println("   */");    if (!printCtorArgs) println(warn);        print("  ");    if ( scanner.isPublic ) print("public ");        print( getBaseName(scanner.className) );          print("(java.io.InputStream in");    if (printCtorArgs) emitCtorArgs();    print(")");        if ( scanner.initThrow != null && printCtorArgs ) {      print(" throws ");      print( scanner.initThrow );    }        println(" {");        print("    this(new java.io.InputStreamReader(in)");    if (printCtorArgs) {      for (int i=0; i < scanner.ctorArgs.size(); i++) {        print(", "+scanner.ctorArgs.elementAt(i));      }          }    println(");");        println("  }");  }  private void emitCtorArgs() {    for (int i = 0; i < scanner.ctorArgs.size(); i++) {      print(", "+scanner.ctorTypes.elementAt(i));      print(" "+scanner.ctorArgs.elementAt(i));    }      }  private void emitDoEOF() {    if ( scanner.eofCode == null ) return;        println("  /**");    println("   * Contains user EOF-code, which will be executed exactly once,");    println("   * when the end of file is reached");    println("   */");        print("  private void zzDoEOF()");        if ( scanner.eofThrow != null ) {      print(" throws ");      print(scanner.eofThrow);    }        println(" {");        println("    if (!zzEOFDone) {");    println("      zzEOFDone = true;");    println("    "+scanner.eofCode );    println("    }");    println("  }");    println("");    println("");  }  private void emitLexFunctHeader() {        if (scanner.cupCompatible)  {      // force public, because we have to implement java_cup.runtime.Symbol      print("  public ");    }    else {      print("  "+visibility+" ");    }        if ( scanner.tokenType == null ) {      if ( scanner.isInteger )        print( "int" );      else       if ( scanner.isIntWrap )        print( "Integer" );      else        print( "Yytoken" );    }    else      print( scanner.tokenType );          print(" ");        print(scanner.functionName);          print("() throws java.io.IOException");        if ( scanner.lexThrow != null ) {      print(", ");      print(scanner.lexThrow);    }    if ( scanner.scanErrorException != null ) {      print(", ");      print(scanner.scanErrorException);    }        println(" {");        skel.emitNext();    if ( scanner.useRowMap ) {      println("    int [] zzTransL = ZZ_TRANS;");      println("    int [] zzRowMapL = ZZ_ROWMAP;");      println("    int [] zzAttrL = ZZ_ATTRIBUTE;");    }    skel.emitNext();                if ( scanner.charCount ) {      println("      yychar+= zzMarkedPosL-zzStartRead;");      println("");    }        if ( scanner.lineCount || scanner.columnCount ) {      println("      boolean zzR = false;");      println("      for (zzCurrentPosL = zzStartRead; zzCurrentPosL < zzMarkedPosL;");      println("                                                             zzCurrentPosL++) {");      println("        switch (zzBufferL[zzCurrentPosL]) {");      println("        case '\\u000B':");       println("        case '\\u000C':");       println("        case '\\u0085':");      println("        case '\\u2028':");       println("        case '\\u2029':");       if ( scanner.lineCount )        println("          yyline++;");      if ( scanner.columnCount )        println("          yycolumn = 0;");      println("          zzR = false;");      println("          break;");            println("        case '\\r':");      if ( scanner.lineCount )        println("          yyline++;");      if ( scanner.columnCount )        println("          yycolumn = 0;");      println("          zzR = true;");      println("          break;");      println("        case '\\n':");      println("          if (zzR)");      println("            zzR = false;");      println("          else {");      if ( scanner.lineCount )        println("            yyline++;");      if ( scanner.columnCount )        println("            yycolumn = 0;");      println("          }");      println("          break;");      println("        default:");      println("          zzR = false;");      if ( scanner.columnCount )         println("          yycolumn++;");      println("        }");      println("      }");      println();      if ( scanner.lineCount ) {        println("      if (zzR) {");        println("        // peek one character ahead if it is \\n (if we have counted one line too much)");        println("        boolean zzPeek;");        println("        if (zzMarkedPosL < zzEndReadL)");        println("          zzPeek = zzBufferL[zzMarkedPosL] == '\\n';");        println("        else if (zzAtEOF)");        println("          zzPeek = false;");        println("        else {");        println("          boolean eof = zzRefill();");        println("          zzEndReadL = zzEndRead;");        println("          zzMarkedPosL = zzMarkedPos;");        println("          zzBufferL = zzBuffer;");        println("          if (eof) ");        println("            zzPeek = false;");        println("          else ");        println("            zzPeek = zzBufferL[zzMarkedPosL] == '\\n';");        println("        }");        println("        if (zzPeek) yyline--;");        println("      }");      }    }    if ( scanner.bolUsed ) {      // zzMarkedPos > zzStartRead <=> last match was not empty      // if match was empty, last value of zzAtBOL can be used      // zzStartRead is always >= 0      println("      if (zzMarkedPosL > zzStartRead) {");      println("        switch (zzBufferL[zzMarkedPosL-1]) {");      println("        case '\\n':");      println("        case '\\u000B':");       println("        case '\\u000C':");       println("        case '\\u0085':");      println("        case '\\u2028':");       println("        case '\\u2029':");       println("          zzAtBOL = true;");      println("          break;");       println("        case '\\r': ");       println("          if (zzMarkedPosL < zzEndReadL)");      println("            zzAtBOL = zzBufferL[zzMarkedPosL] != '\\n';");      println("          else if (zzAtEOF)");      println("            zzAtBOL = false;");      println("          else {");      println("            boolean eof = zzRefill();");      println("            zzMarkedPosL = zzMarkedPos;");      println("            zzEndReadL = zzEndRead;");      println("            zzBufferL = zzBuffer;");      println("            if (eof) ");      println("              zzAtBOL = false;");      println("            else ");      println("              zzAtBOL = zzBufferL[zzMarkedPosL] != '\\n';");      println("          }");            println("          break;");       println("        default:");       println("          zzAtBOL = false;");      println("        }");       println("      }");     }    skel.emitNext();        if (scanner.bolUsed) {      println("      if (zzAtBOL)");      println("        zzState = ZZ_LEXSTATE[zzLexicalState+1];");      println("      else");          println("        zzState = ZZ_LEXSTATE[zzLexicalState];");      println();    }    else {      println("      zzState = ZZ_LEXSTATE[zzLexicalState];");      println();    }    skel.emitNext();  }    private void emitGetRowMapNext() {    println("          int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ];");    println("          if (zzNext == "+DFA.NO_TARGET+") break zzForAction;");    println("          zzState = zzNext;");    println();    println("          int zzAttributes = zzAttrL[zzState];");    println("          if ( (zzAttributes & "+FINAL+") == "+FINAL+" ) {");    skel.emitNext();        println("            if ( (zzAttributes & "+NOLOOK+") == "+NOLOOK+" ) break zzForAction;");    skel.emitNext();      }    private void emitTransitionTable() {    transformTransitionTable();        println("          zzInput = zzCMapL[zzInput];");    println();    println("          boolean zzIsFinal = false;");    println("          boolean zzNoLookAhead = false;");    println();        println("          zzForNext: { switch (zzState) {");    for (int state = 0; state < dfa.numStates; state++)      if (isTransition[state]) emitState(state);    println("            default:");    println("              // if this is ever reached, there is a serious bug in JFlex");    println("              zzScanError(ZZ_UNKNOWN_ERROR);");    println("              break;");    println("          } }");    println();        println("          if ( zzIsFinal ) {");        skel.emitNext();        println("            if ( zzNoLookAhead ) break zzForAction;");    skel.emitNext();      }  /**   * Escapes all " ' \ tabs and newlines   */  private String escapify(String s) {    StringBuffer result = new StringBuffer(s.length()*2);        for (int i = 0; i < s.length(); i++) {      char c = s.charAt(i);      switch (c) {      case '\'': result.append("\\\'"); break;      case '\"': result.append("\\\""); break;      case '\\': result.append("\\\\"); break;      case '\t': result.append("\\t"); break;      case '\r': if (i+1 == s.length() || s.charAt(i+1) != '\n') result.append("\"+ZZ_NL+\"");                  break;      case '\n': result.append("\"+ZZ_NL+\""); break;      default: result.append(c);      }    }    return result.toString();  }  public void emitActionTable() {    int lastAction = 1;        int count = 0;    int value = 0;    println("  /** ");    println("   * Translates DFA states to action switch labels.");    println("   */");    CountEmitter e = new CountEmitter("Action");        e.emitInit();    for (int i = 0; i < dfa.numStates; i++) {      int newVal = 0;       if ( dfa.isFinal[i] ) {        Action action = dfa.action[i];        if (action.isEmittable()) {          Integer stored = (Integer) actionTable.get(action);          if ( stored == null ) {             stored = new Integer(lastAction++);            actionTable.put(action, stored);          }          newVal = stored.intValue();        }      }            if (value == newVal) {        count++;      }      else {        if (count > 0) e.emit(count,value);        count = 1;        value = newVal;              }    }        if (count > 0) e.emit(count,value);    e.emitUnpack();        println(e.toString());  }  private void emitActions() {    println("      switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {");    int i = actionTable.size()+1;      Enumeration actions = actionTable.keys();    while ( actions.hasMoreElements() ) {      Action action = (Action) actions.nextElement();      int label = ((Integer) actionTable.get(action)).intValue();      println("        case "+label+": ");             if (action.lookAhead() == Action.FIXED_BASE) {        println("          // lookahead expression with fixed base length");        println("          zzMarkedPos = zzStartRead + "+action.getLookLength()+";");              }            if (action.lookAhead() == Action.FIXED_LOOK ||           action.lookAhead() == Action.FINITE_CHOICE) {        println("          // lookahead expression with fixed lookahead length");        println("          yypushback("+action.getLookLength()+");");              }            if (action.lookAhead() == Action.GENERAL_LOOK) {        println("          // general lookahead, find correct zzMarkedPos");        println("          { int zzFState = "+dfa.entryState[action.getEntryState()]+";");        println("            int zzFPos = zzStartRead;");        println("            if (zzFin.length <= zzBufferL.length) { zzFin = new boolean[zzBufferL.length+1]; }");        println("            boolean zzFinL[] = zzFin;");        println("            while (zzFState != -1 && zzFPos < zzMarkedPos) {");        println("              if ((zzAttrL[zzFState] & 1) == 1) { zzFinL[zzFPos] = true; } ");        println("              zzInput = zzBufferL[zzFPos++];");        println("              zzFState = zzTransL[ zzRowMapL[zzFState] + zzCMapL[zzInput] ];");        println("            }");        println("            if (zzFState != -1 && (zzAttrL[zzFState] & 1) == 1) { zzFinL[zzFPos] = true; } ");        println();                        println("            zzFState = "+dfa.entryState[action.getEntryState()+1]+";");        println("            zzFPos = zzMarkedPos;");        println("            while (!zzFinL[zzFPos] || (zzAttrL[zzFState] & 1) != 1) {");        println("              zzInput = zzBufferL[--zzFPos];");        println("              zzFState = zzTransL[ zzRowMapL[zzFState] + zzCMapL[zzInput] ];");        println("            };");        println("            zzMarkedPos = zzFPos;");        println("          }");      }            if ( scanner.debugOption ) {        print("          System.out.println(");        if ( scanner.lineCount )          print("\"line: \"+(yyline+1)+\" \"+");        if ( scanner.columnCount )          print("\"col: \"+(yycolumn+1)+\" \"+");        println("\"match: --\"+yytext()+\"--\");");                print("          System.out.println(\"action ["+action.priority+"] { ");        print(escapify(action.content));        println(" }\");");

⌨️ 快捷键说明

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