5 NormalVariableExpression = collections.namedtuple(
6 'NormalVariableExpression',
12 NormalVariableAssignmentStatement = collections.namedtuple(
13 'NormalVariableAssignmentStatement',
20 NormalFunctionCallExpression = collections.namedtuple(
21 'NormalFunctionCallExpression',
28 NormalExpressionStatement = collections.namedtuple(
29 'NormalExpressionStatement',
35 NormalProgram = collections.namedtuple(
42 def fake_normalization(counter, thing):
43 return (counter, (), thing)
45 def normalize_function_call_expression(counter, expression):
49 for argument in expression.arguments:
50 variable = '${}'.format(counter)
51 prestatements.append(NormalVariableAssignmentStatement(
53 expression=argument, # TODO Normalize each argument
55 arguments.append(NormalVariableExpression(
63 NormalFunctionCallExpression(
64 expression.function, # TODO Normalize the function
65 arguments=tuple(arguments),
69 def normalize_expression_statement(counter, statement):
70 counter, prestatements, normalized = {
71 parsing.FurFunctionCallExpression: normalize_function_call_expression,
72 }[type(statement.expression)](counter, statement.expression)
77 NormalExpressionStatement(expression=normalized),
80 def normalize_statement(counter, statement):
82 parsing.FurExpressionStatement: normalize_expression_statement,
83 parsing.FurAssignmentStatement: fake_normalization,
84 }[type(statement)](counter, statement)
86 def normalize(program):
90 for statement in program.statement_list:
91 counter, prestatements, normalized = normalize_statement(counter, statement)
92 for s in prestatements:
93 statement_list.append(s)
94 statement_list.append(normalized)
97 statement_list=statement_list,