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","_"])*>
}