],
)
+CSymbolExpression = collections.namedtuple(
+ 'CSymbolExpression',
+ [
+ 'value',
+ ],
+)
+
CNegationExpression = collections.namedtuple(
'CNegationExpression',
[
],
)
+CAssignmentStatement = collections.namedtuple(
+ 'CAssignmentStatement',
+ [
+ 'target',
+ 'expression',
+ ],
+)
+
CProgram = collections.namedtuple(
'CProgram',
[
LITERAL_TYPE_MAPPING = {
parsing.FurIntegerLiteralExpression: CIntegerLiteral,
parsing.FurStringLiteralExpression: CStringLiteral,
+ parsing.FurSymbolExpression: CSymbolExpression,
}
if type(expression) in LITERAL_TYPE_MAPPING:
right=transform_expression(builtin_dependencies, expression.right),
)
+def transform_assignment_statement(builtin_dependencies, assignment_statement):
+ # TODO Check that target is not a builtin
+ return CAssignmentStatement(
+ target=assignment_statement.target,
+ expression=transform_expression(builtin_dependencies, assignment_statement.expression),
+ )
+
def transform_negation_expression(builtin_dependencies, negation_expression):
return CNegationExpression(value=transform_expression(builtin_dependencies, negation_expression.value))
raise Exception()
+def transform_statement(builtin_dependencies, statement):
+ return {
+ parsing.FurAssignmentStatement: transform_assignment_statement,
+ parsing.FurFunctionCallExpression: transform_function_call_expression,
+ }[type(statement)](builtin_dependencies, statement)
+
def transform(program):
builtins = set()
c_statements = [
- transform_function_call_expression(builtins, statement) for statement in program.statement_list
+ transform_statement(builtins, statement) for statement in program.statement_list
]
standard_libraries = set()