UTNianos

Versión completa: [SINTAXIS] Duda final 20.12.10
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
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 =P

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 =P
vendria a ser

1. begin
2. +=
3. =
4. p
5. =

y asi..

los 2 iguales solos son de asignacion =P
(06-02-2011 18:47)gonnza escribió: [ -> ]pero..

el += es un operador =P
vendria a ser

1. begin
2. +=
3. =
4. p
5. =

y asi..

los 2 iguales solos son de asignacion =P


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;
URLs de referencia