from lexer import lex from parser import parse from interpreter import interpret import sys 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(filename): with open(filename, "r") as fil: data = fil.read() try: lexed = lex(data) parsed = parse(lexed) ev = interpret(parsed) except Exception as e: print(f"panic! {e}") if __name__ == "__main__": if len(sys.argv) == 1: repl() elif len(sys.argv) >= 2: run_file(sys.argv[1]) else: print("usage: neb []") sys.exit(1)