From f078f93ba357c3ede0b109a3b9ea5e79c7a8b777 Mon Sep 17 00:00:00 2001 From: Andrew Date: Mon, 12 Jul 2021 16:57:10 +0400 Subject: Added ability to call functions as a statement. --- main.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'main.py') diff --git a/main.py b/main.py index 0ba9d47..e21d0c8 100644 --- a/main.py +++ b/main.py @@ -31,7 +31,8 @@ def factorial(n): runtime_functions = { - "factorial": factorial + "factorial": factorial, + "print": print, } # END OF RUNTIME @@ -45,8 +46,8 @@ def _eval(node): return runtime.get(node.value) elif node.type == NodeType.FUNCALL: - fun_name = node.value[0] - args = list(map(_eval, node.value[1])) + fun_name = node.left.value + args = list(map(_eval, node.right.value)) return runtime_functions.get(fun_name)(*args) elif node.type == NodeType.OPERATOR: @@ -64,9 +65,10 @@ def main(*argv): data = argv[0] else: # data = "2 + 3 * 4" - data = "let a = 2 + 3; let e = 4;" + # data = "let a = 2 + 3; let e = 4;" # data = "(3 + 3 * 2) * -4" # data = "(2 + factorial(4, )) * 9" + data = "print(2);" tokens = tokenize(data) # print(tokens) @@ -74,8 +76,8 @@ def main(*argv): for statement in statements: _eval(statement) # node, _ = parse_expr(tokens, 0) - # print(expr_eval(node)) - print(1) + # print(_eval(node)) + pass if __name__ == "__main__": -- cgit v1.2.3