//main method from Parse/Main.java
//java.io.IOException takes care of going off end of line with a
//token construct
public static void main(String argv[]) throws java.io.IOException {
      String filename = argv[0];  //puts command line arg into filename   

     //creates new ErrorMsg object for this file
      ErrorMsg errorMsg = new ErrorMsg(filename);

     //creates new input stream corresponding to file input
      java.io.InputStream inp=new java.io.FileInputStream(filename);

     //creates new scanner object and stores reference to it
     //each scanner has its own ErrorMsgg object, errorMsg 
     //and input stream inp
     //in reference to interface Lexer. this promises the nextToken()
     //method is implemented for object referred to by lexer.
      Lexer lexer = new Yylex(inp,errorMsg);

     //Main.java uses java_cup.runtime class Symbol
     //you need the right CLASSPATH to have access to this class;
     //the class is used to report tokens to the parser
      java_cup.runtime.Symbol tok;

     //loop to read the tokens in the file
      do {
         tok=lexer.nextToken();

     //prints out symbolic name for token, and staring character
     //the input stream "123 A5" returns INT 0 (newline) ID 4   
     //since string positions start at position 0

         System.out.println(symnames[tok.sym] + " " + tok.left);
      } while (tok.sym != sym.EOF);

     //look ends when see end of file character
     //cleanup stream by closing it
      inp.close();
  }