concrete SymbolAddressExpression : Expression
{
Symbol * reference addressed_symbol;
};
| addressed_symbol | For a VariableSymbol, it is the address of the data storage associated with the variable and the result_type must be a pointer to the type of the variable. The addressed_symbol is not allowed to be a FieldSymbol. For a ProcedureSymbol, it is the address of the code for the procedure body and the result_type must be a pointer to the type of the procedure. For a CodeLabelSymbol, the result is a pointer to the code the label refers to and the result_type must be a pointer to a LabelType. For other variables, the result is a pointer to the type of the variable. |