49 lines
771 B
Python
49 lines
771 B
Python
from collections import ChainMap
|
|
|
|
import to_bf_compiler as compiler
|
|
|
|
BUILT_IN_FUNCTIONS = ChainMap({})
|
|
|
|
BUILT_IN_FUNCTIONS['putc'] = [('PUTC',)]
|
|
BUILT_IN_FUNCTIONS['scanc'] =[('SCANC',)]
|
|
BUILT_IN_FUNCTIONS['debug'] = [('DEBUG',)]
|
|
|
|
func_to_compile = []
|
|
|
|
|
|
|
|
func_to_compile.append(
|
|
('print_int',"""
|
|
|
|
def print_int(n){
|
|
var i, val;
|
|
i = 1;
|
|
while (i <= n){
|
|
i *= 10;
|
|
}
|
|
i /= 10;
|
|
while (i >= 1){
|
|
val = n / i;
|
|
n %= i;
|
|
putc(val + 48);
|
|
i /= 10;
|
|
}
|
|
return n;
|
|
}
|
|
"""))
|
|
|
|
|
|
|
|
def compile_func(name,func):
|
|
ast = compiler.compile(func,2)
|
|
ir = compiler.Ast_to_IR(ast,BUILT_IN_FUNCTIONS) #on peut utiliser toutes les fonctions définis avant
|
|
ir.convert()
|
|
return ir.functions[name]
|
|
|
|
|
|
|
|
for name, func in func_to_compile:
|
|
BUILT_IN_FUNCTIONS[name] = compile_func(name,func)
|
|
|
|
|