mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-22 19:22:50 -06:00
extended mini resource grammar in examples, with Eng, Ita, Cmn (Mandarin Chinese by Jolene)
This commit is contained in:
156
examples/extmini/ResEng.gf
Normal file
156
examples/extmini/ResEng.gf
Normal file
@@ -0,0 +1,156 @@
|
||||
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") ;
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user