``` Universidad de Costa Rica Escuela de Ciencias de la Computación e Informática ```
 Profesor Adolfo Di Mare CI-1322 I Semestre 2004
CI-1322 Autómatas y compiladores

## Tarea #3 [solución]

### Analizador sintáctico para la calculadora

Ejecución desde `expr()`
`preAnalisis`
Regla aplicada
`_posfijo`
```• expr
• term r1
• factor r2 r1
• ( expr ) r2 r1
( • expr ) r2 r1
( • term r1 ) r2 r1
( • factor r2 r1 ) r2 r1
( • ( expr ) r2 r1 ) r2 r1
( ( • expr ) r2 r1 ) r2 r1
( ( • term r1 ) r2 r1 ) r2 r1
( ( • factor r2 r1 ) r2 r1 ) r2 r1
( ( • num r2 r1 ) r2 r1 ) r2 r1
( ( • 5 r2 r1 ) r2 r1 ) r2 r1
( ( 5 • r2 r1 ) r2 r1 ) r2 r1
( ( 5 • * factor r2 r1 ) r2 r1 ) r2 r1
( ( 5 * • factor r2 r1 ) r2 r1 ) r2 r1
( ( 5 * • num r2 r1 ) r2 r1 ) r2 r1
( ( 5 * • 3 r2 r1 ) r2 r1 ) r2 r1
( ( 5 * 3 • r2 r1 ) r2 r1 ) r2 r1
( ( 5 * 3 • r1 ) r2 r1 ) r2 r1
( ( 5 * 3 • ) r2 r1 ) r2 r1
( ( 5 * 3 ) • r2 r1 ) r2 r1
( ( 5 * 3 ) • r1 ) r2 r1
( ( 5 * 3 ) • ) r2 r1
( ( 5 * 3 ) ) • r2 r1
( ( 5 * 3 ) ) • r1
( ( 5 * 3 ) ) •
```
```• ( ( 5 * 3 ) )
• ( ( 5 * 3 ) )
• ( ( 5 * 3 ) )
( • ( 5 * 3 ) )
( • ( 5 * 3 ) )
( • ( 5 * 3 ) )
( • ( 5 * 3 ) )
( • ( 5 * 3 ) )
( ( • 5 * 3 ) )
( ( • 5 * 3 ) )
( ( • 5 * 3 ) )
( ( • 5 * 3 ) )
( ( • 5 * 3 ) )
( ( 5 • * 3 ) )
( ( 5 • * 3 ) )
( ( 5 * • 3 ) )
( ( 5 * • 3 ) )
( ( 5 * • 3 ) )
( ( 5 * 3 • ) )
( ( 5 * 3 • ) )
( ( 5 * 3 • ) )
( ( 5 * 3 ) • )
( ( 5 * 3 ) • )
( ( 5 * 3 ) • )
( ( 5 * 3 ) ) •
( ( 5 * 3 ) ) •
( ( 5 * 3 ) ) •
```
```expr ==> term r1
term ==> factor r2
factor ==> ( expr )

expr ==> term r1
term ==> factor r2
factor ==> ( expr )

expr ==> term r1
term ==> factor r2
factor ==> num
num ==> 5

r2 ==> * factor r2

factor ==> num
num ==> 3

r2 ==> £
r1 ==> £

r2 ==> £
r1 ==> £

r2 ==> £
r1 ==> £
```
```""
""
""
""
""
""
""
""
""
""
""
""
"5"
"5"
"5"
"5"
"5"
"5"
"53*"
"53*"
"53*"
"53*"
"53*"
"53*"
"53*"
"53*"
"53*"
```
Figura 1: Análisis sintáctico de la hilera "`((5 * 3))`"

Para explicar qué hace el programa de la segunda tarea programada es conveniente ver cómo se procesa la hilera de entrada paso a paso, de la forma en que se muestra en tabla de la Figura 1. Como producir esa tabla requiere un buen esfuerzo intelectual, en esta tarea usted automtatizará el proceso.

Para lograr su cometido, modifique el programa de la calculadora de manera que produzca un archivo HTML que contenga la tabla. Si su programa ya estuviera escrito, bastaría haberlo corrido con la hilera de entrada "`((5 * 3))`" para obtener la tabla HTML que se muestra en la Figura 1. Note que el punto de corte es la posición marcada por "`preAnalisis`".

Entregue su tarea por correo electrónico, como lo hizo anteriormente.

 Tiempo de entrega: 1 semana Modalidad: En parejas

## Soluciones

Adolfo Di Mare <adolfo@di-mare.com>.
Copyright © 2004
Derechos de autor reservados © 2004