mirror of
https://github.com/GrammaticalFramework/gf-rgl.git
synced 2026-06-11 16:10:12 -06:00
added missing extensions (Codex)
This commit is contained in:
@@ -66,6 +66,7 @@ concrete CatFin of Cat = CommonX ** open ResFin, StemFin, Prelude in {
|
||||
Predet = {s : Number => NPForm => Str} ;
|
||||
Quant = {s1,sp : Number => Case => Str ; s2 : Harmony => Str ; isPoss : Bool ; isDef : Bool ; isNeg : Bool} ;
|
||||
Card = {s : Number => Case => Str ; n : Number} ;
|
||||
ACard = {s : Number => Case => Str ; n : Number} ;
|
||||
Num = {s : Number => Case => Str ; isNum : Bool ; n : Number} ;
|
||||
|
||||
-- Numeral
|
||||
|
||||
@@ -29,6 +29,9 @@ lin
|
||||
is_wrong_VP = mkVP (ParadigmsFin.mkAdv "väärässä") ;
|
||||
|
||||
n_units_AP card cn a = mkAP (lin AdA (mkUtt (lin NP (mkNP <lin Card card : Card> (lin CN cn))))) (lin A a) ;
|
||||
n_units_of_NP card cn np =
|
||||
mkNP (mkNP <lin Card card : Card> (lin CN cn))
|
||||
(SyntaxFin.mkAdv part_Prep (lin NP np)) ;
|
||||
|
||||
bottle_of_CN np = mkCN (lin N2 (mkN2 (mkN "pullo") (mkPrep partitive))) (lin NP np) | mkCN (lin N2 (mkN2 (mkN "pullollinen") (mkPrep partitive))) (lin NP np);
|
||||
cup_of_CN np = mkCN (lin N2 (mkN2 (mkN "kuppi") (mkPrep partitive))) (lin NP np) | mkCN (lin N2 (mkN2 (mkN "kupillinen") (mkPrep partitive))) (lin NP np) ;
|
||||
|
||||
@@ -3,15 +3,23 @@
|
||||
concrete ExtendFin of Extend =
|
||||
CatFin ** ExtendFunctor - [
|
||||
VPI2,VPS2,MkVPS,MkVPS2,ConjVPS2,ComplVPS2, ConsVPS, BaseVPS, ListVPS, VPS, ConjVPS,PredVPS,
|
||||
MkVPI,BaseVPI,ConsVPI,ConjVPI,ComplVPIVV,
|
||||
MkVPI2,ConjVPI2,ComplVPI2,ComplVPIVV
|
||||
,ListComp, BaseComp, ConsComp, ConjComp
|
||||
,ListImp, BaseImp, ConsImp, ConjImp
|
||||
|
||||
,ExistCN, ExistMassCN, ICompAP, ByVP
|
||||
,CompoundN, GenNP, GenIP, GenRP, AdvIsNP, EmbedSSlash
|
||||
,CompoundN, CompoundAP, GenNP, GenIP, GenRP, AdvIsNP, EmbedSSlash
|
||||
,PassVPSlash, PassAgentVPSlash
|
||||
,CardCNCard
|
||||
,UttAccNP
|
||||
,AdjAsCN, AdjAsNP
|
||||
,AdjAsCN, AdjAsNP, GerundCN, GerundNP, GerundAdv
|
||||
,ApposNP
|
||||
,PresPartAP, PastPartAP
|
||||
,PresPartAP, PastPartAP, PastPartAgentAP
|
||||
,PositAdVAdj, ProgrVPSlash
|
||||
,RNP,RNPList,ReflPron,ReflPoss,ReflVPSlash,ReflVPS2,ReflA2
|
||||
,PredetRNP,AdvRNP,AdvRVP,AdvRAP,PossPronRNP
|
||||
,Base_rr_RNP,Base_nr_RNP,Base_rn_RNP,Cons_rr_RNP,Cons_nr_RNP,ConjRNP
|
||||
]
|
||||
with
|
||||
(Grammar = GrammarFin) **
|
||||
@@ -97,13 +105,24 @@ oper
|
||||
} ;
|
||||
|
||||
|
||||
BaseVPI = twoTable2 VVType Agr ;
|
||||
ConsVPI = consrTable2 VVType Agr comma ;
|
||||
BaseVPI x y = {
|
||||
s1 = x.s ;
|
||||
s2 = y.s ;
|
||||
sc = x.sc
|
||||
} ;
|
||||
|
||||
ConsVPI x xs = {
|
||||
s1 = \\vt,agr => x.s ! vt ! agr ++ comma ;
|
||||
s2 = \\vt,agr => xs.s1 ! vt ! agr ++ xs.s2 ! vt ! agr ;
|
||||
sc = x.sc
|
||||
} ;
|
||||
|
||||
ConjVPI conj xs = {
|
||||
s = \\vt,agr => conj.s1 ++ xs.s1 ! vt ! agr ++ conj.s2 ++ xs.s2 ! vt ! agr ;
|
||||
sc = xs.sc
|
||||
} ;
|
||||
|
||||
MkVPI vp = mkVPI vp ;
|
||||
ConjVPI c xs = conjunctDistrTable2 VVType Agr c xs ;
|
||||
ComplVPIVV vv vpi =
|
||||
S.insertObj (\\_,_,a => vpi.s ! vv.vi ! a)
|
||||
(S.predV (vv ** {sc = case vpi.sc of {
|
||||
@@ -112,6 +131,16 @@ oper
|
||||
) ;
|
||||
|
||||
|
||||
lincat [Comp] = {s1,s2 : Agr => Str} ;
|
||||
lin BaseComp = twoTable Agr ;
|
||||
ConsComp = consrTable Agr comma ;
|
||||
ConjComp conj xs = conjunctDistrTable Agr conj xs ;
|
||||
|
||||
lincat [Imp] = {s1,s2 : Polarity => Agr => Str} ;
|
||||
lin BaseImp = twoTable2 Polarity Agr ;
|
||||
ConsImp = consrTable2 Polarity Agr comma ;
|
||||
ConjImp conj xs = conjunctDistrTable2 Polarity Agr conj xs ;
|
||||
|
||||
-------- two-place verb conjunction
|
||||
|
||||
lincat
|
||||
@@ -163,6 +192,13 @@ lin
|
||||
h = n2.h
|
||||
} ;
|
||||
|
||||
CompoundAP n a =
|
||||
let prefix = (S.snoun2nounBind n).s ! NCompound in {
|
||||
s = \\_,af => prefix ++ BIND ++ sAdjFull2nforms Posit a ! af ;
|
||||
p = [] ;
|
||||
hasPrefix = True
|
||||
} ;
|
||||
|
||||
---- copied from VerbFin.CompAP, should be shared
|
||||
ICompAP ap = {
|
||||
s = \\agr =>
|
||||
@@ -262,6 +298,145 @@ lin PastPartAP vps = {
|
||||
p = vps.c2.s.p1 ;
|
||||
hasPrefix = False
|
||||
} ;
|
||||
PastPartAgentAP vps np = {
|
||||
s = \\_,nf => np.s ! NPCase Gen ++ preCompVP (lin VP vps) (AgentPart (AN nf)) ;
|
||||
p = vps.c2.s.p1 ;
|
||||
hasPrefix = False
|
||||
} ;
|
||||
|
||||
lin GerundCN vp = {
|
||||
s = \\nf => let infForm : InfForm =
|
||||
case nf of {
|
||||
NCase _ Part => Inf4Part ;
|
||||
_ => Inf4Nom
|
||||
}
|
||||
in infVP vp.s.sc Pos (agrP3 (numN nf)) vp infForm ;
|
||||
postmod = \\_ => [] ;
|
||||
h = Back
|
||||
} ;
|
||||
|
||||
GerundNP vp =
|
||||
MassNP {
|
||||
s = \\nf => let infForm : InfForm =
|
||||
case nf of {
|
||||
NCase _ Part => Inf4Part ;
|
||||
_ => Inf4Nom
|
||||
}
|
||||
in infVP vp.s.sc Pos (agrP3 (numN nf)) vp infForm ;
|
||||
postmod = \\_ => [] ;
|
||||
h = Back
|
||||
} ;
|
||||
|
||||
GerundAdv vp = {
|
||||
s = infVP vp.s.sc Pos (agrP3 Sg) vp Inf3Adess
|
||||
} ;
|
||||
|
||||
PositAdVAdj a = {s = a.s ! Posit ! sAAdv} ;
|
||||
|
||||
lin ProgrVPSlash vp =
|
||||
let
|
||||
inf = (sverb2verbSep vp.s).s ! Inf Inf3Iness ;
|
||||
on = predV olla
|
||||
in vp ** {
|
||||
s = on.s ;
|
||||
s2 = \\b,p,a => inf ++ vp.s2 ! b ! p ! a ;
|
||||
} ;
|
||||
|
||||
lincat
|
||||
RNP = {s : Agr => NPForm => Str ; isPron : Bool ; isNeg : Bool} ;
|
||||
RNPList = {s1,s2 : Agr => NPForm => Str ; isPron : Bool ; isNeg : Bool} ;
|
||||
|
||||
lin ReflPron = {
|
||||
s = \\agr,npf => (reflPron agr).s ! npf ;
|
||||
isPron = True ;
|
||||
isNeg = False
|
||||
} ;
|
||||
|
||||
ReflPoss num cn = {
|
||||
s = \\agr, npf =>
|
||||
let
|
||||
quant : Quant = lin Quant { -- possessive pronoun with suffix only
|
||||
s2 : Harmony => Str = \\harm => possSuffixGen harm agr ;
|
||||
s1,sp = \\_,_ => [] ; isNum,isNeg = False ; isPoss,isDef = True
|
||||
}
|
||||
in (DetCN (DetQuant quant num) cn).s ! npf ;
|
||||
isPron = False ;
|
||||
isNeg = False
|
||||
} ;
|
||||
|
||||
ReflVPS2 vps rnp = {
|
||||
s = \\agr => vps.s ! agr ++ appCompl True vps.p vps.c2 (rnp2np agr rnp) ;
|
||||
sc = vps.sc ;
|
||||
h = vps.h
|
||||
} ;
|
||||
|
||||
PredetRNP pred rnp = {
|
||||
s = \\agr,npf => pred.s ! complNumAgr agr ! npf ++ rnp.s ! agr ! npf ;
|
||||
isPron = False ;
|
||||
isNeg = rnp.isNeg
|
||||
} ;
|
||||
|
||||
AdvRNP np prep rnp = {
|
||||
s = \\agr,npf => np.s ! npf ++ appCompl True Pos prep (rnp2np agr rnp) ;
|
||||
isPron = False ;
|
||||
isNeg = orB np.isNeg rnp.isNeg
|
||||
} ;
|
||||
|
||||
AdvRVP vp prep rnp =
|
||||
insertObj (\\_,b,agr => appCompl True b prep (rnp2np agr rnp)) vp ;
|
||||
|
||||
AdvRAP ap prep rnp = ap ** {
|
||||
s = \\isMod,af => ap.s ! isMod ! af ++ appCompl True Pos prep (rnp2np (agrP3 Sg) rnp) ;
|
||||
hasPrefix = False
|
||||
} ;
|
||||
|
||||
PossPronRNP p num cn rnp =
|
||||
let np = DetCN (DetQuant (PossPron p) num) cn in
|
||||
np ** {
|
||||
s = \\npf => np.s ! npf ++ rnp.s ! p.a ! NPCase Gen ;
|
||||
isNeg = orB np.isNeg rnp.isNeg
|
||||
} ;
|
||||
|
||||
Base_rr_RNP x y = {
|
||||
s1 = x.s ;
|
||||
s2 = y.s ;
|
||||
isPron = False ;
|
||||
isNeg = orB x.isNeg y.isNeg
|
||||
} ;
|
||||
|
||||
Base_nr_RNP x y = {
|
||||
s1 = \\_,npf => x.s ! npf ;
|
||||
s2 = y.s ;
|
||||
isPron = False ;
|
||||
isNeg = orB x.isNeg y.isNeg
|
||||
} ;
|
||||
|
||||
Base_rn_RNP x y = {
|
||||
s1 = x.s ;
|
||||
s2 = \\_,npf => y.s ! npf ;
|
||||
isPron = False ;
|
||||
isNeg = orB x.isNeg y.isNeg
|
||||
} ;
|
||||
|
||||
Cons_rr_RNP x xs = {
|
||||
s1 = \\agr,npf => x.s ! agr ! npf ++ comma ;
|
||||
s2 = \\agr,npf => xs.s1 ! agr ! npf ++ xs.s2 ! agr ! npf ;
|
||||
isPron = False ;
|
||||
isNeg = orB x.isNeg xs.isNeg
|
||||
} ;
|
||||
|
||||
Cons_nr_RNP x xs = {
|
||||
s1 = \\_,npf => x.s ! npf ++ comma ;
|
||||
s2 = \\agr,npf => xs.s1 ! agr ! npf ++ xs.s2 ! agr ! npf ;
|
||||
isPron = False ;
|
||||
isNeg = orB x.isNeg xs.isNeg
|
||||
} ;
|
||||
|
||||
ConjRNP conj xs = {
|
||||
s = \\agr,npf => conj.s1 ++ xs.s1 ! agr ! npf ++ conj.s2 ++ xs.s2 ! agr ! npf ;
|
||||
isPron = xs.isPron ;
|
||||
isNeg = xs.isNeg
|
||||
} ;
|
||||
|
||||
oper
|
||||
-- ruohoa syövä, Ranskassa valmistettu
|
||||
@@ -271,4 +446,11 @@ oper
|
||||
vp.s.s ! vform ++
|
||||
vp.ext ;
|
||||
|
||||
rnp2np agr rnp = {
|
||||
s = \\npf => rnp.s ! agr ! npf ;
|
||||
a = agr ;
|
||||
isPron = rnp.isPron ;
|
||||
isNeg = rnp.isNeg
|
||||
} ;
|
||||
|
||||
}
|
||||
|
||||
@@ -36,4 +36,8 @@ lin InLN ln =
|
||||
let c = case ln.extCase of {True => Adess ; False => Iness}
|
||||
in {s = ln.s ! c} ;
|
||||
|
||||
lin AdjLN ap ln = ln ** {
|
||||
s = \\c => ap.s ! True ! NCase ln.n c ++ ln.s ! c
|
||||
} ;
|
||||
|
||||
}
|
||||
|
||||
@@ -294,6 +294,11 @@ concrete NounFin of Noun = CatFin ** open ResFin, MorphoFin, StemFin, Prelude in
|
||||
isPron = False ; isNeg = det.isNeg
|
||||
} ;
|
||||
|
||||
AdjDAP dap ap = dap ** {
|
||||
s1 = \\c => dap.s1 ! c ++ ap.s ! True ! NCase dap.n c ;
|
||||
sp = \\c => dap.sp ! c ++ ap.s ! False ! NCase dap.n c
|
||||
} ;
|
||||
|
||||
DetDAP d = d ;
|
||||
|
||||
QuantityNP n m = {
|
||||
|
||||
@@ -75,10 +75,24 @@ lin
|
||||
pot3as4 n = n ;
|
||||
pot3decimal d = {n = Pl ; s = \\c => d.s ! NCard (NCase Sg Nom) ++ BIND ++ tuhattaN.s ! Pl ! c} ;
|
||||
|
||||
pot41 = {n = Pl ; s = miljoonaN.s} ;
|
||||
pot4 d = {n = Pl ; s = \\c => d.s ! NumAttr ! NCard (NCase Sg Nom) ++ nBIND d.n ++ miljoonaaN.s ! d.n ! c} ;
|
||||
pot4plus d e = {
|
||||
n = Pl ;
|
||||
s = \\c => d.s ! NumAttr ! NCard (NCase Sg Nom) ++ nBIND d.n ++ miljoonaaN.s ! d.n ! c ++
|
||||
e.s ! c
|
||||
} ;
|
||||
pot4as5 n = n ;
|
||||
pot4decimal d = {n = Pl ; s = \\c => d.s ! NCard (NCase Sg Nom) ++ "miljoonaa"} ; -- KA: case inflection missing
|
||||
|
||||
pot51 = {n = Pl ; s = \\c => "miljardi"} ; -- KA: case inflection missing
|
||||
pot51 = {n = Pl ; s = miljardiN.s} ;
|
||||
pot5 d = {n = Pl ; s = \\c => d.s ! NumAttr ! NCard (NCase Sg Nom) ++ nBIND d.n ++ miljardiaN.s ! d.n ! c} ;
|
||||
pot5plus d e = {
|
||||
n = Pl ;
|
||||
s = \\c => d.s ! NumAttr ! NCard (NCase Sg Nom) ++ nBIND d.n ++ miljardiaN.s ! d.n ! c ++
|
||||
e.s ! c
|
||||
} ;
|
||||
pot5decimal d = {n = Pl ; s = \\c => d.s ! NCard (NCase Sg Nom) ++ "miljardia"} ; -- KA: case inflection missing
|
||||
|
||||
oper
|
||||
-- co : (c,o : {s : NForm => Str}) -> {s : CardOrd => Str} = \c,o -> {
|
||||
@@ -157,6 +171,32 @@ oper
|
||||
}
|
||||
} ;
|
||||
|
||||
miljoonaN = co
|
||||
(snoun2nounBind (mkN "miljoona"))
|
||||
(ordN "s" "miljoonas") ;
|
||||
|
||||
miljoonaaN = {s = table {
|
||||
Sg => miljoonaN.s ;
|
||||
Pl => table {
|
||||
NCard (NCase Sg Nom) => "miljoonaa" ;
|
||||
k => miljoonaN.s ! k
|
||||
}
|
||||
}
|
||||
} ;
|
||||
|
||||
miljardiN = co
|
||||
(snoun2nounBind (mkN "miljardi"))
|
||||
(ordN "s" "miljardis") ;
|
||||
|
||||
miljardiaN = {s = table {
|
||||
Sg => miljardiN.s ;
|
||||
Pl => table {
|
||||
NCard (NCase Sg Nom) => "miljardia" ;
|
||||
k => miljardiN.s ! k
|
||||
}
|
||||
}
|
||||
} ;
|
||||
|
||||
|
||||
lincat
|
||||
Dig = TDigit ;
|
||||
|
||||
@@ -18,6 +18,10 @@ concrete SentenceFin of Sentence = CatFin ** open Prelude, ResFin, StemFin in {
|
||||
verb.fin ++ verb.inf ++ compl ;
|
||||
} ;
|
||||
|
||||
AdvImp adv imp = {
|
||||
s = \\pol,agr => adv.s ++ imp.s ! pol ! agr
|
||||
} ;
|
||||
|
||||
-- The object case is formed at the use site of $c2$, in $Relative$ and $Question$.
|
||||
|
||||
SlashVP np vp = {
|
||||
|
||||
Reference in New Issue
Block a user