Difference between revisions of "Itty Bitty Programming Language Assignment"
Jump to navigation
Jump to search
(→Credit) |
|||
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
Contents
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 | |
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 | |
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 | Test |
source folder: | src/test/racket/ibpl |
note: ensure that you have removed all printing to receive credit for any assignment.