Reporte Final Analizador C+
Reporte Final Analizador C+
Reporte Final Analizador C+
ANALIZADOR C++
Lenguajes y Autómatas 2
Este presente documento muestra de manera práctica como teórica la realización de el Analizador
que se desarrollo en el lenguaje de programación C++.
GRAMÁTICA
La gramática para utilizar será tipo 2 basándonos en la jerarquía de Chomsky debido a que en
dicha jerarquía encontramos que la gramática libre de contexto sigue la siguiente estructura:
x --> y
X ϵ NT
Y ϵ (NT|T)*
Donde x puede ser reemplazado por y si x pertenece a los símbolos NO TERMINALES además de
que y es un TERMINAL o NO TERMINAL incluyendo a su vez la cadena vacía.
ALFABETO
∑= [{a, b, c, d, e, f, g, h, i, j, k, l, m, n, ñ, o, p, q, r, s, t, u, v, w, x, y, z},
{A, B, C, D, E, F, G, H, I, J, K, L, M, N, Ñ, O, P, Q, R, S, T, U, V, W, X, Y, Z},
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9},
pág. 1
REPORTE FINAL ANALIZADOR C++
pág. 2
REPORTE FINAL ANALIZADOR C++
Después la realización de los autómatas como también con su respectiva tabla de tokens.
pág. 3
REPORTE FINAL ANALIZADOR C++
Luego declarar los arreglos donde se almacenarán las cadenas para su posterior uso
Como también las variables auxiliarles que usare para identificar los espacios y las que usare para
tener el control en las posiciones
pág. 4
REPORTE FINAL ANALIZADOR C++
Declaro cadena donde C almacenara carcter por carácter en la lectura del archivo.
Y con la declaracion de los index para las palabras y los arreglos de caracteres
Aquí seleccionamos con luna ruta absoluta en donde está el archivo con la r que define que solo
será lectura.
Aquí como el código lo demuestra comienzo mi procesos con un do while cual utilizo C que donde
se almaceno el contenido de mi archivo carácter por carácter. Cual en la primera parte de mi ciclo
solo verifica si hay comentarios y el manejo de los Enter como espacio y el uso de mis auxiliares.
pág. 5
REPORTE FINAL ANALIZADOR C++
Cual en caso contrario cuando se lee los dos identificadores de comentarios se agrega el mismo al
arreglo de comentarios para su impresión y esto es lo que arroja.
Después de verificar los comentarios, se verifica En todo este bloque si los caracteres en nuestro
archivo fuente son validos con el de nuestro lenguaje y el if es solo para determinar el token.
pág. 6
REPORTE FINAL ANALIZADOR C++
Posteriormente de verificar lo anterior, se verificará si hay una cadena cual significa que es una
cadena cual se tendrá que validar.
En este bloque hacemos uso de la una función que tiene nombre de reservadas cual la función
solo nos arroja un booleano. Cual si es True es reservada y si es Fase no lo es.
Por ende, si la función nos arroja un false se verificará si es una variable cual si no es una variable
se verificará si es un número.
ya en la parte de Puts esto solo es para imprimir arreglo de tokens y a la para el arreglo con el
carácter o palabra para que coincida el token con el correspondiente carácter.
pág. 7
REPORTE FINAL ANALIZADOR C++
Funciones
En esta declaración que se encuentra en la parte superior del main solo es para utilizar Las
funciones programadas para cada caso.
La función reservada, consta de comparar si lo que se recibe es una palabra reservada, sí coincide
regresa un True guarda el token en la posición donde encontró la palabra reservada en el arreglo
de Tokens.
pág. 8
REPORTE FINAL ANALIZADOR C++
La primera fase verifica si comieza con punto. Si es el caso entonces regresa un false por que
nuestro lenguaje lo tenemos definido Numero . Numero como se describe en el codigo
Casos de estudio
pág. 9
REPORTE FINAL ANALIZADOR C++
Semantico.
Un ejemplo de ello sería el siguiente segmento de código donde hace falta un ‘)’ paréntesis que
cierra la instrucción
if ( cont<10 {
suma=13+cont;
Que se explica en el siguiente bloque de código. Que es para el caso de paréntesis de apertura ( y
el de cierre ) .
Los errores Sintácticos los manejamos con el uso de un switch y casteando todos los posibles
errores como se muestra a continuación siendo el case 0 y case 2
pág. 10
REPORTE FINAL ANALIZADOR C++
Como también la verificación de código después de Fin. Cual se maneja con un for como se
demuestra con el código siguiente.
También la verificación de los For anidados cual lo implemento en complemento con el código de
arriba dentro del mismo bloque de la sentencia If declarada, como se muestra a continuación.
pág. 11
REPORTE FINAL ANALIZADOR C++
Para el caso de estudio se tiene la falta de un FinFor como se muestra en el código fuente.
pág. 12
REPORTE FINAL ANALIZADOR C++
Semántico
Lo que se realiza para obtener los datos de la consola DevC es guardar los resultados en un archivo
para posterior lectura en java.
pág. 13
REPORTE FINAL ANALIZADOR C++
Y a los botones consecuentes es la misma acción de lectura de archivos en cual se encuentran los
resultados que nos esta arrojando la consola de dev c++
Para los demás botones como por ejemplo en el Botón se ejecuta el exe
que nos arroja dev c++ como se muestra a continuación.
De esta manera los mismo para cada botón de la fase del compilador.
Los botones actualizar y limpiar no tienen complejidad alguna por eso no lo muestro aquí.
pág. 14