User Tools

Site Tools


cs330_f2016:lab16

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
cs330_f2016:lab16 [2016/11/26 19:00]
morse
cs330_f2016:lab16 [2021/06/30 23:42] (current)
Line 1: Line 1:
-** This is a draft version of the assignment. Do not start on it until this line is removed. ** 
  
 ====Objective:​==== ====Objective:​====
Line 8: Line 7:
 ====Deliverable:​==== ====Deliverable:​====
  
-Implement the CITypes interpreter using the provided shell.+Implement the CITypes interpreter using [[http://​liftothers.org/​dokuwiki/​doku.php?​id=cs330_f2016:​lab16shell|the provided shell]].
  
 === Language Overview === === Language Overview ===
  
-The CITypes language is based on the CI5 language, just like your Extended Interpreter.+The CITypes language is based on the CI3 language, just like your Extended Interpreter.
 ** You do not need to add any functionality from your previous assignments. ** ** You do not need to add any functionality from your previous assignments. **
  
Line 26: Line 25:
  
 The language also requires that the types of formal parameters be specified with the function is declared: ​ The language also requires that the types of formal parameters be specified with the function is declared: ​
-<​code>​+<​code ​lisp>
   (lambda <id> : <​type>​ <​expr>​)   (lambda <id> : <​type>​ <​expr>​)
 </​code> ​ </​code> ​
Line 32: Line 31:
  
 For example, a simple numeric increment function would be written as  For example, a simple numeric increment function would be written as 
-<​code>​ +<​code ​lisp
-  (lambda x : number (+ x 1)+  (lambda x : number (+ x 1))
 </​code>​ </​code>​
-and a function that takes as input a function from numbers to numbers would look like this: +and a function ​lambda ​that takes as input a function ​from numbers to numbers would look like this: 
-<​code>​+<​code ​lisp>
   (lambda f : (number : number) (f 3))   (lambda f : (number : number) (f 3))
 </​code>​ </​code>​
Line 50: Line 49:
  
 Here is the grammar for the CITypes language: Here is the grammar for the CITypes language:
-<​code>​+<​code ​bnf>
 <​expr>​ ::= <​number>​ <​expr>​ ::= <​number>​
          | true          | true
Line 64: Line 63:
          | nempty          | nempty
          | (ncons <​expr>​ <​expr>​)          | (ncons <​expr>​ <​expr>​)
-         | (nempty ​<​expr>​)+         | (nisempty ​<​expr>​)
          | (nfirst <​expr>​)          | (nfirst <​expr>​)
          | (nrest <​expr>​)          | (nrest <​expr>​)
Line 94: Line 93:
  
 ** The type checker should perform no evaluation of the code, only type checking. ** ** The type checker should perform no evaluation of the code, only type checking. **
 +
 +In class, we went over [[lab16judgments | the type judgments for the expressions other than those that work with lists]]. ​
 +You will need to determine them for the five list-handling expressions yourself.
  
 Some of the tests will involve comparing two types, and a "​same_types"​ function is provided to do a (recursive if necessary) comparison. Some of the tests will involve comparing two types, and a "​same_types"​ function is provided to do a (recursive if necessary) comparison.
Line 99: Line 101:
 When your type checker catches an error, it should throw an exception with a descriptive error message. When your type checker catches an error, it should throw an exception with a descriptive error message.
  
 +----
 ====Hints:​==== ====Hints:​====
 +
 +  * The "​calcf"​ function in the CI3 interpreter that read in a test file, ran it through lex / parse / calc has been replaced with a "​typef"​ function that similarly reads in a test file and runs it through lex / parse / type_of_expression. ​ You can use it to run your own test cases.
 +  * Make sure you test not only for validly typed expressions but for each kind of type error.
cs330_f2016/lab16.1480186810.txt.gz · Last modified: 2021/06/30 23:40 (external edit)