generator (: import java.util.List; :) declarations operators CONST, ADD, OP rules val <: out String reg, List instr :> = OP (ADD (reg <: out String r1, instr :> , -- XXX: the following is a type error! val <: out String reg, List instr :>), reg <: out String reg, List instr :>) (: blabla :) :1 . -- Production rules for registers: -- @out: produce a result register -- @in: list to add instructions to reg <: out String reg, List instr :> = CONST c1 (: reg = Reg.getNextReg(); instr.add("loadI " + c1.val + "," + reg); :) : 1 | ADD (reg <: out String r1, instr :> , reg <: out String r2, instr :> ) (: reg = Reg.getNextReg(); instr.add("add " + r1 + "," + r2 + "," + reg); :) : 1 -- XXX: The following transformation solves the previous type error -- | val <: out String reg, List instr :> : 0 . end