PARSER_BEGIN(Q3) class Q3 { /** Standard code to call the parser */ public static void main(String args[]) { Q3 parser; System.out.println("Reading from standard input . . ."); parser = new Q3(System.in); try { parser.prog(); } catch (ParseException e) { System.out.println("Encountered errors during parse."); } } /* End of function "main" */ } PARSER_END(Q3) /******************/ /***** TOKENS *****/ /******************/ SKIP : /* WHITE SPACE */ { " " | "\t" | "\n" | "\r" } TOKEN : { < SEMIC : ";" > | < NAME : ( ["A"-"Z"] )+ > | < VAR : ["a"-"z"] > | < FN : "fn" > | < EL : "=>" > | < EQUALS : "=" > | < LBR : "(" > | < RBR : ")" > } /*************************/ /***** GRAMMAR RULES *****/ /*************************/ void prog() : { String s; } { s=stat() { System.out.print("\n"+s); } ( s=stat() { System.out.print(";"+s); } )* } String stat() : { String e; Token n; } { n= e=expr() { return n.image + "=" + e; } } String expr() : { String v, e; } { v=var() { return v; } | v=var() e=expr() { return "(fn" + v + "=>" + e + ")"; } } String var() : { Token v; } { v= { return String.valueOf(v.image.charAt(0)-'a'); } }