--# -path=.:prelude:resource-1.0/abstract:resource-1.0/common interface GodisLang = open Grammar, Prelude, PredefAbs in { ---------------------------------------------------------------------- -- different clause forms param ClForm = HasDone | IsDoing; oper ClauseForm : Type; clauseForm : ClauseForm -> ClauseForm; hasDone : ClauseForm; isDoing : ClauseForm; anter : ClauseForm -> Ant; ---------------------------------------------------------------------- -- punctuation on system utterances param Punctn = FullStop | QuestMark; oper Punctuation : Type; fullStop, questMark : Punctuation; consText : Punctuation -> Utt -> Text -> Text; ---------------------------------------------------------------------- -- focus emphasize : NP -> NP; embed_NP : Str -> Str -> NP -> NP; ---------------------------------------------------------------------- -- user utterances UserQuestion, UserAction, UserAnswer, UserShortAns, UserProposition : Type; askQS : QCl -> UserQuestion; ansCl : Cl -> UserAnswer; ansNP : NP -> UserShortAns; reqVP : VP -> UserAction; req1 : Str -> UserAction; req1x : Str -> Str -> UserAction; req2x : Str -> Str -> Str -> UserAction; not_user_prop : UserProposition -> SS; not_user_short : UserShortAns -> SS; userGreet, userQuit, userYes, userNo, userOkay : SS; userCoordinate : SS -> SS -> SS; thank_you_Str, i_want_to_Str, please_Str, this_that_Str : Str; use_QCl : QCl -> SS; use_Cl : Cl -> SS; use_NP : NP -> SS; use_VP : VP -> SS; use_Adv : Adv -> SS; ---------------------------------------------------------------------- -- system utterances hello, goodbye, yes, no, is_that_correct_Post, returning_to_Pre, returning_to_act_Pre, returning_to_issue_Pre, i_dont_understand, cant_answer_que_Pre, not_valid_Post, icm_acc_pos, icm_con_neg, icm_reraise, icm_loadplan, icm_accommodate : Utt; icm_per_pos : String -> Utt; cncUtt : Utt -> Utt -> Utt; ---------------------------------------------------------------------- -- interrogative phrases which_N_sg : N -> IP; which_N_pl : N -> IP; ---------------------------------------------------------------------- -- noun phrases sing_NP, plur_NP : Str -> NP; the_CN_sg : CN -> NP; the_N_sg, the_N_pl, indef_N_sg, indef_N_pl, this_N_sg, these_N_pl, no_N_sg, no_N_pl, all_N_pl : N -> NP; the_A_super_N_sg, indef_A_posit_N_sg, no_A_posit_N_sg : A -> N -> NP; NP_Adv : NP -> Adv -> NP; NP_Prep_NP : Prep -> NP -> NP -> NP; NP_in_NP, NP_of_NP, NPgen_NP : NP -> NP -> NP; NP_Cl : NP -> Cl; prefix_N : N -> N -> N; ---------------------------------------------------------------------- -- questions, q-clauses useQCl : (QCl ** ClauseForm) -> QS; which_N_are_AP, which_N_is_AP : N -> AP -> QCl; what_is_NP : NP -> QCl; who_VP : VP -> QCl; which_N_do_you_want_to_V2 : N -> V2 -> QCl; which_N_has_NP_V2 : N -> NP -> V2 -> QCl; which_N_are_AP_Adv : N -> AP -> Adv -> QCl; is_the_N_AP : N -> AP -> QCl; is_the_N_AP_Adv : N -> AP -> Adv -> QCl; which_N_are_Adv : N -> Adv -> QCl; which_N_are_Adv_Adv : N -> Adv -> Adv -> QCl; is_the_N_Adv : N -> Adv -> QCl; is_the_N_Adv_Adv : N -> Adv -> Adv -> QCl; ---------------------------------------------------------------------- -- adverbials Prep_NP : Prep -> NP -> Adv; in_NP : NP -> Adv; ---------------------------------------------------------------------- -- clauses, sentences, answers, propositions useCl : (Cl ** ClauseForm) -> S; --generic_VP, you_want_to_VP, you_are_VPing : VP -> Cl; you_VV_to_VP : VV -> VP -> Cl; it_is_NP_who_VP : NP -> (VP ** ClauseForm) -> Cl; NP_is_AP : NP -> AP -> Cl; NP_is_AP_Adv : NP -> AP -> Adv -> Cl; NP_is_Adv : NP -> Adv -> Cl; ---------------------------------------------------------------------- -- relative clauses useRCl : (RCl ** ClauseForm) -> RS; ---------------------------------------------------------------------- -- verb phrases, actions use_V : V -> VP; V2_NP : V2 -> NP -> VP; V2_the_N : V2 -> N -> VP; V2_a_N : V2 -> N -> VP; VPing : (VP ** ClauseForm) -> VP; vp2Utt : VP -> Utt; ---------------------------------------------------------------------- -- general syntactical operations disjunct_QCl : QCl -> QCl -> QCl; negate_Cl : Cl -> Cl; ---------------------------------------------------------------------- -- verbs see_V : V; do_V2, have_V2, understand_V2 : V2; know_VQ, wonder_VQ : VQ; say_VS : VS; fail_VV, like_VV : VV; ---------------------------------------------------------------------- -- nouns, proper nouns, common nouns and noun phrases information_N : N; you_NP : NP; ---------------------------------------------------------------------- -- closed word categories of_på_Prep, for_Prep : Prep; not_Predet : Predet; no_Quant : Quant; all_Quant : QuantPl; ---------------------------------------------------------------------- -- language independent implementations ---------------------------------------------------------------------- oper ---------------------------------------------------------------------- -- different clause forms ClauseForm = {clform : ClForm}; clauseForm c = c; hasDone = {clform = HasDone}; isDoing = {clform = IsDoing}; anter c = case c.clform of {HasDone => AAnter; IsDoing => ASimul}; ---------------------------------------------------------------------- -- punctuation on system utterances Punctuation = {punctuation : Punctn}; fullStop = {punctuation = FullStop}; questMark = {punctuation = QuestMark}; consText punct utt = let txt = PhrUtt NoPConj utt NoVoc in case punct.punctuation of { FullStop => TFullStop txt; QuestMark => TQuestMark txt }; ---------------------------------------------------------------------- -- focus emphasize = embed_NP "" ""; ---------------------------------------------------------------------- -- user utterances UserAction, UserQuestion, UserAnswer, UserShortAns, UserProposition = SS; askQS q = UttQS (UseQCl TPres ASimul PPos q); ansCl c = UttS (UseCl TPres ASimul PPos c); ansNP a = UttNP a; reqVP vp = PhrUtt NoPConj (variants{ UttImpSg PPos (ImpVP vp); UttS (UseCl TPres ASimul PPos (PredVP (UsePron i_Pron) (ComplVV want_VV vp))); UttS (UseCl TCond ASimul PPos (PredVP (UsePron i_Pron) (ComplVV like_VV vp))) }) (variants{ NoVoc; please_Voc }); req1 act = req1x act []; req1x act = req2x act act; req2x imp inf extra = variants { ss ( variants { imp; i_want_to_Str ++ inf } ++ extra ++ optStr please_Str); ss ( variants { please_Str; userOkay.s } ++ imp ++ extra )}; use_QCl = askQS; use_Cl = ansCl; use_NP = ansNP; use_VP = reqVP; use_Adv = UttAdv; ---------------------------------------------------------------------- -- system utterances cncUtt x y = mkUtt (x.s ++ y.s); ---------------------------------------------------------------------- -- interrogative phrases which_N_sg n = IDetCN whichSg_IDet NoNum NoOrd (UseN n); which_N_pl n = IDetCN whichPl_IDet NoNum NoOrd (UseN n); ---------------------------------------------------------------------- -- noun phrases the_CN_sg cn = DetCN (DetSg (SgQuant DefArt) NoOrd) cn; the_N_sg n = the_CN_sg (UseN n); the_N_pl n = DetCN (DetPl (PlQuant DefArt) NoNum NoOrd) (UseN n); indef_N_sg n = DetCN (DetSg (SgQuant IndefArt) NoOrd) (UseN n); indef_N_pl n = DetCN (DetPl (PlQuant IndefArt) NoNum NoOrd) (UseN n); this_N_sg n = DetCN (DetSg (SgQuant this_Quant) NoOrd) (UseN n); these_N_pl n = DetCN (DetPl (PlQuant this_Quant) NoNum NoOrd) (UseN n); no_N_sg n = DetCN (DetSg (SgQuant no_Quant) NoOrd) (UseN n); no_N_pl n = DetCN (DetPl (PlQuant no_Quant) NoNum NoOrd) (UseN n); all_N_pl n = DetCN (DetPl all_Quant NoNum NoOrd) (UseN n); the_A_super_N_sg a n = DetCN (DetSg (SgQuant DefArt) (OrdSuperl a)) (UseN n); indef_A_posit_N_sg a n = DetCN (DetSg (SgQuant IndefArt) NoOrd) (AdjCN (PositA a) (UseN n)); no_A_posit_N_sg a n = DetCN (DetSg (SgQuant no_Quant) NoOrd) (AdjCN (PositA a) (UseN n)); NP_Adv = AdvNP; NP_Prep_NP prep np np' = AdvNP np (PrepNP prep np'); NP_in_NP = NP_Prep_NP in_Prep; NP_of_NP = NP_Prep_NP of_på_Prep; ---------------------------------------------------------------------- -- questions useQCl q = UseQCl TPres (anter q) PPos q; which_N_are_AP n ap = QuestVP (which_N_pl n) (UseComp (CompAP ap)); which_N_is_AP n ap = QuestVP (which_N_sg n) (UseComp (CompAP ap)); what_is_NP np = QuestVP whatSg_IP (UseComp (CompNP np)); who_VP vp = QuestVP whoSg_IP vp; which_N_do_you_want_to_V2 n v2 = QuestSlash (which_N_sg n) (SlashVVV2 you_NP want_VV v2); which_N_has_NP_V2 n np v2 = QuestSlash (which_N_pl n) (SlashV2 np v2); which_N_are_AP_Adv n ap adv= QuestVP (which_N_pl n) (AdvVP (UseComp (CompAP ap)) adv); is_the_N_AP n ap = QuestCl (NP_is_AP (the_N_sg n) ap); is_the_N_AP_Adv n ap adv = QuestCl (NP_is_AP_Adv (the_N_sg n) ap adv); which_N_are_Adv n a = QuestVP (which_N_pl n) (UseComp (CompAdv a)); which_N_are_Adv_Adv n a aa = QuestVP (which_N_pl n) (AdvVP (UseComp (CompAdv a)) aa); is_the_N_Adv n a = QuestCl (PredVP (the_N_sg n) (UseComp (CompAdv a))); is_the_N_Adv_Adv n a aa = QuestCl (PredVP (the_N_sg n) (AdvVP (UseComp (CompAdv a)) aa)); ---------------------------------------------------------------------- -- adverbials Prep_NP = PrepNP; in_NP = PrepNP in_Prep; ---------------------------------------------------------------------- -- clauses, sentences, answers, propositions useCl c = UseCl TPres (anter c) PPos c; --generic_VP = GenericCl; you_want_to_VP vp = PredVP you_NP (ComplVV want_VV vp); you_are_VPing vp = PredVP you_NP (VPing (isDoing ** vp)); you_VV_to_VP vv vp = PredVP you_NP (ComplVV vv vp); it_is_NP_who_VP np vp = CleftNP np (UseRCl TPres (anter vp) PPos (RelVP IdRP vp)); NP_is_AP np ap = PredVP np (UseComp (CompAP ap)); NP_is_AP_Adv np ap adv= PredVP np (AdvVP (UseComp (CompAP ap)) adv); NP_is_Adv np adv= PredVP np (UseComp (CompAdv adv)); ---------------------------------------------------------------------- -- relative clauses useRCl r = UseRCl TPres (anter r) PPos r; ---------------------------------------------------------------------- -- verb phrases, actions use_V = UseV; V2_NP = ComplV2; V2_the_N v2 n = ComplV2 v2 (the_N_sg n); V2_a_N v2 n = ComplV2 v2 (indef_N_sg n); }