-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathinterpreter.py
123 lines (78 loc) · 1.85 KB
/
interpreter.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
from calc import *
class Interpreter:
__variables = {}
def __init__(self, calc):
self.calc = calc
def run(self):
source = open("source.bas", "r").read()
self.__tokenize_Program__(source)
def __tokenize_Program__(self, source):
code = list(source)
self.__tokenize_Line__(code)
def __tokenize_Line__(self, code):
if (code[0] != "\n"):
self.__tokenize_Symbol__(code)
try:
while (code[0] == "\n"):
del code[0]
self.__tokenize_Symbol__(code)
except (IndexError):
pass
def __tokenize_Statement__(self, code):
tokLen = len(code)
token = ""
i = 0
while (code[0].isupper() == True):
token += code[0]
del code[0]
i += 1
if (token == "PRINT"):
del code[0]
self.__parse_Print__(code)
elif (token == "LET"):
del code[0]
self.__parse_Let__(code)
return 1
def __tokenize_Symbol__(self, code):
if (code[0] == " "):
del code[0]
elif (code[0].isupper):
self.__tokenize_Statement__(code)
def __parse_String__(self, code):
string = ""
i = 0
while (code[0] != '\"'):
string += code[0]
del code[0]
i += 1
return string;
def __parse_Print__(self, code):
if (code[0] == "\""):
del code[0]
print self.__parse_String__(code)
del code[0]
elif (code[0].isdigit()):
num = self.calc.parse_Formula(code)
print num
def __parse_Let__(self, code):
varName = ""
varVal = ""
while (code[0] != "="):
varName += code[0]
del code[0]
if (code[0] == "="):
del code[0]
try:
while (code[0] != "\n"):
if (code[0].isdigit()):
varVal += code[0]
del code[0]
except (IndexError):
self.__variables[varName] = int(varVal)
print self.__variables
return
self.__variables[varName] = int(varVal)
print self.__variables
calc = Calc()
interpreter = Interpreter(calc)
interpreter.run()