mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-09 13:09:33 -06:00
157 lines
4.2 KiB
Plaintext
157 lines
4.2 KiB
Plaintext
resource ResEng = open Prelude in {
|
|
|
|
-- parameters
|
|
|
|
param
|
|
Number = Sg | Pl ;
|
|
Case = Nom | Acc ;
|
|
Agr = Ag Number Person ;
|
|
TTense = TPres | TPerf | TPast | TFut ;
|
|
Person = Per1 | Per2 | Per3 ;
|
|
|
|
VForm = VInf | VPres | VPast | VPart ;
|
|
|
|
ClForm = ClDir | ClInv ;
|
|
QForm = QDir | QIndir ;
|
|
|
|
-- parts of speech
|
|
|
|
oper
|
|
VP = {
|
|
verb : AgrVerb ;
|
|
compl : Str
|
|
} ;
|
|
|
|
NP = {
|
|
s : Case => Str ;
|
|
a : Agr
|
|
} ;
|
|
|
|
-- verb as in VP, including copula
|
|
|
|
AgrVerb : Type = {
|
|
s : ClForm => TTense => Bool => Agr => {fin,inf : Str} ;
|
|
inf : Str
|
|
} ;
|
|
|
|
copula : AgrVerb = {
|
|
s = \\d,t,p,a => case <t,a> of {
|
|
<TPres,Ag Sg Per1> => {fin = "am" ; inf = neg p} ;
|
|
<TPres,Ag Sg Per3> => {fin = "is" ; inf = neg p} ;
|
|
<TPres,_ > => {fin = "are" ; inf = neg p} ;
|
|
<TPerf,Ag Sg Per3> => {fin = "has" ; inf = neg p ++ "been"} ;
|
|
<TPerf,_ > => {fin = "have" ; inf = neg p ++ "been"} ;
|
|
<TPast,Ag Sg (Per1 | Per3)> => {fin = "was" ; inf = neg p} ;
|
|
<TPast,_ > => {fin = "were" ; inf = neg p} ;
|
|
<TFut, _ > => {fin = "will" ; inf = neg p ++ "be"}
|
|
} ;
|
|
inf = "be"
|
|
} ;
|
|
|
|
agrV : Verb -> AgrVerb = \v ->
|
|
let
|
|
vinf = v.s ! VInf ;
|
|
vpart = v.s ! VPart
|
|
in {
|
|
s = \\d,t,p,a => case <d,t,p,a> of {
|
|
<ClDir,TPres,True, Ag Sg Per3> => {fin = v.s ! VPres ; inf = []} ;
|
|
<_, TPres,_, Ag Sg Per3> => {fin = "does" ; inf = neg p ++ vinf} ;
|
|
<ClDir,TPres,True, _ > => {fin = vinf ; inf = []} ;
|
|
<_, TPres,_, _ > => {fin = "do" ; inf = neg p ++ vinf} ;
|
|
<_, TPerf,_, Ag Sg Per3> => {fin = "has" ; inf = neg p ++ vpart} ;
|
|
<_, TPerf,_, _ > => {fin = "have" ; inf = neg p ++ vpart} ;
|
|
<ClDir,TPast,True, _ > => {fin = v.s ! VPast ; inf = []} ;
|
|
<_, TPast,_, _ > => {fin = "did" ; inf = neg p ++ vinf} ;
|
|
<_, TFut, _, _ > => {fin = "will" ; inf = neg p ++ vinf}
|
|
} ;
|
|
inf = vinf
|
|
} ;
|
|
|
|
agrAux : (_,_,_,_ : Str) -> AgrVerb = \can,could,beenableto, beableto -> {
|
|
s = \\d,t,p,a => case <t,a> of {
|
|
<TPres,_ > => {fin = can ; inf = neg p} ;
|
|
<TPerf,Ag Sg Per3> => {fin = "has" ; inf = neg p ++ beenableto} ;
|
|
<TPerf,_ > => {fin = "have" ; inf = neg p ++ beenableto} ;
|
|
<TPast,_ > => {fin = could ; inf = neg p} ;
|
|
<TFut, _ > => {fin = "will" ; inf = neg p ++ beableto}
|
|
} ;
|
|
inf = beableto
|
|
} ;
|
|
|
|
infVP : VP -> Str = \vp ->
|
|
vp.verb.inf ++ vp.compl ;
|
|
|
|
neg : Bool -> Str = \b -> case b of {True => [] ; False => "not"} ;
|
|
|
|
-- for coordination
|
|
|
|
conjAgr : Number -> Agr -> Agr -> Agr = \n,xa,ya ->
|
|
case <xa,ya> of {
|
|
<Ag xn xp, Ag yn yp> =>
|
|
Ag (conjNumber (conjNumber xn yn) n) (conjPerson xp yp)
|
|
} ;
|
|
|
|
conjNumber : Number -> Number -> Number = \m,n ->
|
|
case m of {Pl => Pl ; _ => n} ;
|
|
|
|
conjPerson : Person -> Person -> Person = \p,q ->
|
|
case <p,q> of {
|
|
<Per1,_> | <_,Per1> => Per1 ;
|
|
<Per2,_> | <_,Per2> => Per2 ;
|
|
_ => Per3
|
|
} ;
|
|
|
|
|
|
|
|
-- for morphology
|
|
|
|
Noun : Type = {s : Number => Str} ;
|
|
Adj : Type = {s : Str} ;
|
|
Verb : Type = {s : VForm => Str} ;
|
|
|
|
mkNoun : Str -> Str -> Noun = \man,men -> {
|
|
s = table {Sg => man ; Pl => men}
|
|
} ;
|
|
|
|
regNoun : Str -> Noun = \s ->
|
|
mkNoun s (s + "s") ; ----
|
|
|
|
mkAdj : Str -> Adj = \s -> ss s ;
|
|
|
|
mkVerb : (_,_,_,_ : Str) -> Verb =
|
|
\go,goes,went,gone -> {
|
|
s = table {
|
|
VInf => go ;
|
|
VPres => goes ;
|
|
VPast => went ;
|
|
VPart => gone
|
|
}
|
|
} ;
|
|
|
|
regVerb : Str -> Verb = \v -> case v of {
|
|
_ + "e" => mkVerb v (v + "s") (v + "d") (v + "d") ;
|
|
_ => mkVerb v (v + "s") (v + "ed") (v + "ed")
|
|
} ;
|
|
|
|
-- for structural words
|
|
|
|
mkDet : Str -> Number -> {s : Str ; n : Number} = \s,n -> {
|
|
s = s ;
|
|
n = n
|
|
} ;
|
|
|
|
pronNP : (s,a : Str) -> Number -> Person -> NP =
|
|
\s,a,n,p -> {
|
|
s = table {
|
|
Nom => s ;
|
|
Acc => a
|
|
} ;
|
|
a = Ag n p
|
|
} ;
|
|
|
|
-- phonological auxiliaries
|
|
|
|
vowel : pattern Str = #("a" | "e" | "i" | "o") ;
|
|
|
|
}
|