import java.util.*; import Jakarta.util.Util2; import java.io.*; /******************** Main class ************************** * @layer<Basemm> */ public class Main { public static Parser myParser = null; public static MMOutput mmresult; // essentially a global variable public static boolean printClean = true; public static void marquee() { System.err.println( "mmatrix <arguments>" ); System.err.println( " -t (traverse directory ..)" ); System.err.println( " -c (remove unnecessary attributes)"); System.err.println( " <file> (run mmatrix on input file)" ); System.exit( 1 ); } public static void main( String[] args ) { int argc = args.length; int non_switch_args; boolean traverseset = false; if ( args.length == 0 ) marquee(); // Step 1: a general routine to pick off command line options // options are removed from command line and // args array is adjusted accordingly. // right now, there are no command-line options // but this code is here for future expansion non_switch_args = 0; for ( int i=0; i < argc; i++ ) { if ( args[i].charAt( 0 ) == '-' ) { // switches of form -xxxxx (where xxx is a sequence of 1 // or more characters for ( int j=1; j < args[i].length(); j++ ) { // if (args[i].charAt(j) == 'x' { // ... do this for option 'x' // } if (args[i].charAt(j) == 't') { traverseset = true; } else if (args[i].charAt(j) == 'c') { printClean = false; } else { System.err.println("Error: Unrecognizable option '" + args[i].charAt(j) + "'"); marquee(); } } } else { // non-switch arg args[non_switch_args] = args[i]; non_switch_args++; } } try { if (traverseset) { TraverseSet.walk( "." ); } else { // default execution if (non_switch_args != 1) marquee(); eval( args[0] ); mmresult.print(); } } catch ( Exception e ) { e.printStackTrace(); } } //end main() public static MMOutput eval( String fileName ) throws Exception { // Step 1: create MMOutput and open file kernelConstants.globals().currentFileName = fileName; mmresult = new MMOutput(); FileInputStream inputFile = null; try { inputFile = new FileInputStream( fileName ); } catch ( Exception e ) { throw new Exception( "File " + fileName + " not found:" + e.getMessage() ); } // Step 2: create a parser and parse input files // inputRoot is root of parse tree of input file myParser = Parser.getInstance( inputFile ) ; AST_Program inputRoot = null; try { inputRoot = (AST_Program) myParser.parseAll() ; } catch ( Exception e ) { throw new Exception( "Parsing Exception Thrown in " + fileName + ": " + e.getMessage() ); } // Step 3: examine the parse tree here try { inputRoot.execute( 0 ); } catch ( ResultException e ) {} if ( mmresult.computed() ) return mmresult; throw new Exception( "No Result Computed for file " + fileName ); } }