Buenas gente, mientras estuve haciendo finales surgieron dudas de los que hablan sobre ungetc, dejo fragmentos de los enunciados (con link) y mi planteo + duda
tengo algunos otros ejercicios con más dudas jaja, pero dejo estos mientras tanto que quizás también pueda ayudar a otros
Gracias
Parcial 2018-12-17 Link
Problema
Analice la siguiente expresión:
a[i]=f(i)
Indique por lo menos tres tokens que no requieran ungetc para su detección
Resolución dice que son: [, ], (, )
Mi planteo + Duda
El scanner entiendo que haría la lectura de la siguiente manera..
1. a <- getchar (se lee una vez, idem con los otros 3,5,..)
2. [ <- ungetc porque [ no es identificador, por tanto 2 getchar (se lee dos veces)
3. i <- getchar
4. ] <- ungetc porque ] no es identificador, por tanto 2 getchar (se lee dos veces)
5. = <- getchar
6. f <- ungetc porque f no es operador, por tanto 2 getchar (se lee dos veces)
7. ( <- ungetc porque ( no es identificador, por tanto 2 getchar (se lee dos veces)
8. i <- getchar
9. ) <- ungetc porque ) no es identificador, por tanto 2 getchar (se lee dos veces)
No entiendo por que dice que los corchetes por ejemplo no necesitarían ungetc
Parcial 2020-02-12 Link
Problema
1. Indique cuántas invocaciones a ~ungetc~ son necesarias para *analizar léxicamente* el cuerpo de la función
2. Indique cuantas invocaciones a ~getchar~ son necesarias para detectar el *lexema* ~42~
int f(int x){
if(0)return 1;
return 42;
}
Mi planteo + Duda
1. if <- dos getchar, (dos lecturas)
2. ( <- ungetc porque ( no es identificador, por tanto 2 getchar
3. 0 <- getchar
4. ) <- ungetc porque ) no es identificador, por tanto 2 getchar
5. return <- 6 getchar (6 lecturas)
6. 1 <- ungetc porque 1 no es identificador, por tanto 2 getchar
7. ; <- ungetc porque ; no es constante real, por tanto 2 getchar
8. return <- 6 getchar
9. 4 <- ungetc porque 4 no es identificador, por tanto 2 getchar
10. 2 <- getchar
11. ; <- ungetc porque ; no es constante real, por tanto 2 getchar
La cantidad de ungetc coincide con la resolución, mi duda es si está bien analizado
Parcial 2020-03-03 Link
Enunciado
Dado el fragmento: 0xF+F0x+0L+L0
1. Indique cuantas invocaciones a getchar se necesitan para su análisis:
2. Indique cuantas invocaciones a ungetc se necesitan para su análisis:
Mi planteo + Duda
Cant. de llamadas a getchar: 19
Cant. de llamadas a ungetc: 6
1. 0xF <- 3 llamadas a getchar (3 lecturas, una por cada caracter)
2. + <- ungetc porque el + no es una constante entera, por tanto son 2 getchar (la primera lectura, y una nueva)
3. F0x <- ungetc porque F no es un operador, por tanto 2 getchar + 2 getchar (por los caracteres 0x)
4. + <- ungetc porque + no es un identificador, por tanto 2 getchar (la primera vez que lo leyó, más una nueva)
5. 0L <- ungetc porque 0 no es un operador, por tanto 2 getchar + 1 getchar (por la L)
6. + <- ungetc porque + no es una constante entera, por tanto 2 getchar
7. L0 <- ungetc porque L no es un operador, por tanto 2 getchar + 1getchar (por el 0)
Mi duda esta en que me da 1 llamada menos a getchar y ungetc, será por el EOF? ó que me olvidé?