java_cup

Class Main


public class Main
extends java.lang.Object

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: Options to the main program include:
interface
Version:
last updated: 7/3/96
Author:
Frank Flannery

Field Summary

protected static parse_action_table
action_table
Resulting parse action table.
protected static long
build_end
Timing data -- when did we end state and table building
protected static long
check_end
Timing data -- when did we end checking
protected static long
dump_end
Timing data -- when did we end dumping
protected static long
emit_end
Timing data -- when did we finish emitting code
protected static int
expect_conflicts
User option -- number of conflicts to expect
protected static long
final_time
Timing data -- when were we completely done
protected static long
first_end
Timing data -- when did we end first set calculation
protected static boolean
include_non_terms
User option -- should we include non terminal symbol numbers in the symbol constant class.
protected static BufferedInputStream
input_file
Input file.
protected static boolean
lr_values
User option -- should generator generate code for left/right values?
protected static long
machine_end
Timing data -- when did we end state machine construction
protected static boolean
no_summary
User option -- do not print a summary.
protected static long
nullability_end
Timing data -- when did we end nullability calculation
protected static boolean
opt_compact_red
User option -- do we compact tables by making most common reduce the default action
protected static boolean
opt_do_debug
User option -- do we run produce extra debugging messages
protected static boolean
opt_dump_grammar
User option -- do we produce a dump of the grammar
protected static boolean
opt_dump_states
User option -- do we produce a dump of the state machine
protected static boolean
opt_dump_tables
User option -- do we produce a dump of the parse tables
protected static boolean
opt_show_timing
User option -- do we show timing information as a part of the summary
protected static long
parse_end
Timing data -- when did we end parsing
protected static PrintWriter
parser_class_file
Output file for the parser class.
protected static long
prelim_end
Timing data -- when did we end preliminaries
protected static boolean
print_progress
User option -- do we print progress messages.
protected static long
reduce_check_end
Timing data -- when did we end checking for non-reduced productions
protected static parse_reduce_table
reduce_table
Resulting reduce-goto table.
protected static lalr_state
start_state
Start state in the overall state machine.
protected static long
start_time
Timing data -- when did we start
protected static boolean
suppress_scanner
User option -- should generator suppress references to java_cup.runtime.Scanner for compatibility with old runtimes?
protected static boolean
sym_interface
User option -- should symbols be put in a class or an interface? [CSA]
protected static PrintWriter
symbol_class_file
Output file for the symbol constant class.
protected static long
table_end
Timing data -- when did we end table construction

Method Summary

protected static void
build_parser()
Build the (internal) parser from the previously parsed specification.
protected static void
check_unused()
Check for unused symbols.
protected static void
close_files()
Close various files used by the system.
static void
dump_grammar()
Produce a human readable dump of the grammar.
static void
dump_machine()
Produce a (semi-) human readable dump of the complete viable prefix recognition state machine.
static void
dump_tables()
Produce a (semi-) human readable dumps of the parse tables
protected static void
emit_parser()
Call the emit routines necessary to write out the generated parser.
protected static void
emit_summary(boolean output_produced)
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.
static void
main(argv[] )
The main driver for the system.
protected static void
open_files()
Open various files used by the system.
protected static void
parse_args(argv[] )
Parse command line options and arguments to set various user-option flags and variables.
protected static void
parse_grammar_spec()
Parse the grammar specification from standard input.
protected static String
plural(int val)
Helper routine to optionally return a plural or non-plural ending.
protected static void
show_times()
Produce the optional timing summary as part of an overall summary.
protected static String
timestr(long time_val, long total_time)
Helper routine to format a decimal based display of seconds and percentage of total time given counts of milliseconds.
protected static void
usage(String message)
Print a "usage message" that described possible command line options, then exit.

Field Details

action_table

protected static parse_action_table action_table
Resulting parse action table.

build_end

protected static long build_end
Timing data -- when did we end state and table building

check_end

protected static long check_end
Timing data -- when did we end checking

dump_end

protected static long dump_end
Timing data -- when did we end dumping

emit_end

protected static long emit_end
Timing data -- when did we finish emitting code

expect_conflicts

protected static int expect_conflicts
User option -- number of conflicts to expect

final_time

protected static long final_time
Timing data -- when were we completely done

first_end

protected static long first_end
Timing data -- when did we end first set calculation

include_non_terms

protected static boolean include_non_terms
User option -- should we include non terminal symbol numbers in the symbol constant class.

input_file

protected static BufferedInputStream input_file
Input file. This is a buffered version of System.in.

lr_values

protected static boolean lr_values
User option -- should generator generate code for left/right values?

machine_end

protected static long machine_end
Timing data -- when did we end state machine construction

no_summary

protected static boolean no_summary
User option -- do not print a summary.

nullability_end

protected static long nullability_end
Timing data -- when did we end nullability calculation

opt_compact_red

protected static boolean opt_compact_red
User option -- do we compact tables by making most common reduce the default action

opt_do_debug

protected static boolean opt_do_debug
User option -- do we run produce extra debugging messages

opt_dump_grammar

protected static boolean opt_dump_grammar
User option -- do we produce a dump of the grammar

opt_dump_states

protected static boolean opt_dump_states
User option -- do we produce a dump of the state machine

opt_dump_tables

protected static boolean opt_dump_tables
User option -- do we produce a dump of the parse tables

opt_show_timing

protected static boolean opt_show_timing
User option -- do we show timing information as a part of the summary

parse_end

protected static long parse_end
Timing data -- when did we end parsing

parser_class_file

protected static PrintWriter parser_class_file
Output file for the parser class.

prelim_end

protected static long prelim_end
Timing data -- when did we end preliminaries

print_progress

protected static boolean print_progress
User option -- do we print progress messages.

reduce_check_end

protected static long reduce_check_end
Timing data -- when did we end checking for non-reduced productions

reduce_table

protected static parse_reduce_table reduce_table
Resulting reduce-goto table.

start_state

protected static lalr_state start_state
Start state in the overall state machine.

start_time

protected static long start_time
Timing data -- when did we start

suppress_scanner

protected static boolean suppress_scanner
User option -- should generator suppress references to java_cup.runtime.Scanner for compatibility with old runtimes?

sym_interface

protected static boolean sym_interface
User option -- should symbols be put in a class or an interface? [CSA]

symbol_class_file

protected static PrintWriter symbol_class_file
Output file for the symbol constant class.

table_end

protected static long table_end
Timing data -- when did we end table construction

Method Details

build_parser

protected static void build_parser()
            throws internal_error
Build the (internal) parser from the previously parsed specification. This includes:
  • Computing nullability of non-terminals.
  • Computing first sets of non-terminals and productions.
  • Building the viable prefix recognizer machine.
  • Filling in the (internal) parse tables.
  • Checking for unreduced productions.

check_unused

protected static void check_unused()
Check for unused symbols. Unreduced productions get checked when tables are created.

close_files

protected static void close_files()
            throws java.io.IOException
Close various files used by the system.

dump_grammar

public static void dump_grammar()
            throws internal_error
Produce a human readable dump of the grammar.

dump_machine

public static void dump_machine()
Produce a (semi-) human readable dump of the complete viable prefix recognition state machine.

dump_tables

public static void dump_tables()
Produce a (semi-) human readable dumps of the parse tables

emit_parser

protected static void emit_parser()
            throws internal_error
Call the emit routines necessary to write out the generated parser.

emit_summary

protected static void emit_summary(boolean output_produced)
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.
Parameters:
output_produced - did the system get far enough to generate code.

main

public static void main(argv[] )
            throws internal_error,
                   java.io.IOException,
                   java.lang.Exception
The main driver for the system.
Parameters:

open_files

protected static void open_files()
Open various files used by the system.

parse_args

protected static void parse_args(argv[] )
Parse command line options and arguments to set various user-option flags and variables.
Parameters:

parse_grammar_spec

protected static void parse_grammar_spec()
            throws java.lang.Exception
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.

plural

protected static String plural(int val)
Helper routine to optionally return a plural or non-plural ending.
Parameters:
val - the numerical value determining plurality.

show_times

protected static void show_times()
Produce the optional timing summary as part of an overall summary.

timestr

protected static String timestr(long time_val,
                                long 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).
Parameters:
time_val - the value being formatted (in ms).
total_time - total time percentages are calculated against (in ms).

usage

protected static void usage(String message)
Print a "usage message" that described possible command line options, then exit.
Parameters:
message - a specific error message to preface the usage message by.