// This code executes all statements in a list. Statements { traversal doStatements (StatementVisitor) { bypassing Statements to {Statement, PrintStr, PrintExp, PrintStrExp} ; } } StatementVisitor { before Assignment {{ String name = host.get_varname().toString(); Symbol sym = Main.symbolTable.findSymbol(name); if (sym == null) { System.out.println ("Error: undefined variable " + name); Main.stopSimulation = true; } else { Double val = host.get_expr().evaluate(); sym.set_value (Value.parse(""+val)); } }} before PrintStr {{ System.out.println (host.get_string()); }} before PrintStrExp {{ System.out.print (host.get_string()); System.out.println (host.get_expr().evaluate()); }} before PrintExp {{ System.out.println (host.get_expr().evaluate()); }} before Stop {{ Main.stopSimulation = true; }} before Dump {{ Main.symbolTable.allSymbols(new DumpSymbolTableVisitor()); }} before If_Then {{ Double val = host.get_expr().evaluate(); if (val.doubleValue() != 0.0) { // do "then" part host.get_thenStmts().doStatements(new StatementVisitor()); } else { // do "else" part Statements elseStmts = host.get_elseStmts(); if (elseStmts != null) { elseStmts.doStatements(new StatementVisitor()); } } }} before While {{ while (true) { Double val = host.get_expr().evaluate(); if (val.doubleValue() == 0.0) { return; } host.get_statements().doStatements(new StatementVisitor()); } }} }