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