This commit was manufactured by cvs2svn to create tag 'buildscript'.
[IRC.git] / Robust / cup / java_cup / Main.java
diff --git a/Robust/cup/java_cup/Main.java b/Robust/cup/java_cup/Main.java
deleted file mode 100644 (file)
index 50811b5..0000000
+++ /dev/null
@@ -1,854 +0,0 @@
-
-package java_cup;
-
-import java.util.Enumeration; 
-import java.io.*;
-
-/** This class serves as the main driver for the JavaCup system.
- *  It accepts user options and coordinates overall control flow.
- *  The main flow of control includes the following activities: 
- *  <ul>
- *    <li> Parse user supplied arguments and options.
- *    <li> Open output files.
- *    <li> Parse the specification from standard input.
- *    <li> Check for unused terminals, non-terminals, and productions.
- *    <li> Build the state machine, tables, etc.
- *    <li> Output the generated code.
- *    <li> Close output files.
- *    <li> Print a summary if requested.
- *  </ul>
- *
- *  Options to the main program include: <dl>
- *   <dt> -package name  
- *   <dd> specify package generated classes go in [default none]
- *   <dt> -parser name   
- *   <dd> specify parser class name [default "parser"]
- *   <dt> -symbols name  
- *   <dd> specify name for symbol constant class [default "sym"]
- *   <dt> -interface
- *   <dd> emit symbol constant <i>interface</i>, rather than class
- *   <dt> -nonterms      
- *   <dd> put non terminals in symbol constant class
- *   <dt> -expect #      
- *   <dd> number of conflicts expected/allowed [default 0]
- *   <dt> -compact_red   
- *   <dd> compact tables by defaulting to most frequent reduce
- *   <dt> -nowarn        
- *   <dd> don't warn about useless productions, etc.
- *   <dt> -nosummary     
- *   <dd> don't print the usual summary of parse states, etc.
- *   <dt> -progress      
- *   <dd> print messages to indicate progress of the system
- *   <dt> -time          
- *   <dd> print time usage summary
- *   <dt> -dump_grammar  
- *   <dd> produce a dump of the symbols and grammar
- *   <dt> -dump_states   
- *   <dd> produce a dump of parse state machine
- *   <dt> -dump_tables   
- *   <dd> produce a dump of the parse tables
- *   <dt> -dump          
- *   <dd> produce a dump of all of the above
- *   <dt> -debug         
- *   <dd> turn on debugging messages within JavaCup 
- *   <dt> -nopositions
- *   <dd> don't generate the positions code
- *   <dt> -noscanner
- *   <dd> don't refer to java_cup.runtime.Scanner in the parser
- *        (for compatibility with old runtimes)
- *   <dt> -version
- *   <dd> print version information for JavaCUP and halt.
- *   </dl>
- *
- * @version last updated: 7/3/96
- * @author  Frank Flannery
- */
-
-public class Main {
-
-  /*-----------------------------------------------------------*/
-  /*--- Constructor(s) ----------------------------------------*/
-  /*-----------------------------------------------------------*/
-  /** Only constructor is private, so we do not allocate any instances of this
-      class. */
-  private Main() { }
-
-  /*-------------------------*/
-  /* Options set by the user */
-  /*-------------------------*/
-  /** User option -- do we print progress messages. */
-  protected static boolean print_progress   = true;
-  /** User option -- do we produce a dump of the state machine */
-  protected static boolean opt_dump_states  = false;
-  /** User option -- do we produce a dump of the parse tables */
-  protected static boolean opt_dump_tables  = false;
-  /** User option -- do we produce a dump of the grammar */
-  protected static boolean opt_dump_grammar = false;
-  /** User option -- do we show timing information as a part of the summary */
-  protected static boolean opt_show_timing  = false;
-  /** User option -- do we run produce extra debugging messages */
-  protected static boolean opt_do_debug     = false;
-  /** User option -- do we compact tables by making most common reduce the 
-      default action */
-  protected static boolean opt_compact_red  = false;
-  /** User option -- should we include non terminal symbol numbers in the 
-      symbol constant class. */
-  protected static boolean include_non_terms = false;
-  /** User option -- do not print a summary. */
-  protected static boolean no_summary = false;
-  /** User option -- number of conflicts to expect */
-  protected static int expect_conflicts = 0;
-
-  /* frankf added this 6/18/96 */
-  /** User option -- should generator generate code for left/right values? */
-  protected static boolean lr_values = true;
-
-  /** User option -- should symbols be put in a class or an interface? [CSA]*/
-  protected static boolean sym_interface = false;
-
-  /** User option -- should generator suppress references to
-   *  java_cup.runtime.Scanner for compatibility with old runtimes? */
-  protected static boolean suppress_scanner = false;
-
-  /*----------------------------------------------------------------------*/
-  /* Timing data (not all of these time intervals are mutually exclusive) */
-  /*----------------------------------------------------------------------*/
-  /** Timing data -- when did we start */
-  protected static long start_time       = 0;
-  /** Timing data -- when did we end preliminaries */
-  protected static long prelim_end       = 0;
-  /** Timing data -- when did we end parsing */
-  protected static long parse_end        = 0;
-  /** Timing data -- when did we end checking */
-  protected static long check_end        = 0;
-  /** Timing data -- when did we end dumping */
-  protected static long dump_end         = 0;
-  /** Timing data -- when did we end state and table building */
-  protected static long build_end        = 0;
-  /** Timing data -- when did we end nullability calculation */
-  protected static long nullability_end  = 0;
-  /** Timing data -- when did we end first set calculation */
-  protected static long first_end        = 0;
-  /** Timing data -- when did we end state machine construction */
-  protected static long machine_end      = 0;
-  /** Timing data -- when did we end table construction */
-  protected static long table_end        = 0;
-  /** Timing data -- when did we end checking for non-reduced productions */
-  protected static long reduce_check_end = 0;
-  /** Timing data -- when did we finish emitting code */
-  protected static long emit_end         = 0;
-  /** Timing data -- when were we completely done */
-  protected static long final_time       = 0;
-
-  /* Additional timing information is also collected in emit */
-
-  /*-----------------------------------------------------------*/
-  /*--- Main Program ------------------------------------------*/
-  /*-----------------------------------------------------------*/
-
-  /** The main driver for the system. 
-   * @param argv an array of strings containing command line arguments.
-   */
-  public static void main(String argv[]) 
-    throws internal_error, java.io.IOException, java.lang.Exception
-    {
-      boolean did_output = false;
-
-      start_time = System.currentTimeMillis();
-
-      /* process user options and arguments */
-      parse_args(argv);
-
-      /* frankf 6/18/96
-        hackish, yes, but works */
-      emit.set_lr_values(lr_values);
-      /* open output files */
-      if (print_progress) System.err.println("Opening files...");
-      /* use a buffered version of standard input */
-      input_file = new BufferedInputStream(System.in);
-
-      prelim_end = System.currentTimeMillis();
-
-      /* parse spec into internal data structures */
-      if (print_progress) 
-       System.err.println("Parsing specification from standard input...");
-      parse_grammar_spec();
-
-      parse_end = System.currentTimeMillis();
-
-      /* don't proceed unless we are error free */
-      if (lexer.error_count == 0)
-       {
-         /* check for unused bits */
-          if (print_progress) System.err.println("Checking specification...");
-          check_unused();
-
-          check_end = System.currentTimeMillis();
-
-         /* build the state machine and parse tables */
-          if (print_progress) System.err.println("Building parse tables...");
-          build_parser();
-
-          build_end = System.currentTimeMillis();
-
-         /* output the generated code, if # of conflicts permits */
-         if (lexer.error_count != 0) {
-             // conflicts! don't emit code, don't dump tables.
-             opt_dump_tables = false;
-         } else { // everything's okay, emit parser.
-             if (print_progress) System.err.println("Writing parser...");
-             open_files();
-             emit_parser();
-             did_output = true;
-         }
-       }
-      /* fix up the times to make the summary easier */
-      emit_end = System.currentTimeMillis();
-
-      /* do requested dumps */
-      if (opt_dump_grammar) dump_grammar();
-      if (opt_dump_states)  dump_machine(); 
-      if (opt_dump_tables)  dump_tables(); 
-
-      dump_end = System.currentTimeMillis();
-
-      /* close input/output files */
-      if (print_progress) System.err.println("Closing files...");
-      close_files();
-
-      /* produce a summary if desired */
-      if (!no_summary) emit_summary(did_output);
-
-      /* If there were errors during the run,
-       * exit with non-zero status (makefile-friendliness). --CSA */
-      if (lexer.error_count != 0)
-         System.exit(100);
-    }
-
-  /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/
-
-  /** Print a "usage message" that described possible command line options, 
-   *  then exit.
-   * @param message a specific error message to preface the usage message by.
-   */
-  protected static void usage(String message)
-    {
-      System.err.println();
-      System.err.println(message);
-      System.err.println();
-      System.err.println(
-"Usage: " + version.program_name + " [options] [filename]\n" +
-"  and expects a specification file on standard input if no filename is given.\n" +
-"  Legal options include:\n" +
-"    -package name  specify package generated classes go in [default none]\n" +
-"    -parser name   specify parser class name [default \"parser\"]\n" +
-"    -symbols name  specify name for symbol constant class [default \"sym\"]\n"+
-"    -interface     put symbols in an interface, rather than a class\n" +
-"    -nonterms      put non terminals in symbol constant class\n" + 
-"    -expect #      number of conflicts expected/allowed [default 0]\n" + 
-"    -compact_red   compact tables by defaulting to most frequent reduce\n" +
-"    -nowarn        don't warn about useless productions, etc.\n" +
-"    -nosummary     don't print the usual summary of parse states, etc.\n" +
-"    -nopositions   don't propagate the left and right token position values\n" +
-"    -noscanner     don't refer to java_cup.runtime.Scanner\n" +
-"    -progress      print messages to indicate progress of the system\n" +
-"    -time          print time usage summary\n" +
-"    -dump_grammar  produce a human readable dump of the symbols and grammar\n"+
-"    -dump_states   produce a dump of parse state machine\n"+
-"    -dump_tables   produce a dump of the parse tables\n"+
-"    -dump          produce a dump of all of the above\n"+
-"    -version       print the version information for CUP and exit\n"
-      );
-      System.exit(1);
-    }
-
-  /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/
-
-  /** Parse command line options and arguments to set various user-option
-   *  flags and variables. 
-   * @param argv the command line arguments to be parsed.
-   */
-  protected static void parse_args(String argv[])
-    {
-      int len = argv.length;
-      int i;
-
-      /* parse the options */
-      for (i=0; i<len; i++)
-       {
-         /* try to get the various options */
-         if (argv[i].equals("-package"))
-           {
-             /* must have an arg */
-             if (++i >= len || argv[i].startsWith("-") || 
-                               argv[i].endsWith(".cup")) 
-               usage("-package must have a name argument");
-
-             /* record the name */
-             emit.package_name = argv[i];
-           }
-         else if (argv[i].equals("-parser"))
-           {
-             /* must have an arg */
-             if (++i >= len || argv[i].startsWith("-") || 
-                               argv[i].endsWith(".cup")) 
-               usage("-parser must have a name argument");
-
-             /* record the name */
-             emit.parser_class_name = argv[i];
-           }
-         else if (argv[i].equals("-symbols"))
-           {
-             /* must have an arg */
-             if (++i >= len || argv[i].startsWith("-") || 
-                               argv[i].endsWith(".cup")) 
-               usage("-symbols must have a name argument");
-
-             /* record the name */
-             emit.symbol_const_class_name = argv[i];
-           }
-         else if (argv[i].equals("-nonterms"))
-           {
-             include_non_terms = true;
-           }
-         else if (argv[i].equals("-expect"))
-           {
-             /* must have an arg */
-             if (++i >= len || argv[i].startsWith("-") || 
-                               argv[i].endsWith(".cup")) 
-               usage("-expect must have a name argument");
-
-             /* record the number */
-             try {
-               expect_conflicts = Integer.parseInt(argv[i]);
-             } catch (NumberFormatException e) {
-               usage("-expect must be followed by a decimal integer");
-             }
-           }
-         else if (argv[i].equals("-compact_red"))  opt_compact_red = true;
-         else if (argv[i].equals("-nosummary"))    no_summary = true;
-         else if (argv[i].equals("-nowarn"))       emit.nowarn = true;
-         else if (argv[i].equals("-dump_states"))  opt_dump_states = true;
-         else if (argv[i].equals("-dump_tables"))  opt_dump_tables = true; 
-         else if (argv[i].equals("-progress"))     print_progress = true;
-         else if (argv[i].equals("-dump_grammar")) opt_dump_grammar = true;
-         else if (argv[i].equals("-dump")) 
-               opt_dump_states = opt_dump_tables = opt_dump_grammar = true; 
-         else if (argv[i].equals("-time"))         opt_show_timing = true; 
-         else if (argv[i].equals("-debug"))        opt_do_debug = true;
-         /* frankf 6/18/96 */
-         else if (argv[i].equals("-nopositions"))  lr_values = false;
-         /* CSA 12/21/97 */
-         else if (argv[i].equals("-interface"))    sym_interface = true;
-         /* CSA 23-Jul-1999 */
-         else if (argv[i].equals("-noscanner"))    suppress_scanner = true;
-         /* CSA 23-Jul-1999 */
-         else if (argv[i].equals("-version")) {
-             System.out.println(version.title_str);
-             System.exit(1);
-         }
-         /* CSA 24-Jul-1999; suggestion by Jean Vaucher */
-         else if (!argv[i].startsWith("-") && i==len-1) {
-             /* use input from file. */
-             try {
-                 System.setIn(new FileInputStream(argv[i]));
-             } catch (java.io.FileNotFoundException e) {
-                 usage("Unable to open \"" + argv[i] +"\" for input");
-             }
-         }
-         else
-           {
-             usage("Unrecognized option \"" + argv[i] + "\"");
-           }
-       }
-    }
-
-  /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/
-
-  /*-------*/
-  /* Files */
-  /*-------*/
-
-  /** Input file.  This is a buffered version of System.in. */
-  protected static BufferedInputStream input_file;
-
-  /** Output file for the parser class. */
-  protected static PrintWriter parser_class_file;
-
-  /** Output file for the symbol constant class. */
-  protected static PrintWriter symbol_class_file;
-
-  /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/
-
-  /** Open various files used by the system. */
-  protected static void open_files()
-    {
-      File fil;
-      String out_name;
-
-      /* open each of the output files */
-
-      /* parser class */
-      out_name = emit.parser_class_name + ".java";
-      fil = new File(out_name);
-      try {
-        parser_class_file = new PrintWriter(
-                new BufferedOutputStream(new FileOutputStream(fil), 4096));
-      } catch(Exception e) {
-       System.err.println("Can't open \"" + out_name + "\" for output");
-       System.exit(3);
-      }
-
-      /* symbol constants class */
-      out_name = emit.symbol_const_class_name + ".java";
-      fil = new File(out_name);
-      try {
-        symbol_class_file = new PrintWriter(
-                new BufferedOutputStream(new FileOutputStream(fil), 4096));
-      } catch(Exception e) {
-       System.err.println("Can't open \"" + out_name + "\" for output");
-       System.exit(4);
-      }
-    }
-
-  /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/
-
-  /** Close various files used by the system. */
-  protected static void close_files() throws java.io.IOException
-    {
-      if (input_file != null) input_file.close();
-      if (parser_class_file != null) parser_class_file.close();
-      if (symbol_class_file != null) symbol_class_file.close();
-    }
-
-  /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/
-
-  /** Parse the grammar specification from standard input.  This produces
-   *  sets of terminal, non-terminals, and productions which can be accessed
-   *  via static variables of the respective classes, as well as the setting
-   *  of various variables (mostly in the emit class) for small user supplied
-   *  items such as the code to scan with.
-   */
-  protected static void parse_grammar_spec() throws java.lang.Exception
-    {
-      parser parser_obj;
-
-      /* create a parser and parse with it */
-      parser_obj = new parser();
-      try {
-       if (opt_do_debug)
-          parser_obj.debug_parse();
-       else
-          parser_obj.parse();
-      } catch (Exception e)
-      {
-       /* something threw an exception.  catch it and emit a message so we 
-          have a line number to work with, then re-throw it */
-       lexer.emit_error("Internal error: Unexpected exception");
-       throw e;
-      }
-    }
-
-  /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/
-
-  /** Check for unused symbols.  Unreduced productions get checked when
-   *  tables are created.
-   */
-  protected static void check_unused()
-    {
-      terminal term;
-      non_terminal nt;
-
-      /* check for unused terminals */
-      for (Enumeration t = terminal.all(); t.hasMoreElements(); )
-       {
-         term = (terminal)t.nextElement();
-
-         /* don't issue a message for EOF */
-         if (term == terminal.EOF) continue;
-
-         /* or error */
-         if (term == terminal.error) continue;
-
-         /* is this one unused */
-         if (term.use_count() == 0)
-           {
-             /* count it and warn if we are doing warnings */
-             emit.unused_term++;
-             if (!emit.nowarn) 
-               {
-                 System.err.println("Warning: Terminal \"" + term.name() + 
-                                    "\" was declared but never used");
-                 lexer.warning_count++;
-               }
-           }
-       }
-
-      /* check for unused non terminals */
-      for (Enumeration n = non_terminal.all(); n.hasMoreElements(); )
-       {
-         nt = (non_terminal)n.nextElement();
-
-         /* is this one unused */
-         if (nt.use_count() == 0)
-           {
-             /* count and warn if we are doing warnings */
-             emit.unused_term++;
-             if (!emit.nowarn) 
-               {
-                 System.err.println("Warning: Non terminal \"" + nt.name() + 
-                                    "\" was declared but never used");
-                 lexer.warning_count++;
-               }
-           }
-       }
-
-    }
-
-  /* . . . . . . . . . . . . . . . . . . . . . . . . .*/
-  /* . . Internal Results of Generating the Parser . .*/
-  /* . . . . . . . . . . . . . . . . . . . . . . . . .*/
-
-  /** Start state in the overall state machine. */
-  protected static lalr_state start_state;
-
-  /** Resulting parse action table. */
-  protected static parse_action_table action_table;
-
-  /** Resulting reduce-goto table. */
-  protected static parse_reduce_table reduce_table;
-
-  /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/
-
-  /** Build the (internal) parser from the previously parsed specification.
-   *  This includes:<ul>
-   *    <li> Computing nullability of non-terminals.
-   *    <li> Computing first sets of non-terminals and productions.
-   *    <li> Building the viable prefix recognizer machine.
-   *    <li> Filling in the (internal) parse tables.
-   *    <li> Checking for unreduced productions.
-   *  </ul>
-   */
-  protected static void build_parser() throws internal_error
-    {
-      /* compute nullability of all non terminals */
-      if (opt_do_debug || print_progress) 
-       System.err.println("  Computing non-terminal nullability...");
-      non_terminal.compute_nullability();
-
-      nullability_end = System.currentTimeMillis();
-
-      /* compute first sets of all non terminals */
-      if (opt_do_debug || print_progress) 
-       System.err.println("  Computing first sets...");
-      non_terminal.compute_first_sets();
-
-      first_end = System.currentTimeMillis();
-
-      /* build the LR viable prefix recognition machine */
-      if (opt_do_debug || print_progress) 
-       System.err.println("  Building state machine...");
-      start_state = lalr_state.build_machine(emit.start_production);
-
-      machine_end = System.currentTimeMillis();
-
-      /* build the LR parser action and reduce-goto tables */
-      if (opt_do_debug || print_progress) 
-       System.err.println("  Filling in tables...");
-      action_table = new parse_action_table();
-      reduce_table = new parse_reduce_table();
-      for (Enumeration st = lalr_state.all(); st.hasMoreElements(); )
-       {
-         lalr_state lst = (lalr_state)st.nextElement();
-         lst.build_table_entries(
-                                             action_table, reduce_table);
-       }
-
-      table_end = System.currentTimeMillis();
-
-      /* check and warn for non-reduced productions */
-      if (opt_do_debug || print_progress) 
-       System.err.println("  Checking for non-reduced productions...");
-      action_table.check_reductions();
-
-      reduce_check_end = System.currentTimeMillis();
-
-      /* if we have more conflicts than we expected issue a message and die */
-      if (emit.num_conflicts > expect_conflicts)
-       {
-         System.err.println("*** More conflicts encountered than expected " +
-                            "-- parser generation aborted");
-         lexer.error_count++; // indicate the problem.
-         // we'll die on return, after clean up.
-       }
-    }
-
-  /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/
-
-  /** Call the emit routines necessary to write out the generated parser. */
-  protected static void emit_parser() throws internal_error
-    {
-      emit.symbols(symbol_class_file, include_non_terms, sym_interface);
-      emit.parser(parser_class_file, action_table, reduce_table, 
-                 start_state.index(), emit.start_production, opt_compact_red,
-                 suppress_scanner);
-    }
-
-  /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/
-
-  /** Helper routine to optionally return a plural or non-plural ending. 
-   * @param val the numerical value determining plurality.
-   */
-  protected static String plural(int val)
-    {
-      if (val == 1)
-       return "";
-      else
-       return "s";
-    }
-
-  /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/
-
-  /** Emit a long summary message to standard error (System.err) which 
-   *  summarizes what was found in the specification, how many states were
-   *  produced, how many conflicts were found, etc.  A detailed timing 
-   *  summary is also produced if it was requested by the user.
-   * @param output_produced did the system get far enough to generate code.
-   */
-  protected static void emit_summary(boolean output_produced)
-    {
-      final_time = System.currentTimeMillis();
-
-      if (no_summary) return;
-
-      System.err.println("------- " + version.title_str + 
-                        " Parser Generation Summary -------");
-
-      /* error and warning count */
-      System.err.println("  " + lexer.error_count + " error" + 
-        plural(lexer.error_count) + " and " + lexer.warning_count + 
-        " warning" + plural(lexer.warning_count));
-
-      /* basic stats */
-      System.err.print("  " + terminal.number() + " terminal" + 
-                        plural(terminal.number()) + ", ");
-      System.err.print(non_terminal.number() + " non-terminal" + 
-                        plural(non_terminal.number()) + ", and ");
-      System.err.println(production.number() + " production" + 
-                        plural(production.number()) + " declared, ");
-      System.err.println("  producing " + lalr_state.number() + 
-                        " unique parse states.");
-
-      /* unused symbols */
-      System.err.println("  " + emit.unused_term + " terminal" + 
-                        plural(emit.unused_term) + " declared but not used.");
-      System.err.println("  " + emit.unused_non_term + " non-terminal" + 
-                        plural(emit.unused_term) + " declared but not used.");
-
-      /* productions that didn't reduce */
-      System.err.println("  " + emit.not_reduced + " production" + 
-                        plural(emit.not_reduced) + " never reduced.");
-
-      /* conflicts */
-      System.err.println("  " + emit.num_conflicts + " conflict" +
-                        plural(emit.num_conflicts) + " detected" +
-                        " (" + expect_conflicts + " expected).");
-
-      /* code location */
-      if (output_produced)
-       System.err.println("  Code written to \"" + emit.parser_class_name + 
-               ".java\", and \"" + emit.symbol_const_class_name + ".java\".");
-      else
-       System.err.println("  No code produced.");
-
-      if (opt_show_timing) show_times();
-
-      System.err.println(
-       "---------------------------------------------------- (" + 
-        version.version_str + ")");
-    }
-
-  /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/
-
-  /** Produce the optional timing summary as part of an overall summary. */
-  protected static void show_times()
-    {
-      long total_time = final_time - start_time;
-
-      System.err.println(". . . . . . . . . . . . . . . . . . . . . . . . . ");
-      System.err.println("  Timing Summary");
-      System.err.println("    Total time       "
-        + timestr(final_time-start_time, total_time));
-      System.err.println("      Startup        "
-       + timestr(prelim_end-start_time, total_time));
-      System.err.println("      Parse          "
-       + timestr(parse_end-prelim_end, total_time) );
-      if (check_end != 0)
-        System.err.println("      Checking       "
-           + timestr(check_end-parse_end, total_time));
-      if (check_end != 0 && build_end != 0)
-        System.err.println("      Parser Build   "
-           + timestr(build_end-check_end, total_time));
-      if (nullability_end != 0 && check_end != 0)
-        System.err.println("        Nullability  "
-           + timestr(nullability_end-check_end, total_time));
-      if (first_end != 0 && nullability_end != 0)
-        System.err.println("        First sets   "
-            + timestr(first_end-nullability_end, total_time));
-      if (machine_end != 0 && first_end != 0)
-        System.err.println("        State build  " 
-           + timestr(machine_end-first_end, total_time)); 
-      if (table_end != 0 && machine_end != 0)
-        System.err.println("        Table build  " 
-           + timestr(table_end-machine_end, total_time)); 
-      if (reduce_check_end != 0 && table_end != 0)
-        System.err.println("        Checking     " 
-           + timestr(reduce_check_end-table_end, total_time));
-      if (emit_end != 0 && build_end != 0)
-        System.err.println("      Code Output    "
-           + timestr(emit_end-build_end, total_time));
-      if (emit.symbols_time != 0)
-       System.err.println("        Symbols      "
-           + timestr(emit.symbols_time, total_time));
-      if (emit.parser_time != 0)
-       System.err.println("        Parser class "
-           + timestr(emit.parser_time, total_time));
-      if (emit.action_code_time != 0)
-       System.err.println("          Actions    "
-           + timestr(emit.action_code_time, total_time));
-      if (emit.production_table_time != 0)
-       System.err.println("          Prod table "
-           + timestr(emit.production_table_time, total_time));
-      if (emit.action_table_time != 0)
-       System.err.println("          Action tab "
-           + timestr(emit.action_table_time, total_time));
-      if (emit.goto_table_time != 0)
-       System.err.println("          Reduce tab "
-           + timestr(emit.goto_table_time, total_time));
-
-      System.err.println("      Dump Output    "
-       + timestr(dump_end-emit_end, total_time));
-    }
-
-  /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/
-
-  /** Helper routine to format a decimal based display of seconds and
-   *  percentage of total time given counts of milliseconds.   Note: this
-   *  is broken for use with some instances of negative time (since we don't 
-   *  use any negative time here, we let if be for now).
-   * @param time_val   the value being formatted (in ms).
-   * @param total_time total time percentages are calculated against (in ms).
-   */
-  protected static String timestr(long time_val, long total_time)
-    {
-      boolean neg;
-      long    ms = 0;
-      long    sec = 0;
-      long    percent10;
-      String  pad;
-
-      /* work with positives only */
-      neg = time_val < 0;
-      if (neg) time_val = -time_val;
-
-      /* pull out seconds and ms */
-      ms = time_val % 1000;
-      sec = time_val / 1000;
-
-      /* construct a pad to blank fill seconds out to 4 places */
-      if (sec < 10)   
-       pad = "   ";
-      else if (sec < 100)  
-       pad = "  ";
-      else if (sec < 1000) 
-       pad = " ";
-      else
-       pad = "";
-
-      /* calculate 10 times the percentage of total */
-      percent10 = (time_val*1000)/total_time;
-
-      /* build and return the output string */
-      return (neg ? "-" : "") + pad + sec + "." + 
-            ((ms%1000)/100) + ((ms%100)/10) + (ms%10) + "sec" +
-            " (" + percent10/10 + "." + percent10%10 + "%)";
-    }
-
-  /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/
-
-  /** Produce a human readable dump of the grammar. */
-  public static void dump_grammar() throws internal_error
-    {
-      System.err.println("===== Terminals =====");
-      for (int tidx=0, cnt=0; tidx < terminal.number(); tidx++, cnt++)
-       {
-         System.err.print("["+tidx+"]"+terminal.find(tidx).name()+" ");
-         if ((cnt+1) % 5 == 0) System.err.println();
-       }
-      System.err.println();
-      System.err.println();
-
-      System.err.println("===== Non terminals =====");
-      for (int nidx=0, cnt=0; nidx < non_terminal.number(); nidx++, cnt++)
-       {
-         System.err.print("["+nidx+"]"+non_terminal.find(nidx).name()+" ");
-         if ((cnt+1) % 5 == 0) System.err.println();
-       }
-      System.err.println();
-      System.err.println();
-
-
-      System.err.println("===== Productions =====");
-      for (int pidx=0; pidx < production.number(); pidx++)
-       {
-         production prod = production.find(pidx);
-         System.err.print("["+pidx+"] "+prod.lhs().the_symbol().name() + " ::= ");
-         for (int i=0; i<prod.rhs_length(); i++)
-           if (prod.rhs(i).is_action())
-             System.err.print("{action} ");
-           else
-             System.err.print(
-                        ((symbol_part)prod.rhs(i)).the_symbol().name() + " ");
-         System.err.println();
-       }
-      System.err.println();
-    }
-
-  /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/
-
-  /** Produce a (semi-) human readable dump of the complete viable prefix 
-   *  recognition state machine. 
-   */
-  public static void dump_machine()
-    {
-      lalr_state ordered[] = new lalr_state[lalr_state.number()];
-
-      /* put the states in sorted order for a nicer display */
-      for (Enumeration s = lalr_state.all(); s.hasMoreElements(); )
-       {
-         lalr_state st = (lalr_state)s.nextElement();
-         ordered[st.index()] = st;
-       }
-
-      System.err.println("===== Viable Prefix Recognizer =====");
-      for (int i = 0; i<lalr_state.number(); i++)
-       {
-         if (ordered[i] == start_state) System.err.print("START ");
-          System.err.println(ordered[i]);
-         System.err.println("-------------------");
-       }
-    }
-
-  /*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .*/
-
-  /** Produce a (semi-) human readable dumps of the parse tables */
-  public static void dump_tables()
-    {
-      System.err.println(action_table);
-      System.err.println(reduce_table);
-    }
-
-  /*-----------------------------------------------------------*/
-
-}
-