1.
a)
JSON -> OBJ OBJ -> numero OBJ -> string OBJ -> true OBJ -> false OBJ -> null OBJ -> [ LISTA ] OBJ -> [ ] OBJ -> { PARES } OBJ -> { } LISTA -> OBJ LISTA' LISTA' -> , OBJ LISTA' LISTA' -> PARES -> string : OBJ PARES' PARES' -> , string : OBJ PARES' ->
b)
Nota: é possível acertar essa mesmo errando a anterior, contanto que a derivação dada corretamente derive a string do exemplo.
JSON -> OBJ -> { PARES } -> { string : OBJ PARES' } -> { string : string PARES ' } -> { string : string , string : OBJ PARES' } -> { string : string , string : numero PARES' } -> { string : string , string : numero , string : OBJ PARES' } -> { string : string , string : numero , string : true PARES' } -> { string : string , string : numero , string : true , string : OBJ PARES' } -> { string : string , string : numero , string : true , string : [ LISTA ] PARES' } -> { string : string , string : numero , string : true , string : [ OBJ LISTA' ] PARES' } -> { string : string , string : numero , string : true , string : [ { PARES } LISTA' ] PARES' } -> { string : string , string : numero , string : true , string : [ { string : OBJ PARES' } LISTA' ] PARES' } -> { string : string , string : numero , string : true , string : [ { string : string PARES' } LISTA' ] PARES' } -> { string : string , string : numero , string : true , string : [ { string : string PARES' } LISTA' ] PARES' } -> { string : string , string : numero , string : true , string : [ { string : string , string : OBJ PARES' } LISTA' ] PARES' } -> { string : string , string : numero , string : true , string : [ { string : string , string : numero PARES' } LISTA' ] PARES' } -> { string : string , string : numero , string : true , string : [ { string : string , string : numero } LISTA' ] PARES' } -> { string : string , string : numero , string : true , string : [ { string : string , string : numero } , OBJ LISTA' ] PARES' } -> { string : string , string : numero , string : true , string : [ { string : string , string : numero } , { PARES } LISTA' ] PARES' } -> { string : string , string : numero , string : true , string : [ { string : string , string : numero } , { string : OBJ PARES' } LISTA' ] PARES' } -> { string : string , string : numero , string : true , string : [ { string : string , string : numero } , { string : string PARES' } LISTA' ] PARES' } -> { string : string , string : numero , string : true , string : [ { string : string , string : numero } , { string : string , string : OBJ PARES' } LISTA' ] PARES' } -> { string : string , string : numero , string : true , string : [ { string : string , string : numero } , { string : string , string : numero PARES' } LISTA' ] PARES' } -> { string : string , string : numero , string : true , string : [ { string : string , string : numero } , { string : string , string : numero } LISTA' ] PARES' } -> { string : string , string : numero , string : true , string : [ { string : string , string : numero } , { string : string , string : numero } ] PARES' } -> { string : string , string : numero , string : true , string : [ { string : string , string : numero } , { string : string , string : numero } ] }
2.
3.
String codigo(Env<String> env) { String res = "(" + objeto.codigo(env) + ")." + metodo; if(args.size() == 0) return cobj + "()"; else { res += "(" + args.get(0).codigo(env); for(int i = 1; i < args.size(); i++) res += "," + args.get(i).codigo(env); return res + ")"; } }
String codigo(Env<String> env) { env = env.extende(); String res = "do {\n"; for(Cmd cmd : corpo) res += corpo.codigo(env) + "\n"; res += "} while(!(" + condParada.codigo(env) + "));" return res; }