% An implementation in {\sc ale} of the grammar in Shieber & al, % "Semantic-Head-Driven Generation", CL 16-1, 1990. % Signature % ========= bot sub [pred, list, sem, form, agr, sign]. pred sub [decl, imp, love, call_up, leave, see, john, mary, mark, friends, often, friend, up, you, i]. decl sub []. imp sub []. leave sub []. love sub []. call_up sub []. see sub []. john sub []. mary sub []. mark sub []. friends sub []. friend sub []. often sub []. up sub []. you sub []. i sub []. list sub [e_list, ne_list, arg_list, subcat_list]. e_list sub []. ne_list sub [arg_ne_list, subcat_ne_list] intro [hd:bot, tl:list]. arg_list sub [e_list, arg_ne_list]. arg_ne_list sub [] intro [hd:sem, tl:arg_list]. subcat_list sub [e_list, subcat_ne_list]. subcat_ne_list sub [] intro [hd:sign, tl:subcat_list]. sem sub [] intro [pred:pred, args:arg_list]. form sub [finite, nonfinite]. finite sub []. nonfinite sub []. agr sub [sg1, sg2, sg3, pl1, pl2, pl3]. sg1 sub []. sg2 sub []. sg3 sub []. pl1 sub []. pl2 sub []. pl3 sub []. sign sub [sentence, verbal, np, adv, p] intro [sem:sem]. sentence sub []. verbal sub [s, vp] intro [form:form]. s sub []. vp sub [] intro [subcat:subcat_list]. np sub [det, n] intro [agr:agr, arg:sem]. det sub [] intro [np_sem:sem]. n sub []. adv sub [] intro [varg:sem]. p sub []. ext([sg1,sg2,sg3,pl1,pl2,pl3]). % Lexicon % ======= love ---> vp, form:nonfinite, subcat:[(np,sem:Obj),(np,sem:Subj)], sem:(pred:love,args:[Subj,Obj]). call ---> vp, form:nonfinite, subcat:[(np,sem:Obj),(p,sem:(pred:up,args:[])),(np,sem:Subj)], sem:(pred:call_up,args:[Subj,Obj]). call ---> vp, form:nonfinite, subcat:[(p,sem:(pred:up,args:[])),(np,sem:Obj),(np,sem:Subj)], sem:(pred:call_up,args:[Subj,Obj]). leave ---> vp, form:nonfinite, subcat:[(np,sem:Subj)], sem:(pred:leave,args:[Subj]). see ---> vp, form:nonfinite, subcat:[(np,sem:Obj),(np,sem:Subj)], sem:(pred:see,args:[Subj,Obj]). see ---> vp, form:nonfinite, subcat:[(s,form:finite,sem:Obj),(np,sem:Subj)], sem:(pred:see,args:[Subj,Obj]). john ---> np, agr:sg3, sem:(pred:john,args:[]). mary ---> np, agr:sg3, sem:(pred:mary,args:[]). mark ---> np, agr:sg3, sem:(pred:mark,args:[]). friends ---> np, agr:pl3, sem:(pred:friends,args:[]). friend ---> n, agr:sg3, arg:X, sem:(pred:friend,args:[X]). i ---> np, agr:sg1, sem:(pred:i,args:[]). you ---> np, agr:sg2, sem:(pred:you,args:[]). often ---> adv, varg:VP, sem:(pred:often,args:[VP]). up ---> p, sem:(pred:up,args:[]). % Lexical Rules % ============= sg3 lex_rule (vp, form:nonfinite, subcat:Subcat, sem:Sem) **> (vp, form:finite, subcat:NewSubcat, sem:Sem) if add_sg3(Subcat,NewSubcat) morphs (X,y) becomes (X,i,e,s), X becomes (X,s). non_sg3 lex_rule (vp, form:nonfinite, subcat:Subcat, sem:Sem) **> (vp, form:finite, subcat:NewSubcat, sem:Sem) if add_nonsg3(Subcat,NewSubcat) morphs X becomes X. % Grammar Rules % ============= sentence1 rule (sentence,sem:(pred:decl,args:[S])) ===> cat> (s,form:finite,sem:S). sentence2 rule (sentence,sem:(pred:imp,args:[S])) ===> cat> (vp,form:nonfinite, subcat:[(np,sem:(pred:you,args:[]))],sem:S). s rule (s,form:Form,sem:S) ===> cat> Subj, sem_head> (vp,form:Form,subcat:[Subj],sem:S). vp1 rule (vp,form:Form,subcat:Subcat,sem:S) ===> sem_head> (vp,form:Form,subcat:[Compl|Subcat],sem:S), cat> Compl. vp2 rule (vp,form:Form,subcat:[Subj],sem:S) ===> cat> (vp,form:Form,subcat:[Subj],sem:VP), sem_head> (adv,varg:VP,sem:S). % Semantics Directive % ==================== semantics sem1. % Definite Clauses % ================ sem1(sem:S,S) if true. add_sg3([(np,sem:Sem)],[(np,agr:sg3,sem:Sem)]) if !, true. add_sg3([Cat|Cats],[Cat|NewCats]) if add_sg3(Cats,NewCats). add_nonsg3([(np,sem:Sem)],[(np,agr:(=\=sg3),sem:Sem)]) if !, true. add_nonsg3([Cat|Cats],[Cat|NewCats]) if add_nonsg3(Cats,NewCats).