Theo's Assignment #2 Solution


options {
  IGNORE_CASE = false;
  OPTIMIZE_TOKEN_MANAGER = true;
}

PARSER_BEGIN(tea)

import java.io.*;

public class tea {

  public static void main(String[] args) throws FileNotFoundException
  {
    if ( args.length < 1 ) {
       System.out.println("Please pass in the filename for a parameter.");
       System.exit(1);
    }
    
    ASCII_CharStream stream = new ASCII_CharStream(
				  new FileInputStream(args[0]),0,0);
    Token temp_token = null;
    
    teaTokenManager TkMgr = new teaTokenManager(stream);

    do {
        temp_token = TkMgr.getNextToken();

        switch(temp_token.kind) {
         case IF: System.out.println("IF: " + temp_token.image);
           break;
         case ELSE: System.out.println("ELSE: " + temp_token.image);
           break;
	 case TYPE: System.out.println("TYPE: " + temp_token.image);
	   break;
	 case VARIABLE_TYPE: System.out.println("VARIABLE_TYPE: " +
						temp_token.image);
	  break;
         case LPAREN: System.out.println("LPAREN: " + temp_token.image);
           break;
         case RPAREN: System.out.println("RPAREN: " + temp_token.image);
           break;
         case LBRACE: System.out.println("LBRACE: " + temp_token.image);
           break;
         case RBRACE: System.out.println("RBRACE: " + temp_token.image);
           break;
	 case COMMA: System.out.println("COMMA: " + temp_token.image);
	   break;
         case SEMICOLON: System.out.println("SEMICOLON: " + temp_token.image);
           break;
         case WHILE: System.out.println("WHILE: " + temp_token.image);
           break;
         case DO: System.out.println("DO: " + temp_token.image);
           break;
         case FOR: System.out.println("FOR: " + temp_token.image);
           break;

         case ADDOP: System.out.println("ADDOP: " + temp_token.image);
           break;
         case MULOP: System.out.println("MULOP: " + temp_token.image);
           break;
         case ASSIGNOP: System.out.println("ASSIGNOP: " + temp_token.image);
           break;
         case NOT: System.out.println("NOT: " + temp_token.image);
           break;
         case AND: System.out.println("AND: " + temp_token.image);
           break;
	 case OR: System.out.println("OR: " + temp_token.image);
	   break;
         case RELOP: System.out.println("RELOP: " + temp_token.image);
           break;
         case LTGT: System.out.println("LTGT: " + temp_token.image);
           break;

         case NUMBER: System.out.println("NUMBER: " + temp_token.image);
           break;
         case NAME: System.out.println("NAME: " + temp_token.image);
           break;

         default:
           if ( temp_token.kind != EOF )
             System.out.println("OTHER: " + temp_token.image);
           break;
        }

    } while (temp_token.kind != EOF);
  }
}

PARSER_END(tea)

SKIP: /* Whitespace */
{
  "\t"
| "\n"
| "\r"
| " "
}

TOKEN: /* Most Things */
{
  <IF: "if">
| <ELSE: "else">
| <TYPE: "void">
| <VARIABLE_TYPE: "int">
| <LPAREN: "(">
| <RPAREN: ")">
| <LBRACE: "{">
| <RBRACE: "}">
| <COMMA: ",">
| <SEMICOLON: ";">
| <WHILE: "while">
| <DO: "do">
| <FOR: "for">
}

TOKEN: /* Expression Tokens */
{
  <ADDOP: "+" | "-">
| <MULOP: "*" | "/" | "%">
| <ASSIGNOP: "=">
| <NOT: "!">
| <AND: "&&">
| <OR: "||">
| <RELOP: "!=" | "==">
| <LTGT: ">" | "<" | ">=" | "<=">
}

TOKEN: /* Generic Name & Number */
{
  <NUMBER: (["0"-"9"])+>
| <NAME: ["a"-"z","A"-"Z"] (["a"-"z","A"-"Z","0"-"9","_"])*>
}


Send questions and comments to: Karen Lemone