Grammar
S -> NP VP {DCL(VP.sem(NP.sem))}
S -> VP {IMP(VP.sem(DummyYou))}
S -> Aux NP VP {YNQ(VP.sem(NP.sem))}
S -> WhWord NP VP {WHQ(NP.sem.var,VP.sem(NP.sem))}
S -> WhWord Aux NP VP {WHQ(WhWord.sem,VP.sem(NP.sem))}
  
NP -> ProperNoun {ProperNoun.sem}
NP -> MassNoun {MassNoun.sem}
NP -> Det Nominal {}
NP -> ComplexDet Nominal {<∃x Nominal.sem(x) ⋀ GN(x,ComplexDet.sem)>}
  
Nominal -> Noun {λx ISA(x,Noun.sem)}
Nominal -> Adj Nominal {λx Nominal.sem(x) ⋀ AM(x,Adj.sem)}
Nominal -> Noun Nominal {λx Nominal.sem(x) ⋀ NN(Noun.sem,x)}
Nominal -> Nominal PP {λz Nominal.sem(z) ⋀ PP.sem(z)}
  
ComplexDet -> NP 's {NP.sem}
  
VP -> Verb NP {Verb.sem(NP.sem)}
VP -> Verb NP VPto {Verb.sem(NP.sem,VPto.sem)}
VP -> VP PP {λy VP.sem(y) ⋀ PP.sem(VP.sem.variable)}
  
VPto -> to VP {VP.sem}
  
PP -> P NP {P.sem(NP.sem)}
PP -> P NP {NP.sem}
  
Lexicon
Noun -> restaurant {Restaurant}
ProperNoun -> Sally {Sally}
MassNoun -> bread {Bread}
  
Adj -> green {Green}
  
Det -> a {∃}
  
P -> on {λx λy On(x,y)}
  
Verb -> serves {λxλy ∃ e, x, y ISA(e,Serving) ⋀ Server(e,y) ⋀ Served(e,x)}
Verb -> tell {λxλyλz ∃ e, y.variable ISA(e,Telling) ⋀ Teller(e,z) ⋀ Tellee(e,x) ⋀ ToldThing(e,y.variable) ⋀ y(x)}