Download Examen_CompI_Feb04 - Universidad de Zaragoza

Document related concepts
no text concepts found
Transcript
Compiladores I
1ª Convocatoria 04/05 (02-02-05)
4º Ing. Informática. C.P.S. Universidad de Zaragoza
Ejercicio 1 (2.0 ptos.): Escribir una gramática libre de contexto, de la clase
LL(1), que genere el mismo lenguaje que la expresión regular
(a|c+|ba|bc)* b+
Probar que, efectivamente, es de dicha clase.
Ejercicio 2 (2.5 ptos.): Dada la siguiente gramática, se pretende construir el
autómata LR(1) y las tablas del análisis LR(1) para la siguiente gramática:
S: a a A| a A c| c;
A: A b | b a;
Se pide:
2A) Rellenar el contenido de los estados del autómata LR(1).
Estado 0
S
Estado 1
Estado 11
Estado 3
Estado 6
Estado 2
Estado 5
Estado 4
a
Estado 7
A
Estado 8
Estado 10
c
Estado 9
Estado 13
Estado 12
2B) A partir del autómata rellenar el contenido de la tabla acción e ir_a
correspondientes al análisis LR(1).
Compiladores I
1ª Convocatoria 04/05 (02-02-05)
4º Ing. Informática. C.P.S. Universidad de Zaragoza
a
b
c
$
S
A
Estado 0
Estado 1
Estado 2
Estado 3
Estado 4
Estado 5
Estado 6
Estado 7
Estado 8
Estado 9
Estado 10
Estado 11
Estado 12
Estado 13
2C) Determinar si se trata o no de una gramática LR(1) En caso de respuesta
negativa ¿De qué tipo es/son el/los conflictos existente(s)? ¿A qué son/es
debido(s) este(s) tipo(s) de conflicto(s)?.
2D) Realizar los pasos necesarios para analizar la cadena de entrada aacb.
Compiladores I
Pila
1ª Convocatoria 04/05 (02-02-05)
4º Ing. Informática. C.P.S. Universidad de Zaragoza
Árbol
entrada
Acción
baac$
Ejercicio 3 (1.0 ptos.): Justifica si es verdad o no la siguiente afirmación:
“Toda gramática SLR(1) es también LL(1)”
Ejercicio 4 (1.0 ptos.): Determinar si el lenguaje generado por la siguiente
gramática es finito o infinito. Razonar, tan formalmente como sea posible, la
respuesta.
S --> a a A | B
B --> a A | b
a --> b B
Compiladores I
1ª Convocatoria 04/05 (02-02-05)
4º Ing. Informática. C.P.S. Universidad de Zaragoza
Ejercicio 5 (1.5 ptos.): Sea el siguiente analizador léxico
(procesaArbolesBinarios.l)
y
el
siguiente
analizador
sintáctico
(procesaArbolesBinarios.y) para árboles binarios enteros:
%{
#include <stdio.h>
#include “procesaArbolesBinarios.tab.h”
%}
%option case-insensitive
separador
[\t \n]+
digito
[0-9]
cteEntera
{digito}+
%%
{separador}
{cteEntera}
“nil”
%%
{/*saltarlo*/}
{yylval.valCant = atoi(yytext); return tkNumero;}
{return tkNil}
%{
#include <stdio.h>
%}
%union{
struct{
.
.
int estaOrdenado;
}atributosArbol;
/*1 Está ordenado. 0 En caso contrario*/
int valCant;
}
%start Arbol
%token <valCant> tkNumero
%token tkNil
%type <atributosArbol> Arbol
%%
Arbol:
tkNumero Arbol Arbol
|
tkNil
%%
int main(){
yyparse();
exit(0);
}
{ . . . };
{ . . . };
Completar el fuente Bison con los atributos y acciones necesarias para
sintetizar el atributo “estaOrdenado”, es decir, que los valores de los
números del primer subárbol sean <= que el valor del número actual y los
valores de todos los números del segundo subárbol sean >= al valor del
número actual. Por ejemplo (2 (1 nil nil) (3 nil nil) ) está ordenado, pero ( 1 (2
nil nil) (3 nil nil) ) no lo está.