diff options
| author | Andrew <saintruler@gmail.com> | 2021-07-12 16:57:10 +0400 |
|---|---|---|
| committer | Andrew <saintruler@gmail.com> | 2021-07-12 16:57:10 +0400 |
| commit | 95ab5fec4a930114fabeef77f7a458c8dd163142 (patch) | |
| tree | ccec54fdcbb15276689249d70381fe87fda53f97 /main.py | |
| parent | 49df60f32aca6428706bc895b7e48ab2d68444b5 (diff) | |
Added ability to call functions as a statement.
Diffstat (limited to 'main.py')
| -rw-r--r-- | main.py | 14 |
1 files changed, 8 insertions, 6 deletions
@@ -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__": |