Beispiel #1
0
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)


Beispiel #2
0
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])
Beispiel #3
0
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)