Universidad de Costa Rica
|
|
Modifique el programa de la
tarea anterior agregándole un
analizador léxico. Para realizar su trabajo especifique e
implemente la función yylex()
que sirve para
leer la expresión a evaluar. Esta función retorna 2
valores. El primero, llamado "token
", es un
número entero, que toma alguno de los valores de las
constantes OP_SUM
, OP_MUL
,
NUM
, P_ABRE
, P_CIERRA
. El
segundo valor retornado, es una hilera llamada
lexema
, que contiene el texto leido por su
función.
Por ejemplo, si la expresión que el programa recibe es
(2.2 - 3.33)
, en sucesivos llamdos la
función yylex()
retornaría los
siguientes valores:
- token == P_ABRE lexema == "("
- token == NUM lexema == "2.2"
- token == OP_SUM lexema == "-"
- token == NUM lexema == "3.33"
- token == P_CIERRA lexema == ")"
Note que no hace falta usar "tokens" diferentes para la suma y resta, o para la multiplicación y división, pues esas operaciones se pueden diferenciar examinando el lexema.
Modifique su programa para que use esta función. Como ahora usa "tokens", necesitará usar dos pilas para evaluar la expresión: una para los operandos, y otra para los números (complíquese la vida: acepte números de punto flotante). En la documentación explique si esta manera de hacer las cosas es mejor o peor que la que empleó en la tarea anterior.
Para hacer más interesante su trabajo, permita que los
números tengan comas. Por ejemplo, si yylex()
lee el valor "3,500,225.03
", el lexema que
recibirá quien haya invocado yylex()
será "3500225.03
", sin comas.
Entregue su tarea por correo electrónico, como lo hizo anteriormente.
|
Adolfo Di Mare <adolfo@di-mare.com>.
|