--- esP.py- 2016-09-09 00:00:00.000000000 +0900 +++ esP.py 2016-09-09 01:00:00.000000000 +0900 @@ -3,6 +3,12 @@ import sys import yaml +def printf(s, v): + sys.stdout.write(s % v) + +def atoi(s): + return eval(s) + def is_num(s): try: float(s) @@ -413,7 +419,7 @@ def do_expr(expr, info): if k == 'name': return get_env(info).get(v) if k == 'br_s': - if v == '(': + if v in [ '(', '[' ]: # '[' for do_arr() e = expr[2][0] return do_expr(e, info) if v == '{': @@ -442,6 +448,13 @@ def do_blk(blk, info): if 'ret' in call_inf: return +def get_sys_func(name): + try: + func = eval(name) + except NameError: + return None + return func + def do_fcall(name, args, info): if info.get('verb') >= 1: print('do_fcall() name={} args={}'.format(name, args)) @@ -451,6 +464,9 @@ def do_fcall(name, args, info): f = lambda (k, nm): k == 'fdef' and nm == name fdef = next( ( e for e in lst if f( e[:2] ) ), None ) if fdef is None: + func = get_sys_func(name) + if func: + return func(*args) err_exit("not found fdef '{}'".format(name)) (args_info, ret_type, body) = fdef[2:]