forked from GitHub/gf-rgl
=An error in CatCgg after implementing most of the verb functions. The error is: src/compiler/GF/Compile/GeneratePMCFG.hs:137:11-36: Irrefutable pattern failed for pattern [newCat]
This commit is contained in:
@@ -22,7 +22,7 @@ lincat
|
|||||||
Cl = Res.Clause ; -- declarative clause, with all tenses e.g. "she looks at this"
|
Cl = Res.Clause ; -- declarative clause, with all tenses e.g. "she looks at this"
|
||||||
QCl = Res.Clause ** {posibleSubAgr: Res.Agreement =>Str} ;
|
QCl = Res.Clause ** {posibleSubAgr: Res.Agreement =>Str} ;
|
||||||
RS = {s : Str} ; -- relative e.g. "in which she lived"
|
RS = {s : Str} ; -- relative e.g. "in which she lived"
|
||||||
V = Res.Verb ; --change to {verb : Str ; comp = []} -- one-place verb e.g. "sleep"
|
V,VS, VQ, VA = Res.Verb ; --change to {verb : Str ; comp = []} -- one-place verb e.g. "sleep"
|
||||||
V2,V2Q, V2S = Res.Verb2;
|
V2,V2Q, V2S = Res.Verb2;
|
||||||
V2A,V3 = Res.Verb3; -- three-place verb e.g. "show"
|
V2A,V3 = Res.Verb3; -- three-place verb e.g. "show"
|
||||||
VP = Res.VerbPhrase ; -- verb phrase e.g. "is very warm"
|
VP = Res.VerbPhrase ; -- verb phrase e.g. "is very warm"
|
||||||
@@ -75,12 +75,14 @@ lincat
|
|||||||
N2 = Res.Noun ** {c2 : Res.Agreement =>Str}; -- relational noun e.g. "son"
|
N2 = Res.Noun ** {c2 : Res.Agreement =>Str}; -- relational noun e.g. "son"
|
||||||
Prep = Res.Preposition; -- preposition, or just case e.g. "in"
|
Prep = Res.Preposition; -- preposition, or just case e.g. "in"
|
||||||
N3 = N2 ** {c3 : Res.Agreement =>Str};
|
N3 = N2 ** {c3 : Res.Agreement =>Str};
|
||||||
--VV =
|
VV = Res.Verb ** {inf:Str; whenUsed: Res.VVMood}; --inf is the other verb
|
||||||
|
|
||||||
linref
|
linref
|
||||||
Cl =\cl -> cl.s ++ Res.mkSubjClitic cl.subjAgr ++ cl.root ++ BIND ++ cl.pres;
|
Cl =\cl -> cl.s ++ Res.mkSubjClitic cl.subjAgr ++ cl.root ++ BIND ++ cl.pres;
|
||||||
QCl =\qcl -> qcl.s ++ qcl.posibleSubAgr ! (Res.mkAgreement Res.MU_BA Res.P3 Res.Sg) ++ qcl.root ++ BIND ++ qcl.pres;
|
QCl =\qcl -> qcl.s ++ qcl.posibleSubAgr ! (Res.mkAgreement Res.MU_BA Res.P3 Res.Sg) ++ qcl.root ++ BIND ++ qcl.pres;
|
||||||
VP =\vp -> vp.s ++ BIND ++ vp.pres;
|
VP =\vp -> vp.adv ++ vp.s ++ BIND ++ vp.pres ++ vp.comp ++vp.comp2;
|
||||||
|
VPSlash =\vpslash -> vpslash.s ++ BIND ++ vpslash.pres;
|
||||||
|
|
||||||
{-
|
{-
|
||||||
--1 Cat: the Category System
|
--1 Cat: the Category System
|
||||||
|
|
||||||
|
|||||||
223
src/rukiga/CatCggOld.gf
Normal file
223
src/rukiga/CatCggOld.gf
Normal file
@@ -0,0 +1,223 @@
|
|||||||
|
--# -path=.:../prelude:../abstract:../common
|
||||||
|
|
||||||
|
concrete CatCgg of Cat = CommonX -[Adv,IAdv]**
|
||||||
|
open (Res=ResCgg), Prelude, (Px=ParamX), Predef in {
|
||||||
|
|
||||||
|
lincat
|
||||||
|
|
||||||
|
--Pol = {s : Str ; isTrue: Bool}; -- TRUE= Positive, FALSE=Negative, s filed is left empty for parsing
|
||||||
|
{-
|
||||||
|
Temp is a parameter for temporal features such as Simul and Anteriority:
|
||||||
|
TRUE = Simultainity
|
||||||
|
FALSE = Anteriority
|
||||||
|
-}
|
||||||
|
--Temp = {s : Str ; isPres : Bool} ;
|
||||||
|
--cat
|
||||||
|
Imp = {s : Bool => Str} ;
|
||||||
|
QS = {s : Str} ;
|
||||||
|
-- Note: SS is a shorthand for {s:Str}, defined in Prelude.gf
|
||||||
|
-- You must change some of the lincats (e.g., for NP, Det and Pron) so that everything works
|
||||||
|
|
||||||
|
S = SS ; -- declarative sentence e.g. "she lived here"
|
||||||
|
Cl = Res.Clause ; -- declarative clause, with all tenses e.g. "she looks at this"
|
||||||
|
QCl = Res.Clause ** {posibleSubAgr: Res.Agreement =>Str} ;
|
||||||
|
RS = {s : Str} ; -- relative e.g. "in which she lived"
|
||||||
|
V,VS, VQ, VA = Res.Verb ; --change to {verb : Str ; comp = []} -- one-place verb e.g. "sleep"
|
||||||
|
V2,V2Q, V2S = Res.Verb2;
|
||||||
|
V2A,V3 = Res.Verb3; -- three-place verb e.g. "show"
|
||||||
|
VP = Res.VerbPhrase ; -- verb phrase e.g. "is very warm"
|
||||||
|
|
||||||
|
N = Res.Noun ; -- common noun e.g. "house"
|
||||||
|
CN = Res.Noun ; -- common noun (without determiner) e.g. "red house"
|
||||||
|
NP = Res.NounPhrase; -- noun phrase (subject or object) e.g. "the red house"
|
||||||
|
Pron = Res.Pronoun ; -- personal pronoun e.g. "she"
|
||||||
|
Det = Res.Determiner ; -- determiner phrase e.g. "those seven"
|
||||||
|
Quant = {s : Res.Pronoun; s2 :Res.Agreement => Str; doesAgree : Bool; isPron: Bool} ; -- quantifier ('nucleus' of Det) e.g. "this/these"
|
||||||
|
Num = Res.Numer ; -- number determining element e.g. "seven"
|
||||||
|
AP = {s : Str ; position1 : Res.Position1; isProper : Bool; isPrep: Bool};--Res.AdjectivalPhrase;
|
||||||
|
A = Res.Adjective;
|
||||||
|
Comp = Res.Comp; -- complement of copula, such as AP e.g. "very warm"
|
||||||
|
|
||||||
|
Adv = Res.Adverb; --Verb Phrase modifying adverb
|
||||||
|
VPSlash = Res.VPSlash;
|
||||||
|
PN = Res.ProperNoun; -- ProperNoun : Type = {s: Str ; a:Agreement ; isPlace : Bool};
|
||||||
|
Conj = Res.Conjunction; -- Conjunction: Type = {s : AgrConj =>Str ;s2 : Str ; n : Number} ; -- conjunction e.g. "and"
|
||||||
|
-- see Structural for explanation of this structure
|
||||||
|
Predet = {s : Str ; s2 : Str; isMWE : Bool; isInflected : Bool}; -- predeterminer (prefixed Quant) e.g. "all"
|
||||||
|
RP = {s : Res.RCase => Res.Agreement => Str ; rObjVariant2: Res.Agreement => Str} ;
|
||||||
|
RCl ={
|
||||||
|
s : Str ; --subject
|
||||||
|
rp: Res.RCase => Res.Agreement => Str;
|
||||||
|
rObjVariant2: Res.Agreement => Str;
|
||||||
|
subjAgr : Res.AgrExist;
|
||||||
|
root : Str;
|
||||||
|
morphs : Res.VFormMini => Res.VerbMorphPos =>Str;
|
||||||
|
compl : Str; -- after verb: complement, adverbs
|
||||||
|
agr : Res.AgrExist
|
||||||
|
} ;
|
||||||
|
--VPSlash ={s:Str; morphs: VMorphs}; --VPSlash ; -- verb phrase missing complement e.g. "give to John"
|
||||||
|
--ClSlash;-- clause missing NP (S/NP in GPSG) e.g. "she looks at"
|
||||||
|
ClSlash = {
|
||||||
|
s : Str ; --subject
|
||||||
|
subjAgr : Res.Agreement;
|
||||||
|
root : Str;
|
||||||
|
morphs : Res.VFormMini => Res.VerbMorphPos =>Str --; compl : Str -- after verb: complement, adverbs
|
||||||
|
} ;
|
||||||
|
Numeral = {s : Res.CardOrd=>Res.Agreement=> Str ; g : Res.Gender; n: Res.Number} ;
|
||||||
|
Digits = {s : Res.CardOrd => Res.Agreement=>Str ; n : Res.Number ; tail : Px.DTail} ;
|
||||||
|
Ord = {s :Res.Agreement=>Str; position1:Res.Position1} ;
|
||||||
|
Card = {s :Res.Agreement=>Str; n : Res.Number} ;
|
||||||
|
IP = {s :Str ; other:Str; n : Res.Number; isVerbSuffix: Bool; requiresIPPrefix: Bool; aux:Str; endOfSentence:Bool}; -- other holds the Idet without a prefix
|
||||||
|
IAdv = {s : Str ; requiresSubjPrefix: Bool};
|
||||||
|
IDet = {s : Str ; n : Res.Number; requiresSubjPrefix: Bool};
|
||||||
|
IQuant = {s : Res.Number =>Str ; requiresSubjPrefix: Bool};
|
||||||
|
DAP = Res.Determiner ;
|
||||||
|
N2 = Res.Noun ** {c2 : Res.Agreement =>Str}; -- relational noun e.g. "son"
|
||||||
|
Prep = Res.Preposition; -- preposition, or just case e.g. "in"
|
||||||
|
N3 = N2 ** {c3 : Res.Agreement =>Str};
|
||||||
|
VV = Res.Verb ** {inf:Str; whenUsed: Res.VVMood}; --inf is the other verb
|
||||||
|
|
||||||
|
linref
|
||||||
|
Cl =\cl -> cl.s ++ Res.mkSubjClitic cl.subjAgr ++ cl.root ++ BIND ++ cl.pres;
|
||||||
|
QCl =\qcl -> qcl.s ++ qcl.posibleSubAgr ! (Res.mkAgreement Res.MU_BA Res.P3 Res.Sg) ++ qcl.root ++ BIND ++ qcl.pres;
|
||||||
|
VP =\vp -> vp.adv ++ vp.s ++ BIND ++ vp.pres ++ vp.comp ++vp.comp2;
|
||||||
|
VPSlash =\vpslash -> vpslash.s ++ BIND ++ vpslash.pres;
|
||||||
|
|
||||||
|
{-
|
||||||
|
--1 Cat: the Category System
|
||||||
|
|
||||||
|
-- The category system is central to the library in the sense
|
||||||
|
-- that the other modules ($Adjective$, $Adverb$, $Noun$, $Verb$ etc)
|
||||||
|
-- communicate through it. This means that a e.g. a function using
|
||||||
|
-- $NP$s in $Verb$ need not know how $NP$s are constructed in $Noun$:
|
||||||
|
-- it is enough that both $Verb$ and $Noun$ use the same type $NP$,
|
||||||
|
-- which is given here in $Cat$.
|
||||||
|
--
|
||||||
|
-- Some categories are inherited from [``Common`` Common.html].
|
||||||
|
-- The reason they are defined there is that they have the same
|
||||||
|
-- implementation in all languages in the resource (typically,
|
||||||
|
-- just a string). These categories are
|
||||||
|
-- $AdA, AdN, AdV, Adv, Ant, CAdv, IAdv, PConj, Phr$,
|
||||||
|
-- $Pol, SC, Tense, Text, Utt, Voc, Interj$.
|
||||||
|
--
|
||||||
|
-- Moreover, the list categories $ListAdv, ListAP, ListNP, ListS$
|
||||||
|
-- are defined on $Conjunction$ and only used locally there.
|
||||||
|
|
||||||
|
|
||||||
|
abstract Cat = Common ** {
|
||||||
|
|
||||||
|
cat
|
||||||
|
|
||||||
|
--2 Sentences and clauses
|
||||||
|
|
||||||
|
-- Constructed in [Sentence Sentence.html], and also in
|
||||||
|
-- [Idiom Idiom.html].
|
||||||
|
|
||||||
|
S ; -- declarative sentence e.g. "she lived here"
|
||||||
|
QS ; -- question e.g. "where did she live"
|
||||||
|
RS ; -- relative e.g. "in which she lived"
|
||||||
|
Cl ; -- declarative clause, with all tenses e.g. "she looks at this"
|
||||||
|
ClSlash;-- clause missing NP (S/NP in GPSG) e.g. "she looks at"
|
||||||
|
SSlash ;-- sentence missing NP e.g. "she has looked at"
|
||||||
|
Imp ; -- imperative e.g. "look at this"
|
||||||
|
|
||||||
|
--2 Questions and interrogatives
|
||||||
|
|
||||||
|
-- Constructed in [Question Question.html].
|
||||||
|
|
||||||
|
QCl ; -- question clause, with all tenses e.g. "why does she walk"
|
||||||
|
IP ; -- interrogative pronoun e.g. "who"
|
||||||
|
IComp ; -- interrogative complement of copula e.g. "where"
|
||||||
|
IDet ; -- interrogative determiner e.g. "how many"
|
||||||
|
IQuant; -- interrogative quantifier e.g. "which"
|
||||||
|
|
||||||
|
--2 Relative clauses and pronouns
|
||||||
|
|
||||||
|
-- Constructed in [Relative Relative.html].
|
||||||
|
|
||||||
|
RCl ; -- relative clause, with all tenses e.g. "in which she lives"
|
||||||
|
RP ; -- relative pronoun e.g. "in which"
|
||||||
|
|
||||||
|
--2 Verb phrases
|
||||||
|
|
||||||
|
-- Constructed in [Verb Verb.html].
|
||||||
|
|
||||||
|
VP ; -- verb phrase e.g. "is very warm"
|
||||||
|
Comp ; -- complement of copula, such as AP e.g. "very warm"
|
||||||
|
VPSlash ; -- verb phrase missing complement e.g. "give to John"
|
||||||
|
|
||||||
|
--2 Adjectival phrases
|
||||||
|
|
||||||
|
-- Constructed in [Adjective Adjective.html].
|
||||||
|
|
||||||
|
AP ; -- adjectival phrase e.g. "very warm"
|
||||||
|
|
||||||
|
--2 Nouns and noun phrases
|
||||||
|
|
||||||
|
-- Constructed in [Noun Noun.html].
|
||||||
|
-- Many atomic noun phrases e.g. "everybody"
|
||||||
|
-- are constructed in [Structural Structural.html].
|
||||||
|
-- The determiner structure is
|
||||||
|
-- ``` Predet (QuantSg | QuantPl Num) Ord
|
||||||
|
-- as defined in [Noun Noun.html].
|
||||||
|
|
||||||
|
CN ; -- common noun (without determiner) e.g. "red house"
|
||||||
|
NP ; -- noun phrase (subject or object) e.g. "the red house"
|
||||||
|
Pron ; -- personal pronoun e.g. "she"
|
||||||
|
Det ; -- determiner phrase e.g. "those seven"
|
||||||
|
Predet ; -- predeterminer (prefixed Quant) e.g. "all"
|
||||||
|
Quant ; -- quantifier ('nucleus' of Det) e.g. "this/these"
|
||||||
|
Num ; -- number determining element e.g. "seven"
|
||||||
|
Card ; -- cardinal number e.g. "seven"
|
||||||
|
ACard ; -- adjective like cardinal e.g. "few", "many"
|
||||||
|
Ord ; -- ordinal number (used in Det) e.g. "seventh"
|
||||||
|
DAP ; -- determiner with adjective e.g. "three small"
|
||||||
|
|
||||||
|
--2 Numerals
|
||||||
|
|
||||||
|
-- Constructed in [Numeral Numeral.html].
|
||||||
|
|
||||||
|
Numeral ; -- cardinal or ordinal in words e.g. "five/fifth"
|
||||||
|
Digits ; -- cardinal or ordinal in digits e.g. "1,000/1,000th"
|
||||||
|
|
||||||
|
--2 Structural words
|
||||||
|
|
||||||
|
-- Constructed in [Structural Structural.html].
|
||||||
|
|
||||||
|
Conj ; -- conjunction e.g. "and"
|
||||||
|
---b DConj ; -- distributed conjunction e.g. "both - and"
|
||||||
|
Subj ; -- subjunction e.g. "if"
|
||||||
|
Prep ; -- preposition, or just case e.g. "in"
|
||||||
|
|
||||||
|
--2 Words of open classes
|
||||||
|
|
||||||
|
-- These are constructed in [Lexicon Lexicon.html] and in
|
||||||
|
-- additional lexicon modules.
|
||||||
|
|
||||||
|
V ; -- one-place verb e.g. "sleep"
|
||||||
|
V2 ; -- two-place verb e.g. "love"
|
||||||
|
V3 ; -- three-place verb e.g. "show"
|
||||||
|
VV ; -- verb-phrase-complement verb e.g. "want"
|
||||||
|
VS ; -- sentence-complement verb e.g. "claim"
|
||||||
|
VQ ; -- question-complement verb e.g. "wonder"
|
||||||
|
VA ; -- adjective-complement verb e.g. "look"
|
||||||
|
V2V ; -- verb with NP and V complement e.g. "cause"
|
||||||
|
V2S ; -- verb with NP and S complement e.g. "tell"
|
||||||
|
V2Q ; -- verb with NP and Q complement e.g. "ask"
|
||||||
|
V2A ; -- verb with NP and AP complement e.g. "paint"
|
||||||
|
|
||||||
|
A ; -- one-place adjective e.g. "warm"
|
||||||
|
A2 ; -- two-place adjective e.g. "divisible"
|
||||||
|
|
||||||
|
N ; -- common noun e.g. "house"
|
||||||
|
N2 ; -- relational noun e.g. "son"
|
||||||
|
N3 ; -- three-place relational noun e.g. "connection"
|
||||||
|
PN ; -- proper name e.g. "Paris"
|
||||||
|
|
||||||
|
-- DEPRECATED: QuantSg, QuantPl
|
||||||
|
--- QuantSg ;-- quantifier ('nucleus' of sing. Det) e.g. "every"
|
||||||
|
--- QuantPl ;-- quantifier ('nucleus' of plur. Det) e.g. "many"
|
||||||
|
|
||||||
|
-}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -123,6 +123,20 @@ lin
|
|||||||
travel_V = mkV "gyend";--: V ;
|
travel_V = mkV "gyend";--: V ;
|
||||||
walk_V = mkV "ribá" "ta" "si"; --: V ; or kuribata Runynakore it is different
|
walk_V = mkV "ribá" "ta" "si"; --: V ; or kuribata Runynakore it is different
|
||||||
|
|
||||||
|
-- A verb whose complement is a sentence
|
||||||
|
fear_VS = mkVS (lin V (mkV "tin")); --: VS ;
|
||||||
|
hope_VS = mkVS (lin V (mkV "siga")); --: VS ; -- a bit complicated because what we normally use is nyine amatsiko i.e usin the noun. The verb should be kwesiga but this seems borrowed from Luganda
|
||||||
|
know_VS = mkVS (lin V (mkV "manya")); --: VS ;
|
||||||
|
say_VS = mkVS (lin V (mkV "gi" "ra" "zire"));--: VS ;
|
||||||
|
|
||||||
|
-- verbs whose complements are questions
|
||||||
|
know_VQ = mkVQ (lin V (mkV "many")); --: VQ ;
|
||||||
|
--wonder_VQ : VQ ;
|
||||||
|
|
||||||
|
-- Verb whose complement is an adjective
|
||||||
|
become_VA = mkVA (lin V mkBecome);--: VA ;
|
||||||
|
|
||||||
|
|
||||||
--Verbs that have a noun Phrase complement and a verb phrase complement (V2V)
|
--Verbs that have a noun Phrase complement and a verb phrase complement (V2V)
|
||||||
--beg_V2V : V2V ;
|
--beg_V2V : V2V ;
|
||||||
--Adverbs
|
--Adverbs
|
||||||
@@ -131,9 +145,10 @@ lin
|
|||||||
|
|
||||||
--today_Adv = mkAdv "erizooba" AgrNo;
|
--today_Adv = mkAdv "erizooba" AgrNo;
|
||||||
|
|
||||||
father_N2 = mkN2 (mkN "tata" MU_BA) (mkPrep [] [] True) ;
|
father_N2 = mkN2 (mkN "tata" MU_BA) (lin Prep (mkPrep [] [] True)) ;
|
||||||
|
|
||||||
distance_N3 = mkN3 (mkN "orugyendo" ZERO_BU) (mkPrep "kurunga" "" False) (mkPrep "mpáka" "" False); --could orugyendo work in its place?
|
distance_N3 = mkN3 (mkN "orugyendo" ZERO_BU) (lin Prep (mkPrep "kurunga" "" False)) (lin Prep (mkPrep "mpáka" "" False)); --could orugyendo work in its place?
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
oper
|
oper
|
||||||
|
|||||||
@@ -74,6 +74,15 @@ oper
|
|||||||
<False,True> => n ** {c2 =\\_=> p.s ; c3 = mkGenPrepWithIVClitic; lock_N2 = <>;lock_N3 = <>} ;
|
<False,True> => n ** {c2 =\\_=> p.s ; c3 = mkGenPrepWithIVClitic; lock_N2 = <>;lock_N3 = <>} ;
|
||||||
<True,True> => n ** {c2 = mkGenPrepWithIVClitic; c3 = mkGenPrepWithIVClitic; lock_N2 = <>; lock_N3 = <>}
|
<True,True> => n ** {c2 = mkGenPrepWithIVClitic; c3 = mkGenPrepWithIVClitic; lock_N2 = <>; lock_N3 = <>}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
mkVS : V -> VS ; -- sentence-compl e.g. say (that S)
|
||||||
|
mkVS v = lin VS v ;
|
||||||
|
mkVQ : V -> VQ ; -- e.g. wonder (QS)
|
||||||
|
mkVQ v = lin VQ v ;
|
||||||
|
|
||||||
|
mkVA : V -> VA ; -- e.g. become (AP)
|
||||||
|
mkVA v = lin VA v ;
|
||||||
|
|
||||||
{-
|
{-
|
||||||
prepV2 v p = lin V2 {s = v.s ; p = v.p ; c2 = p.s ; isRefl = v.isRefl} ;
|
prepV2 v p = lin V2 {s = v.s ; p = v.p ; c2 = p.s ; isRefl = v.isRefl} ;
|
||||||
dirV2 v = prepV2 v noPrep ;
|
dirV2 v = prepV2 v noPrep ;
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ param
|
|||||||
|
|
||||||
-}
|
-}
|
||||||
NounState = Complete | Incomplete ;
|
NounState = Complete | Incomplete ;
|
||||||
|
VVMood = VVImp | VVPerf | VVBoth;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1109,7 +1109,22 @@ mkSubjPrefix : Agreement -> Str =\a ->case a of {
|
|||||||
RestOfVerb;
|
RestOfVerb;
|
||||||
oper
|
oper
|
||||||
VMorphs : Type = VFormMini => VerbMorphPos => Str;
|
VMorphs : Type = VFormMini => VerbMorphPos => Str;
|
||||||
VerbPhrase: Type = {s:Str; pres:Str; perf:Str; morphs: VMorphs ; comp:Str ; isCompApStem : Bool; agr : AgrExist; isRegular:Bool};
|
VerbPhrase: Type = {
|
||||||
|
s:Str;
|
||||||
|
pres:Str;
|
||||||
|
perf:Str;
|
||||||
|
morphs: VMorphs ;
|
||||||
|
isRegular:Bool;
|
||||||
|
comp:Str ;
|
||||||
|
comp2:Str;
|
||||||
|
ap : Str;
|
||||||
|
isCompApStem : Bool;
|
||||||
|
agr : AgrExist;
|
||||||
|
adv:Str;
|
||||||
|
containsAdv: Bool;
|
||||||
|
adV:Str;
|
||||||
|
containsAdv:Bool
|
||||||
|
};
|
||||||
-- in VP formation, all verbs are lifted to GVerb, but morphology doesn't need to know this
|
-- in VP formation, all verbs are lifted to GVerb, but morphology doesn't need to know this
|
||||||
verb2gverb : Verb ->Str -> GVerb = \v, ba -> {
|
verb2gverb : Verb ->Str -> GVerb = \v, ba -> {
|
||||||
s = table{
|
s = table{
|
||||||
@@ -1129,12 +1144,12 @@ mkSubjPrefix : Agreement -> Str =\a ->case a of {
|
|||||||
be_GVerb : GVerb = {
|
be_GVerb : GVerb = {
|
||||||
s= table{True => "ri"; False =>"b" };
|
s= table{True => "ri"; False =>"b" };
|
||||||
morphs = \\form, morphs =>[];
|
morphs = \\form, morphs =>[];
|
||||||
|
|
||||||
|
|
||||||
isAux = True};
|
isAux = True};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
mkBecome : Verb ={
|
||||||
|
s = "b" ; pres="a"; perf="ire"; morphs= mkVerbMorphs; isRegular=False};
|
||||||
|
|
||||||
|
|
||||||
--be1_Verb: Verb = {s="b"; pres = "e"; perf="a"; morphs = mkVerbMorphs};
|
--be1_Verb: Verb = {s="b"; pres = "e"; perf="a"; morphs = mkVerbMorphs};
|
||||||
@@ -1283,7 +1298,20 @@ mkSubjPrefix : Agreement -> Str =\a ->case a of {
|
|||||||
Numer : Type = { s: Agreement => Str ; n : Number};
|
Numer : Type = { s: Agreement => Str ; n : Number};
|
||||||
|
|
||||||
--VPSlash : Type = VerbPhrase ** { c : Str };
|
--VPSlash : Type = VerbPhrase ** { c : Str };
|
||||||
VPSlash : Type = {s:Str; pres:Str; perf:Str; morphs: VMorphs; comp: Str; comp2:Str; isRegular:Bool}; --comp is empty
|
VPSlash : Type = {
|
||||||
|
s:Str;
|
||||||
|
pres:Str;
|
||||||
|
perf:Str;
|
||||||
|
morphs: VMorphs;
|
||||||
|
comp: Str;
|
||||||
|
comp2:Str;
|
||||||
|
ap:Str;
|
||||||
|
isRegular:Bool;
|
||||||
|
adv:Str;
|
||||||
|
containsAdv:Bool;
|
||||||
|
adV:Str;
|
||||||
|
containsAdV:Bool
|
||||||
|
}; --comp is empty
|
||||||
|
|
||||||
|
|
||||||
{-
|
{-
|
||||||
|
|||||||
@@ -199,9 +199,18 @@ lin
|
|||||||
pos = PreDeterminer;
|
pos = PreDeterminer;
|
||||||
doesAgree = True
|
doesAgree = True
|
||||||
};--: Det ;
|
};--: Det ;
|
||||||
|
|
||||||
|
want_VV = {s = "yend"; pres="da"; perf = "zire"; morphs=mkVerbMorphs; isRegular=True; inf=[]; whenUsed = VVBoth};
|
||||||
|
can8know_VV = {s = "baas"; pres="a"; perf = "ize"; morphs=mkVerbMorphs; isRegular=True; inf=[]; whenUsed = VVBoth};--: VV ; -- can (capacity)
|
||||||
|
can_VV = {s = "baas"; pres="a"; perf = "ize"; morphs=mkVerbMorphs; isRegular=True; inf=[]; whenUsed = VVBoth};--: VV ; -- can (possibility)
|
||||||
|
-- must_VV used especially in the perfective mood: see dictionary entry shemerera on Pg 501 of Mpairwe
|
||||||
|
-- must has no passive form
|
||||||
|
must_VV = {s = "shemere"; pres="ra"; perf = "ire"; morphs=mkVerbMorphs; isRegular=False; inf=[]; whenUsed = VVPerf}; --VV
|
||||||
--somebody_NP = {}; --: NP ;
|
--somebody_NP = {}; --: NP ;
|
||||||
--something_NP : NP ;
|
--something_NP : NP ;
|
||||||
--somewhere_Adv : Adv ;
|
--somewhere_Adv : Adv ;
|
||||||
|
|
||||||
|
that_Subj = ss "that" ;
|
||||||
{-
|
{-
|
||||||
--1 Structural: Structural Words
|
--1 Structural: Structural Words
|
||||||
--
|
--
|
||||||
|
|||||||
@@ -4,20 +4,40 @@ concrete VerbCgg of Verb = CatCgg ** open ResCgg, Prelude in {
|
|||||||
|
|
||||||
lin
|
lin
|
||||||
|
|
||||||
UseV v = {s = v.s ; pres =v.pres; perf = v.perf; morphs = v.morphs; comp =[]; isCompApStem = False; agr = AgrNo; isRegular = v.isRegular}; --: V -> VP; -- sleep --ignoring object agreement
|
UseV v = {
|
||||||
|
s = v.s ;
|
||||||
|
pres =v.pres;
|
||||||
|
perf = v.perf;
|
||||||
|
morphs = v.morphs;
|
||||||
|
comp =[];
|
||||||
|
comp2 = [];
|
||||||
|
ap =[];
|
||||||
|
isCompApStem = False;
|
||||||
|
agr = AgrNo;
|
||||||
|
isRegular = v.isRegular;
|
||||||
|
adv =[];
|
||||||
|
containsAdv =False;
|
||||||
|
adV =[];
|
||||||
|
containsAdV = False;
|
||||||
|
}; --: V -> VP; -- sleep --ignoring object agreement
|
||||||
|
|
||||||
-- UseComp : Comp -> VP ; -- be warm means complement of a copula especially adjectival Phrase
|
-- UseComp : Comp -> VP ; -- be warm means complement of a copula especially adjectival Phrase
|
||||||
--VerbPhrase: Type ={s:Agr=>Polarity=>Tense=>Anteriority=>Str};
|
--AdjectivalPhrase : Type = {s : Str ; post : Str; isPre : Bool; isProper : Bool; isPrep: Bool};
|
||||||
--AdjectivalPhrase : Type = {s : Str ; post : Str; isPre : Bool; isProper : Bool; isPrep: Bool};
|
|
||||||
UseComp comp = {
|
UseComp comp = {
|
||||||
s = comp.s; --Assuming there is no AP which is prepositional
|
s = comp.s; --Assuming there is no AP which is prepositional
|
||||||
pres =[];
|
pres =[];
|
||||||
perf = [];
|
perf = [];
|
||||||
morphs=\\form,morphs=>[] ;
|
morphs=\\form,morphs=>[];
|
||||||
comp = [] ;
|
comp = [];
|
||||||
|
comp2 = [];
|
||||||
|
ap = [];
|
||||||
isCompApStem = False;
|
isCompApStem = False;
|
||||||
agr = AgrNo;
|
agr = AgrNo;
|
||||||
isRegular = False
|
isRegular = False;
|
||||||
|
adv = [];
|
||||||
|
containsAdv =False;
|
||||||
|
adV =[];
|
||||||
|
containsAdV = False;
|
||||||
}; --its not generating any sentence
|
}; --its not generating any sentence
|
||||||
|
|
||||||
-- CompAP : AP -> Comp; -- (be) small
|
-- CompAP : AP -> Comp; -- (be) small
|
||||||
@@ -29,7 +49,8 @@ lin
|
|||||||
-- CompAdv : Adv -> Comp ; -- (be) here
|
-- CompAdv : Adv -> Comp ; -- (be) here
|
||||||
CompAdv adv =adv;
|
CompAdv adv =adv;
|
||||||
|
|
||||||
|
--CompCN : CN -> Comp ; -- (be) a man/men
|
||||||
|
CompCN cn = ; -- (be) a man/men
|
||||||
-- SlashV2a : V2 -> VPSlash ; -- love (it)
|
-- SlashV2a : V2 -> VPSlash ; -- love (it)
|
||||||
SlashV2a v2 ={
|
SlashV2a v2 ={
|
||||||
s =v2.s;
|
s =v2.s;
|
||||||
@@ -38,7 +59,12 @@ lin
|
|||||||
morphs = v2.morphs;
|
morphs = v2.morphs;
|
||||||
comp = [];
|
comp = [];
|
||||||
comp2 =[];
|
comp2 =[];
|
||||||
isRegular =v2.isRegular
|
ap =[];
|
||||||
|
isRegular =v2.isRegular;
|
||||||
|
adv=[];
|
||||||
|
containsAdv =False;
|
||||||
|
adV =[];
|
||||||
|
containsAdV = False;
|
||||||
};
|
};
|
||||||
--Slash2V3 : V3 -> NP -> VPSlash ; -- give it (to her)
|
--Slash2V3 : V3 -> NP -> VPSlash ; -- give it (to her)
|
||||||
Slash2V3 v3 np ={
|
Slash2V3 v3 np ={
|
||||||
@@ -48,7 +74,12 @@ lin
|
|||||||
morphs = v3.morphs;
|
morphs = v3.morphs;
|
||||||
comp = np.s ! Acc;
|
comp = np.s ! Acc;
|
||||||
comp2 =[];
|
comp2 =[];
|
||||||
isRegular = v3.isRegular
|
ap =[];
|
||||||
|
isRegular = v3.isRegular;
|
||||||
|
adv = [];
|
||||||
|
containsAdv =False;
|
||||||
|
adV =[];
|
||||||
|
containsAdV = False;
|
||||||
};
|
};
|
||||||
|
|
||||||
--Slash3V3 : V3 -> NP -> VPSlash ; -- give (it) to her
|
--Slash3V3 : V3 -> NP -> VPSlash ; -- give (it) to her
|
||||||
@@ -59,7 +90,27 @@ lin
|
|||||||
morphs = v3.morphs;
|
morphs = v3.morphs;
|
||||||
comp = [];
|
comp = [];
|
||||||
comp2 = np.s ! Acc;
|
comp2 = np.s ! Acc;
|
||||||
isRegular = v3.isRegular
|
ap = [];
|
||||||
|
isRegular = v3.isRegular;
|
||||||
|
adv = [];
|
||||||
|
containsAdv =False;
|
||||||
|
adV =[];
|
||||||
|
containsAdV = False;
|
||||||
|
};
|
||||||
|
--SlashVV : VV -> VPSlash -> VPSlash ; -- want to buy
|
||||||
|
SlashVV vv vpslash ={
|
||||||
|
s =vv.s;
|
||||||
|
pres =vv.pres;
|
||||||
|
perf = vv.perf;
|
||||||
|
morphs = vv.morphs;
|
||||||
|
comp = vpslash.s ++ BIND ++ vpslash.pres;
|
||||||
|
comp2 = [];
|
||||||
|
ap = [];
|
||||||
|
isRegular = vv.isRegular;
|
||||||
|
adv = [];
|
||||||
|
containsAdv = False;
|
||||||
|
adV =[];
|
||||||
|
containsAdV = False;
|
||||||
};
|
};
|
||||||
--SlashV2V : V2V -> VP -> VPSlash ; -- beg (her) to go
|
--SlashV2V : V2V -> VP -> VPSlash ; -- beg (her) to go
|
||||||
|
|
||||||
@@ -74,9 +125,14 @@ lin
|
|||||||
morphs = vpslash.morphs;
|
morphs = vpslash.morphs;
|
||||||
comp = vpslash.comp ++ np.s ! Acc;
|
comp = vpslash.comp ++ np.s ! Acc;
|
||||||
comp2 =vpslash.comp2; --should be empty
|
comp2 =vpslash.comp2; --should be empty
|
||||||
|
ap = [];
|
||||||
isCompApStem = False;
|
isCompApStem = False;
|
||||||
agr = AgrYes np.agr;
|
agr = AgrYes np.agr;
|
||||||
isRegular = vpslash.isRegular
|
isRegular = vpslash.isRegular;
|
||||||
|
adv = [];
|
||||||
|
containsAdv =False;
|
||||||
|
adV =[];
|
||||||
|
containsAdV = False;
|
||||||
};
|
};
|
||||||
-- AdvVP : VP -> Adv -> VP ; -- sleep here
|
-- AdvVP : VP -> Adv -> VP ; -- sleep here
|
||||||
-- VerbPhrase: Type = {s:Str; morphs: VMorphs ; comp:Str ; isCompApStem : Bool; agr : AgrExist};
|
-- VerbPhrase: Type = {s:Str; morphs: VMorphs ; comp:Str ; isCompApStem : Bool; agr : AgrExist};
|
||||||
@@ -87,15 +143,195 @@ lin
|
|||||||
perf = vp.perf;
|
perf = vp.perf;
|
||||||
morphs = vp.morphs;
|
morphs = vp.morphs;
|
||||||
comp = adv.s;
|
comp = adv.s;
|
||||||
comp2 = [];
|
comp2 = [];
|
||||||
|
ap =[];
|
||||||
isCompApStem = False;
|
isCompApStem = False;
|
||||||
agr = AgrNo;
|
agr = AgrNo;
|
||||||
isRegular = vp.isRegular
|
isRegular = vp.isRegular;
|
||||||
|
adv = [];
|
||||||
|
containsAdv =True;
|
||||||
|
adV =[];
|
||||||
|
containsAdV = False;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
-- AdVVP : AdV -> VP -> VP ; -- always sleep
|
||||||
|
AdVVP adv vp = {
|
||||||
|
s=vp.s;
|
||||||
|
pres =vp.pres;
|
||||||
|
perf = vp.perf;
|
||||||
|
morphs = vp.morphs;
|
||||||
|
comp = [];
|
||||||
|
comp2 =[];
|
||||||
|
ap = [];
|
||||||
|
isCompApStem = False;
|
||||||
|
agr = AgrNo;
|
||||||
|
isRegular = vp.isRegular;
|
||||||
|
adv = adv.s;
|
||||||
|
containsAdv =True;
|
||||||
|
adV =[];
|
||||||
|
containsAdV = False;
|
||||||
|
};
|
||||||
|
|
||||||
|
--AdvVPSlash : VPSlash -> Adv -> VPSlash ; -- use (it) here
|
||||||
|
{-
|
||||||
|
FUTURE:
|
||||||
|
The problem here could rise from the agreement if the adverb agrees.
|
||||||
|
We could change the type of adv to be Agreement => Str such that we have NONE.
|
||||||
|
-}
|
||||||
|
AdvVPSlash vpslash adv ={
|
||||||
|
s =vpslash.s;
|
||||||
|
pres =vpslash.pres;
|
||||||
|
perf = vpslash.perf;
|
||||||
|
morphs = vpslash.morphs;
|
||||||
|
comp = [];
|
||||||
|
comp2 = np.s ! Acc;
|
||||||
|
ap = [];
|
||||||
|
isRegular = v3.isRegular;
|
||||||
|
adv = adv.s;
|
||||||
|
containsAdv =True;
|
||||||
|
adV =[];
|
||||||
|
containsAdV = False;
|
||||||
|
};
|
||||||
|
-- Adverb directly attached to verb
|
||||||
|
--AdVVPSlash : AdV -> VPSlash -> VPSlash ; -- always use (it)
|
||||||
|
{- NOTE:
|
||||||
|
This is a hack mainly because we need a separate field for AdV type
|
||||||
|
|
||||||
|
-}
|
||||||
|
AdVVPSlash adV vpslash ={
|
||||||
|
s =vpslash.s;
|
||||||
|
pres =vpslash.pres;
|
||||||
|
perf = vpslash.perf;
|
||||||
|
morphs = vpslash.morphs;
|
||||||
|
comp = adV.s;
|
||||||
|
comp2 = np.s ! Acc;
|
||||||
|
ap = [];
|
||||||
|
isRegular = v3.isRegular;
|
||||||
|
adv = [];
|
||||||
|
containsAdv =False;
|
||||||
|
adV =[];
|
||||||
|
containsAdV = False;
|
||||||
|
};
|
||||||
|
-- Verb phrases are constructed from verbs by providing their
|
||||||
|
-- complements. There is one rule for each verb category.
|
||||||
|
|
||||||
|
{- NOTE: This is a hack
|
||||||
|
--ComplVV : VV -> VP -> VP ; -- want to run
|
||||||
|
--This function requires the remodelling of VP to accomodate two Verbs.
|
||||||
|
--
|
||||||
|
-}
|
||||||
|
ComplVV vv vp = let vpPres = vp.s ++ BIND ++ vp.pres;
|
||||||
|
in case vv.whenUsed of {
|
||||||
|
VVPerf => {
|
||||||
|
s= vv.s ++ BIND ++ vv.perf ++ vpPres;
|
||||||
|
pres =vv.pres; perf=vv.perf;
|
||||||
|
morphs = vv.morphs;
|
||||||
|
comp=vp.comp ;
|
||||||
|
comp2 = vp.comp2;
|
||||||
|
ap = [];
|
||||||
|
isCompApStem = False; agr = AgrNo;
|
||||||
|
isRegular = vv.isRegular;
|
||||||
|
adv =[];
|
||||||
|
containsAdv =False;
|
||||||
|
adV =[];
|
||||||
|
containsAdV = False;
|
||||||
|
};
|
||||||
|
_ => {
|
||||||
|
s= vv.s ++ BIND ++ vv.pres ++ vpPres;
|
||||||
|
pres =vv.pres;
|
||||||
|
perf=vv.perf;
|
||||||
|
morphs = vv.morphs;
|
||||||
|
comp=vp.comp ;
|
||||||
|
comp2 = vp.comp2;
|
||||||
|
ap = [];
|
||||||
|
isCompApStem = False;
|
||||||
|
agr = AgrNo;
|
||||||
|
isRegular = vv.isRegular;
|
||||||
|
adv =[];
|
||||||
|
containsAdv =False;
|
||||||
|
adV =[];
|
||||||
|
containsAdV = False;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
--ComplVS : VS -> S -> VP ; -- say that she runs
|
||||||
|
ComplVS vs s = {
|
||||||
|
s= vs.s;
|
||||||
|
pres =vs.pres;
|
||||||
|
perf=vs.perf;
|
||||||
|
morphs = vs.morphs;
|
||||||
|
comp=s.s ;
|
||||||
|
comp2 = [];
|
||||||
|
ap = [];
|
||||||
|
isCompApStem = False;
|
||||||
|
agr = AgrNo;
|
||||||
|
isRegular = vs.isRegular;
|
||||||
|
adv =[];
|
||||||
|
containsAdv =False;
|
||||||
|
adV =[];
|
||||||
|
containsAdV = False;
|
||||||
|
};
|
||||||
|
|
||||||
|
{-
|
||||||
|
This function may need revision as I have not met such kinds of questions
|
||||||
|
-}
|
||||||
|
--ComplVQ : VQ -> QS -> VP ; -- wonder who runs
|
||||||
|
ComplVQ vq qs = {
|
||||||
|
s= vq.s;
|
||||||
|
pres =vq.pres;
|
||||||
|
perf=vq.perf;
|
||||||
|
morphs = vq.morphs;
|
||||||
|
comp=qs.s ;
|
||||||
|
comp2 = [];
|
||||||
|
ap = [];
|
||||||
|
isCompApStem = False;
|
||||||
|
agr = AgrNo;
|
||||||
|
isRegular = vq.isRegular;
|
||||||
|
adv =[];
|
||||||
|
containsAdv =False;
|
||||||
|
adV =[];
|
||||||
|
containsAdV = False;
|
||||||
|
};
|
||||||
|
|
||||||
|
{-
|
||||||
|
The adgectival Phrase is comlicated here.
|
||||||
|
|
||||||
|
The VP has to accomodate the whole structure of the Adjectival Phrase
|
||||||
|
|
||||||
|
For the timebeing, we can use the isCompApStem field but we need a separate field
|
||||||
|
-}
|
||||||
|
--ComplVA : VA -> AP -> VP ; -- they become red
|
||||||
|
--AP = {s : Str ; position1 : Res.Position1; isProper : Bool; isPrep: Bool};--Res.AdjectivalPhrase;
|
||||||
|
ComplVA va ap = {
|
||||||
|
s= va.s;
|
||||||
|
pres =va.pres;
|
||||||
|
perf=va.perf;
|
||||||
|
morphs = va.morphs;
|
||||||
|
comp=ap.s ;
|
||||||
|
comp2 = [];
|
||||||
|
ap =[];
|
||||||
|
isCompApStem = False;
|
||||||
|
agr = AgrNo;
|
||||||
|
isRegular = va.isRegular;
|
||||||
|
adv =[];
|
||||||
|
containsAdv =False;
|
||||||
|
adV =[];
|
||||||
|
containsAdV = False;
|
||||||
|
};
|
||||||
|
|
||||||
|
-- Copula alone
|
||||||
|
--UseCopula : VP ; -- be
|
||||||
|
UseCopula = mkBecome ** {
|
||||||
|
comp=[];
|
||||||
|
comp2 = [];
|
||||||
|
ap = [];
|
||||||
|
isCompApStem = False;
|
||||||
|
agr = AgrNo;
|
||||||
|
adv = [];
|
||||||
|
containsAdv = False;
|
||||||
|
adV =[];
|
||||||
|
containsAdV = False;
|
||||||
|
};
|
||||||
{-
|
{-
|
||||||
--1 The construction of verb phrases
|
--1 The construction of verb phrases
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user