Tema 4 · Compiladores
Test de Análisis semántico y traducción dirigida por la sintaxis
4 preguntas tipo test de exámenes reales de Compiladores.
Preguntas falladas
Aquí irán las que falles, dejes en blanco o marques para revisar, para repasarlas después.
Configura tu test
4 preguntas de Análisis semántico y traducción dirigida por la sintaxis
Ejemplos de preguntas de Análisis semántico y traducción dirigida por la sintaxis
4 de 4 preguntas. La respuesta correcta se ve al practicar.
- 1.
Dada la siguiente gramática G con VT = {a, x} y VN = {S, X}, siendo P :
text
S → X S | a X → S X | xy la siguiente DDS: Regla de producción Regla semántica
text
S → X S1 S.val = f(X.val);S1.val = f(X.val); S → a S.val = g(a.val);X → S X1 X.val = h(S.val,X1.val);S.val = l(X1.val);
text
X → x X.val = f(x.val);Podemos afirmar:
- a)La gramática es S-atribuida.
- b)La gramática es L-atribuida pero no S-atribuida.
- c)La gramática no es ni S-atribuida ni L-atribuida.
- 2.
La semántica de un lenguaje de programación:
- a)No está incluida en la descripción BNF de la gramática, puesto que en una traducción automática el significado de las frases es irrelevante.
- b)No está incluida en la descripción BNF de la gramática, pero hay que tenerla en cuenta en la implementación del compilador.
- c)Aparece en la decripción BNF de la gramática, de forma implícita.
- 3.
Dado el siguiente fragmento de un fichero con formato Bison:
text
%{ int cs=0; %} %token INICIO FIN CAB COL %% inicial : { cs++; } INICIO cabecera cola FIN {if (cs) printf("%d\n",$3);else printf("%d\n",$4);}; cabecera : CAB {$$=2017;cs--;} | {$$=2018;cs--;}; cola : COL {$$=2019;cs++;} | {$$=2020;cs++;};La salida del programa en C generado a partir de él, ante la entrada INICIO FIN será:
- a)2017 o 2019
- b)2018
- c)2020
- 4.
text
Dada la gramática G con VN = {R, As, A}, VT = {I, <, >, (, ), ,} y P : (1) R → I < As > (2) As → As,As (3) | A (4) A → ( I , I , I )y dada la siguiente definición dirigida por la sintaxis
text
R → I < As > {As.valor = I.valor; printf (”N umero de tuplas : %d”, As.num); } As → As1,As2 {As1.valor = As.valor; As2.valor = As.valor; As.num = As1.num + As2.num; } | A {A.valor = As.valor; As.num = 1; } A → ( I1 , I2 , I3 ) {if (I1.valor > A.valor || I2.valor > A.valor) printf (”Error : valores f uera de rango”); }decir si la gramática es:
- a)S-Atribuida y L-Atribuida.
- b)L-Atribuida.
- c)De ninguno de los dos tipos.