Hola chicos, quiero ver si me pueden ayudar con el primer ejercicio practico de este final, que dice asi:
Supongamos que el siguiente flujo de caracteres, que comienza con espacios y termina con espacios, forma parte de un programa ANSI C:
begin+==p=" '\01\n "*q0XAFint;until(e)2.16E-8++
Si un Scanner realiza el Análisis Léxico de este flujo, indique la cantidad mínima de invaciones a ungetc que debe hacer y la cantidad de lexemas que detecta.
Mi duda es acerca de las invocaciones a la función ungetc, según la respuesta son 9.
Yo la verdad es que tengo mis dudas acerca de esto porque pienso que hay mas de nueve identificadores u operadores que necesitan centinela:
1. begin
2. +
3.=
4. =
5. p
6. =
7. q0XAFint
8. until
9. e
10. 2.16E-8 ( acá no se si esa E necesita de un centinela )
11. +
12. +
tmb dudo si la cantidad minima no requiere que vuelva a contar yo cada vez que aparece un + para invocarlo a la funcion ungetc.
si alguien me puede ayudar se agradece!
saludos
CREO, que el + del principio no necesita un centinela, ya que += es una palabra, al igual que el "++" del final de todo.
No me des bola si no te parece asi, hace dos años que no toco nada de Sintaxis, menos con el plan nuevo
Pregunto: Centinela == 'Caracter espureo', no?
Cita:Centinela == 'Caracter espureo',
ajam.
agustin, te falto el ";" y los parentesis (son palabras tambien, en el tokens de CaracteresPuntuacion me parece )
Hola. Te indico en rojo los 9 caracteres que funcionan como centinelas.
Pensá por qué son centinelas. Si tenés alguna duda preguntame.
begin+==p=" '\01\n "*q0XAFint;until(e)2.16E-8++
La cantidad de lexemas:
1. begin
2. +=
3. =
4. p
5. =
6 " '\01\n "
7. *
8. q0XAFint
9. ;
10. until
11. (
12. e
13. )
14. 2.16E-8
15. ++
pero..
el += es un operador
vendria a ser
1. begin
2. +=
3. =
4. p
5. =
y asi..
los 2 iguales solos son de asignacion
(06-02-2011 18:47)gonnza escribió: [ -> ]pero..
el += es un operador
vendria a ser
1. begin
2. +=
3. =
4. p
5. =
y asi..
los 2 iguales solos son de asignacion
Tenés razón.
En ese caso, la primera "p" es centinela del = que está antes de ella.
Ahí modifico lo primero así no hay confusión.
(06-02-2011 18:43)Maxter escribió: [ -> ]Hola. Te indico en rojo los 9 caracteres que funcionan como centinelas.
Pensá por qué son centinelas. Si tenés alguna duda preguntame.
begin+==p=" '\01\n "*q0XAFint;until(e)2.16E-8++
La cantidad de lexemas:
1. begin
2. +=
3. =
4. p
5. =
6 " '\01\n "
7. *
8. q0XAFint
9. ;
10. until
11. (
12. e
13. )
14. 2.16E-8
15. ++
a ver si entiendo bien, lo que marcaste en rojo son los centinelas que necesitan en estos casos lexemas como el: begin, = , p , = , * , q0XAF , until , e , 2.16E-8 . esto es asi ??
porque marcaste a la letra 'q' del identificador q0AXF como centinela de '*' ? porque el caracter '*' necesita un centinela ??
muchas gracias !!
(06-02-2011 21:08)AGUSTIN27 escribió: [ -> ]a ver si entiendo bien, lo que marcaste en rojo son los centinelas que necesitan en estos casos lexemas como el: begin, = , p , = , * , q0XAF , until , e , 2.16E-8 . esto es asi ??
Exacto.
El + es centinela de begin.
La p es centinela de ==
El = es centinela del lexema p
La " es centinela del lexema =
Y asi...
Cita:porque marcaste a la letra 'q' del identificador q0AXF como centinela de '*' ? porque el caracter '*' necesita un centinela ??
Porque acordate que tambien existe el operador *=
El scaner lee el * y no puede asegurar nada, necesita del centinela.
Si despues del * hubiese venido el = listo ya no se necesita centinela, se detecto el lexema *=, pero como en cambio apareció una q, ésta es centinela del lexema *.
joya, jamás supe que existía el operador *= .. que significa ????
(06-02-2011 22:39)Maxter escribió: [ -> ] (06-02-2011 21:08)AGUSTIN27 escribió: [ -> ]a ver si entiendo bien, lo que marcaste en rojo son los centinelas que necesitan en estos casos lexemas como el: begin, = , p , = , * , q0XAF , until , e , 2.16E-8 . esto es asi ??
Exacto.
El + es centinela de begin.
La p es centinela de ==
El = es centinela del lexema p
La " es centinela del lexema =
Y asi...
Cita:porque marcaste a la letra 'q' del identificador q0AXF como centinela de '*' ? porque el caracter '*' necesita un centinela ??
Porque acordate que tambien existe el operador *=
El scaner lee el * y no puede asegurar nada, necesita del centinela.
Si despues del * hubiese venido el = listo ya no se necesita centinela, se detecto el lexema *=, pero como en cambio apareció una q, ésta es centinela del lexema *.
(07-02-2011 12:25)AGUSTIN27 escribió: [ -> ]joya, jamás supe que existía el operador *= .. que significa ????
Es un operador de asignación .
Por ejemplo:
valor*=2; Equivale a: valor=valor*2;