PARSER_BEGIN(Q2) /* I'll use a vector to store the list as its constructed... */ import java.util.Vector; 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 { parser.s(); } catch (ParseException e) { System.out.println("Encountered errors during parse."); } } /* End of function "main" */ /** Reverses a vector **/ static void reverseVector(Vector v) { if (v.size()==0) return; final int last = v.size()-1; for (int i=0; i<=last/2; i++) { // Swap element at i with element at (last-i) Object temp = v.elementAt(i); v.setElementAt(v.elementAt(last-i),i); v.setElementAt(temp,last-i); } } /** Prints out the (String) elements in a vector **/ static void printVector(Vector v) { System.out.print("\nAnswer is: "); for (int i=0; i | < CONS : "cons"> | < REVERSE : "reverse"> | < LBR : "("> | < RBR : ")"> | < NUM : (["0"-"9"])+ > } /*************************/ /***** GRAMMAR RULES *****/ /*************************/ void s () : { Vector v; } { v=l() { printVector(v); } } Vector l() : { Vector v; Token n; } { { return new Vector(); } | ( n= v=l() { v.insertElementAt(n.image,0); } | v=l() { reverseVector(v); } ) { return v; } }