PARSER_BEGIN(Q2) class Q2 { /** Standard code to call the parser */ public static void main(String args[]) { Q2 parser; System.out.println("Reading from standard input . . ."); parser = new Q2(System.in); try { int res = parser.s(); System.out.println("The answer is: "+res); } catch (ParseException e) { System.out.println("Encountered errors during parse."); } } /* End of function "main" */ } PARSER_END(Q2) /******************/ /***** TOKENS *****/ /******************/ SKIP : /* WHITE SPACE */ { " " | "\t" | "\n" | "\r" } TOKEN : { < PLUS : "+" > | < MINUS : "-" > | < TIMES : "*" > | < DIVIDE : "/" > | < NUM : ()+ > | < #DIGIT : ["0"-"9"] > } /*************************/ /***** GRAMMAR RULES *****/ /*************************/ int s() : { int i; } { i=e() { return i; } } int e() : { Token t; int i1, i2, oper; } { t= { i1 = Integer.parseInt(t.image); } ( i2=e() oper=o() { switch (oper) { case 1: i1 += i2; break; case 2: i1 -= i2; break; case 3: i1 *= i2; break; case 4: i1 /= i2; break; } } )* { return i1; } } int o() : {} { { return 1; } | { return 2; } | { return 3; } | { return 4; } }