Polishing
This commit is contained in:
parent
04eaea9975
commit
1c1edbfada
2 changed files with 19 additions and 7 deletions
|
|
@ -448,5 +448,6 @@ class TestParser(unittest.TestCase):
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
buf = '''2+3*fob(12, kwa)-.12'''
|
buf = '''2+3*fob(12, kwa)-.12'''
|
||||||
#p = Parser(buf)
|
print('Parsing:', buf)
|
||||||
#print(p.parse_toplevel().dump())
|
p = Parser(buf)
|
||||||
|
print(p.parse_toplevel().dump())
|
||||||
|
|
|
||||||
|
|
@ -446,6 +446,13 @@ class LLVMCodeGenerator(object):
|
||||||
|
|
||||||
|
|
||||||
class KaleidoscopeEvaluator(object):
|
class KaleidoscopeEvaluator(object):
|
||||||
|
"""Evaluator for Kaleidoscope expressions.
|
||||||
|
|
||||||
|
Once an object is created, calls to evaluate() add new expressions to the
|
||||||
|
module. Definitions (including externs) are only added into the IR - no
|
||||||
|
JIT compilation occurs. When a toplevel expression is evaluated, the whole
|
||||||
|
module is JITed and the result of the expression is returned.
|
||||||
|
"""
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
llvm.initialize()
|
llvm.initialize()
|
||||||
llvm.initialize_native_target()
|
llvm.initialize_native_target()
|
||||||
|
|
@ -456,6 +463,11 @@ class KaleidoscopeEvaluator(object):
|
||||||
self.target = llvm.Target.from_default_triple()
|
self.target = llvm.Target.from_default_triple()
|
||||||
|
|
||||||
def evaluate(self, codestr, optimize=True, llvmdump=False):
|
def evaluate(self, codestr, optimize=True, llvmdump=False):
|
||||||
|
"""Evaluate code in codestr.
|
||||||
|
|
||||||
|
Returns None for definitions and externs, and the evaluated expression
|
||||||
|
value for toplevel expressions.
|
||||||
|
"""
|
||||||
# Parse the given code and generate code from it
|
# Parse the given code and generate code from it
|
||||||
ast = Parser(codestr).parse_toplevel()
|
ast = Parser(codestr).parse_toplevel()
|
||||||
self.codegen.generate_code(ast)
|
self.codegen.generate_code(ast)
|
||||||
|
|
@ -529,8 +541,7 @@ class TestEvaluator(unittest.TestCase):
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
kalei = KaleidoscopeEvaluator()
|
kalei = KaleidoscopeEvaluator()
|
||||||
#print(kalei.evaluate('def adder(a b) a + b'))
|
print(kalei.evaluate('def adder(a b) a + b'))
|
||||||
#print(kalei.evaluate('def foo(x) (1+2+x)*(x+(1+2))'))
|
print(kalei.evaluate('def foo(x) (1+2+x)*(x+(1+2))'))
|
||||||
#kalei.evaluate('extern cos(x)')
|
print(kalei.evaluate('foo(3)', optimize=True, llvmdump=True))
|
||||||
print(kalei.evaluate('3', optimize=True, llvmdump=True))
|
print(kalei.evaluate('foo(adder(3, 3)*4)', optimize=True, llvmdump=True))
|
||||||
print(kalei.evaluate('3+3*4', optimize=True, llvmdump=True))
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue