/** * JJTree template file created by SF JavaCC plugin 1.5.17+ wizard for JavaCC 1.5.0+ */ options { JDK_VERSION = "1.5"; static = true; BUILD_NODE_FILES = true; MULTI = true; VISITOR = true; VISITOR_RETURN_TYPE = "Object"; VISITOR_EXCEPTION = ""; } PARSER_BEGIN(EG2) public class EG2 { public static void main(String args []) { EvaluateVisitor ev = new EvaluateVisitor(); System.out.println("Reading from standard input..."); System.out.print("Enter an expression like \"1+(2+3)*var;\" :"); new EG2(System.in); try { SimpleNode n = EG2.Start(); System.out.println("Eval: " + (Integer)n.jjtAccept(ev, null)); //n.dump(""); System.out.println("Thank you."); } catch (Exception e) { System.out.println("Oops."); System.out.println(e.getMessage()); } } } PARSER_END(EG2) SKIP : { " " | "\t" | "\n" | "\r" | < "//" (~[ "\n", "\r" ])* ( "\n" | "\r" | "\r\n" ) > | < "/*" (~[ "*" ])* "*" ( ~[ "/" ] (~[ "*" ])* "*" )* "/" > } TOKEN : /* LITERALS */ { < INTEGER_LITERAL : < DECIMAL_LITERAL > ([ "l", "L" ])? | < HEX_LITERAL > ([ "l", "L" ])? | < OCTAL_LITERAL > ([ "l", "L" ])? > | < #DECIMAL_LITERAL : [ "1"-"9" ] ([ "0"-"9" ])* > | < #HEX_LITERAL : "0" [ "x", "X" ] ([ "0"-"9", "a"-"f", "A"-"F" ])+ > | < #OCTAL_LITERAL : "0" ([ "0"-"7" ])* > } TOKEN : /* IDENTIFIERS */ { < IDENTIFIER : < LETTER > ( < LETTER > | < DIGIT > )* > | < #LETTER : [ "_", "a"-"z", "A"-"Z" ] > | < #DIGIT : [ "0"-"9" ] > } SimpleNode Start() : {} { Expression() ";" { return jjtThis; } } void Expression() : {} { AdditiveExpression() } void AdditiveExpression() : {} { MultiplicativeExpression() ( ( "+" | "-" ) MultiplicativeExpression() )* } void MultiplicativeExpression() : {} { UnaryExpression() ( ( "*" | "/" | "%" ) UnaryExpression() )* } void UnaryExpression() : {} { "(" Expression() ")" | Identifier() | Integer() } SimpleNode Identifier() : { Token t;} { t = < IDENTIFIER > { jjtThis.jjtSetValue( t.image ); return jjtThis; } } SimpleNode Integer() : {Token t;} { t = < INTEGER_LITERAL > { jjtThis.jjtSetValue( t.image ); return jjtThis; } }