A container for references to containers for rereferences to basic values. Yes, there are languages that let you be that specific about types. Note also that different names are used differently. For example, constants are also named, but you usually don't want to give programmers access to l-values of constants. While it may have seemed that we don't need to return anything when we translate declarations, we really do.
Variable declarations construct code to assign to the newly declared variables.
Assignment should be done by copying. Function declarations can be translated as other code, except for dealing with parameters and return values, which should be handled by the Frame module. And and Or to If . If the first part is false, you branch to the false label. When translating an Or , you again branch based on the first part of the Or .