E → E1 + E2                # a typical binary operation
-----------
E.place := makeNewTemp()
E.code  := [ E1.code ]
           [ E2.code ]
           emitCode( E.place, " := ", E1.place, " + ", E2.place )




E → - E1                   # a typical unary operation
--------
E.place := makeNewTemp()
E.code  := [ E1.code ]
           emitCode( E.place, " := negate ", E1.place )




E → id                     # base case with a location
------
E.place := id.place
E.code  := ""




E → literal                # base case without a location
-----------
E.place := makeNewTemp()
E.code  := emitCode( E.place, " := ", literal )
