5 CPSFunctionCallExpression = collections.namedtuple(
6 'CPSFunctionCallExpression',
14 CPSIntegerLiteralExpression = collections.namedtuple(
15 'CPSIntegerLiteralExpression',
21 CPSListConstructExpression = collections.namedtuple(
22 'CPSListConstructExpression',
28 CPSStringLiteralExpression = collections.namedtuple(
29 'CPSStringLiteralExpression',
35 CPSStructureLiteralExpression = collections.namedtuple(
36 'CPSStructureLiteralExpression',
39 'symbol_list_variable',
40 'value_list_variable',
44 CPSSymbolExpression = collections.namedtuple(
45 'CPSSymbolExpression',
51 CPSVariableExpression = collections.namedtuple(
52 'CPSVariableExpression',
58 CPSArrayVariableInitializationStatement = collections.namedtuple(
59 'CPSArrayVariableInitializationStatement',
66 CPSAssignmentStatement = collections.namedtuple(
67 'CPSAssignmentStatement',
74 CPSExpressionStatement = collections.namedtuple(
75 'CPSExpressionStatement',
81 CPSFunctionDefinitionStatement = collections.namedtuple(
82 'CPSFunctionDefinitionStatement',
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_list_construct_expression(expression):
156 return CPSListConstructExpression(allocate=expression.allocate)
158 def convert_string_literal_expression(expression):
159 return CPSStringLiteralExpression(string=expression.string)
161 def convert_structure_literal_expression(expression):
162 return CPSStructureLiteralExpression(
163 field_count=expression.field_count,
164 symbol_list_variable=expression.symbol_list_variable,
165 value_list_variable=expression.value_list_variable,
168 def convert_symbol_expression(expression):
169 return CPSSymbolExpression(symbol=expression.symbol)
171 def convert_variable_expression(expression):
172 return CPSVariableExpression(variable=expression.variable)
174 def convert_expression(expression):
176 normalization.NormalFunctionCallExpression: convert_function_call_expression,
177 normalization.NormalIntegerLiteralExpression: convert_integer_literal_expression,
178 normalization.NormalListConstructExpression: convert_list_construct_expression,
179 normalization.NormalStringLiteralExpression: convert_string_literal_expression,
180 normalization.NormalStructureLiteralExpression: convert_structure_literal_expression,
181 normalization.NormalSymbolExpression: convert_symbol_expression,
182 normalization.NormalVariableExpression: convert_variable_expression,
183 }[type(expression)](expression)
185 def convert_array_variable_initialization_statement(statement):
186 return CPSArrayVariableInitializationStatement(
187 variable=statement.variable,
188 items=tuple(convert_expression(e) for e in statement.items),
191 def convert_assignment_statement(statement):
192 return CPSAssignmentStatement(
193 target=statement.target,
194 expression=convert_expression(statement.expression),
197 def convert_expression_statement(statement):
198 return CPSExpressionStatement(
199 expression=convert_expression(statement.expression),
202 def convert_function_definition_statement(statement):
203 return CPSFunctionDefinitionStatement(
205 argument_name_list=statement.argument_name_list,
206 statement_list=tuple(convert_statement(s) for s in statement.statement_list),
209 def convert_if_else_statement(statement):
210 return CPSIfElseStatement(
211 condition_expression=convert_expression(statement.condition_expression),
212 if_statement_list=tuple(convert_statement(s) for s in statement.if_statement_list),
213 else_statement_list=tuple(convert_statement(s) for s in statement.else_statement_list),
216 def convert_list_append_statement(statement):
217 return CPSListAppendStatement(
218 list_expression=convert_expression(statement.list_expression),
219 item_expression=convert_expression(statement.item_expression),
223 def convert_push_statement(statement):
224 return CPSPushStatement(
225 expression=convert_expression(statement.expression),
228 def convert_variable_initialization_statement(statement):
229 return CPSVariableInitializationStatement(
230 variable=statement.variable,
231 expression=convert_expression(statement.expression),
234 def convert_variable_reassignment_statement(statement):
235 return CPSVariableReassignmentStatement(
236 variable=statement.variable,
237 expression=convert_expression(statement.expression),
240 def convert_symbol_array_variable_initialization_statement(statement):
241 return CPSSymbolArrayVariableInitializationStatement(
242 variable=statement.variable,
243 symbol_list=statement.symbol_list,
246 def convert_statement(statement):
248 normalization.NormalArrayVariableInitializationStatement: convert_array_variable_initialization_statement,
249 normalization.NormalAssignmentStatement: convert_assignment_statement,
250 normalization.NormalExpressionStatement: convert_expression_statement,
251 normalization.NormalFunctionDefinitionStatement: convert_function_definition_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),