5 CIntegerLiteral = collections.namedtuple(
12 CStringLiteral = collections.namedtuple(
19 CFunctionCallStatement = collections.namedtuple(
20 'CFunctionCallStatement',
27 CProgram = collections.namedtuple(
37 'print': ['stdio.h.'],
40 def transform_argument(builtin_dependencies, argument):
42 parsing.IntegerLiteral: CIntegerLiteral,
43 parsing.StringLiteral: CStringLiteral,
44 }[type(argument)](value=argument.value)
46 def transform_function_call_statement(builtin_dependencies, function_call):
47 if function_call.name in BUILTINS.keys():
48 builtin_dependencies.add(function_call.name)
50 return CFunctionCallStatement(
51 name='builtin$' + function_call.name,
52 arguments=tuple(transform_argument(builtin_dependencies, arg) for arg in function_call.arguments),
58 def transform(program):
62 transform_function_call_statement(builtins, statement) for statement in program.statement_list
65 standard_libraries = set()
66 for builtin in builtins:
67 for standard_library in BUILTINS[builtin]:
68 standard_libraries.add(standard_library)
72 statements=c_statements,
73 standard_libraries=standard_libraries,
77 if __name__ == '__main__':