Practica 5 - Interprete RCFAE

Practica 5 - Interprete RCFAE
Profesora: Karla Ramírez Pulido
Ayudante teoría: Joshua Emmanuel Mendoza Mendieta
Ayudante laboratorio: Héctor Enrique Gómez Morales
Fecha de inicio: 28 de marzo de 2015
Fecha de entrega: 25 de abril de 2015
1.
Instrucciones
Para esta práctica, requerirás tomar como base el interprete de la practica anterior e implementar las características que se solicitan.
El objetivo de esta práctica es hacer un intérprete del lenguaje RCFAE (Recursive, Conditional, Function, Arithmetic Expression) con cajas.
Se tendrán dos sintaxis, la primera RCFAES es una sintaxis que se define explícitamente las expresiones with, y
la sintaxis RCFAE.
En la anterior practica vimos que usar la aplicación de funciones para implementar la funcionalidad del with.
Recursive El intérprete de nuestro lenguaje debe poder evaluar correctamente variables con expresiones que
hacen autorreferencia en el mismo ambiente por medio de cajas.
Conditional El intérprete evaluara correctamente el control de flujo if que toma expresiones que se evalúan
a booleanos.
FAE El intérprete debe evaluar correctamente expresiones de la práctica pasada como son funciones, aplicaciones y operaciones binarias predefinidas así como su extensión a operaciones unarias predefinidas y la
inclusión de valores booleanos.
<RCFAE>::= <id>
| <num>
| <bool>
| {with {{<id> <RCFAE>}+} <RCFAE>}
| {rec {{<id> <RCFAE>}+} <RCFAE>}
| {fun {<id>*} <RCFAE>}
| {if <RCFAE> <RCFAE> <RCFAE>}
| {equal? <RCFAE> <RCFAE>}
| {<op> <RCFAE>}
| {<binop> <RCFAE> <RCFAE>}
| {<RCFAE> <RCFAE>*}
<op>::=
|
|
|
|
|
<binop>::=
|
|
|
|
<id>::= a|...|z|A|...|Z|aa|ab|...|aaa|...
|
(Cualquier combinación de caracteres alfanuméricos
|
con al menos uno alfabético)
|
|
<num>::= ...|-2|-1|0|1|2|...
|
<bool>::= true | false
1
inc
dec
zero?
num?
neg
bool?
+
*
/
<
>
<=
>=
and
or
Esta práctica se puede entregar en equipos de a lo más tres personas.
Esta práctica debe ser implementada con la variante plai, es decir su archivo rkt debe tener como primer linea
lo siguiente: #lang plai.
Todos los ejercicios requieren contar con pruebas mediante el uso de la función test.
2.
Ejercicios
1. (1pts) Booleanos Agrega al tipo RCFAE y RCFAE-Value la variante booleana. Esto es que en sintaxis concreta puedas reconocer símbolos true y false y al momento de procesar la lista de símbolos de una expresión
que los incluya con parse, en el árbol de sintaxis abstracta los manejes por medio de la variante de tipo bool
(análogo a num), adicional a la variante boolV para el intérprete.
2. (1pts) if Agrega al parser y al intérprete la variante if, que recibe tres argumentos que son expresiones
RCFAE. Al interpretarse, si la evaluación del primer argumento es (boolV #t), la evaluación del if es de la
evaluación de la primera expresión RCFAE recibida. En caso de que sea (boolV #f), la evaluación del if es
la evaluación de la segunda expresión RCFAE recibida.
3. (1pts) equal? Agrega al parser y al intérprete la variante equal?, que recibe dos expresiones RCFAE. Si las
dos expresiones son numV, compara si son los mismos números regresando (boolV #t) o (boolV #f) según sea
el caso. Si son expresiones booleanas, sólo si son iguales valores boolV. Cualquier otro caso de uso de isequal?
no es válido y debes regresar un mensaje de error que diga “La aplicación de equal? no es adecuada”. En tu
README explica qué inconvenientes tendría implementar equal? como parte de la variante de tipo binop.
4. (1pts) op, binop Terminar de implementar todas las operaciones unarias y binarias indicadas en la definición
de la sintaxis de RCFAE.
5. (4pts) RCFAE Implementar los ambientes recursivos por medio de cajas para la variante de tipo rec
6. (2pts) Procedurales Implementar los ambientes recursivos por medio de procedimientos para la variante
de tipo rec
2