Skip to content

Commit 1132d44

Browse files
committed
Showing lexer results in GUI
1 parent 4f50e09 commit 1132d44

File tree

3 files changed

+94
-28
lines changed

3 files changed

+94
-28
lines changed

src/lexer.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,16 @@ def menu():
295295
'''
296296

297297

298+
def run_lexer(data):
299+
l_token = []
300+
lexer.input(data)
301+
while True:
302+
tok = lexer.token()
303+
if not tok:
304+
break
305+
l_token.append(tok)
306+
return l_token
307+
298308
def opciones(opc):
299309
if(opc == 1):
300310
data = '''

src/main.py

Lines changed: 63 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
from PyQt5.QtWidgets import *
22
from PyQt5.QtCore import *
33
from PyQt5.QtGui import *
4+
from lexer import *
5+
from sintactico import *
46

57

68
class RustEditor(QPlainTextEdit):
@@ -141,41 +143,84 @@ def __init__(self):
141143

142144

143145
class LabelExecution(QWidget):
146+
vb = QVBoxLayout()
147+
hb_layout = QHBoxLayout()
148+
label_text = None
149+
plain_text = None
144150
def __init__(self):
145151
super(LabelExecution, self).__init__()
146-
layout = QHBoxLayout()
147-
label_text = QLabel()
148-
label_text.setText("<h4>Execution</h4>")
149-
label_text.setStyleSheet("color: #2D2D2D;")
150-
label_code = QLabel()
152+
self.label_text = QLabel()
153+
self.label_text.setText("<h4>Execution</h4>")
154+
self.label_text.setStyleSheet("color: #2D2D2D;")
155+
self.label_code = QLabel()
151156
pixmap_code = QPixmap("./images/GUI/rs-exec.png")
152157
pixmap_code = pixmap_code.scaled(50, 100, Qt.KeepAspectRatio)
153-
label_code.setPixmap(pixmap_code)
158+
self.label_code.setPixmap(pixmap_code)
154159

155-
layout.addWidget(label_code)
156-
layout.addWidget(label_text)
157-
layout.addStretch(1)
158-
self.setLayout(layout)
160+
self.plain_text = QPlainTextEdit()
161+
self.plain_text.setReadOnly(True)
162+
self.plain_text.setStyleSheet("background-color: #E5E8ED;")
163+
164+
self.hb_layout.addWidget(self.label_code)
165+
self.hb_layout.addWidget(self.label_text)
166+
self.hb_layout.addStretch(1)
167+
168+
self.vb.addLayout(self.hb_layout)
169+
self.vb.addWidget(self.plain_text)
170+
self.setLayout(self.vb)
159171

160172

161173
class Buttons(QWidget):
162-
def __init__(self):
174+
def __init__(self, editor, execution_label):
163175
super(Buttons, self).__init__()
164176
layout = QVBoxLayout()
165-
button_run = QPushButton("Run")
166-
button_run.setIcon(QIcon("./images/GUI/play.png"))
167-
button_run.setFixedSize(100, 50)
168-
button_run.setCursor(QCursor(Qt.PointingHandCursor))
177+
button_lexer = QPushButton("Run Lexer")
178+
button_lexer.setIcon(QIcon("./images/GUI/play.png"))
179+
button_lexer.setFixedSize(100, 40)
180+
button_lexer.setCursor(QCursor(Qt.PointingHandCursor))
181+
button_lexer.clicked.connect(lambda: self.onClickedLexer(editor, execution_label))
182+
183+
layout = QVBoxLayout()
184+
button_parser = QPushButton("Run Parser")
185+
button_parser.setIcon(QIcon("./images/GUI/play.png"))
186+
button_parser.setFixedSize(100, 40)
187+
button_parser.setCursor(QCursor(Qt.PointingHandCursor))
188+
button_parser.clicked.connect(lambda: self.onClickedParser(editor, execution_label))
169189

170190
button_open = QPushButton("Open File")
171191
button_open.setIcon(QIcon("./images/GUI/open.png"))
172-
button_open.setFixedSize(100, 50)
192+
button_open.setFixedSize(100, 40)
173193
button_open.setCursor(QCursor(Qt.PointingHandCursor))
174194

175-
layout.addWidget(button_run)
195+
layout.addWidget(button_lexer)
196+
layout.addWidget(button_parser)
176197
layout.addWidget(button_open)
177198
self.setLayout(layout)
178199

200+
def onClickedLexer(self,editor,execution_label):
201+
print("Clicked")
202+
print(editor.toPlainText())
203+
tp = execution_label.plain_text
204+
tp.insertPlainText("")
205+
l_token = run_lexer(editor.toPlainText())
206+
for tok in l_token:
207+
tp.insertPlainText("{:5} : {:5}".format(tok.value,tok.type))
208+
tp.insertPlainText("\n")
209+
tp.insertPlainText("\n")
210+
tp.insertPlainText("\n")
211+
212+
def onClickedParser(self,editor,execution_label):
213+
tp = execution_label.plain_text
214+
try:
215+
p_tree = run_parser(editor.toPlainText())
216+
print(f'Este es el ptree: {p_tree}')
217+
tp.insertPlainText(str(p_tree))
218+
tp.insertPlainText("\n")
219+
except Exception as e:
220+
tp.insertPlainText(str(e))
221+
tp.insertPlainText("\n")
222+
tp.insertPlainText("\n")
223+
179224

180225
class SyntaxHighlighter(QSyntaxHighlighter):
181226
def __init__(self, parent):
@@ -231,7 +276,7 @@ def UIComponents(self):
231276
editor = RustEditor(DISPLAY_LINE_NUMBERS=True,
232277
HIGHLIGHT_CURRENT_LINE=True)
233278

234-
buttons = Buttons()
279+
buttons = Buttons(editor,label_exec)
235280

236281
splitter = QFrame()
237282
splitter.setObjectName("splitter")

src/parser.py renamed to src/sintactico.py

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -461,7 +461,6 @@ def p_expresion_sintipo(p):
461461

462462

463463
# all
464-
parser = yacc.yacc(start='rust')
465464

466465
code = '''
467466
fn main() {
@@ -492,12 +491,24 @@ def p_expresion_sintipo(p):
492491

493492
#yacc.parse(code)
494493

495-
while True:
496-
try:
497-
s = input('code > ')
498-
except EOFError:
499-
break
500-
if not s:
501-
continue
502-
result = parser.parse(s)
503-
print(result)
494+
495+
#parser = yacc.yacc(start='rust')
496+
497+
# while True:
498+
# try:
499+
# s = input('code > ')
500+
# except EOFError:
501+
# break
502+
# if not s:
503+
# continue
504+
# result = parser.parse(s)
505+
# print(result)
506+
507+
def p_error(p):
508+
raise SyntaxError
509+
510+
def run_parser(code):
511+
parser = yacc.yacc(start='rust')
512+
result = parser.parse(code)
513+
514+
return result

0 commit comments

Comments
 (0)