X-Git-Url: https://code.kerkeslager.com/?p=fur;a=blobdiff_plain;f=conversion.py;h=29a40d7d330d4450036e63cb9b88c6befc40cf1b;hp=fd469fad104b4c22ccbeb01ceeca70ef8b340ce9;hb=7abf5e459b2ef02c8e59c05f0a83d8213ade0427;hpb=aa339c441f43849a8cae256aa130278ca7618b7e diff --git a/conversion.py b/conversion.py index fd469fa..29a40d7 100644 --- a/conversion.py +++ b/conversion.py @@ -2,6 +2,13 @@ import collections import normalization +CPSBuiltinExpression = collections.namedtuple( + 'CPSBuiltinExpression', + ( + 'symbol', + ), +) + CPSFunctionCallExpression = collections.namedtuple( 'CPSFunctionCallExpression', ( @@ -21,6 +28,7 @@ CPSIntegerLiteralExpression = collections.namedtuple( CPSLambdaExpression = collections.namedtuple( 'CPSLambdaExpression', ( + 'name', 'argument_name_list', 'statement_list', ), @@ -44,8 +52,6 @@ CPSStructureLiteralExpression = collections.namedtuple( 'CPSStructureLiteralExpression', ( 'field_count', - 'symbol_list_variable', - 'value_list_variable', ), ) @@ -56,6 +62,13 @@ CPSSymbolExpression = collections.namedtuple( ), ) +CPSSymbolLiteralExpression = collections.namedtuple( + 'CPSSymbolLiteralExpression', + ( + 'symbol', + ), +) + CPSVariableExpression = collections.namedtuple( 'CPSVariableExpression', ( @@ -86,17 +99,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', @@ -104,14 +108,6 @@ CPSIfElseStatement = collections.namedtuple( ), ) -CPSListAppendStatement = collections.namedtuple( - 'CPSListAppendStatement', - ( - 'list_expression', - 'item_expression', - ), -) - CPSPushStatement = collections.namedtuple( 'CPSPushStatement', ( @@ -135,14 +131,6 @@ CPSSymbolArrayVariableInitializationStatement = collections.namedtuple( ), ) -CPSVariableReassignmentStatement = collections.namedtuple( - 'CPSVariableReassignmentStatement', - ( - 'variable', - 'expression', - ), -) - CPSProgram = collections.namedtuple( 'CPSProgram', ( @@ -150,6 +138,9 @@ CPSProgram = collections.namedtuple( ), ) +def convert_builtin_expression(expression): + return CPSBuiltinExpression(symbol=expression.symbol) + def convert_function_call_expression(expression): return CPSFunctionCallExpression( metadata=expression.metadata, @@ -162,6 +153,7 @@ def convert_integer_literal_expression(expression): 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), ) @@ -175,34 +167,32 @@ def convert_string_literal_expression(expression): def convert_structure_literal_expression(expression): return CPSStructureLiteralExpression( field_count=expression.field_count, - symbol_list_variable=expression.symbol_list_variable, - value_list_variable=expression.value_list_variable, ) def convert_symbol_expression(expression): return CPSSymbolExpression(symbol=expression.symbol) +def convert_symbol_literal_expression(expression): + return CPSSymbolLiteralExpression(symbol=expression.symbol) + def convert_variable_expression(expression): return CPSVariableExpression(variable=expression.variable) def convert_expression(expression): return { + normalization.NormalBuiltinExpression: convert_builtin_expression, 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, normalization.NormalSymbolExpression: convert_symbol_expression, + normalization.NormalSymbolLiteralExpression: convert_symbol_literal_expression, normalization.NormalVariableExpression: convert_variable_expression, }[type(expression)](expression) -def convert_array_variable_initialization_statement(statement): - return CPSArrayVariableInitializationStatement( - variable=statement.variable, - items=tuple(convert_expression(e) for e in statement.items), - ) - def convert_assignment_statement(statement): return CPSAssignmentStatement( target=statement.target, @@ -214,27 +204,16 @@ 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): - return CPSListAppendStatement( - list_expression=convert_expression(statement.list_expression), - item_expression=convert_expression(statement.item_expression), - ) - - def convert_push_statement(statement): return CPSPushStatement( expression=convert_expression(statement.expression), @@ -246,33 +225,19 @@ 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, - symbol_list=statement.symbol_list, - ) - def convert_statement(statement): return { - 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), )