+def transform_expression_statement(accumulators, statement):
+ expression = {
+ parsing.FurFunctionCallExpression: transform_function_call_expression,
+ normalization.NormalFunctionCallExpression: transform_function_call_expression,
+ }[type(statement.expression)](accumulators, statement.expression)
+
+ return CExpressionStatement(
+ expression=expression,
+ )
+
+def transform_variable_assignment_statement(accumulators, statement):
+ return CVariableAssignmentStatement(
+ variable=statement.variable,
+ expression=transform_expression(accumulators, statement.expression),
+ )
+
+def transform_statement(accumulators, statement):
+ return {
+ parsing.FurAssignmentStatement: transform_symbol_assignment_statement,
+ parsing.FurExpressionStatement: transform_expression_statement,
+ normalization.NormalVariableAssignmentStatement: transform_variable_assignment_statement,
+ normalization.NormalExpressionStatement: transform_expression_statement,
+ }[type(statement)](accumulators, statement)
+
+
+Accumulators = collections.namedtuple(
+ 'Accumulators',
+ [
+ 'builtin_set',
+ 'symbol_list',
+ 'string_literal_list',
+ ],
+)
+