Está en la página 1de 4

from ast import keyword

from operator import truediv


from cProfile import label
from tkinter import scrolledtext as st
from tkinter import filedialog as fd
from tkinter import messagebox as mb
import tkinter as tk
from tokenize import Token
import ply.lex as lex
import re
import codecs
import os
import sys

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()

También podría gustarte