//WrenAS.java class Program { // Program ::= Identifier Block private Identifier ide; private Block body; Program(Identifier i,Block b) { ide = i; body = b; } Identifier getIdentifier() { return ide; } Block getBlock() { return body; } void show(int n) { System.out.println(Token.spaces(n)+"Program"); ide.show(n+3); body.show(n+3); } } class Block { // Block ::= Declarations Commands private Declarations decs; private Commands cmds; Block(Declarations d,Commands c) { decs = d; cmds = c; } Declarations getDeclarations() { return decs; } Commands getCommands() { return cmds; } void show(int n) { System.out.println(Token.spaces(n)+"Block"); decs.show(n+3); cmds.show(n+3); } } class Declarations extends java.util.ArrayList { // Declarations ::= Declaration* void show(int n) { System.out.println(Token.spaces(n)+"Declarations"); for (int k=0; k // | >= | > | and | or private int val; Operator(int opr) { val = opr; } int getOperator() { return val; } boolean isArithmeticOp() { return val==Token.PLUS || val==Token.MINUS || val==Token.TIMES || val==Token.DIVIDES; } boolean isRelationalOp() { return val==Token.LE || val==Token.LT || val==Token.EQ || val==Token.GE || val==Token.GT || val==Token.NE; } boolean isBooleanOp() { return val==Token.AND || val==Token.OR; } void show(int n) { System.out.println(Token.spaces(n)+"Operator = "+Token.token(val)); } } /*************************************************************************/