tp2_compiladores_2015
DESCRIPTION
Practico de compiladoresTRANSCRIPT
-
UNIVERSIDAD NACIONAL DE JUJUY FACULTAD DE INGENIERA
INGENIERIA EN INFORMTICA (2001) LICENCIATURA EN SISTEMAS
CCoommppiillaaddoorreess 2015
APELLIDO Y NOMBRE:__________________________________________ LU:________
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) Especificar el conjunto de tokens que debe reconocer el analizador. b) Especificar el patrn lxico (expresin regular) que define cada posible token del
lenguaje. c) 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.
-
UNIVERSIDAD NACIONAL DE JUJUY FACULTAD DE INGENIERA
INGENIERIA EN INFORMTICA (2001) LICENCIATURA EN SISTEMAS
CCoommppiillaaddoorreess 2015
APELLIDO Y NOMBRE:__________________________________________ LU:________
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 int main() { int contador = 1; do { printf( "%d ", contador ); } while ( ++contador
-
UNIVERSIDAD NACIONAL DE JUJUY FACULTAD DE INGENIERA
INGENIERIA EN INFORMTICA (2001) LICENCIATURA EN SISTEMAS
CCoommppiillaaddoorreess 2015
APELLIDO Y NOMBRE:__________________________________________ LU:________
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
%}
blanco " "|\n|\t
letra [a-zA-Z]
digito [0-9]
ident {letra}({digito}|{letra})*
numero {digito}+
-
UNIVERSIDAD NACIONAL DE JUJUY FACULTAD DE INGENIERA
INGENIERIA EN INFORMTICA (2001) LICENCIATURA EN SISTEMAS
CCoommppiillaaddoorreess 2015
APELLIDO Y NOMBRE:__________________________________________ LU:________
%%
{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