Out: November 27, 2007
Due: December 4, 2007
Because of html issues, I use + to start and end a part name. A = +b+ B. is a class with one part called b. In your program you use the normal class dictionary syntax.
For the purpose of type checking, we can translate A ~ {B}. into A = +element+ B. and also A = [+b+ B]. into A = +b+ B. This can be done easily with a preprocessor in DemeterF.
Example: Object : Exp | String | Integer. Exp : Lambda | Var. Lambda = +arg+ String [+body+ Exp] . Var : Sym | Addr. ExpList ~{Exp}. is translated into: Object : Exp | String | Integer. Exp : Lambda | Var. Lambda = +arg+ String +body+ Exp . Var : Sym | Addr. ExpList = +element+ Exp .Implement a type checker for CDS.
Input: A container C. Output: A container C' with no capacity violations plus a list of surplus items S. C' and S contain the same elements. If the surplus list is not empty for a container then adding any element from the list to the container would bring the container over capacity. (In other words, elements are put on the surplus list only when needed.)
A concrete class B translates into (define-datatype B B? [a-B parts]). An abstract class C translates into (define-datatype C C? [a-alt1 (contents alt1?)] ...).
Example: Class dictionary: PathSpec : Simple | Join | Merge. Simple = +source+ Node +target+ Node. Join = +first+ PathSpec +second+ PathSpec . Merge = +first+ PathSpec +second+ PathSpec . Test = +simple+ Simple +join+ Join +merge+ Merge. Datatypes: (define-datatype path-spec path-spec? [a-simple (contents simple?)] [a-join (contents join?)] [a-merge (contents merge?)]) (define-datatype simple simple? [simple (source symbol?) (target symbol?)]) (define-datatype join join? [join (first path-spec?) (second path-spec?)]) (define-datatype merge merge? [merge (first path-spec?) (second path-spec?)]) define-datatype test test? [test (simple simple?) (join join?) (merge merge?)])Use a ToString class similar to the one in http://www.ccs.neu.edu/research/demeter/DemeterF/FuncTest.java because it is a simple linear translation.
Last modified: November 28, 2007 by Karl Lieberherr