X-Git-Url: https://code.kerkeslager.com/?p=fur;a=blobdiff_plain;f=transformation.py;h=efc7d991ea51d15805aacfd4172ce6fd2713fa40;hp=2d729fa1e87dc649d60dfee0d8c94482bfd863e2;hb=2f7d76f2fc50763953b7268e0fe6558aac260187;hpb=25ebb2556ea388656346b0efafa80e66f61057de diff --git a/transformation.py b/transformation.py index 2d729fa..efc7d99 100644 --- a/transformation.py +++ b/transformation.py @@ -81,6 +81,14 @@ CVariableInitializationStatement = collections.namedtuple( ], ) +CVariableReassignmentStatement = collections.namedtuple( + 'CVariableReassignmentStatement', + [ + 'variable', + 'expression', + ], +) + CExpressionStatement = collections.namedtuple( 'CExpressionStatement', [ @@ -88,6 +96,15 @@ CExpressionStatement = collections.namedtuple( ], ) +CIfElseStatement = collections.namedtuple( + 'CIfElseStatement', + [ + 'condition_expression', + 'if_statements', + 'else_statements', + ], +) + CProgram = collections.namedtuple( 'CProgram', [ @@ -264,18 +281,33 @@ def transform_expression_statement(accumulators, statement): expression=expression, ) +def transform_if_else_statement(accumulators, statement): + return CIfElseStatement( + condition_expression=transform_expression(accumulators, statement.condition_expression), + if_statements=tuple(transform_statement(accumulators, s) for s in statement.if_statements), + else_statements=tuple(transform_statement(accumulators, s) for s in statement.else_statements), + ) + def transform_variable_initialization_statement(accumulators, statement): return CVariableInitializationStatement( variable=statement.variable, expression=transform_expression(accumulators, statement.expression), ) +def transform_variable_reassignment_statement(accumulators, statement): + return CVariableReassignmentStatement( + variable=statement.variable, + expression=transform_expression(accumulators, statement.expression), + ) + def transform_statement(accumulators, statement): return { parsing.FurAssignmentStatement: transform_symbol_assignment_statement, parsing.FurExpressionStatement: transform_expression_statement, - normalization.NormalVariableInitializationStatement: transform_variable_initialization_statement, normalization.NormalExpressionStatement: transform_expression_statement, + normalization.NormalIfElseStatement: transform_if_else_statement, + normalization.NormalVariableInitializationStatement: transform_variable_initialization_statement, + normalization.NormalVariableReassignmentStatement: transform_variable_reassignment_statement, }[type(statement)](accumulators, statement)