(25 pts) The Boolean type is typically represented on a byte in memory, although it can have only two possible values. Why not represent the Boolean type on a single bit?
(25 pts) Write a small fragment of code that shows how unions can be used in C to interpret the bits of a value of one type as if they represented a value of some other type (non-converting type cast).
(25 pts) Consider the following:
typedef Rec1 Rec2;
Specify which of the variables a,b,c,d are type equivalent under (a) structural equivalence, (b) strict name equivalence, and (c) loose name equivalence.
(25 pts) Consider the following program, written in C:
int x; int y;
void allocate_node (Foo * f)
void main ()
Foo * p;
p->x = 2;
p->y = 3;
Although the program compiles, it produces a run-time error. Why?
Rewrite the two functions allocate_node and main so that the program runs correctly.
(Extra Credit – 10 pts) A compiler for a language with static scoping typically uses a LeBlanc-Cook symbol table to track the bindings of various names encountered in a program. Describe the mechanism that should be used by a compiler to ensure that the names of record fields used inside a with statement are bound to the correct objects. Specify what should be placed in (a) the symbol table, (b) the scope stack, and (c) the run-time program stack.