private void emitMain()

in jflex/src/main/java/jflex/generator/Emitter.java [203:376]


  private void emitMain(String functionName) {
    if (!(scanner.standalone() || scanner.debugOption() || scanner.cupDebug())) return;

    if (scanner.cupDebug()) {
      println("  /**");
      println("   * Converts an int token code into the name of the");
      println("   * token by reflection on the cup symbol class/interface " + scanner.cupSymbol());
      println("   */");
      println("  private static String getTokenName(int token) {");
      println("    try {");
      println(
          "      java.lang.reflect.Field [] classFields = "
              + scanner.cupSymbol()
              + ".class.getFields();");
      println("      for (int i = 0; i < classFields.length; i++) {");
      println("        if (classFields[i].getInt(null) == token) {");
      println("          return classFields[i].getName();");
      println("        }");
      println("      }");
      println("    } catch (Exception e) {");
      println("      e.printStackTrace(System.err);");
      println("    }");
      println("");
      println("    return \"UNKNOWN TOKEN\";");
      println("  }");
      println("");
      println("  /**");
      println("   * Same as " + functionName + " but also prints the token to standard out");
      println("   * for debugging.");
      println("   */");

      if (scanner.cupCompatible() || scanner.cup2Compatible()) {
        // cup interface forces public method
        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(" debug_");

      print(functionName);

      print("() throws java.io.IOException");

      for (String thrown : scanner.lexThrow()) {
        print("\n    , ");
        print(thrown);
      }

      if (scanner.scanErrorException() != null) {
        print(", ");
        print(scanner.scanErrorException());
      }

      println(" {");

      println("    " + scanner.tokenType() + " s = " + functionName + "();");
      print("    System.out.println( ");
      if (scanner.lineCount()) print("\"line:\" + (yyline+1) + ");
      if (scanner.columnCount()) print("\" col:\" + (yycolumn+1) + ");
      if (scanner.charCount()) print("\" char:\" + yychar + ");
      println("\" --\"+ yytext() + \"--\" + getTokenName(s.sym) + \"--\");");
      println("    return s;");
      println("  }");
      println("");
    }

    if (scanner.standalone()) {
      println("  /**");
      println("   * Runs the scanner on input files.");
      println("   *");
      println("   * This is a standalone scanner, it will print any unmatched");
      println("   * text to System.out unchanged.");
      println("   *");
      println("   * @param argv   the command line, contains the filenames to run");
      println("   *               the scanner on.");
      println("   */");
    } else {
      println("  /**");
      println("   * Runs the scanner on input files.");
      println("   *");
      println("   * This main method is the debugging routine for the scanner.");
      println("   * It prints debugging information about each returned token to");
      println("   * System.out until the end of file is reached, or an error occured.");
      println("   *");
      println("   * @param argv   the command line, contains the filenames to run");
      println("   *               the scanner on.");
      println("   */");
    }

    String className = getBaseName(scanner.className());

    println("  public static void main(String[] argv) {");
    println("    if (argv.length == 0) {");
    println(
        "      System.out.println(\"Usage : java "
            + className
            + " [ --encoding <name> ] <inputfile(s)>\");");
    println("    }");
    println("    else {");
    println("      int firstFilePos = 0;");
    println("      String encodingName = \"UTF-8\";");
    println("      if (argv[0].equals(\"--encoding\")) {");
    println("        firstFilePos = 2;");
    println("        encodingName = argv[1];");
    println("        try {");
    println("          // Side-effect: is encodingName valid?");
    println("          java.nio.charset.Charset.forName(encodingName);");
    println("        } catch (Exception e) {");
    println("          System.out.println(\"Invalid encoding '\" + encodingName + \"'\");");
    println("          return;");
    println("        }");
    println("      }");
    println("      for (int i = firstFilePos; i < argv.length; i++) {");
    println("        " + className + " scanner = null;");
    println("        java.io.FileInputStream stream = null;");
    println("        java.io.Reader reader = null;");
    println("        try {");
    println("          stream = new java.io.FileInputStream(argv[i]);");
    println("          reader = new java.io.InputStreamReader(stream, encodingName);");
    println("          scanner = new " + className + "(reader);");
    if (scanner.standalone()) {
      println("          while ( !scanner.zzAtEOF ) scanner." + functionName + "();");
    } else if (scanner.cupDebug()) {
      println("          while ( !scanner.zzAtEOF ) scanner.debug_" + functionName + "();");
    } else {
      println("          do {");
      println("            System.out.println(scanner." + functionName + "());");
      println("          } while (!scanner.zzAtEOF);");
      println("");
    }

    println("        }");
    println("        catch (java.io.FileNotFoundException e) {");
    println("          System.out.println(\"File not found : \\\"\"+argv[i]+\"\\\"\");");
    println("        }");
    println("        catch (java.io.IOException e) {");
    println("          System.out.println(\"IO error scanning file \\\"\"+argv[i]+\"\\\"\");");
    println("          System.out.println(e);");
    println("        }");
    println("        catch (Exception e) {");
    println("          System.out.println(\"Unexpected exception:\");");
    println("          e.printStackTrace();");
    println("        }");
    println("        finally {");
    println("          if (reader != null) {");
    println("            try {");
    println("              reader.close();");
    println("            }");
    println("            catch (java.io.IOException e) {");
    println("              System.out.println(\"IO error closing file \\\"\"+argv[i]+\"\\\"\");");
    println("              System.out.println(e);");
    println("            }");
    println("          }");
    println("          if (stream != null) {");
    println("            try {");
    println("              stream.close();");
    println("            }");
    println("            catch (java.io.IOException e) {");
    println("              System.out.println(\"IO error closing file \\\"\"+argv[i]+\"\\\"\");");
    println("              System.out.println(e);");
    println("            }");
    println("          }");
    println("        }");
    println("      }");
    println("    }");
    println("  }");
    println("");
  }