Code function for Expression value[[Arithmetic: exp1 -> exp2 (+|-|*|/) exp3]] = value[[exp2]] exp2.type.convertTo(exp1.type) value[[exp3]] exp3.type.convertTo(exp1.type) switch(exp1.operator){ case "+": exp1.type.suffix(); break; case "-": exp1.type.suffix(); break; case "*":
exp1.type.suffix(); break; case "/": exp1.type.suffix(); break; } value[[ArrayIndexing: exp1 -> exp2 exp3]] = address[[exp1]] exp1.type.suffix() value[[Cast: exp1 -> type exp2]]: value[[exp2]] exp2.type.convert(type) value[[CharLiteral: exp -> CHAR_CONSTANT]] = exp.value value[[IntLiteral: exp -> INT_CONSTANT]] = exp.value value[[DoubleLiteral: exp -> REAL_CONSTANT]] = exp.value value[[Variable: exp -> ID]] = address[[exp]] exp.type.suffix() value[[Comparison: exp1 -> exp2 (>|>=|<|<=|!=|==) exp3]] = value[[exp2]] value[[exp3]] switch(exp1.operator){ case ">": exp2.type.suffix(); break; case "<": exp2.type.suffix(); break; case ">=": exp2.type.suffix(); break; case "<=": exp2.type.suffix(); break; case "==": exp2.type.suffix(); break; case "!=": exp2.type.suffix(); break; } value[[Logical: exp1 -> exp2 (&&|/||) exp3]] = value[[exp2]] value[[exp3]] switch(exp1.operator){ case "&&": ; break; case "||": ; break; } value[[FieldAccess: exp1 -> exp2 ID]]= address[[exp1]] exp1.type.suffix(); value[[FunctionInvocation: exp1 -> exp2 exp3*]]= exp3*.forEach(arg -> value[[arg]]); exp2;