-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathparser.py
More file actions
35 lines (30 loc) · 1.04 KB
/
Copy pathparser.py
File metadata and controls
35 lines (30 loc) · 1.04 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
from dataclasses import dataclass
@dataclass
class Select:
columns: list
table: str
where: tuple = None
order_by: str = None
limit: int = None
class Parser:
def __init__(self, tokens):
self.tokens = tokens
self.pos = 0
def expect(self, type, value=None):
token = self.tokens[self.pos]
if token.type!= type or (value and token.value!= value):
raise SyntaxError(f"Beklenen {type} ama {token.value} bulundu")
self.pos += 1
return token
def parse_select(self):
self.expect('KEYWORD', 'SELECT')
columns = ['*'] if self.tokens[self.pos].type == 'STAR' else []
if columns == []:
while self.tokens[self.pos].type == 'IDENT':
columns.append(self.tokens[self.pos].value)
self.pos += 1
if self.tokens[self.pos].type == 'COMMA': self.pos += 1
else: self.pos += 1
self.expect('KEYWORD', 'FROM')
table = self.expect('IDENT').value
return Select(columns, table)