X-Git-Url: https://code.kerkeslager.com/?a=blobdiff_plain;f=conversion.py;h=b71e8347fb23faa2c960a2191a0287ed3e1ab429;hb=a9ab9dd833ed081abbed647aa16eeaa2f61b85d7;hp=965f86e2cb3aab72ea1b1bccd6c55e59c57ff0d7;hpb=68eb624cc15463008b9ed38e17315e9a1f8bdeb0;p=fur diff --git a/conversion.py b/conversion.py index 965f86e..b71e834 100644 --- a/conversion.py +++ b/conversion.py @@ -18,6 +18,15 @@ CPSIntegerLiteralExpression = collections.namedtuple( ), ) +CPSLambdaExpression = collections.namedtuple( + 'CPSLambdaExpression', + ( + 'name', + 'argument_name_list', + 'statement_list', + ), +) + CPSListConstructExpression = collections.namedtuple( 'CPSListConstructExpression', ( @@ -78,17 +87,8 @@ CPSExpressionStatement = collections.namedtuple( ), ) -CPSFunctionDefinitionStatement = collections.namedtuple( - 'CPSFunctionDefinitionStatement', - ( - 'name', - 'argument_name_list', - 'statement_list', - ) -) - -CPSIfElseStatement = collections.namedtuple( - 'CPSIfElseStatement', +CPSIfElseExpression = collections.namedtuple( + 'CPSIfElseExpression', ( 'condition_expression', 'if_statement_list', @@ -127,14 +127,6 @@ CPSSymbolArrayVariableInitializationStatement = collections.namedtuple( ), ) -CPSVariableReassignmentStatement = collections.namedtuple( - 'CPSVariableReassignmentStatement', - ( - 'variable', - 'expression', - ), -) - CPSProgram = collections.namedtuple( 'CPSProgram', ( @@ -152,6 +144,13 @@ def convert_function_call_expression(expression): def convert_integer_literal_expression(expression): return CPSIntegerLiteralExpression(integer=expression.integer) +def convert_lambda_expression(expression): + return CPSLambdaExpression( + name=expression.name, + argument_name_list=expression.argument_name_list, + statement_list=tuple(convert_statement(s) for s in expression.statement_list), + ) + def convert_list_construct_expression(expression): return CPSListConstructExpression(allocate=expression.allocate) @@ -174,7 +173,9 @@ def convert_variable_expression(expression): def convert_expression(expression): return { normalization.NormalFunctionCallExpression: convert_function_call_expression, + normalization.NormalIfElseExpression: convert_if_else_expression, normalization.NormalIntegerLiteralExpression: convert_integer_literal_expression, + normalization.NormalLambdaExpression: convert_lambda_expression, normalization.NormalListConstructExpression: convert_list_construct_expression, normalization.NormalStringLiteralExpression: convert_string_literal_expression, normalization.NormalStructureLiteralExpression: convert_structure_literal_expression, @@ -199,18 +200,14 @@ def convert_expression_statement(statement): expression=convert_expression(statement.expression), ) -def convert_function_definition_statement(statement): - return CPSFunctionDefinitionStatement( - name=statement.name, - argument_name_list=statement.argument_name_list, - statement_list=tuple(convert_statement(s) for s in statement.statement_list), - ) +def convert_if_else_expression(statement): + if_statement_list=tuple(convert_statement(s) for s in statement.if_statement_list) + else_statement_list=tuple(convert_statement(s) for s in statement.else_statement_list) -def convert_if_else_statement(statement): - return CPSIfElseStatement( + return CPSIfElseExpression( condition_expression=convert_expression(statement.condition_expression), - if_statement_list=tuple(convert_statement(s) for s in statement.if_statement_list), - else_statement_list=tuple(convert_statement(s) for s in statement.else_statement_list), + if_statement_list=if_statement_list, + else_statement_list=else_statement_list, ) def convert_list_append_statement(statement): @@ -231,12 +228,6 @@ def convert_variable_initialization_statement(statement): expression=convert_expression(statement.expression), ) -def convert_variable_reassignment_statement(statement): - return CPSVariableReassignmentStatement( - variable=statement.variable, - expression=convert_expression(statement.expression), - ) - def convert_symbol_array_variable_initialization_statement(statement): return CPSSymbolArrayVariableInitializationStatement( variable=statement.variable, @@ -248,16 +239,17 @@ def convert_statement(statement): normalization.NormalArrayVariableInitializationStatement: convert_array_variable_initialization_statement, normalization.NormalAssignmentStatement: convert_assignment_statement, normalization.NormalExpressionStatement: convert_expression_statement, - normalization.NormalFunctionDefinitionStatement: convert_function_definition_statement, - normalization.NormalIfElseStatement: convert_if_else_statement, normalization.NormalListAppendStatement: convert_list_append_statement, normalization.NormalPushStatement: convert_push_statement, normalization.NormalVariableInitializationStatement: convert_variable_initialization_statement, - normalization.NormalVariableReassignmentStatement: convert_variable_reassignment_statement, normalization.NormalSymbolArrayVariableInitializationStatement: convert_symbol_array_variable_initialization_statement, }[type(statement)](statement) +def convert_statement_list(statement_list): + return tuple(convert_statement(s) for s in statement_list) + + def convert(program): return CPSProgram( - statement_list=tuple(convert_statement(s) for s in program.statement_list), + statement_list=convert_statement_list(program.statement_list), )