aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormryouse2022-05-25 01:37:11 +0000
committermryouse2022-05-25 01:37:11 +0000
commitd98e17f6301d6d23ba0a9fe5c640089ffe5f62fd (patch)
tree8af38f958d8ed8ca1940ba2720ba56b44beace49
parent597000e8db6687c7b5f4a88a323a51c5e145421b (diff)
combine repl and file runner
-rw-r--r--neb.py48
-rw-r--r--repl.py39
2 files changed, 45 insertions, 42 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)
diff --git a/repl.py b/repl.py
deleted file mode 100644
index 2846d33..0000000
--- a/repl.py
+++ /dev/null
@@ -1,39 +0,0 @@
-from lexer import lex
-from parser import parse
-from interpreter import interpret
-
-prev_lexed = None
-prev_parsed = None
-
-def main():
- print("### neb :)(:")
- print("version: < 0")
- idx = 1
- prev_idx = 0
- while True:
- inp = input(f"#{idx}> ")
- if len(inp.strip()) == 0:
- continue
- try:
- if inp.strip() == "(debug)":
- 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}")
- 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}")
-
-
-if __name__ == "__main__":
- main()