aboutsummaryrefslogtreecommitdiff
path: root/neb.py
diff options
context:
space:
mode:
Diffstat (limited to 'neb.py')
-rw-r--r--neb.py48
1 files changed, 45 insertions, 3 deletions
diff --git a/neb.py b/neb.py
index ad645a5..08b1670 100644
--- a/neb.py
+++ b/neb.py
@@ -4,7 +4,43 @@ from interpreter import interpret
import sys
-def main():
+def debug(prev_lexed, prev_parsed):
+ if prev_lexed is not None:
+ acc = " ".join([f"{l}" for l in prev_lexed])
+ print(f" - LEX: {acc}")
+ if prev_parsed is not None:
+ acc = " ".join([f"{p}" for p in prev_parsed])
+ print(f" - PARSE: {acc}")
+
+
+def repl():
+ print("### neb :)(:")
+ print("version: < 0")
+ idx = 1
+ prev_idx = 0
+ prev_lexed = None
+ prev_parsed = None
+ while True:
+ inp = input(f"#{idx}> ")
+ if len(inp.strip()) == 0:
+ continue
+ try:
+ if inp.strip() == "(debug)":
+ debug(prev_lexed, prev_parsed)
+ continue
+ lexed = lex(inp)
+ prev_lexed = lexed
+ parsed = parse(lexed)
+ prev_parsed = parsed
+ inter = interpret(parsed)
+ print(f"=> {inter}")
+ prev_idx = idx
+ idx += 1
+ except Exception as e:
+ print(f"panic! {e}")
+
+
+def run_file():
if len(sys.argv) != 2:
print("usage: neb <file>")
@@ -19,7 +55,13 @@ def main():
ev = interpret(parsed)
except Exception as e:
print(f"panic! {e}")
-
+
if __name__ == "__main__":
- main()
+ if len(sys.argv) == 1:
+ repl()
+ elif len(sys.argv) == 2:
+ run_file(sys.argv[1])
+ else:
+ print("usage: neb [<file>]")
+ sys.exit(1)