Beruflich Dokumente
Kultur Dokumente
Muchnik
6 EJERCICIOS RESUELTOS
(Agradezco la colaboracin de la Prof. Ana Daz Bott) CAP. 1: INTRODUCCIN A AFs Y APLICACIONES * Ejercicio 1 * (pg.7)
(a) SI (b) NO (a) SI (b) SI
* Ejercicio 2 * (pg.7)
* Ejercicio 3 * (pg.10)
(a) T 01+ 2 3+ a 1 3 b 2 -
(b) palabra aba: 0- => a => 1 => b => 2 => a => 3+ RECONOCE palabra a: 0- => a => 1+ RECONOCE cadena abab: 0- => a => 1 => b => 2 => a => 3 => b => ?? RECHAZA (no puede continuar) cadena baa: 0- => b => ?? RECHAZA (no puede continuar) cadena vaca: 0- => => ?? RECHAZA (el estado inicial no es final) cadena ab: 0- => a => 1 => b => 2 RECHAZA (el estado 2 no es final)
* Ejercicio 4 * (pg.11)
ER = 01 + 10 (a)
* Ejercicio 5 * (pg.13)
T a 0- 0 1 2 2+ b 1 1 -
ba: 0- => b => 1 => a => 2+ RECONOCE abba: 0- => a => 0 => b => 1 => b => 1 => a => 2+ RECONOCE aaba: 0- => a => 0 => a => 0 => b => 1 => a => 2+ RECONOCE aabba: 0- => a => 0 => a => 0 => b => 1 => b => 1 => a => 2+ RECONOCE cadena a: 0- => a => 0 => ?? RECHAZA (el estado incial no es final) cadena ab: 0- => a => 0 => b => ?? RECHAZA (el estado 1 no es final)
* Ejercicio 7 * (pg.14)
(a) T a b c d 0-+ 0 0 0 0 (b) palabra a: 0- => a => 0+ RECONOCE palabra bcda: 0- => b => 0 => c => 0 => d => 0 => a => 0+ RECONOCE palabra ccc: 0- => c => 0 => c => 0 => c => 0+ RECONOCE palabra vaca: 0- => => 0+ RECONOCE
SSL
Muchnik
* Ejercicio 12 * (pg.18)
DF = ({0, 1, 2, 3}, {a, b,c}, TT, 0, {3}) TT a b c 01 1 1 1 2 2 2 2 3 3 3 3+ 3 3 3 donde la TT es:
* Ejercicio 13 * (pg.20)
(a) DF = ({0,1,2,3}, {a,b,c}, TT, 0, {2,3}) TT a b c 01 4 4 1 4 3 2 2+ 4 4 4 3+ 3 4 4 4 4 4 4 (b) ER = ac + aba* (c) Describa las actividades de este AFD para todos los casos posibles.
* Ejercicio 14 * (pg.21)
(a) Sea: S= {+, -} D = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} O = {ASCII (S, D)} TT S D O 01 2 3 1 3 2 3 2+ 3 2 3 3 3 3 3 (b) Recorra el Algoritmo 1 para la cadena 1234;
* Ejercicio 18 * (pg.22)
-123,01234567,+1234123 Son palabras porque son una secuencia de caracteres que reoresentan los nmeros enteros con y sin signo.
* Ejercicio 19 * (pg.23)
No. Porque tienen un significado diferente. fdt marca el fin del texto y # marca el fin de cada cadena que debe ser procesada.
SSL
Muchnik
* Ejercicio 4 *
(pg.28)
El significa que el AFP, estando en el estado 4 y no ley ningn carcter, hace un pop del smbolo Z y pasa al estado 5 haciendo un push, primero de P y luego de R, quedando este ltimo smbolo como nuevo tope de la pila.
* Ejercicio 5 * (pg.28)
Reconocer por fin de la cadena significa que cuando detecta el fdc y la pila est vaca, transita al estado final. Reconocer por pila vaca significa que el conjunto de estados finales es vaco.
* Ejercicio 6 * (pg.28)
S.
(pg.30)
(E, A, A', T, e0, p0, F), donde: e2, e3} fdc para indicar el final de la cadena.
a e1,R$ e1,RR
b e2, e2,
fdc
e3,$
* Ejercicio 10 * (pg.30)
a) e0,$ e1,R e1,R e1,R => => => => a a a b => => => => e1,R$ e1,RR e1,RR e2,
SSL
Muchnik
e2,R => b => e2, e2,R => b => e2, e2,$ => fdc => e3,$ RECONOCE b) e0,$ => a => e1,R$ e1,R => a => e1,RR e1,R => b => e2, e2,R => b => e2, e2,$ => b => ?? (la pila est vaca, ley una b y no tiene, en el tope de la pila, un smbolo R para sacar => RECHAZA
* Ejercicio 12 * (pg.31)
La 7-upla M = (E, A, A', T, e0, p0, F), donde: E = {e0, e1, e2} A = {a,b} y fdc para indicar el final de la cadena. A' = {R,$} e0 p0 = $ F = { } T es: TM a b fdc e0,$ | e1,R$ e1,R | e1,RR e2, e2,R | e2, e2,$ | e2,
* Ejercicio 13 * (pg.31)
a) e0,$ => a => e1,R$ e1,R => a => e1,RR e1,R => a => e1,RR e1,R => b => e2, e2,R => b => e2, e2,R => b => e2, e2,$ => fdc => e2, RECONOCE b) e0,$ => a => e1,R$ e1,R => a => e1,RR e1,R => b => e2, e2,R => b => e2, e2,$ => b => e2, ?? en la pila se hace un pop, por lo tanto, la pila no tiene ningn smbolo, se lee una b, sigue en el estado e2 pero no tiene smbolo para hacer otro pop => RECHAZA
* Ejercicio 15 *
La 7-upla M = (E, A, A', T, e0, p0, F), donde: E = {e0, e1, e2, e3} A = {a,b} y fdc para indicar el final de la cadena. A' = {R,$} e0 p0 = $ F = {e3} T es:
(pg.31)
SSL
Muchnik
a | e1,R$ | e1,RR | |
b e2,R e2,
fdc
e3,$
* Ejercicio 16 * (pg.31)
La 7-upla M = (E, A, A', T, e0, p0, F), donde: E = {e0, e1, e2, e3, e4} A = {a,b} y fdc para indicar el final de la cadena. A' = {R,$} e0 p0 = $ F = {e4} T es: TM a b fdc e0,$ | e1,$ e1,$ | e2,R$ e2,R | e2,RR e3, e3,R | e3, e3,$ | e4,$ La 7-upla M = (E, A, A', T, e0, p0, F), donde: E = {e0, e1, e2, e3, e4, e5} A = {a,b} y fdc para indicar el final de la cadena. A' = {R,$} e0 p0 = $ F = {e5 } T es: TM a b fdc e0,$ | e1,R$ e1,R | e1,RR e2,R e2,R | e3, e3,R | e2,R e3,$ | e4,$ e5,$ e4,$ | e4,$ e5,$ La 7-upla M = (E, A, A', T, e0, p0, F), donde: E = {e0, e1, e2} A = {a,b} y fdc para indicar el final de la cadena. A' = {R,Z,$} e0 p0 = $ F = {e2 } T es: TM a b fdc e0,$ | e1,R$ e1,Z$ e1,R | e1,RR e1, e1,Z | e1, e1,ZZ e1,$ | e1,R$ e1,Z$ e2,$
* Ejercicio 17 * (pg.31)
* Ejercicio 18 * (pg.31)
SSL
Muchnik
* Ejercicio 19 * (pg.32)
(Ejemplo 6) La 7-upla M = (E, A, A', T, e0, p0, F), donde: E = {e0, e1, e2, e3} A = {4,+, *, (, )} y fdc para indicar el final de la cadena. A' = {R,$} e0 p0 = $ F = {e3 } T es: _TM______ 4 e0,$ | e1,$ e0,R | e1,R e1,$ | e1,$ e1,R | e1,R e2,$ | e2,R | e3,$ | a) +,* e0,$ e0,R e0,$ e0,R ( e0,R$ e0,RR ) fdc e3,$ e2, e2, e3,$
* Ejercicio 20 * (pg.32)
b) c) d)
e0,$ => ( => e0,R$ e0,R => ( => e0,RR e0,R => 4 => e1,R e1,R => ) => e2, e2,R => ) => e2, e2,$ => fdt => e3,$ RECONOCE 4 + 4 4 + 4 * (4 + (4)) e0,$ => 4 => e1,$ e1,$ => + => e0,$ e0,$ => ( => e0, R$ e0, R => ( => e0,RR e0,R => 4 => e1,R e1,R => ) => e2, e2,R => ) => e2, e2,$ => ) => ?? se lee un ), sigue en el estado e2 , la pila est vaca, por lo tanto no tiene smbolo para hacer un pop => RECHAZA
* Ejercicio 21 * (pg.32)
Porque el lenguaje de las expresiones es un LF Infinito No Regular y, por lo tanto, no es posible encontrar una GR que permita describir a este lenguaje.
SSL
Muchnik
* Ejercicio 3 * (pg.33)
Qu realicen la misma tarea.
* Ejercicio 4 * (pg.34)
LEXEMA int WHILE ; while ( WHILE ; > ( 32 ) ) 2.46 ; TOKEN palabraReservada Identificador caracterPuntuacion palabraReservada carcterPuntuacin Identificador carcterPuntuacin operador carcterPuntuacin constante carcterPuntuacin carcterPuntuacin operador constante carcterPuntuacin
* Ejercicio 6 *
Desde la visin del programador, hay dos errores sintcticos: la doble declaracin de la variable a(como int y como double) y el return 12 porque la funcin es void.
(pg.34)
* Ejercicio 7 *
Son tokens.
* Ejercicio 8 * * Ejercicio 9 *
La doble declaracin de la variable a y el return 12. El alcance de una variable est dado por el contexto en el cual tiene validez. (por ejemplo: una variable local a una funcin, su alcance est limitado a la funcin, es decir, fuera de ella no existe).
* Ejercicio 10 *
a) Expresin es infija por ejemplo, cuando un operador es binario debe estar entre dos operandos. b) ID es un noterminal. c) fin es una palabra reservada; Fin y finn son identificadores.
(pg.37)
SSL
Muchnik
d) Significa que no hay que declarar a los identificadores porque son del nico tipo de dato entero y tienen todos una longitud igual a 323 caracteres.
* Ejercicio 11 *
(pg.37)
LEXEMA inicio leer ( a , b ) ; cc := a + ( b 2 ) ; escribir ( cc , a + 4 ) ; fin TOKEN palabraReservada palabraReservada carcterPuntuacin identificador carcterPuntuacin identificador carcterPuntuacin carcterPuntuacin identificador asignacin identificador operador carcterPuntuacin identificador operador constante carcterPuntuacin carcterPuntuacin palabraReservada carcterPuntuacin identificador carcterPuntuacin identificador operador constante carcterPuntuacin carcterPuntuacin palabraReservada
* Ejercicio 12 *
(pg.38)
a) conjunto de noterminales: <token>, <identificador>, <constante>, <palabraReservada>, <operadorAditivo>, <asignacin>, <carcterPuntuacin>, <identificador>, <letra>, <dgito>, <constante>. conjunto de terminales: a-z A-Z 0-9 inicio fin leer escribir + -:= ( ) , ; conjunto de metasmbolos: < > -> uno de { } o una de b) Se produce un error lxico.
* Ejercicio 13 *
a)
conjunto de noterminales: <programa>, <listaSentencias>, <sentencia>, <identificador>, <expresin>, <listaIdentificadores>, <listaExpresiones>, <primaria>, <operadorAditivo>, <constante> conjunto de terminales: inicio fin leer escribir := ; , ( ) conjunto de metasmbolos: < > -> { } |
(pg.38)
SSL
Muchnik
b)
inicio leer (x,y); escribir (x-9, y +x); fin d) Los smbolos := No representan a un operador porque no pertenece al token asignacin.
* Ejercicio 14 *
(pg.40)
a) una mquina virtual es una mquina que representa lo que hace una computadora y tiene su propio lenguaje de mquina. b) en tiempo de compilacin: durante el proceso de compilacin. c) en tiempo de ejecucin: durante la ejecucin del programa ejecutable. d) se compila el programa fuente. e) se ejecuta el programa objeto escrito en lenguaje de mquina. f) S. Son equivalentes el programa que se compila y el programa que se ejecuta.
* Ejercicio 15 * * Ejercicio 16 *
(pg.40) (pg.40)
4 caracteres que puedan actuar como centinelas para un identificador en Micro: - + : , *Ejercicio 18* (pg.41) Porque no pertenece al alfabeto (la gramtica se construye sobre un alfabeto).
* Ejercicio 19 *
abc identificador
* error lxico
(pg.41) (pg.41)
ab
identificador
* Ejercicio 20 *
a) los ignora b) forman parte del literalCadena c) ' ' '\n' son constantes carcter.
* Ejercicio 21 *
a) contenido que queda en la Tabla de Smbolos una vez que el Anlisis Lxico haya finalizado: inicio PR fin PR leer PR escribir PR a ID b ID b) Se fija en la TS.
(pg.42)
* Ejercicio 28 *
(pg.47)
SSL
Muchnik
(1) <objetivo> (2) <programa> (29) FDT (3) INICIO (4) <listaSentencias> (28) FIN (12) <sentencia>
(5) <sentencia>
(6) ID (7) ASIGNACION (8) <expresin> (11) PUNTOYCOMA
(9) <primaria>
(13) ESCRIBIR (14) PARENIZQUIERDO (15) <listaExpresiones> (26)PARENDERECHO(27) PUNTOYCOMA
* Ejercicio 29 *
void Programa (void) { /* <programa> -> INICIO <lista Sentencias> FIN */ Match(INICIO); ListaSentencias(); Match(FIN); }
(pg.47)
* Ejercicio 34 * * Ejercicio 35 *
(pg.50) (pg.50)
a) inicio escribir(4); fin b) Objetivo() Programa() ListaSentencias() Sentencia() ListaExpresiones() Expresion() Primaria()
* Ejercicio 40 *
(pg.54)
SSL
Muchnik
En la sentencia: significa que en lo apuntado por resultado (*resultado) guarde el contenido de la variable operandoIzq. Aqu el asterisco corresponde al operador indireccin.
* Ejercicios Adicionales *
(pg.49)
void ListaExpresiones(void) { /* <listaExpresiones> -> <expresin> {COMA <expresin> } */ Expresion(); /* la primera de la lista de expresiones */ while(1) { /* un ciclo indefinido */ switch(ProximoToken()) { case COMA: Match(COMA); Expresion(); /* procesa la secuencia opcional */ default: return; } /* fin-switch */ } /* fin-while */ } void Primaria(void) { /* <primaria> -> ID | CONSTANTE | PARENIZQUIERDO <expresin> PARENDERECHO */ TOKEN tok = ProximoToken(); switch(tok) { case ID: Match(ID); break; case CONSTANTE: Match(CONSTANTE); break; case PARENIZQUIERDO: Match(PARENIZQUIERDO); Expresion(); Match(PARENDERECHO); break; default: ErrorSintactico(tok); break; } /* fin-switch */ } void ListaIdentificadores (void) { /* <listaIdentificadores> -> <identificador> {, <identificador>} */ Match(ID); while (ProximoToken() == COMA) { Match(COMA); Match(ID); } }
SSL
Muchnik
Ejercicio 2 *
(pg.58) (pg.58)
* Ejercicio 3 *
a) b) c) d) a) b) c) d) e) f) g) h) V F F V
* Ejercicio 4 *
SI NO SI SI SI NO SI NO
(pg.58)
* Ejercicio 5 *
El de ANSI C.
(pg.59) (pg.59)
* Ejercicio 6 *
El Scanner lee el primer carcter que es una / (barra), lee el sengundo carcter, si es una barra, entonces lee el tercer carcter, si este ltimo es el smbolo +, entonces detecta el operador //+ y no necesita leer un prximo carcter; en caso de ser cualquier otro carcter, detecta el operador // y si despus de leer el primer carcter (barra), el segundo es cualquier otro carcter, entonces detecta el operador /.
* Ejercicio 7 * * Ejercicio 8 *
(pg.59) (pg.60)
a) En el primer caso, el Scanner retorna el tipo de constante numrica y la posicin de esa constante guardada como secuencia de caracteres (sin convertir); en cambio, en el 2 caso, el Scanner debe realizar una conversin de la secuencia de caracteres que representan a la constante entera a su valor numrico y entonces retorna el tipo de constante numrica y el valor de la constante. b) por enumeracin o con un nmero entero.
SSL
Muchnik
* Ejercicio 9 * * Ejercicio 10 *
S. S.
* Ejercicio 11 * * Ejercicio 12 *
a) typedef PR, char PR, strings ID, [ CP (carcterpuntuacin), 200 CONSTANTE, ] CP, [ CP, 32 CONSTANTE, ] CP, ; CP b) (strings, nombredetipo, arreglo, 2, char, 200, 32) Aclaracin: nombredetipo ser un valor que indique que strings no es el nombre de una variable sino el nombre de un tipo de dato.
* Ejercicio 13 * * Ejercicio 14 *
a) b) c) d) e)
(pg.61) (pg.62)
const. * 60
En literalCadena y como carcter constante. noterminales: inst. asignacin identif. expr. terminales: posicion = inicial + velocidad axioma falta el ; (punto y coma) posicion = inicial + velocidad * 60; inst. asignacin identif. = expr. ; posicion = expr. ; posicion = expr. + expr. ; posicion = identif. + expr. ; posicion = inicial + expr. ; posicion = inicial + expr. * expr. ; posicion = inicial + identif. * expr. ; posicion = inicial + velocidad * expr. ; posicion = inicial + velocidad * const. ; posicion = inicial + identif. * 60;
* Ejercicio 17 *
NO.
(pg.66) (pg.66)
* Ejercicio 18 *
En Pascal: variable no declarada, variable declarada con dos tipos distintos.. En ANSI C: funcin no definida, cuando en el lado izquierdo de una asignacin aparece un valor constante (ejemplos: 1 = 3; 4++;).
* Ejercicio 19 *
(pg.66)
trmino factor
* Ejercicio 20 *
(pg.68)
|
aTbc
SSL
Muchnik
* Ejercicio 21 *
(pg.69)
es
* Ejercicio 22 *
S -> aTbS S -> Rba | c T -> a | Ta R -> cR R -> | Rb
(pg.69)
* Ejercicio 23 *
(pg.70)
* Ejercicio 24 *
(pg.70)
GIC 2: listaExpresiones: expresin listaExpresiones listaExpresiones: | ; expresin listaExpresiones expresin: trmino expresin expresin: | + trmino expresin trmino: factor trmino trmino: | * factor trmino factor: num | ( expresin )
* Ejercicio 25 *
(pg.71)
U U U U U U Primero(B) Primero(bBe) U Primero(C) {b} U Primero(cCe) U {c} U Primero(C) Primero(cCe) U Primero(d) {c} U {d} Primero(d) {d} Primero(d) {d}
Primero(S) = Primero (aSe) {a} Primero(B) = Primero(bBe) {b} Primero(C) = Primero(cCe) {c}
* Ejercicio 26 *
Primero(S) = Primero(ABc) como A es un noterminal, por (2), entonces hay que calcular los conjuntos Primero para cada lado derecho de A: A -> a| esto implica que Primero(a) = {a} U Primero() = {} pero como A puede generar , por (3), entonces Primero(S) depende de B (X2) y como B es un noterminal, por (2), hay que calcular los conjuntos Primero para cada lado derecho de B: B -> b| esto implica que Primero(b) = {b} U Primero() = {} pero como B puede generar por (3), entonces Primero(S) depende de c, y como c es un terminal, por (1), Primero(c) = {c}. Por lo tanto: Primero(S) = {a,b,c}
(pg.71)
SSL
Muchnik
* Ejercicio 27 * (pg.72) b) Porque no est descripto en la GIC. c) Porque no existe. * Ejercicio 28 * (pg.73)
Predice (E1 -> T1 E2) = Primero(T1 E2) = {(, num} porque no contiene a y, por lo tanto, Predice coincide con Primero(T1 E2).
* Ejercicio 29 *
Dos.
(pg.74) (pg.76)
* Ejercicio 31 *
a) noterminales: listaParntesis, plista terminales: ( ) b) listaParntesis plista ( listaParntesis ) ( plista ) ( ) ( ) c) listaParntesis plista ( listaParntesis ) ( plista listaParntesis ) ( ( listaParntesis ) listaParntesis ) ( ( plista) listaParntesis )
* Ejercicio 33 * (pg.78)
1) no es recursiva a izquierda; 2) no tiene prefijo comn.
* Ejercicio 37 *
(pg.83)
a) Detecta cada lexema y retorna el token correspondiente, en la medida que el Parser se lo solicita. b) Realiza el Anlisis Sintctico de la expresin en base a la GIC. c) Detecta que la primera constante es entera (int) y que la segunda constante es real (double), y realiza la conversin a double para poder hacer la operacin de suma.
* Ejercicio 38 *
(pg.84)
a) Anlisis Lxico: Detecta cada lexema y retorna el token correspondiente, en la medida que el Parser se lo solicita. No hay errores lxicos. b) Anlisis Sintctico: Analiza sintcticamente el bloque y no detecta errores sintcticos. c) Anlisis Semntico: 1) detecta que la variable a es entera (int); 2) detecta que el valor constante 2 no es un valorL en la sentencia de asignacin deteccin del 1er. error; 3) detecta que despus de la sentencia de asignacin hay una declaracin de la variable b como real (double) y que la misma est fuera de lugar -detecta el 2 error; 4) detecta que la variable b, en la sentencia de asignacin, es un valorL (correcto) y que en la expresin 4++, 4 es un valor constante y se le aplica el operador incremento -detecta el 3er. error porque el operando debe ser un valorL.
SSL
Muchnik
* Ejercicio 39 *
(pg.84)
a) Anlisis Lxico: Detecta cada lexema y retorna el token correspondiente, en la medida que el Parser se lo solicita. No hay errores lxicos. b) Anlisis Sintctico: Analiza sintcticamente el bloque y no detecta errores sintcticos. c) Anlisis Semntico: Detecta que las variables a y b son enteras (int) y que c es una variable real (double); realiza la conversin correspondiente a double para poder hacer la operacin de suma, luego quedar el resultado truncado (porque la suma se realiza double pero el resultado es int).