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 CPSIfElseExpression = collections.namedtuple(
91 'CPSIfElseExpression',
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 CPSProgram = collections.namedtuple(
137 def convert_function_call_expression(expression):
138 return CPSFunctionCallExpression(
139 metadata=expression.metadata,
140 function_expression=convert_expression(expression.function_expression),
141 argument_count=expression.argument_count,
144 def convert_integer_literal_expression(expression):
145 return CPSIntegerLiteralExpression(integer=expression.integer)
147 def convert_lambda_expression(expression):
148 return CPSLambdaExpression(
149 name=expression.name,
150 argument_name_list=expression.argument_name_list,
151 statement_list=tuple(convert_statement(s) for s in expression.statement_list),
154 def convert_list_construct_expression(expression):
155 return CPSListConstructExpression(allocate=expression.allocate)
157 def convert_string_literal_expression(expression):
158 return CPSStringLiteralExpression(string=expression.string)
160 def convert_structure_literal_expression(expression):
161 return CPSStructureLiteralExpression(
162 field_count=expression.field_count,
163 symbol_list_variable=expression.symbol_list_variable,
164 value_list_variable=expression.value_list_variable,
167 def convert_symbol_expression(expression):
168 return CPSSymbolExpression(symbol=expression.symbol)
170 def convert_variable_expression(expression):
171 return CPSVariableExpression(variable=expression.variable)
173 def convert_expression(expression):
175 normalization.NormalFunctionCallExpression: convert_function_call_expression,
176 normalization.NormalIfElseExpression: convert_if_else_expression,
177 normalization.NormalIntegerLiteralExpression: convert_integer_literal_expression,
178 normalization.NormalLambdaExpression: convert_lambda_expression,
179 normalization.NormalListConstructExpression: convert_list_construct_expression,
180 normalization.NormalStringLiteralExpression: convert_string_literal_expression,
181 normalization.NormalStructureLiteralExpression: convert_structure_literal_expression,
182 normalization.NormalSymbolExpression: convert_symbol_expression,
183 normalization.NormalVariableExpression: convert_variable_expression,
184 }[type(expression)](expression)
186 def convert_array_variable_initialization_statement(statement):
187 return CPSArrayVariableInitializationStatement(
188 variable=statement.variable,
189 items=tuple(convert_expression(e) for e in statement.items),
192 def convert_assignment_statement(statement):
193 return CPSAssignmentStatement(
194 target=statement.target,
195 expression=convert_expression(statement.expression),
198 def convert_expression_statement(statement):
199 return CPSExpressionStatement(
200 expression=convert_expression(statement.expression),
203 def convert_if_else_expression(statement):
204 if_statement_list=tuple(convert_statement(s) for s in statement.if_statement_list)
205 else_statement_list=tuple(convert_statement(s) for s in statement.else_statement_list)
207 return CPSIfElseExpression(
208 condition_expression=convert_expression(statement.condition_expression),
209 if_statement_list=if_statement_list,
210 else_statement_list=else_statement_list,
213 def convert_list_append_statement(statement):
214 return CPSListAppendStatement(
215 list_expression=convert_expression(statement.list_expression),
216 item_expression=convert_expression(statement.item_expression),
220 def convert_push_statement(statement):
221 return CPSPushStatement(
222 expression=convert_expression(statement.expression),
225 def convert_variable_initialization_statement(statement):
226 return CPSVariableInitializationStatement(
227 variable=statement.variable,
228 expression=convert_expression(statement.expression),
231 def convert_symbol_array_variable_initialization_statement(statement):
232 return CPSSymbolArrayVariableInitializationStatement(
233 variable=statement.variable,
234 symbol_list=statement.symbol_list,
237 def convert_statement(statement):
239 normalization.NormalArrayVariableInitializationStatement: convert_array_variable_initialization_statement,
240 normalization.NormalAssignmentStatement: convert_assignment_statement,
241 normalization.NormalExpressionStatement: convert_expression_statement,
242 normalization.NormalListAppendStatement: convert_list_append_statement,
243 normalization.NormalPushStatement: convert_push_statement,
244 normalization.NormalVariableInitializationStatement: convert_variable_initialization_statement,
245 normalization.NormalSymbolArrayVariableInitializationStatement: convert_symbol_array_variable_initialization_statement,
246 }[type(statement)](statement)
248 def convert_statement_list(statement_list):
249 return tuple(convert_statement(s) for s in statement_list)
252 def convert(program):
254 statement_list=convert_statement_list(program.statement_list),