compiladores - departamento de lenguajes y...

39
C CO OM MP PI I L LA AD DO OR RE ES S Segundo parcial, 21 de junio de 2004 Observaciones: 1. La fecha estimada de publicación de las calificaciones es el 6 de julio. 2. La fecha estimada de la revisión es el 8 de julio. 3. En la Web (http://www-lt.ls.fi.upm.es/compiladores) se avisará de la fecha exacta de la publicación de las calificaciones, así como la fecha y hora definitiva de la revisión. 4. La duración de este examen será de 2 ¾ horas. 5. Cada ejercicio deberá entregarse en hojas separadas. 6. Los tres ejercicios tienen la misma puntuación. 1. De un lenguaje con paso de parámetros por valor y que no realiza conversiones de tipos, se ha obtenido el fragmento de gramática siguiente: P D P | S P | λ D function id (L): T; begin P end | T id; L T: id | L; L T integer | real S id:= E; E id (A) | id A E | A, A Se pide construir un Esquema de Traducción para realizar el Análisis Semántico, detallando todos los accesos a las Tablas de Símbolos (incluyendo su creación y destrucción) y teniendo en cuenta que el Analizador Léxico no introduce absolutamente nada en la Tabla de Símbolos. Explicar los atributos y funciones utilizadas. 2. Dado el fragmento de gramática siguiente: S A | B | F | call id(L); | S S A id= id; | id = (id + id); B repeat M until E > 0; F procedure id (L) {M}; L L, id | id M M A | A E id | (E) Se pide construir un Esquema de Traducción que genere código intermedio de tres direcciones, teniendo en cuenta que el paso de parámetros es por valor. Explicar los atributos y funciones utilizadas.

Upload: ngokhanh

Post on 29-Sep-2018

225 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: COMPILADORES - Departamento de Lenguajes y …pegaso.ls.fi.upm.es/~jfuertes/Documentos/Examenes.pdf · Construir el autómata y las acciones semánticas de un Analizador Léxico,

CCOOMMPPIILLAADDOORREESS Segundo parcial, 21 de junio de 2004

Observaciones: 1. La fecha estimada de publicación de las calificaciones es el 6 de julio.   2. La fecha estimada de la revisión es el 8 de julio.   3. En la Web (http://www-lt.ls.fi.upm.es/compiladores) se avisará de la 

fecha exacta de la publicación de las calificaciones, así como la fecha y hora definitiva de la revisión. 

  4. La duración de este examen será de 2 ¾ horas.   5. Cada ejercicio deberá entregarse en hojas separadas.   6. Los tres ejercicios tienen la misma puntuación. 

1. De un lenguaje con paso de parámetros por valor y que no realiza conversiones de tipos, se ha obtenido el fragmento de gramática siguiente:

P D P | S P | λ D function id (L): T; begin P end | T id; L T: id | L; L T integer | real S id:= E; E id (A) | id A E | A, A

Se pide construir un Esquema de Traducción para realizar el Análisis Semántico, detallando todos los accesos a las Tablas de Símbolos (incluyendo su creación y destrucción) y teniendo en cuenta que el Analizador Léxico no introduce absolutamente nada en la Tabla de Símbolos. Explicar los atributos y funciones utilizadas.

2. Dado el fragmento de gramática siguiente:

S A | B | F | call id(L); | S S A id= id; | id = (id + id); B repeat M until E > 0; F procedure id (L) {M}; L L, id | id M M A | A E id | (E)

Se pide construir un Esquema de Traducción que genere código intermedio de tres direcciones, teniendo en cuenta que el paso de parámetros es por valor. Explicar los atributos y funciones utilizadas.

Page 2: COMPILADORES - Departamento de Lenguajes y …pegaso.ls.fi.upm.es/~jfuertes/Documentos/Examenes.pdf · Construir el autómata y las acciones semánticas de un Analizador Léxico,

3. Se tiene el siguiente fragmento de un programa fuente en un lenguaje en el que todas las variables son enteras y tienen que estar declaradas. En la máquina destino, tanto las direcciones como los valores enteros ocupan 4 bytes.

Procedure uno (); Var a; Procedure dos (x); // x por valor Var b; Procedure tres (y, ref z); // y por valor, z por referencia Var c; Begin // tres c:= 9; y:= c + y; z:= c + b; // End; Procedure cuatro (x); // x por valor Var d; Begin // cuatro b:= x; If x <= 4 Then d:= a; Else cuatro (x – 1); End; Begin // dos b:= 7; x:= x + b; cuatro (a); tres (x, a); End; Begin // uno a:=5; dos (a); End;

Se pide:

a. Realizar una traza de ejecución de este fragmento de programa, dando el diseño del Registro de Activación y la pila detallada. Supóngase que todos los temporales van en el Registro de Activación.

b. Para la sentencia marcada con : b.1. Detallar el código objeto que se generaría, sin usar el nombre simbólico de las

variables sino sus direcciones reales. b.2. ¿Cómo ha podido saber el Generador de Código establecer la dirección para b? b.3. Si la sentencia hubiera sido z:= c + d, ¿qué habría pasado? Explicar en detalle,

comentando los módulos implicados.

c. Escribir detalladamente (no de forma genérica) toda la información que recibe como entrada el Generador de Código Objeto durante el tiempo en que dicho generador está procesando el procedimiento cuatro, especificando todas y cada una de las entradas de datos al módulo.

Page 3: COMPILADORES - Departamento de Lenguajes y …pegaso.ls.fi.upm.es/~jfuertes/Documentos/Examenes.pdf · Construir el autómata y las acciones semánticas de un Analizador Léxico,

CCOOMMPPIILLAADDOORREESS Primer parcial, 21 de junio de 2004

Observaciones: 1. La fecha estimada de publicación de las calificaciones es el 6 de julio.   2. La fecha estimada de la revisión es el 8 de julio.   3. La duración de este examen será de 2 horas.   4. Cada ejercicio deberá entregarse en hojas separadas. 

1. Un fragmento de un lenguaje dispone de los siguientes elementos:

• Identificadores: empiezan con una letra que puede ir seguida de letras o dígitos. Longitud máxima de un identificador: 6 caracteres

• Números enteros • Números reales, siendo opcional la parte entera • Operadores lógicos: .AND., .OR., .NOT. • Operadores relacionales: .GT., .LT., .EQ., .NE., .GE., .LE. • Palabras reservadas: INTEGER, LOGICAL, IF, ENDIF, THEN, ELSE, WHILE, FOR...

Se pide diseñar un Analizador Léxico (gramática, tokens y autómata con acciones semánticas) que introduzca toda la información posible en la Tabla de Símbolos.

(3.5 puntos)

2. Dado el siguiente fragmento de una gramática de un lenguaje de programación que representa sus sentencias:

S A | C | P A id:= E C if R then S | if R then S else S P print (L) | print (L) path L L, E | E E id | id + E | (E) R E > E | E = E

Se quiere construir una gramática LL(1) que genere el mismo lenguaje:

a. ¿Qué problema nos encontramos a la hora de intentar construir dicha gramática?

b. Eliminando una de sus reglas, transformar la gramática resultante en una gramática LL(1). Detallar todos los cálculos necesarios para comprobar las condiciones LL(1).

(3 puntos)

Page 4: COMPILADORES - Departamento de Lenguajes y …pegaso.ls.fi.upm.es/~jfuertes/Documentos/Examenes.pdf · Construir el autómata y las acciones semánticas de un Analizador Léxico,

3. Sea la gramática:

E T R R + T R | * T R | λ T id

a. ¿Con cuáles de las siguientes gramáticas puede trabajar un Analizador Sintáctico LR y con cuáles no?

Gramática recursiva por la izquierda Gramática recursiva por la derecha Gramática ambigua Gramática con reglas lambda Gramática con dos o más reglas con la misma parte derecha (ejemplo: E T+F y T T+F)

Gramática con dos o más reglas para una misma metanoción cuyos consecuentes tienen intersección no vacía de FIRST

b. ¿Cuándo se dice que una gramática es ambigua? (Contestar brevemente en menos de 10 líneas.)

c. Construir el autómata de un SLR para la gramática dada, modificándola previamente si fuera necesario.

d. Describir los pasos que sigue el analizador hasta llegar a la forma sentencial T R para una cadena de entrada cualquiera que tenga exactamente dos identificadores.

(3.5 puntos)

Page 5: COMPILADORES - Departamento de Lenguajes y …pegaso.ls.fi.upm.es/~jfuertes/Documentos/Examenes.pdf · Construir el autómata y las acciones semánticas de un Analizador Léxico,

CCOOMMPPIILLAADDOORREESS Examen Final, 9 de septiembre de 2004

1. En la Web (http://www-lt.ls.fi.upm.es/compiladores) se avisará de la fecha exacta de la publicación de las calificaciones (fecha tope: 23‐septiembre‐2004), así como la fecha y hora definitiva de la revisión (dos días después). 

2. La duración de este examen será de 3 horas. 3. Cada ejercicio deberá entregarse en hojas separadas. 4. Los dos ejercicios tienen la misma puntuación. 

1. De un lenguaje con paso de parámetros por referencia y que no realiza conversiones de tipos, se tiene el fragmento de gramática siguiente:

P’ P P D P | F P | λ D T id; F function id (L): T; begin B end L T: id | L, L

T integer | real B D B | S B | λ S id:= E; | return E; E id (A) | id A E | A, A

Se pide construir un Esquema de Traducción para realizar el Análisis Semántico y la Generación de Código de tres Direcciones, detallando todos los accesos a las Tablas de Símbolos (incluyendo su creación y destrucción) y teniendo en cuenta que el Analizador Léxico no introduce absolutamente nada en la Tabla de Símbolos. Explicar los atributos y funciones utilizadas.

2. Sea la siguiente gramática que representa un fragmento de un lenguaje, del cual se muestra también un programa de ejemplo:

P D begin S end D const L L I = N ; L | I = N | λ N d+ . d+ S I := E | I := E ; S I l (l | d)* E E + (E) | N | I

const max= 30.03; min= 3.5 begin cant:= 17.0; valor:= max +(min + (cant)); total:= valor + (valor) end

El lenguaje tiene las siguientes características:

• No hay declaraciones, salvo para los identificadores de tipo constante. • La longitud máxima de los identificadores es de 8 caracteres.

Para este fragmento de lenguaje, se pide:

a. Diseñar la Tabla de Símbolos (TS) completa (con todos los campos).

b. Construir el autómata y las acciones semánticas de un Analizador Léxico, considerando que uno de los tokens es: <ID, posiciónTS>.

c. Rellenar la TS con lo que almacena el Analizador Léxico para el programa del ejemplo.

d. Construir parcialmente el AFD reconocedor de prefijos viables correspondiente a un SLR, exceptuando la rama formada por todos los estados surgidos a partir de goto (I0, begin). Comprobar si en alguno de los estados obtenidos hay algún conflicto reducción/desplazamiento.

e. Rellenar la TS con lo que almacena el Analizador Sintáctico para el programa del ejemplo.

Page 6: COMPILADORES - Departamento de Lenguajes y …pegaso.ls.fi.upm.es/~jfuertes/Documentos/Examenes.pdf · Construir el autómata y las acciones semánticas de un Analizador Léxico,

CCOOMMPPIILLAADDOORREESS Examen final. Segundo parcial. 10 de febrero de 2005 

Observaciones: 1. Las calificaciones del examen final se publicarán antes del 21‐2‐05 y la fecha estimada de la revisión será un mínimo de 48 horas después. Las fechas y horas exactas se avisarán en http://www-lt.ls.fi.upm.es/compiladores. 

  3. La duración de este examen será de 2 horas.   4. Cada ejercicio deberá entregarse en hojas separadas.   5. Ambos ejercicios tienen la misma puntuación. 

1. Sea la siguiente gramática BNF de un fragmento de un determinado lenguaje:

S id:= E E E1 / E2 | E1 DIV E2 | id | núm_ent | núm_real

Se pide construir un Esquema de Traducción para realizar el Análisis Semántico y la Generación de Código Intermedio de tres direcciones (explicando brevemente todos los atributos y funciones utilizadas), teniendo en cuenta que:

• El lenguaje sólo dispone de los tipos entero y real. • El lenguaje permite la conversión automática de tipos, tanto de entero a real, como de real

a entero. • El operador / es la división real: sus operandos pueden ser enteros o reales y su resultado

es real. • El operador DIV es la división entera: sus operandos pueden ser enteros o reales y su

resultado es entero. • Las variables tienen que estar declaradas obligatoriamente antes de su uso. • El código intermedio a generar solamente dispone de un tipo de división: ambos operandos

deben ser reales y el resultado devuelto es un valor real.

2. Se tiene un lenguaje que dispone de anidamiento de funciones y procedimientos y en el que el paso de parámetros es siempre por valor. Se pide dibujar, con el mayor detalle posible, la traza de ejecución del programa siguiente.

Program principal; Var x, y: integer;

Function cantidad (x, y: integer): integer; begin return x + y end; Function sumatorio (x: integer): integer; begin y:= x; if (x<0) then write (“El parámetro no debe ser negativo”) else if (x=0) then return 1 else return x + sumatorio (x-1) end;

begin (*principal*) y:= cantidad (1,1); x:= sumatorio (cantidad (1,1)); write (“El resultado es ”, x) end (*principal*).

Page 7: COMPILADORES - Departamento de Lenguajes y …pegaso.ls.fi.upm.es/~jfuertes/Documentos/Examenes.pdf · Construir el autómata y las acciones semánticas de un Analizador Léxico,

CCOOMMPPIILLAADDOORREESS Examen del primer parcial. 10 de febrero de 2005 

Observaciones: 1. Las calificaciones del primer parcial se publicarán a mediados de marzo. Cuando estén, se avisará en http://www-lt.ls.fi.upm.es/compiladores 

  2. La duración de este examen será de 2 horas.   3. Cada ejercicio deberá entregarse en hojas separadas.   4. Las dos preguntas tienen la misma puntuación. 

1. La grámatica siguiente es un subconjunto de la grámatica del lenguaje LISP para la definición de funciones:

F ( id L ) L D A | D A R A λ | D A R rest A D ( id e )

Se pide:

a. En la hoja de respuesta adjunta, completar la plantilla del Autómata Reconocedor de Prefijos Viables (correspondiente al método de Análisis Sintáctico Ascendente SLR), rellenando los subconjuntos de items y etiquetando las transiciones entre ellos. Téngase en cuenta que la plantilla tiene un número reducido de errores (faltan o sobran estados o transiciones).

b. En el autómata anterior, analizar los estados en que se pueden producir conflictos al construir el analizador.

c. Comprobar si la gramática dada es LL(1) (válida para un analizardor descendente). Si no lo fuera, transformala para conseguir una gramática que cumpla las condiciones LL(1).

Page 8: COMPILADORES - Departamento de Lenguajes y …pegaso.ls.fi.upm.es/~jfuertes/Documentos/Examenes.pdf · Construir el autómata y las acciones semánticas de un Analizador Léxico,

2. En un aeropuerto se dispone de un fichero con la siguiente información relativa a compañía aérea, destino y puerta de embarque correspondiente a cada vuelo:

• El nombre de la compañía aparece completo, como una cadena de letras (que puede contener blancos).

• Como destino aparece el código del aeropuerto de destino (secuencia de tres letras mayúsculas) o bien el nombre completo de la ciudad de destino (cadena de letras que puede contener blancos).

• La puerta de embarque viene dada por una secuencia de dígitos (cuatro dígitos como máximo y uno como mínimo) y el primero de ellos nunca puede ser un cero.

Estos campos se separan entre sí mediante uno o varios saltos de línea. Todos los nombres de las compañías, aeropuertos y ciudades se encuentran predefinidos.

Se quiere comprobar que los datos de entrada son correctos y obtener como salida la misma información pero con ligeras modificaciones en cuanto a su codificación:

• El nombre de la compañía se sustituirá por el código de ésta (formado por dos letras).

• El destino se representará en todos los casos mediante el nombre completo de la ciudad.

• En cuanto a la puerta de embarque, los dos últimos dígitos de la cadena (el último, si la cadena es de longitud uno) dan el número de la puerta. El primero o los dos primeros dígitos (si la cadena es de longitud tres o cuatro, respectivamente) dan la zona a la que pertenece la puerta. Las zonas se representan usando una letra de la A a la Z (A=1, B=2...). Véase el ejemplo.

Ejemplo: Entrada Salida

IBERIA MAD 231 British Airways 2222 San Francisco Spanair Málaga 7 Zambian Express Airways PTF 99 Aerolíneas Argentinas 2600

IB Madrid B31 BA V22 San Francisco JK Málaga 7 OQ Malololailai 99 AR Z00

El Departamento de Informática del aeropuerto encargado de construir este sistema, ha decidido hacerlo empleando la teoría de Compiladores. Se pide diseñar únicamente la parte del sistema correspondiente al Analizador Léxico del lenguaje descrito (gramática, tokens, AFD y acciones semánticas).

Page 9: COMPILADORES - Departamento de Lenguajes y …pegaso.ls.fi.upm.es/~jfuertes/Documentos/Examenes.pdf · Construir el autómata y las acciones semánticas de un Analizador Léxico,

Co

mp

ila

do

res

Co

mp

ila

do

res

1er

Parc

ial, f

ebre

ro-0

5,

Eje

rcic

io 1

.aH

oja

de

Res

pues

ta

I 1I 2

I 3

I 4

I 5I 0

I 6I 10

I 9

I 8

I 7

id

I 11

I 12

rest

I 13

I 15

I 16

I 17 re

st

L

A

D

Nom

bre:

.....

......

......

......

......

......

......

......

......

......

......

......

......

......

......

.....

Ape

llidos

: ....

......

......

......

......

......

......

......

......

......

......

......

......

......

......

....

Page 10: COMPILADORES - Departamento de Lenguajes y …pegaso.ls.fi.upm.es/~jfuertes/Documentos/Examenes.pdf · Construir el autómata y las acciones semánticas de un Analizador Léxico,

CCOOMMPPIILLAADDOORREESS Segundo parcial, 20 de junio de 2005

Observaciones: 1. Fecha estimada de publicación de las calificaciones: 7 de julio.   2. Fecha estimada de la revisión: 11 de julio.   3. En http://www-lt.ls.fi.upm.es/compiladores se avisará la fecha exacta de 

publicación de las calificaciones y la fecha y hora definitiva de la revisión.   4. La duración de este examen será de 1 ¾ horas.   5. Cada ejercicio deberá entregarse en hojas separadas. 

1. De un lenguaje se ha extraído el siguiente fragmento de gramática: 

S id := E | if not E then S1 E id | E1 between E2 and E3

Se  pide  diseñar  un  Esquema  de  Traducción  con  el Analizador  Semántico  y  el Generador  de Código Intermedio teniendo en cuenta que: • La expresión between se evalúa como cierta si el valor numérico de E1 se encuentra entre  los 

valores de E2 y E3, ambos inclusive. • El lenguaje tiene variables enteras, carácter y lógicas y se exige su declaración. • El lenguaje no realiza conversiones automáticas de tipos. • Los valores lógicos tienen que representarse por control de flujo. • Deben explicarse brevemente los atributos y funciones utilizadas. 

(6 puntos)

2. Se tiene el siguiente fragmento de un programa fuente: ... Procedure magic Integer: d, x, y, z {variables locales del procedimiento magic} Integer: Function cálculo (Integer: x, y) {x,y: parámetros por referencia} a {variable local de la función} Integer: Procedure operación (Integer: x, y) {x,y: parámetros por referencia} Begin operación a:= x * d + y z:= y * d + x End operación Begin cálculo If (x = y) Then magic Else Begin d:= 10 operación (x, y) a:= a – z x:= a / d {división con resultado entero truncado (ejemplo: 7/4=1)} y:= a – x * d operación (y, x) eturn z + a R End End cálculo Begin magic Write ‘Escribe dos dígitos distintos: ’ {impresión por pantalla} x:= ReadDigit {lectura de un dígito por el teclado} y:= ReadDigit Write ‘Resultado: ’ If (x > y) Then Write cálculo (x, y) End magic

Else Write cálculo (y, x)

...

Teniendo en cuenta que un entero ocupa 2 bytes y una dirección 4, se pide: a. Diseñar un Registro de Activación para este lenguaje. b. Realizar una traza de ejecución detallada de este fragmento de programa, representando todo 

el contenido de la memoria. ¿Qué se imprime por pantalla? (4 puntos)

Page 11: COMPILADORES - Departamento de Lenguajes y …pegaso.ls.fi.upm.es/~jfuertes/Documentos/Examenes.pdf · Construir el autómata y las acciones semánticas de un Analizador Léxico,

CCOOMMPPIILLAADDOORREESS Primer parcial, 20 de junio de 2005

Observaciones: 1. Fecha estimada de publicación de las calificaciones: 7 de julio.   2. Fecha estimada de la revisión: 11 de julio.   3. En http://www-lt.ls.fi.upm.es/compiladores se avisará la fecha exacta de 

publicación de las calificaciones y la fecha y hora definitiva de la revisión.   4. La duración de este examen será de 1 ¾ horas.   5. Cada ejercicio deberá entregarse en hojas separadas.   6. Los dos ejercicios tienen la misma puntuación. 

1. Dado el siguiente fragmento de una gramática de un lenguaje de programación:

Sent SAsig | SDesde | SMientras SMientras mientras Cond hacer Cuerpo fin Cuerpo Sent Cuerpo | λ SAsig id := id SDesde desde id := núm hasta núm Cuerpo fin Cond id <= núm | id < núm

Se pide: a. Comprobar si es LL(1) y, en caso negativo, modificarla para que lo sea. b. Diseñar  un  Analizador  Sintáctico  Descendente  Predictivo  Recursivo.  Se  deberá 

utilizar  el  procedimiento  auxiliar  que  se  define  a  continuación  (aunque  provoque alguna redundancia), para  la operación de comparación con el  token actual y solicitud del siguiente: 

Procedure equipara_token (tok: token) Begin If preanálisis = tok Then preanálisis:= scan() Else error (tok) End

c. Diseñar los tokens que enviaría un Analizador Léxico a este Analizador Sintáctico para este fragmento de lenguaje. 

2. Dado el siguiente fragmento de una gramática de un lenguaje de programación:

A D ; S D D ; D D id integer D λ E id E núm S S ; S S id := E S λ

Se pide: a. Contruir  el Autómata Finito Determinista  reconocedor de  los prefijos viables  en  la 

hoja de respuesta adjunta (la plantilla puede tener errores u omisiones). b. A partir del AFD, y sin construir la tabla, comprobar si la gramática es o no SLR (1). En 

caso de que lo sea, construir las columnas de la tabla correspondientes a  id y núm. En caso de que no sea SLR (1), detallar todos los conflictos que aparecen. 

c. Explicar, para este gramática, qué información introducen en la Tabla de Símbolos los Analizadores Léxico y Sintáctico. 

Page 12: COMPILADORES - Departamento de Lenguajes y …pegaso.ls.fi.upm.es/~jfuertes/Documentos/Examenes.pdf · Construir el autómata y las acciones semánticas de un Analizador Léxico,

Co

mp

ila

do

res

Co

mp

ila

do

res

1er

Parc

ial, junio

-05,

Eje

rcic

io 2

.aH

oja

de

Res

pues

ta

I 0

Ape

llidos

: ....

......

......

......

......

......

......

......

......

......

......

......

......

......

......

....

Nom

bre:

.....

......

......

......

......

......

......

......

......

......

......

......

......

......

......

.....

;

S

inte

ger

:=

id

núm

S

λ

D

núm

Page 13: COMPILADORES - Departamento de Lenguajes y …pegaso.ls.fi.upm.es/~jfuertes/Documentos/Examenes.pdf · Construir el autómata y las acciones semánticas de un Analizador Léxico,

CCOOMMPPIILLAADDOORREESS Examen final, 7 de septiembre de 2005

Observaciones: 1. Fecha estimada de publicación de las calificaciones: 19 de septiembre.   2. Fecha estimada de la revisión: 22 de septiembre.   3. En http://www-lt.ls.fi.upm.es/compiladores se avisará la fecha exacta de 

publicación de las calificaciones y la fecha y hora definitiva de la revisión.   4. La duración de este examen será de 2 horas.   5. Cada ejercicio deberá entregarse en hojas separadas. 

1. Dada la siguiente gramática en notación BNF:

S ( E ) S id E E + S E - S !

Se pide: 

a. Contruir la tabla de Precedencia de Operador para dicha gramática. 

b. Analizar la cadena: ( - id ! + ( - id ! + id ) ) 

c. Añadiendo la producción S id + id, la gramática resultante ¿sería de Precedencia de Operador? ¿Por qué? 

(4 puntos)

2. De un lenguaje se ha extraído el siguiente fragmento de gramática: 

S id := E | if E = false then S1 E id | E1 between E2 and E3

Se pide diseñar una Definición Dirigida por la Sintaxis con el Analizador Semántico y el Generador de Código Intermedio teniendo en cuenta que: 

• El lenguaje tiene variables enteras, reales y lógicas y se exige su declaración. 

• La expresión between se evalúa como cierta si el valor de E1 se encuentra entre  los valores de E2 y E3, ambos inclusive. La operación puede realizarse entre expresiones de cualquiera de los tres tipos disponibles, siempre que las tres expresiones sean del mismo tipo. 

• El lenguaje realiza conversiones automáticas de tipos en todos los casos excepto en la expresión between. 

• Los valores  lógicos  tienen que  representarse numéricamente  (0 es  falso y cualquier otro valor es verdadero). 

• Deben explicarse brevemente los atributos y funciones utilizadas. (6 puntos)

Page 14: COMPILADORES - Departamento de Lenguajes y …pegaso.ls.fi.upm.es/~jfuertes/Documentos/Examenes.pdf · Construir el autómata y las acciones semánticas de un Analizador Léxico,

CCOOMMPPIILLAADDOORREESS Examen del primer parcial. 8 de febrero de 2006 

Observaciones: 1. Las calificaciones del primer parcial se publicarán aproximadamente en un mes. Se avisará en http://www-lt.ls.fi.upm.es/compiladores. 

  2. La duración de este examen será de 2¼ horas.   3. Cada ejercicio deberá entregarse en hojas separadas. 

1. Un sistema de gestión de una tienda lee de un fichero de texto los nuevos productos que entran en el almacén. Dicho fichero tiene la siguiente estructura: • Número de unidades de cada producto: entero. • Descripción,  que puede  incluir  el  nombre,  la marca  y  el modelo del producto: una  o varias cadenas de caracteres encerradas entre comillas. 

• Precio: número (con dos, uno o ningún decimal) seguido  inmediatamente de  la unidad monetaria según el formato internacional de moneda de tres letras mayúsculas definido por el estándar  ISO 4217. Para comprobar  los 178 códigos válidos, así como el cambio oficial del día, se tiene una tabla similar a la siguiente (se muestran también ejemplos de precios válidos): 

Moneda  Código Cambio oficial    Ejemplos Euro  EUR 1    20,21EUR

Dólar estadounidense  USD 1, 21127    24,48USD

Peso colombiano  COP 2748,74    55555COP

Libra esterlina  GBP 0, 687366    13,9GBP

...  ... ...    ...

Teniendo en cuenta que los distintos elementos del fichero fuente tienen que ir separados obligatoriamente por uno o más blancos o saltos de línea y que la tienda quiere tener todos sus precios en euros, se pide diseñar un Analizador Léxico para este lenguaje (gramática regular, tokens completos, autómata finito determinista y acciones semánticas). 

(4 puntos) 

2. Sea la gramática G1≡(N, T, P1, S), donde N≡{S, A, B, C}, T={*, +, -}, siendo P1:  S A B C A λ | A * B C B |+ C - Se pide (siguiendo para las tablas el orden dado de los elementos de los conjuntos N y T): a. Construir el Autómata Reconocedor de Prefijos Viables. b. Estudiar  los  posibles  conflictos  a  la  hora  de  generar  un  Analizador  LR  para  esta gramática G1. c. Justificar si la gramática G1 es LL(1). En caso negativo, transformarla para que lo sea. d. Construir la Tabla del Analizador Descendente LL para la gramática del apartado c. e. Justificar si la gramática G1 es de Precedencia de Operador. f. Sea la gramática G2≡(N, T, P2, S), siendo P2:  S A * B A * B B + C - | + C - construir la Tabla de Precedencia de Operador y justificar si la nueva gramática G2 es o no de Precedencia de Operador. 

(6 puntos) 

Page 15: COMPILADORES - Departamento de Lenguajes y …pegaso.ls.fi.upm.es/~jfuertes/Documentos/Examenes.pdf · Construir el autómata y las acciones semánticas de un Analizador Léxico,

CCOOMMPPIILLAADDOORREESS Examen final. Segundo parcial. 8 de febrero de 2006 

Observaciones: 1. Fecha estimada de publicación de las notas del examen final: 22‐2‐06. Se avisará en http://www-lt.ls.fi.upm.es/compiladores. 

  2. La duración de este examen será de 1½ horas.   3. Cada ejercicio deberá entregarse en hojas separadas. 

1.  De una gramática se han entresacado las siguientes reglas: S id := E E E and E | id | true | false

Teniendo en cuenta que las variables pueden ser enteras, reales y lógicas y que no existe conversión automática de tipos, se pide: a. Construir una Definición Dirigida por la Sintaxis para realizar el Análisis Semántico 

y  la Generación de Código Intermedio, realizando una representación de  los valores lógicos mediante control de flujo. 

b. Construir  una Definición Dirigida  por  la  Sintaxis  para  realizar  la Generación  de Código Intermedio, realizando una representación numérica de los valores lógicos. 

c. Explicar brevemente los atributos y las funciones utilizadas en ambas Definiciones. (6 puntos) 

2.  Supóngase que: • en tiempo de ejecución se dispone tanto de memoria estática como dinámica • la pila crece hacia abajo (incrementando las direcciones) • la primera posición del  registro de activación  (la de dirección más baja)  se  reserva para almacenar la dirección de retorno. 

a.  ¿Qué estrategias diferentes existen para asignar memoria a los Registros de Activación en tiempo de ejecución? 

b. ¿En función de qué se decide cuál va a ser la estrategia utilizada? ¿En qué momento hay que tomar esta decisión? 

c.  Escriba,  para  cada  una  de  las  estrategias  de  asignación  de memoria  a  Registros  de Activación  posibles,  la  instrucción  (o  secuencia  de  instrucciones)  en  código  objeto (ensamblador) mediante la que se salva la dirección de retorno. 

d. Suponiendo que tanto  los parámetros (P) como el valor devuelto (VD) se van a  llevar a memoria, se proponen cuatro diseños diferentes para esa parte del Registro de Activación: 

VD VD P1 P1 P1 Pn P2 … P2 ... … VD ↓ … P2 Pn …

Pn P1 VD Pn Explique las ventajas e inconvenientes de cada uno de ellos. 

e.  Se plantean aquí dos diseños diferentes para una parte del Registro de Activación: Parám. Dir. Ret.

Dir. Ret. Parám. VD Var. Locales

Var. Locales VD Explique si hay alguna diferencia en la información contenida en la Tabla de Símbolos que  habría  que  tener  para  el  primer  diseño  respecto  a  la  del  segundo  o  si,  por  el contrario,  la  tabla de  símbolos  es  igual  independientemente de  cuál  sea  el diseño de Registro de Activación elegido. 

(4 puntos) 

Page 16: COMPILADORES - Departamento de Lenguajes y …pegaso.ls.fi.upm.es/~jfuertes/Documentos/Examenes.pdf · Construir el autómata y las acciones semánticas de un Analizador Léxico,

CCOOMMPPIILLAADDOORREESS Segundo parcial, 19 de junio de 2006

Observaciones: 1. Fecha estimada de publicación de las calificaciones: 27 de junio.   2. Fecha estimada de la revisión: 29 de junio.   3. En http://www-lt.ls.fi.upm.es/compiladores se avisará la fecha exacta de 

publicación de las calificaciones y la fecha y hora definitiva de la revisión.   4. La duración de este examen será de 1 ¾ horas.   5. Cada ejercicio deberá entregarse en hojas separadas.   6. Los dos ejercicios tienen la misma puntuación. 

1. De un lenguaje se ha extraído el siguiente fragmento de gramática: 

E → id | not E | E nand E

Se  pide  diseñar  el Generador  de  Código  Intermedio  construyendo  dos  Esquemas  de  Traducción representando los valores lógicos numéricamente en el primero y por control de flujo en el segundo. Téngase en cuenta que: • El operador nand devuelve cierto sólo si alguno de sus operandos es falso. • El lenguaje intermedio a utilizar (código de 3 direcciones) no dispone de operadores lógicos. • Deben explicarse brevemente los atributos y funciones utilizadas. 

2. Sea el siguiente fragmento de un programa: procedure f var z function ) g (x procedure a begin (*a*) z:= 18.1 end (*a*) function h (x,y) var p procedure k var x begin (*k*) x:= 5 end (*k*) procedure i (x) procedure j (x,y) var z begin (*j*) p:= x+y end (*j*) begin (*i*) if (x>11) call i(x-1) call j(g(5),p) z:= p end (*i*) begin (*h*) p:= x+y call i(p) return p end (*h*) procedure c begin (*c*) z:= h(5,7)+1 begin (*g*)

end (*c*)

if (x>6) call c return x*x begin (*f*)

end (*g*)

write g(7), z end (*f*)

Se  pide  realizar  una  traza de  ejecución detallada del fragmento de programa, representando todo el contenido de la memoria. 

El  compilador  y  el  lenguaje  tienen  las  siguientes características: 

• Cada  sentencia del  lenguaje  va  escrita  en una única línea 

• El compilador no realiza ninguna optimización 

• El lenguaje tiene estructura de bloques 

• El modo de paso de los parámetros es por valor 

• Existen conversiones automáticas de tipos 

• Las direcciones ocupan 4 bytes 

• Las expresiones lógicas se tratan por control de flujo 

• Las  funciones  devuelven  siempre  un  valor entero 

• Los enteros ocupan 2 bytes 

• Todas las variables son de tipo entero 

• Todos los parámetros son de tipo entero 

• Todo  identificador  debe  estar  declarado  antes de su uso 

 

Page 17: COMPILADORES - Departamento de Lenguajes y …pegaso.ls.fi.upm.es/~jfuertes/Documentos/Examenes.pdf · Construir el autómata y las acciones semánticas de un Analizador Léxico,

COOMPPILLADDOORREESS Primer parcial, 19 de junio de 2006

Observaciones: 1. Fecha estimada de publicación de las calificaciones: 27 de junio.   2. Fecha estimada de la revisión: 29 de junio.   3. En http://www-lt.ls.fi.upm.es/compiladores se avisará la fecha exacta de 

publicación de las calificaciones y la fecha y hora definitiva de la revisión.   4. La duración de este examen será de 1 ¾ horas.   5. Cada ejercicio deberá entregarse en hojas separadas.   6. Los dos ejercicios tienen la misma puntuación. 

1. Un fichero almacena nombres, apellidos y números de DNI, separados entre sí por saltos de línea. Los elementos tienen las siguientes características:

• Nombres: Pueden estar formados de dos maneras: (1) compuestos por una sola palabra; (2) compuestos por una palabra seguida de un espacio, una inicial y un punto. 

• Apellidos: Están compuestos de dos palabras separadas por un blanco. • Palabras: Están  formadas por  letras, pudiendo  contener  en  su  interior un único guión 

que en ningún caso puede aparecer al principio o al final de la palabra. • DNI: Está  compuesto por una  secuencia no vacía de dígitos  seguida de una  letra. En 

España  se  han  emitido  60.000.000  de  números  de  DNI.  Para  obtener  la  letra  que corresponde  a  un DNI  se  calcula  el módulo  del  valor  entero  del DNI  entre  23  y  el número obtenido es el índice para consultar el siguiente vector que da la letra correcta: 

Índice  0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16  17  18  19  20 21 22Letra  T R W A G M Y F P D X B N J Z S Q V H L C K E

Se pide diseñar un Analizador Léxico para este  lenguaje  (gramática,  tokens, autómata y acciones) que permita determinar los nombres, apellidos y DNI correctos. 

2. Sea la siguiente gramática:

F → ( id A ) A → P O R O → P O | null R → rest O | λ P → ( id O )

Se pide: 

a. Utilizando el orden de no  terminales  {F, A, O, R, P} y de  terminales  {(,  id,  ),  rest, null}, construir la tabla del Analizador Sintáctico LL para esta gramática. 

b. Realizar el análisis sintáctico LL para la cadena:  (id (id null) null) 

c. Si se añade la regla P → λ, demostrar, sin rehacer la tabla, si esta gramática es LL o no. d. Determinar  las relaciones de Precedencia de Operador entre  las siguientes parejas de 

símbolos  (*,  **),  (**,  *),  (**,  id)  e  (id,  núm),  que  se  puedan  obtener  del  siguiente fragmento de gramática: 

E → A * B B → B ** A A → id | núm | E

Page 18: COMPILADORES - Departamento de Lenguajes y …pegaso.ls.fi.upm.es/~jfuertes/Documentos/Examenes.pdf · Construir el autómata y las acciones semánticas de un Analizador Léxico,
Page 19: COMPILADORES - Departamento de Lenguajes y …pegaso.ls.fi.upm.es/~jfuertes/Documentos/Examenes.pdf · Construir el autómata y las acciones semánticas de un Analizador Léxico,
Page 20: COMPILADORES - Departamento de Lenguajes y …pegaso.ls.fi.upm.es/~jfuertes/Documentos/Examenes.pdf · Construir el autómata y las acciones semánticas de un Analizador Léxico,

CCOOMMPPIILLAADDOORREESS Examen del primer parcial. 9 de febrero de 2007 

Observaciones: 1. Las calificaciones del primer parcial se publicarán aproximadamente a mediados de marzo. Se avisará en http://www-lt.ls.fi.upm.es/compiladores. 

  2. La duración de este examen será de 2 horas.   3. Cada ejercicio deberá entregarse en hojas separadas. 

1. Se tiene un lenguaje con las siguientes características: 

• Los números pueden llevar parte decimal o no; en caso de llevar parte decimal, ésta va separada con una coma. Tanto la parte entera como la decimal (si existe) ha de tener al menos un dígito. 

• Los números pueden llevar puntos de millar (sólo en la parte entera) cada tres dígitos para facilitar su lectura. En caso de que el número se haya escrito con puntos, tendrán que estar  todos  los puntos posibles. Por  tanto, son correctos  los números 7234234 y 1.123.456,5679, pero no el número 7234.234  (falta un punto entre el 7 y el 2) ni el número 123.45 (tiene mal colocado el punto). 

• Se  pueden  realizar  operaciones  aritméticas  sobre  números  del  mismo  tipo.  Las operaciones posibles son la suma, resta, multiplicación, división y menos unario. 

Se  pide  diseñar  un  Analizador  Léxico  (tokens  completos,  gramática  regular,  autómata finito determinista y acciones semánticas) para este lenguaje. 

(4.5 puntos) 

2. a. Un lenguaje dispone de tres variantes para la sentencia perform: 

perform CUERPO EXP times perform CUERPO until CONDICIÓN perform CUERPO varying id from EXP by EXP until CONDICIÓN

Se  pide  escribir  una  gramática  capaz  de  generar  estos  tres  tipos  de  sentencias exclusivamente, adaptándola a las necesidades de un Analizador Descendente y construir el Analizador Predictivo Recursivo correspondiente. Considerar como no  terminales  las palabras  en mayúsculas  (CUERPO, EXP  y  CONDICIÓN)  pero  sin  escribir  las  reglas  de  la gramática correspondiente a dichos símbolos ni desarrollar esa parte del analizador. 

b. Sea la siguiente gramática: 

S P c E | P c id E begin E end | sent | λ P begin D end D id tipo D | λ 

Se  pide  construir  el  autómata  reconocedor  de  prefijos  viables  (utilizando  la  hoja  de respuesta adjunta, que puede tener errores) y estudiar la existencia de conflictos en los estados con 4 ó más items. 

(5.5 puntos) 

Page 21: COMPILADORES - Departamento de Lenguajes y …pegaso.ls.fi.upm.es/~jfuertes/Documentos/Examenes.pdf · Construir el autómata y las acciones semánticas de un Analizador Léxico,

CCOOMMPPIILLAADDOORREESS Examen final. Segundo parcial. 9 de febrero de 2007 

Observaciones: 1. Se estima que se publicarán las notas del examen final a partir del 16 de febrero, siendo la revisión al menos 2 días después. Las fechas exactas se avisarán en http://www-lt.ls.fi.upm.es/compiladores. 

  2. La duración de este examen será de 2 horas.   3. Cada ejercicio deberá entregarse en hojas separadas. 

1.  De una gramática se han entresacado las siguientes reglas: 

S S ; S | call id ( L ) | id := E L E | E , L E E op_arit E | id | entero | real

Teniendo en cuenta que las variables pueden ser enteras o reales, que no existe conversión automática de tipos y que el lenguaje dispone de procedimientos y funciones, se pide: a. Construir una Definición Dirigida por la Sintaxis para realizar el Análisis Semántico 

y la Generación de Código Intermedio (tres direcciones). b. Aplicar la Definición construida al siguiente fragmento de programa: 

a:= 9.6; call p (5, a – 1.1) (5 puntos) 

2.  Sea el siguiente fragmento de programa: 

Global y= 5 … Procedure main ()

Var x, z Procedure tabla (REF x, REF y, VAL z) // x, y por referencia; z por valor Begin tabla

y= 8 …

End tabla Procedure hoja (VAL y) Var x= 2 Begin hoja

… Call tabla (x, y, z) …

End hoja Begin main

x= y * 2; z= x - 3 Call hoja (x) …

End main

Teniendo en cuenta que un entero ocupa 4 bytes y una dirección 2, se pide indicar, para la instrucción marcada con “ ”: a. El código de tres direcciones que produciría el generador de código intermedio. b. La salida que produciría el generador de código final. c. Detallar el contenido de la memoria desde que se inicia la ejecución hasta el instante 

en que se ejecute la sentencia y=8. (5 puntos) 

Page 22: COMPILADORES - Departamento de Lenguajes y …pegaso.ls.fi.upm.es/~jfuertes/Documentos/Examenes.pdf · Construir el autómata y las acciones semánticas de un Analizador Léxico,

CCOOMMPPIILLAADDOORREESS Segundo parcial, 15 de junio de 2007

Observaciones: 1. Fecha estimada de publicación de las calificaciones: 2 de julio.   2. Fecha estimada de la revisión: 5 de julio.   3. En http://www-lt.ls.fi.upm.es/compiladores se avisará la fecha exacta de 

publicación de las calificaciones y la fecha y hora definitiva de la revisión.   4. La duración de este examen será de 2 horas.   5. Cada ejercicio deberá entregarse en hojas separadas.   6. Los dos ejercicios tienen la misma puntuación. 

1. De un lenguaje se ha extraído el siguiente fragmento de gramática: 

S → id := E | while not E do S E → id | E ∈ I | cte | E and E I → [cte, cte]

Se  pide  diseñar  el Analizador  Semántico  y  el Generador  de Código  Intermedio  construyendo  un Esquema de Traducción representando los valores lógicos por control de flujo. Téngase en cuenta que: • La expresión E ∈ I devuelve cierto si el valor entero de la expresión E pertenece al intervalo cerrado 

I (incluidos los dos extremos del intervalo). • El intervalo I debe tener el primer valor no mayor que el segundo y ambos serán enteros. • Las variables solo pueden ser enteras o lógicas y no hay conversión automática de tipos. • Deben explicarse brevemente los atributos y funciones utilizadas. 

2. Sea el siguiente fragmento de un programa escrito en un determinado lenguaje: procedure dos var a, x, c procedure uno (z ref) var b, c procedure cuatro (c val) begin cuatro a:= b + c Call uno (1) end cuatro begin uno c:= 2 b:= c if z>b then Call cuatro (c) end uno procedure tres begin es tr Call uno (c) c:= 5 end tres begin dos c:= 1 Call tres Call uno (c) end dos

El  compilador  y  el  lenguaje  tienen  las  siguientes características: 

• El  compilador no  realiza ninguna optimización,  lo cual  implica  que  todos  los  temporales  se  han  de almacenar en memoria 

• El  lenguaje  tiene  estructura  de  bloques  con  reglas de ámbito léxico y anidamiento 

• Las direcciones ocupan 2 bytes • Los enteros ocupan 4 bytes • Los parámetros  se pueden pasar por valor  (val) o 

por referencia (ref) • Todas las variables son de tipo entero. 

Se pide: 

a. Diseñar un Registro de Activación general para este lenguaje. 

b. Realizar  una  traza  de  ejecución  detallada  del fragmento  de  programa,  representando  todo  el contenido de la memoria. 

c. Escribir  el  código  intermedio de  3 direcciones y  el código  ensamblador  (comentado  y  detallando  las direcciones de las variables) que se generaría para la sentencia  “a:= b + c” que  aparece  en  el  fragmento de programa. 

Page 23: COMPILADORES - Departamento de Lenguajes y …pegaso.ls.fi.upm.es/~jfuertes/Documentos/Examenes.pdf · Construir el autómata y las acciones semánticas de un Analizador Léxico,

COOMPPILLADDOORREESS Primer parcial, 15 de junio de 2007

Observaciones: 1. Fecha estimada de publicación de las calificaciones: 2 de julio.   2. Fecha estimada de la revisión: 5 de julio.   3. En http://www-lt.ls.fi.upm.es/compiladores se avisará la fecha exacta de 

publicación de las calificaciones y la fecha y hora definitiva de la revisión.   4. La duración de este examen será de 2 horas.   5. Cada ejercicio deberá entregarse en hojas separadas. 

1. Un fragmento de un lenguaje tiene asignaciones con la siguiente estructura:

S → id := E E → id | cte_entera | cte_hora | E + E

• El nombre de un identificador empieza por una letra seguida, opcionalmente, por dígitos • La constante entera está formada por cualquier cantidad de dígitos • La constante de hora se  forma con  la hora,  los minutos y  los segundos separados entre sí por 

dos puntos  (‘:’). Representa una hora del día  (en  formato 24 horas) y el compilador necesita, para hacer  las operaciones, el número de segundos transcurridos desde  la media noche. Cada parte de esta constante debe tener obligatoriamente dos dígitos. Ejemplos: 07:30:59, 23:00:01. 

Se pide diseñar un Analizador Léxico para este lenguaje (gramática, tokens, autómata determinista, acciones semánticas y algunos mensajes de error). 

(4 puntos)

2. La  figura muestra un Autómata Reconocedor de Prefijos Viables de un SLR obtenido a partir de una gramática G1. El autómata no tiene errores, pero está incompleto. A partir del autómata, se pide: 

a. Definir  la  gramática  G1  que  da  lugar  a  ese  autómata  (G1  es  única  teniendo  en  cuenta  los supuestos del enunciado). 

b. Completar el autómata (dibujando los estados en la misma posición que se ve en la figura). 

Dada la siguiente gramática G2 en notación BNF que representa la declaración de un registro: 

S → reg id begin L end L → L ; D | D D → id : integer | id : string

Se pide:  c. Transformar esta gramática G2 para que sea LL. d. Definir  el  conjunto de procedimientos que  conforman  el Analizador Sintáctico Descendente Recursivo que reconoce el lenguaje definido por esta gramática G2. 

(6 puntos)

S’→ ● S S → ● A b C A → ● A → ● b d

A → b ● d

S → A ● b C

S → A b ● C C → ● c C → ● A b C → ● S A → ● A → ● b d S → ● A b C

S → A b C ●

C → A b ● S → A b ● C

C → A ● b S → A ● b C

Page 24: COMPILADORES - Departamento de Lenguajes y …pegaso.ls.fi.upm.es/~jfuertes/Documentos/Examenes.pdf · Construir el autómata y las acciones semánticas de un Analizador Léxico,

CCOOMMPPIILAADDOORRESS Examen final, 4 de septiembre de 2007

Observaciones:  1. Fecha estimada de publicación de las calificaciones: 17 de septiembre.   2. Fecha estimada de la revisión: 21 de septiembre.   3. En http://www-lt.ls.fi.upm.es/compiladores se avisará la fecha exacta de publicación 

de las calificaciones y la fecha y hora definitiva de la revisión.   4. La duración de este examen será de 3 horas.   5. Cada ejercicio deberá entregarse en hojas separadas.   6. Los dos ejercicios tienen la misma puntuación. 

1. Dada la siguiente gramática que representa las características léxicas y sintácticas de un lenguaje:

S F | A | R F for id := N to N do S A id := E R repeat S until C id L M L a | b | … | z | A | B | … | Z M L M | D M | λ N D | D N D 0 | 1 | … | 9 E E + E | E * E | id C id > id

Se pide: 

a. Diseñar el Analizador Léxico de un compilador para este lenguaje. 

b. Sin  modificar  las  reglas  de  la  gramática,  construir  la  tabla  del  Analizador  Sintáctico  de Precedencia de Operador para este lenguaje (justificando cómo se obtienen las relaciones). Explicar si hay o no algún conflicto (casilla con más de una relación) y por qué. En caso de que hubiera conflictos, resolverlos razonadamente sin modificar la gramática. 

c. Sólo  viendo  la  gramática,  sin  construir  ningún  autómata  ni  ninguna  tabla  de  analizador, contestar razonadamente a las siguientes preguntas: 

1) ¿Se podría construir para dicha gramática un SLR(1)? 2) ¿Se podría construir para dicha gramática un descendente tabular o LL(1)? 3) ¿Se podría construir para dicha gramática un descendente recursivo predictivo? 

2. De un lenguaje se ha extraído el siguiente fragmento de gramática: 

S id := E | if E then S1

E id | E1 ∈ I | E1 + E2 | C I (C1 , C2) C ent | real | – C1

Se  pide  diseñar  una Definición Dirigida  por  la  Sintaxis  con  el  Analizador  Semántico  y  el Generador de Código Intermedio teniendo en cuenta que: • Deben explicarse brevemente los atributos y funciones utilizadas. • El lenguaje no realiza conversiones automáticas de tipos. • El lenguaje tiene variables enteras, reales y lógicas y se exige su declaración. • El lenguaje sólo permite aplicar el operador + a operandos numéricos. • El intervalo I debe tener el primer valor menor que el segundo y ambos han de ser del mismo 

tipo. • La expresión E1 ∈ I devuelve cierto si el valor de la expresión E1 pertenece al intervalo abierto 

I (excluidos los dos extremos del intervalo).  • Los valores lógicos tienen que representarse numéricamente. 

Page 25: COMPILADORES - Departamento de Lenguajes y …pegaso.ls.fi.upm.es/~jfuertes/Documentos/Examenes.pdf · Construir el autómata y las acciones semánticas de un Analizador Léxico,

CCOOMPPILLAADOOREES Examen del primer parcial. 12 de febrero de 2008 

Observaciones: 1. Las calificaciones del primer parcial se publicarán aproximadamente a mediados de marzo. Se avisará en http://www-lt.ls.fi.upm.es/compiladores. 

  2. La duración de este examen será de 2½ horas.   3. Cada ejercicio deberá entregarse en hojas separadas. 

1. La Biblioteca de la Facultad de Informática quiere crear una aplicación para almacenar en su  Base  de  Datos  toda  la  información  sobre  los  Trabajos  Fin  de  Carrera  que  tiene almacenados en un fichero XML. El formato de los datos en este fichero es el siguiente: 

<tfc> <autor>Luis Gómez y Villalonga de Pi</autor> <fecha_nac>18/05/85</fecha_nac> <titulo_tfc>Diseño 3o de un Reconocedor de TFC’s </titulo_tfc> <tutor> Mariam Heras</tutor> <nota>sobresaliente 9</nota>

</tfc>

Deben tenerse en cuenta las siguientes características del formato del fichero: 

• El título admite todo tipo de caracteres excepto el signo menor (“<”). El título de un TFC siempre empieza por una letra. 

• La nota numérica puede ir de 0 a 10 y puede estar escrita con un decimal. • La nota no numérica  será una de  las palabras:  {“matrícula”,  “sobresaliente”, 

“notable”, “aprobado”, “suspenso”}. • En  un  TFC  puede  aparecer  solo  un  tipo  de  nota  o  ambas  y,  en  este  caso,  en 

cualquier orden. • Las etiquetas XML son de dos tipos: de apertura y de cierre. Cada etiqueta contiene 

una palabra encerrada entre “<” y “>”; las de cierre llevan, además, el símbolo “/”. • Existe una tabla que contiene todas las palabras clave de las etiquetas XML válidas: 

{“tfc”, “autor”, “fecha_nac”…}. Las palabras sólo contienen letras y subrayados. • Las fechas deben tener dos dígitos para el día, dos para el mes y dos para el año, y 

debe ser una fecha correcta. En la Base de Datos se almacenará como cadena. 

Se pide  construir un Analizador Léxico para  este  lenguaje  (tokens, gramática,  autómata finito determinista y acciones semánticas). 

(5,5 puntos) 

2. Sea la siguiente gramática: 

S 0 A A 0 | 1 A 1 | λ A B | C B 0 1 | 1 0 C 0 0 | 1 1 

Se pide: a. Comprobar las Condiciones LL (1). Si no es LL (1), transformar la gramática para que 

lo sea. b. Construir el Analizador Sintáctico Descendente Predictivo Recursivo. c. Construir la tabla del Analizador Sintáctico Descendente LL (1). d. Analizar  la  cadena  “001100”  con  el Analizador  no  recursivo. Dibujar  su  árbol  de 

análisis sintáctico y dar el análisis o parse correspondiente. (4,5 puntos) 

Page 26: COMPILADORES - Departamento de Lenguajes y …pegaso.ls.fi.upm.es/~jfuertes/Documentos/Examenes.pdf · Construir el autómata y las acciones semánticas de un Analizador Léxico,

CCOOMPPILLAADOOREES Examen final. Segundo parcial. 12 de febrero de 2008 

Observaciones: 1. Se estima que se publicarán las notas del examen final a partir del 26 de febrero, siendo la revisión al menos 2 días después. Las fechas exactas se avisarán en http://www-lt.ls.fi.upm.es/compiladores. 

  2. La duración de este examen será de 2 horas.   3. Cada ejercicio deberá entregarse en hojas separadas. 

1.  Sea el siguiente fragmento de un programa correcto: 

… Procedure otro

Var x Procedure uno (Ref p) // parámetro por referencia Var h Procedure otro Begin otro

p:= h + 3 Call uno (p + 1)

End otro Begin uno

If x > 5 Then Return h:= x + p If p > 4 Then p:= p – 1 Call uno (p) Else Call otro

End uno Begin otro

x:= 5 Call uno (x)

End otro …

Se pide, teniendo en cuenta que las variables y las direcciones ocupan 2 bytes: a. Diseñar el Registro de Activación general para este lenguaje. b. Realizar una traza de ejecución del programa representando el contenido completo de 

la pila. c. Escribir cuál sería el código intermedio y el código final (detallando todos los accesos 

a memoria)  que  se  obtendría  para  la  sentencia  h:= x + p que  se  encuentra  en  el procedimiento uno. 

(4,5 puntos) 

2.  De una gramática se han entresacado las siguientes reglas: 

S Repeat S while E | Add E to id | Move E to id E E ≅ E | id | real

Teniendo en cuenta que las variables pueden ser lógicas o reales, que no existe conversión automática de tipos, que hay que representar los valores lógicos por control de flujo, que la  operación Add  se  realiza  sólo  entre  reales  y  que  el  operador  ≅  se  aplica  sobre  reales evaluándose como cierto si sus operandos son aproximadamente iguales (se diferencian en menos  de  2  décimas),  se  pide  construir  una Definición Dirigida  por  la  Sintaxis  para realizar  el  Análisis  Semántico  y  la  Generación  de  Código  Intermedio  (explicando brevemente los atributos y funciones utilizadas). 

(5,5 puntos) 

Page 27: COMPILADORES - Departamento de Lenguajes y …pegaso.ls.fi.upm.es/~jfuertes/Documentos/Examenes.pdf · Construir el autómata y las acciones semánticas de un Analizador Léxico,

CCOOMMPPIILLAADDOORREESS Segundo parcial, 30 de junio de 2008

1.  Fecha estimadas: publicación de las calificaciones: 11 de julio; revisión: 15 de julio. En http://www-lt.ls.fi.upm.es/compiladores se avisarán las fechas exactas. 

2.  La duración de este examen será de 2 horas. 3.  Cada ejercicio deberá entregarse en hojas separadas. 

1. De un lenguaje se ha extraído el siguiente fragmento de gramática: 

S → id := E E → id | E ⇐ E | E & E

Téngase en cuenta que: • El lenguaje intermedio a utilizar (código de 3 direcciones) no dispone de operadores lógicos. • El lenguaje tiene tipos entero y lógico y no realiza conversiones de tipos. • Deben explicarse brevemente los atributos y funciones utilizadas. • La tabla de verdad de los operadores lógicos del código fuente es la siguiente: 

V V F F V F V F ⇐ V V F V & V F F F

a. Diseñar un Esquema de Traducción para  el Analizador Semántico y  el Generador de Código  Intermedio representando los valores lógicos por control de flujo. 

b. Diseñar una Definición Dirigida por la Sintaxis para el Generador de Código Intermedio representando los valores lógicos numéricamente. 

(5,5 puntos)

2. Sea el siguiente fragmento de un programa escrito en un determinado lenguaje: Global a: Entero Proc Prueba

b: Matriz [1:5] de Entero

Proc P1 (Ref x: Entero; y: Real; Ref z: Matriz [1:5] Entero) Inicio P1 Si x - y < 1 Entonces a:= a + 1 z[x]:= a Fin P1

Proc (Ref x: Entero; y: Matriz [1:5] de Entero) P2 Local i: Entero Proc P3 (z: Entero) Local f: Real Inicio P3 f:= z / 2.0 Llama P1 (z, f, y) Fin P3 Inicio P2 Desde i:= 1 Hasta x Haz Llama P3 (y[i]) a:= y[1] + y[2] + 2

Fin P2 Inicio Prueba a:= 2; b:= [1, 2, 3, 4, 5] Llama P2 (a, b) Fin Prueba

Imprime (a)

Se pide: 

a. Diseñar un Registro de Activación general para este lenguaje. b. Realizar  la  traza  de  ejecución  detallada  del  fragmento  de 

programa dado, representando todo el contenido de la memoria e indicando lo que imprime el programa. 

c. ¿Qué pasaría si en el cuerpo del programa Prueba se sustituye  la llamada a P2 (a, b) por P3 (a, b)? 

El  compilador  y  el  lenguaje  tienen  las siguientes características: 

• El  compilador  no  realiza  ninguna optimización. Todos  los  temporales se han de almacenar en memoria 

• El lenguaje tiene recursividad • El  lenguaje  tiene  estructura  de 

bloques con reglas de ámbito léxico y anidamiento 

• Las  direcciones  y  los  enteros ocupan 2 bytes 

• Los reales ocupan 4 bytes • Los  parámetros  se  pueden  pasar 

por  referencia  (Ref) o por valor  (si no se especifica nada) 

• Las  expresiones  lógicas  tienen evaluación perezosa  (cortocircuito), lo  cual  implica  que  los  valores lógicos  se  representan  por  control de flujo 

• El  lenguaje  solo  dispone  de procedimientos. 

 

(4,5 puntos)

Page 28: COMPILADORES - Departamento de Lenguajes y …pegaso.ls.fi.upm.es/~jfuertes/Documentos/Examenes.pdf · Construir el autómata y las acciones semánticas de un Analizador Léxico,

CCOOMPILLADDOOREES Primer parcial, 30 de junio de 2008

1.  Fecha estimadas: publicación de las calificaciones: 11 de julio; revisión: 15 de julio. En http://www-lt.ls.fi.upm.es/compiladores se avisarán las fechas exactas. 

2.  La duración de este examen será de 2 horas. 3.  Cada ejercicio deberá entregarse en hojas separadas. 

1. Se tiene un lenguaje con identificadores y números:

• Los números pueden ser enteros o reales, y pueden todos llevar el punto de millar (sólo en  la parte  entera y  correctamente  colocado). Por  ejemplo,  son  correctos:  “1234567”, “1.234.567”; son incorrectos: “1234.567”, “123.456.7”. 

• Los  reales  llevan  coma  decimal  y  pueden  no  tener  parte  entera  o  parte  fraccionaria (pero han de  llevar al menos una de  las dos). Por ejemplo, son correctos: “1,2”, “1,”, “,1”, “12.345,67”; son incorrectos: “,”, “12,345.67”. 

• Los  identificadores pueden estar formados por  letras, dígitos y guiones bajos, pero no pueden  empezar  ni  terminar  por  guión  bajo,  ni  llevar  dos  guiones  seguidos,  y, obligatoriamente  han  de  contener  alguna  letra.  Por  ejemplo,  son  correctos:  “abc”, “123a”, “a_b”; son incorrectos: “_a”, “a_”, “a___b”, “1_2”, “369”. 

Se  pide  diseñar  un Analizador  Léxico  para  este  lenguaje  (gramática,  tokens,  autómata determinista, acciones semánticas y algunos mensajes de error). 

(4,5 puntos)

2. Se tiene la siguiente gramática: 

S if E then S | R = E E E + T | T T id R id

Se pide:  a. Demostrar si es válida (construyendo la tabla) para un SLR(1). Si no lo fuera, modificar 

la gramática para que lo sea. b. Demostrar  si  es  válida  para  construir  un  Analizador  Sintáctico  Descendente Predictivo. Si no lo fuera, modificar la gramática para que lo sea y demostrarlo. 

(5,5 puntos)

Page 29: COMPILADORES - Departamento de Lenguajes y …pegaso.ls.fi.upm.es/~jfuertes/Documentos/Examenes.pdf · Construir el autómata y las acciones semánticas de un Analizador Léxico,

CCOOMMPPIILLAADDOORREESS Examen final, 4 de septiembre de 2008

Observaciones:  1. Fecha estimada de publicación de las calificaciones: 16 de septiembre.   2. Fecha estimada de la revisión: 18 de septiembre.   3. En http://www‐lt.ls.fi.upm.es/compiladores se avisará la fecha exacta de publicación de 

las calificaciones y la fecha y hora definitiva de la revisión.   4. La duración de este examen será de 2 ¾ horas.   5. Cada ejercicio deberá entregarse en hojas separadas. 

1. Dada la siguiente gramática:

S A B A B C | k C B C D | λ D k B C + A

Se pide: a. Realizar el Autómata Reconocedor de Prefijos Viables (correspondiente al análisis LR) en la

plantilla adjunta (ésta contiene un número reducido de errores: pueden faltar o sobrar elementos).

b. Comprobar sobre el autómata si existen conflictos. c. Comprobar si la gramática cumple las condiciones LL(1). d. Independientemente de las respuestas a las dos cuestiones anteriores, ¿presenta la gramática

algún problema adicional para la construcción de un Analizador Sintáctico? (3.75 puntos)

2. De un lenguaje se ha extraído el siguiente fragmento de gramática:

S → while E do id := E E → id | not E | E ⇔ E | E ? E : E

Se pide diseñar un Esquema de Traducción para el Analizador Semántico y el Generador de Código Intermedio representando los valores lógicos numéricamente. Téngase en cuenta que: • El lenguaje dispone de tipos enteros, reales y lógicos, y no admite conversión entre tipos. • El operador lógico ⇔ devuelve cierto sólo si sus operandos son iguales. • La operación E1 ? E2 : E3 tiene el siguiente significado: si E1 es cierta, la operación devuelve

E2; si es falsa, devuelve E3 (estas dos últimas expresiones pueden ser de cualquiera de los tres tipos).

• El código de 3 direcciones no dispone de operadores lógicos. • Deben explicarse brevemente los atributos y funciones utilizadas.

(3.75 puntos)

3. Programar (en pseudocódigo) el fragmento del Generador de Código Objeto que se encarga de la traducción de las sentencias call del lenguaje intermedio (tres direcciones) a código objeto (ensamblador). Téngase en cuenta que se trata de un compilador para un lenguaje que admite recursividad, anidamiento de procedimientos, dispone sólo del tipo entero y tiene paso de parámetros por valor. Los Registros de Activación se almacenarán en pila. Un entero ocupa 4 bytes y una dirección 2 bytes.

Dibujar un esquema del diseño general del Registro de Activación utilizado (especificando el contenido y la posición del puntero de pila).

(2.5 puntos)

Page 30: COMPILADORES - Departamento de Lenguajes y …pegaso.ls.fi.upm.es/~jfuertes/Documentos/Examenes.pdf · Construir el autómata y las acciones semánticas de un Analizador Léxico,

S →

A ●

B

B

+

C

I 3

I 0I 2

I 4

k

I 6

I 7 I 5

I 8 I 9

I 11

I 12

I 13

Co

mp

ilad

ore

sC

om

pil

ad

ore

s4

-sep

tiem

bre

-20

08

, Eje

rcic

io 1

.aH

oja

de

Res

pues

ta

Ape

llidos

: ....

......

......

......

......

......

......

......

......

......

......

......

......

......

......

......

...

Nom

bre:

.....

......

......

......

......

......

......

......

......

......

......

......

......

......

......

......

....

I 15

Page 31: COMPILADORES - Departamento de Lenguajes y …pegaso.ls.fi.upm.es/~jfuertes/Documentos/Examenes.pdf · Construir el autómata y las acciones semánticas de un Analizador Léxico,

CCOOMPPILLAADOOREES Examen del primer parcial. 6 de febrero de 2009 

Observaciones: 1. Las calificaciones del primer parcial se publicarán en la primera quincena de marzo, siendo la revisión al menos 2 días después. Las fechas exactas se avisarán en http://www-lt.ls.fi.upm.es/compiladores. 

  2. La duración de este examen será de 2 horas.   3. Cada ejercicio deberá entregarse en hojas separadas. 

1. Un lenguaje tiene los siguientes elementos: 

• Operadores aritméticos: +, -, *, /, ** • Operadores lógicos: .AND., .OR., .NOT. • Identificadores que comienzan por una letra y van seguidos de un máximo de 7 letras o 

dígitos • Palabras reservadas en mayúsculas, como IF, THEN, FOR, WHILE, INTEGER… • Números reales según la expresión regular: d*.d+ 

Teniendo en cuenta que el lenguaje distingue mayúsculas de minúsculas, se pide construir un Analizador Léxico para este lenguaje (tokens, gramática, autómata finito determinista y acciones semánticas). 

(4 puntos) 

2. Sea la siguiente gramática: 

E T R R + T R | - T R | λ T id

Se pide: a. Construir las tablas de un analizador sintáctico SLR, dando también el autómata en la 

plantilla adjunta (plantilla que contiene errores y está incompleta). b. Construir la tabla de un analizador sintáctico LL(1). c. Contestar brevemente  a  las  siguientes preguntas  tanto para  el SLR  como para  el LL 

según  las  respuestas de  los apartados a y b. Si alguna de ellas no  tiene  sentido para alguno de los analizadores, explicar la razón: 1. ¿En qué casos podría haber conflictos? Estudiar cada uno de esos casos y decir si 

hay o no conflicto. 2. ¿Es válida la gramática para ese tipo de analizadores o aparece algún problema? 3. ¿Cómo se sabe en el estado I2 cuál de las reglas de R hay que aplicar? 4. ¿Cómo se sabe si la regla R + T R se aplica en el estado I2, en el I7 ó en el I8? 5. ¿Hay problema con la recursividad de R + T R y R - T R? En caso afirmativo, 

decir cuál y si se puede resolver de alguna manera. 6. ¿En algún caso se puede aplicar  la regla R λ? En caso afirmativo, decir cuándo; 

en caso negativo, explicar cuál es el problema. 7. ¿Cómo  sabe  el  analizador  en  un  momento  dado  si  tiene  que  aplicar  la  regla 

R + T R o la regla R - T R? 8. ¿Qué hace el analizador cuando R está en la cima de la pila e id en la entrada? 

(6 puntos) 

Page 32: COMPILADORES - Departamento de Lenguajes y …pegaso.ls.fi.upm.es/~jfuertes/Documentos/Examenes.pdf · Construir el autómata y las acciones semánticas de un Analizador Léxico,

CCOOMPPILLAADOOREES Examen final. Segundo parcial. 6 de febrero de 2009 

Observaciones: 1. Se estima que se publicarán las notas del examen final a partir del 20 de febrero, siendo la revisión al menos 2 días después. Las fechas exactas se avisarán en http://www-lt.ls.fi.upm.es/compiladores. 

  2. La duración de este examen será de 2 horas.   3. Cada ejercicio deberá entregarse en hojas separadas. 

1.  De una gramática se han entresacado las siguientes reglas: 

S id := E E id ( L ) | id | E * E L E | λ

Las variables son enteras y reales, no hay conversión automática de  tipos e  id (L) puede representar una  llamada a una  función  (con uno o ningún parámetro) o un acceso a un elemento  de  un  vector  (siendo  necesario  indicar  el  índice).  Se  pide  construir  una Definición Dirigida por la Sintaxis para realizar el Análisis Semántico y la Generación de Código Intermedio (explicando brevemente los atributos y funciones utilizadas). 

(6 puntos) 

2.  Sea el siguiente programa: 

Program Cálculo-día Type fecha: Record= día: integer, mes: integer, año: integer; Global t, a: integer hoy: fecha Procedure P-año (Ref z: fecha) /* parámetro por referencia Begin P-año z.año:= z.año + 1 End P-año Procedure P-mes (Ref b: integer; Ref x: fecha) /* parámetros por referencia Procedure P-día () Begin P-día While ((a / t) > 8) Do a:= a - t Call P-año (x) End While x.día:= x.día + 1; End P-día Begin P-mes If ((a / t) < x.mes) Then x.mes:= a / t Else Call P-día () End P-mes Begin Cálculo-día a:= 300 t:= 30 hoy.día:= 6 hoy.mes:= 2 hoy.año:= 2009 Call P-mes (a, hoy) Imprime (hoy.día, hoy.mes, hoy.año) End Cálculo-día

Teniendo en cuenta que los enteros y las direcciones ocupan 2 bytes, se pide: a. Diseñar el Registro de Activación general para este lenguaje. b. Realizar una traza de ejecución del programa representando el contenido completo de 

la pila e indicando el resultado de la sentencia “Imprime”. (4 puntos) 

Page 33: COMPILADORES - Departamento de Lenguajes y …pegaso.ls.fi.upm.es/~jfuertes/Documentos/Examenes.pdf · Construir el autómata y las acciones semánticas de un Analizador Léxico,

TR

+

λT

I 0

I 2

I 7

I 8

Co

mp

ilad

ore

sC

om

pil

ad

ore

s 6

-feb

rero

-20

09

, Eje

rcic

io 2

.a

Hoja

de

Res

pues

ta

Ape

llidos

: ....

......

......

......

......

......

......

......

......

......

......

......

......

......

......

......

......

......

.

Nom

bre:

.....

......

......

......

......

......

......

......

......

......

......

......

......

......

......

......

......

......

..

id

+

+-

Page 34: COMPILADORES - Departamento de Lenguajes y …pegaso.ls.fi.upm.es/~jfuertes/Documentos/Examenes.pdf · Construir el autómata y las acciones semánticas de un Analizador Léxico,

CCOOMMPPIILLAADDOORREESS Segundo parcial, 22 de junio de 2009

Observaciones: 1. Fecha estimada de publicación de las calificaciones: 9 de julio.   2. Fecha estimada de la revisión: 13 de julio.   3. En http://www-lt.ls.fi.upm.es/compiladores se avisará la fecha exacta de 

publicación de las calificaciones y la fecha y hora definitiva de la revisión.   4. La duración de este examen será de 2 horas.   5. Cada ejercicio deberá entregarse en hojas separadas. 

1. De un lenguaje se ha extraído el siguiente fragmento de gramática: 

S → id := E | if ( E ) then S | switch ( E ) { L } | S ; S L → case C : S ; L | λ E → C | id | E oprel E | E + E C → cte | cte : cte : cte

Se  pide  diseñar  el  Analizador  Semántico  construyendo  una  Definición  Dirigida  por  la  Sintaxis. Téngase en cuenta que: • El lenguaje define las constantes enteras y el tipo entero con 2 bytes • La expresión de la sentencia if ha de ser lógica • La máquina objeto dispone de enteros de 2 y 4 bytes • La sentencia switch admite como expresión un entero o una hora • Las constantes de tipo hora (cte : cte : cte) deben ser correctas • Las horas se tienen que almacenar internamente como el número de segundos transcurridos desde la media noche 

• No hay conversiones automáticas de tipos • Se admiten operaciones de comparación y de suma entre enteros y horas. 

(6 puntos)

2. Sea el siguiente fragmento de un programa:

Program Main Var i: Integer Function A (Ref x: Integer) Procedure B (Ref y: Integer) Var j: integer Begin B If Then Return (y <= 0) Else Begin y:=y-2 :=y-1 i End j:=A (i) End B Begin A x:=x-1 B (x) Return 2*x End A Begin Main i:= 2 i:= A (A (i)) IEnd Main

mprime (i)

El compilador y el lenguaje tienen las siguientes características: 

• El  compilador  no  realiza  ningún  tipo  de optimización 

• El lenguaje tiene estructura de bloques • El modo de paso de  los parámetros  es por 

referencia • Las enteros y las direcciones ocupan 2 bytes 

Se pide: a. Diseñar  el  Registro  de  Activación  general 

para este lenguaje. b. Realizar  una  traza  de  ejecución  del 

programa  representando  el  contenido completo de la pila, e indicando el resultado de la sentencia “Imprime”. 

 (4 puntos)

Page 35: COMPILADORES - Departamento de Lenguajes y …pegaso.ls.fi.upm.es/~jfuertes/Documentos/Examenes.pdf · Construir el autómata y las acciones semánticas de un Analizador Léxico,

CCOOMMPPIILLAADDOORREESS Primer parcial, 22 de junio de 2009

Observaciones: 1. Fecha estimada de publicación de las calificaciones: 9 de julio.   2. Fecha estimada de la revisión: 13 de julio.   3. En http://www-lt.ls.fi.upm.es/compiladores se avisará la fecha exacta de 

publicación de las calificaciones y la fecha y hora definitiva de la revisión.   4. La duración de este examen será de 1½ horas.   5. Cada ejercicio deberá entregarse en hojas separadas.   6. Los dos ejercicios tienen la misma puntuación. 

1. Se tiene un lenguaje en el que hay identificadores, palabras reservadas, números enteros, operadores aritméticos de suma y resta y lo que se explica a continuación:

• Los  identificadores  están  formados  por  letras  y  tienen  una  longitud máxima  de  6 caracteres. Si empiezan por alguna de las letras I, J, K, L, M, N son enteros salvo que se declaren explícitamente de otro tipo. 

• La declaración explícita de un identificador se construye con la palabra reservada que indica  el  tipo  (REAL,  INTEGER  o  CHARACTER *long),  seguida  de  la  lista  de identificadores  separados  por  comas.  En  la  declaración  de  una  variable  de  tipo carácter, se indica la longitud de la variable con un asterisco y un número entero de no más de 3 dígitos (debe ser una comprobación léxica). 

• Las palabras reservadas están formadas por letras. • Los números pueden ser positivos y negativos. 

Se pide: 

a. Construir  el Analizador  Léxico  para  este  lenguaje  (Gramática  Regular,  tokens, AFD, Acciones Semánticas e indicar 5 posibles casos de error), teniendo en cuenta que se debe introducir en la Tabla de Símbolos toda la información posible. 

b. Si  el  lenguaje  tuviera  también  la  operación  de  producto,  ¿qué  cambios  habría  que realizar en el diseño de este Analizador Léxico? 

 

2. Sea la siguiente gramática:

S → while COND do CUERPO end | goto id | λ COND → id CUERPO → begin REST end REST → S REST | λ

Se pide: a. Completar  en  la  plantilla  adjunta  el  Autómata  Reconocedor  de  Prefijos  Viables 

(método SLR). La plantilla puede contener errores y/o omisiones. b. Analizar  la  posible  existencia  de  conflictos  en  el  autómata  anterior.  Si  hay  algún 

conflicto, plantear una  sentencia donde,  caso de usarse dicho autómata,  se  llegaría a una situación de conflicto y explicar por qué se produce. 

Page 36: COMPILADORES - Departamento de Lenguajes y …pegaso.ls.fi.upm.es/~jfuertes/Documentos/Examenes.pdf · Construir el autómata y las acciones semánticas de un Analizador Léxico,

Co

mp

ilad

ore

sC

om

pil

ad

ore

s2

2-j

un

io-2

00

9,

Eje

rcic

io 2

.aH

oja

de

Res

pues

ta

Ape

llidos

: ....

......

......

......

......

......

......

......

......

......

......

......

......

......

......

......

...

Nom

bre:

.....

......

......

......

......

......

......

......

......

......

......

......

......

......

......

......

....

I 0

I 1

I 2

I 4 I 7

I 5

I 11

I 12

I 13

I 15

I 9

I 2I 3

I 14

I 8 I 10

Page 37: COMPILADORES - Departamento de Lenguajes y …pegaso.ls.fi.upm.es/~jfuertes/Documentos/Examenes.pdf · Construir el autómata y las acciones semánticas de un Analizador Léxico,

CCOOMMPPIILLAADDOORREESS Examen final, 1 de septiembre de 2009

Observaciones: 1. Fecha estimada de publicación de las calificaciones: 15 de septiembre. Fecha estimada de la revisión: 17 de septiembre. En http://www-lt.ls.fi.upm.es/compiladores se avisará la fecha exacta de publicación de las calificaciones y la fecha y hora definitiva de la revisión.

  4. La duración de este examen será de 2¼ horas.   5. Cada ejercicio deberá entregarse en hojas separadas. 

1. La descripción de un fragmento de un lenguaje de programación viene dada por: (3 puntos) S id = E | if ( E ) then S | switch ( E ) { L } | S ; S E C | id | E oprel E | E + E C cte | cte:cte:cte cte dígito dígitos dígito 0 | 1 | … | 9 digitos dígito dígitos | λ id letra letras letra a | b | c | … | z | A | B | C | … | Z letras letra letras | λ L case C = S ; L | λ oprel <> | =

Se pide diseñar un Analizador Léxico (gramática regular, tokens, autómata finito determinista, acciones semánticas) correspondiente a dicho lenguaje. El lenguaje presenta las siguientes características: • El lenguaje define las constantes enteras y el tipo entero con 2 bytes • La expresión de la sentencia if ha de ser lógica • La máquina objeto dispone de enteros de 2 y 4 bytes • La sentencia switch admite como expresión un entero o una hora • Las constantes de tipo hora (cte:cte:cte) deben representar horas correctas (dando un error léxico en caso

contrario), y cada parte de la hora debe ir escrita con dos dígitos • Las horas tienen que almacenarse internamente como el número de segundos transcurridos desde la media noche • Las palabras clave del lenguaje son reservadas • Los elementos pueden ir separados por delimitadores • No hay conversión automática de tipos • Se admiten operaciones de comparación y de suma entre enteros y horas

2. Sea la siguiente gramática:  (3 puntos) S begin DEF end DEF Deffuente DEF | Defvector DEF | Defestilo DEF | λ Deffuente fuente id Defvector vector integer : integer Defestilo estilo integer

a. Demostrar que se trata de una gramática LL, válida para construir un Analizador Descendente LL(1). b. Construir la tabla del Analizador Sintáctico Descendente LL. c. Definir una gramática equivalente a la anterior, pero que no sea LL, presentando al menos recursividad por la izquierda y no estando factorizada. d. Construir la tabla de Precedencia de Operador y razonar si la siguiente gramática es válida o no para construir un Analizador Sintáctico con este método. Para construir la tabla de precedencia, deben colocarse primero los operadores y a continuación las letras, según su orden de aparición en la gramática:

S A * B + B | B + A * A A a + a B b * b

3. Dado el siguiente fragmento de gramática de un lenguaje: (4 puntos) S id := E E id (L) | id L E, L | E

donde id(L) puede ser una llamada a función o el acceso a un elemento de un vector unidimensional de índices enteros. Teniendo en cuenta que no hay conversiones automáticas de tipos y que todo identificador tiene que estar declarado previamente, se pide diseñar una Definición Dirigida por la Sintaxis con el Comprobador de Tipos y el Generador de Código Intermedio (código de 3 direcciones).

Page 38: COMPILADORES - Departamento de Lenguajes y …pegaso.ls.fi.upm.es/~jfuertes/Documentos/Examenes.pdf · Construir el autómata y las acciones semánticas de un Analizador Léxico,

CCOOMMPPIILLAADDOORREESS Examen del primer parcial. 11 de febrero de 2010 

Observaciones: 1. Las calificaciones del primer parcial se publicarán aproximadamente a mediados de marzo. Se avisará en http://www-lt.ls.fi.upm.es/compiladores. 

  2. La duración de este examen será de 1¾ horas.   3. Cada ejercicio deberá entregarse en hojas separadas.   4. Los dos ejercicios tienen la misma puntuación. 

1. Se tiene un lenguaje con números, constantes de tipo cadena, variables y una serie de operadores y que no cuenta con conversión automática de tipos. Todos los elementos del lenguaje tienen que ir separados obligatoriamente por al menos un delimitador. 

Los números pueden ser tanto enteros como reales. Los números enteros están formados por una secuencia de dígitos. Los números  reales han de  llevar un punto  (“.”) y pueden no  tener parte entera,  pero  han  de  tener  obligatoriamente  parte  real  (son  correctos,  por  ejemplo,  “.67”  y “128.6”, pero no “14.”). 

Las constantes de tipo cadena van encerradas entre comillas dobles ("). Dentro de la cadena puede haber cualquier carácter excepto las propias comillas. 

Las  variables  pueden  ser  de  tipo  cadena,  vector,  entero  o  real.  El  lexema  de  la  variable  estará formado por una  combinación de  letras y dígitos de  cualquier  longitud, pero  siempre  tendrá al menos una letra. 

Los operadores del lenguaje son los siguientes:  • el operador de asignación (“=”), válido sólo entre expresiones del mismo tipo. • el operador de concatenación de cadenas (“.”), válido sólo para cadenas. • el operador de comparación entre números (“=”), válido sólo para números. • el operador de comparación entre cadenas (“==”), válido sólo para cadenas. 

Se  pide  construir  un  Analizador  Léxico  para  este  lenguaje  (tokens,  gramática,  autómata  finito determinista y acciones semánticas).  

2. Sea la siguiente gramática en EBNF inspirada en la sintaxis del lenguaje COBOL: 

S procedure division . [ DECLARACIONES ] { CUERPO }1 DECLARACIONES declaratives . { STRUCT use PÁRRAFO }1 end declaratives CUERPO id section . { PÁRRAFO }1 STRUCT id section number | λ PÁRRAFO number . SENTENCE SENTENCE goto id | evaluate id

Se pide: a. Realizar el diagrama de transición para las reglas de S, DECLARACIONES y SENTENCE. b. Definir  el programa del Analizador Sintáctico Descendente Predictivo Recursivo para  esta 

gramática, que es LL(1). Se deberá usar el siguiente procedimiento auxiliar: ComprobarToken (t: token) Begin If (t = SiguienteToken)

Then Leer (SiguienteToken) Else Error (t)

End

Nota 1: En  el  programa  se  puede abreviar  el  nombre  de  la función ComprobarToken por CT  y  el  nombre de  la  variable SiguienteToken por ST. 

Nota 2: En la notación EBNF, el significado de los meta‐símbolos es el siguiente: • [ ]: Opcional • { }1: Repetitiva de 1 a n veces 

Page 39: COMPILADORES - Departamento de Lenguajes y …pegaso.ls.fi.upm.es/~jfuertes/Documentos/Examenes.pdf · Construir el autómata y las acciones semánticas de un Analizador Léxico,

CCOOMMPPIILLAADDOORREESS Examen final. Segundo parcial. 11 de febrero de 2010 

Observaciones: 1. Se estima que se publicarán las notas del examen final el 22 de febrero, siendo la revisión el 2 de marzo. Las fechas exactas se avisarán en http://www-lt.ls.fi.upm.es/compiladores. 

  2. La duración de este examen será de 2¼  horas.   3. Cada ejercicio deberá entregarse en hojas separadas. 

1.  De una gramática de un lenguaje se han entresacado las siguientes reglas: P D ; S D T : V | D ; D T integer | logical | time V id , V | id S id := E E C | id | E O E | E + E C cte | cte : cte : cte O < | > | = | <>

Se pide construir una Definición Dirigida por la Sintaxis para realizar el Análisis Semántico y la Generación de Código Intermedio  (explicando brevemente  los atributos y  funciones utilizadas), teniendo en cuenta que: • El lenguaje dispone de constantes enteras (cte) y constante de tipo hora (cte:cte:cte) • El lenguaje tiene conversiones de tipo automáticas entre enteros, lógicos y horas • Si los sumandos son de distinto tipo, el resultado de la suma es entero; si los sumandos son del 

mismo tipo, el resultado conserva el tipo de los sumandos • Las constantes de  tipo hora deben ser correctas y se almacenan  internamente como un valor 

entero que representa el número de segundos transcurridos desde la media noche • Los enteros se representan con 4 bytes y los lógicos con 1 byte • En  las  expresiones  lógicas,  el  valor  0  se  considera  como  falso  y  cualquier  otro  valor  como 

verdadero. (6 puntos) 

2.  Sea el siguiente programa correcto: 

Program QR Procedure Main Var a:= 3, b:= 5: integer; Procedure Q; Var b: integer; BEGIN Q a:= a - 1; b:= a; IF b > 0 THEN R (a); END Q; Procedure R (b: integer); BEGIN R b:= b - a; Q; END R; BEGIN Main Q; PRINT (a); PRINT (b); END Main; BEGIN QR Main; END QR.

Teniendo  en  cuenta  que  se  trata  de  un compilador de dos pasadas, que los enteros y las direcciones  ocupan  2 bytes, que  las  expresiones lógicas  se  representan  mediante  la  técnica  de flujo de control, que  se utiliza una estrategia de asignación  de memoria mediante  pila  y  que  el lenguaje  sigue  las  reglas  de  ámbito  léxico,  se pide: a. Diseñar  el  Registro  de  Activación  general 

para este lenguaje. b. Realizar  la  traza de  ejecución del programa 

representando  el  contenido  completo  de  la memoria,  indicando  el  resultado  de  las sentencias “PRINT”. Se realizará  la traza dos veces,  considerando,  primero,  el  paso  de parámetros por referencia y, después, el paso de parámetros por valor. 

 (4 puntos)