compiladores
![]() |
![]() |
![]() |
Título del Test:![]() compiladores Descripción: test compiladores |




Comentarios |
---|
NO HAY REGISTROS |
Supongamos que implementamos con Flex un analizador l´exico de la gram´ atica anterior, sustituyendo ∧ por && y ∨ por ||, y añadimos el símbolo terminal ; para separar expresiones lógicas: %{ #include <stdio.h> #include "sintactico.tab.h" int inicio_error = 0; void msg_error(); int contador_errores = 0; %} espacio %x error_lex %% [ \n\r\t] { } {espacio}+ "&&" "||" ";" "true" "false" . { return AND; } { return OR; } { return PYC; } { yylval.ent = 1; return VAL; } { yylval.ent = 0; return VAL; } { inicio_error = yylineno; yymore(); BEGIN(error_lex); } <error_lex >{espacio}|";" { yyless(yyleng-1); msg_error(); BEGIN(0); } <error_lex >. { yymore(); } <error_lex><<EOF>> %% void msg_error() { { msg_error(); return 0; } printf("Error lexico en linea %d: %s\n", inicio_error, yytext); contador_errores++; }. El contador de errores termina tomando el valor 1. El contador de errores termina tomando el valor 2. El analizador léxico devuelve siete tokens. A continuación se muestra el autómata de la colección LR(0) de la gramática B → BB | 1B | 0. Supongamos que se quiere emplear la concatenación de símbolos con asociatividad izquierda. Con entradas validas, algunas de las transiciones del autómata no se usarían tras resolver los conflictos. Indica la respuesta correcta. No se usaría la transición de I0 a I3. Desde I5 no se usarían las transiciones que llegan a I2 e I3. No se usaría la transición que llega a I2 desde él mismo. Dada la colección LR(0) anterior, considera la entrada 10$. Marca la respuesta correcta: Al terminar de reconocer la entrada se encontraría en el estado I1. Al terminar de reconocer la entrada se encontraría en el estado I3. El autómata no usaría en ningún caso el estado I5. Supongamos que se tiene una gramática G que es LALR. Indica la respuesta correcta: La tabla SLR de G puede tener mas acciones de desplazamiento que la LALR. La tabla SLR de G puede tener menos estados que la LALR. La tabla SLR de G puede tener conflictos reduce/reduce. Supongamos la siguiente implementación de un analizador sintáctico con Bison para la gramática de expresiones lógicas, que se combina con el analizador léxico anterior: %{ #include <stdio.h> extern int yylineno; extern int yylex(); extern int yyparse(); extern int contador_errores; void yyerror(const char *msg); %} %union { int ent; } %token AND OR PYC %token <ent> VAL %type <ent> predicado %left OR %left AND %% entrada : predicado PYC ; { if (contador_errores == 0) printf("Valor: %d\n", $1); } predicado : predicado AND predicado { $$ = $1 && $3; } | predicado OR predicado { $$ = $1 || $3; } | VAL { $$ = $1; } ; %% void yyerror(const char *msg) { printf("Error sintactico en linea %d: %s\n", yylineno, msg); } int main(int argc, char **argv) { yyparse(); } Supongamos la entrada true && false || true; . Indica la respuesta verdadera: Primero se evaluaría el operador && y luego el operador ||. Primero se evaluaría el operador || y luego el operador &&. Habría un conflicto desplaza/reduce sin resolver. M[9,∩] = r1 ; M[9,∪] = r1 ; M[10,∪] = d5 ; M[10,∩] = r2 ; M[14,,] = r5. M[9,∩] = r1 ; M[9,∪] = r1 ; M[10,∪] = r2 ; M[10,∩] = r2 ; M[14,,] = r5. M[9,∩] = d5 ; M[9,∪] = r1 ; M[10,∪] = r2 ; M[10,∩] = r2 ; M[14,,] = r5. Dada la siguiente gramática G, con VT = {a,b,x,y} y VN = {S,A,B,C}, y P: S → aABC A → x|λ B → b C → y|λ respecto a la simulación descendente predictiva, señalar la afirmación incorrecta: Si en la pila de análisis aparece $CBA y en la entrada b$, en el siguiente paso de cálculo, la pila contendría $CB y la entrada b$. Si en la pila de análisis aparece $CBA y en la entrada yb$, en el siguiente paso de cálculo, la pila contendría $CB y la entrada b$. Si en la pila de análisis aparece $CBA y en la entrada yb$, en el siguiente paso de cálculo, la pila contendría $CBA y la entrada b$. G es LL, LALR y LR-Canónica. G es SLR, LALR, LR-Canónica. G es LALR y LR-Canónica, pero no SLR. Dada la gramática G de la pregunta anterior, y con respecto a la simulación LR: Si el contenido de la pila de un analizador LR es 0s2(3A4,8B9 y el de la entrada ,b)$, la siguiente configuración tendrá en la pila 0s2(3A4 y en la entrada b)$. Si el contenido de la pila de un analizador LR es 0s2(3A4,8B9 y el de la entrada (b)$, la siguiente configuración tendrá en la pila 0s2(3A4,8B9 y en la entrada )$. Si el contenido de la pila de un analizador LR es 0s2(3A4,8b6 y el de la entrada ,b)$, la siguiente configuración tendrá en la pila 0s2(3A4,8B9 y en la entrada b)$. En la tabla de símbolos de un compilador: Podrán almacenarse los lexemas asociados a ciertos tokens para comprobar su uso correcto a lo largo del programa. Solo se almacenaran los códigos de los tokens, puesto que es una estructura de datos que debe gestionarse de forma e cliente. Nunca será necesario almacenar información acerca de los tipos de constantes y variables. Determinar cuales de los siguientes fragmentos de un chero Bison podra formar parte de un traductor de expresiones aritméticas infijas a expresiones postfijas: %{ int recuperaValorEnTS(char*); %} % union { char * cadena; int numero; } % token MAS % token <cadena> ID % token <numero> INT % type <cadena> expresion expresion : expresion MAS expresion {printf("%d %d +\n", $1,$3); } | ID {$$=recuperaValorEnTS($1);} | INT {$$ = atoi($1);} ;. % union { char * cadena; } % token MAS % token <cadena> ID INT % type <cadena> expresion expresion : expresion MAS expresion {printf("%s %s +\n", $1,$3); } | ID {$$ = $1;} | INT {$$ = $1;} ;. %{ int recuperaValorEnTS(char*); %} % union { char * cadena; int numero; } % token MAS % token <cadena> ID % token <numero> INT % type <numero> expresion expresion : expresion expresion MAS {$$ = $1 + $2;} | ID {$$=recuperaValorEnTS($1);} | INT {$$= $1;} ;. Considérese la siguiente gramática, recursiva por la izquierda: X -> Yx | a Y -> Xy | b ¿Cuál de las siguientes gramáticas es el resultado de eliminar correctamente la recursividad?. X -> Yx |a Y ->xy| xyY' Y'-> ay| b | ayY '| bY'. X -> Yx |a Y -> ay| b | ayY'| bY' Y-> xy| xyY'. X ->xY |a Y -> y |Xb. La gramática es propia, a pesar de ser recursiva por la izquierda. La gramática es LL(1), aunque no es propia. La gramática es recursiva por la izquierda, no es propia y no es SLR(1). La gramática es LL. La gramática es SLR. La gramática no es SLR. G es SLR. G es LR-Canónica. G no es ni LR-Canónica ni SLR. Dada la siguiente gramatica G con VT = ab y VN = AB , siendo P: el conjunto I0 de la coleccion LR(1) es: A ->B A |a B ->A B| b. [A A$] [A BA $] [A a $] [B AB ab] [B b ab]. [A A$] [A BA $b] [A a $b] [B AB a] [B b a]. [A A$] [A BA $ab] [A a $ab] [B AB ab] [B b ab]. Elegir los desplazamientos en las casillas [11 ] y [11 ] y las reducciones en [11+] y [11 ]. Elegir la reducción en la casilla [11 ] y desplazamientos en [11 ], [11+] y [11 ]. Elegir las reducciones en todos los casos. |