-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathInterpreter.py
More file actions
69 lines (63 loc) · 2.65 KB
/
Interpreter.py
File metadata and controls
69 lines (63 loc) · 2.65 KB
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
from DatabaseManager import DatabaseManager
class Interpreter:
def __init__(self):
self._dbm = DatabaseManager()
def interpret(self, line):
expressions = [expression for expression in line.split(';') if expression]
for expression in expressions:
tokens = self._tokenize(expression)
self._evaluate(tokens)
def _tokenize(self, expression):
return expression.replace('(', ' ( ').replace(')', ' ) ').replace('*', ' * ').replace(',', ' , ').split()
def _evaluate(self, tokens):
if (tokens[0].upper() == 'USE'):
self._dbm.select_database(tokens[1])
elif (tokens[0].upper() == 'CREATE'):
if (tokens[1].upper() == 'DATABASE'):
self._dbm.create_database(tokens[2])
elif (tokens[1].upper() == 'TABLE'):
self._dbm.create_table(tokens[2])
else:
self._syntax_error()
elif (tokens[0].upper() == 'DROP'):
if (tokens[1].upper() == 'DATABASE'):
self._dbm.drop_database(tokens[2])
elif (tokens[1].upper() == 'TABLE'):
self._dbm.drop_table(tokens[2])
else:
self._syntax_error()
elif (tokens[0].upper() == 'RENAME'):
if (tokens[1].upper() == 'DATABASE'):
self._dbm.rename_database(tokens[2], tokens[3])
elif (tokens[1].upper() == 'TABLE'):
self._dbm.rename_table(tokens[2],tokens[3])
else:
self._syntax_error()
elif (tokens[0].upper() == 'LIST'):
if (tokens[1].upper() == 'TABLES'):
self._dbm.list_tables()
else:
self._syntax_error()
elif (tokens[0].upper() == 'CLOSE'):
if (tokens[1].upper() == 'DATABASE'):
self._dbm.close_database()
else:
self._syntax_error()
elif (tokens[0].upper() == 'SELECT'):
if (tokens[1] == '*'):
print(self._dbm.select_all(tokens[3]))
else:
self._dbm.select_by_key(tokens[1], tokens[3])
elif (tokens[0].upper() == 'INSERT'):
self._dbm.insert(tokens[2], tokens[4], tokens[7])
elif (tokens[0].upper() == 'UPDATE'):
self._dbm.update_by_key(tokens[1], tokens[3], tokens[5])
elif (tokens[0].upper() == 'REMOVE'):
if (tokens[1] == '*'):
self._dbm.remove_all(tokens[3])
else:
self._dbm.remove_by_key(tokens[1], tokens[3])
else:
self._syntax_error()
def _syntax_error(self):
print("Error: Incorrect Syntax")