Code function for Statement, Program and Definition execute[[Program: program -> definition*]] = <' * Global variables> definition*.forEach(def -> execute[[def]]) execute[[VarDefinition: vardefinition -> ID type]] = <' * > type ID <(offset> vardefinition.offset <)> execute[[FuncDefinition: funcdefinition -> ID type statement*]] = < > ID <:> <' * Parameters:> type.parameter*.forEach(def -> execute[[def]];); <' * Local variables:> int bytesLocals = 0; statement*.forEach(stmt -> { if (stmt instanceof VarDefinition){ bytesLocals = ((VarDefinition) stmt).getOffset(); execute[[stmt]]; } }); if(bytesLocals!=0) -bytesLocals; int bytesParams = type.parameters.stream().mapToInt(param -> param.type.numberOfBytes()).sum(); int bytesReturn = type.returnType.numberOfBytes(); statement*.forEach(stmt->{ if (!stmt instanceof VarDefinition) execute[[stmt]]; }); execute[[WriteStatement: statement -> exp]] = <' * Write > value[[exp]]; exp.type.suffix(); execute[[ReadStatement: statement -> exp]] = <' * Read > address[[exp]] exp.type.suffix() exp.type.suffix() execute[[Assignment: statement -> exp1 exp2]] = address[[exp1]] value[[exp2]] exp1.type.suffix() execute[[WhileLoop: statement1 -> expression statement2*]] = int labelNumber = cg.getLabels(2);