Want to make creations as awesome as this one?

Transcript

ANALIZADOR LEXICO Y SINTACTICO

'5090-20-768 KIMBERLY NOEMI GONZALEZ 5090-20-1833 HEYTAN GIOVANNI LIMA

Esto es un párrafo listo para contener creatividad, experiencias e historias geniales.

Importaciones: import java.util.*: Importa todas las clases del paquete java.util, que proporciona utilidades para manipular colecciones, fechas, escáneres, entre otros. import java.io.*: Importa todas las clases del paquete java.io, que proporciona utilidades para la entrada y salida de datos. Declaración de la clase Analizador: La clase Analizador tiene como atributos: posicionToken: Entero que representa la posición del token actual durante el análisis léxico y sintáctico. tokens: Lista de cadenas que almacenará los tokens obtenidos del analizador léxico. archivoResultados: Objeto FileWriter para escribir los resultados en un archivo de salida. archivoTabSim: Objeto FileWriter para escribir la tabla de símbolos en un archivo. cantidadTokens: Entero que almacena la cantidad total de tokens encontrados. cantidadErrores: Entero que almacena la cantidad total de errores encontrados. tablaSimbolos: Lista de cadenas que almacenará los identificadores válidos encontrados.

ANALISIS LEXICO Y SINTACTICO

CMétodo main: El punto de entrada del programa. El código dentro del bloque try: Crea un objeto File con el nombre de archivo "entrada.txt". Crea un objeto Scanner para leer el contenido del archivo. Crea objetos FileWriter para los archivos de resultados y tabla de símbolos. Inicializa los contadores cantidadTokens y cantidadErrores. Inicializa la lista tablaSimbolos. Inicializa la lista tokens y llena la lista con los tokens leídos del archivo. Inicia el análisis sintáctico llamando a la función programa(), que devuelve un objeto Nodo que representa el árbol sintáctico. Muestra en la consola la cantidad de tokens y errores encontrados. Escribe la tabla de símbolos en el archivo de tabla de símbolos. Imprime el árbol sintáctico en la consola. Cierra los objetos Scanner y FileWriter. El código dentro del bloque catch maneja las excepciones de tipo IOException.

Métodos auxiliares: esPalabraReservada: Verifica si una palabra es una palabra reservada. Retorna true si la palabra es una palabra reservada, de lo contrario retorna false. esOperador: Verifica si un token es un operador. Retorna true si el token es un operador, de lo contrario retorna false. esIdentificador: Verifica si un token es un identificador válido. Retorna true si el token es un identificador válido, de lo contrario retorna false. siguienteToken: Obtiene el siguiente token de la lista tokens. Incrementa posicionToken para avanzar a la siguiente posición. generarNodo: Crea un nuevo objeto Nodo con el valor especificado y una lista vacía de hijos. imprimirArbol: Imprime el árbol sintáctico en la consola de manera recursiva. Recibe un objeto Nodo y un nivel de indentación.
Método programa: Implementa una de las reglas de la gramática. Retorna un objeto Nodo que representa el programa. El código dentro del bloque try: Escribe "Programa:" en el archivo de resultados. Itera sobre los tokens restantes en la lista tokens. Para cada token: Incrementa cantidadTokens. Verifica el tipo de token utilizando los métodos esPalabraReservada, esOperador y esIdentificador. Escribe el tipo de token en el archivo de resultados. Si el token es un identificador válido, lo agrega a la tabla de símbolos si aún no está presente. Si el token no coincide con ninguno de los tipos anteriores, lo considera un error y aumenta cantidadErrores. El código dentro del bloque catch maneja las excepciones de tipo IOException.
Clase Nodo: Clase interna estática que representa un nodo del árbol sintáctico. Tiene un atributo valor que almacena el valor del nodo y una lista hijos que almacena los nodos hijos.