/
lexer.py
69 lines (52 loc) · 1.57 KB
/
lexer.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
################################################################################
# Autores: Fernando Rosendo e Marcel Souza
# Arquivo: "lexer.py"
################################################################################
#Vamos definir nossos tokens neste arquivo
from rply import LexerGenerator
class Lexer():
def __init__(self):
self.lexer = LexerGenerator()
def _add_tokens(self):
#Select
self.lexer.add('SELECT',r'select')
#From
self.lexer.add('FROM',r'from')
#Where
self.lexer.add('WHERE',r'where')
#Separador
self.lexer.add('SEP',r',')
#Boxplot
self.lexer.add('BOXPLOT',r'boxplot')
#Strings alfanumericas
self.lexer.add('STR',r'\w+')
#
# #Col_select
# self.lexer.add('COL_SEL',r'\w+')
#
# #data_from
# self.lexer.add('DAT_FR',r'\w+')
#
# #Col_xbox
# self.lexer.add('COL_XBOX',r'\w+')
#
# #Col_ybox
# self.lexer.add('COL_YBOX',r'\w+')
#Maior
self.lexer.add('GRT',r'>')
#Menor
self.lexer.add('LSS', r'<')
#Igual
self.lexer.add('EQ', r'=')
#Numero
self.lexer.add('NUM',r'\d')
#Ignorar espaços em branco
self.lexer.ignore(r'\s+')
#Ignorar comentários
#de uma linha (#)
self.lexer.ignore('#(.)*\n')
#de multiplas linhas (/* */)
self.lexer.ignore('/\*(?s).*\*/')
def get_lexer(self):
self._add_tokens()
return self.lexer.build()