University Project 🎓
Alejandro Tejada 17584
Diseño Lenguajes de Programación
Universidad del Valle de Guatemala
31/05/2021
Este proyecto continúa el proyecto #1 y el proyecto #2. Usa los algoritmos de autómatas para generar un analizador léxico. El propósito es leer archivos de gramática, generar un scanner y simular la lectura de un archivo de prueba. Luego, a partir de los tokens que el scanner lea, construir un parser que tome esos tokens y luego se comporte como un analizador sintáctico. Algunos puntos que se tocan en este proyecto:
- Lectura de archivo de gramática ATG
- Generación de Autómata finito determinista en base a los tokens del archivo de gramática
- Simulacion y creación de un Scanner que detecte tokens basado en un archivo de pruebas
- Creación de un Parser que lea producciones en la gramática del ATG y las convierta a un árbol, que a su vez escribe las funciones necesarias.
- Python 3.8.0 64bits
- Compiladores principios, técnicas y herramientas, 2da Edición - Alfred V. Aho
- VS Code
- Windows Terminal
- A lot of Coffe (more Coffe than last time) (enought coffe for a life V3)
- Python 3.8.0
- Una versión de Python de la versión Python 3.6.0 64bits o mayor
- Graphviz
- Graphviz es una librería que permite graficar los nodos. Instalarla si no se posee. Descargar la version necesaria en el link de descarga
- Pprint
- Una librería de python para imprimir bonito. Si no se tiene instalar en https://pypi.org/project/pprintpp/
- Terminal
- Una terminal o programa para correr los programas de python. Puede ser VS Code también.
No. | Archivo | Propósito/Descripción |
---|---|---|
1 | ATGFilesExamples |
Es donde estan los archivos ATG que poseen la gramática |
2 | Proyecto_#3.pdf |
La iniciativa del proyecto |
3 | AFNDirecto.py |
Contiene el código para el algoritmo de conversión directa |
4 | documentacionExterna |
Contiene la documentación externa de Cocol |
5 | rubrica_proyecto_3.pdf |
Rúbrica del proyecto 3 |
6 | funciones.py |
Son funciones generales para TODOS los algoritmos |
7 | main.py |
El programa principal, este genera el scanner |
8 | NodoDirecto.py |
Es la clase Nodo del algoritmo del conversión directa |
9 | PostfixEvaluador.py |
Toma la expresión regular y hace el postfix, también opera el valor de los characters |
10 | postFixTokens.py |
Ordena de forma de postfix el resultado de la expresión regular de la lectura de tokens |
11 | reader.py |
Es el programa que lee el ATG, el archivo de gramática, y luego genera las expresiones regulares |
12 | tipoVar.py |
Una clase que posee los atributos de cada tipo de token |
13 | tipoVarParser.py |
Una clase que posee los atributos para hacer objetos de cada valor de produccion |
14 | scannerToken.py |
Una clase que guarda en objetos cada token que el Scanner lee |
15 | arrayTokensLeidos |
Es el diccionario que contiene TODOS los tokens leidos |
16 | scannerProyecto2Tejada.py |
Es el Scanner generado |
17 | postfixtokensScanner.py |
Un postfix que funciona como representacion del arbol, toma los objetos de la produccion y lo pasa a postfix |
18 | parserAlejandroTejada.py |
Es EL PARSER YEII! |
19 | diccionarioEstadosAceptacion |
Es el diccionario con los estados de aceptación |
20 | diccionarioSiguientePos |
Es el diccionario de la siguiente posición |
21 | dicionarioAFDFinal |
Es el AFD final |
22 | pruebas.txt |
Es el file de pruebas |
23 | Readme.md |
El readme |
- Primero se debe editar en el file de
pruebas.txt
la operacion que se desea colocar. Este proyecto hace uso del EXPR.ATG, que en esencia tiene CUATRO operaciones basicas. Entonces, en el archivo de pruebas se coloca la operacion. Por ejemplo1055*5;
- Luego, una vez hecho esto, se deben SCANNEAR los tokens. Se debe correr primero el programa
main.py
y ejecutarlo en una consola. - Luego debes de seleccionar una opciónn del menú
Selecciona una opción
1 - Iniciar lectura y creacion de scanner
9 - salir
Ingresa un valor...
- El único metodo posible es el de generar el scanner haciendo la lectura de la gramática
Selecciona una opción
1 - Iniciar lectura y creacion de scanner
9 - salir
Ingresa un valor... 1
Presione cualquier tecla
- La salida será la generacion de tres files: los dump de pickle que son los autómatas. Adicional, se generá el scanner llamado scannerProyecto2Tejada.py
- Luego, ir al scanner generado
scannerProyecto2Tejada.py
y correrlo. La salida sera un dump de los tokens hecho con pickle
------------------SIMULACION TOKENS INICIADA-------------------
'El token del valor ----> holo <---- es: ident'
TOKEN INVALIDO del valor:
'El token del valor ----> 66 <---- es: number'
TOKEN INVALIDO del valor:
'El token del valor ----> +150 <---- es: signnumber'
'El token del valor ----> \n <---- es: whitetoken'
'El token del valor ----> 55 <--- es: number'
---------------------------------------------------------------
- Una vez generado el Scanner y los tokens, es momento de usar el Parser. Para esto, vamos al programa
reader.py
y lo corremos. Esto generará el programa parserAlejandroTejada.py. - Corremos el parser y este tomara los tokens leidos y ejecutará la operación. En este caso que usamos la operacion 1055*5; el resultado será:
El Resultado de la operacion es: 5275
Course teacher: Bidkar Pojoy
- https://graphviz.org/about/
- https://graphviz.org/documentation/
- https://www.tutorialspoint.com/c_standard_library/time_h.htm
- https://docs.python.org/3/library/time.html
- Compiladores principios, técnicas y herramientas, 2da Edición - Alfred V. Aho
- Compañeros de clase
- More Coffe
Bajo la propia del desarrollador.