Práctica 4: Archivos requeridos
grammars.rkt
Archivo con la definición de los tipos de datos abstractos que definen los ASA para el
lenguaje FWAE
.
#lang plai
;; TDA para representar los árboles de sintaxis abstracta del lenguaje FWBAE. Este TDA es una versión
;; con azúcar sintáctica.
(define-type FWBAE
[idS (i symbol?)]
[numS (n number?)]
[boolS (b boolean?)]
[opS (f procedure?) (args (listof FWBAE?))]
[withS (bindings (listof binding?)) (body FWBAE?)]
[withS* (bindings (listof binding?)) (body FWBAE?)]
[funS (params (listof symbol?)) (body FWBAE?)]
[appS (fun-expr FWBAE?) (args (listof FWBAE?))])
;; TDA para asociar identificadores con valores.
(define-type Binding
[binding (name symbol?) (value FWBAE?)])
;; TDA para representar los árboles de sintaxis abstracta del lenguaje FBAE. Este TDA es una versión
;; sin azúcar sintáctica.
(define-type FBAE
[id (i symbol?)]
[num (n number?)]
[bool (b boolean?)]
[op (f procedure?) (args (listof FBAE?))]
[fun (params (listof symbol?)) (body FBAE?)]
[app (fun-expr FBAE?) (args (listof FBAE?))])
;; TDA para representar el ambiente de evaluación.
(define-type Env
[mtSub]
[aSub (name symbol?) (value FBAE-Value?) (env Env?)])
;; TDA para representar los resultados devueltos por el intérprete.
(define-type FBAE-Value
[numV (n number?)]
[boolV (b boolean?)]
[closureV (params (listof symbol?)) (body FBAE?) (env Env?)])
parser.rkt
Archivo dónde se implementará el analizador sintáctico para el lenguaje FWAE
.
#lang plai
(require "grammars.rkt")
;; Analizador sintáctico para WAE.
;; Dada una s-expression, construye el árbol de sintaxis abstracta correspondiente.
;; parse: s-expression -> FWBAE
(define (parse sexp)
(error 'parse "Función no implementada."))
;; Función que elimina el azúcar sintáctica de las expresiones de FWBAE, es decir las convierte a
;; expresiones de FBAE.
;; desugar: FWBAE -> FBAE
(define (desugar expr)
(error 'desugar "Función no implementada."))
interp.rkt
Archivo dónde se implementará el analizador semántico para el lenguaje FWAE
.
#lang plai
(require "grammars.rkt")
(require "parser.rkt")
;; Función encargada de interpretar el árbol de sintaxis abstracta sin azúcar sintáctica generado por
;; la función desugar. Esta versión de interp usa alcance estático.
;; interp: FBAE -> FBAE-Value
(define (interp expr env)
(error 'interp "Función no implementada."))
test-practica4.rkt
Archivo dónde se agregarán las pruebas unitarias de la práctica.
#lang plai
(require "grammars.rkt")
(require "parser.rkt")
(require "interp.rkt")
(print-only-errors)
#| Módulo para pruebas unitarias de la práctica 4 |#
;; Pruebas para parse
#| ... Aquí van las pruebas (Borrar este comentario) ... |#
;; Pruebas para desugar
#| ... Aquí van las pruebas (Borrar este comentario) ... |#
;; Pruebas para interp
#| ... Aquí van las pruebas (Borrar este comentario) ... |#