In that part you are required to generate three-address code, represented as quadruples (as specified in the Dragon book).
Your output must be in file a.txt
The three-address code language consists of items of the following forms:
x := y binop z where binop is one of: +, -, *, /, and, or
x := unop y where unop is one of: -, not
x := y
L: where L is a label
if x relop y goto L where relop is one of <,<=,=,>=,>,<>
param x precedes call
operation, passing a parameter.
NOTE: these operations
should be issued in left-to-right order.
call p procedure call, no return value
x := funcall f function call, x is assigned the value returned by f
return procedure return
funreturn x function return, returning x
x := y[i] In this case, y[i] refers to the ith element of array y, and is independent
of the size of the elements. Assembly-code generation,
will convert this to a size-dependent array reference.
x[i] := y
x := y.b This is a reference to the b field of record y. Note that the b field of y may
itself be a record, in which case x.c might appear subsequently in the
code. Similarly, if y.b is an array, x[i] can appear subsequently.
x.z := y
Note that each of the variables x, y, and z, can correspond to either variables in the
source program (in particular, local variables of a procedure, formal parameters of a
procedure, or global variables in the program), or temporary variables created by the
intermediate code generator.
We will be testing that part with an error free program., and our test programs will not require more than the above three-address codes.
Compiler-codegen-lastname-firstname, lastname is your last name in lower case and firstname is your first name in lower case.