5 CPSFunctionCallExpression = collections.namedtuple(
6 'CPSFunctionCallExpression',
14 CPSIntegerLiteralExpression = collections.namedtuple(
15 'CPSIntegerLiteralExpression',
21 CPSLambdaExpression = collections.namedtuple(
22 'CPSLambdaExpression',
30 CPSListConstructExpression = collections.namedtuple(
31 'CPSListConstructExpression',
37 CPSStringLiteralExpression = collections.namedtuple(
38 'CPSStringLiteralExpression',
44 CPSStructureLiteralExpression = collections.namedtuple(
45 'CPSStructureLiteralExpression',
48 'symbol_list_variable',
49 'value_list_variable',
53 CPSSymbolExpression = collections.namedtuple(
54 'CPSSymbolExpression',
60 CPSVariableExpression = collections.namedtuple(
61 'CPSVariableExpression',
67 CPSArrayVariableInitializationStatement = collections.namedtuple(
68 'CPSArrayVariableInitializationStatement',
75 CPSAssignmentStatement = collections.namedtuple(
76 'CPSAssignmentStatement',
83 CPSExpressionStatement = collections.namedtuple(
84 'CPSExpressionStatement',
90 CPSIfElseStatement = collections.namedtuple(
93 'condition_expression',
95 'else_statement_list',
99 CPSListAppendStatement = collections.namedtuple(
100 'CPSListAppendStatement',
107 CPSPushStatement = collections.namedtuple(
114 CPSVariableInitializationStatement = collections.namedtuple(
115 'CPSVariableInitializationStatement',
122 CPSSymbolArrayVariableInitializationStatement = collections.namedtuple(
123 'CPSSymbolArrayVariableInitializationStatement',
130 CPSVariableReassignmentStatement = collections.namedtuple(
131 'CPSVariableReassignmentStatement',
138 CPSProgram = collections.namedtuple(
145 def convert_function_call_expression(expression):
146 return CPSFunctionCallExpression(
147 metadata=expression.metadata,
148 function_expression=convert_expression(expression.function_expression),
149 argument_count=expression.argument_count,
152 def convert_integer_literal_expression(expression):
153 return CPSIntegerLiteralExpression(integer=expression.integer)
155 def convert_lambda_expression(expression):
156 return CPSLambdaExpression(
157 name=expression.name,
158 argument_name_list=expression.argument_name_list,
159 statement_list=tuple(convert_statement(s) for s in expression.statement_list),
162 def convert_list_construct_expression(expression):
163 return CPSListConstructExpression(allocate=expression.allocate)
165 def convert_string_literal_expression(expression):
166 return CPSStringLiteralExpression(string=expression.string)
168 def convert_structure_literal_expression(expression):
169 return CPSStructureLiteralExpression(
170 field_count=expression.field_count,
171 symbol_list_variable=expression.symbol_list_variable,
172 value_list_variable=expression.value_list_variable,
175 def convert_symbol_expression(expression):
176 return CPSSymbolExpression(symbol=expression.symbol)
178 def convert_variable_expression(expression):
179 return CPSVariableExpression(variable=expression.variable)
181 def convert_expression(expression):
183 normalization.NormalFunctionCallExpression: convert_function_call_expression,
184 normalization.NormalIntegerLiteralExpression: convert_integer_literal_expression,
185 normalization.NormalLambdaExpression: convert_lambda_expression,
186 normalization.NormalListConstructExpression: convert_list_construct_expression,
187 normalization.NormalStringLiteralExpression: convert_string_literal_expression,
188 normalization.NormalStructureLiteralExpression: convert_structure_literal_expression,
189 normalization.NormalSymbolExpression: convert_symbol_expression,
190 normalization.NormalVariableExpression: convert_variable_expression,
191 }[type(expression)](expression)
193 def convert_array_variable_initialization_statement(statement):
194 return CPSArrayVariableInitializationStatement(
195 variable=statement.variable,
196 items=tuple(convert_expression(e) for e in statement.items),
199 def convert_assignment_statement(statement):
200 return CPSAssignmentStatement(
201 target=statement.target,
202 expression=convert_expression(statement.expression),
205 def convert_expression_statement(statement):
206 return CPSExpressionStatement(
207 expression=convert_expression(statement.expression),
210 def convert_if_else_statement(statement):
211 return CPSIfElseStatement(
212 condition_expression=convert_expression(statement.condition_expression),
213 if_statement_list=tuple(convert_statement(s) for s in statement.if_statement_list),
214 else_statement_list=tuple(convert_statement(s) for s in statement.else_statement_list),
217 def convert_list_append_statement(statement):
218 return CPSListAppendStatement(
219 list_expression=convert_expression(statement.list_expression),
220 item_expression=convert_expression(statement.item_expression),
224 def convert_push_statement(statement):
225 return CPSPushStatement(
226 expression=convert_expression(statement.expression),
229 def convert_variable_initialization_statement(statement):
230 return CPSVariableInitializationStatement(
231 variable=statement.variable,
232 expression=convert_expression(statement.expression),
235 def convert_variable_reassignment_statement(statement):
236 return CPSVariableReassignmentStatement(
237 variable=statement.variable,
238 expression=convert_expression(statement.expression),
241 def convert_symbol_array_variable_initialization_statement(statement):
242 return CPSSymbolArrayVariableInitializationStatement(
243 variable=statement.variable,
244 symbol_list=statement.symbol_list,
247 def convert_statement(statement):
249 normalization.NormalArrayVariableInitializationStatement: convert_array_variable_initialization_statement,
250 normalization.NormalAssignmentStatement: convert_assignment_statement,
251 normalization.NormalExpressionStatement: convert_expression_statement,
252 normalization.NormalIfElseStatement: convert_if_else_statement,
253 normalization.NormalListAppendStatement: convert_list_append_statement,
254 normalization.NormalPushStatement: convert_push_statement,
255 normalization.NormalVariableInitializationStatement: convert_variable_initialization_statement,
256 normalization.NormalVariableReassignmentStatement: convert_variable_reassignment_statement,
257 normalization.NormalSymbolArrayVariableInitializationStatement: convert_symbol_array_variable_initialization_statement,
258 }[type(statement)](statement)
260 def convert(program):
262 statement_list=tuple(convert_statement(s) for s in program.statement_list),