Professional Documents
Culture Documents
TRABAJO 2 – 2010 0
ANALIZADOR LÉXICO
MARCO TEORICO:
El presente trabajo es de carácter individual y considera un afán investigativo y de implementación.
OBJETIVO:
Tiene como objetivo permitir al alumno manejar y aplicar los conceptos básicos, técnicas y complementos
de la teoría de compiladores en su etapa léxica en la solución de problemas aprovechando las
especificaciones desarrolladas teóricamente.
TEMA:
Desarrollar una aplicación que realice el análisis léxico sobre el LP 2010-0 a partir de las siguientes
especificaciones y aplicando todo el conocimiento teórico hasta aquí obtenido.
- Generar los patrones (Expresión regulares, AFNs y algoritmos) para cada componente léxico o
token del LP 2010-0 según esto sea necesario.
- Respetar las estructuras de almacenamiento: TABLA DE SÍMBOLOS y TABLA DE ERRORES en su
composición y tratamiento.
- Esta aplicación debe ser capaz de permitir el ingreso de un programa escrito en el lenguaje de
programación 2010-0 planteado y realizar sobre éste la verificación léxica correspondiente. Además
deberá mantener al usuario debidamente informado de lo que sucede con el programa original.
PRESENTACION:
Se deberá presentar lo siguiente:
- Informe impreso
o Carátula (Datos personales, datos del curso)
o Resumen (Síntesis del contenido del trabajo)
o Marco Teórico Referencial (Alcances teóricos nuevos y útiles sobre el análisis léxico
distintos a los vistos en aula)
o Patrones obtenidos (Expresión regular, AFN y algoritmo)
o Diagrama de transiciones
o Detallar Tablas y/o estructuras o BD utilizadas adicionales a las exigidas
o Pantallas propias de la Aplicación (Todas)
o Pseudocódigo y/o diagrama de flujo de la aplicación ( De ser pseudocódigo será este
depurado )
o Conclusiones y recomendaciones
o Bibliografía ( Todo material empleado debe constar en este punto )
- CD conteniendo la aplicación
- Informe y aplicación en digital al email del docente.
FECHA:
El presente trabajo se presentará el día sábado 06 de marzo de 2010, a las 9:30 am en los ambientes del
Laboratorio B (404).
luis_iquira@hotmail.com
Recuerde siempre que todos somos mejores personas cuando nos superamos y una excelente forma de
superarse es el estudio y la investigación. ¡ A superarse !
2. Estructura ERRORES
ERRORES
CodE DescE PosE
Cada vez que se encuentra un error se debe almacenar en ésta estructura sin interrumpir el proceso
de compilación.
Adicionalmente a las dos estructuras antes detalladas, existe una tercera tabla que a diferencia de las
anteriores NO sufre modificación alguna, pero que si se utiliza para desarrollar el proceso de scaneo léxico
sobre un programa fuente, seguidamente se detalla ésta tercera tabla.
La palabra reservada Ira sirve para el manejo de etiquetas dentro de un programa fuente. Es
decir siempre debe seguirle un identificador o variable. Ejemplo: Ira x.
La palabra reservada Retornar se usa para devolver valores, así tenemos que puede devolver
identificadores o variables y constantes numéricas. Ejemplo: Retornar(x), Retornar(-1).
La palabra reservada Limpiar se usa para limpiar la pantalla y va asociada siempre a ().
Ejemplo: Limpiar().
La palabra reservada Pausa al igual que la anterior siempre se asocia a () y sirve para hacer
una pausa en la pantalla. Ejemplo: Pausa().
La palabra reservada Abs se asocia también a () y debe contener siempre una constante
numérica o un identificador. Ejemplo: Abs(x), Abs(-25).
La palabra reservada Mod se usa para determinar el residuo de una división, entonces requiere
de dos operandos (identificadores o constantes numéricas). Ejemplo: 2 MOD 3, x MOD y, 3
MOD a, b MOD 2.
La palabra reservada Exp determina el resultado de elevar un valor a otro; se asocia también a
() y debe contener siempre dos constantes numéricas o identificadores separadas por una
coma. Ejemplo: Exp(a,b), Exp(2,3), Exp(a,2), Exp(2,b).
La palabra reservada Sqrt determina la raíz cuadrada de un número; debe estar asociada a ()
conteniendo una constante numérica o un identificador. Ejemplo: Sqrt(4), Sqrt(temp).
Para los operadores ++ y -- solo basta con anteponer una variable o identificador.
El operador && sirve para concatenar cadenas o caracteres. Ejemplo: “esta es ”&&”una cadena”
o también „a‟&&‟e‟&&‟i‟&&‟o‟&&‟u‟.
El signo comparador != significa diferente. Ejemplo: a != b (a diferente de b).
Los relacionadores & y | son equivalentes a la conjunción y disyunción lógicas respectivamente.
Ejemplos: a & b (a y b), a | b (a o b).
El relacionador ! son los que sirven para la negación. Ejemplo: !x (significa NO x).
Las cadenas de caracteres se encierran entre comillas, y las constantes de un solo carácter
se encierran entre comillas simples.
Definición de variables
Inicialización de variables
Procedimiento NOMBRE()
{
Definición de variables
Inicialización de variables
NOMBRE()//puede ser de Procedimientos o Funciones
Impresión / Salida de mensajes y/o variables
Ingreso / Entrada de variables
Operaciones / Cálculos u operaciones con variables
Funciones Propias del Lenguaje
Uso de estructuras de control (decisión y repetitivas)
{
Definición de variables
Ingreso / Entrada de variables
Operaciones / Cálculos con variables
Funciones Propias del Lenguaje
Impresión / salida de mensajes y/o variables
}
Impresión / salida de mensajes y/o variables
}
Funcion NOMBRE()
{
//toda función puede contener las mismas instrucciones que un
//procedimiento
/*las dos líneas anteriores son comentarios de línea y éste es
un comentario de párrafo */
}
Principal()
{
Definición de variables
Inicialización de variables
NOMBRE() //puede ser de Procedimientos o Funciones
Impresión / Salida de mensajes y/o variables
Ingreso / Entrada de variables
Operaciones / Cálculos u operaciones con variables
Funciones Propias del Lenguaje
Uso de estructuras de control (decisión y repetitivas)
{
Definición de variables
Ingreso / Entrada de variables
Operaciones / Cálculos con variables
Funciones Propias del Lenguaje
NOMBRE()//puede ser de Procedimientos o Funciones
Impresión / salida de mensajes y/o variables
}
Impresión / salida de mensajes y/o variables
}
A continuación se muestran algunos ejemplos de cómo utilizar los símbolos pertenecientes al lenguaje
de programación 2010-0 en sus diferentes instrucciones a representar.
Leer(x); Hacer
Leer(nom); {
Mostrar(“Este es un mensaje”); Mostrar(x); z = Exp(x,2);
Mostrar(“Var 1”, x, “Nombre”, nom); }Mientras(x > 10);
Mostrar(x,” “, nom); //También podríamos haber anidado esto
Mostrar(x);
Si(x>=10.5) Entonces
//Abajo se aprecia un procedimiento
Mostrar(“Estas aprobado”);
Sino
Procedimiento suma()
{
{ Limpiar();
Si((x >= 7)&(x < 10.5)) Entonces
Resp = x+y; z = Sqrt(x);
{
Mostrar(“Respuesta es: ”,Resp);
Mostrar(“Estas en subsanación”);
Pausa();
}
}
Sino
{
/* Todas las instrucciones y estructuras
Mostrar(“Estas desaprobado”);
analizadas aquí pueden ser combinadas sin
}
ningún inconveniente y crear así
}
programas con todas ellas indistintamente
*/
PSEUDOCODIGO GENERAL
A continuación se detalla una referencia de pseudocódigo no depurado para la construcción del analizador
léxico, desarrollando algoritmos para cada patrón según el lenguaje de programación 2010-0.
ALexico(STRING *cadena)
{
FLAG = 0
Recorrer toda la cadena y se van reconociendo símbolos
IGNORAR ESPACIOS EN BLANCO, SALTOS DE LINEA Y TABULACIONES (Caracteres Especiales)
VERIFICACION DE ERRORES
Si FLAG = 0
Escribe “Análisis Léxico Correcto” y Mostrar contenido de la tabla de símbolos
Sino
Escribe “Error léxico” y Vaciar datos de la tabla de errores
Finsi
}
Cabe precisar que como se indico previamente, que el algoritmo de cada patrón puede incluirse dentro de
una estructura de selección múltiple o su equivalente en simples y dobles para determinar el camino
correcto a seguir cuando se esté analizando un carácter del programa fuente.
Para cualquier consulta y/o el envío de archivos al correo:
luis_iquira@hotmail.com
Recuerde siempre que todos somos mejores personas cuando nos superamos y una excelente forma de
superarse es el estudio y la investigación. ¡ A superarse !