1. Reporte de Analizador
Léxico
Lenguajes y Autónomas I
Angel Fuertes Gómez
Rubén Antonio Peña Alarcón
Edgar Hipólito García Méndez
Ing. Sistemas Computacionales
13/05/2013
2. Introducción
En primer lugar, y antes de explicar el diseño de un analizador léxico, comentar
una serie de conceptos:
Un token es cada uno de los elementos de un lenguaje con significado
propio. Son símbolos terminales del analizador sintáctico.
Un patrón es una regla que describe un conjunto de cadenas de entrada
para los cuales se produce como salida el mismo token.
Un lexema es una secuencia de caracteres que concuerda con el patrón de
un token.
Una vez claros estos conceptos, podemos definir un analizador léxico como el
analizador que pasa de un fichero lleno de caracteres a un conjunto de tokens que
ira pasando al analizador sintáctico (uno a uno). Las funciones del analizador
léxico, pues, son:
Manejar el fichero fuente.
Leer símbolo a símbolo, de principio a fin, sin retroceder, el fichero fuente.
Localizar palabras del lenguaje y construir el token.
Eliminar caracteres que no aportan ninguna información (comentarios, etc.)
Rellenar información en la tabla de símbolos
Utilizando, pues, una Gramática Regular (de tipo 3), y transformándola en un
autómata finito determinista, podemos detectar palabras del lenguaje del fichero
fuente.
3. Estructura General del Programa
Identificadores
Los Identificadores del Programa pueden ser letras o letras seguidas de números.
Los Identificadores dentro de este programa sirven para identificar algún valor o
conjunto de valores que serán utilizados después para completar algunas
instrucciones.
Tipos de datos
El analizador léxico reconoce como tipos de datos las siguientes palabras claves
larg, peque, cad, var, ent, flot estos tipos de datos serás especificados a
continuación,
Palabra Clave Admite
larg Admite valores grandes de mínimo 3 dígitos
peque Admite valores pequeños de máximo 5 dígitos
cad Admite cadenas de texto
var Admite caracteres alfanuméricos (1-9, a-z)
ent Admite valores númerios enteros (0-9)
flot Admite valores numéricos de punto flotante (0.00000-
9.9999)
Op. Aritmeticos
El programa reconoce los siguientes Operadores Aritméticos, “+”, “-“, “*”, “/”, “%”
los cuales representan las operaciones básicas a realizar.
Operador Operación
+ Suma
- Resta
* Multiplicación
/ División
% Residuo de una división
= Igualación
4. Op. Relacionales
Los Operadores Relacionales admitidos por el programa son los siguientes: “>”,
“<”, “==”, “!=”, “<=”, “=>”, estos representarán las siguientes relaciones para el
programa:
Operador Relación
< Menor que
> Mayor que
== Igual a
¡= Diferente de
<= Menor o igual
=> Mayor o igual
Sentencias y su estructura
Condiciones:
El programa reconoce la condición “if” para permitir tomar en cuenta si algo ocurre
y para tomar en cuenta que eso no haya ocurrido se utilizará un “then” como
condición para expresar que hacer si ocurre lo contrario. Las instrucciones
afectadas por estos condicionales se escribirían dentro de delimitadores “{“, “}”
Esta condición se estructuraría parecido a la siguiente
If(condición){
Instrucciones;
}
then{
Instruicciones;
}
5. Ciclos:
El programa reconoce los ciclos “whail” y “do” los cuales sirven para realizar
acciones durante un respectivo momento hasta que una condición inicial se
cumpla.
La manera en la que se deben estructurar debe ser parecida a la siguiente:
En el caso del whail:
Whail(condición){
Instrucciones;
}
En el caso del do:
do{
Intrucciones;
}(Condición);
Comentario
Los comentarios estarán definidos por entre los caracteres “<<” y “>>” y el
analizador no los toma en cuenta a la hora de leerlos, estos comentarios son de
mucha ayuda a la hora de apoyar las ideas en un programa, para recordar algo
importante o especificar alguna idea de ayuda.
<<Estructura Ejemplo>>
6. Impresión
Para imprimir utilizaremos la palabra clave “impri” seguida de sus respectivos
delimitadores y el texto que deseamos imprimiremos en pantalla.
Ejemplo:
Impri(Hola mundo);
Ejemplo
Un ejemplo de un código aceptado por el programa sería el siguiente:
{<<Inicio del Programa>>
<<Código Prueba para analizador léxico>>
ent num=95;
cad logro='prueba';
if (num=78){<<Si el numero es igual a 78>>
impri(Numero es igual a 78);
}
else{
num/7=num;
while(num!=0){
num-1;
impri(Ingrese un numero entero);
leer ent dos;
if(num-dos!=0){
num=13;}
then{
num=0;
}
}}
}<<Fin del Programa>>
7. En la siguiente imagen vemos el analizador léxico funcionando y aceptando
el código.
8. Conclusiones
Para empezar se debe entender el proceso de compilación, para que la maquina
entienda el lenguaje a analizar, esto inicia con el léxico.
Los autómatas son para poder entender el proceso del compilador, cuando pasa
por diferentes estados para llegar a su estado final.
En el análisis sintáctico se lleva a cabo el análisis de sintaxis en nuestro lenguaje
de programación desde nuestro programa fuente representándolo en una
gramática en la cual esta lo analiza en nuestras reglas que estipulamos en el
análisis gramatical para llevar a cabo su función para aceptar las instrucciones
ingresados por el archivo fuente, en esta parte también aprendimos como aplicar
las estructuras de datos en la realización y verificamos los lenguajes de
programación no son muy distintos a los lenguajes naturales.