Algunas preguntas sobre el TAD lexema

Algunas preguntas sobre el TAD lexema

de Amalia Lucia Balestrazzi Silveira -
Número de respuestas: 1

Buenas,

Viendo el video de resolución del ejercicio 7 sobre notaciones me quedaron algunas dudas del TAD lexema.

Por un lado, no me quedan claras las operaciones  crearLexema. Por ejemplo, según la especificación que se presenta, crearLexemaNumero parece no tomar ninguna entrada y devolver un lexema. ¿No debería tomar un número de entrada? Lo mismo para crearLexemaOperador y crearLexemaDelimitador. Capaz estoy entendiendo mal esas operaciones.

Por otro lado, si bien me queda claro cómo el TAD facilita las operaciones in2pos y evalPosfija al no tener que trabajar con chars, ¿no agrega una dificultad similar al tener que "transformar" la expresión infija de entrada de chars a cola de lexemas?

Por último, quería saber si la siguiente implementación tiene sentido para el TAD lexemas:

typedef int Numero;
typedef char Operador;
typedef char Delimitador;

union Expresion {
Numero val;
Operador op;
Delimitador delim;
};

enum TipoExpr {esNum, esOp, esDelim};
struct TLexema {
Expresion exp;
TipoExpr tipo;
};

typedef TLexema * Lexema;

Gracias!

En respuesta a Amalia Lucia Balestrazzi Silveira

Re: Algunas preguntas sobre el TAD lexema

de Fernando Fernandez -
Sí, falta el parámetro en los crearLexema.
La implementación que proponés me parece correcta.

Lo de los lexema es solo para abstraernos del procesamiento de strings y poder enfocarnos en las operaciones de Pila. En este ejemplo muy sencillo, en que hay pocos posibles strings y todos de un solo carácter es posible que su manejo no resulte problemático, pero en general sí puede serlo. Aquí, para simplificar asumimos que el string ya fue procesado totalmente y convertido a secuencia de lexemas. En las aplicaciones reales el lexema es usado al obtenerse, no se espera a haber terminado de obtener toda la secuencia. Pero aún esperando a obtener toda la secuencia el string se recorre una vez y la secuencia de lexemas también solo una vez. En cambio la versión en la que no se usa el concepto de pila implica la posibilidad de recorrer el string hacia adelante y hacia atrás varias veces.