X-Git-Url: https://code.kerkeslager.com/?p=fur;a=blobdiff_plain;f=generation.py;h=149a5e247571dc322cdac5ac0352af9e4a324c39;hp=4b0ad7eb5d99080bd23e0bfb8016b671617aea81;hb=2f7d76f2fc50763953b7268e0fe6558aac260187;hpb=25ebb2556ea388656346b0efafa80e66f61057de diff --git a/generation.py b/generation.py index 4b0ad7e..149a5e2 100644 --- a/generation.py +++ b/generation.py @@ -87,11 +87,31 @@ def generate_variable_initialization_statement(statement): generate_expression(statement.expression), ) +def generate_variable_reassignment_statement(statement): + return '{} = {};'.format( + statement.variable, + generate_expression(statement.expression), + ) + + +def indent(s): + return '\n'.join(' ' * 2 + l for l in s.split('\n')) + +def generate_if_else_statement(statement): + # TODO Check that the argument is boolean + return 'if({}.instance.boolean)\n{{\n{}\n}}\nelse\n{{\n{}\n}}'.format( + generate_expression(statement.condition_expression), + indent('\n'.join(generate_statement(s) for s in statement.if_statements)), + indent('\n'.join(generate_statement(s) for s in statement.else_statements)), + ) + def generate_statement(statement): return { - transformation.CSymbolAssignmentStatement: generate_symbol_assignment_statement, transformation.CExpressionStatement: generate_expression_statement, + transformation.CIfElseStatement: generate_if_else_statement, + transformation.CSymbolAssignmentStatement: generate_symbol_assignment_statement, transformation.CVariableInitializationStatement: generate_variable_initialization_statement, + transformation.CVariableReassignmentStatement: generate_variable_reassignment_statement, }[type(statement)](statement) def generate(program):