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