5 CPSFunctionCallExpression = collections.namedtuple(
6 'CPSFunctionCallExpression',
14 CPSIntegerLiteralExpression = collections.namedtuple(
15 'CPSIntegerLiteralExpression',
21 CPSLambdaExpression = collections.namedtuple(
22 'CPSLambdaExpression',
29 CPSListConstructExpression = collections.namedtuple(
30 'CPSListConstructExpression',
36 CPSStringLiteralExpression = collections.namedtuple(
37 'CPSStringLiteralExpression',
43 CPSStructureLiteralExpression = collections.namedtuple(
44 'CPSStructureLiteralExpression',
47 'symbol_list_variable',
48 'value_list_variable',
52 CPSSymbolExpression = collections.namedtuple(
53 'CPSSymbolExpression',
59 CPSVariableExpression = collections.namedtuple(
60 'CPSVariableExpression',
66 CPSArrayVariableInitializationStatement = collections.namedtuple(
67 'CPSArrayVariableInitializationStatement',
74 CPSAssignmentStatement = collections.namedtuple(
75 'CPSAssignmentStatement',
82 CPSExpressionStatement = collections.namedtuple(
83 'CPSExpressionStatement',
89 CPSFunctionDefinitionStatement = collections.namedtuple(
90 'CPSFunctionDefinitionStatement',
98 CPSIfElseStatement = collections.namedtuple(
101 'condition_expression',
103 'else_statement_list',
107 CPSListAppendStatement = collections.namedtuple(
108 'CPSListAppendStatement',
115 CPSPushStatement = collections.namedtuple(
122 CPSVariableInitializationStatement = collections.namedtuple(
123 'CPSVariableInitializationStatement',
130 CPSSymbolArrayVariableInitializationStatement = collections.namedtuple(
131 'CPSSymbolArrayVariableInitializationStatement',
138 CPSVariableReassignmentStatement = collections.namedtuple(
139 'CPSVariableReassignmentStatement',
146 CPSProgram = collections.namedtuple(
153 def convert_function_call_expression(expression):
154 return CPSFunctionCallExpression(
155 metadata=expression.metadata,
156 function_expression=convert_expression(expression.function_expression),
157 argument_count=expression.argument_count,
160 def convert_integer_literal_expression(expression):
161 return CPSIntegerLiteralExpression(integer=expression.integer)
163 def convert_lambda_expression(expression):
164 return CPSLambdaExpression(
165 argument_name_list=expression.argument_name_list,
166 statement_list=tuple(convert_statement(s) for s in expression.statement_list),
169 def convert_list_construct_expression(expression):
170 return CPSListConstructExpression(allocate=expression.allocate)
172 def convert_string_literal_expression(expression):
173 return CPSStringLiteralExpression(string=expression.string)
175 def convert_structure_literal_expression(expression):
176 return CPSStructureLiteralExpression(
177 field_count=expression.field_count,
178 symbol_list_variable=expression.symbol_list_variable,
179 value_list_variable=expression.value_list_variable,
182 def convert_symbol_expression(expression):
183 return CPSSymbolExpression(symbol=expression.symbol)
185 def convert_variable_expression(expression):
186 return CPSVariableExpression(variable=expression.variable)
188 def convert_expression(expression):
190 normalization.NormalFunctionCallExpression: convert_function_call_expression,
191 normalization.NormalIntegerLiteralExpression: convert_integer_literal_expression,
192 normalization.NormalLambdaExpression: convert_lambda_expression,
193 normalization.NormalListConstructExpression: convert_list_construct_expression,
194 normalization.NormalStringLiteralExpression: convert_string_literal_expression,
195 normalization.NormalStructureLiteralExpression: convert_structure_literal_expression,
196 normalization.NormalSymbolExpression: convert_symbol_expression,
197 normalization.NormalVariableExpression: convert_variable_expression,
198 }[type(expression)](expression)
200 def convert_array_variable_initialization_statement(statement):
201 return CPSArrayVariableInitializationStatement(
202 variable=statement.variable,
203 items=tuple(convert_expression(e) for e in statement.items),
206 def convert_assignment_statement(statement):
207 return CPSAssignmentStatement(
208 target=statement.target,
209 expression=convert_expression(statement.expression),
212 def convert_expression_statement(statement):
213 return CPSExpressionStatement(
214 expression=convert_expression(statement.expression),
217 def convert_function_definition_statement(statement):
218 return CPSFunctionDefinitionStatement(
220 argument_name_list=statement.argument_name_list,
221 statement_list=tuple(convert_statement(s) for s in statement.statement_list),
224 def convert_if_else_statement(statement):
225 return CPSIfElseStatement(
226 condition_expression=convert_expression(statement.condition_expression),
227 if_statement_list=tuple(convert_statement(s) for s in statement.if_statement_list),
228 else_statement_list=tuple(convert_statement(s) for s in statement.else_statement_list),
231 def convert_list_append_statement(statement):
232 return CPSListAppendStatement(
233 list_expression=convert_expression(statement.list_expression),
234 item_expression=convert_expression(statement.item_expression),
238 def convert_push_statement(statement):
239 return CPSPushStatement(
240 expression=convert_expression(statement.expression),
243 def convert_variable_initialization_statement(statement):
244 return CPSVariableInitializationStatement(
245 variable=statement.variable,
246 expression=convert_expression(statement.expression),
249 def convert_variable_reassignment_statement(statement):
250 return CPSVariableReassignmentStatement(
251 variable=statement.variable,
252 expression=convert_expression(statement.expression),
255 def convert_symbol_array_variable_initialization_statement(statement):
256 return CPSSymbolArrayVariableInitializationStatement(
257 variable=statement.variable,
258 symbol_list=statement.symbol_list,
261 def convert_statement(statement):
263 normalization.NormalArrayVariableInitializationStatement: convert_array_variable_initialization_statement,
264 normalization.NormalAssignmentStatement: convert_assignment_statement,
265 normalization.NormalExpressionStatement: convert_expression_statement,
266 normalization.NormalFunctionDefinitionStatement: convert_function_definition_statement,
267 normalization.NormalIfElseStatement: convert_if_else_statement,
268 normalization.NormalListAppendStatement: convert_list_append_statement,
269 normalization.NormalPushStatement: convert_push_statement,
270 normalization.NormalVariableInitializationStatement: convert_variable_initialization_statement,
271 normalization.NormalVariableReassignmentStatement: convert_variable_reassignment_statement,
272 normalization.NormalSymbolArrayVariableInitializationStatement: convert_symbol_array_variable_initialization_statement,
273 }[type(statement)](statement)
275 def convert(program):
277 statement_list=tuple(convert_statement(s) for s in program.statement_list),