mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-23 11:42:49 -06:00
400 lines
10 KiB
Plaintext
400 lines
10 KiB
Plaintext
--# -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 "<emphasize>" "</emphasize>";
|
|
|
|
----------------------------------------------------------------------
|
|
-- 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);
|
|
|
|
}
|