package gen; import edu.neu.ccs.demeterf.demfgen.lib.*; import edu.neu.ccs.demeterf.*; nogen List(X) : Cons(X) | Empty(X). nogen Cons(X) = X List(X). nogen Empty(X) = . Start = List(Basket) EOF. // what we will have in the composite objects Pencil = "p" *s. Fruit : Apple | Orange. Apple = "a" *s. Orange = "o" *s. // The Composite pattern expressed in DemeterF Composite(S) : Simple(S) | Compound(S). Simple(S) = S. Compound(S) = "[" List(Composite(S)) "]". // Apply the Composite pattern to define Basket Basket = "basket" Composite(Item). Item : Fruit | Pencil | Basket. Main = .