tp2_compiladores_2015

4
UNIVERSIDAD NACIONAL DE JUJUY FACULTAD DE INGENIERÍA INGENIERIA EN INFORMÁTICA (2001) LICENCIATURA EN SISTEMAS C C o o m m p p i i l l a a d d o o r r e e s s 2015 APELLIDO Y NOMBRE:__________________________________________ LU:________ TRABAJO PRÁCTICO Nº 2: ANÁLISIS LÉXICO Ejercicio 1: Diseñar un Diagrama de Transición de Estados (DT) para reconocer los siguientes componentes léxicos: LETRAS: cualquier secuencia de una o más letras. ENTERO: cualquier secuencia de uno o más números (si tiene más de un número, 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 expresión regular (a|b)*abb: a) Crear el DT. b) Generar la tabla. Ejercicio 3: Dado el siguiente código 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 patrón léxico (expresión 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 evalúe expresiones matemáticas tales como: • A + -(A * B + -C) • ((B * C) + -A) * C + D Se requiere construir un analizador léxico de este lenguaje. Para ello se pide: a) Especificar la colección de tokens del analizador.

Upload: bruno-torrelio

Post on 28-Sep-2015

219 views

Category:

Documents


2 download

DESCRIPTION

Practico de compiladores

TRANSCRIPT

  • 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