UniTestReal

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

Modo

Ves si aciertas nada más responder.

Número de preguntas

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. 1.

    Dada la siguiente gramática G con VT = {a, x} y VN = {S, X}, siendo P :

    textS → X S | a
    X → S X | x

    y la siguiente DDS: Regla de producción Regla semántica

    textS → 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);

    textX → 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. 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. 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. 4.
    textDada 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

    textR → 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.

Otros temas de Compiladores