X !X X ja j s0 s1 s1 s3 s2 s3 s3

Anuncio
Examen de Cl-I (9 de juny de 2000)
Sense apunts, Temps: 3 hores
Publicacio Notes i Sol licitud de Revisio: 21 de juny de 2000
1.
Analisi sintactica [3 punts] Trieu una de les dues preguntes seguents
((a) o (b), pero NO totes dues):
(a) Considereu la gramatica
X
s0
s1
s2
s3
!
X X jaj
i les seves taules d'accions i de salts pel metode LALR(1)
a
$
X
shi(s2 )/red(X )
red(X )
s1
shi(s2 )/red(X )
accept/red(X )
s3
red(X a)
red(X a)
shi(s2 )/red(X )/red(X X X ) red(X )/red(X X X ) s3
!
!
!
!
!
!
!
!
!
!
Contesteu les seguents preguntes:
1) Discuteix la ressolubilitat del conicte de la casella ACCIONS(s1 ,$)
tot deixant la resta dels conictes sense resoldre. Digues si es
ressoluble i quina opcio triaries. Justica la resposta.
2) Discuteix la ressolubilitat del conicte de la casella ACCIONS(s3 ,$)
tot deixant la resta dels conictes sense resoldre. En particular,
digues si hi ha una accio que puguis descartar en una solucio
estatica. Justica la resposta.
(b) Consideremos la gramatica
S
E
E
E
->
->
->
->
E $
a
a [ E ]
E * a
1) >Es una gramatica LR(0)? >Por que?
2) >Es una gramatica LR(1)? >Por que?
3) Usar el algoritmo de analisis sintactico LR para analizar la entrada
, describiendo, para cada paso del analisis, el contenido de la
pila y el de la entrada, as como las acciones ejecutadas.
2. Preguntes [4 punts]: (cal justicar la resposta)
(a) Un professor de Compiladors diu un dia a classe: \els conictes son
sempre deguts a que la gramatica es ambigua" i un alumne li contesta:
\vaja! jo ho havia entes al reves: si la gramatica es ambigua llavors
segur que hi ha conictes". Tenen rao tots dos? Cap? Nomes un?
Qui? Perque?
a[a*a]
(b) Al dissenyar la gramatica incontextual per a sequencies de tokens a,
podem triar entre les opcions:
i. S S a ii. S S S a iii. S a S Discutiu avantatges i inconvenients de cada opcio.
(c) Per que reconeixem les expressions amb parentesi en el nivell sintactic
en lloc d'en el lexic?
(d) Suposeu que heu de dissenyar un interpret de comandes d'un sistema
operatiu (p.e. Unix). Com tractarieu el salt de lnia, >com un token
que es retorna a l'analitzador sintactic? o, >com un separador que el
lexic bandeja sense comunicar-ho al sintactic? Perque?
3. Atributs [3 punts]: Consideremos la siguiente denicion (parcial) de un
lenguaje algortmico muy sencillo (no terminales en minuscula y tokens
en mayuscula):
!
programa
dec_vars
tipo
l_instrs
j
!
j
!
j
j
->
dec_vars l_instrs
-> /* vacio */ | dec_vars IDENT DOSPUNTOS tipo
-> BOOL | INTEGER
-> ...
...
Queremos obtener, para cada programa la tabla de smbolos correspondiente. Esta tabla es una secuencia de triplas: <identificador, tipo,
offset>, donde el offset indica d
onde estara en memoria esta variable en
tiempo de ejecucion: es el desplazamiento relativo al comienzo de la zona
de datos asignada al programa. Supondremos que tanto los booleanos
como los enteros ocupan 4 bytes. Por ejemplo, la declaracion
x :
integer
generara la secuencia
y :
bool
z :
integer
[<x,integer,0>, <y,bool,4>, <z,integer,8>]
Supondremos que para trabajar con estas secuencias tenemos las operaciones: Seq Vacia, Add(seq, nombre, tipo, oset) que devuelve una
nueva secuencia despues de a~nadir a seq la tripla <nombre, tipo, offset>
y Esta?(seq, nombre) para consultar si en seq esta el identicador nombre.
En concreto se pide, justicando adecuadamente las respuestas:
1) Describir que atributos (y si son heredados o sintetizados) es necesario asociar a los no terminales programa y dec vars para calcular las
secuencias descritas anteriormente.
2) Denir las reglas para el calculo de estos atributos
Descargar