Resolução da Prova 1 Exercício 1) a) RepeatStatement repeatStatement() { nextToken(); CommandList cl = commandList(); if ( token != Symbol.UNTIL ) error(); nextToken(); Expr e = expr(); if ( e.getType() != Type.boolenType() ) error(); return new RepeatStatement(cl, e); } Variable variableDeclaration() { String name = stringValue; if ( symbolTable.get(name) != null ) error(); nextToken(); if ( token != Symbol.COLON ) error(); nextToken(); Type t = type(); Variable v = new Variable (name, t); symbolTable.put(name, v); return v; } b) class RepeatStatement extends Statement { CommandList cl; Expr expr; void genC() { System.out.println("do {"); cl.genC(); System.out.println("} while ( ! ("); expr.genC(); System.out.println("));"); } } class Variable { String name; Type type; void genC() { System.out.println( type.getCname() ); System.out.println(" " + name); } } Exercício 2) void p() { a(); while ( token == '@' || token == '$' ) a(); } void a() { if ( token == '@' ) { nextToken(); if ( token == 'w' ) nextToken(); b(); } else if ( token == '$' ) { nextToken(); c(); } else error(); } void c() { if ( token == '~' ) nextToken(); d(); } Exercício 3) Program p; Variable a; Vector dv = new Vector(); Vector sv = new Vector(); dv.addElement ( a = new Variable("a", Type.integerType) ); sv.addElement ( new ReadStatement(a) ); sv.addElement ( new WriteStatement( new Variable Expr (a) ) ); p = new Program (dv, sv); Exercício 4) b) v = (Variable)symbolTable.get(name); if ( v == null ) error(); ... if ( v.getType() != right.getType() ) error();