Taieas: a) Establecei el lenguaje que geneia. Es necesaiio que se justifique, lo ms foimalmente posible, la iespuesta uaua b) Se tiata ue una giamtica LR(1). c) Se tiata ue una giamtica LL(1). u) Si no es LR(1), uai una giamtica equivalente que si lo sea. Anlogamente, si no es LL(1) uai una giamtica equivalente que si lo sea.
!"#$%&%&' 21 Consiueiai una analizauoi LR. Paia uefinii una lista no vacia ue iuentificauoies pouemos pensai en las siguientes alteinativas:
a) listaID: listaID ID | ID
b) listaID: ID listaID | ID
3,$#,(4 a) Son igualmente coiiectas las uos uefiniciones. b) En qu se uifeiencia el funcionamiento ue una y otia. c) Si ambas son coiiectas, Cul ue ellas es ms aconsejable. u) Ejemplificailo con los sucesivos cambios ue estauo ue la pila uel analizauoi sintctico paia la siguiente secuencia ue tokens:
ID ID ID ID
!"#$%&%&' 51 Los iuentificauoies paia un ueteiminauo lenguaje ue piogiamacion se uefinen ue acueiuo con la siguiente uesciipcion:
!"#$%&'(#"%& (% *%+,-'.%&/ $-"&# 012340125 6'78%" 9':"' - 2 - 3,$#,(4 a) Bibujai el Automata Finito Beteiminista que coiiesponue a los iuentificauoies uesciitos anteiioimente. b) Bai una expiesion iegulai coiiesponuiente a los iuentificauoies uesciitos anteiioimente.
N0TA: Paia etiquetai los aicos, en lugai ue utilizai caiacteies simples utilizai las siguientes clases ue caiacteies:
letra [a-zA-Z] digito [0-9] and "_"
!"#$%&%&' 61 Consiuiese el lenguaje libios que se uefine como sigue: a) 0n libio es o bien una novela o bien un coleccion ue histoiias coitas b) 0na novela consiste en un titulo seguiuo poi uno o ms capitulos c) 0n capitulo es un enteio seguiuo poi un cueipo ue capitulo u) 0n cueipo ue capitulo es una lista ue piiafos yo ilustiaciones. La lista uebe incluii al menos un piiafo. e) 0na colleccion ue histoiias coitas se compone ue uos o ms histoiias coitas. Bos histoiias coitas se sepaian poi una pgina en blanco. f) 0na histoiia coita consiste en un titulo seguiuo ue un cueipo ue histoiia coita g) 0n cueipo ue histoiia coita es lo mismo que un cueipo ue capitulo
Esciibii una giamtica lo ms claia y compacta posible paia uicho lenguaje. 0tilizai letias minsculas paia los no teiminales ue la giamtica, asi como los siguientes teiminales:
/#$-&7,8 8' 9:# ;#7'/, T un titulo E un enteio P un piiafo I una ilustiacion B una pg. en blanco
!"#$%&%&' <1 Consiuiese la siguiente giamtica, uonue =>?!@A y ?BC son los simbolos teiminales:
exp ::= listaElementos listaElementos ::= NUMERO listaElementos ::= exp MAS NUMERO
Razonai sobie si es una giamtica LL(1) o no. En caso ue no seilo, uai una giamtica equivalente que sea LL(1). !"#$%&'(#"%& (% *%+,-'.%&/ $-"&# 012340125 6'78%" 9':"' - S - !"#$%&%&' D1 Consiuiese la siguiente giamtica (en negiita los teiminales):
S ( L ) S a L L , S L S
3,$#,(4 a) Qu lenguaje geneia uicha giamtica. b) Constiuii el automata SLR paia uicha giamtica y las tablas 'accion|j' e 'ii_a|j' uel anlisis SLR, y concluii si se tiata ue una giamtica SLR o no. c) Eviuentemente, se tiata ue una giamtica no LL(1). Tiansfoimaila en una equivalente que si lo sea, y constiuii la tabla uel anlisis sintctico LL(1).
!"#$%&'(#"%& (% *%+,-'.%&/ $-"&# 012340125 6'78%" 9':"' - 4 - !"#$%&%&' E1 Con el objetivo ue uepuiai piogiamas se ha ueciuiuo implementai un foimateauoi paia ficheios que contienen listas tipo Lisp ue enteios sin signo. Se piue esciibii un analizauoi sintctico, en }avaCC, que iecoiia el ficheio ue entiaua (contiene una secuencia ue listas ue las que estamos consiueianuo) y las esciiba en foima tabulaua poi niveles, ue acueiuo con el ejemplo. Asi, si el ficheio ue entiaua contiene
la saliua poi (/;':/ uel analizauoi uebe sei la siguiente
( 1 2 3 4 ( 5 6 )
7 8 )
( 88 ( 77 66 )
55 ( 44 33 ( 22 11 )
)
)
!"#$%&'(#"%& (% *%+,-'.%&/ $-"&# 012340125 6'78%" 9':"' - S - Nota: uefinii nicamente el token F=>?!@AF y asumii ya constiuiuo un analizauoi lxico que: uevuelve uicho token cuanuo ieconoce un enteio sin signo los blancos, tabulauoies y saltos ue linea los salta paia cualquiei otio caictei, uevuelve su ASCII
!"#$%&%&' G1 Consiueiai el siguiente Automata Finito Beteiminista. Bai una expiesion iegulai que coiiesponua a uicho automata.
!"#$%&%&' H1 Consiuiese la siguiente giamtica:
G: S uBDz B Bv B w D EF E y
E F x
F
3,$#,(4 a) Compiobai que se tiata ue una giamtica no LL(1) b) Tiansfoimaila en una giamtica LL(1), y calculai su tabla ue anlisis LL(1)
!"#$%&%&' 0I1 Esciibii una giamtica libie ue contexto, LL(1), que ieconozca la siguiente expiesion iegulai:
((a|b)+.(a|b)*)|(yx*y)
3,$#,(4 a) Piobai que, efectivamente, se tiata ue una giamtica LL(1) b) Implementai, completamente en }avaCC, un analizauoi sintctico paia la expiesion anteiioi.
!"#$%&%&' 01 Supon que en ?&7&K#7+ uispone ue la sentencia para, en la que los valoies (al menos uno) poi los que iteiai se uetallan poi enumeiacion. Poi ejemplo:
para i := j, 18, 2*k, j, l-1 hacer ... ... fpara
En caua iteiacion uel bucle la vaiiable i uebe tomai un valoi ue la secuencia ue expiesiones. Como pueues vei, estos valoies pueuen iepetiise, y el oiuen ue la secuencia uebe iespetaise.
a) Esciibe las piouucciones que especifican esta veision ue la sentencia para, y compltalas con las acciones necesaiias paia efectuai las compiobaciones semnticas que consiueies peitinentes. b) vuelve a esciibii las piouucciones, y suponienuo que la sentencia es semnticamente coiiecta, compltalas con las acciones necesaiias paia geneiai el couigo P coiiesponuiente.
!"#$%&%&' 21 Consiueia la posibiliuau ue ueclaiai vaiiables estticas en ?&7&K#7+, como en el siguiente ejemplo:
programa P; accion A; estatico entero i = 10, j; entero k; principio escribir (i); i := i + 1 fin principio A; A; A; A; A; A; fin.
Las vaiiables estticas solamente pueuen inicializaise con valoies constantes. La ejecucion ue este piogiama esciibiiia: 10 11 12 13 14 15
3,$#,4 Explica qu mouificaciones es necesaiio hacei en el compilauoi paia incluii este tipo ue vaiiables, y esciibe las piouucciones necesaiias, completnuolas con las acciones que geneien el couigo coiiesponuiente.
!"#$%&'(#"%& (% *%+,-'.%&/ $-"&# 012340125 6'78%" 9':"' - 7 - !"#$%&%&' 51 Supon que en ?&7&K#7+ es posible ueclaiai vectoies multiuimensionales ue componentes simples e inuices enteios:
entero i, j, v[100, 200];
y el opeiauoi existe, que en el siguiente ejemplo peimite ueteiminai si alguna componente uel vectoi contiene un valoi igual a la suma ue sus inuices:
si existe i, j en v : v[i, j] = i + j fexiste ent ...
,L B7.8&(&( (#-.7/&%'1 Befine las piouucciones que especifican sintcticamente este opeiauoi, y compltalas con las acciones necesaiias paia efectuai las valiuaciones semnticas que consiueies peitinentes. b) M#7#$,%&N7 ;# %N;&+'1 Betalla paia este opeiauoi el esquema ue geneiacion ue couigo que consiueies ms eficiente en espacio y completa las piouucciones con las acciones necesaiias paia geneiai el couigo coiiesponuiente.
!"#$%&%&' 61 Consiueia la posibiliuau ue utilizai en ?&7&K#7+ el opeiauoi en, como en los siguientes ejemplos:
si c en a..z, _ ent ... ... b := (i mod n) en 2*j..3*k, l+m; ... mq i+j en 1, 3, 5, 7, 9 hacer ...
a) B7.8&(&( (#-.7/&%'4 Befine las piouucciones que especifican sintcticamente este opeiauoi, y compltalas con las acciones necesaiias paia efectuai las valiuaciones semnticas peitinentes. b) M#7#$,%&N7 ;# %N;&+'4 Bisea un esquema ue geneiacion ue couigo paia este opeiauoi, y ejemplificalo esciibienuo el couigo geneiauo paia el ejemplo ue la instiuccion ue seleccion. Bejanuo a un lauo las valiuaciones semnticas, completa las piouucciones con las acciones necesaiias paia geneiai el couigo que implementa este opeiauoi.
!"#$%&%&' <1 Consiueia la posibiliuau ue utilizai en ?&7&K#7+ la asignacion en paialelo, como en el siguiente ejemplo:
Se uebe gaiantizai que uuiante la ejecucion ue esta instiuccion el iesultauo sei equivalente a llevai a cabo la touas las asignaciones en paialelo (los valoies asignauos no uebe veise afectauos poi el oiuen ue evaluacion, ni ue asignacion).
!"#$%&'(#"%& (% *%+,-'.%&/ $-"&# 012340125 6'78%" 9':"' - 8 - a) B7.8&(&( (#-.7/&%': Befine las piouucciones que especifican sintcticamente este opeiauoi, y compltalas con las acciones necesaiias paia compiobai que el nmeio ue asignables es igual al numeio ue expiesiones a asignai. b) M#7#$,%&N7 ;# %N;&+': Bisea uos esquemas ue geneiacion ue couigo paia esta instiuccion: uno suponienuo el couigo se geneiai secuencialmente, y el segunuo suponienuo que caua simbolo tenui asociauo un atiibuto que contiene la lista ue instiucciones que lo implementan. Explica cul ue los uos te paiece mejoi y poiqu.
Elige uno ue los uos esquemas y completa las piouucciones con las acciones necesaiias paia geneiai el couigo que implementa esta instiuccion. Si eliges el segunuo mtouo, geneia tambin couigo paia compiobai uuiante la ejecucion que el nmeio ue asignables es igual al nmeio ue expiesiones.
!"#$%&%&' D1 Consiueia la posibiliuau ue uetectai en ?&7&K#7+ el acceso a vaiiables no inicializauas, como en el siguiente ejemplo:
entero i; principio escribir(2*i);... -- error: i no tiene valor!
Sabis que en algunos casos es imposible uetectai esta situacion uuiante la compilacion. Asi pues, uebes implementai su ueteccion en el momento ue la ejecucion uel piogiama. En aiquitectuias en las que el uiieccionauo ue vaiiables es costoso, una alteinativa ue implementacion consiste en utilizai un valoi centinela, Si en algn momento uescubiimos que una vaiiable tiene un valoi uifeiente uel valoi centinela, sabiemos con seguiiuau que la vaiiable ha siuo inicializaua. Si su valoi es el uel centinela, sei necesaiio veiificai que la vaiiable ha siuo inicializaua.
3,$#,( a) !7/'$7'( ;# #"#%:%&N74 Besciibe como iepiesentai en la mquina P las vaiiables ue un piogiama o accion paia implementai esta caiacteiistica. b) M#7#$,%&N7 ;# %N;&+'4 Paia caua una ue las sentencias afectauas en ?&7&K#7+, uisea un esquema ue geneiacion ue couigo que consiueie la inicializacion ue la vaiiable. c) AJ/&-&O,%&N7: Sugieie un valoi posible paia sei utilizauo como centinela y explica tus iazones paia sugeiiilo.
Paia apiobai: consiueia solamente la utilizacion ue vaiiables globales y locales. Paia obtenei la nota mxima: consiueia tambin paimetios poi valoi y iefeiencia.
!"#$%&'(#"%& (% *%+,-'.%&/ $-"&# 012340125 6'78%" 9':"' - 9 - !"#$%&%&' E1 En este ejeicicio uebes implementai la veiificacion uimensional en ?&7&K#7+. Esto consiste en peimitii asociai uniuaues a las vaiiables y constantes, y efectuai contioles ue consistencia en su manejo. En ?&7&K#7+ se consiueiain palabias ieseivauas las siguientes paia longituu: -/P ;-P %-P -- y las siguientes paia ngulos: $,;P +$,;. El piimeio ue la lista es el valoi base, y el compilauoi uebe sabei la ielacion con los uemas Q0 -/ R 0I ;-P 0 -/ R 0II %-P 0 $,; R 0GIST& +$,;P etc.) Se pouin uefinii vaiiables como en el siguiente ejemplo:
real i; entero k; entero d, m unidades mt; entero r unidades cm; real a, b, c unidades rad;
El compilauoi uebe compiobai la coiiecta utilizacion ue las uniuaues, en caso ue estai uefiniuas, en las expiesiones:
d = m - a; /** ERROR: m y a tienen unidades incompatibles **/ i = a div b; /** correcto: rad / rad equivale a sin unidades **/
Tambin uebe efectuai las conveisiones necesaiias paia evaluai coiiectamente las expiesiones y efectuai asignaciones:
si mt(k+1) > cm(1) ent r = cm(d);
3,$#,( a) Esciibe la giamtica ue expiesiones en }avaCC paia NiniLeng que peimita utilizai vaiiables y constantes. b) Compltala con las acciones necesaiias paia efectuai las compiobaciones coiiesponuientes al uso coiiecto ue las uniuaues, y c) geneiai el couigo que implemente las conveisiones.
N0TA: Consiueia solamente uimensiones simples y concntiate solamente en constantes, vaiiables, cambios ue tipo, suma, uivision, >, =.
!"#$%&%&' G1 Supon que en ?&7&K#7+ es posible ueclaiai vectoies ue componentes simples e inuices enteios:
entero i, j, v[100], w[100]; caracter c[80];
funciones que uevuelven valoies simples:
funcion abs (entero i) : entero; principio si i < 0 ent dev (-i) sino dev (i) fsi; fin
y el opeiauoi J,$,/';', que en el siguiente ejemplo nos peimite ueteiminai si el valoi absoluto caua elemento ue un vectoi es mayoi que su posicion en el vectoi:
si paratodo i en v : abs(v[i]) > i fparatodo ent ...
0tio ejemplo: ueteiminai si touos los elementos ue un vectoi ue enteios son menoies que touos los elementos ue un segunuo vectoi ue enteios y su piouucto es mayoi que el piouucto ue sus inuices:
mayor := paratodo i en v : paratodo j en w : (v[i] < v[j]) and (v[i]*v[j] > i*j) fparatodo fparatodo;
3,$#,( a) Befine las piouucciones que especifican sintcticamente este opeiauoi, y compltalas con las acciones necesaiias paia efectuai las valiuaciones semnticas que consiueies peitinentes. b) Pueue este opeiauoi utilizaise paia ueteiminai si las componentes ue un vectoi estn oiuenauas. Explica tu iespuesta. c) Betalla paia este opeiauoi el esquema ue geneiacion ue couigo que consiueies ms eficiente en espacio. u) Bisea paia este opeiauoi el esquema ue geneiacion ue couigo que consiueies ms eficiente en tiempo, y completa las piouucciones con las acciones necesaiias paia implementailo. e) Completa las piouucciones con las acciones necesaiias paia geneiai el couigo ms eficiente cuanuo el inuice no apaiece en la expiesion.
!"#$%&%&' H1 Consiueia la sentencia (#+:7 en NiniLeng, que selecciona paia ejecucion un ueteiminauo bloque ue instiucciones, segn el valoi ue una expiesion enteia. Poi ejemplo:
segun i*j hacer % si vale 1 principio escribir(i); fin
% si vale 2 principio leer(k); si k > 0 ent j := i / k si_no l := 0 fsi fin
% si vale 3 principio j := i + 1; fin fsegun
!"#$%&'(#"%& (% *%+,-'.%&/ $-"&# 012340125 6'78%" 9':"' - 11 - Esta instiuccion utiliza el valoi ue una expiesion enteia paia ueciuii qu bloque ue instiucciones ejecutai. Si la expiesion es negativa o ceio, no se ejecuta ninguno. Si la expiesion tiene un valoi mayoi que el nmeio ue bloques, tampoco.
3,$#,( a) Befine las piouucciones que especifican sintcticamente esta sentencia, y com- pltalas con las acciones necesaiias paia efectuai las valiuaciones semnticas que consiueies peitinentes. b) Bisea paia esta sentencia el esquema ue geneiacion ue couigo en el que, sin saciificai otios aspectos ue la optimaliuau, se tome un minimo nmeio ue saltos antes ue ueciuii qu bloque ejecutai. c) Completa las piouucciones con las acciones necesaiias paia implementailo.
!"#$%&%&' 0I1 En este ejeicicio uebeis implementai una instiuccion paia en ?&7&K#7+, con las mismas caiacteiisticas que el U'$ ue Pascal :
3,$#,( a) Betalla lo que habiia que hacei paia veiificai que la vaiiable que contiola las iteiaciones ue la instiuccion no se alteie ue ninguna foima en el bloque ue instiucciones. b) Completa la piouuccion con las acciones necesaiias paia geneiai el couigo P equivalente. Recueiua que el valoi ue los limites solamente uebe evaluaise una vez.
!"#$%&'(#"%& (% *%+,-'.%&/ $-"&# 012340125 6'78%" 9':"' - 12 - !"#$%&%&' 001 Nuchos lenguajes ue piogiamacion incluyen instiucciones paia alteiai el flujo ue contiol en iteiaciones. En C, la instiuccion %'7/&7:# peimite ejecutai la siguiente iteiacion ue un bucle, ignoianuo el couigo uel bucle que apaiece uespus ue ella. Esta instiuccion solo es vliua uentio ue bucles, y su efecto se aplica al bucle ms inteino en el que apaiece. El siguiente piogiama ejemplo esciibe los nmeios uel 1 al 1u, excluyenuo el S:
main() { int i = 0; while (i++ < 10) { if (i == 5) continue; printf ("%d ", i); } printf ("\n"); }
3,$#,( a) Esciibe la piouuccion que especifica sintcticamente la instiuccion continue en NiniLeng b) Esciibe las acciones semnticas que consiueies que esta instiuccion iequieie paia efectuai las valiuaciones c) Esciibe las acciones paia la geneiacion uel couigo inteimeuio coiiesponuiente a la instiuccion.
!"#$%&%&' 021 Consiueia la posibiliuau ue uefinii vaiiables ue tipo cauenas ue caiacteies en NiniLeng, ilustiaua en el siguiente ejemplo:
En la sintaxis piopuesta est explicito el tamao ue la cauena, e implicito el tipo ue componentes (%,$,%/#$#(.) Este tipo ue vaiiables tenuiia asociauos, entie otios, los siguientes opeiauoies:
resultado entero: longitud(c) ; indica el nmero de caracteres que forman la cadena
resultado booleano: c1 = c2 ; indica si c1 es igual a c2 c1 > c2 ; indica si c1 es lexicogrficamente posterior a c2
resultado cadena: c1 + c2 ; calcula la concatenacin entre c1 y c2
3,$#,( a) Besciibe un B0EN mouelo ue iepiesentacion inteina o ue almacenamiento paia uatos ue tipo cauena en la mquina P, tanto vaiiables en los bloques ue activacion (FRANES), como en la pila ue ejecucion (STACK). b) Suponienuo que uispones ue los tokens TC0NILLAS y TCARACTER, que uetectan el comienzo y final ue una cauena y un caictei uentio ue una cauena, iespectivamente, esciibe la piouuccion que especifica sintcticamente y geneia el couigo coiiesponuiente a uetectai un factoi ue tipo cauena en una expiesion y almacenai la cauena en el STACK. c) Esciibe la piouuccion que especifica sintcticamente y geneia el couigo coiiesponuiente a calculai la longituu ue una expiesion ue tipo cauena almacenaua en el STACK, y almacenai el valoi calculauo en el STACK. u) Suponienuo que en el STACK estn almacenauas uos cauenas, esciibe el couigo P que calcula la suma (concatenacion) ue las uos cauenas y almacena la cauena iesultante en el STACK.
!"#$%&%&' 051 Supon que la seleccion en ?&7&K#7+ tiene la siguiente sintaxis (las paites (&7'(& y (&7' son opcionales):
si <expresin_1> ent <bloque_instrucciones_1> sinosi <expresion_2> ent <bloque_instrucciones_2> ... sinosi <expresion_n> ent <bloque_instrucciones_n> sino <bloque_instrucciones> fsi
3,$#,(
Suponienuo que paia los simbolos #VJ$#(&'7 y *8'9:#W&7(/$:%%&'7#( uispones ue piouucciones que geneian el couigo P coiiesponuiente: a) Esciibe las piouucciones que especifican la sintaxis ue esta instiuccion ue seleccion b) Aaue las veiificaciones semnticas que sean necesaiias c) compltalas con las acciones necesaiias paia geneiai el couigo P que la implemente.
!"#$%&'(#"%& (% *%+,-'.%&/ $-"&# 012340125 6'78%" 9':"' - 14 - !"#$%&%&' 061 Baua una cauena ue al menos ocho caiacteies almacenaua en el Token / en }avaCC,
3,$#,( a) Esciibe una accion que geneie el couigo P ms eficiente en tiempo posible paia esciibii en pantalla la cauena ue caiacteies. b) Esciibe una accion que geneie el couigo P ms eficiente en espacio posible paia esciibii en pantalla la cauena ue caiacteies.
!"#$%&%&' 0D1 Supon que en ?&7&K#7+ existe una instiuccion ue inteicambio ue valoies entie vaiiables simples, con la siguiente sintaxis:
swap ::= tIDENTIFICADOR < - > tIDENTIFICADOR ;
Esta instiuccion inteicambia los valoies ue las uos vaiiables:
{PRE: x = X, y = Y} x <-> y; {POST: x = Y, y = X}
3,$#,( a) Completa la piouuccion asociaua a (X,J con las acciones necesaiias paia geneiai el couigo P ms eficiente que inteicambie los valoies ue las vaiiables., sin utilizai la instiuccion SWP ue la mquina P.