Práctica 4: Archivos requeridos


Descarga aquí

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) ... |#