Skip to content

Commit a61e12e

Browse files
authored
Create interpreter.py
1 parent a57ae7c commit a61e12e

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

interpreter.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
from nodes import *
2+
from values import Number
3+
4+
class Interpreter:
5+
def visit(self, node):
6+
method_name = f'visit_{type(node).__name__}'
7+
method = getattr(self, method_name)
8+
return method(node)
9+
10+
def visit_NumberNode(self, node):
11+
return Number(node.value)
12+
13+
def visit_AddNode(self, node):
14+
return Number(self.visit(node.node_a).value + self.visit(node.node_b).value)
15+
16+
def visit_MinusNode(self, node):
17+
return Number(self.visit(node.node_a).value - self.visit(node.node_b).value)
18+
19+
def visit_MultiplyNode(self, node):
20+
return Number(self.visit(node.node_a).value * self.visit(node.node_b).value)
21+
22+
def visit_DivideNode(self, node):
23+
try:
24+
return Number(self.visit(node.node_a).value / self.visit(node.node_b).value)
25+
except:
26+
raise Exception("Runtime math error")

0 commit comments

Comments
 (0)