Sie sind auf Seite 1von 4

UNIVERSIDAD NACIONAL DE JUJUY FACULTAD DE INGENIERA

Compiladores

INGENIERIA EN INFORMTICA (2001) LICENCIATURA EN SISTEMAS

2015

TRABAJO PRCTICO N 2: ANLISIS LXICO


Ejercicio 1: Disear un Diagrama de Transicin de Estados (DT) para reconocer los
siguientes componentes lxicos:
LETRAS: cualquier secuencia de una o ms letras.
ENTERO: cualquier secuencia de uno o ms nmeros (si tiene ms de un nmero, no
deber comenzar por 0).
ASIGNAR: la secuencia =
SUMAR: la secuencia +
RESTAR: la secuencia IMPRIMIR: la palabra reservada print

Ejercicio 2: Para el lenguaje generado por la expresin regular (a|b)*abb:


a) Crear el DT.
b) Generar la tabla.

Ejercicio 3: Dado el siguiente cdigo en FORTRAN:


FUNCTION MAX (I,J)
RETORNA EL MAYOR DE LOS ENTEROS I, J
IF (I .GT. J) THEN
MAX = I
ELSE
MAX = J
ENDIF
RETURN

a)
b)
c)

Especificar el conjunto de tokens que debe reconocer el analizador.


Especificar el patrn lxico (expresin regular) que define cada posible token del
lenguaje.
Construir el DT que reconoce el lenguaje anterior.

Ejercicio 4: Se pretende construir una calculadora que evale expresiones matemticas tales
como:
A + -(A * B + -C)
((B * C) + -A) * C + D
Se requiere construir un analizador lxico de este lenguaje. Para ello se pide:
a)

Especificar la coleccin de tokens del analizador.

APELLIDO Y NOMBRE:__________________________________________

LU:________

UNIVERSIDAD NACIONAL DE JUJUY FACULTAD DE INGENIERA


INGENIERIA EN INFORMTICA (2001) LICENCIATURA EN SISTEMAS

Compiladores
2015

b)

Especificar el patrn lxico (expresin regular) que define cada posible token del
lenguaje.
c) Construir el DT que reconozca los componentes lxicos para este analizador.
d) Construir la tabla de transiciones para el autmata obtenido en el punto c).

Ejercicio 5: Escribir las expresiones regulares para reconocer identificadores, nmeros


reales, cadenas de caracteres y comentarios utilizados para un programa escrito en C.
a) Construir el DT que reconozca los componentes lxicos para la expresin regular
definida para nmeros reales.
b) Construir la tabla de transiciones para el autmata obtenido en el punto a).

Ejercicio 6: Identificar los Lexemas, Patrones, Tokens y Atributos para un Analizador


Lxico (AL) que reconozca como entrada las siguientes porciones de cdigo. Nota: Para cada
lenguaje se implementar un AL.
a) Pascal
procedure sumatoria;
begin
writeln('Numero: ');Redln(numero);
sumatoria:=0;
for contador:=1 to numero do
begin
sumatoria:=sumatoria+contador;
end;
write('Sumatoria: ',sumatoria)
end;

b) C
#include <stdio.h>
int main()
{ int contador = 1;
do {
printf( "%d ", contador );
} while ( ++contador <= 10 );
return 0;
}

APELLIDO Y NOMBRE:__________________________________________

LU:________

UNIVERSIDAD NACIONAL DE JUJUY FACULTAD DE INGENIERA

Compiladores

INGENIERIA EN INFORMTICA (2001) LICENCIATURA EN SISTEMAS

2015

Ejercicio 7: Implementar un reconocedor de lexemas (Analizador Lxico) para la siguiente


entrada:
program problema2;
function F2 (uno, dos: integer)
{
function F1 (uno, dos: integer)
{
var a, b: integer;
a:= 5;
b:= 10;
b:= ((a * uno) + (b * dos))
return b;
}
var c, d: integer;
c:= uno;
d:= dos;
return ( (c + F1(c, d)) * (d + F1(3, 4))
}
var uno: integer;
begin
uno := 1;
uno := F2 (uno, 1);
end.

en donde la salida debera ser la siguiente:

PROGRAM ID ; FUNCTION ID ( ID , ID : INTEGER) { ...


(Nota: puede recibir la entrada desde el teclado desde un archivo de acuerdo al criterio
elegido al momento de disear el AL).

Ejercicio 8: Crear un analizador para el ejemplo del ejercicio anterior, que muestre como
salida la secuencia de tokens correspondiente, manteniendo la estructura (espacios,
tabuladores y saltos de lnea) y mostrando para los identificadores, el lexema en lugar del
token.

Ejercicio 9: Dada la siguiente especificacin:


%{
#include <stdio.h>
%}
blanco " "|\n|\t
letra [a-zA-Z]
digito [0-9]
ident {letra}({digito}|{letra})*
numero {digito}+
APELLIDO Y NOMBRE:__________________________________________

LU:________

UNIVERSIDAD NACIONAL DE JUJUY FACULTAD DE INGENIERA


INGENIERIA EN INFORMTICA (2001) LICENCIATURA EN SISTEMAS

Compiladores
2015

%%
{blanco}* {;}
"if" {printf(" IF ");}
"else" {printf(" ELSE ");}
"while" {printf(" WHILE ");}
"void" {printf(" VOID ");}
{ident} {printf(" IDENT ");}
{numero} {printf(" NUMERO ");}
. {printf(" %c ",yytext[0]);}
%%

a) Indicar qu tipo de lexemas permite reconocer.


b) Si tomamos como entrada lo siguiente:
void main (void)
{
if(a>12)
while(b1<10)
a = a + 1;
}

Cul sera la salida?


c) Compilar y ejecutar la especificacin en Flex. Qu ocurre si colocamos la regla que
reconoce los identificadores en primer lugar? Y si colocamos la regla del . en primer
lugar? Qu ocurri con el identificador main en ambos casos? Y con el identificador a?
Por qu?

Ejercicio 10: Crear un analizador basado en la especificacin del ejercicio anterior, que
muestre como salida la secuencia de tokens correspondiente, manteniendo la estructura
(espacios, tabuladores y saltos de lnea) y mostrando para los identificadores el lexema en
lugar del token.

APELLIDO Y NOMBRE:__________________________________________

LU:________

Das könnte Ihnen auch gefallen