Questão 1
Questão
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.
Questão 2
Questão
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.
Questão 3
Questão
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.
Questão 4
Questão
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}
Questão 5
Questão
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.
Questão 6
Questão
La acción semántica de la producción F ::= (E) será:
F ::= (E) {F.val = E.val}
Questão 7
Questão
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
Questão 8
Questão
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}
Questão 9
Questão
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();
}
Responda
-
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.
Questão 10
Questão
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.
Questão 11
Questão
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.