Universidad de Costa Rica
Escuela de Ciencias de la
Computación e Informática
Profesor Adolfo Di Mare
CI-1322
I Semestre 2004
[<=] [home] [<>] [\/] [=>]
CI-1322 Autómatas y compiladores

Tarea #4 [solución]

Analizador léxico para la calculadora

      Modifique el programa de la segunda tarea 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:

  1. token == P_ABRE   lexema == "("
  2. token == NUM      lexema == "2.2"
  3. token == OP_SUM   lexema == "-"
  4. token == NUM      lexema == "3.33"
  5. 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.

[mailto:] Entrega de Tareas

Tiempo de entrega: 10 días
Modalidad: En parejas

Soluciones

[mailto:] Adolfo Di Mare <adolfo@di-mare.com>.
Copyright © 2004
Derechos de autor reservados © 2004
[home] <> [/\]