Examen de Compiladores 2009
Examen de Compiladores 2009
Examendelprimerparcial.6defebrerode2009
Observaciones:[Link]
marzo,[Link]
en[Link]
2.Laduracindeesteexamenserde2horas.
[Link].
[Link]:
Operadoresaritmticos:+,-,*,/,**
Operadoreslgicos:.AND.,.OR.,.NOT.
Identificadoresquecomienzanporunaletrayvanseguidosdeunmximode7letraso
dgitos
Palabrasreservadasenmaysculas,comoIF,THEN,FOR,WHILE,INTEGER
Nmerosrealessegnlaexpresinregular:d*.d+
Teniendoencuentaqueellenguajedistinguemaysculasdeminsculas,sepideconstruir
unAnalizadorLxicoparaestelenguaje(tokens,gramtica,autmatafinitodeterministay
accionessemnticas).
(4puntos)
[Link]:
ETR
R+TR | -TR |
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. Hayproblemaconlarecursividadde R + T Ry R - T R?Encasoafirmativo,
decirculysisepuederesolverdealgunamanera.
6. Enalgn casosepuedeaplicarlaregla R ?Encasoafirmativo,decircundo;
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)
COMPILADORES
[Link].6defebrerode2009
Observaciones:1.Seestimaquesepublicarnlasnotasdelexamenfinalapartirdel20de
febrero,[Link]
avisarnen[Link]
2.Laduracindeesteexamenserde2horas.
[Link].
1. Deunagramticasehanentresacadolassiguientesreglas:
S id := E
E id ( L ) | id | E * E
LE |
2. Seaelsiguienteprograma:
Program Clculo-da
Type fecha: Record= da: integer, mes: integer, ao: integer;
Global
t, a: integer
hoy: fecha
Procedure P-ao (Ref z: fecha) /* parmetro por referencia
Begin P-ao
[Link]:= [Link] + 1
End P-ao
/* parmetros por referencia
Procedure P-mes (Ref b: integer; Ref x: fecha)
Procedure P-da ()
Begin P-da
While ((a / t) > 8) Do
a:= a - t
Call P-ao (x)
End While
[Link]:= [Link] + 1;
End P-da
Begin P-mes
If ((a / t) < [Link]) Then [Link]:= a / t
Else Call P-da ()
End P-mes
Begin Clculo-da
a:= 300
t:= 30
[Link]:= 6
[Link]:= 2
[Link]:= 2009
Call P-mes (a, hoy)
Imprime ([Link], [Link], [Link])
End Clculo-da
Teniendoencuentaquelosenterosylasdireccionesocupan2bytes,sepide:
a. DisearelRegistrodeActivacingeneralparaestelenguaje.
b. Realizarunatrazadeejecucindelprogramarepresentandoelcontenidocompletode
lapilaeindicandoelresultadodelasentenciaImprime.
(4puntos)
I0
id
I2
Hoja de Respuesta
Compiladores
I8
I7
Nombre: .............................................................................................................
Apellidos: ...........................................................................................................
COMPILADORES
[Link]:13dejulio.
[Link][Link]
publicacindelascalificacionesylafechayhoradefinitivadelarevisin.
4.Laduracindeesteexamenserde2horas.
[Link].
[Link]:
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)
[Link]:
Program Main
Var i: Integer
Function A (Ref x: Integer)
Procedure B (Ref y: Integer)
Var j: integer
Begin B
If (y <= 0) Then Return
Else Begin
y:=y-2
i:=y-1
End
j:=A (i)
End B
Begin A
x:=x-1
B (x)
Return 2*x
End A
Begin Main
i:= 2
i:= A (A (i))
Imprime (i)
End Main
Elcompiladoryellenguajetienenlassiguientes
caractersticas:
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)
COMPILADORES
[Link]:13dejulio.
[Link][Link]
publicacindelascalificacionesylafechayhoradefinitivadelarevisin.
4.Laduracindeesteexamenserde1horas.
[Link].
[Link].
1. Setieneunlenguajeenelquehayidentificadores,palabrasreservadas,nmerosenteros,
operadoresaritmticosdesumayrestayloqueseexplicaacontinuacin:
Los identificadores estn formados por letras y tienen una longitud mxima de 6
[Link] I, J, K, L, M, Nsonenterossalvoquese
declarenexplcitamentedeotrotipo.
Ladeclaracinexplcitadeunidentificadorseconstruyeconlapalabrareservadaque
indica el tipo (REAL, INTEGER 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
COND
CUERPO
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.
I10
I8
I0
I2
I7
I4
Hoja de Respuesta
I9
Compiladores
I1
I5
I12
I14
I15
I11
I13
I2
I3
Nombre: ...................................................................................................
Apellidos: .................................................................................................
COMPILADORES
4.Laduracindeesteexamenserde2horas.
[Link].
(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
(3 puntos)
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:
SA*B+B | B+A*A
Aa+a
Bb*b
(4 puntos)
COMPILADORES
Examendelprimerparcial.11defebrerode2010
Observaciones:[Link]
[Link][Link]
2.Laduracindeesteexamenserde1horas.
[Link].
[Link].
[Link],constantesdetipocadena,variablesyunaseriedeoperadoresy
[Link]
separadosobligatoriamenteporalmenosundelimitador.
[Link]
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).
[Link]:
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:
ComprobarToken (t: token)
Begin
If (t = SiguienteToken)
Then Leer (SiguienteToken)
Else Error (t)
End
COMPILADORES
[Link].11defebrerode2010
Observaciones:1.Seestimaquesepublicarnlasnotasdelexamenfinalel22defebrero,
[Link]
[Link]
2.Laduracindeesteexamenserde2horas.
[Link].
1. Deunagramticadeunlenguajesehanentresacadolassiguientesreglas:
PD;S
DT: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:
Program QR
Procedure Main
Var a:= 3, b:= 5: integer;
Procedure Q;
Var b: integer;
BEGIN Q
a:= a - 1;
b:= a;
IF b > 0 THEN R (a);
END Q;
Procedure R (b: integer);
BEGIN R
b:= b - a;
Q;
END R;
BEGIN Main
Q;
PRINT (a);
PRINT (b);
END Main;
BEGIN QR
Main;
END QR.
(4puntos)
COMPILADORES
COMPILADORES
(4 puntos)
A
A
A
B
B
C
xBy
zC
yB
C
Ay
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)
COMPILADORES
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 [Link] 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.
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)
ANLISIS LXICO
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: ++, **
I2
A A
I0
I1
Hoja de Respuesta
13-diciembre-2010
Anlisis LR
B
B
B
B
B
I6
id B
num B
id B
num op B
B
B
B
B
B
I9
id
num op B
num B
id B
num op B
num
I5
Nombre: ...................................................................................................
Apellidos: .................................................................................................
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
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
ANLISIS LXICO
1. En la representacin informtica del lenguaje Braille, los distintos elementos, que pueden
Tinta
Procesadores de Lenguajes.
Martes, 22 de marzo de 2011.
XHTML 1
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).
(3,5 puntos)
Program F;
Global
Mat: Array [1..8] of boolean;
Var0: real;
Procedure Cuerpo;
Var var1= 10, var2= 20: integer;
Procedure A;
Var var2: integer;
Procedure B (var2: integer);
/* Parmetro por valor
BEGIN
var2:= var2 + var1;
A;
END;
Function C (REF var2: integer): integer; /* Parmetro por referencia
BEGIN
var1:= var1 + 3;
var2:= var1 + 1;
/* Punto
Return var2;
END;
BEGIN
If var2 < 7 Then B(var1); Else var1:= var1 + C(Mat[5]);
END;
BEGIN
var1:= 1;
var2:= 2;
A;
var0:= var1;
END;
BEGIN
Cuerpo;
END.
(6,5 puntos)
S AB
A 1A | 2B |
B 3A | 4B |
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.
I1
S S
I0
I2
Hoja de Respuesta
4-mayo-2011
I3
I4
Procesadores de Lenguajes
I7
I6
Nombre: ...................................................................................................
Apellidos: .................................................................................................
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 [Link] 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.
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?
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
A
8E
DC10
2E3F
entero
0
88
432
9876
errores
3.2E3F
-54
3E-5A
1.2E3.4
J8.3
6.
.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.
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.
DS
id , L | id
id := E
id ++ | I
nm : S ; R | default S ; |
id | nm | E & E | E oprel E | E oplog E
S ; S | for ( I ; E ; A ) S | I | switch id of R
D DL:T; |
T integer | boolean
oplog and | or
oprel > | < | = | !=
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 P
I0
I1
I6
8-julio-2011
Pregunta 2. Hoja de Respuesta
<
Procesadores de Lenguajes
E
E
E
E
E
I9
var
cte + E
cte E
var E
cte + E
cte
E
E
E
E
E
E
I5
cte E
cte + E
cte E
var E
cte + E
Nombre: ...................................................................................................
Apellidos: .................................................................................................
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
A
8E
DC10
2E3F
entero
0
88
432
9876
errores
3.2E3F
-54
3E-5A
1.2E3.4
J8.3
6.
.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.
DS
id , L | id
id := E
id ++ | I
nm : S ; R | default S ; |
id | nm | E & E | E oprel E | E oplog E
S ; S | for ( I ; E ; A ) S | I | switch id of R end |
D DL:T; |
T integer | boolean
oplog and | or
oprel > | < | = | !=
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.
ANLISIS LXICO
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 true y
false.
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: "Hola", "Prximo Examen: 12/12/11", "if (a>b) then go!").
P P
I0
I1
I6
12-diciembre-2011
Pregunta 1. Hoja de Respuesta
Anlisis Sintctico
<
E
E
E
E
E
I9
var
cte + E
cte E
var E
cte + E
cte
E
E
E
E
E
E
I5
cte E
cte + E
cte E
var E
cte + E
Nombre: ...................................................................................................
Apellidos: .................................................................................................
1. Un
DIRECTORY [fichero]
TV
aT
|
|
| VZ
| bT | h
cZh
dZ
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.
ANLISIS LXICO
12 de abril de 2012
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 ([Link]). 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
08906756
28973434
H-14
23457876
56245432
[Link]
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.
Observaciones: 1. Fecha aproximada de publicacin de las calificaciones: 21-junio (Procesadores de Lenguajes) y 27junio (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
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.
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
A
B
C
case id is C A B | id := constante
CA |
other begin S end |
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 dA
A bA | bcB
B | dB
Se pide construir la tabla del Analizador Descendente LL, modificando la gramtica si fuera necesario
para que cumpla la condicin LL(1).
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.
PROCESADORES DE LENGUAJES
Examen Final, 16 de julio de 2012
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.
12
Amarillo
Barcelona
"RETENCIN / CONGESTIN por AVERA"
77,8 Negro Carchel "OBSTCULO FIJO por DESPRENDIMIENTOS"
Orozko ""
0 4,9 Rojo PuertoReal "CARRETERA CERRADA EN AMBOS SENTIDOS por OBRAS"
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.
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 2 horas.
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
b: lgico
n: entero
s: cadena
f: real
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)
BC | xD
yB |
zB | xD
BD | CA
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)
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)
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:
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).
ANLISIS SINTCTICO
NID
IICD
I izq
DDCI
D der
C cen
Nodo
Izq.
Nodo Nodo
Izq. Cen.
izq
cen
Nodo
Der.
Nodo
Der.
Nodo
Der.
der
Nodo
Der.
Nodo Nodo
Cen. Izq.
cen
der
Nodo Nodo
Cen. Izq.
cen
izq
izq
Se pide:
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.
class
dir
height
Especifica la altura de la imagen. El valor debe ser un nmero entero o un porcentaje entero
id
lang
src
style
tabindex
Especifica el orden de tabulacin del elemento. El valor debe ser un nmero entero
title
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:
<img src="[Link]" alt="Smiley face" height=50 width=50% id="cara"><img
src="[Link] alt="Aceptar" >
< img alt="Mapa que muestra la ruta al tesoro"
src="img/[Link]">
<img tabindex = 5 lang= "es" title ="Examen final" src="[Link]" alt="Examen" width
= 88 height=31 style="verticalalign: middle; border: 4px;">
< img width=120% src="[Link]" alt="" class="fondo" id="fondo_azul_claro_3">
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:
Procedure eq_tk (tok: token)
Begin
If (preanlisis = tok)
Then preanlisis:= scan ()
Else error (tok)
End
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)
PROCESADORES DE LENGUAJES
Primer Examen, 9 de abril 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
C
D
E
id = E | id = id ( C ) | return E
ED |
,ED |
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)
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.
CI
aL
e |
e |
e |
e |
| xL | L
-O
LR
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)
I0
I6
I5
I4
I11
I1
I2
Le
I3
Hoja de Respuesta
7-mayo-2013
Analizador LR
CaL
Le
Re
Nombre: .......................................................................................................
Apellidos: ......................................................................................................
[Link]:19junio(ProcesadoresdeLenguajes)y2julio(Compiladores).
[Link].
[Link].
5.LosalumnosdeCompiladoresdebenrealizarlosejercicios1,2y3ydisponende2horas.
6.LosalumnosdeProcesadoresdeLenguajesdebenrealizarnicamenteelejercicio3ydisponen
de40minutos.
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.
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 215. Los nmeros reales tienen que tener un valor
menor a 10100. 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
A
0
0.0
8E
88
44.3
DC10
432
3.88888888
2E3F4
9876
54321.0
VARIABLES 22222 0.33333333333333
errores
3.2E3F
-54
3E-5A
1.2E3.4
J8.3
6.
.5
5.E2
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).
3. Seaelsiguientefragmentodeunagramtica:
PDS
D id : T I D |
T real | int | array [ cte-ent ] of T
I | := C
CA | {L}
A cte-ent | cte-real
LA,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: int:= 2
//declaracineinicializacindeunavariableentera
b: real
//declaracindeunavariablereal
u: array [5] of int
//declaracindeunavariablevectorde5enteros
v: array [5] of int
w: array [3] of real:={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
PROCESADORES DE LENGUAJES
10 de julio de 2013
Observaciones:[Link]:16julio.
[Link]:18julio.
[Link].
[Link].
5.Laduracindeesteexamenesde2horas
1.
Unaempresadeenerganuclearquieregestionardemaneracentralizadalainformacindesusalmacenes
[Link],deseaconstruirunsistemainformticoquecapture
[Link]:
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);acontinuacinvienelatemperaturamediadelalmacn(unvalorrealinferiora200,enelquetanto
laparteenteracomolapartedecimalsonobligatorias);seguidamentevieneinformacinsobrelavelocidad
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
letrae,unsignoopcionalyunasecuencianovacadedgitos).
Aunquesteeselordenhabitualdeloselementosdelfichero,algunasvecesserecibenlosvaloresenotro
ordenosehaomitidoalgunodeellos.
Acontinuacinsemuestraunejemplocorrectodelformatodeestefichero:
sprngfld 9999 199,999999 99e99 8emount
8,8
director
0
22,0 2z4x6y8 0,3e-23 River10
0,003e303 7e
0,0 9e0
88
33
1,123456789e+1
0,33333333333333
Acontinuacinsemuestraunejemplodeficheroenelquetodosloselementossonincorrectos:
springfield 99999
299,999999 9,9e9i9 a_h 87654321 -5
0,1234Le+1 ,30 02z4x6y80 0h,0 0,e-23
200,0
8,
0,003e3o3
Teniendoencuentaqueningnalmacntieneuncdigoformadopordgitosyunanicaletraeensu
interior(porejemplo,12e45)yquetodosloscdigosdealmacnseencuentranguardadosenunatabla,se
pidedisearlagramticaregular,tokens,autmata,accionessemnticasyerroresdeunAnalizadorLxico
paraestelenguaje.
2. SealasiguientegramticaG:
PDS
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 ]
Sepide:
a. ConstruirunagramticaGequivalentesinrecursividadaizquierdasyfactorizada.
b. CalcularlosconjuntosFirstyFollowdetodoslossmbolosnoterminalesdeG.
c. ConstruirlatabladeunAnalizadorSintcticoLL(1)paraGyjustificarsilagramticaGesLL(1).
d. DisearlosprocedimientosdelAnalizadorSintcticoDescendenteRecursivocorrespondientesalos
smbolosDyS(puedeutilizarseunprocedimientoauxiliarparaequiparartokens).
3. Seaelfragmentodeunlenguajegeneradoporlasiguientegramtica:
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
estagrmatica,teniendoencuentaque:
Ellenguajetiene,almenos,lostiposentero,realylgico.
Nohayconversinautomticadetipos.
Losidentificadoresdebenestardeclaradospreviamenteasuuso.
Lasentenciafor tiene:
o ladeclaracindeuncontador(Cont),quesiempreserdetipoentero,yqueseinicializa
medianteunasentenciadeasignacin.
o unacondicindefinalizacin(E),quevienedadaporunaexpresinquecompruebasi
el identificador que se ha declarado como contador es igual, mayor o menor que una
expresinentera.
o unincremento,queseencargadeirincrementandoelidentificadorcontador.
Eloperadorincremento(++)slosepuedeaplicaradatosenteros.
Losoperadoresrelacionales(op_rel)sepuedenaplicaradatosenterosoreales.
Observaciones: 1. Fecha aproximada de publicacin de las calificaciones: 17-junio (Procesadores de Lenguajes) y 27junio (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.
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.
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 215. Los nmeros reales tienen que tener un valor
menor a 10100. 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
A
0
0.0
8E
88
44.3
DC10
432
3.88888888
2E3F4
9876
54321.0
VARIABLES 22222 0.33333333333333
errores
3.2E3F
-54
3E-5A
1.2E3.4
J8.3
6.
.5
5.E2
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).
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
PROCESADORES DE LENGUAJES
10 de julio de 2013
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:
sprngfld 9999 199,999999 99e99 8emount
8,8
director
0
22,0 2z4x6y8 0,3e-23 River10
0,003e303 7e
0,0 9e0
88
33
1,123456789e+1
0,33333333333333
A continuacin se muestra un ejemplo de fichero en el que todos los elementos son incorrectos:
springfield 99999
299,999999 9,9e9i9 a_h 87654321 -5
0,1234Le+1 ,30 02z4x6y80 0h,0 0,e-23
200,0
8,
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.
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).
Se pide disear el Analizador Semntico mediante una Definicin Dirigida por la Sintaxis para
esta grmatica, teniendo en cuenta que:
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.
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)
Variables
Enteros Reales
IF
.then.
then
RevampWhenGreaterThan
.Else.
a
a2B3c4D5e
abcdefghijklmnopqrst
qwerty
ZX81
0
1
65535
1234
999
9.0
123456.654321
88.
.99
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.
ANLISIS SINTCTICO
Segundo examen. 28 de noviembre de 2013
Observaciones: 1. Las calificaciones se publicarn hacia el 16 de diciembre.
2. La revisin ser hacia el 18 de diciembre.
3. En la web se avisar de las fechas exactas.
4. La duracin de este examen ser de 40 minutos.
I0
T id ++
I3
Hoja de Respuesta
28-noviembre-2013
Anlisis SLR
id
E
T id ++
I6
EE+T
I4
I8
EE+T
I9
S id = E ; S
I12
Nombre: ...................................................................................................
Apellidos: .................................................................................................
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 232.
Variables
Enteros
Reales
If
-Then
Then
RevampWhenGreaterThan
Else
a
-a2-B3-c4-D5-e6
AbcdEfghIjklmnOpqrst
-2
ZX-81
0
1
77777
0246
110
1.
4294967295.999999
77.7777
0.987
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.
PDS
D var id = R ; D |
R int | bool
S if ( E ) { S } else { S } ; S | id = E ; S |
ETF
F+TF|
T id B | ( E )
B(H)|
HE G
G,EG |
Se pide:
[Link] 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
LE,L
L
E id | id + E
Ejemplos de Programas:
beginRutina Rut modo escritura
leer A
borrar A // Error
endRutina
PROCESADORES DE LENGUAJES
Primer Examen, 31 de marzo 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: [Link]
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.
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
Esta descripcin y el mtodo de clculo indicado no corresponden exactamente al cdigo IBAN real.
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.
R begin id S end R
R
S escribe E L S
S lee E S
S
LE,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:[Link]:23junio.
[Link]:25junio.
[Link].
[Link].
5.Laduracindelexamenesde2horas.
Begin rutina14
Escribe vartemporal posmemoria + 15678 ,
End
Begin r12utina
Lee posmemoria + 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
[Link],sedebern
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 int x := 7 utilizando solo las filas de la tabla
[Link].
3. Seaelsiguientefragmentodeunagramtica:
PBS
BDB |
D T id I ;
I=E |
T int | float | struct { C }
CDC |
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
[Link]
PROCESADORES DE LENGUAJES
3 de julio de 2014
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 (=)
abc123$
if$
Variables
a1b2c3$
b8_
Nmeros
_
_8
_abc
zx3
13246978
#0
#654
98
FT | F
B | CB
F
F
S |
| 5A
2 | 5S
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.
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 int = 3, 2, 9
var h float = 7
var f, g int = x, 8+y
if g < x:=5 then y:=f
if h:=x < z:=7 then y:= g