import normalization
+CPSBuiltinExpression = collections.namedtuple(
+ 'CPSBuiltinExpression',
+ (
+ 'symbol',
+ ),
+)
+
CPSFunctionCallExpression = collections.namedtuple(
'CPSFunctionCallExpression',
(
),
)
+CPSLambdaExpression = collections.namedtuple(
+ 'CPSLambdaExpression',
+ (
+ 'name',
+ 'argument_name_list',
+ 'statement_list',
+ ),
+)
+
CPSListConstructExpression = collections.namedtuple(
'CPSListConstructExpression',
(
'CPSStructureLiteralExpression',
(
'field_count',
- 'symbol_list_variable',
- 'value_list_variable',
),
)
),
)
+CPSSymbolLiteralExpression = collections.namedtuple(
+ 'CPSSymbolLiteralExpression',
+ (
+ 'symbol',
+ ),
+)
+
CPSVariableExpression = collections.namedtuple(
'CPSVariableExpression',
(
),
)
-CPSFunctionDefinitionStatement = collections.namedtuple(
- 'CPSFunctionDefinitionStatement',
- (
- 'name',
- 'argument_name_list',
- 'statement_list',
- )
-)
-
-CPSIfElseStatement = collections.namedtuple(
- 'CPSIfElseStatement',
+CPSIfElseExpression = collections.namedtuple(
+ 'CPSIfElseExpression',
(
'condition_expression',
'if_statement_list',
),
)
-CPSListAppendStatement = collections.namedtuple(
- 'CPSListAppendStatement',
- (
- 'list_expression',
- 'item_expression',
- ),
-)
-
CPSPushStatement = collections.namedtuple(
'CPSPushStatement',
(
),
)
-CPSVariableReassignmentStatement = collections.namedtuple(
- 'CPSVariableReassignmentStatement',
- (
- 'variable',
- 'expression',
- ),
-)
-
CPSProgram = collections.namedtuple(
'CPSProgram',
(
),
)
+def convert_builtin_expression(expression):
+ return CPSBuiltinExpression(symbol=expression.symbol)
+
def convert_function_call_expression(expression):
return CPSFunctionCallExpression(
metadata=expression.metadata,
def convert_integer_literal_expression(expression):
return CPSIntegerLiteralExpression(integer=expression.integer)
+def convert_lambda_expression(expression):
+ return CPSLambdaExpression(
+ name=expression.name,
+ argument_name_list=expression.argument_name_list,
+ statement_list=tuple(convert_statement(s) for s in expression.statement_list),
+ )
+
def convert_list_construct_expression(expression):
return CPSListConstructExpression(allocate=expression.allocate)
def convert_structure_literal_expression(expression):
return CPSStructureLiteralExpression(
field_count=expression.field_count,
- symbol_list_variable=expression.symbol_list_variable,
- value_list_variable=expression.value_list_variable,
)
def convert_symbol_expression(expression):
return CPSSymbolExpression(symbol=expression.symbol)
+def convert_symbol_literal_expression(expression):
+ return CPSSymbolLiteralExpression(symbol=expression.symbol)
+
def convert_variable_expression(expression):
return CPSVariableExpression(variable=expression.variable)
def convert_expression(expression):
return {
+ normalization.NormalBuiltinExpression: convert_builtin_expression,
normalization.NormalFunctionCallExpression: convert_function_call_expression,
+ normalization.NormalIfElseExpression: convert_if_else_expression,
normalization.NormalIntegerLiteralExpression: convert_integer_literal_expression,
+ normalization.NormalLambdaExpression: convert_lambda_expression,
normalization.NormalListConstructExpression: convert_list_construct_expression,
normalization.NormalStringLiteralExpression: convert_string_literal_expression,
normalization.NormalStructureLiteralExpression: convert_structure_literal_expression,
normalization.NormalSymbolExpression: convert_symbol_expression,
+ normalization.NormalSymbolLiteralExpression: convert_symbol_literal_expression,
normalization.NormalVariableExpression: convert_variable_expression,
}[type(expression)](expression)
-def convert_array_variable_initialization_statement(statement):
- return CPSArrayVariableInitializationStatement(
- variable=statement.variable,
- items=tuple(convert_expression(e) for e in statement.items),
- )
-
def convert_assignment_statement(statement):
return CPSAssignmentStatement(
target=statement.target,
expression=convert_expression(statement.expression),
)
-def convert_function_definition_statement(statement):
- return CPSFunctionDefinitionStatement(
- name=statement.name,
- argument_name_list=statement.argument_name_list,
- statement_list=tuple(convert_statement(s) for s in statement.statement_list),
- )
+def convert_if_else_expression(statement):
+ if_statement_list=tuple(convert_statement(s) for s in statement.if_statement_list)
+ else_statement_list=tuple(convert_statement(s) for s in statement.else_statement_list)
-def convert_if_else_statement(statement):
- return CPSIfElseStatement(
+ return CPSIfElseExpression(
condition_expression=convert_expression(statement.condition_expression),
- if_statement_list=tuple(convert_statement(s) for s in statement.if_statement_list),
- else_statement_list=tuple(convert_statement(s) for s in statement.else_statement_list),
- )
-
-def convert_list_append_statement(statement):
- return CPSListAppendStatement(
- list_expression=convert_expression(statement.list_expression),
- item_expression=convert_expression(statement.item_expression),
+ if_statement_list=if_statement_list,
+ else_statement_list=else_statement_list,
)
-
def convert_push_statement(statement):
return CPSPushStatement(
expression=convert_expression(statement.expression),
expression=convert_expression(statement.expression),
)
-def convert_variable_reassignment_statement(statement):
- return CPSVariableReassignmentStatement(
- variable=statement.variable,
- expression=convert_expression(statement.expression),
- )
-
-def convert_symbol_array_variable_initialization_statement(statement):
- return CPSSymbolArrayVariableInitializationStatement(
- variable=statement.variable,
- symbol_list=statement.symbol_list,
- )
-
def convert_statement(statement):
return {
- normalization.NormalArrayVariableInitializationStatement: convert_array_variable_initialization_statement,
normalization.NormalAssignmentStatement: convert_assignment_statement,
normalization.NormalExpressionStatement: convert_expression_statement,
- normalization.NormalFunctionDefinitionStatement: convert_function_definition_statement,
- normalization.NormalIfElseStatement: convert_if_else_statement,
- normalization.NormalListAppendStatement: convert_list_append_statement,
normalization.NormalPushStatement: convert_push_statement,
normalization.NormalVariableInitializationStatement: convert_variable_initialization_statement,
- normalization.NormalVariableReassignmentStatement: convert_variable_reassignment_statement,
- normalization.NormalSymbolArrayVariableInitializationStatement: convert_symbol_array_variable_initialization_statement,
}[type(statement)](statement)
+def convert_statement_list(statement_list):
+ return tuple(convert_statement(s) for s in statement_list)
+
+
def convert(program):
return CPSProgram(
- statement_list=tuple(convert_statement(s) for s in program.statement_list),
+ statement_list=convert_statement_list(program.statement_list),
)