Clase4 Ejemplo Analisis Lexico DevCpp
Clase4 Ejemplo Analisis Lexico DevCpp
Clase4 Ejemplo Analisis Lexico DevCpp
MiniUGB
OBJETIVOS
Estudiar el cdigo fuente de un programa prototipo de anlisis lxico.
Aplicar el anlisis lxico utilizando cdigo en lenguaje C++ creado con Dev C++
PROTOTIPO DE UN ANALIZADOR LEXICO
Suponga que se desea construir una mini simulacin de un compilador, tomando en cuenta
nada ms el anlisis lxico de un programa. El programa fuente ser un cdigo escrito en un
lenguaje definido por el usuario (podemos llamarlo MiniUGB). En este caso el cdigo ha sido
escrito en lenguaje C++ y se debe trabajar con el programa Dev C++ v5.0
Generalmente un compilador toma el programa fuente, lo interpreta y crea un programa objeto
(normalmente en lenguaje mquina). Por ahora nos limitaremos a comprender y analizar una de
las formas, de cmo se llevara a cabo un analizador lxico segn las caractersticas de un
lenguaje.
La definicin de los componentes lxicos del lenguaje MiniUGB es la siguiente:
Identificadores, que slo son nombres de variables y estn compuestos por una nica
letra minscula de rango de a z.
Constantes: numricas utilizando dgitos en el rango 0 9.
Operadores: +, -, *, / y %.
Smbolo: asignacin :=, parntesis (
}.
Palabras reservadas que estn formadas por una letra mayscula, las cuales son: R
(lectura), W (escritura) y M (programa principal).
Pgina 1
Observe que en este lenguaje, todos los tokens son de un slo carcter. Adems se considera
que se tiene un solo tipo de dato: entero, y que las variables estn formadas por una nica letra
minscula, y las constantes son de un dgito. Se asume que para identificar la sintaxis de cada
sentencia, se conoce que reglas de programa se han de seguir, con solo conocer el token por el
que comienza la sentencia.
Programa de ejemplo escrito con cdigo fuente reconocido por el lenguaje MiniUGB.
Conociendo la gramtica del lenguaje definido, realice la descripcin de lo que realiza cada una
de las lneas escritas en el programa.
1. ______________________________________________________________________________
2. ______________________________________________________________________________
3. ______________________________________________________________________________
4. ______________________________________________________________________________
5. ______________________________________________________________________________
6. ______________________________________________________________________________
7. ______________________________________________________________________________
El anlisis lxico debe separar el fichero fuente en componentes lxicos o tokens, y enviarlos al
analizador sintctico (en este gua no se detallara el analizador sintctico).
Habitualmente se envan los componentes lxicos y sus atributos. En este caso solo se
enviaran los tokens, ya que el atributo va implcito en el token (tan slo se tiene el tipo de dato
entero).
Pgina 2
Pgina 3
case'M':
case'R':
case'W':
case'=':
case'(':
case')':
case';':
case'}':
case'{':
case'.':
case'+':
case'*':
case'-':
case'/':
case'%':
return(car);
}
if(islower(car))return(car);
else if(isdigit(car)) return(car);
else
{
cout<<"Error Lexico: Token Desconocido"<<endl;
system("pause");
exit(-4);
}
return(car);
}
void Lexico::devuelveToken(char token)
{
if(pBuffer>TAM_BUFFER)
{
cout<<"ERROR: Desbordamiento del buffer del analizador lexico"<<endl;
system("pause");
exit(-5);
}
else
{
buffer[pBuffer++]=token;
if(existeTraza())
cout<<"ANALIZADOR LEXICO: Recibe en buffer el token"<<token<<endl;
system("pause");
}
}
Programa Principal
A continuacin se muestra un pequeo programa para observar como es realizado el proceso
de anlisis lxico por la clase. (SI Ud. desea puede implementar otro tipo de proceso dentro de
main).
int main()
{
int traza;
char token;
Lexico obj("ejemplo_minidev.txt",1);
if(obj.existeTraza())
cout<<"INICIO DE ANALISIS"<<endl;
while((token=obj.siguienteToken() )!='}')
Pgina 4
cout<<token<<endl;
system("pause");
return 0;
}
Ejercicio 2
Describa lo que hace el programa anterior:
_____________________________________________________________
_____________________________________________________________
_____________________________________________________________
Pgina 5