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',
51 CPSSymbolExpression = collections.namedtuple(
52 'CPSSymbolExpression',
58 CPSSymbolLiteralExpression = collections.namedtuple(
59 'CPSSymbolLiteralExpression',
65 CPSVariableExpression = collections.namedtuple(
66 'CPSVariableExpression',
72 CPSArrayVariableInitializationStatement = collections.namedtuple(
73 'CPSArrayVariableInitializationStatement',
80 CPSAssignmentStatement = collections.namedtuple(
81 'CPSAssignmentStatement',
88 CPSExpressionStatement = collections.namedtuple(
89 'CPSExpressionStatement',
95 CPSIfElseExpression = collections.namedtuple(
96 'CPSIfElseExpression',
98 'condition_expression',
100 'else_statement_list',
104 CPSPushStatement = collections.namedtuple(
111 CPSVariableInitializationStatement = collections.namedtuple(
112 'CPSVariableInitializationStatement',
119 CPSSymbolArrayVariableInitializationStatement = collections.namedtuple(
120 'CPSSymbolArrayVariableInitializationStatement',
127 CPSProgram = collections.namedtuple(
134 def convert_function_call_expression(expression):
135 return CPSFunctionCallExpression(
136 metadata=expression.metadata,
137 function_expression=convert_expression(expression.function_expression),
138 argument_count=expression.argument_count,
141 def convert_integer_literal_expression(expression):
142 return CPSIntegerLiteralExpression(integer=expression.integer)
144 def convert_lambda_expression(expression):
145 return CPSLambdaExpression(
146 name=expression.name,
147 argument_name_list=expression.argument_name_list,
148 statement_list=tuple(convert_statement(s) for s in expression.statement_list),
151 def convert_list_construct_expression(expression):
152 return CPSListConstructExpression(allocate=expression.allocate)
154 def convert_string_literal_expression(expression):
155 return CPSStringLiteralExpression(string=expression.string)
157 def convert_structure_literal_expression(expression):
158 return CPSStructureLiteralExpression(
159 field_count=expression.field_count,
162 def convert_symbol_expression(expression):
163 return CPSSymbolExpression(symbol=expression.symbol)
165 def convert_symbol_literal_expression(expression):
166 return CPSSymbolLiteralExpression(symbol=expression.symbol)
168 def convert_variable_expression(expression):
169 return CPSVariableExpression(variable=expression.variable)
171 def convert_expression(expression):
173 normalization.NormalFunctionCallExpression: convert_function_call_expression,
174 normalization.NormalIfElseExpression: convert_if_else_expression,
175 normalization.NormalIntegerLiteralExpression: convert_integer_literal_expression,
176 normalization.NormalLambdaExpression: convert_lambda_expression,
177 normalization.NormalListConstructExpression: convert_list_construct_expression,
178 normalization.NormalStringLiteralExpression: convert_string_literal_expression,
179 normalization.NormalStructureLiteralExpression: convert_structure_literal_expression,
180 normalization.NormalSymbolExpression: convert_symbol_expression,
181 normalization.NormalSymbolLiteralExpression: convert_symbol_literal_expression,
182 normalization.NormalVariableExpression: convert_variable_expression,
183 }[type(expression)](expression)
185 def convert_assignment_statement(statement):
186 return CPSAssignmentStatement(
187 target=statement.target,
188 expression=convert_expression(statement.expression),
191 def convert_expression_statement(statement):
192 return CPSExpressionStatement(
193 expression=convert_expression(statement.expression),
196 def convert_if_else_expression(statement):
197 if_statement_list=tuple(convert_statement(s) for s in statement.if_statement_list)
198 else_statement_list=tuple(convert_statement(s) for s in statement.else_statement_list)
200 return CPSIfElseExpression(
201 condition_expression=convert_expression(statement.condition_expression),
202 if_statement_list=if_statement_list,
203 else_statement_list=else_statement_list,
206 def convert_push_statement(statement):
207 return CPSPushStatement(
208 expression=convert_expression(statement.expression),
211 def convert_variable_initialization_statement(statement):
212 return CPSVariableInitializationStatement(
213 variable=statement.variable,
214 expression=convert_expression(statement.expression),
217 def convert_statement(statement):
219 normalization.NormalAssignmentStatement: convert_assignment_statement,
220 normalization.NormalExpressionStatement: convert_expression_statement,
221 normalization.NormalPushStatement: convert_push_statement,
222 normalization.NormalVariableInitializationStatement: convert_variable_initialization_statement,
223 }[type(statement)](statement)
225 def convert_statement_list(statement_list):
226 return tuple(convert_statement(s) for s in statement_list)
229 def convert(program):
231 statement_list=convert_statement_list(program.statement_list),