Skip to content

tej17584/Lexical-Analyzer-Python

Repository files navigation


UkronTadd

Generador Analizador Sintáctico

No license

University Project 🎓

Alejandro Tejada 17584

Diseño Lenguajes de Programación

Universidad del Valle de Guatemala

31/05/2021


Acerca de...

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.

Descripción de herramientas y archivos archivos

Listado de herramientas usadas para el proyecto

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

Liberías NECESARIAS para correr el programa

  • 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
  • Terminal
    • Una terminal o programa para correr los programas de python. Puede ser VS Code también.

Archivos y carpetas

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


Link Youtube

En el video se explica TODO el funcionamiento y más ejemplos.

https://youtu.be/2gR4Itw9E14



Diagrama del proyecto

alt text

Cómo correr el proyecto

  • 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 ejemplo
    1055*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

Creditos y Agradecimientos

Course teacher: Bidkar Pojoy

Licence

Bajo la propia del desarrollador.

About

Proyecto #3 de diseño de lenguajes. el Parser

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages