From 50f932837a763878b58d77703b274ff242ea38f8 Mon Sep 17 00:00:00 2001 From: mryouse Date: Sat, 21 May 2022 03:10:12 +0000 Subject: implement pipe --- interpreter.py | 13 +++++++++++++ lexer.py | 2 ++ 2 files changed, 15 insertions(+) diff --git a/interpreter.py b/interpreter.py index 6a88c57..ee7069c 100644 --- a/interpreter.py +++ b/interpreter.py @@ -278,6 +278,19 @@ def interpretForCount(expr, env): GLOBALS.register("for-count", Builtin(interpretForCount)) +def interpretPipe(expr, env): + if len(expr.args) < 2: + raise Exception("'|' takes at least two expressions") + new_env = Environment(env) + pipe = None + for arg in expr.args: + if pipe is not None: + new_env.register("items", pipe) + pipe = Expr.Literal(evaluate(arg, new_env)) + return pipe + +GLOBALS.register("|", Builtin(interpretPipe)) + def interpretEnv(expr, env_expr, env): ev = evaluate(env_expr, env) return ev # TODO more than this? diff --git a/lexer.py b/lexer.py index e98972f..aa2d107 100644 --- a/lexer.py +++ b/lexer.py @@ -46,6 +46,7 @@ class TokenType(Enum): # flow IF = auto() FOR_COUNT = auto() + PIPE = auto() # keywords DEF = auto() @@ -70,6 +71,7 @@ keywords = { "or": TokenType.OR, "if": TokenType.IF, "for-count": TokenType.FOR_COUNT, + "|": TokenType.PIPE, "def": TokenType.DEF, "lambda": TokenType.LAMBDA } -- cgit v1.2.3