+ return {
+ transformation.CArrayVariableInitializationStatement: generate_array_variable_initialization_statement,
+ transformation.CExpressionStatement: generate_expression_statement,
+ transformation.CFunctionDeclaration: generate_function_declaration,
+ transformation.CIfElseStatement: generate_if_else_statement,
+ transformation.CListAppendStatement: generate_list_append_statement,
+ transformation.CPushStatement: generate_push_statement,
+ transformation.CSymbolAssignmentStatement: generate_symbol_assignment_statement,
+ transformation.CSymbolArrayVariableInitializationStatement: generate_symbol_array_variable_initialization_statement,
+ transformation.CVariableInitializationStatement: generate_variable_initialization_statement,
+ transformation.CVariableReassignmentStatement: generate_variable_reassignment_statement,
+ }[type(statement)](statement)
+
+def generate_function_definition(definition):
+ template = ENV.get_template('function_definition.c')
+ return template.render(
+ name=definition.name,
+ argument_name_list=definition.argument_name_list,
+ statement_list=list(generate_statement(s) for s in definition.statement_list),
+ )
+ return definition
+
+C_ESCAPES = {
+ '"': r'\"',
+}
+
+def escape_character(ch):
+ return C_ESCAPES.get(ch, ch)