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(function_call):
61 statement = transform_function_call_statement(builtins, function_call)
63 standard_libraries = set()
64 for builtin in builtins:
65 for standard_library in BUILTINS[builtin]:
66 standard_libraries.add(standard_library)
70 statements=[statement],
71 standard_libraries=standard_libraries,
75 if __name__ == '__main__':