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
© Copyright 2024 ExpyDoc