Question 1
Question
Un traductor dirigido por la sintaxis consiste en añadir a un autómata con pila la posibilidad de ejecutar código asociado a las reglas sintácticas y transmitir información a través de los símbolos de las mismas.
Question 2
Question
Dado el siguiente traductor dirigido por la sintaxis, indica el tipo de cada atributo existente en él:
S ::= {A.x = 0;} A C {print(C.z * A.y);}
A ::= a {A1.x = A.x + 1} A1 {A.y = A1.y} | b {print(A.x); A.y = A.x}
C ::= c {C.z = 1;} | d {C.z = 2;}
A.x es el único atributo heredado, mientras que A.y y C.z son sintetizados.
Question 3
Question
Si un traductor de un analizador ascendente implementa un orden de evaluación basado en árbol sintáctico, la ejecución de las acciones se asociará a las derivaciones realizadas durante el análisis.
Question 4
Question
Sobre las acciones semánticas que faltan en la producción T ::= T1*F del vídeo, la acción correcta sería:
T ::= T1*F {T1.val = T.val * F.val}
Question 5
Question
Sobre las acciones semánticas que faltan en las producciones E ::= T y T ::= F del vídeo, es cierto que: no es necesario incluir ninguna acción puesto que no hay ninguna operación que realizar en estas producciones.
Question 6
Question
La acción semántica de la producción F ::= (E) será:
F ::= (E) {F.val = E.val}
Question 7
Question
Dado el siguiente traductor dirigido por la sintaxis especificado como un esquema de traducción (EDT):
S ::= {A.x = 0;} A C {println(C.z * A.x);}
A ::= a {A1.x = A.x + 1} A1 {A.y = A1.y} | b {println(A.x); A.y = A.x}
C ::= c {C.z = 1;} | d {C.z = 2;}
Al procesar la cadena de entrada:
aabd
El resultado sería:
2
0
Question 8
Question
La siguiente gramática especifica un traductor capaz de hacer restas de enteros:
S ::= S1 – cte {S.valor = S1.valor – cte.valex}
| cte {S.valor = cte.valex}
Para poder implementar un traductor descendente sería necesario eliminar la recursividad por la izquierda en el traductor. Se propone la siguiente transformación:
S ::= cte – S1 {S.valor = cte.valex - S1.valor}
| cte {S.valor = cte.valex}
Question 9
Question
Dado el siguiente código de un traductor recursivo:
float X(float X_at2)
{
float X1_at1, X1_at2, z_lex, W_v;
if(entrada == z){
cmp(z);
X1_at2=f1(X_at2,z_lex);
X1_at1=X(X1_at2);
cmp(y);
return(X1_at1);
} else if(entrada == t){
W_v = W();
return(f2(X_at2,W_v));
} else error();
}
Answer
-
El código de este traductor recursivo se asocia a la siguiente definición dirigida por la sintaxis:
X ::= z {X1.at2 = f1(X.at2,z.lex);} X1 y {X.at1 = X.at1;}
| W {X.at1 = f2(X.at2,W.v);}
-
X es un símbolo con un atributo sintetizado representado por f2.
-
X es un símbolo con un atributo heredado representado por X_at2.
-
W es un símbolo con un atributo heredado representado por W_v.
Question 10
Question
Indique si la siguiente afirmación es cierta o falsa:
La traducción ascendente, TDS implementado con analizadores ascendentes, no permite la ejecución de acciones semánticas intercaladas en el consecuente. Al basarse en un analizador ascendente funciona por reducciones, por lo que sólo podremos ejecutar acciones cuando se apliquen estas reducciones, lo que implica la detección consecuentes completos, no con consecuentes parcialmente detectados.
Question 11
Question
Indique si la siguiente afirmación es cierta o falsa:
La traducción ascendente, TDS implementado con analizadores ascendentes, permite siempre la utilización de atributos heredados a pesar de que debido al funcionamiento por reducciones la existencia de los símbolos del antecedente es siempre posterior a los del consecuente.