X-Git-Url: https://code.kerkeslager.com/?a=blobdiff_plain;f=normalization.py;h=9505b33a963e706952c059c7199ffe90148f99f8;hb=b059a00e0e2511a2ca2477db1e91d53fc5d2ec0f;hp=6f27b55ece0f5e3b6928eaabcb9a9bbb5338f50e;hpb=6e7ba75736ca8b463a263e7d58aa8f6bff62faaf;p=fur diff --git a/normalization.py b/normalization.py index 6f27b55..9505b33 100644 --- a/normalization.py +++ b/normalization.py @@ -67,6 +67,14 @@ NormalExpressionStatement = collections.namedtuple( ], ) +NormalAssignmentStatement = collections.namedtuple( + 'NormalAssignmentStatement', + [ + 'target', + 'expression', + ], +) + NormalIfElseStatement = collections.namedtuple( 'NormalIfElseStatement', [ @@ -80,6 +88,7 @@ NormalFunctionDefinitionStatement = collections.namedtuple( 'NormalFunctionDefinitionStatement', [ 'name', + 'argument_name_list', 'statement_list', ], ) @@ -285,9 +294,6 @@ def normalize_negation_expression(counter, expression): NormalNegationExpression(internal_expression=NormalVariableExpression(variable=internal_variable)), ) -def normalize_parenthesized_expression(counter, expression): - return normalize_expression(counter, expression.internal) - def normalize_expression(counter, expression): return { NormalInfixExpression: fake_normalization, @@ -296,14 +302,16 @@ def normalize_expression(counter, expression): parsing.FurInfixExpression: normalize_infix_expression, parsing.FurIntegerLiteralExpression: fake_normalization, parsing.FurNegationExpression: normalize_negation_expression, - parsing.FurParenthesizedExpression: normalize_parenthesized_expression, parsing.FurStringLiteralExpression: fake_normalization, parsing.FurSymbolExpression: fake_normalization, }[type(expression)](counter, expression) def normalize_expression_statement(counter, statement): + # TODO Verify all expression types are supported and just call normalize_expression counter, prestatements, normalized = { parsing.FurFunctionCallExpression: normalize_function_call_expression, + parsing.FurSymbolExpression: normalize_expression, + parsing.FurInfixExpression: normalize_expression, parsing.FurIntegerLiteralExpression: normalize_expression, }[type(statement.expression)](counter, statement.expression) @@ -319,13 +327,25 @@ def normalize_function_definition_statement(counter, statement): (), NormalFunctionDefinitionStatement( name=statement.name, + argument_name_list=statement.argument_name_list, statement_list=normalize_statement_list(statement.statement_list), ), ) +def normalize_assignment_statement(counter, statement): + counter, prestatements, normalized_expression = normalize_expression(counter, statement.expression) + return ( + counter, + prestatements, + NormalAssignmentStatement( + target=statement.target, + expression=normalized_expression, + ), + ) + def normalize_statement(counter, statement): return { - parsing.FurAssignmentStatement: fake_normalization, # TODO unfake this + parsing.FurAssignmentStatement: normalize_assignment_statement, parsing.FurExpressionStatement: normalize_expression_statement, parsing.FurFunctionDefinitionStatement: normalize_function_definition_statement, }[type(statement)](counter, statement)