import argparse from parse import parse from evaluate import evaluate_ast parser = argparse.ArgumentParser(description='lisp interpreter') parser.add_argument('file') args = parser.parse_args() f = open(args.file) inp = f.read() f.close() ast = parse(inp, 0, len(inp)) for element in ast: x = evaluate_ast(element)
test_case = """ (define fact ;; Factorial Function (lamda (n) (if (eq n 0) 1 ; Factorial (* n (fact (- n 1)))))) """ y = parse(test_case, 0, len(test_case)) #print(y) assert(y == [['define', 'fact', ['lamda', ['n'], ['if', ['eq', 'n', 0], 1, ['*', 'n', ['fact', ['-', 'n', 1]]]]]]]) test_case = "(+ 1 2 3)" y = parse(test_case, 0, len(test_case)) x = evaluate_ast(['+', 1, 2, 3]) #x = evaluate_ast(y) #print(y) #print(x) assert(x == 6) x = evaluate_ast(['+', 1, 2, ["-", 4, 1]]) assert(x == 6) x = evaluate_ast(['<', 1, 2]) assert(x) x = evaluate_ast(['>', 2, 1]) assert(x) #x = evaluate_ast([1])
import argparse from parse import parse from evaluate import evaluate_ast parser = argparse.ArgumentParser(description="lisp interpreter") parser.add_argument("file") args = parser.parse_args() f = open(args.file) inp = f.read() f.close() ast = parse(inp, 0, len(inp)) for element in ast: x = evaluate_ast(element)