Difference between revisions of "Itty Bitty Programming Language Assignment"

From CSE425S Wiki
Jump to navigation Jump to search
Line 1: Line 1:
 
=Credit=
 
=Credit=
 
This assignment is based on [[MUPL_Assignment|MUPL]] by Dan Grossman and his team at UW.
 
This assignment is based on [[MUPL_Assignment|MUPL]] by Dan Grossman and his team at UW.
 +
 +
=Code To Use=
 +
* [https://docs.racket-lang.org/reference/number-types.html#%28def._%28%28quote._~23~25kernel%29._exact-integer~3f%29%29 exact-integer?]
 +
* [https://docs.racket-lang.org/reference/pairs.html#%28def._%28%28lib._racket%2Flist..rkt%29._cons~3f%29%29 cons?]
 +
* [https://docs.racket-lang.org/reference/pairs.html#%28def._%28%28quote._~23~25kernel%29._null~3f%29%29 null?]
 +
* [https://docs.racket-lang.org/reference/pairs.html#%28def._%28%28quote._~23~25kernel%29._cons%29%29 cons]
 +
* [https://docs.racket-lang.org/reference/pairs.html#%28def._%28%28quote._~23~25kernel%29._car%29%29 car]
 +
* [https://docs.racket-lang.org/reference/pairs.html#%28def._%28%28quote._~23~25kernel%29._cdr%29%29 cdr]
  
 
=Code To Investigate=
 
=Code To Investigate=

Revision as of 03:46, 6 March 2023

Credit

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

Code To Use

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

file: src/main/racket/ibpl/eval.rkt Racket-logo.svg
functions: value?
expand-environment
eval-under-env
(struct closure (env function) #:transparent)

value?

IBPL expressions evaluate to Racket values. value? determines if the paramater v is a valid value.

Valid value types are cons cells, integers, closures, and the null empty list.

For a cons cell to be a valid value, its car and cdr must be valid values.

ensure-value?

(define (ensure-value? v)
  (if (value? v)
      v
      (error (string-append "not a value: " (~a v)))))

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

eval-exp

(define (eval-exp e)
  (eval-under-env e null))

Macros

IbIfNil

IbLet*

(struct binding (name exp) #:transparent)

IbIfEq

Functions

ib-double

ib-sum-curry

ib-call-with-one

ib-map

ib-mapAddN

Testing

file: test_all.rkt Racket-logo.svg Test
source folder: src/test/racket/ibpl

note: ensure that you have removed all printing to receive credit for any assignment.