Sei sulla pagina 1di 85

C CO OM MP PI IL LA AD DO OR RE ES S

Examendelprimerparcial.12defebrerode2008
Observaciones:1.Lascalificacionesdelprimerparcialsepublicarnaproximadamenteamediados
demarzo.Seavisarenht t p: / / www- l t . l s. f i . upm. es/ compi l ador es.
2.Laduracindeesteexamenserde2horas.
3.Cadaejerciciodeberentregarseenhojasseparadas.
1.LaBibliotecadelaFacultaddeInformticaquierecrearunaaplicacinparaalmacenaren
su Base de Datos toda la informacin sobre los Trabajos Fin de Carrera que tiene
almacenadosenunficheroXML.Elformatodelosdatosenesteficheroeselsiguiente:
<t f c>
<aut or >Lui s Gmez y Vi l l al onga de Pi </ aut or >
<f echa_nac>18/ 05/ 85</ f echa_nac>
<t i t ul o_t f c>Di seo 3
o
de un Reconocedor de TFC s </ t i t ul o_t f c>
<t ut or > Mar i amHer as</ t ut or >
<not a>sobr esal i ent e 9</ not a>
</ t f c>
Debentenerseencuentalassiguientescaractersticasdelformatodelfichero:
Elttuloadmitetodotipodecaracteresexceptoelsignomenor(<).Elttulodeun
TFCsiempreempiezaporunaletra.
Lanotanumricapuedeirde0a10ypuedeestarescritaconundecimal.
La nota no numrica ser una de las palabras: {mat r cul a, sobr esal i ent e,
not abl e,apr obado,suspenso}.
En un TFC puede aparecer solo un tipo de nota o ambas y, en este caso, en
cualquierorden.
LasetiquetasXMLsondedostipos:deaperturaydecierre.Cadaetiquetacontiene
unapalabraencerradaentre<y>;lasdecierrellevan,adems,elsmbolo/ .
ExisteunatablaquecontienetodaslaspalabrasclavedelasetiquetasXMLvlidas:
{t f c,aut or ,f echa_nac}.Laspalabrasslocontienenletrasysubrayados.
Lasfechasdebentenerdosdgitosparaelda,dosparaelmesydosparaelao,y
debeserunafechacorrecta.EnlaBasedeDatossealmacenarcomocadena.
Se pide construir un Analizador Lxico para este lenguaje (tokens, gramtica, autmata
finitodeterministayaccionessemnticas).
(5,5puntos)
2.Sealasiguientegramtica:
S 0 A A 0 | 1 A 1 |
A B | C
B 0 1 | 1 0
C 0 0 | 1 1
Sepide:
a. Comprobar lasCondicionesLL(1).SinoesLL(1),transformar lagramticapara que
losea.
b. ConstruirelAnalizadorSintcticoDescendentePredictivoRecursivo.
c. ConstruirlatabladelAnalizadorSintcticoDescendenteLL(1).
d. Analizar la cadena 001100 con el Analizador no recursivo. Dibujar su rbol de
anlisissintcticoydarelanlisisoparsecorrespondiente.
(4,5puntos)
C CO OM MP PI IL LA AD DO OR RE ES S
Examenfinal.Segundoparcial.12defebrerode2008
Observaciones:1.Seestimaquesepublicarnlasnotasdelexamenfinalapartirdel26de
febrero,siendolarevisinalmenos2dasdespus.Lasfechasexactasse
avisarnenht t p: / / www- l t . l s. f i . upm. es/ compi l ador es.
2.Laduracindeesteexamenserde2horas.
3.Cadaejerciciodeberentregarseenhojasseparadas.
1. Seaelsiguientefragmentodeunprogramacorrecto:

Pr ocedur e ot r o
Var x
Pr ocedur e uno ( Ref p) / / par met r o por r ef er enci a
Var h
Pr ocedur e ot r o
Begi n ot r o
p: = h + 3
Cal l uno ( p + 1)
End ot r o
Begi n uno
I f x > 5 Then Ret ur n
h:= x + p
I f p > 4 Then
p: = p 1
Cal l uno ( p)
El se
Cal l ot r o
End uno
Begi n ot r o
x: = 5
Cal l uno ( x)
End ot r o

Sepide,teniendoencuentaquelasvariablesylasdireccionesocupan2bytes:
a. DisearelRegistrodeActivacingeneralparaestelenguaje.
b. Realizarunatrazadeejecucindelprogramarepresentandoelcontenidocompletode
lapila.
c. Escribirculseraelcdigointermedioyelcdigofinal(detallandotodoslosaccesos
a memoria) que se obtendra para la sentencia h: = x + p que se encuentra en el
procedimientouno.
(4,5puntos)
2. Deunagramticasehanentresacadolassiguientesreglas:
S Repeat S while E | Add E to id | Move E to id
E E E | id | real
Teniendoencuentaquelasvariablespuedenserlgicasoreales,quenoexisteconversin
automticade tipos, que hayquerepresentarlosvaloreslgicosporcontroldeflujo,que
la operacin Add se realiza slo entre reales y que el operador se aplica sobre reales
evalundosecomociertosisusoperandossonaproximadamenteiguales(sediferencianen
menos de 2 dcimas), se pide construir una Definicin Dirigida por la Sintaxis para
realizar el Anlisis Semntico y la Generacin de Cdigo Intermedio (explicando
brevementelosatributosyfuncionesutilizadas).
(5,5puntos)
C CO OM MP PI IL LA AD DO OR RE ES S
Segundo parcial, 30 de junio de 2008
1. Fechaestimadas:publicacindelascalificaciones:11dejulio;revisin:15dejulio.En
http://www-lt.ls.fi.upm.es/compiladoresseavisarnlasfechasexactas.
2. Laduracindeesteexamenserde2horas.
3. Cadaejerciciodeberentregarseenhojasseparadas.
1. Deunlenguajesehaextradoelsiguientefragmentodegramtica:
S id := E
E id | E E | E & E
Tngaseencuentaque:
Ellenguajeintermedioautilizar(cdigode3direcciones)nodisponedeoperadoreslgicos.
Ellenguajetienetiposenteroylgicoynorealizaconversionesdetipos.
Debenexplicarsebrevementelosatributosyfuncionesutilizadas.
Latabladeverdaddelosoperadoreslgicosdelcdigofuenteeslasiguiente:
V V F F
V F V F
V V F V
& V F F F
a. Disear un Esquema de Traduccin para el Analizador Semntico y el Generador de Cdigo Intermedio
representandolosvaloreslgicosporcontroldeflujo.
b. DisearunaDefinicinDirigidaporlaSintaxisparaelGeneradordeCdigoIntermediorepresentandolos
valoreslgicosnumricamente.
(5,5 puntos)
2.Seaelsiguientefragmentodeunprogramaescritoenundeterminadolenguaje:
Global a: Ent er o

Proc Pr ueba
b: Mat r i z [ 1: 5] de Ent er o
Proc P1 ( Ref x: Ent er o; y: Real ; Ref z: Mat r i z [ 1: 5] Ent er o)
Inicio P1
Si x - y < 1 Entonces a: = a + 1
z[ x] : = a
Fin P1
Proc ( Ref x: Ent er o; y: Mat r i z [ 1: 5] de Ent er o) P2
Local i : Ent er o
Proc P3 ( z: Ent er o)
Local f : Real
Inicio P3
f : = z / 2. 0
Ll ama P1 ( z, f , y)
Fin P3
Inicio P2
Desde i : = 1 Hasta x Haz
Ll ama P3 ( y[ i ] )
a: = y[ 1] + y[ 2] + 2
Fin P2
Inicio Pr ueba
a: = 2; b: = [ 1, 2, 3, 4, 5]
Ll ama P2 ( a, b)

Fin Pr ueba
I mpr i me ( a)
Sepide:
a. DisearunRegistrodeActivacingeneralparaestelenguaje.
b. Realizar la traza de ejecucin detallada del fragmento de
programadado,representandotodoelcontenidodelamemoriae
indicandoloqueimprimeelprograma.
c. Qu pasara si en el cuerpo del programa Pr ueba se sustituye la
llamadaaP2( a, b) porP3( a, b) ?
El compilador y el lenguaje tienen las
siguientescaractersticas:
El compilador no realiza ninguna
optimizacin. Todos los temporales
sehandealmacenarenmemoria
Ellenguajetienerecursividad
El lenguaje tiene estructura de
bloques con reglas dembito lxico
yanidamiento
Las direcciones y los enteros
ocupan2bytes
Losrealesocupan4bytes
Los parmetros se pueden pasar
por referencia (Ref ) o por valor (si
noseespecificanada)
Las expresiones lgicas tienen
evaluacin perezosa (cortocircuito),
lo cual implica que los valores
lgicos se representan por control
deflujo
El lenguaje solo dispone de
procedimientos.

(4,5 puntos)
C CO OM MP PI IL LA AD DO OR RE ES S
Primer parcial, 30 de junio de 2008
1. Fechaestimadas:publicacindelascalificaciones:11dejulio;revisin:15dejulio.
Enhttp://www-lt.ls.fi.upm.es/compiladoresseavisarnlasfechasexactas.
2. Laduracindeesteexamenserde2horas.
3. Cadaejerciciodeberentregarseenhojasseparadas.
1. Setieneunlenguajeconidentificadoresynmeros:
Losnmerospuedenserenterosoreales,ypuedentodosllevarelpuntodemillar(slo
en la parte entera y correctamente colocado). Por ejemplo, son correctos: 1234567,
1. 234. 567;sonincorrectos: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;sonincorrectos:, ,12, 345. 67.
Los identificadores pueden estar formados por letras, dgitos y guiones bajos, pero no
pueden empezar ni terminar por guin bajo, ni llevar dos guiones seguidos, y,
obligatoriamente han de contener alguna letra. Por ejemplo, son correctos: abc,
123a,a_b;sonincorrectos:_a,a_,a___b,1_2,369.
Se pide disear un Analizador Lxico para este lenguaje (gramtica, tokens, autmata
determinista,accionessemnticasyalgunosmensajesdeerror).
(4,5 puntos)
2.Setienelasiguientegramtica:
S if E then S | R = E
E E + T | T
T id
R id
Sepide:
a. Demostrarsiesvlida(construyendolatabla)paraunSLR(1).Sinolofuera,modificar
lagramticaparaquelosea.
b. Demostrar si es vlida para construir un Analizador Sintctico Descendente
Predictivo.Sinolofuera,modificarlagramticaparaqueloseaydemostrarlo.
(5,5 puntos)
C CO OM MP PI I L LA AD DO OR RE ES S
Ex amen f i nal , 4 de sept i embr e de 2008
Observaciones: 1.Fechaestimadadepublicacindelascalificaciones:16deseptiembre.
2.Fechaestimadadelarevisin:18deseptiembre.
3.Enhttp://wwwlt.ls.fi.upm.es/compiladoresseavisarlafechaexactadepublicacinde
lascalificacionesylafechayhoradefinitivadelarevisin.
4.Laduracindeesteexamenserde2horas.
5.Cadaejerciciodeberentregarseenhojasseparadas.
1. Dada la siguiente gramtica:
S A B
A B C | k C
B C D |
D k B
C + A
Se pide:
a. Realizar el Autmata Reconocedor de Prefijos Viables (correspondiente al anlisis LR) en la
plantilla adjunta (sta contiene un nmero reducido de errores: pueden faltar o sobrar
elementos).
b. Comprobar sobre el autmata si existen conflictos.
c. Comprobar si la gramtica cumple las condiciones LL(1).
d. Independientemente de las respuestas a las dos cuestiones anteriores, presenta la gramtica
algn problema adicional para la construccin de un Analizador Sintctico?
(3.75 puntos)
2. De un lenguaje se ha extrado el siguiente fragmento de gramtica:
S while E do id := E
E id | not E | E E | E ? E : E
Se pide disear un Esquema de Traduccin para el Analizador Semntico y el Generador de
Cdigo Intermedio representando los valores lgicos numricamente. Tngase en cuenta que:
El lenguaje dispone de tipos enteros, reales y lgicos, y no admite conversin entre tipos.
El operador lgico devuelve cierto slo si sus operandos son iguales.
La operacin E
1
? E
2
: E
3
tiene el siguiente significado: si E
1
es cierta, la operacin devuelve
E
2
; si es falsa, devuelve E
3
(estas dos ltimas expresiones pueden ser de cualquiera de los tres
tipos).
El cdigo de 3 direcciones no dispone de operadores lgicos.
Deben explicarse brevemente los atributos y funciones utilizadas.
(3.75 puntos)
3. Programar (en pseudocdigo) el fragmento del Generador de Cdigo Objeto que se encarga de la
traduccin de las sentencias cal l del lenguaje intermedio (tres direcciones) a cdigo objeto
(ensamblador). Tngase en cuenta que se trata de un compilador para un lenguaje que admite
recursividad, anidamiento de procedimientos, dispone slo del tipo entero y tiene paso de
parmetros por valor. Los Registros de Activacin se almacenarn en pila. Un entero ocupa 4
bytes y una direccin 2 bytes.
Dibujar un esquema del diseo general del Registro de Activacin utilizado (especificando el
contenido y la posicin del puntero de pila).
(2.5 puntos)
S

B
B

C

D
B

+

A
S

A
S
B
k
A

C
C

+

A
C
+
S

A

B

B
B

D
D

k

B
C
+
A

B

C

C
A

k

C

C
+
+
B

C

D

B
B

C

D
B

+

A
C

+

A

A
D

k

B

B
C
+
D
I
3
B
k
C
I
0
I
1
I
2
I
4
k
I
6
I
7
I
5
I
8
I
9
I
1
0
I
1
1
I
1
2
I
1
3
C
o
m
p
i
l
a
d
o
r
e
s
C
o
m
p
i
l
a
d
o
r
e
s
4
-
s
e
p
t
i
e
m
b
r
e
-
2
0
0
8
,

E
j
e
r
c
i
c
i
o

1
.
a
H
o
j
a

d
e

R
e
s
p
u
e
s
t
a
A
p
e
l
l
i
d
o
s
:

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
N
o
m
b
r
e
:

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
S

S
S

A

B
A

B

C
A

k

C
B

C

D
B

+

A
I
1
5
C

A
A

B

C
A

k

C
B

C

D
B

+

A
+
A

C
C

+

A
C CO OM MP PI IL LA AD DO OR RE ES S
Examendelprimerparcial.6defebrerode2009
Observaciones:1.Lascalificacionesdelprimerparcialsepublicarnenlaprimeraquincenade
marzo,siendolarevisinalmenos2dasdespus.Lasfechasexactasseavisarn
enht t p: / / www- l t . l s. f i . upm. es/ compi l ador es.
2.Laduracindeesteexamenserde2horas.
3.Cadaejerciciodeberentregarseenhojasseparadas.
1.Unlenguajetienelossiguienteselementos:
Operadoresaritmticos:+,- ,*,/ ,**
Operadoreslgicos:. AND. ,. OR. ,. NOT.
Identificadoresquecomienzanporunaletrayvanseguidosdeunmximode7letraso
dgitos
Palabrasreservadasenmaysculas,comoI F,THEN,FOR,WHI LE,I NTEGER
Nmerosrealessegnlaexpresinregular:d
*
.d
+

Teniendoencuentaqueellenguajedistinguemaysculasdeminsculas,sepideconstruir
unAnalizadorLxicoparaestelenguaje(tokens,gramtica,autmatafinitodeterministay
accionessemnticas).
(4puntos)
2.Sealasiguientegramtica:
E T R
R + T R | - T R |
T id
Sepide:
a. ConstruirlastablasdeunanalizadorsintcticoSLR,dandotambinelautmataenla
plantillaadjunta(plantillaquecontieneerroresyestincompleta).
b. ConstruirlatabladeunanalizadorsintcticoLL(1).
c. Contestar brevemente a las siguientes preguntas tanto para el SLR como para el LL
segn las respuestas de los apartados a y b. Si alguna de ellas no tiene sentido para
algunodelosanalizadores,explicarlarazn:
1. En qu casos podra haber conflictos? Estudiar cada uno de esos casos y decir si
hayonoconflicto.
2. Esvlidalagramticaparaesetipodeanalizadoresoaparecealgnproblema?
3. CmosesabeenelestadoI2culdelasreglasdeRhayqueaplicar?
4. CmosesabesilareglaR + T RseaplicaenelestadoI2,enelI7enelI8?
5. HayproblemaconlarecursividaddeR + T RyR - T R?Encasoafirmativo,
decirculysisepuederesolverdealgunamanera.
6. En algn caso se puede aplicar la regla R ? En caso afirmativo, decir cundo;
encasonegativo,explicarculeselproblema.
7. Cmo sabe el analizador en un momento dado si tiene que aplicar la regla
R + T RolareglaR - T R?
8. QuhaceelanalizadorcuandoRestenlacimadelapilaeidenlaentrada?
(6puntos)
C CO OM MP PI IL LA AD DO OR RE ES S
Examenfinal.Segundoparcial.6defebrerode2009
Observaciones:1.Seestimaquesepublicarnlasnotasdelexamenfinalapartirdel20de
febrero,siendolarevisinalmenos2dasdespus.Lasfechasexactasse
avisarnenht t p: / / www- l t . l s. f i . upm. es/ compi l ador es.
2.Laduracindeesteexamenserde2horas.
3.Cadaejerciciodeberentregarseenhojasseparadas.
1. Deunagramticasehanentresacadolassiguientesreglas:
S id := E
E id ( L ) | id | E * E
L E |
Las variables son enteras y reales, no hay conversin automtica de tipos e id (L) puede
representar una llamada a una funcin (con uno o ningn parmetro) o un acceso a un
elemento de un vector (siendo necesario indicar el ndice). Se pide construir una
Definicin Dirigida por la Sintaxis para realizar el Anlisis Semntico y la Generacin
deCdigoIntermedio(explicandobrevementelosatributosyfuncionesutilizadas).
(6puntos)
2. Seaelsiguienteprograma:
Pr ogr amCl cul o- d a
Type f echa: Recor d= d a: i nt eger , mes: i nt eger , ao: i nt eger ;
Gl obal t , a: i nt eger
hoy: f echa
Pr ocedur e P- ao ( Ref z: f echa) /* parmetro por referencia
Begi n P- ao
z. ao: = z. ao + 1
End P- ao
Pr ocedur e P- mes ( Ref b: i nt eger ; Ref x: f echa) /* parmetros por referencia
Pr ocedur e P- d a ( )
Begi n P- d a
Whi l e ( ( a / t ) > 8) Do
a: = a - t
Cal l P- ao ( x)
End Whi l e
x. d a: = x. d a + 1;
End P- d a
Begi n P- mes
I f ( ( a / t ) < x. mes) Then x. mes: = a / t
El se Cal l P- d a ( )
End P- mes
Begi n Cl cul o- d a
a: = 300
t : = 30
hoy. d a: = 6
hoy. mes: = 2
hoy. ao: = 2009
Cal l P- mes ( a, hoy)
I mpr i me ( hoy. d a, hoy. mes, hoy. ao)
End Cl cul o- d a
Teniendoencuentaquelosenterosylasdireccionesocupan2bytes,sepide:
a. DisearelRegistrodeActivacingeneralparaestelenguaje.
b. Realizarunatrazadeejecucindelprogramarepresentandoelcontenidocompletode
lapilaeindicandoelresultadodelasentenciaI mpr i me.
(4puntos)
T
R
+

T
I
0
I
2
I
7
I
8
C
o
m
p
i
l
a
d
o
r
e
s
C
o
m
p
i
l
a
d
o
r
e
s

6
-
f
e
b
r
e
r
o
-
2
0
0
9
,

E
j
e
r
c
i
c
i
o

2
.
a

H
o
j
a

d
e

R
e
s
p
u
e
s
t
a
A
p
e
l
l
i
d
o
s
:

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
N
o
m
b
r
e
:

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
i
d
+
+ -
C CO OM MP PI IL LA AD DO OR RE ES S
Segundo parcial, 22 de junio de 2009
Observaciones:1.Fechaestimadadepublicacindelascalificaciones:9dejulio.
2.Fechaestimadadelarevisin:13dejulio.
3.Enhttp://www-lt.ls.fi.upm.es/compiladoresseavisarlafechaexactade
publicacindelascalificacionesylafechayhoradefinitivadelarevisin.
4.Laduracindeesteexamenserde2horas.
5.Cadaejerciciodeberentregarseenhojasseparadas.
1.Deunlenguajesehaextradoelsiguientefragmentodegramtica:
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 disear el Analizador Semntico construyendo una Definicin Dirigida por la Sintaxis.
Tngaseencuentaque:
Ellenguajedefinelasconstantesenterasyeltipoenterocon2bytes
Laexpresindelasentenciaifhadeserlgica
Lamquinaobjetodisponedeenterosde2y4bytes
Lasentenciaswitchadmitecomoexpresinunenteroounahora
Lasconstantesdetipohora(cte : cte : cte)debensercorrectas
Lashorassetienenquealmacenarinternamentecomoelnmerodesegundostranscurridosdesdela
medianoche
Nohayconversionesautomticasdetipos
Seadmitenoperacionesdecomparacinydesumaentreenterosyhoras.
(6 puntos)
2.Seaelsiguientefragmentodeunprograma:
Program Mai n
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 Mai n
i : = 2
i : = A ( A ( i ) )
I
End Mai n
mpr i me ( i )
Elcompiladoryellenguajetienenlassiguientes
caractersticas:
El compilador no realiza ningn tipo de
optimizacin
Ellenguajetieneestructuradebloques
El modo de paso de los parmetros es por
referencia
Lasenterosylasdireccionesocupan2bytes
Sepide:
a. Disear el Registro de Activacin general
paraestelenguaje.
b. Realizar una traza de ejecucin del
programa representando el contenido
completodelapila,eindicandoelresultado
delasentenciaImprime.

(4 puntos)
C CO OM MP PI IL LA AD DO OR RE ES S
Primer parcial, 22 de junio de 2009
Observaciones:1.Fechaestimadadepublicacindelascalificaciones:9dejulio.
2.Fechaestimadadelarevisin:13dejulio.
3.Enhttp://www-lt.ls.fi.upm.es/compiladoresseavisarlafechaexactade
publicacindelascalificacionesylafechayhoradefinitivadelarevisin.
4.Laduracindeesteexamenserde1horas.
5.Cadaejerciciodeberentregarseenhojasseparadas.
6.Losdosejerciciostienenlamismapuntuacin.
1. Se tiene un lenguaje en el que hay identificadores, palabras reservadas, nmeros enteros,
operadoresaritmticosdesumayrestayloqueseexplicaacontinuacin:
Los identificadores estn formados por letras y tienen una longitud mxima de 6
caracteres.SiempiezanporalgunadelasletrasI,J,K,L,M,Nsonenterossalvoquese
declarenexplcitamentedeotrotipo.
Ladeclaracinexplcitadeunidentificadorseconstruyeconlapalabrareservadaque
indica el tipo (REAL, I NTEGER o CHARACTER *long), seguida de la lista de
identificadores separados por comas. En la declaracin de una variable de tipo
carcter,seindicalalongituddelavariableconunasteriscoyunnmeroenterodeno
msde3dgitos(debeserunacomprobacinlxica).
Laspalabrasreservadasestnformadasporletras.
Losnmerospuedenserpositivosynegativos.
Sepide:
a. Construir el Analizador Lxico para este lenguaje (Gramtica Regular, tokens, AFD,
AccionesSemnticaseindicar5posiblescasosdeerror),teniendoencuentaquesedebe
introducirenlaTabladeSmbolostodalainformacinposible.
b. Si el lenguaje tuviera tambin la operacin de producto, qu cambios habra que
realizareneldiseodeesteAnalizadorLxico?

2. Sealasiguientegramtica:
S while COND do CUERPO end | goto id |
COND id
CUERPO begin REST end
REST S REST |
Sepide:
a. Completar en la plantilla adjunta el Autmata Reconocedor de Prefijos Viables
(mtodoSLR).Laplantillapuedecontenererroresy/oomisiones.
b. Analizar la posible existencia de conflictos en el autmata anterior. Si hay algn
conflicto, plantear una sentencia donde, caso de usarse dicho autmata, se llegara a
unasituacindeconflictoyexplicarporquseproduce.
C
o
m
p
i
l
a
d
o
r
e
s
C
o
m
p
i
l
a
d
o
r
e
s
2
2
-
j
u
n
i
o
-
2
0
0
9
,

E
j
e
r
c
i
c
i
o

2
.
a
H
o
j
a

d
e

R
e
s
p
u
e
s
t
a
A
p
e
l
l
i
d
o
s
:

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
N
o
m
b
r
e
:

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
I
0
I
1
I
2
I
4
I
7
I
5
I
1
1
I
1
2
I
1
3
I
1
5
I
9
I
2
I
3
I
1
4
I
8
I
1
0
C CO OM MP PI I L LA AD DO OR RE ES S
Ex amen f i nal , 1 de sept i embr e de 2009
Observaciones: 1. Fecha estimada de publicacin de las calificaciones: 15 de septiembre. Fecha estimada de
la revisin: 17 de septiembre. En http://www-lt.ls.fi.upm.es/compiladores se avisar la fecha
exacta de publicacin de las calificaciones y la fecha y hora definitiva de la revisin.
4.Laduracindeesteexamenserde2horas.
5.Cadaejerciciodeberentregarseenhojasseparadas.
1. La descripcin de un fragmento de un lenguaje de programacin 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 dgito dgitos
dgito 0 | 1 | | 9
digitos dgito dgitos |
id letra letras
letra a | b | c | | z | A | B | C | | Z
letras letra letras |
L case C = S ; L |
oprel <> | =
Se pide disear un Analizador Lxico (gramtica regular, tokens, autmata finito determinista, acciones
semnticas) correspondiente a dicho lenguaje. El lenguaje presenta las siguientes caractersticas:
El lenguaje define las constantes enteras y el tipo entero con 2 bytes
La expresin de la sentencia if ha de ser lgica
La mquina objeto dispone de enteros de 2 y 4 bytes
La sentencia switch admite como expresin un entero o una hora
Las constantes de tipo hora (cte:cte:cte) deben representar horas correctas (dando un error lxico en caso
contrario), y cada parte de la hora debe ir escrita con dos dgitos
Las horas tienen que almacenarse internamente como el nmero de segundos transcurridos desde la media noche
Las palabras clave del lenguaje son reservadas
Los elementos pueden ir separados por delimitadores
No hay conversin automtica de tipos
Se admiten operaciones de comparacin y de suma entre enteros y horas
2. Sea la siguiente gramtica: (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 gramtica LL, vlida para construir un Analizador Descendente LL(1).
b. Construir la tabla del Analizador Sintctico Descendente LL.
c. Definir una gramtica 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 gramtica es vlida o no para construir
un Analizador Sintctico con este mtodo. Para construir la tabla de precedencia, deben colocarse primero los
operadores y a continuacin las letras, segn su orden de aparicin en la gramtica:
S A * B + B | B + A * A
A a + a
B b * b
3. Dado el siguiente fragmento de gramtica de un lenguaje: (4 puntos)
S id := E
E id (L) | id
L E, L | E
donde id(L) puede ser una llamada a funcin o el acceso a un elemento de un vector unidimensional de ndices
enteros. Teniendo en cuenta que no hay conversiones automticas de tipos y que todo identificador tiene que estar
declarado previamente, se pide disear una Definicin Dirigida por la Sintaxis con el Comprobador de Tipos y
el Generador de Cdigo Intermedio (cdigo de 3 direcciones).

C CO OM MP PI IL LA AD DO OR RE ES S
Examendelprimerparcial.11defebrerode2010
Observaciones:1.Lascalificacionesdelprimerparcialsepublicarnaproximadamenteamediados
demarzo.Seavisarenht t p: / / www- l t . l s. f i . upm. es/ compi l ador es.
2.Laduracindeesteexamenserde1horas.
3.Cadaejerciciodeberentregarseenhojasseparadas.
4.Losdosejerciciostienenlamismapuntuacin.
1.Setieneunlenguajeconnmeros,constantesdetipocadena,variablesyunaseriedeoperadoresy
quenocuentaconconversinautomticadetipos.Todosloselementosdellenguajetienenqueir
separadosobligatoriamenteporalmenosundelimitador.
Losnmerospuedensertantoenteroscomoreales.Losnmerosenterosestnformadosporuna
secuencia de dgitos. Los nmeros 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,perono14. ).
Lasconstantesdetipocadenavanencerradasentrecomillasdobles(" ).Dentrodelacadenapuede
habercualquiercarcterexceptolaspropiascomillas.
Las variables pueden ser de tipo cadena, vector, entero o real. El lexema de la variable estar
formado por una combinacin de letras y dgitos de cualquier longitud, pero siempre tendr al
menosunaletra.
Losoperadoresdellenguajesonlossiguientes:
eloperadordeasignacin(=),vlidosloentreexpresionesdelmismotipo.
eloperadordeconcatenacindecadenas(. ),vlidosloparacadenas.
eloperadordecomparacinentrenmeros(=),vlidosloparanmeros.
eloperadordecomparacinentrecadenas(==),vlidosloparacadenas.
Se pide construir un Analizador Lxico para este lenguaje (tokens, gramtica, autmata finito
deterministayaccionessemnticas).

2.SealasiguientegramticaenEBNFinspiradaenlasintaxisdellenguajeCOBOL:
S procedure division . [ DECLARACIONES ] { CUERPO }
1

DECLARACIONES declaratives . { STRUCT use PRRAFO }
1
end declaratives
CUERPO id section . { PRRAFO }
1

STRUCT id section number |
PRRAFO number . SENTENCE
SENTENCE goto id | evaluate id
Sepide:
a. RealizareldiagramadetransicinparalasreglasdeS,DECLARACIONESySENTENCE.
b. Definir el programa del Analizador Sintctico Descendente Predictivo Recursivo para esta
gramtica,queesLL(1).Sedeberusarelsiguienteprocedimientoauxiliar:
Compr obar Token ( t : t oken)
Begi n
I f ( t = Si gui ent eToken)
Then Leer ( Si gui ent eToken)
El se Er r or ( t )
End
Nota1: En el programa se puede
abreviar el nombre de la
funcinCompr obar Tokenpor
CT y el nombre de la variable
Si gui ent eTokenporST.
Nota2:EnlanotacinEBNF,elsignificadodelosmetasmboloseselsiguiente:
[ ]:Opcional
{ }
1
:Repetitivade1anveces
C CO OM MP PI IL LA AD DO OR RE ES S
Examenfinal.Segundoparcial.11defebrerode2010
Observaciones:1.Seestimaquesepublicarnlasnotasdelexamenfinalel22defebrero,
siendolarevisinel2demarzo.Lasfechasexactasseavisarnen
ht t p: / / www- l t . l s. f i . upm. es/ compi l ador es.
2.Laduracindeesteexamenserde2horas.
3.Cadaejerciciodeberentregarseenhojasseparadas.
1. Deunagramticadeunlenguajesehanentresacadolassiguientesreglas:
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 < | > | = | <>
SepideconstruirunaDefinicinDirigidaporlaSintaxispararealizarelAnlisisSemnticoyla
Generacin de Cdigo Intermedio (explicando brevemente los atributos y funciones utilizadas),
teniendoencuentaque:
Ellenguajedisponedeconstantesenteras(cte)yconstantedetipohora(cte:cte:cte)
Ellenguajetieneconversionesdetipoautomticasentreenteros,lgicosyhoras
Silossumandossondedistintotipo,elresultadodelasumaesentero;silossumandossondel
mismotipo,elresultadoconservaeltipodelossumandos
Las constantes de tipo hora deben ser correctas y se almacenan internamente como un valor
enteroquerepresentaelnmerodesegundostranscurridosdesdelamedianoche
Losenterosserepresentancon4bytesyloslgicoscon1byte
En las expresiones lgicas, el valor 0 se considera como falso y cualquier otro valor como
verdadero.
(6puntos)
2. Seaelsiguienteprogramacorrecto:
Pr ogr amQR
Pr ocedur e Mai n
Var a: = 3, b: = 5: i nt eger ;
Pr ocedur e Q;
Var b: i nt eger ;
BEGI N Q
a: = a - 1;
b: = a;
I F b > 0 THEN R ( a) ;
END Q;
Pr ocedur e R ( b: i nt eger ) ;
BEGI N R
b: = b - a;
Q;
END R;
BEGI N Mai n
Q;
PRI NT ( a) ;
PRI NT ( b) ;
END Mai n;
BEGI N QR
Mai n;
END QR.
Teniendo en cuenta que se trata de un
compiladordedospasadas,quelosenterosylas
direcciones ocupan 2 bytes, que las expresiones
lgicas se representan mediante la tcnica de
flujo de control, que se utiliza una estrategia de
asignacin de memoria mediante pila y que el
lenguaje sigue las reglas de mbito lxico, se
pide:
a. Disear el Registro de Activacin general
paraestelenguaje.
b. Realizar la traza de ejecucin del programa
representando el contenido completo de la
memoria, indicando el resultado de las
sentencias PRI NT. Se realizar la traza dos
veces, considerando, primero, el paso de
parmetrosporreferenciay,despus,elpaso
deparmetrosporvalor.

(4puntos)
C CO OM MP PI IL LA AD DO OR RE ES S
Segundo parcial, 1 de julio de 2010
Observaciones: 1. Fecha estimada de publicacin de las calificaciones: 8 de julio.
2. Fecha estimada de la revisin: 12 de julio.
3. En http://www-lt.ls.fi.upm.es/compiladores se avisar la fecha exacta de
publicacin de las calificaciones y la fecha y hora definitiva de la revisin.
4. La duracin de este examen ser de 2 horas.
5. Cada ejercicio deber entregarse en hojas separadas.
6. Los dos ejercicios tienen la misma puntuacin.
1. De un lenguaje de programacin se ha extrado el siguiente fragmento de gramtica:
S For id:= E To E Do S End For | id := E
E id | nm | E + E
Se pide disear el Analizador Semntico y el Generador de Cdigo Intermedio mediante un Esquema de
Traduccin, teniendo en cuenta que:
El lenguaje tiene variables de tipo cadena, entero y lgico, y exige declaracin previa de las mismas
El lenguaje no realiza conversin de tipos
La suma opera con enteros o con lgicos (en este ltimo caso, se realiza una operacin de OR)
El funcionamiento del bucle for es como sigue:
1. Se evalan las dos expresiones
2. Se inicializa la variable entera ndice (id) con el valor de la primera expresin
3. Si la variable ndice es mayor al valor obtenido al evaluar la segunda expresin en el paso 1, se abandona la
ejecucin del bucle
4. Se ejecutan las sentencias
5. Se incrementa en una unidad el valor de la variable ndice y se vuelve al paso 3.
2. Sea el siguiente fragmento de un programa:
Global a: int;
Program Fechas ()
Type Record Fecha= {a, m, d: int};
Var b: Fecha;
Proced A (Var x:int, y:real, Var z:Fecha)
Begin A
If (x - y < 1) Then a:= a + 1;
Case x:
1: z.a:= z.a + a;
2: z.m:= z.m + a;
3: z.d:= z.d + a;
End Case;
End A;
Proced BB (Var x:int, y:Fecha)
Var i: int;
Proced CCC (z:int)
Var f: real;
Begin CCC
f:= z / 2.0;
Call A (z, f, y);
End CCC;
Begin BB
For i:= 1 To 2 Do
Call CCC (i);
End For;
a:= Truncate(y.m / 4.0) + y.d;
End BB;
Begin Fechas
a:= 2;
b.a:= 2000;
b.m:= 6;
b.d:= 15;
Call BB (a, b);
Print (a, b);
End Fechas;
El compilador y el lenguaje tienen las siguientes
caractersticas:
El bucle For funciona tal como se describe en el
problema 1
El compilador no realiza ningn tipo de
optimizacin
El lenguaje distingue las maysculas de las
minsculas
El lenguaje realiza conversin automtica de
tipos
El lenguaje tiene estructura de bloques
La operacin Truncate devuelve la parte
entera, eliminando la parte decimal de su
argumento
Los enteros y las direcciones ocupan 2 bytes;
los reales ocupan 6 bytes
Los parmetros se pasan por valor, salvo que se
indique la palabra Var, en cuyo caso se pasan
por referencia
Se pide:
a. Disear el Registro de Activacin general para
este lenguaje.
b. Realizar una traza de ejecucin del programa
representando el contenido completo de la pila,
e indicando el resultado de la sentencia
Print.

C CO OM MP PI IL LA AD DO OR RE ES S
Primer parcial, 1 de julio de 2010
Observaciones: 1. Fecha estimada de publicacin de las calificaciones: 8 de julio.
2. Fecha estimada de la revisin: 12 de julio.
3. En http://www-lt.ls.fi.upm.es/compiladores se avisar la fecha exacta de
publicacin de las calificaciones y la fecha y hora definitiva de la revisin.
4. La duracin de este examen ser de 2 horas.
5. Cada ejercicio deber entregarse en hojas separadas.
1. El directorio de personal de una organizacin est formado por el nombre y apellidos de
los trabajadores, el nmero del despacho (un entero de hasta 3 dgitos), el nombre del
departamento al que pertenecen (formado por una nica palabra) y el nmero de
extensin telefnica (formada por 5 dgitos, de tal forma que los dos primeros indican el
cdigo del departamento).
La organizacin dispone de 27 departamentos, cuyos nombres ordenados alfabticamente
se encuentran en una tabla, donde se indica tambin el cdigo que sirve como prefijo de la
extensin telefnica, comenzando por 01 (Auditoras) hasta el 27 (Ventas).
Se pide construir el Analizador Lxico para un lenguaje con estas caractersticas
(gramtica regular, tokens, AFD con el menor nmero de estados posible, acciones
semnticas y errores), teniendo en cuenta que cada elemento del lenguaje puede ir
separado por uno o varios espacios o saltos de lnea.

(4 puntos)
2. Sea la siguiente gramtica, donde A es el axioma:
1. A x B y
2. A z C
3. A
4. B y B
5. B C
6. C A y
Se pide:
a. Construir las tablas completas de un analizador por Precedencia de Operador, de un
analizador SLR y de un analizador LL, independientemente de si la gramtica es o no
vlida para construir esos analizadores.
b. Para cada uno de estos analizadores, razonar si la gramtica es vlida para utilizar
dicho analizador. En caso negativo, explicar brevemente todos los problemas que
presenta en cada caso.
(6 puntos)
C CO OM MP PI IL LA AD DO OR RE ES S
Examen final, 2 de septiembre de 2010
Observaciones: 1. Fecha estimada de publicacin de las calificaciones: 16 de septiembre. Fecha estimada de
la revisin: 20 de septiembre. En http://www-lt.ls.fi.upm.es/compiladores se avisar la fecha
exacta de publicacin de las calificaciones y la fecha y hora definitiva de la revisin.
2. La duracin de este examen ser de 2 horas.
3. Cada ejercicio deber entregarse en hojas separadas.
1. En un sobre postal, una direccin puede contener los nombres y apellidos del destinatario o el nombre de una
empresa, el tipo de calle (c/, Av., P, Pza. o C), el nombre de la calle, el nmero de la calle (un nmero
de 1 2 cifras), la provincia de residencia (supngase que las 52 provincias espaolas estn formadas por una nica
palabra) y el cdigo postal (formado por 5 cifras, de tal forma que las dos primeras hacen referencia a la provincia
y las tres ltimas corresponden a zonas postales).
En Espaa existen 52 provincias, cuyos nombres y cdigos se encuentran en una tabla, comenzando por 01
(lava) hasta el 52 (Melilla).
Se pide construir el Analizador Lxico para un lenguaje con estas caractersticas (gramtica regular, tokens, AFD
con el menor nmero de estados posible, acciones semnticas y errores), teniendo en cuenta que se desea transmitir
la informacin de la provincia cuando se reconozca un cdigo postal, que cada elemento del lenguaje va separado
por uno o varios espacios o saltos de lnea y que el lenguaje distingue maysculas y minsculas.
(3 puntos)
2. Sea la siguiente gramtica:
S a B B a
B a C |
C D a E | E a D
D x y | y
E y x | x
Se pide:
a. Completar en la plantilla adjunta el Autmata Reconocedor de Prefijos Viables (mtodo SLR).
b. Analizar todos los estados que pudieran dar conflictos en el autmata anterior y justificar si la gramtica es
SLR.
c. Aplicar la condicin LL a toda la gramtica y justificar si es una gramtica LL.
d. Justificar si es una gramtica de Precedencia de Operador.
(3 puntos)
3. Dado el siguiente fragmento de gramtica de un lenguaje:
D L : T I ;
L id | id , L
I := V |
T integer | real | boolean
V cte_entera | cte_real | cte_lgica
E id | E < E | E * E | V
S id := E
Teniendo en cuenta que:
Cuando en una proposicin de declaracin existe una inicializacin, se inicializan todas las variables declaradas
en dicha proposicin
El producto entre lgicos representa una operacin AND
Solamente se permite comparar valores numricos con la operacin <
Los enteros ocupan 2 bytes, los reales 4 y los lgicos 1
No hay conversiones automticas de tipos
Se quiere representar los valores lgicos por control de flujo.
Se pide disear un Esquema de Traduccin con el Analizador Semntico y el Generador de Cdigo
Intermedio (cdigo de 3 direcciones) para este lenguaje, explicando brevemente los atributos y funciones usadas.
(4 puntos)
A AN N L LI IS SI IS S L L X XI IC CO O
Primer examen. 25 de octubre de 2010
Observaciones: 1. Las calificaciones se publicarn hacia el 23 de noviembre.
2. La revisin ser hacia el 26 de noviembre.
3. En la web se avisar de las fechas exactas.
4. La duracin de este examen ser de 40 minutos.
1. Un determinado lenguaje permite representar informacin mediante listas. Una lista est
delimitada por parntesis. Los elementos de una lista pueden ser cualquiera de los
siguientes:
Nombres: pueden contener letras, dgitos y guiones (- ), empezando siempre con una
letra o dos puntos (: ), y no pudiendo terminar por guin ni tener guiones seguidos.
Nmeros: estn formados por una secuencia de dgitos, con una precisin mxima de 2
bytes.
Expresiones: una expresin se representa siempre entre parntesis y est formada por
operandos (pueden ser nombres, nmeros u otras expresiones) y operadores aritmticos.
Los operadores pueden ser:
o binarios: +, *, /
o unarios: ++, **
Seguidamente, se muestran algunos ejemplos de listas vlidas:
(hola esto es una lista con nombres) ( en esta lista hay nombres-y-valores-enteros
el :menor es 0 el :mayor es 65535) (:lista-mixta1 (9 + x1) (x1 +( i * val99++/:x) / (8))
:9 final ) (a3 t5 pdl a1b2c3d4 (a+1+b+2+c+3+d+4) a-1-b-2-c-3-d-4) ( 8 88 8888)
Se pide disear un Analizador Lxico para este lenguaje (incluyendo los tokens completos,
la gramtica regular, el autmata finito determinista y las acciones semnticas).
T TA AB BL LA A D DE E S S M MB BO OL LO OS S Y Y A AN N L LI IS SI IS S S SI IN NT T C CT TI IC CO O
Segundo examen. 13 de diciembre de 2010
Observaciones: 1. Las calificaciones se publicarn hacia el 11 de enero.
2. La revisin ser hacia el 14 de enero.
3. En la web se avisar de las fechas exactas.
4. La duracin de este examen ser de 40 minutos.
Sea la siguiente gramtica:
A A L |
L ( B )
B num B | id B | num op B |
Se pide:
a. Completar en la plantilla adjunta el Autmata Reconocedor de Prefijos
Viables (correspondiente al mtodo de anlisis sintctico SLR). La plantilla
no contiene errores, aunque est incompleta.
b. Justificar la posible existencia de conflictos en los estados I0, I1, I5 e I6 del
Autmata anterior.
c. Justificar si la gramtica es LL(1). En caso de que no lo sea, aplicar las
transformaciones necesarias y demostrar que la nueva gramtica cumple la
condicin LL.
A
n

l
i
s
i
s

L
R

1
3
-
d
i
c
i
e
m
b
r
e
-
2
0
1
0

H
o
j
a

d
e

R
e
s
p
u
e
s
t
a


A
p
e
l
l
i
d
o
s
:

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


N
o
m
b
r
e
:

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

I
0

A


A




B


i
d


B

B


n
u
m

B

B


i
d

B

B


n
u
m

o
p

B

B


n
u
m

o
p


B

B


n
u
m

B

B


i
d

B

B


n
u
m

o
p

B

B








n
u
m

i
d


(

I
1

I
6

I
2

I
9

I
5


T TR RA AD DU UC CC CI I N N D DI IR RI IG GI ID DA A P PO OR R L LA A S SI IN NT TA AX XI IS S
Y Y A AN N L LI IS SI IS S S SE EM M N NT TI IC CO O
Tercer examen. 17 de enero de 2011
Observaciones: 1. Las calificaciones se publicarn el 24 de enero.
2. La revisin ser el 26 de enero.
3. En la web se dar informacin sobre la publicacin de notas y
la revisin
4. La duracin de este examen ser de 40 minutos.
Sea el siguiente fragmento de la gramtica de un lenguaje:
P P
P D P |
D function T id ( A ) begin B end | id : T
T int | bool
A id : T | A , A
B id : T | id := E | B ; B
E id | E and E | id ( R )
R E | R , R
Tnganse en cuenta las siguientes caractersticas:
Los identificadores se han de declarar antes de ser usados.
El lenguaje no realiza una conversin automtica de tipos.
El operador and realiza una conjuncin de lgicos.
Un entero ocupa 2 bytes y un lgico 1 byte.
El lenguaje dispone de funciones, que no se pueden anidar, y de
llamadas a funciones mediante id ( R ).
Los parmetros de la funcin se pasan por valor.
El Analizador Lxico introduce los lexemas en la Tabla de Smbolos.
Se pide disear el Analizador Semntico que realice la comprobacin de tipos
mediante un Esquema de Traduccin (EdT), teniendo en cuenta que:
El EdT debe detallar todos los accesos a la Tabla de Smbolos.
El EdT debe completar la Tabla de Smbolos con toda la informacin
posible.
Deben explicarse brevemente los atributos y funciones utilizadas en el
EdT.

COMPILADORES
Examen primer parcial. 2 de febrero de 2011
Observaciones: 1. Las calificaciones se publicarn hacia el 18 de febrero.
2. La revisin ser hacia el 22 de noviembre.
3. En la web se avisar de las fechas exactas.
4. La duracin de este examen ser de 2 horas.
5. Todos los ejercicios tienen la misma puntuacin.
1. Las referencias bibliogrficas de una determinada publicacin pueden constar de los
siguientes elementos:
Apellido del autor: estar formado por una nica palabra formada por letras minsculas,
excepto la primera que deber ser mayscula. Una referencia puede tener varios autores.
Iniciales del autor: estar formada por una letra mayscula seguida de un punto. Un
autor puede tener ms de una inicial.
Ttulo: estar formado por una serie de caracteres encerrados entre comillas dobles.
Cdigo ISBN: es un cdigo numrico formado por 10 por 13 dgitos; entre dos dgitos
puede haber guiones, aunque nunca dos guiones seguidos.
Fecha: puede estar formada por el nombre completo de un mes en minsculas y por el
ao escrito con 4 dgitos.
Adems de los signos de puntuacin que pueden verse en los ejemplos, los distintos
elementos de una referencia pueden ir separados por uno o ms blancos, y cada referencia
debe ir escrita en un nico prrafo y no puede haber dos referencias en el mismo prrafo.
Seguidamente, se muestran algunos ejemplos de referencias bibliogrficas correctas:
Aho, A.V., Lam, M. S., Sethi, R., Ullman, J. D., "Compilers. Principles, Techniques & Tools",
978-0-321-49169-5, abril, 2007
Aho, A. V., Sethi, R., Ullman, J. D., "Compiladores. Principios, tcnicas y herramientas",
0-201-62903-8, 1990
Aho,A.V.,Ullman,J.D.,"The Theory of Parsing, Translation and Compiling. Vol. II: Compiling",
1973
Aho, A. V., Ullman, J. D., "The Theory of Parsing, Translation and Compiling. Vol.
I: Parsing", 1972
Chomsky,N., "Three models for the description of language", febrero,1956
Ellis,M.A.,Stroustrup,B.,"The Annotated C++ Reference Manual",0-201-51459-1,mayo, 1991
Kernighan, B. W., Ritchie, D. M., "The C Programming Language", julio, 0131103628, 1988
Se pide disear un Analizador Lxico para este lenguaje (incluyendo los tokens completos,
la gramtica regular, el autmata finito determinista y las acciones semnticas).

2. Sea el siguiente fragmento de una gramtica de un lenguaje de programacin:
Bloque ( block Sent Rest-Bloq )
Rest-Bloq Sent Rest-Bloq | return |
Sent Sent-Asig | Expresin | Sent-Control
Se sabe que:
Sent-Asig, Expresin y Sent-Control son smbolos No-Terminales
block y return son smbolos Terminales
First (Sent-Asig) = First (Expresin) = {id}
Despus del id en Sent-Asig siempre viene un op-asig y un id
Expresin comienza por un id seguido de un op-arit y despus un id
First (Sent-Control) = {If, While, For}
Se pide:
a. Sin transformar la gramtica, construir la tabla del Analizador Sintctico LL(1) y
justificar si la gramtica es LL.
b. Con la informacin que se proporciona, escribir las reglas correspondientes a Sent-Asig
y a Expresin, de forma que la gramtica resultante sea LL(1). A continuacin, escribir el
Analizador Sintctico Descendente Recursivo para los smbolos Bloque, Rest-Bloq y
Sent. Se deber usar el siguiente procedimiento auxiliar:
Comprobar_Token (t: token)
Begin
If (t = Siguiente_token)
Then Leer (Siguiente_token)
Else Error (t)
End
3. Sea el siguiente fragmento de una gramtica de un lenguaje de programacin:
P D S
D T : L | D ; D
T integer | boolean | real | array
L id | id [ cte_entera ] of T | L ; L
S for id := E to E do S | repeat S until E | id := E | S ; S
E E + E | id | cte_entera | true | id [ E ]
Se tienen las siguientes caractersticas:
El lenguaje realiza conversin implcita de enteros a reales. Para el resto, no hay
conversin implcita de tipos.
El operador aritmtico + permite realizar una suma de dos enteros o una operacin or
de dos lgicos.
Las expresiones y el identificador de la instruccin for tienen que ser enteros.
Se pide disear un Esquema de Traduccin para realizar el Anlisis Semntico,
explicando brevemente las funciones y atributos utilizados.

COMPILADORES
Examen final. 2 de febrero de 2011
Observaciones: 1. Las calificaciones se publicarn hacia el 18 de febrero.
2. La revisin ser hacia el 22 de noviembre.
3. En la web se avisar de las fechas exactas.
4. La duracin de este examen ser de 1 horas.
5. Todos los ejercicios tienen la misma puntuacin.
1. Sea el siguiente fragmento de una gramtica de un lenguaje de programacin:
P D S
D T : L | D ; D
T integer | boolean | real | array
L id | id [ cte_entera ] of T | L ; L
S for id := E to E do S | repeat S until E | id := E | S ; S
E E + E | id | cte_entera | true | id [ E ]
Se tienen las siguientes caractersticas:
El lenguaje realiza conversin implcita de enteros a reales. Para el resto, no hay
conversin implcita de tipos.
El operador aritmtico + permite realizar una suma de dos enteros o una operacin or
de dos lgicos.
Las expresiones y el identificador de la instruccin for tienen que ser enteros.
Se pide disear una Definicin Dirigida por la Sintaxis para realizar el Generador de
Cdigo Intermedio, explicando brevemente las funciones y atributos utilizados.

2. Sea el siguiente programa correcto:
Program Febrero
Type Uno-Dos: Record= Uno: Integer, Dos: Integer;
Global Var0: Uno-Dos
Procedure Cuerpo
Var var1, var2: Integer;
Procedure A;
Var var2: Integer;
Function C (REF var2: Integer): Integer; /* parmetro por referencia
BEGIN /* C
var2:= var2 + 111;
Return var2;
END; /* C
BEGIN /* A
var1:= var1 + 3;
var2:= var1 + 1;
If (var2 < 7)
Then B(var1);
Else var1:= var1 + C(Var2);
END; /* A
Procedure B (var2: Integer); /* parmetro por valor
BEGIN /* B
var2:= var2 + var1;
A;
END; /* B
BEGIN /* Cuerpo
var1:= 1;
var2:= 2
A;
Var0.uno:= var1;
Var0.dos:= var2;
END; /* Cuerpo
BEGIN /* Febrero
Cuerpo;
Print (Var0)
END. /* Febrero
Teniendo en cuenta que se trata de un compilador de dos pasadas, que el lenguaje tiene
estructura de bloques y que los enteros y las direcciones ocupan 2 bytes, se pide:
a. Disear razonadamente el Registro de Activacin general para este lenguaje.
b. Realizar una traza de ejecucin del programa representando el contenido completo de
la memoria, e indicando el resultado de la sentencia Print.

A AN N L LI IS SI IS S L L X XI IC CO O
Primer examen. 2 de marzo de 2011
Observaciones: 1. Las calificaciones se publicarn hacia el 22 de marzo.
2. La revisin ser hacia el 24 de marzo.
3. En la web se avisar de las fechas exactas.
4. La duracin de este examen ser de 40 minutos.
1. En la representacin informtica del lenguaje Braille, los distintos elementos, que pueden
ir separados por blancos, se representan de la siguiente forma:
Palabras: se forman con las letras del alfabeto escritas en minsculas. Si se quiere indicar
que una letra es mayscula, hay que utilizar el prefijo {. Si se quiere indicar que toda la
palabra va en maysculas, se duplica este prefijo al principio de la palabra.
Nmeros enteros: se utilizan las letras de la a a la j precediendo todo el nmero del
prefijo #. El valor numrico de las letras va en orden, de tal forma que a=1, b=2
h=8, i=9 y j=0.
Signos de puntuacin: se dispone de la coma , y del punto ..
Seguidamente, se muestran algunos ejemplos vlidos en este lenguaje indicando su
representacin en Braille y su equivalente en tinta:

Braille Tinta
{procesadores de {lenguajes. Procesadores de Lenguajes.
{martes, #bb de marzo de #bjaa. Martes, 22 de marzo de 2011.
{{xhtml #a XHTML 1
{java{script JavaScript

Se desea obtener la equivalencia del Braille en tinta, para lo que se pide disear un
Analizador Lxico para analizar documentos escritos en este lenguaje (tokens completos,
gramtica, autmata y acciones semnticas).
TABLA DE SMBOLOS Y ANLISIS SINTCTICO
Segundo examen. 4 de mayo de 2011
Observaciones: 1. Las calificaciones se publicarn hacia el 17 de mayo.
2. La revisin ser hacia el 19 de mayo.
3. En la web se avisarn las fechas exactas.
4. La duracin de este examen es de 40 minutos.
a Sea el siguiente programa: (3,5 puntos)
Pr ogr amF;
Gl obal Mat : Ar r ay [ 1. . 8] of bool ean;
Var 0: r eal ;
Pr ocedur e Cuer po;
Var var 1= 10, var 2= 20: i nt eger ;
Pr ocedur e A;
Var var 2: i nt eger ;
Pr ocedur e B ( var 2: i nt eger ) ; / * Parmetro por valor
BEGI N
var 2: = var 2 + var 1;
A;
END;
Funct i on C ( REF var 2: i nt eger ) : i nt eger ; / * Parmetro por referencia
BEGI N
var 1: = var 1 + 3;
var 2: = var 1 + 1;
/ * Punto
Ret ur n var 2;
END;
BEGI N
I f var 2 < 7 Then B( var 1) ; El se var 1: = var 1 + C( Mat [ 5] ) ;
END;
BEGI N
var 1: = 1;
var 2: = 2;
A;
var 0: = var 1;
END;
BEGI N
Cuer po;
END.
Considerando que un Compilador ha procesado hasta el punto sealado con , se pide:
1) Mostrar el contenido de la Tabla de Smbolos en ese instante.
2) Describir brevemente (5 lneas) la estructura de la Tabla de Smbolos.
b Sea la siguiente gramtica: (6,5 puntos)
S A B
A 1 A | 2 B |
B 3 A | 4 B |
1) Completar en la plantilla adjunta (que puede contener errores y omisiones) el
Autmata Reconocedor de Prefijos Viables (Anlisis Sintctico LR).
2) Demostrar si la gramtica es LR realizando el anlisis de los posibles conflictos en el
autmata.
P
r
o
c
e
s
a
d
o
r
e
s

d
e

L
e
n
g
u
a
j
e
s

4
-
m
a
y
o
-
2
0
1
1

H
o
j
a

d
e

R
e
s
p
u
e
s
t
a


A
p
e
l
l
i
d
o
s
:

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


N
o
m
b
r
e
:

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

I
1


I
0

S


S









B

I
2

I
3

I
4

A


2

4

I
6

3

I
7


1


COMPILADORES
Segundo parcial, 20 de junio de 2011
Observaciones: 1. Fecha estimada de publicacin de las calificaciones: 4 de julio.
2. Fecha estimada de la revisin: 6 de julio.
3. En http://www-lt.ls.fi.upm.es/compiladores se avisar la fecha exacta de
publicacin de las calificaciones y la fecha y hora definitiva de la revisin.
4. La duracin de este examen ser de 2 horas.
5. Cada ejercicio deber entregarse en hojas separadas.
6. Los dos ejercicios tienen la misma puntuacin.
1. De un lenguaje de programacin se ha extrado el siguiente fragmento de gramtica:
S for ( I ; C ; A ) S | I
I id = E
C E oprel E | C oplog C
A id ++ | I
E id | nm | E + E
Se pide disear el Generador de Cdigo Intermedio mediante una Definicin Dirigida por la Sintaxis (explicando
el significado de todos los atributos y funciones utilizadas) sabiendo que:
El lenguaje slo dispone de variables de tipo entero; las expresiones lgicas se evalan numricamente.
Todas las variables tienen que declararse previamente a su uso.
La expresin id++ incrementa el valor de la variable en una unidad.
El funcionamiento del for es el siguiente: se ejecuta I, se comprueba la condicin C y, si es cierta, se ejecuta el
cuerpo S del for; seguidamente, se hace la actualizacin indicada en A y se vuelve a comprobar la condicin C.
El bucle termina cuando la condicin C es falsa.
2. Sea el siguiente fragmento de un programa:
Program Junio
Var Array [1..5] of Integer: Resumen
Integer: x
Procedure C (REF p2: Integer) /* por referencia
Function D (pb2: Integer): Integer /* por valor
BEGIN /* D
pb2:= pb2 + 111
Return pb2
END /* D
BEGIN /* C
If (p2 <= 3) Then p2:= D(p2)
Else C(p2 - 2)
END /* C
Function A (p1: Integer): Integer /* por valor
Var var1: Integer
Procedure B (REF pb1: Integer) /* por referencia
Var var2: Integer
BEGIN /* B
var1:= pb1 + 3
var2:= var1 + 1
pb1:= var2 * var2
If (var2 < 6) Then Resumen[var2]:= var2
END /* B
BEGIN /* A
var1:= 10 + p1
If (p1 <= 1) Then B(p1)
Else C(p1)
Return p1
END /* A
BEGIN /* Junio
Resumen:= [0,0,0,0,0]
x:= 1
Print A(x)
Print A(Resumen[5])
END /* Junio
El compilador y el lenguaje tienen las
siguientes caractersticas:
Las expresiones lgicas se evalan
mediante control de flujo
El lenguaje tiene estructura de bloques
Los enteros ocupan 2 bytes; las
direcciones ocupan 4 bytes
Los parmetros se pasan por valor,
salvo que se indique la palabra REF, en
cuyo caso se pasan por referencia.
Se pide:
a. Disear y describir brevemente el
Registro de Activacin general para
este lenguaje.
b. Realizar una traza de ejecucin del
programa representando el contenido
completo de la memoria, e indicando el
resultado de las sentencias Print.
c. Describir brevemente cmo se establece
el Puntero de Acceso en un Registro de
Activacin. Aplicarlo al caso concreto
del Puntero de Acceso del Registro de
Activacin correspondiente a la primera
activacin del procedimiento C.

COMPILADORES
Primer parcial, 20 de junio de 2011
Observaciones: 1. Fecha estimada de publicacin de las calificaciones: 4 de julio.
2. Fecha estimada de la revisin: 6 de julio.
3. En http://www-lt.ls.fi.upm.es/compiladores se avisar la fecha exacta de
publicacin de las calificaciones y la fecha y hora definitiva de la revisin.
4. La duracin de este examen ser de 2 horas.
5. Cada ejercicio deber entregarse en hojas separadas.
6. Los dos ejercicios tienen la misma puntuacin.
1. De un determinado lenguaje se ha extrado un fragmento con las siguientes caractersticas:
S switch ( E ) do { L } | break ; | id := E ; |
L case N : S L | default : S |
E id | N | E | ( E )
N cte | cte
id id l | id d | l
cte cte d | d
a. Partiendo de la descripcin del lenguaje y teniendo en cuenta todos los elementos que
se muestran (identificadores, nmeros enteros representados con 2 bytes, signos de
puntuacin, palabras reservadas), se pide disear un Analizador Lxico para la
parte lxica de este lenguaje (gramtica, tokens, autmata finito determinista y acciones
semnticas), que introduzca toda la informacin posible en la Tabla de Smbolos.
b. Partiendo de la descripcin del lenguaje y teniendo en cuenta la parte sintctica que se
muestra, se pide extraer las reglas de la Gramtica de Contexto Libre que refleja la
sintaxis del lenguaje y, seguidamente, construir la tabla de Anlisis Sintctico
Descendente. A la vista de la tabla obtenida, qu se puede afirmar acerca de la
gramtica?
2. Sea el siguiente fragmento de gramtica:
P D S
D type T var V
T id = record C end ; T | /* donde id ser un nombre de tipo correspondiente a un registro
C id : X ; C |
V id : X ; V |
X int | bool | id /* donde id se ha declarado como registro
S S ; S | id := E
E E + E | E or E | id | id . id /* donde id
1
.id
2
refleja el acceso al campo id
2
del registro id
1

Se pide disear el Analizador Semntico mediante un Esquema de Traduccin
(explicando el significado de todos los atributos y funciones utilizadas), teniendo en
cuenta que:
No hay en ningn caso conversin automtica de tipos
El identificador de la parte izquierda de la asignacin puede ser de cualquiera de los
tipos posibles del lenguaje
El operador suma acta entre enteros, que se representan con 2 bytes.
El operador or acta entre lgicos, que se representan con 1 byte.
El analizador lxico introduce en la Tabla de Smbolos toda la informacin posible.
PROCESADORES DE LENGUAJES
Examen Final, 8 de julio de 2011
Observaciones: 1. La fecha estimada de publicacin de las calificaciones es el 12 de julio.
2. La fecha estimada de la revisin es el 14 de julio.
3. La duracin de este examen ser de 2 horas.
4. Cada ejercicio deber entregarse en hojas separadas.
5. Las tres preguntas tienen la misma puntuacin.
1. Un lenguaje dispone, entre otros, de los siguientes elementos (se muestran ordenados por el nmero de prioridad):
1. Identificadores: pueden comenzar por una letra o un dgito y pueden contener cualquier cantidad de letras o
dgitos, siempre que al menos tengan una letra.
2. Enteros: formados por una secuencia no vaca de dgitos.
3. Reales en notacin normal: formados por una secuencia no vaca de dgitos, un punto y otra secuencia no vaca de
dgitos.
4. Reales en notacin cientfica: formados por una secuencia no vaca de dgitos, seguida, opcionalmente, de un
punto y una secuencia no vaca de dgitos. A continuacin, tras la letra E, ir la parte exponencial formada por un
signo opcional y un entero.
En caso de duda con alguna palabra del lenguaje, el analizador tomar la que coincida con la descripcin con nmero
de prioridad mayor. La tabla resume algunos ejemplos vlidos y errneos de estos elementos:
identificador entero real, notacin normal real, notacin cientfica errores
A 0 0. 0 2E3 3. 2E3F - 54
8E 88 44. 3 4. 102030E1 3E- 5A 1. 2E3. 4
DC10 432 3. 8888888888 8. 77E+3 J 8. 3 6.
2E3F 9876 54321. 0 6. 023E- 23 . 5 5. E2
Se pide construir la gramtica regular, tokens, autmata y acciones semnticas (indicando los accesos a la Tabla de
Smbolos) de un Analizador Lxico para este lenguaje.
2. Sea la siguiente gramtica:
P | P S
S < E >
E | cte E | var E | cte + E
Se pide:
a. Completar en la plantilla adjunta el Autmata Reconocedor de Prefijos Viables (correspondiente al mtodo de
anlisis sintctico SLR). La plantilla NO contiene errores, aunque est incompleta.
b. J ustificar la posible existencia de conflictos en los estados I
0
, I
1
, I
5
e I
6
del Autmata anterior.
c. J ustificar si la gramtica es LL(1). En caso de que no lo sea, aplicar las transformaciones necesarias y demostrar
que la nueva gramtica cumple la condicin LL.
3. Sea la siguiente gramtica:
P D S D D L : T ; |
L id , L | id T integer | boolean
I id := E oplog and | or
A id ++ | I oprel > | < | = | !=
R nm : S ; R | default S ; |
E id | nm | E & E | E oprel E | E oplog E
S S ; S | for ( I ; E ; A ) S | I | switch id of R end |
Se pide disear el Analizador Semntico mediante una Definicin Dirigida por la Sintaxis (que introduzca toda la
informacin posible en la Tabla de Smbolos y explicando brevemente las funciones y atributos utilizados) sabiendo
que:
Todas las variables han de estar declaradas previamente a su uso
El Analizador Lxico mete los lexemas de los identificadores en la Tabla de Smbolos
El lenguaje no tiene conversin de tipos
El operador & acta entre operandos del mismo tipo y devuelve un resultado de ese tipo
El operador ++ acta sobre enteros
En el for, los identificadores de la inicializacin (I) y la asignacin (A) han de ser enteros, y la condicin (E) tiene
que ser lgica
El switch funciona de la siguiente manera: se ejecuta solo la rama cuyo nm es igual que el valor del id; si
ningn num coincide, se ejecuta la rama default si existe
P
r
o
c
e
s
a
d
o
r
e
s

d
e

L
e
n
g
u
a
j
e
s

8
-
j
u
l
i
o
-
2
0
1
1

P
r
e
g
u
n
t
a

2
.

H
o
j
a

d
e

R
e
s
p
u
e
s
t
a


A
p
e
l
l
i
d
o
s
:

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


N
o
m
b
r
e
:

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

I
0

P


P




E


c
t
e

+


E

E


c
t
e

E

E


v
a
r

E

E


c
t
e

+

E





c
t
e

v
a
r


<

I
1

I
6

I
9

I
5


E


c
t
e


E

E


c
t
e


+

E

E


c
t
e

E

E


v
a
r

E

E


c
t
e

+

E


COMPILADORES
Examen Final, 15 de septiembre de 2011
Observaciones: 1. La fecha estimada de publicacin de las calificaciones es el 26 de septiembre.
2. La fecha estimada de la revisin es el 28 de septiembre.
3. La duracin de este examen ser de 2 horas.
4. Cada ejercicio deber entregarse en hojas separadas.
5. Las tres preguntas tienen la misma puntuacin.
1. Un lenguaje dispone, entre otros, de los siguientes elementos (se muestran ordenados por el nmero de
prioridad):
1. Identificadores: pueden comenzar por una letra o un dgito y pueden contener cualquier cantidad de
letras o dgitos, siempre que al menos tengan una letra.
2. Enteros: formados por una secuencia no vaca de dgitos.
3. Reales en notacin normal: formados por una secuencia no vaca de dgitos, un punto y otra secuencia no
vaca de dgitos.
4. Reales en notacin cientfica: formados por una secuencia no vaca de dgitos, seguida, opcionalmente,
de un punto y una secuencia no vaca de dgitos. A continuacin, tras la letra E, ir la parte exponencial
formada por un signo opcional y un entero.
En caso de duda con alguna palabra del lenguaje, el analizador tomar la que coincida con la descripcin
con nmero de prioridad mayor. La tabla resume algunos ejemplos vlidos y errneos de estos elementos:
identificador entero real, notacin normal real, notacin cientfica errores
A 0 0.0 2E3 3.2E3F -54
8E 88 44.3 4.102030E1 3E-5A 1.2E3.4
DC10 432 3.8888888888 8.77E+3 J8.3 6.
2E3F 9876 54321.0 6.023E-23 .5 5.E2
Se pide construir la gramtica regular, tokens, autmata y acciones semnticas (indicando los accesos a la
Tabla de Smbolos) de un Analizador Lxico para este lenguaje.

2. Sea la siguiente gramtica:
P D S D D L : T ; |
L id , L | id T integer | boolean
I id := E oplog and | or
A id ++ | I oprel > | < | = | !=
R nm : S ; R | default S ; |
E id | nm | E & E | E oprel E | E oplog E
S S ; S | for ( I ; E ; A ) S | I | switch id of R end |
Se pide disear el Analizador Semntico mediante una Definicin Dirigida por la Sintaxis (que introduzca
toda la informacin posible en la Tabla de Smbolos y explicando brevemente las funciones y atributos
utilizados) sabiendo que:
Todas las variables han de estar declaradas previamente a su uso
El Analizador Lxico mete los lexemas de los identificadores en la Tabla de Smbolos
El lenguaje no tiene conversin de tipos
El operador & acta entre operandos del mismo tipo y devuelve un resultado de ese tipo
El operador ++ acta sobre enteros
En el for, los identificadores de la inicializacin (I) y la asignacin (A) han de ser enteros, y la condicin
(E) tiene que ser lgica
El switch funciona de la siguiente manera: se ejecuta solo la rama cuyo nm es igual que el valor del
id; si ningn nm coincide, se ejecuta la rama default si existe.


3. Sea el siguiente programa fuente:
Global a: entero;
Programa Tercetos;
Tipo Registro Terceto= a1: entero; a2: entero; a3: entero; FinRegistro;
Local b: Terceto;
Procedimiento Decide (Ref x: entero; y: real; Ref ter: Terceto);
Inicio Decide
Si ((x y) < 1)
Entonces a:= a + 1;
Caso x:
1: ter.a1:= ter.a1 + a;
2: ter.a2:= ter.a2 + a;
3: ter.a3:= ter.a3 + a;
FinCaso;
Fin Decide;

Procedimiento Tratar (Ref x: entero; y: Terceto);
Local i: entero;
Procedimiento Aux (b: entero);
Local c: real;
Inicio Aux
c:= b / 2,0;
Ejecuta Decide (b, c, y);
Fin Aux;
Inicio Tratar
Desde i:= 1 Hasta 3 Hacer
Ejecuta Aux (i);
x:= y.a2 + y.a3;
Fin Tratar;

Inicio Tercetos
a:= 2;
b.a1:= 10;
b.a2:= 20;
b.a3:= 30;
Ejecuta Tratar (a, b);
Imprime (a);
Imprime (b);
Fin Tercetos;

Tnganse en cuenta las siguientes caractersticas:
El compilador no realiza ningn tipo de optimizacin
El lenguaje no distingue las maysculas de las minsculas
Los enteros ocupan 2 bytes y los reales 6 bytes; las direcciones ocupan 4 bytes
El lenguaje tiene conversin automtica de tipos.
Si un parmetro va precedido por la palabra Ref, se pasa por referencia. En caso contrario, se pasa
por valor.
El lenguaje tiene estructura de bloques.
Se pide:
a. Disear un Registro de Activacin para este lenguaje, teniendo en cuenta exclusivamente la estructura
del programa Tercetos.
b. Realizar la traza de ejecucin del programa. Indicar el resultado de las sentencias Imprime.

ANLISIS LXICO
Primer examen. 7 de noviembre de 2011
Observaciones: 1. Las calificaciones se publicarn hacia el 22 de noviembre.
2. La revisin ser hacia el 25 de noviembre.
3. En la web se avisar de las fechas exactas.
4. La duracin de este examen ser de 40 minutos.
1. Se tiene el siguiente lenguaje:
Dispone de variables con las siguientes caractersticas:
Su nombre siempre debe comenzar con una letra.
Despus de la primera letra, pueden tener ms letras o dgitos o subrayados (_).
Aunque pueden tener cualquier longitud, solamente se tienen en cuenta los primeros
63 caracteres de su nombre (el resto ser ignorado).
No hay distincin entre maysculas y minsculas.
No pueden coincidir con ninguna de las 87 palabras reservadas del lenguaje (stas
estarn formadas slo por letras).
Las variables tienen que estar declaradas previamente a su uso.
Las variables pueden ser de tipo entero, carcter, lgico o cadena y se declaran utilizando
las palabras reservadas i nt eger , char , bool ean o st r i ng, respectivamente. Para cada
uno de estos tipos, el lenguaje dispone de las constantes correspondientes:
Una constante de tipo entero est formada por una secuencia de dgitos y se
almacenar en 4 bytes (por ejemplo: 0, 7, 11, 1234567890).
Una constante de tipo carcter es un elemento del cdigo ASCII encerrado entre
apstrofes (por ejemplo: ' a' , ' B' , ' 2' , ' +' ), y su valor es un nmero entre 0 y 127,
correspondiente al cdigo ASCII del elemento. Una constante de tipo carcter tambin
se puede representar en el lenguaje fuente con un signo #seguido inmediatamente del
valor numrico correspondiente (por ejemplo, el carcter ' A' puede ser representado
tambin como #65).
Una constante de tipo lgico se representa mediante las palabras reservadas t r ue y
f al se.
Una constante de tipo cadena se representa con una secuencia de caracteres,
encerrados entre dobles comillas, con una longitud mxima de 255 caracteres (por
ejemplo: " Hol a" , " Pr xi mo Examen: 12/ 12/ 11" , " i f ( a>b) t hen go! " ).
Es posible acceder a un solo carcter de una cadena poniendo el nombre de la variable
seguido entre corchetes de la posicin del carcter al que se quiere acceder; dicha posicin
ser una expresin entera (por ejemplo: nombr e[ 5] ).
Se pide disear un Analizador Lxico para este lenguaje (tokens completos, gramtica
regular, autmata finito determinista, acciones semnticas y errores).
T TA AB BL LA A D DE E S S M MB BO OL LO OS S Y Y A AN N L LI IS SI IS S S SI IN NT T C CT TI IC CO O
Segundo examen. 12 de diciembre de 2011
Observaciones: 1. Las calificaciones se publicarn hacia el 10 de enero.
2. La revisin ser hacia el 12 de enero.
3. En la web se avisar de las fechas exactas.
4. La duracin de este examen ser de 40 minutos.
Sea la siguiente gramtica:
P | P S
S < E >
E | cte E | var E | cte + E
Se pide:
a. Completar en la plantilla adjunta el Autmata Reconocedor de Prefijos
Viables (correspondiente al mtodo de anlisis sintctico SLR). La plantilla
no contiene errores, aunque est incompleta.
b. Justificar la posible existencia de conflictos en los estados I0, I1, I5 e I6 del
Autmata anterior.
c. Justificar si la gramtica es LL(1). En caso de que no lo sea, aplicar las
transformaciones necesarias y demostrar que la nueva gramtica cumple las
condiciones LL.
A
n

l
i
s
i
s

S
i
n
t

c
t
i
c
o

1
2
-
d
i
c
i
e
m
b
r
e
-
2
0
1
1

P
r
e
g
u
n
t
a

1
.

H
o
j
a

d
e

R
e
s
p
u
e
s
t
a


A
p
e
l
l
i
d
o
s
:

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


N
o
m
b
r
e
:

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

I
0

P


P




E


c
t
e

+


E

E


c
t
e

E

E


v
a
r

E

E


c
t
e

+

E





c
t
e

v
a
r


<

I
1

I
6

I
9

I
5


E


c
t
e


E

E


c
t
e


+

E

E


c
t
e

E

E


v
a
r

E

E


c
t
e

+

E


COMPILADORES
Examen primer parcial. 24 de enero de 2012
Observaciones: 1. Las calificaciones se publicarn hacia el 27 de febrero.
2. La revisin ser hacia el 29 de febrero.
3. En la web se avisar de las fechas exactas.
4. La duracin de este examen ser de 2 horas.
5. Todos los ejercicios tienen la misma puntuacin.
1. Un intrprete de comandos de un Sistema Operativo dispone de instrucciones con los
siguientes formatos:
EDI T {fichero}
1
n
COPY fichero fichero DI RECTORY [fichero]
DELETE fichero RENAME fichero fichero
El formato del nombre de un fichero es: nombre[. extensin][; versin], donde nombre y
extensin pueden tener hasta quince letras o dgitos y la versin es un nmero entero sin signo
inferior a 100. El nombre completo de un fichero no puede incluir blancos. Dentro del nombre o
de la extensin de un fichero se pueden incluir caracteres comodines:
Asterisco (*): representa ninguno, uno o varios caracteres. Si aparece, el asterisco
ser siempre el ltimo carcter de ese nombre o de esa extensin.
Interrogacin (?): representa un carcter en la posicin en que aparezca.
El nmero de versin tambin puede ser sustituido por el comodn asterisco.
Nota: El intrprete cuenta con una funcin (FAT) que cuando recibe el nombre, la
extensin y la versin, devuelve un puntero al fichero o ficheros. Dicho puntero es la
informacin que el Analizador Sintctico necesita acerca de los ficheros.
Se pide disear el Analizador Lxico correspondiente a este intrprete de comandos,
incluyendo la gramtica regular en BNF, los tokens completos, un autmata finito
determinista de tamao reducido y las acciones semnticas.

2. Sea la siguiente gramtica:
S T V | V Z
T a T | b T | h
V | c Z h
Z | d Z
Se pide:
a. Demostrar que la gramtica cumple la Condicin LL(1) detallando cada comprobacin
b. Construir la tabla correspondiente al Analizador Descendente LL(1).
c. Disear los procedimientos correspondientes al Analizador Descendente Predictivo
Recursivo para los smbolos S y Z.

3. De un lenguaje se ha extrado el siguiente fragmento de gramtica:
F function id (L): T; begin S end ;
L id : T ; L | id : T
S S ; S | return E | id += E
E id | E != E
T integer | boolean
Se pide disear el Analizador Semntico mediante un Esquema de Traduccin teniendo
en cuenta que:
El lenguaje tiene variables enteras y lgicas y no realiza conversiones de tipos
El cuerpo de la funcin tiene que tener al menos una sentencia return
La sentencia id += E es equivalente a id := id + E (el operador + representa tanto la
suma aritmtica como el or logico)
El != es el operador distinto para comparar dos valores del mismo tipo
Se debe detallar la gestin de la Tabla de Smbolos pero teniendo en cuenta que el
Analizador Lxico introduce los lexemas en la Tabla de Smbolos
Deben explicarse brevemente los atributos y funciones utilizadas
COMPILADORES
Examen final. 24 de enero de 2012
Observaciones: 1. Las calificaciones se publicarn hacia el 10 de febrero.
2. La revisin ser hacia el 14 de febrero.
3. En la web se avisar de las fechas exactas.
4. La duracin de este examen ser de 2 horas.
5. Ambos ejercicios tienen la misma puntuacin.
1. De la gramtica de un lenguaje se han entresacado las siguientes reglas:
S do id = E, E Inc S | id = E
Inc , E |
E E * E | id
Se pide disear una Definicin Dirigida por la Sintaxis para realizar la Generacin de
Cdigo de Tres Direcciones sobre estas reglas, explicando concisamente los atributos y
funciones empleadas, y detallando todos los accesos a la Tabla de Smbolos. La sentencia
del bucle do funciona como sigue: primero se evalan (una sola vez) las tres expresiones,
asignndose al identificador (id) el resultado de la primera (E); mientras el identificador no
sea mayor que la segunda expresin (E), se ejecuta la sentencia (S) y, posteriormente, se
incrementa el valor del identificador en el valor de la tercera expresin (Inc) (si sta se
omite en la sentencia del bucle do, el identificador se incrementar en una unidad).
Ejemplos:
k =1
do i =1, 6 k =k * i
k =1
do i =1, 6, 2 k =k * i
i valdr 1, 2, 3, 4, 5, 6
al final k valdr 720
i valdr 1, 3, 5
al final k valdr 15

2. Sea el siguiente programa correcto:
Pr ogr amPr epar ar - vi aj e;
I nt eger : kms; /* Distancia al destino
I nt eger : n- h; /* Nmero de hijos
I nt eger : Cansanci o, t ar ea;
St r i ng: Medi o- Tr ansp;

Pr ocedur e Pr epar ar - mal et a ( n- h: I nt eger , REF c: I nt eger ) ;
/* REF indica parmetro por referencia
I nt eger : aux;
Funct i on Pr epar ar - mal et a- hi j o ( ) : I nt eger ;
BEGI N /* Preparar-maleta-hijo
c: = c + 1;
Ret ur n 3;
END; /* Preparar-maleta-hijo
BEGI N /* Preparar-maleta
t ar ea: = t ar ea + 3 * n- h;
aux: = 1;
Whi l e aux < n- h Do
Begi n
aux: = aux + 1;
t ar ea: = t ar ea - Pr epar ar - mal et a- hi j o ( ) ;
End;
END; / * Pr epar ar - mal et a

Pr ocedur e Tr anspor t e ( kms: I nt eger ) ; /* parmetro por valor
BEGI N /* Transporte
I f kms >= 800 Then Medi o- Tr ansp: = " avi n" ;
El se Medi o- Tr ansp: = " coche" ;
t ar ea: = t ar ea - 5;
END; /* Transporte

BEGI N /* Preparar-viaje
Cansanci o: = 1;
n- h: = 3;
Pr i nt ( " I nt r oduzca l a di st anci a al dest i no [ 1- 10000] : " ) ;
Read ( kms) ; /* lee un nmero del teclado
t ar ea: = 5;
Pr epar ar - mal et a ( n- h, Cansanci o) ;
Tr anspor t e ( kms) ;
I f t ar ea = 0 Then Pr i nt ( " Vi aj e Pr epar ado" ) El se Pr i nt ( " Vi aj e No Pr epar ado" ) ;
END. /* Preparar-viaje
Teniendo en cuenta que el lenguaje posee recursividad y tiene estructura de bloques con
reglas de mbito lxico, se pide:
a. Disear y describir brevemente el Registro de Activacin general para este lenguaje.
b. Realizar una traza de ejecucin del programa representando el contenido completo de
la memoria en la plantilla adjunta, e indicando el resultado de las sentencias Pr i nt .
G GE EN NE ER RA AD DO OR R D DE E C C D DI IG GO O I IN NT TE ER RM ME ED DI IO O
11 de abril de 2012
Observaciones: 1. Las calificaciones se publicarn aproximadamente el 24 de abril.
2. La revisin ser aproximadamente el 26 de abril.
3. En la web se dar informacin sobre la publicacin de notas y la revisin.
4. La duracin de este examen ser de 40 minutos.
De un lenguaje se ha extrado el siguiente fragmento de gramtica:
S for id in range (P) do S | A
P E, E, E | E
A id := E
E cte_ent | id | E op_arit E
Se pide disear, mediante un Esquema de Traduccin, un Generador de Cdigo
Intermedio que proporcione como salida cdigo de tres direcciones teniendo en cuenta
que:
Todas las expresiones y variables son siempre enteras.
No existen conversiones de tipos.
La funcin r ange devuelve, cada vez, un nmero perteneciente a una secuencia de
nmeros enteros (sobre la que iterar el f or ) de la siguiente manera:
o Si slo contiene un argumento (r ange( Y) ), comienza en 0 y termina en el mayor
nmero posible inferior a Y, siendo 1 el incremento (o paso) para la secuencia.
Por ejemplo, r ange( 10) genera los nmeros: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].
o Si recibe tres argumentos (r ange( X, Y, Z) ), comienza en X y termina en el mayor
nmero posible inferior a Y, siendo Z el incremento (o paso) para la secuencia.
Por ejemplo, r ange( 2, 15, 3) genera los nmeros: [2, 5, 8, 11, 14].
Deben explicarse brevemente los atributos y funciones utilizadas.

A AN N L LI IS SI IS S L L X XI IC CO O
12 de abril de 2012
Observaciones: 1. Las calificaciones se publicarn aproximadamente el 23 de abril.
2. La revisin ser aproximadamente el 25 de abril.
3. En la web se dar informacin sobre la publicacin de notas y la revisin.
4. La duracin de este examen ser de 40 minutos.
Una Federacin deportiva necesita crear una aplicacin para calcular los rankings de sus
atletas en funcin de las clasificaciones de las distintas carreras en que participan. Una vez
realizado el diseo de dicha aplicacin, uno de los mdulos que se debe crear es un
procesador de los ficheros de clasificaciones que sirva de punto de entrada al generador de
rankings. La tarea pedida es el diseo del Analizador Lxico de este procesador.
El formato del fichero de clasificaciones agrupa a los corredores por su categora. As, para
cada una de las categoras, aparecer en una lnea el nombre de la categora, formado por
una letra (la inicial de Damas u Hombres), seguida de un guin, la edad (con dos dgitos) y,
posiblemente, una letra ms, como por ejemplo: D-14, H-21, H-20A.
A continuacin, en cada lnea, aparecern los datos (separados por blancos) de cada
corredor, que podr incluir la siguiente informacin:
El nmero de licencia es un nmero de 8 dgitos que identifica a cada corredor.
Nombres y apellidos del corredor separados por blancos.
Tiempo del corredor. Aparecer en uno de dos posibles formatos: si el tiempo es
inferior a una hora, aparecer como dd:dd (36:08); en caso contrario, aparecer como
d
+
:dd:dd (201:24:45). La aplicacin necesita manejar los tiempos como nmero de
segundos para el clculo posterior de las puntuaciones de cada corredor.
Cdigo que define el estado de la participacin del corredor, que puede ser: 1, para
prueba correcta; 2, para desclasificado; 3, indica fuera de control y 4, no toma la
salida.
Se pide realizar el diseo del Analizador Lxico (tokens, gramtica regular, autmata y
acciones semnticas) para procesar estos ficheros de clasificaciones en este contexto.
Ejemplo de un fichero de clasificaciones correcto (se han impreso tambin los saltos de
lnea):
D-14
28001457 Mara Luisa Prez Gmez 26:04 1
08906756 Ins Gonzlez 1:00:13 1
28973434 Sonia Bjar 3:13:13 3
H-14
23457876 Mario Soria 31:11:59 1
56245432 Jos Gonzlez 4
PROCESADORES DE LENGUAJES
TABLA DE SMBOLOS Y ANLISIS SINTCTICO
Segundo examen. 10 de mayo de 2012
Observaciones: 1. Las calificaciones se publicarn hacia el 23 de mayo.
2. La revisin ser hacia el 25 de mayo.
3. En la web se avisarn las fechas exactas.
4. La duracin de este examen es de 40 minutos.
Sea el siguiente fragmento de una gramtica:
E A x | B y | C z
A x | B x y | B x
B x | E z
C z |
Se pide:
a. Construir el Autmata Reconocedor de Prefijos Viables (Anlisis Sintctico LR).
Estudiar y justificar la existencia de conflictos.
b. Independientemente de que la gramtica sea o no LR, construir las Tablas LR
(solamente las filas correspondientes a los estados que contengan tems
correspondientes a las reglas de B).
c. Independientemente de que la gramtica sea o no LL, construir la Tabla LL
(Anlisis Sintctico Descendente).
C CO OM MP PI IL LA AD DO OR RE ES S Y Y P PR RO OC CE ES SA AD DO OR RE ES S D DE E L LE EN NG GU UA AJ JE ES S
1 15 5 d de e j ju un ni io o d de e 2 20 01 12 2
Observaciones: 1. Fecha aproximada de publicacin de las calificaciones: 21-junio (Procesadores de Lenguajes) y 27-
junio (Compiladores).
2. Fecha aproximada de la revisin: 25-junio (Procesadores de Lenguajes) y 29-junio (Compiladores).
3. Cada ejercicio debe entregarse en hojas separadas.
4. Cada ejercicio tiene la misma puntuacin.
5. Los alumnos de Compiladores deben realizar los ejercicios 1, 2 y 3 y disponen de 2 horas.
6. Los alumnos de Procesadores de Lenguajes deben realizar nicamente el ejercicio 3 y disponen
de 40 minutos.

1. Se pide disear el Analizador Lxico (gramtica, tokens, AFD, acciones semnticas y errores) del siguiente
fragmento de un lenguaje de programacin:
Un identificador vlido es cualquier combinacin de letras y dgitos que tenga al menos una letra.
Tambin puede contener el carcter subrayado (_), pero no puede ni empezar ni terminar con este
carcter. Ejemplos: 111a, b, c25aF, 11_1z, c__25v_f
Los comentarios empiezan por dos guiones seguidos (- - ) y terminan con el fin de lnea
Las variables se declaran poniendo su nombre, el carcter dos puntos (: ), el tipo (integer,
boolean) y, finalmente, un punto y coma (; ). Ejemplo: a: i nt eger ;
o En una declaracin se puede inicializar el identificador. Para ello, despus del tipo, se pone el signo
de asignacin : = seguido de una expresin. Se termina con el punto y coma final de la declaracin.
Ejemplo: a: i nt eger : = 1;
o Los identificadores constantes se declaran aadiendo la palabra const justo delante del tipo.
Ejemplo: Ancho: const i nt eger : = 31;
Las expresiones del lenguaje vienen definidas mediante las siguientes reglas:
E id | nm_entero | true | false | E * E | E ** E | E and E | E or E
El lenguaje tiene palabras reservadas, como las que se han marcado en negrita en este enunciado, las
correspondientes a las sentencias de control de flujo del lenguaje (loop, while, repeat), etc.

2. a. Sea la siguiente gramtica:
S A d
A A b | A c | B A
B | A
Se pide obtener el estado inicial del Autmata Reconocedor de Prefijos Viables (mtodo SLR), as como
todos los estados a los que se puede transitar desde el estado inicial en un paso.
b. Sea la siguiente gramtica:
S case id is C A B | id := constante
A C A |
B other begin S end |
C constante begin S end
Se pide disear los procedimientos del mtodo de Anlisis Sintctico Descendente Recursivo, usando (si
se desea) un procedimiento Equipara para el reconocimiento de smbolos terminales.
c. Sea la siguiente gramtica:
S d A
A b A | b c B
B | d B
Se pide construir la tabla del Analizador Descendente LL, modificando la gramtica si fuera necesario
para que cumpla la condicin LL(1).

3. Sea la siguiente gramtica, que representa un fragmento de un lenguaje:
D D D | function T id ( L ) begin S end
T int | string | array (cte_entera) of T
L T id | L , L
S S S | id := E | T id
E id | id ( A )
A E | A , A
Se pide construir un Analizador Semntico para este lenguaje mediante un Esquema de Traduccin,
explicando brevemente todas las funciones y atributos utilizados, teniendo en cuenta que:
El lenguaje exige declaracin previa de identificadores y un identificador no puede declararse dos
veces en un mismo mbito.
El lenguaje dispone de funciones (con al menos un parmetro), tipos simples (entero y cadena) y
vectores unidimensionales de tipos simples.
El lenguaje no realiza conversin automtica de tipos.
El lenguaje permite la declaracin de variables locales intercaladas con las sentencias.
Los ndices de los vectores van de 1 hasta el valor indicado por la cte_entera en la declaracin.
La expresin id(A) puede representar un acceso a un elemento de un vector o la llamada a una funcin.

C CO OM MP PI IL LA AD DO OR RE ES S Y Y T TR RA AD DU UC CT TO OR RE ES S D DE E L LE EN NG GU UA AJ JE ES S
1 15 5 d de e j ju un ni io o d de e 2 20 01 12 2
Observaciones: 1. Fecha aproximada de publicacin de las calificaciones: 21-junio (Traductores de Lenguajes) y 27-
junio (Compiladores).
2. Fecha aproximada de la revisin: 25-junio (Traductores de Lenguajes) y 29-junio (Compiladores).
3. Cada ejercicio debe entregarse en hojas separadas. Cada ejercicio tiene la misma puntuacin.
4. Los alumnos de Compiladores deben realizar los ejercicios 1 y 2 y disponen de 2 horas.
5. Los alumnos de Compiladores que ya se examinaron de Generacin de Cdigo Intermedio y los
alumnos de Traductores de Lenguajes deben realizar slo el ejercicio 2 y disponen de 1 hora.
1. Sea el siguiente fragmento de una gramtica de un lenguaje de programacin:
S repeat S until E | id := E
E E oplog E | E E | id | E oprel E
oprel > | <
oplog and | or
Se pide, explicando el significado de las funciones y atributos empleados, disear el Generador de Cdigo
de tres direcciones mediante un Esquema de Traduccin. La representacin de las expresiones lgicas
debe hacerse numricamente. Supngase que el Anlisis Semntico ya est realizado y que, por tanto,
todos los tipos son correctos. Tngase en cuenta que el lenguaje tiene las siguientes caractersticas:
Las variables deben haber sido declaradas con anterioridad a su uso.
Slo existen los tipos entero y lgico.
En los tipos lgicos, cero representa falso y distinto de cero representa verdadero.
El lenguaje realiza conversin automtica de tipos.
La expresin E
1
E
2
refleja la operacin de potencia entre enteros, y debe tenerse en cuenta que en el
cdigo intermedio no existe el operador de potencia. Si el exponente (E
2
) es un valor inferior a uno, el
resultado de la potencia (E
1
E
2
) ser el valor de la base (E
1
).
La sentencia repeat ejecuta las sentencias S hasta que la expresin E sea verdadera.
2. Sea el siguiente programa correcto:
Program Ejercicio-junio
I nt eger : a;
I nt eger : z: = 0;
Function Fun ( REF x: I nt eger ) : I nt eger ; /* REF indica parmetro por referencia
I nt eger : z: = 10;
Procedure Proc ( REF x: I nt eger ; REF y: I nt eger ) ;
BEGIN /* Pr oc
z: = z + x;
z: = z * y;
END; /* Pr oc
BEGIN /* Fun
Pr oc ( x, 5) ;
Ret ur n z;
END; /* Fun
Function Fun2 ( z: I nt eger ) : I nt eger ; /* parmetro por valor
BEGIN /* Fun2
I f z < 0 Then z: = 100;
El se z: = f un2 ( z - 50) + 10;
Ret ur n z;
END; /* Fun2
BEGIN /* Ej er ci ci o- j uni o
a: = 3;
z: = f un2 ( f un ( a) ) ;
Pr i nt ( a, z) ;
END. /* Ej er ci ci o- j uni o
a. Disear y describir brevemente el Registro de Activacin general para este lenguaje.
b. Realizar una traza de ejecucin del programa representando el contenido completo de la memoria en la
plantilla adjunta, e indicando el resultado de las sentencias Pr i nt .
PROCESADORES DE LENGUAJES
Examen Final, 16 de julio de 2012
Observaciones: 1. La fecha estimada de publicacin de las calificaciones es el 20 de julio.
2. La fecha estimada de la revisin es el 23 de julio.
3. La duracin de este examen ser de 1horas.
4. Cada ejercicio deber entregarse en hojas separadas.
5. Las dos preguntas tienen la misma puntuacin.
1. La Direccin General de Trfico recibe, de los responsables de trfico de las distintas autonomas, un fichero
que contiene las incidencias de trfico en sus carreteras. Por cada incidencia, la informacin recibida va en
una lnea y consta (en este orden) de los siguientes elementos:
Carretera: una o dos letras, seguidas de un guin y el cdigo numrico de la carretera que est
compuesto de hasta 4 dgitos, siendo el primero de ellos siempre un dgito entre 1 y 6.
Puntos kilomtricos inicial y final de la incidencia: vienen representados cada uno por un nmero de
hasta 3 dgitos, que puede ir seguido de una coma y otro dgito. Si la incidencia no ocurre en un
tramo, sino en un punto de la carretera, se proporciona un solo punto kilomtrico.
Nivel de incidencia: viene representado por una palabra que indica un color de los siguientes: Negro,
Rojo, Amarillo, Verde, Gris.
Municipio en donde se produce la incidencia: est formado por una palabra, y tiene que coincidir con
uno de los municipios vlidos que estn almacenados en una tabla.
Causa de la incidencia: la descripcin es un texto que viene encerrado entre comillas y puede
contener cualquier carcter (excepto las comillas). El texto de la causa puede estar vaco.
Algunos ejemplos de incidencias son:
B-20 14 12 Amarillo Barcelona "RETENCIN / CONGESTIN por AVERA"
N-323 67 77,8 Negro Carchel "OBSTCULO FIJO por DESPRENDIMIENTOS"
AP-68 14 Gris Orozko ""
CA-3113 0 4,9 Rojo PuertoReal "CARRETERA CERRADA EN AMBOS SENTIDOS por OBRAS"
N-1 308,5 307,3 Verde Ameyugo "CARRIL LENTO CERRADO por DESPRENDIMIENTOS"
Se pide construir la gramtica regular, tokens, autmata y acciones semnticas (indicando los accesos a la
Tabla de Smbolos) de un Analizador Lxico para este lenguaje.

2. Sea la siguiente gramtica:
S case E C otherwise S ; S | id := E ; S |
C E ( S ) C |
E id | cte_entera + E
El lenguaje presenta las siguientes caractersticas:
No hay conversin automtica de tipos
Hay declaracin previa de variables que pueden ser enteras, reales o lgicas
La expresin E de la sentencia case puede ser entera o lgica. Las expresiones E de cada caso C
deben ser todas del mismo tipo y coincidir con la expresin E de la correspondiente sentencia case.
Se pide:
a. Obtener la Tabla correspondiente al Analizador Sintctico Descendente por Tablas (LL(1)). Razonar a
la vista de la tabla si la gramtica es LL(1) o no.
b. Disear el Analizador Semntico mediante un Esquema de Traduccin para este fragmento de
lenguaje, describiendo brevemente las funciones y atributos utilizados.

COMPILADORES
Examen Final, 10 de septiembre de 2012
Observaciones: 1. La fecha estimada de publicacin de las calificaciones es el 19 de septiembre.
2. La fecha estimada de la revisin es el 21 de septiembre.
3. La duracin de este examen es de 2horas.
4. Cada ejercicio deber entregarse en hojas separadas.
1. La notacin hngara para nombrar identificadores utiliza el primer carcter del nombre para indicar el tipo
de la variable. Considrense nicamente los siguientes tipos:
c: carcter
n: entero
f : real
b: lgico
s: cadena
l : entero gran precisin
Se tiene un lenguaje con las siguientes caractersticas:
Dispone de cadenas de caracteres encerradas entre comillas. La cadena puede estar vaca.
Los elementos lxicos del lenguaje se encuentran separados entre s por blancos o saltos de lnea.
Los identificadores tienen que ir en notacin hngara, y pueden estar formados por letras, dgitos o
subrayados, aunque no puede terminar por el carcter de subrayado. Los nombres de identificadores
deben tener en total un mnimo de un carcter y un mximo de 64.
Se diferencian las maysculas de las minsculas.
Un identificador puede aparecer en cualquier parte del programa y la primera aparicin constituye su
declaracin. El primer carcter tiene que corresponder obligatoriamente con uno de los tipos vlidos.
Se pide construir un Analizador Lxico (gramtica regular, tokens, autmata, acciones semnticas y
errores) que reconozca este lenguaje y rellene toda la informacin posible en la Tabla de Smbolos.
(3 puntos)
2. Sea la siguiente gramtica, cuyo axioma es A:
A B C | x D
B y B |
C z B | x D
D B D | C A
Se pide:
a. Calcular los conjuntos First y Follow para todos los smbolos no terminales de la gramtica.
b. Comprobar si se cumple la condicin LL(1) para esta gramtica.
c. Obtener la tabla correspondiente al Analizador Sintctico Descendente por Tablas o LL(1) sin
cambiar la gramtica. Si la gramtica no es LL(1), resaltar las celdas que demuestran que no es LL(1).
d. Escribir el procedimiento para el smbolo B correspondiente al mtodo de Anlisis Sintctico
Descendente Recursivo.
e. Calcular el estado del Autmata Reconocedor de Prefijos Viables (mtodo Anlisis Sintctico
Ascendente LR) que se genera a partir del tem C x D.
(3 puntos)
3. Sea el siguiente fragmento de una gramtica:
S while E do S | exit E | id := E | S ; S
E E nand E | id
Se pide disear el Analizador Semntico y el Generador de Cdigo Intermedio (para obtener cdigo de 3
direcciones) mediante una Definicin Dirigida por Sintaxis, representando los lgicos por control de flujo
y teniendo en cuenta que:
Los identificadores pueden ser enteros o lgicos
El lenguaje no realiza conversin de tipos
Una expresin lgica nand es falsa si ambos operandos son ciertos
Cuando la expresin de la instruccin exit E es cierta, se sale del bucle
(4 puntos)
A AN N L LI I S SI I S S L L X XI I C CO O Y Y T TA AB BL LA A D DE E S S M MB BO OL LO OS S
Primer examen. 22 de octubre de 2012
Observaciones: 1. Las calificaciones se publicarn hacia el 14 de noviembre.
2. La revisin ser hacia el 16 de noviembre.
3. En la web se avisar de las fechas exactas.
4. La duracin de este examen es de 40 minutos.
Se tiene un lenguaje para representar los datos de alumnos en un fichero. Para cada
alumno, el fichero contiene una lnea con la siguiente informacin, llevando cada campo
obligatoriamente al menos un blanco al final:
Nmero de DNI (compuesto obligatoriamente por 8 dgitos seguidos de una letra)
Nmero de matrcula. Existen tres formatos para representar el nmero de matrcula:
o 6 dgitos
o Una letra seguida de 4 dgitos
o 2 dgitos, la letra M y 3 dgitos
Nombre y apellidos del alumno (formados nicamente con letras)
La palabra ECTS: seguida inmediatamente del nmero de crditos en los que est
matriculado (nmero entero positivo mayor que cero y menor que 61). Si el alumno no
est matriculado, este campo no aparecer.
Se muestra a continuacin como ejemplo un fragmento de cmo podra ser este fichero:
ECTS:33 04422185K J0499 MARA JOS SNCHEZ DE MORA Y GMEZ DEL POSTIGO
87654321X 010088 ARNOLD ALOIS SCHWARZENEGGER
11M001 FLIX PI ECTS:15 60613579T
00578028S 101234 MARLENE JOSEPHINE GMEZ JUAN ECTS:3
Se desea construir un procesador para este lenguaje con el objetivo de pasar la informacin
de dicho fichero a una base de datos en la que se tendrn que almacenar: el nombre y
apellidos, DNI y matrcula de cada alumno, as como el nmero de crditos en los que est
matriculado (con el fin de poder contabilizar cul es el nmero total de crditos de todos
los alumnos).
Para ello, se pide disear un Analizador Lxico para este lenguaje (tokens completos,
gramtica regular, autmata finito determinista y acciones semnticas).

COMPILADORES
Examen primer parcial. 22 de enero de 2013
Observaciones: 1. Las calificaciones se publicarn hacia el 6 de febrero.
2. La revisin ser hacia el 8 de febrero.
3. En la web se avisar de las fechas exactas.
4. La duracin de este examen ser de 2 horas.
5. Todos los ejercicios tienen la misma puntuacin.
1. Una descripcin de una de las etiquetas de un lenguaje de marcado es:

<img atributo=valor>
La etiqueta img define una imagen en una pgina. Tiene dos atributos obligatorios: src y alt, y el resto de
atributos son opcionales. Los atributos vlidos son los siguientes:
Atributo Descripcin
accesskey Especifica un atajo de teclado para activar el elemento
alt Especifica un texto alternativo para la imagen
class Especifica uno o ms nombres de clase
dir Especifica la direccin del texto
height Especifica la altura de la imagen. El valor debe ser un nmero entero o un porcentaje entero
id Especifica un identificador nico asociado a la imagen
lang Especifica el idioma en el que est la imagen
src Especifica la URL donde est la imagen
style Especifica el estilo para la imagen
tabindex Especifica el orden de tabulacin del elemento. El valor debe ser un nmero entero
title Especifica informacin adicional sobre la imagen
width Especifica el ancho de la imagen. El valor debe ser un nmero entero o un porcentaje entero
Los atributos se definen, en la forma en que se muestra en el ejemplo, con un valor que ser una cadena, un
nmero entero positivo o un porcentaje; la cadena puede contener cualquier carcter (excepto el salto de
lnea) en cualquier cantidad (incluso es vlida la cadena vaca). Los elementos del lenguaje pueden ir separados
por blancos, tabuladores o saltos de lnea.
Ejemplo:
<i mg sr c=" smi l ey. gi f " al t =" Smi l ey f ace" hei ght =50 wi dt h=50%i d=" car a" ><i mg
sr c=" ht t p: / / www. mynewsi t e. com/ i mages/ new/ ~ver y%20bi gbut t onOK. j pg" al t =" Acept ar " >
< i mg al t =" Mapa que muest r a l a r ut a al t esor o" sr c=" i mg/ mapadel t esor o. j pg" >
<i mg t abi ndex = 5 l ang= " es" t i t l e =" Examen f i nal " sr c=" 1. j pg" al t =" Examen" wi dt h
= 88 hei ght =31 style="verticalalign: middle; border: 4px;">
< i mg wi dt h=120%sr c=" azul . png" al t =" " cl ass=" f ondo" i d=" f ondo_azul _cl ar o_3" >
Se pide disear el Analizador Lxico correspondiente a este fragmento de lenguaje, incluyendo
la gramtica regular, los tokens completos, el autmata finito determinista y las acciones
semnticas.
2. Sea la siguiente gramtica LL(1):
S A B | x y A
A w x | | D z E
B y z
D z D
E z E |
Se pide:
a. Calcular los conjuntos First y Follow para todos los smbolos no terminales.
b. Disear los procedimientos del Analizador Sintctico Descendente Recursivo para esta
gramtica utilizando el procedimiento auxiliar que se define a continuacin para comparar con el
siguiente token y avanzar:
Pr ocedur e eq_t k ( t ok: t oken)
Begi n
I f ( pr eanl i si s = t ok)
Then pr eanl i si s: = scan ( )
El se er r or ( t ok)
End
c. Determinar si aadiendo las siguientes reglas a la gramtica anterior se cumple o no la condicin
LL(1) y, en caso negativo, indicar todas las reglas que incumplen dicha condicin.
B
D y
3. Sea el siguiente fragmento de gramtica:
S for ( A ; E ; P ) { S } | if ( E ) { S } | A ; | continue ; | S S
A id = E
E P | id
P ++id
Se pide el diseo del Analizador Semntico, mediante una Definicin Dirigida por Sintaxis,
detallando todos los accesos a la Tabla de Smbolos y explicando brevemente los atributos y
funciones utilizadas, teniendo en cuenta que:
El lenguaje exige declaracin previa de variables
Los tipos del lenguaje son entero, cadena y lgico
La sentencia for funciona de la siguiente manera: se inicializa la variable ndice mediante la
asignacin A y, si la condicin E se evala como cierta, se ejecuta el cuerpo del for (S); luego, se
actualiza dicha variable ndice (P) (exactamente la variable que se ha inicializado en A) y se vuelve
a comprobar la condicin para ver si hay que volver a ejecutar el cuerpo del for; el bucle termina
cuando la condicin sea falsa
La sentencia continue hace que se termine la iteracin en curso del for y se pase, automticamente,
a la siguiente iteracin (que se ejecuta, como siempre, si la condicin E se evala como cierta). Una
sentencia continue no puede estar fuera del cuerpo de un for en un programa correcto
No existe conversin automtica de tipos
El operador de preincremento aumenta en una unidad el valor de una variable entera o cambia el
valor de una variable lgica (negacin lgica)
COMPILADORES
Final. Examen del segundo parcial. 22 de enero de 2013
Observaciones: 1. Las calificaciones del final se publicarn hacia el 6 de febrero.
2. La revisin ser hacia el 8 de febrero.
3. En la web se avisar de las fechas exactas.
4. La duracin de este examen ser de 2 horas.
5. Todos los ejercicios tienen la misma puntuacin.
1. Sea el siguiente fragmento de gramtica:
S for ( A ; E ; P ) { S } | if ( E ) { S } | A ; | continue ; | S S
A id = E
E cte_entera | cte_lgica | E Op_rel E | E * E | P | id
P ++id
Op_rel == | >= |
Se pide el diseo del Generador de Cdigo Intermedio, mediante una Definicin Dirigida por
Sintaxis, representando los lgicos mediante representacin numrica y explicando brevemente los
atributos y funciones utilizadas, teniendo en cuenta que:
El lenguaje exige declaracin previa de variables
Los tipos del lenguaje son entero y lgico
La sentencia for funciona de la siguiente manera: se inicializa la variable ndice mediante la
asignacin A y, si la condicin E se evala como cierta, se ejecuta el cuerpo del for (S); luego, se
actualiza dicha variable ndice (P) y se vuelve a comprobar la condicin para ver si hay que volver
a ejecutar el cuerpo del for; el bucle termina cuando la condicin sea falsa
La sentencia continue hace que se termine la iteracin en curso del for y se pase, automticamente,
a la siguiente iteracin (que se ejecuta, como siempre, si la condicin E se evala como cierta). Una
sentencia continue no puede estar fuera del cuerpo de un for
Los valores lgicos se representan numricamente, de tal manera que 0 es falso y distinto de cero
es cierto
No existe conversin automtica de tipos, excepto entre enteros y lgicos y viceversa
El operador * representa la multiplicacin entera o el and lgico
El operador de preincremento aumenta en una unidad el valor de una variable, devolviendo
como resultado el valor de la variable antes de ser incrementado

2. Sea el siguiente programa correcto escrito en un lenguaje en el que existen conversiones automticas
de tipos:
Program CentroVariable;
dat os: vect or [ 1. . 3] of i nt eger ;
cambi o: bool ean;
cent r o: r eal ;
i t er : i nt eger ;

Procedure CalcularCentro ( i t er : i nt eger ; REF cent : r eal ) ;
Vi ej oCent r o: r eal ; /* REF indica parmetro por referencia

Procedure HaCambiado ( REF camb: bool ean) ;
BEGI N
I f ( ( Vi ej oCent r o cent ) / Vi ej oCent r o) > 0, 15
Then camb: = t r ue;
El se camb: = f al se;
END;

BEGI N /* CalcularCentro
Vi ej oCent r o: = cent ;
cent : = cent / ( 5 + i t er ) ;
i t er : = i t er + 1;
HaCambi ado ( cambi o) ;
I f ( cambi o) Then Cal cul ar Cent r o ( i t er , cent ) ;
END;

BEGI N /* CentroVariable
dat os: = ( 800, 200, 680) ;
cent r o: = dat os[ 1] + dat os[ 2] + dat os[ 3] ;
i t er : = 0;
cambi o: = t r ue;
Cal cul ar Cent r o ( i t er , cent r o) ;
Pr i nt ( cent r o) ;
END.
Se pide:
a. Disear y describir brevemente el Registro de Activacin general para este lenguaje.
b. Realizar una traza de ejecucin del programa representando el contenido completo de la
memoria e indicando el resultado de la sentencia Pr i nt .

PROCESADORES DE LENGUAJ ES
Pr i mer Ex amen, 9 de abr i l de 2013
Observaciones: 1. Fecha estimada de publicacin de las calificaciones: 23 de abril.
2. Fecha estimada de la revisin: 26 de abril.
3. Duracin del examen: 40 minutos.
Un fragmento de un lenguaje tiene las siguientes caractersticas generales, de las cuales habr que tener en
cuenta las necesarias para construir un Analizador Lxico:
Declaracin obligatoria de variables numricas (sin tipo), que pueden ser opcionalmente inicializadas. Las
variables pueden almacenar enteros o reales, indistintamente, pudiendo variar el tipo durante la ejecucin, por lo
que su tipo depender del ltimo valor asignado. Su sintaxis es:
D var id I
I = cte_ent | = cte_real |
Declaracin de funciones. Las funciones devuelven siempre un entero. Pueden llevar cualquier nmero de
parmetros (siempre de tipo entero), que se pasan siempre por valor. Las funciones se pueden anidar y
pueden ser recursivas. Su sintaxis es:
D function id ( A ) begin S end
A id B |
B , id B |
Sentencias. Considrense solamente las sentencias de asignacin y de retorno, con la siguiente sintaxis:
S id = E | id = id ( C ) | return E
C E D |
D , E D |
E cte_ent | cte_real | id | id ( C )
Identificadores. Su nombre comienza por una letra, que puede ir seguida de cualquier cantidad de letras o
dgitos.
Nmeros. Los nmeros reales tienen obligatoriamente parte entera y parte decimal (no se usa la notacin
cientfica para su representacin). Los nmeros enteros estn formados por cualquier cantidad de dgitos.
Delimitadores. Cada sentencia o declaracin tiene que terminar obligatoriamente con un salto de lnea. Los
elementos lxicos del lenguaje pueden usar como delimitador el blanco.
Palabras clave. Todas las palabras clave del lenguaje son reservadas.
Se pide:
a. Construir un Analizador Lxico (gramtica BNF regular, tokens, AFD y acciones semnticas) para todo
el fragmento de lenguaje descrito y que introduzca el mximo de informacin posible en la tabla de
smbolos.
b. Explicar la estructura general de la Tabla de Smbolos para este lenguaje. Detallar cmo ira cambiando
la tabla de smbolos al realizar un anlisis lxico, sintctico y semntico del siguiente programa:
Var a= 1
Function p( a, b , c)
Function q( b)
Begin
Return p( a, b, 2)
End
Var d=8
Var e
Begin
d=8. 2
d=a
b=q( c)
Return b
End
a=p( 3, a, 2)
EXAMEN DE GENERACI N DE CDI GO I NTERMEDI O
8 de abr i l de 2013
Observaciones: 1. Fecha estimada de publicacin de las calificaciones: 23 de abril.
2. Fecha estimada de la revisin: 26 de abril.
3. La duracin de este examen ser de 50 minutos.

Sea el siguiente fragmento de una gramtica:
S id := E
E id
E May (E, E, E)
E PotMul (E, E, E)
Se pide disear el Generador de Cdigo Intermedio (para obtener cdigo de 3
direcciones) mediante una Definicin Dirigida por Sintaxis, usando representacin
numrica para los valores lgicos (0 para falso y 1 para verdadero) y teniendo en cuenta
que:
Hay identificadores lgicos y naturales (0, 1, 2, 3, )
La expresin lgica May es verdadera solo si exactamente dos de sus
expresiones son verdaderas y la otra es falsa. Solo se aplica a expresiones
lgicas.
La expresin PotMul (E
1
, E
2
, E
3
) es equivalente a E
1
* E
2

E
3
. Se aplica a
expresiones naturales o lgicas.
No existen operadores lgicos en el cdigo de 3 direcciones.
Las operaciones aritmticas disponibles en el cdigo intermedio son la suma,
resta, multiplicacin y divisin.
No hay conversin automtica de tipos.
Se asumir que el Analizador Semntico ya se ha encargado de todas las
comprobaciones necesarias.


PROCESADORES DE LENGUAJES
ANLISIS SINTCTICO
Segundo examen. 7 de mayo de 2013
Observaciones: 1. Las calificaciones se publicarn hacia el 20 de mayo.
2. La revisin ser hacia el 22 de mayo.
3. En la web se avisarn las fechas exactas.
4. La duracin de este examen es de 40 minutos.
Sea el siguiente fragmento de una gramtica:
F C I
C a L | x L | L
L e |
R e | -
I e | - O
O e | L R
Se pide:
a. Utilizando la plantilla adjunta, construir el Autmata Finito Determinista
reconocedor de los prefijos viables para realizar un Analizador Sintctico SLR (1).
Nota: la plantilla puede contener errores y omisiones de todo tipo.
b. A la vista del Autmata Finito Determinista obtenido, estudiar todos los estados
en los que puede haber conflictos y justificar si la gramtica es o no SLR (1)
c. Construir la tabla para realizar un Analizador Sintctico LL (1).
d. A la vista de la tabla obtenida, justificar si la gramtica es o no LL(1)
A
n
a
l
i
z
a
d
o
r

L
R

7
-
m
a
y
o
-
2
0
1
3

H
o
j
a

d
e

R
e
s
p
u
e
s
t
a


A
p
e
l
l
i
d
o
s
:

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


N
o
m
b
r
e
:

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

I
0


I
2

I
5

I
1



I
3

L


e

I
4


I
6


I

I

I
L


e

I

C


a

L


I
1
1


C

L

e

I

I

I

L

I


I


R

I

R



L

I

I

COMPILADORES Y PROCESADORES DE LENGUAJES
11 de junio de 2013
Observaciones:1.Fechaaproximadadepublicacindelascalificaciones:17junio(ProcesadoresdeLenguajes)y27
junio(Compiladores).
2.Fechaaproximadadelarevisin:19junio(ProcesadoresdeLenguajes)y2julio(Compiladores).
3.Cadaejerciciodebeentregarseenhojasseparadas.
4.Cadaejerciciotienelamismapuntuacin.
5.LosalumnosdeCompiladoresdebenrealizarlosejercicios1,2y3ydisponende2horas.
6.LosalumnosdeProcesadoresdeLenguajesdebenrealizarnicamenteelejercicio3ydisponen
de40minutos.

1. Un lenguaje dispone, entre otros, de los siguientes elementos:


Identificadores: pueden comenzar por una letra o un dgito y pueden contener cualquier cantidad de
letras o dgitos, siempre que al menos tengan una letra.
Enteros: formados por una secuencia no vaca de dgitos.
Reales en notacin normal: formados por una secuencia no vaca de dgitos, un punto y otra secuencia no
vaca de dgitos.
Reales en notacin cientfica: formados por una secuencia no vaca de dgitos, seguida, opcionalmente,
de un punto y una secuencia no vaca de dgitos. A continuacin, tras la letra E, ir la parte exponencial
formada por un signo opcional y un valor entero.
Los nmeros enteros tienen que tener un valor menor a 2
15
. Los nmeros reales tienen que tener un valor
menor a 10
100
. En caso de ambigedad entre el nombre de un identificador y un nmero real (por ejemplo,
5E3), se considera siempre que es un nmero real.
La tabla resume algunos ejemplos vlidos y errneos de estos elementos:
identificador entero real, notacin normal real, notacin cientfica errores
A 0 0. 0 3E5 3. 2E3F - 54
8E 88 44. 3 4. 102030E1 3E- 5A 1. 2E3. 4
DC10 432 3. 88888888 378E+3 J 8. 3 6.
2E3F4 9876 54321. 0 6. 023E- 23 . 5 5. E2
VARI ABLES 22222 0. 33333333333333 0. 007E101 33E99 33333
Se pide disear la gramtica regular, tokens, autmata, acciones semnticas (indicando los accesos a la Tabla
de Smbolos) y errores de un Analizador Lxico para este lenguaje.

2. Sealasiguientegramtica quegenerasentenciasdeltipowhile,ifthenelseeifthenelsif:
S while C do S | if C S else S | if C S elsif C S |
C id
Sepide:
a. SepideconstruirelAutmataReconocedordePrefijosViables(mtodoSLR).
b. Independientemente de si hay conflictos o no, construir las filas 1, 2, 3 y 6 de la Tabla de Anlisis de
dicho analizador.
3. Seaelsiguientefragmentodeunagramtica:
P D S
D id : T I D |
T real | int | array [ cte-ent ] of T
I | := C
C A | { L }
A cte-ent | cte-real
L A , L | A
S id := E | id [ E ] := E | S S
E C | id | id [ E ]
SepidedisearelAnalizadorSemnticoconunaTraduccinDirigidaporlaSintaxisparaestagrmatica,
teniendoencuentaque:
Loselementosdelvectorslopuedenserenterosoreales,nuncaotrosvectores.
Todosloselementosdeunvectorhandeserdelmismotipo.
Nohayconversionesautomticasdetipos.
Supngasequelosenterosocupan2bytesylosreales4bytes.
ElAnalizadorLxicoinsertalosidentificadoresenlaTabladeSmbolos.
Se debe asumir que el ndice de los vectores va desde 1 hasta el valor cte-ent indicado en la
declaracin,ysiempreesentero.
Ellenguajetienedeclaracindevariables(D),quepuedenserinicializadas(I).
Ellenguajepermitellenarunvectorcompletoconunaseriedevaloresconstantes(L),perosetienenque
incluirexactamentetantosvaloresconstantescomoelementostengaelvectorydebenserdeltipodelos
elementosdelvector.
Seguidamentesemuestran,amododeejemplo,algunassentenciasvlidasdeestelenguaje:
a: i nt : = 2 //declaracineinicializacindeunavariableentera
b: r eal //declaracindeunavariablereal
u: ar r ay [ 5] of i nt //declaracindeunavariablevectorde5enteros
v: ar r ay [ 5] of i nt
w: ar r ay [ 3] of r eal : ={3. 3, 7. 7, 8. 8} //declaracineinicializacindeunavariablevectorde3reales
u: = {0, 2, 4, 6, 8} //asignacindevaloresaunavariablevectorde5enteros
v: = u //copiaunavariablevectoraotravariablevectornecesariamentedelmismotipo
v[ 1] : = 1
v[ a] : = a
u[ v[ 1] ] : = u[ a]
b: = w[ a]
w[ 3] : = b

COMPILADORES Y TRADUCTORES DE LENGUAJES
11 de junio de 2013
Observaciones:1.Fechaaproximadadepublicacindelascalificaciones:17junio(TraductoresdeLenguajes)y27
junio(Compiladores).
2.Fechaaproximadadelarevisin:19junio(TraductoresdeLenguajes)y2julio(Compiladores).
3.Cadaejerciciodebeentregarseenhojasseparadas.Cadaejerciciotienelamismapuntuacin.
4.LosalumnosdeCompiladoresqueyaseexaminarondeGeneracindeCdigoIntermedioylos
alumnosdeTraductoresdeLenguajesdebenrealizarsloelejercicio2ydisponende1hora.
5.ElrestodealumnosdeCompiladoresdebenrealizarlosejercicios1y2ydisponende2horas.
1. Seaelsiguientefragmentodeunagramtica:
P D S
D id : T D |
T real | int | array [ cte-ent ] of T
S id := E | id [ E ] := E | ForEach ( id in id ) { S } | S S
E A | id | id [ E ]
A cte-ent | cte-real
Se pide disear el Generador de Cdigo Intermedio mediante una Traduccin Dirigida por la Sintaxis
paraestagrmatica,teniendoencuentaque:
ElAnlisisSemnticoyaestcorrectamenterealizado.
Loselementodelvectorslopuedenserenterosoreales,nuncaotrosvectores.
Todosloselementosdeunvectorhandeserdelmismotipo.
Nohayconversionesautomticasdetipos.
ElAnalizadorLxicoinsertaloslexemasdelosidentificadoresenlaTabladeSmbolos.
Se debe asumir que el ndice de los vectores va desde 1 hasta el valor cte-ent indicado en la
declaracin,ysiempreesentero.
Ellenguajetienedeclaracindevariables(D).
El primer identificador de la sentencia ForEach debe ser del mismo tipo que los elementos del vector
(segundoidentificadordelasentencia).
La sentencia ForEach realiza tantasiteraciones como elementos tenga elvector (segundo identificador
delasentencia)y,encadaiteracin,asignaelelementoisimodelvectoralprimeridentificadordela
sentenciayejecutaelconjuntodesentencias(S)delcuerpo.
Seguidamentesemuestran,amododeejemplo,algunassentenciasvlidasdeestelenguaje:
a: i nt //declaracindeunavariableentera
b: r eal //declaracindeunavariablereal
u: ar r ay [ 3] of i nt //declaracindeunavariablevectorde3enteros
v: ar r ay [ 3] of i nt
a: = 2
v[ 1] : = 3
v[ a] : = a
v[ 3] : = 1
u: = v //copiaunavariablevectoraotravariablevector
For Each ( a i n v) {u[ a] : = a} //hace:u[3]:=3;u[2]:=2;u[1]:=1
a: = u[ v[ 1] ]
2. Seaelsiguientefragmentocorrectodeunprograma:

pr ocedur e cal cul o


{
i , a: i nt eger //declaracindevariableslocalesalprocedimiento
f unct i on F ( val x) : i nt eger
{ //funcinconunprametroenteroporvaloryquedevuelveunentero
r et ur n x
3
+ 1
}
f unct i on suma ( val x, r ef y) : i nt eger
{ //funcinconunprametroenteroporvaloryotroenteroporreferenciayquedevuelveunentero
a: i nt eger
f unct i on var a ( ) : i nt eger
{ //funcinsinparmetrosquedevuelveunentero
a: = i * y
r et ur n a
}
i : = x + y
i f ( i < 10) t hen var a ( )
y: = y + 1
r et ur n x + y
}
f or i : = 1 t o 3 do
a: = suma ( F( i ) , i + i ) //
Pr i nt ( i + i )
}

Sepide:
a. Realizarlatrazadeejecucindeesteprograma,indicandoelresultadodelainstruccinPr i nt .
b. Escribirelcdigointermediodetresdireccionescorrespondientealasentencia(tenerencuentaque
unenteroocupa2bytesyunadireccinocupa4).
c. Escribir el cdigo objeto (ensamblador simblico explicando el significado de cada instruccin)
correspondientealainstruccindecdigointermedioobtenidaenelapartadob)t
3
: =cal l suma.
COMPILADORES Y PROCESADORES DE LENGUAJES
11 de junio de 2013
Observaciones: 1. Fecha aproximada de publicacin de las calificaciones: 17-junio (Procesadores de Lenguajes) y 27-
junio (Compiladores).
2. Fecha aproximada de la revisin: 19-junio (Procesadores de Lenguajes) y 2-julio (Compiladores).
3. Cada ejercicio debe entregarse en hojas separadas.
4. Cada ejercicio tiene la misma puntuacin.
5. Los alumnos de Compiladores deben realizar los ejercicios 1, 2 y 3 y disponen de 2 horas.
6. Los alumnos de Procesadores de Lenguajes deben realizar nicamente el ejercicio 3 y disponen
de 40 minutos.

1. Un lenguaje dispone, entre otros, de los siguientes elementos:
Identificadores: pueden comenzar por una letra o un dgito y pueden contener cualquier cantidad de
letras o dgitos, siempre que al menos tengan una letra.
Enteros: formados por una secuencia no vaca de dgitos.
Reales en notacin normal: formados por una secuencia no vaca de dgitos, un punto y otra secuencia no
vaca de dgitos.
Reales en notacin cientfica: formados por una secuencia no vaca de dgitos, seguida, opcionalmente,
de un punto y una secuencia no vaca de dgitos. A continuacin, tras la letra E, ir la parte exponencial
formada por un signo opcional y un valor entero.
Los nmeros enteros tienen que tener un valor menor a 2
15
. Los nmeros reales tienen que tener un valor
menor a 10
100
. En caso de ambigedad entre el nombre de un identificador y un nmero real (por ejemplo,
5E3), se considera siempre que es un nmero real.
La tabla resume algunos ejemplos vlidos y errneos de estos elementos:
identificador entero real, notacin normal real, notacin cientfica errores
A 0 0.0 3E5 3.2E3F -54
8E 88 44.3 4.102030E1 3E-5A 1.2E3.4
DC10 432 3.88888888 378E+3 J8.3 6.
2E3F4 9876 54321.0 6.023E-23 .5 5.E2
VARIABLES 22222 0.33333333333333 0.007E101 33E99 33333
Se pide disear la gramtica regular, tokens, autmata, acciones semnticas (indicando los accesos a la Tabla
de Smbolos) y errores de un Analizador Lxico para este lenguaje.

2. Sea la siguiente gramtica que genera sentencias del tipo while, if-then-else e if-then-elsif:
S while C do S | if C S else S | if C S elsif C S |
C id
Se pide:
a. Se pide construir el Autmata Reconocedor de Prefijos Viables (mtodo SLR).
b. Independientemente de si hay conflictos o no, construir las filas 1, 2, 3 y 6 de la Tabla de Anlisis de
dicho analizador.
3. Sea el siguiente fragmento de una gramtica:
P D S
D id : T I D |
T real | int | array [ cte-ent ] of T
I | := C
C A | { L }
A cte-ent | cte-real
L A , L | A
S id := E | id [ E ] := E | S S
E C | id | id [ E ]
Se pide disear el Analizador Semntico con una Traduccin Dirigida por la Sintaxis para esta grmatica,
teniendo en cuenta que:
Los elementos del vector slo pueden ser enteros o reales, nunca otros vectores.
Todos los elementos de un vector han de ser del mismo tipo.
No hay conversiones automticas de tipos.
Supngase que los enteros ocupan 2 bytes y los reales 4 bytes.
El Analizador Lxico inserta los identificadores en la Tabla de Smbolos.
Se debe asumir que el ndice de los vectores va desde 1 hasta el valor cte-ent indicado en la
declaracin, y siempre es entero.
El lenguaje tiene declaracin de variables (D), que pueden ser inicializadas (I).
El lenguaje permite llenar un vector completo con una serie de valores constantes (L), pero se tienen que
incluir exactamente tantos valores constantes como elementos tenga el vector y deben ser del tipo de los
elementos del vector.
Seguidamente se muestran, a modo de ejemplo, algunas sentencias vlidas de este lenguaje:
a: int:= 2 // declaracin e inicializacin de una variable entera
b: real // declaracin de una variable real
u: array [5] of int // declaracin de una variable vector de 5 enteros
v: array [5] of int
w: array [3] of real:={3.3, 7.7, 8.8} // declaracin e inicializacin de una variable vector de 3 reales
u:= {0, 2, 4, 6, 8} // asignacin de valores a una variable vector de 5 enteros
v:= u // copia una variable vector a otra variable vector necesariamente del mismo tipo
v[1]:= 1
v[a]:= a
u[v[1]]:= u[a]
b:= w[a]
w[3]:= b

COMPILADORES Y TRADUCTORES DE LENGUAJES
11 de junio de 2013
Observaciones: 1. Fecha aproximada de publicacin de las calificaciones: 17-junio (Traductores de Lenguajes) y 27-
junio (Compiladores).
2. Fecha aproximada de la revisin: 19-junio (Traductores de Lenguajes) y 2-julio (Compiladores).
3. Cada ejercicio debe entregarse en hojas separadas. Cada ejercicio tiene la misma puntuacin.
4. Los alumnos de Compiladores que ya se examinaron de Generacin de Cdigo Intermedio y los
alumnos de Traductores de Lenguajes deben realizar slo el ejercicio 2 y disponen de 1 hora.
5. El resto de alumnos de Compiladores deben realizar los ejercicios 1 y 2 y disponen de 2 horas.
1. Sea el siguiente fragmento de una gramtica:
P D S
D id : T D |
T real | int | array [ cte-ent ] of T
S id := E | id [ E ] := E | ForEach ( id in id ) { S } | S S
E A | id | id [ E ]
A cte-ent | cte-real
Se pide disear el Generador de Cdigo Intermedio mediante una Traduccin Dirigida por la Sintaxis
para esta grmatica, teniendo en cuenta que:
El Anlisis Semntico ya est correctamente realizado.
Los elemento del vector slo pueden ser enteros o reales, nunca otros vectores.
Todos los elementos de un vector han de ser del mismo tipo.
No hay conversiones automticas de tipos.
El Analizador Lxico inserta los lexemas de los identificadores en la Tabla de Smbolos.
Se debe asumir que el ndice de los vectores va desde 1 hasta el valor cte-ent indicado en la
declaracin, y siempre es entero.
El lenguaje tiene declaracin de variables (D).
El primer identificador de la sentencia ForEach debe ser del mismo tipo que los elementos del vector
(segundo identificador de la sentencia).
La sentencia ForEach realiza tantas iteraciones como elementos tenga el vector (segundo identificador
de la sentencia) y, en cada iteracin, asigna el elemento i-simo del vector al primer identificador de la
sentencia y ejecuta el conjunto de sentencias (S) del cuerpo.
Seguidamente se muestran, a modo de ejemplo, algunas sentencias vlidas de este lenguaje:
a: int // declaracin de una variable entera
b: real // declaracin de una variable real
u: array [3] of int // declaracin de una variable vector de 3 enteros
v: array [3] of int
a:= 2
v[1]:= 3
v[a]:= a
v[3]:= 1
u:= v // copia una variable vector a otra variable vector
ForEach (a in v) {u[a]:= a} // hace: u[3]:=3; u[2]:=2; u[1]:=1
a:= u[v[1]]
2. Sea el siguiente fragmento correcto de un programa:

procedure calculo
{
i, a: integer // declaracin de variables locales al procedimiento
function F (val x): integer
{ // funcin con un prametro entero por valor y que devuelve un entero
return x
3
+ 1
}
function suma (val x, ref y): integer
{ // funcin con un prametro entero por valor y otro entero por referencia y que devuelve un entero
a: integer
function vara (): integer
{ // funcin sin parmetros que devuelve un entero
a:= i * y
return a
}
i:= x + y
if (i < 10) then vara ()
y:= y + 1
return x + y
}
for i:= 1 to 3 do
a:= suma (F(i), i + i) //
Print (i + i)
}

Se pide:
a. Realizar la traza de ejecucin de este programa, indicando el resultado de la instruccin Print.
b. Escribir el cdigo intermedio de tres direcciones correspondiente a la sentencia (tener en cuenta que
un entero ocupa 2 bytes y una direccin ocupa 4).
c. Escribir el cdigo objeto (ensamblador simblico explicando el significado de cada instruccin)
correspondiente a la instruccin de cdigo intermedio obtenida en el apartado b) t
3
:=call suma.
PROCESADORES DE LENGUAJES
10 de julio de 2013
Observaciones: 1. Fecha aproximada de publicacin de las calificaciones: 16-julio.
2. Fecha aproximada de la revisin: 18-julio.
3. Cada ejercicio debe entregarse en hojas separadas.
4. Cada ejercicio tiene la misma puntuacin.
5. La duracin de este examen es de 2 horas

1. Una empresa de energa nuclear quiere gestionar de manera centralizada la informacin de sus almacenes
que recibe diariamente en un fichero de texto. Para ello, desea construir un sistema informtico que capture
toda esta informacin para poderla tratar automticamente. El formato del fichero es el siguiente:
El cdigo de almacn (formado por una secuencia no vaca de hasta 8 letras o dgitos, pudiendo ser el
primero una letra o un dgito y debiendo existir obligatoriamente al menos una letra) va seguido del
nmero de bidones de residuos que estn almacenados en dicho almacn (un valor entero menor que
10000); a continuacin viene la temperatura media del almacn (un valor real inferior a 200, en el que tanto
la parte entera como la parte decimal son obligatorias); seguidamente viene informacin sobre la velocidad
de desintegracin radiactiva (que se representa por un valor real en notacin cientfica, es decir, una
secuencia no vaca de dgitos, opcionalmente una coma seguida de otra secuencia no vaca de dgitos, la
letra e, un signo opcional y una secuencia no vaca de dgitos).
Aunque ste es el orden habitual de los elementos del fichero, algunas veces se reciben los valores en otro
orden o se ha omitido alguno de ellos.
A continuacin se muestra un ejemplo correcto del formato de este fichero:
spr ngf l d 9999 199, 999999 99e99 8emount 8, 8 88 1, 123456789e+1
di r ect or 0 22, 0 2z4x6y8 0, 3e- 23 Ri ver 10 33 0, 33333333333333
0, 003e303 7e 0, 0 9e0
A continuacin se muestra un ejemplo de fichero en el que todos los elementos son incorrectos:
spr i ngf i el d 99999 299, 999999 9, 9e9i 9 a_h 87654321 - 5 8,
0, 1234Le+1 , 30 02z4x6y80 0h, 0 0, e- 23 200, 0 0, 003e3o3
Teniendo en cuenta que ningn almacn tiene un cdigo formado por dgitos y una nica letra e en su
interior (por ejemplo, 12e45) y que todos los cdigos de almacn se encuentran guardados en una tabla, se
pide disear la gramtica regular, tokens, autmata, acciones semnticas y errores de un Analizador Lxico
para este lenguaje.
2. Sea la siguiente gramtica G:
P D S
D T : id ; D |
T real | int
S if id then S else S ; S | forEach id in id S ; S |
E id | id [ E ]
Se pide:
a. Construir una gramtica G equivalente sin recursividad a izquierdas y factorizada.
b. Calcular los conjuntos First y Follow de todos los smbolos no terminales de G.
c. Construir la tabla de un Analizador Sintctico LL(1) para G y justificar si la gramtica G es LL(1).
d. Disear los procedimientos del Analizador Sintctico Descendente Recursivo correspondientes a los
smbolos D y S (puede utilizarse un procedimiento auxiliar para equiparar tokens).
3. Sea el fragmento de un lenguaje generado por la siguiente gramtica:
S for ( Cont ; E ; id ++ ) { S } | id := E | S ; S
Cont int S
E cte_entera | cte_real | true | false | id op_rel E | id ++ | id
op_rel > | < | =
Se pide disear el Analizador Semntico mediante una Definicin Dirigida por la Sintaxis para
esta grmatica, teniendo en cuenta que:
El lenguaje tiene, al menos, los tipos entero, real y lgico.
No hay conversin automtica de tipos.
Los identificadores deben estar declarados previamente a su uso.
La sentencia for tiene:
o la declaracin de un contador (Cont), que siempre ser de tipo entero, y que se inicializa
mediante una sentencia de asignacin.
o una condicin de finalizacin (E), que viene dada por una expresin que comprueba si
el identificador que se ha declarado como contador es igual, mayor o menor que una
expresin entera.
o un incremento, que se encarga de ir incrementando el identificador contador.
El operador incremento (++) slo se puede aplicar a datos enteros.
Los operadores relacionales (op_rel) se pueden aplicar a datos enteros o reales.

COMPILADORES
Examen Final, 11 de septiembre de 2013
Observaciones: 1. La fecha estimada de publicacin de las calificaciones es el 19 de septiembre.
2. La fecha estimada de la revisin es el 24 de septiembre.
3. La duracin de este examen es de 2 horas.
4. Cada ejercicio deber entregarse en hojas separadas.
1. Sea la siguiente gramtica:
M A G W
G E n F
E n c
A a W b W a b W
W b
F c
Se pide:
a. Construir el Autmata Reconocedor de Prefijos Viables (mtodo Anlisis Sintctico Ascendente LR)
b. Calcular los conjuntos First y Follow para cada smbolo no terminal y analizar sobre el autmata todos
los conflictos que pudieran existir.
c. Enumerar los estados por los que transitara el Analizador LR para analizar la cadena abbncn. En el
caso de que en algn estado usado se presente algn conflicto, debern seguirse todas las alternativas
posibles.
(3,5 puntos)
2. De un lenguaje se ha extrado el siguiente fragmento de gramtica:
S id := E | if E = false then S
1

E id | E
1
E
2
E
3

Se pide disear un Esquema de Traduccin con el Analizador Semntico y el Generador de Cdigo
Intermedio teniendo en cuenta que:
El lenguaje tiene variables enteras, reales y lgicas y se exige su declaracin.
La expresin de comparacin mltiple se evala como cierta si el valor de E
2
se encuentra entre los
valores de E
1
y E
3
, ambos inclusive. La operacin puede realizarse entre expresiones de cualquiera de los
tres tipos disponibles, siempre que las tres expresiones sean del mismo tipo.
El lenguaje realiza conversiones automticas de tipos en todos los casos excepto en la expresin de
comparacin mltiple.
Los valores lgicos tienen que representarse numricamente (0 es falso y cualquier otro valor es
verdadero).
Deben explicarse brevemente los atributos y funciones utilizadas.
(3,5 puntos)
3. Sea el siguiente fragmento correcto de un programa:
void main ()
int a, b, c
int producto (int a, int REF b) // parmetro a por valor y b por referencia
{
c:= a * b * c
if a = b then return b * producto (a, b - 1)
else return c
}
int suma (int a, int b) // parmetros por valor
int c
{
c = a b * 2
if a = b then return producto (a, b + 1)
else
{
a:= a 1
return b + suma (a, b + 1)
}
}
{
a:= 9
b:= 5
c:= a - b
if a > b then c:= suma (a, b)
else c:= producto (a, b)
}
Se pide:
a. Realizar una traza de la ejecucin, representado el contenido completo de la pila.
b. Explicar cmo se establece el puntero de acceso cuando se produce una llamada a una funcin.
c. Cul es la traduccin a cdigo objeto de la instruccin de tres direcciones t
i
:= call suma
correspondiente a la primera vez que la funcin suma llama a la funcin suma?
(3 puntos)

ANLI SI S LXI CO Y TABLA DE S MBOLOS
Primer examen. 24 de octubre de 2013
Observaciones: 1. Las calificaciones se publicarn hacia el 18 de noviembre.
2. La revisin ser hacia el 20 de noviembre.
3. En la web se avisar de las fechas exactas.
4. La duracin de este examen es de 40 minutos.
Un determinado fragmento de un lenguaje dispone de palabras reservadas, variables,
nmeros enteros y nmeros reales. Estos elementos, que pueden estar separados entre s
por blancos, tienen las siguientes caractersticas:
Palabras reservadas: el lenguaje dispone de un total de 99 palabras reservadas
distintas. El nombre de una palabra reservada est formado por una cantidad
cualquiera de letras. Adems, cualquier palabra reservada se puede escribir tambin
empezando y terminando en punto.
Variables: el nombre de una variable puede estar formado por un nmero cualquiera
de letras y dgitos, pero siempre comenzando por una letra. No obstante, aunque la
longitud del nombre puede ser cualquiera, internamente solamente se tienen en cuenta
los primeros 16 caracteres (por ejemplo, se considera que las siguientes dos variables
son la misma: a234567890123456uno, a234567890123456dos).
Nmeros enteros: estn formados por una secuencia de dgitos y su valor se tiene que
poder representar en 16 bits.
Nmeros reales: estn formados por una parte entera y una parte decimal separadas
por un punto. Tanto la parte entera como la parte decimal estn formadas por
secuencias de dgitos. En un nmero real se puede omitir la parte entera o la parte
decimal, pero nunca ambas.
Se muestran a continuacin algunos ejemplos de los elementos de este lenguaje:
Palabras reservadas Variables Enteros Reales
I F a 0 9. 0
. t hen. a2B3c4D5e 1 123456. 654321
t hen abcdef ghi j kl mnopqr st 65535 88.
RevampWhenGr eat er Than qwer t y 1234 . 99
. El se. ZX81 999 0. 0
Se pide disear un Analizador Lxico para este lenguaje (tokens completos, gramtica
regular, autmata finito determinista, acciones semnticas y errores), que introduzca toda
la informacin posible en la Tabla de Smbolos.

A AN N L LI IS SI IS S S SI IN NT T C CT TI IC CO O
Segundo examen. 26 de noviembre de 2012
Observaciones: 1. Las calificaciones se publicarn hacia el 17 de diciembre.
2. La revisin ser hacia el 19 de diciembre.
3. En la web se avisar de las fechas exactas.
4. La duracin de este examen ser de 40 minutos.
En un determinado entorno se generan rboles como el de la figura. Se desea construir un
sistema capaz de validar la estructura de los rboles de acuerdo a las siguientes reglas
(donde se han abreviado los nombres de los nodos):
N I D
I I C D
I izq
D D C I
D der
C cen
Nodo
Nodo
Izq.
Nodo
Der.
Nodo
Izq.
Nodo
Izq.
Nodo
Cen.
Nodo
Der.
Nodo
Der.
Nodo
Cen.
Nodo
Izq.
Nodo
Cen.
Nodo
Der.
cen izq
izq cen der
izq cen der

Se pide:
a. Construir el Autmata Reconocedor de Prefijos Viables (correspondiente al
mtodo de anlisis sintctico SLR).
b. Identifica todos los posibles conflictos en el Autmata anterior.
c. Una vez transformada la gramtica anterior para eliminar la recursividad por
la izquierda se obtiene:
N I D
I izq I
I C D I |
D der D
D C I D |
C cen
Comprobar si esta nueva gramtica cumple la Condicin LL(1), detectando
todos los posibles incumplimientos.
PROCESADORES DE LENGUAJ ES Y COMPI LADORES
10 de ener o de 2014
Observaciones: 1. Las calificaciones se publicarn hacia el 21 de enero.
2. La revisin ser hacia el 23 de enero.
3. En la web se avisar de las fechas exactas.
4. La duracin de este examen es de 40 minutos por ejercicio.
5. Cada ejercicio deber entregarse en hojas separadas.
6. Todos los ejercicios tienen la misma puntuacin
1. Un determinado fragmento de un lenguaje de programacin dispone de palabras reservadas, variables y
nmeros. El lenguaje distingue entre maysculas y minsculas. Los elementos van siempre separados entre
s por blancos, tabuladores o saltos de lnea. Estos elementos tienen las siguientes caractersticas:
Palabras reservadas: el lenguaje dispone de un total de 111 palabras reservadas distintas. El nombre de
una palabra reservada est formado por una cantidad cualquiera de letras. Una misma palabra
reservada puede escribirse comenzando o no por un guin.
Variables: el nombre de una variable puede estar formado por un mximo de 20 letras, dgitos o
guiones, siempre comenzando por una letra o un guin, pero nunca terminando por guin.
Nmeros enteros: se representan en notacin octal, mediante una secuencia de dgitos octales. Su valor
se tiene que poder representar en 15 bits.
Nmeros reales: estn formados por una parte entera obligatoria, un punto y una parte decimal
opcional. Tanto la parte entera como la parte decimal estn formadas por secuencias de dgitos. El valor
de los nmeros reales tiene que ser inferior a 2
32
.
Se muestran a continuacin algunos ejemplos de los elementos de este lenguaje:
Palabras reservadas Variables Enteros Reales
I f a 0 1.
- Then - a2- B3- c4- D5- e6 1 4294967295. 999999
Then AbcdEf ghI j kl mnOpqr st 77777 77. 7777
RevampWhenGr eat er Than - 2 0246 0. 987
El se ZX- 81 110 0. 0
Se pide disear un Analizador Lxico para este lenguaje (tokens completos, gramtica regular, autmata
finito determinista, acciones semnticas y errores), que introduzca toda la informacin posible en la Tabla
de Smbolos.
2. Dado el siguiente fragmento de gramtica:
P D S
D var id = R ; D |
R int | bool
S if ( E ) { S } else { S } ; S | id = E ; S |
E T F
F + T F |
T id B | ( E )
B ( H ) |
H E G
G , E G |
Se pide:
a) Construir la tabla de un Analizador Sintctico LL(1) (descendente tabular).
b) A la vista de la tabla, decir si la gramtica dada es o no LL(1).
c) Realizar el anlisis de la cadena x = y tal como lo hara el Analizador Sintctico LL(1).

3. Se pretende construir un Analizador para procesar programas dedicados al manejo de memorias flash. A
grandes rasgos, estos programas constan de una serie de rutinas donde se especifican operaciones de
borrado, escritura y lectura de la memoria flash. Sea el siguiente fragmento de gramtica:
R beginRutina id modo M S endRutina R
R
M borrado | escritura | lectura / Modos de operacin
S
S borrar E S / Operacin
S escribir E L S / Operacin
S leer E S / Operacin
L E , L
L
E id | id + E
Ejemplos de Programas:
begi nRut i na Rut modo escr i t ur a
l eer A
bor r ar A // Error
endRut i na
begi nRut i na Rut modo bor r ado
l eer A
escr i bi r A B, C,
endRut i na
Se deben tener en cuenta las siguientes caractersticas del dominio:
Las variables (id) deben estar declaradas previamente a su uso y podrn ser del tipo entero, real o
rutina.
Los modos de operacin tienen un orden de prioridad: borrado > escritura > lectura.
Cada tipo de operacin solo se puede realizar dentro de una rutina definida para su correspondiente
modo de operacin o para un modo de mayor prioridad.
La expresin (E) de las sentencias de cada operacin indica el bloque de datos de la memoria flash con
el que se va a operar y deber ser una variable entera cuyo valor est comprendido en el intervalo [1,
32000].
En la sentencia de escritura, L indica la secuencia de valores que se escribirn en la memoria y debe
tener como mnimo un valor y como mximo 8.
Dentro de cada rutina debe haber como mnimo una operacin.
Se pide realizar un Esquema de Traduccin con el diseo del Analizador Semntico para este lenguaje, y
que proporcione mensajes de error adecuados a cada caso, explicando concisamente los atributos y
funciones empleadas.


COMPI LADORES
Segundo par c i al , 10 de ener o de 2014
Observaciones: 1. La fecha estimada de publicacin de las calificaciones es el 21 de enero.
2. La fecha estimada de la revisin es el 23 de enero.
3. La duracin de este examen ser de 1 hora.
4. Cada ejercicio deber entregarse en hojas separadas.
5. Todos los ejercicios tienen la misma puntuacin
1. De un lenguaje que exige declaracin de variables previa a su uso, se han entresacado las siguientes reglas de la
gramtica:
S id = E | for id = E, E I S
I , E |
E E * E | id
Se pide disear un Esquema de Traduccin para realizar la Generacin de Cdigo de Tres Direcciones sobre estas
reglas, explicando concisamente los atributos y funciones empleadas. La sentencia del bucle for funciona como sigue:
primero se evalan (una sola vez) las tres expresiones (E, E, I), asignndose al identificador (id) el resultado de la
primera expresin (E); mientras el identificador no sea mayor que la segunda expresin (E), se ejecuta la sentencia (S)
y, posteriormente, se incrementa el valor del identificador en el valor de la tercera expresin (I) (si sta se omite en la
sentencia del bucle for, el identificador se incrementar en una unidad).
Ejemplos:
k =1
f or i =1, 6 k =k * i
k =1
f or i =k, 6, 2 k =k * i
i valdr 1, 2, 3, 4, 5, 6
al final k valdr 720
i valdr 1, 3, 5
al final k valdr 15
2. Se tiene un lenguaje con las siguientes caractersticas: las variables tienen que estar declaradas previamente y son
siempre enteras; todas las variables temporales se almacenan en la tabla de smbolos; todos los campos del registro de
activacin se almacenan en la pila. El compilador no realiza ningn tipo de optimizacin.
Se pide representar la pila de registros de activacin completa, detallndola al mximo, durante la ejecucin del
siguiente fragmento de programa:
Procedure pr ueba;
x, y: Integer;
Function r esul t ado( Val y: Integer) : Integer;
{ Case y of
1: x: = x * y - x;
2: x: = x * y;
3: x: = x - y;
default: Return x y - y;
End;
Return x;
}
Function cal cul a( Ref y: Integer) : Integer;
x, z: Integer;
{ z: = 3;
x: = y z;
y: = y 1;
x: = r esul t ado( x) ; / / x se pasa por valor
Return x;
}
{ y: = 5;
x: = y;
y: = cal cul a( x) ; / / x se pasa por referencia
Print y;
}
PROCESADORES DE LENGUAJ ES
Pr i mer Ex amen, 31 de mar zo de 2014
Observaciones: 1. Fecha estimada de publicacin de las calificaciones: 22 de abril
2. Fecha estimada de la revisin: 24 de abril
3. Las fechas exactas se publicarn en: http://www-lt.ls.fi.upm.es/procesadores
4. Duracin del examen: 40 minutos
Un Banco quiere crear una base de datos a partir de un fichero que contiene los nombres y apellidos, IBAN y saldo en
cuenta corriente de sus clientes.
El IBAN es el Cdigo internacional de Cuenta Bancaria (International Bank Account Number, en ingls) creado por el
Comit Europeo de Normalizacin Bancaria (ECBS), en su norma ECBS 204. Es un cdigo alfanumrico de entre 15
y 34 caracteres con la siguiente estructura
1
:
Los 2 primeros caracteres son alfabticos e indicativos del pas (siguen la norma ISO 3166; por ejemplo, Espaa
es ES, la Repblica Checa es CZ, Eslovaquia es SK, Suecia es SE, Tnez es TN, Noruega es NO, Malta es MT).
A continuacin vienen 2 dgitos de control.
Los restantes caracteres son numricos.
Para saber si un IBAN es o no correcto, se aplica el siguiente procedimiento:
1. Convertir cada letra del IBAN en dos dgitos segn la tabla:
A=10 B=11 C=12 D=13 E=14 F=15 G=16 H=17 I=18 J=19 K=20 L=21 M=22
N=23 O=24 P=25 Q=26 R=27 S=28 T=29 U=30 V=31 W=32 X=33 Y=34 Z=35
Ej.: ES7812345678912345678905 14287812345678912345678905
2. Calcular el mdulo 97 del nmero obtenido. Slo si dicho resto es 1, el IBAN es correcto.
Ej.: resto de la divisin entera: 14287812345678912345678905 mod 97 = 1 correcto
En cuanto al saldo en cuenta, vendr expresado con una parte entera y, opcionalmente, una parte decimal (con una
coma y 2 decimales) ms un carcter correspondiente a la divisa. Ej.: 345, 123,47$, 0, 100000p, 0,10, 015R Del
saldo se quieren enviar la divisa y la cantidad.
Tngase en cuenta que los elementos del lenguaje estn siempre delimitados por blanco, tabulador o salto de lnea y
que el lenguaje no distingue entre maysculas y minsculas.
Se muestra a continuacin, a modo de ejemplo, un fragmento de un fichero de entrada correcto:
ANA PI DE97979797979797979712 1000 MARA JOS snchez
DE ESPAA y GMEZ DEL Postigo ES7837837837837837837810 120,00$
ARNOLD ALOIS SCHWARZENEGGER AT756234567890756218 299,99
Se muestra a continuacin como ejemplo un fragmento de fichero errneo (los errores estn subrayados):
ANA PI DE979797979797 1000,0 MARA JOS snchez
DE ESPAA y GMEZ DEL3 Postigo ES1137837837837837837810 120,00
ARNOLD ALOIS SCHWARZENEGGER A756234567890756218 299,99
Se pide disear el Analizador Lxico (tokens, gramtica regular, autmata finito determinista, acciones semnticas y
errores).
1
Esta descripcin y el mtodo de clculo indicado no corresponden exactamente al cdigo IBAN real.

EXAMEN DE GENERACI N DE CDI GO I NTERMEDI O
4 de abr i l de 2014
Observaciones: 1. Fecha estimada de publicacin de las calificaciones: 22 de abril.
2. Fecha estimada de la revisin: 24de abril.
3. Las fechas exactas se publicarn en: http://www-lt.ls.fi.upm.es/traductores
4. La duracin de este examen ser de 50 minutos.
a. De un lenguaje que exige declaracin de variables previa a su uso, se ha entresacado el siguiente subconjunto
de reglas de su gramtica:
S DoIf E
1
Times E
2
S
1
EndDo | S
1
; S
2
| Return
E id
Se pide disear un Esquema de Traduccin, usando representacin numrica para las expresiones
lgicas, para realizar la Generacin de Cdigo de Tres Direcciones sobre estas reglas, explicando
concisamente los atributos y funciones empleadas.
La sentencia del bucle DoIf-Times funciona como sigue:
Primero, se evala la expresin E
1

Si es falsa, termina el bucle
Si es verdadera, se evala E
2
y se ejecuta S
1
tantas veces como indica E
2

La sentencia Return solamente se puede utilizar dentro del bucle DoIf-Times e implica abandonar
inmediatamente el bucle.
Ejemplo:
DoI f i dl og Ti mes Cont
S;
Ret ur n
EndDo
b. De un lenguaje que exige declaracin de variables previa a su uso, se ha entresacado el siguiente subconjunto
de reglas de su gramtica:
E E
1
AND E
2
| M-OR ( L )
L E , L
1
| E
Se pide disear una Definicin Dirigida por la Sintaxis, usando representacin por control de flujo para
las expresiones lgicas, para realizar la Generacin de Cdigo de Tres Direcciones sobre estas reglas,
explicando concisamente los atributos y funciones empleadas.
El operador M-OR funciona como un or mltiple, es decir, recibe una lista de operandos y devuelve
verdadero si al menos uno de ellos es verdadero.
Ejemplos:
M- OR ( T) T
M- OR ( F, F, F, F) F
M- OR ( F, F, T) T
M- OR ( T, T, F, F, T, T) T

PROCESADORES DE LENGUAJES
ANLISIS SINTCTICO
Segundo examen. 12 de mayo de 2014
Observaciones: 1. Las calificaciones se publicarn hacia el 27 de mayo.
2. La revisin ser hacia el 29 de mayo.
3. En la web se avisarn las fechas exactas.
4. La duracin de este examen es de 40 minutos.
Sea el siguiente fragmento de una gramtica:
R begin id S end R
R
S escribe E L S
S lee E S
S
L E , L
L
E id | id + E
Se pide:
a. Construir el Autmata Finito Determinista reconocedor de los prefijos viables
para realizar un Analizador Sintctico SLR (1).
b. A la vista del Autmata Finito Determinista obtenido, indicar si los estados I1 a I9
presentan algn conflicto.
c. Construir el Analizador Sintctico Descendente Predictivo Recursivo para las
reglas de S, L y E (si es necesario, habr que realizar los cambios pertinentes).
COMPILADORES
Primer parcial, 11 de junio de 2014
Observaciones:1.Fechaaproximadadepublicacindelascalificaciones:23junio.
2.Fechaaproximadadelarevisin:25junio.
3.Cadaejerciciodebeentregarseenhojasseparadas.
4.Cadaejerciciotienelamismapuntuacin.
5.Laduracindelexamenesde2horas.

1. Sea el siguiente fragmento de una gramtica de tipo 2 (correspondiente a un Analizador


Sintctico)yunejemplodeprogramacorrectocorrespondientealagramtica:
RbeginidSendR|
SescribeELS|leeES|
LE,L|
Eid|id+cte_entera
Begi n r ut i na14
Escr i be var t empor al posmemor i a + 15678 ,
End
Begi n r 12ut i na
Lee posmemor i a + 1. 285. 354
End
SepidedisearelAnalizadorLxicoparaestelenguaje:
a. Especificar el conjunto de tokens necesarios para dar servicio al analizador sintctico.
Especificar la reglapatrn para todos los tokens. Este patrn deber ser el ms sencillo que
permita cubrir los casos del ejemplo. En el caso concreto de los nmeros enteros, se debern
reconocertantonmerosconpuntosdemillarcorrectamentecolocadoscomosinpuntos.
b. Disearlagramticaregular.
c. DisearelAutmataFinitoDeterminista.
d. Disearlasaccionessemnticas.

2. Setienelasiguientegramtica,correspondienteaunfragmentodeunlenguajedeprogramacin:
PDS
DvarLT|
Lid|id,L
Tint
Sid:=E
Eid|cte_ent
Sepide:
a. Construir el Autmata Reconocedor de Prefijos Viables (mtodo SLR), completando la
plantilladelahojaderespuesta(quepuedecontenererroresyomisiones).
b. Independientemente de si hay conflictos o no, construir las filas 0, 1, 3, 6, 7 y 10 (segn la
numeracin de los estados del autmata en la plantilla) de las Tablas de Anlisis de dicho
analizadorSLR(1).
c. Realizar el anlisis de la cadena var x i nt x : = 7 utilizando solo las filas de la tabla
obtenidasenelapartadoanterior.Detenerelanlisissisenecesitaunadelasfilasnoindicadas.
3. Seaelsiguientefragmentodeunagramtica:
P B S
B D B |
D T id I ;
I = E |
T int | float | struct { C }
C D C |
S id = E
E cte_ent | cte_real | E . E | id
Se pide disear el Analizador Semntico con una Definicin Dirigida por la Sintaxis para esta
grmatica,teniendoencuentaque:
Nohayconversionesautomticasdetipos.
Supngasequelosenterosocupan2bytesylosreales4bytes.
Ellenguajetienedeclaracindevariables(D),quepuedenserinicializadas(I).
Eltipostructrepresentaunregistroconunaseriedecamposdecualquiertipo
Loscamposdelosregistrosnopuedeninicializarse
LaexpresinE.Erepresentaelaccesoauncampodeunregistro

COMPILADORES
Segundo parcial, 11 de junio de 2014
Observaciones:1.Fechaaproximadadepublicacindelascalificaciones:23junio.
2.Fechaaproximadadelarevisin:25junio.
3.Cadaejerciciodebeentregarseenhojasseparadas.Cadaejerciciotienelamismapuntuacin.
4.LosalumnosdeCompiladoresqueyaseexaminarondeGeneracindeCdigoIntermediohande
realizarsloelejercicio2ydisponende1hora.
5.ElrestodealumnosdeCompiladoresdebenrealizarlosejercicios1y2ydisponende2horas.
1. Dadoelsiguientefragmentodegramticadeunlenguajedeprogramacin:
P D S
D var L T = I D |
L id | id , L
T int
I E | E , I
S if B < B then S | A
B E | A
A id := E
E id | cte_ent | E + E
Se pide disear el Generador de Cdigo Intermedio mediante una Definicin Dirigida por la
Sintaxisparaestagrmatica,teniendoencuentaque:
El anlisis semntico ya ha sido realizado y no hay errores (entre otras cosas, se ha
comprobadoyaquetodaslasvariablessehandeclaradopreviamenteasuusoyquelalistade
valoresenunadeclaracinconinicializacintienelalongitudcorrecta).
Enunadeclaracinmltiple,eltiposeindicaalfinalyseaplicaatodalalista.
Si la condicin de la sentencia if contiene alguna instruccin de inicializacin (A), dichas
inicializaciones se ejecutarn, por orden, siempre antes de evaluar la condicin. Despus de
elloseevalalacondicindelif;encasodequesehayausadolaasignacin,lacondicindelif
usaelvalordelasvariablesdelaparteizquierdadelaasignacin.
Unejemplodeunprogramavlidosera:
var x, y, z i nt
var h i nt = 7
var f , g i nt = h, 8
i f g < x: =5 t hen y: = f / / seasignaun5axysecompruebasigesmenorquex
i f x: =h < z: =7 t hen y: = g / / seasignahax,un7az,ysecompruebasixesmenorquez

2. Seaelsiguientefragmentocorrectodeunprograma:

Procedure pr ueba;
x, y: Integer;
Function r esul t ado( Val y: Integer) : Integer;
{
Case y of
1: x: = x * y - x;
2: x: = x * y;
3: x: = x y + r esul t ado ( x) ;
default: Return x y - y;
End;
Return x;
}
Function cal cul a( Ref y: Integer) : Integer;
x, z: Integer;
{
z: = 3;
x: = y z;
y: = y 1;
x: = r esul t ado( x) ; / / x se pasa por valor
Return x;
}
{
y: = 5;
x: = y;
y: = cal cul a( x) ; / / x se pasa por referencia
Print y;
}

Sepide:
a. Realizar la traza de ejecucin de este programa, indicando el resultado de la instruccin
Pr i nt .
b. Escribir el cdigo intermedio (tres direcciones) y el cdigo objeto (ensamblador simblico
explicandoelsignificadodecadainstruccin)obtenidoparalasentenciaReturn x y - y;
(tenerencuentaqueunenteroocupa2bytesyunadireccinocupa4).

PROCESADORES DE LENGUAJES
3 de julio de 2014
Observaciones: 1. Fecha aproximada de publicacin de las calificaciones: 11 14-julio.
2. Fecha aproximada de la revisin: en la semana del 14 al 18 de julio.
3. Las fechas exactas de publicacin y revisin se avisarn en la seccin de avisos de la web:
http://www-lt.ls.fi.upm.es/procesadores/Avisos.php
4. Cada ejercicio debe entregarse en hojas separadas.
5. Cada ejercicio tiene la misma puntuacin.
6. La duracin de este examen es de 2 horas

1. Un lenguaje tiene, entre otros, los siguientes tipos de elementos:
Palabras reservadas: comienzan por una letra; a continuacin, puede haber cualquier cantidad
de letras o dgitos (o ninguno); el ltimo carcter tiene que ser el smbolo del dlar ($)
Variables: comienzan por un subrayado (_) o una letra; a continuacin, puede haber cualquier
cantidad de letras o dgitos (o ninguno); el ltimo carcter tiene que ser una letra, un dgito o
un subrayado (_)
Nmeros: comienzan por un dgito o el smbolo de la almohadilla (#); a continuacin, puede
haber cualquier cantidad de dgitos (o ninguno); el ltimo carcter tiene que ser un dgito. El
smbolo de la almohadilla no afecta al valor del nmero
Asignacin: comienza por dos puntos (: ) y termina por igual (=)
Se pide disear la gramtica regular, tokens, autmata, acciones semnticas y errores de un
Analizador Lxico para este lenguaje, que introduzca toda la informacin posible en la Tabla de
Smbolos y teniendo en cuenta que los distintos elementos pueden venir separados por blancos.
Se muestran a continuacin algunos ejemplos vlidos de elementos en este lenguaje:
Palabras reservadas Variables Nmeros
H$ abc123$ i f $ a1b2c3$ A b8_ _ _8 _abc zx3 1 13246978 #0 #654 98

2. Sea la siguiente gramtica:
S E F T | F
E A B | C B
A 1 F
B 2 F
C 3 S |
F 4 | 5 A
T C 2 | 5 S
Se pide:
a. Calcular los conjuntos First y Follow de todos los smbolos no terminales de la gramtica.
b. Construir la Tabla del Analizador Sintctico Descendente LL(1) y razonar si la gramtica es LL(1)
c. Disear los procedimientos de los smbolos S y C correspondientes a un Analizador Descendente
Recursivo.
3. Sea el fragmento de un lenguaje de programacin generado por la siguiente gramtica:
P D S
D var L T = I D |
L id | id , L
T int | float | boolean
I E | E , I
S if B < B then S | A
B E | A
A id := E
E id | cte_ent | E + E
Se pide disear el Analizador Semntico mediante una Definicin Dirigida por la Sintaxis para
esta grmatica, teniendo en cuenta que:
En una declaracin mltiple, el tipo se indica al final y se aplica a toda la lista; las
inicializaciones tienen lugar en el mismo orden en que estn las variables.
Los enteros ocupan 2 bytes, los reales 4 y los lgicos 1 byte.
Si la condicin de la sentencia if contiene alguna instruccin de asignacin (A), dicha
condicin usa el valor de las variables de la parte izquierda de la asignacin.
La nica conversin de tipos que tiene el lenguaje es de entero a real. No hay conversiones
para el tipo lgico.
El operador < solo es aplicable entre nmeros.
El operador + repesenta tanto la suma aritmtica entre nmeros como el OR lgico.
Un ejemplo de un programa vlido sera:
var x, y, z i nt = 3, 2, 9 / / se inicializa x con 3, y con 2 y z con 9
var h f l oat = 7 / / se inicializa h con 7.0
var f , g i nt = x, 8+y / / se inicializa f con 3 y g con 10
i f g < x: =5 t hen y: =f / / se asigna un 5 a x y se comprueba si g es menor que x
i f h: =x < z: =7 t hen y: = g / / se asigna x a h, un 7 a z, y se comprueba si h es menor que z

Potrebbero piacerti anche