Documentos de Académico
Documentos de Profesional
Documentos de Cultura
reservadas =
['BEGIN','END','IF','THEN','WHILE','DO','CALL','CONST','VAR','PROCEDURE','OU
T','IN','ELSE']
tokens =
reservadas+['ID','NUMERO','SUMA','MENOS','MULTIPLICACION','DIVIDIR','ODD','I
GUAL','NE',
'LT','LTE','GT','GTE','LPARENT','RPARENT','COMA','SEMMICOLOM','DOT
','UPDATE']
t_ignore = '\t'
t_SUMA = r'\+'
t_MENOS = r'\-'
t_MULTIPLICACION = r'\*'
t_DIVIDIR = r'/'
t_ODD = r'ODD'
t_IGUAL = r'='
t_NE = r'<>'
t_LT = r'<'
t_LTE = r'<='
t_GT = r'>'
t_GTE = r'>='
t_LPARENT = r'\('
t_RPARENT = r'\)'
t_COMA = r','
t_SEMMICOLOM = r';'
t_DOT = r'\.'
t_UPDATE = r':='
Lexer = lex.lex()
def t_ID(t):
r'[a-zA-Z_][a-zA-Z0-9_]*'
if t.value.upper() in reservadas:
t.value = t.value.upper()
t.type = t.value
return t
def t_newline(t):
r'\n+'
t.lexer.lineno += len(t.value)
def t_COMMENT(t):
r'\#.*'
pass
def t_NUMERO(t):
r'\d+'
t.value = int(t.value)
return t
def t_error(t):
print ("caracter invalido '%s'" % t.value[0])
t.lexer.skip(1)
class Aplicacion:
def __init__(self):
self.ventana1=tk.Tk()
self.agregar_menu()
self.scrolledtext1=st.ScrolledText(self.ventana1, width=80,
height=20)
self.scrolledtext1.grid(column=0,row=0,padx=10,pady=0)
self.scrolledtext2=st.ScrolledText(self.ventana1, width=80,
height=20)
self.scrolledtext2.grid(column=1,row=0,padx=10,pady=0)
self.scrolledtext3=st.ScrolledText(self.ventana1, width=165,
height=10)
self.scrolledtext3.grid(columnspan=2,row=1,padx=10,pady=10)
self.ventana1.mainloop()
def agregar_menu(self):
menubar1 = tk.Menu(self.ventana1)
self.ventana1.config(menu=menubar1)
opciones1 = tk.Menu(menubar1, tearoff=0)
opciones1.add_command(label="Leer archivo", command=self.recuperar)
opciones1.add_command(label="Compilar", command=self.compilar)
opciones1.add_separator()
opciones1.add_command(label="Salir", command=self.salir)
menubar1.add_cascade(label="Archivo", menu=opciones1)
def salir(self):
sys.exit(0)
def recuperar(self):
nombrearch=fd.askopenfilename(initialdir=
"C:/Users/Sebas/Desktop",title = "Seleccione Archivo",filetypes = (("txt
file",".txt"),("todos los archivos","*.*")))
if nombrearch!='':
archi1=open(nombrearch, "r", encoding="utf-8")
contenido=archi1.read()
archi1.close()
self.scrolledtext1.delete("1.0", tk.END)
self.scrolledtext1.insert("1.0", contenido)
def compilar(self):
nombrearch=fd.askopenfilename(initialdir=
"C:/Users/Sebas/Desktop",title = "Seleccione Archivo",filetypes = (("txt
file",".txt"),("todos los archivos","*.*")))
if nombrearch!='':
archi2=open(nombrearch, "r", encoding="utf-8")
contenido1=archi2.read()
archi2.close()
Lexer.input(contenido1)
while True:
tok=Lexer.token()
if not tok : break
self.scrolledtext2.delete("1.0", tk.END)
self.scrolledtext2.insert("1.0", tok)
aplicacion1=Aplicacion()