Itty Bitty Programming Language Assignment

From CSE425S Wiki
Jump to navigation Jump to search

Credit

This assignment is based on MUPL by Dan Grossman and his team at UW.

Code To Investigate

Ast

(struct IdentifierExp (name)                                           #:transparent)
(struct IntExp        (value)                                          #:transparent)
(struct AddExp        (left_exp right_exp)                             #:transparent)
(struct IfGreaterExp  (left_exp right_exp then_body_exp else_body_exp) #:transparent)
(struct NilExp        ()                                               #:transparent)
(struct IsNilExp      (exp)                                            #:transparent)
(struct ConsExp       (car_exp cdr_exp)                                #:transparent)
(struct CarOfConsExp  (cons_exp)                                       #:transparent)
(struct CdrOfConsExp  (cons_exp)                                       #:transparent)
(struct LetExp        (binding_name binding_exp body_exp)              #:transparent)
(struct FunctionExp   (name_option parameter_name body_exp)            #:transparent)
(struct CallExp       (function_exp argument_exp)                      #:transparent)

Code To Implement

Warmup

file: src/main/racket/ibpl/warmup.rkt Racket-logo.svg
functions: racket-integers->ibpl-IntExps
ibpl-IntExps->racket-integers

racket-integers->ibpl-IntExps

ibpl-IntExps->racket-integers

Eval

value?

ensure-value?

lookup-value-in-environment

(struct entry (name value) #:transparent)

(define (lookup-value-in-environment env identifier-name)
  (cond [(null? env) (error "unbound identifier during evaluation" identifier-name)]
        [(equal? (entry-name (car env)) identifier-name) (entry-value (car env))]
        [#t (lookup-value-in-environment (cdr env) identifier-name)]))

expand-environment

eval-under-env

Macros

IbIfNil

IbLet*

(struct binding (name exp) #:transparent)

IbIfEq

Functions

ib-double

ib-sum-curry

ib-call-with-one

ib-map

ib-mapAddN

Testing