forked from GitHub/gf-rgl
Merge remote-tracking branch 'origin/master' into basque
This commit is contained in:
@@ -109,6 +109,12 @@ abstract Extend = Cat ** {
|
|||||||
|
|
||||||
ExistsNP : NP -> Cl ; -- there exists a number / there exist numbers
|
ExistsNP : NP -> Cl ; -- there exists a number / there exist numbers
|
||||||
|
|
||||||
|
-- existentials with a/no variation
|
||||||
|
|
||||||
|
ExistCN : CN -> Cl ; -- there is a car / there is no car
|
||||||
|
ExistMassCN : CN -> Cl ; -- there is beer / there is no beer
|
||||||
|
ExistPluralCN : CN -> Cl ; -- there are trees / there are no trees
|
||||||
|
|
||||||
-- infinitive for purpose AR 21/8/2013
|
-- infinitive for purpose AR 21/8/2013
|
||||||
|
|
||||||
PurposeVP : VP -> Adv ; -- to become happy
|
PurposeVP : VP -> Adv ; -- to become happy
|
||||||
|
|||||||
24
src/api/libraryBrowser/LibraryBrowserIta.gf
Normal file
24
src/api/libraryBrowser/LibraryBrowserIta.gf
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
--# -path=.:alltenses
|
||||||
|
|
||||||
|
concrete LibraryBrowserIta of LibraryBrowser =
|
||||||
|
GrammarIta - [
|
||||||
|
UseCopula
|
||||||
|
],
|
||||||
|
LexiconIta
|
||||||
|
** open (S = SyntaxIta) in {
|
||||||
|
|
||||||
|
lin
|
||||||
|
i_NP = S.i_NP ;
|
||||||
|
you_NP = S.you_NP ;
|
||||||
|
he_NP = S.he_NP ;
|
||||||
|
she_NP = S.she_NP ;
|
||||||
|
we_NP = S.we_NP ;
|
||||||
|
youPl_NP = S.youPl_NP ;
|
||||||
|
youPol_NP = S.youPol_NP ;
|
||||||
|
they_NP = S.they_NP ;
|
||||||
|
|
||||||
|
a_Det = S.mkDet S.a_Quant ;
|
||||||
|
the_Det = S.mkDet S.the_Quant ;
|
||||||
|
aPl_Det = S.mkDet S.a_Quant S.plNum ;
|
||||||
|
thePl_Det = S.mkDet S.the_Quant S.plNum ;
|
||||||
|
}
|
||||||
@@ -51,7 +51,10 @@ lin
|
|||||||
PastPartAP = variants {} ; -- VPSlash -> AP ; -- lost (opportunity) ; (opportunity) lost in space
|
PastPartAP = variants {} ; -- VPSlash -> AP ; -- lost (opportunity) ; (opportunity) lost in space
|
||||||
PastPartAgentAP = variants {} ; -- VPSlash -> NP -> AP ; -- (opportunity) lost by the company
|
PastPartAgentAP = variants {} ; -- VPSlash -> NP -> AP ; -- (opportunity) lost by the company
|
||||||
NominalizeVPSlashNP = variants {} ; -- VPSlash -> NP -> NP ;
|
NominalizeVPSlashNP = variants {} ; -- VPSlash -> NP -> NP ;
|
||||||
ExistsNP = variants {} ; -- NP -> Cl ; -- there exists a number / there exist numbers
|
ExistsNP = ExistNP ; -- NP -> Cl ; -- there exists a number / there exist numbers
|
||||||
|
ExistCN cn = ExistNP (DetCN (DetQuant IndefArt NumSg) cn) ;
|
||||||
|
ExistMassCN cn = ExistNP (MassNP cn) ;
|
||||||
|
ExistPluralCN cn = ExistNP (DetCN (DetQuant IndefArt NumPl) cn) ;
|
||||||
PurposeVP = variants {} ; -- VP -> Adv ; -- to become happy
|
PurposeVP = variants {} ; -- VP -> Adv ; -- to become happy
|
||||||
ComplBareVS = ComplVS ; -- VS -> S -> VP ; -- say she runs ; DEFAULT say that she runs
|
ComplBareVS = ComplVS ; -- VS -> S -> VP ; -- say she runs ; DEFAULT say that she runs
|
||||||
SlashBareV2S = SlashV2S ; -- V2S -> S -> VPSlash ; -- answer (to him) it is good ; DEFAULT answer that it is good
|
SlashBareV2S = SlashV2S ; -- V2S -> S -> VPSlash ; -- answer (to him) it is good ; DEFAULT answer that it is good
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ concrete StructuralDut of Structural = CatDut, Prelude **
|
|||||||
so_AdA = ss "zo" ;
|
so_AdA = ss "zo" ;
|
||||||
somebody_NP = mkNP "iemand" Utr Sg ;
|
somebody_NP = mkNP "iemand" Utr Sg ;
|
||||||
somePl_Det = mkDet "sommige" "sommige" Pl ;
|
somePl_Det = mkDet "sommige" "sommige" Pl ;
|
||||||
someSg_Det = mkDet "sommige" "sommige" Sg ;
|
someSg_Det = mkDet "enige" "enig" Sg ;
|
||||||
something_NP = mkNP "iets" Utr Sg ;
|
something_NP = mkNP "iets" Utr Sg ;
|
||||||
somewhere_Adv = ss "ergens" ;
|
somewhere_Adv = ss "ergens" ;
|
||||||
that_Quant = mkQuant "die" "dat" ;
|
that_Quant = mkQuant "die" "dat" ;
|
||||||
|
|||||||
@@ -14607,7 +14607,7 @@ lin deed_N = mkN "deed" "deeds";
|
|||||||
lin deed_box_N = mkN "deed-box" "deed-boxes";
|
lin deed_box_N = mkN "deed-box" "deed-boxes";
|
||||||
lin deedpoll_N = mkN "deedpoll" "deedpolls";
|
lin deedpoll_N = mkN "deedpoll" "deedpolls";
|
||||||
lin deem_V2 = mkV2 (mkV "deem" "deems" "deemed" "deemed" "deeming");
|
lin deem_V2 = mkV2 (mkV "deem" "deems" "deemed" "deemed" "deeming");
|
||||||
lin deem_V2A = mkV2V (mkV "deem") noPrep to_Prep;
|
lin deem_V2A = mkV2A (mkV "deem") noPrep ;
|
||||||
lin deem_V2V = mkV2V (mkV "deem") noPrep to_Prep;
|
lin deem_V2V = mkV2V (mkV "deem") noPrep to_Prep;
|
||||||
lin deep_A = mkA "deep" "deeper";
|
lin deep_A = mkA "deep" "deeper";
|
||||||
lin deep_Adv = mkAdv "deep";
|
lin deep_Adv = mkAdv "deep";
|
||||||
|
|||||||
@@ -11,7 +11,8 @@ concrete ExtendEng of Extend =
|
|||||||
Base_nr_RNP, Base_rn_RNP, Base_rr_RNP, ByVP, CompBareCN,
|
Base_nr_RNP, Base_rn_RNP, Base_rr_RNP, ByVP, CompBareCN,
|
||||||
CompIQuant, CompQS, CompS, CompVP, ComplBareVS, ComplGenVV, ComplSlashPartLast, ComplVPSVV, CompoundAP,
|
CompIQuant, CompQS, CompS, CompVP, ComplBareVS, ComplGenVV, ComplSlashPartLast, ComplVPSVV, CompoundAP,
|
||||||
CompoundN, ConjRNP, ConjVPS, ConsVPS, Cons_nr_RNP, Cons_rr_RNP, DetNPFem, EmbedPresPart, EmptyRelSlash,
|
CompoundN, ConjRNP, ConjVPS, ConsVPS, Cons_nr_RNP, Cons_rr_RNP, DetNPFem, EmbedPresPart, EmptyRelSlash,
|
||||||
ExistsNP, FocusAP, FocusAdV, FocusAdv, FocusObj, GenIP, GenModIP, GenModNP, GenNP, GenRP,
|
ExistsNP, ExistCN, ExistMassCN, ExistPluralCN,
|
||||||
|
FocusAP, FocusAdV, FocusAdv, FocusObj, GenIP, GenModIP, GenModNP, GenNP, GenRP,
|
||||||
GerundAdv, GerundCN, GerundNP, IAdvAdv, ICompAP, InOrderToVP, MkVPS, NominalizeVPSlashNP,
|
GerundAdv, GerundCN, GerundNP, IAdvAdv, ICompAP, InOrderToVP, MkVPS, NominalizeVPSlashNP,
|
||||||
PassAgentVPSlash, PassVPSlash, PastPartAP, PastPartAgentAP, PositAdVAdj, PredVPS, PredVPSVV, PredetRNP, PrepCN,
|
PassAgentVPSlash, PassVPSlash, PastPartAP, PastPartAgentAP, PositAdVAdj, PredVPS, PredVPSVV, PredetRNP, PrepCN,
|
||||||
PresPartAP, PurposeVP, ReflPoss, ReflPron, ReflRNP, SlashBareV2S, SlashV2V, StrandQuestSlash, StrandRelSlash,
|
PresPartAP, PurposeVP, ReflPoss, ReflPron, ReflRNP, SlashBareV2S, SlashV2V, StrandQuestSlash, StrandRelSlash,
|
||||||
@@ -220,6 +221,22 @@ concrete ExtendEng of Extend =
|
|||||||
mkClause "there" (agrP3 (fromAgr np.a).n)
|
mkClause "there" (agrP3 (fromAgr np.a).n)
|
||||||
(insertObj (\\_ => np.s ! NPAcc) (predV (regV "exist"))) ;
|
(insertObj (\\_ => np.s ! NPAcc) (predV (regV "exist"))) ;
|
||||||
|
|
||||||
|
ExistCN cn =
|
||||||
|
let
|
||||||
|
pos = ExistNP (DetCN (DetQuant IndefArt NumSg) cn) ;
|
||||||
|
neg = ExistNP (DetCN (DetQuant no_Quant NumSg) cn) ;
|
||||||
|
in posNegClause pos neg ;
|
||||||
|
ExistMassCN cn =
|
||||||
|
let
|
||||||
|
pos = ExistNP (MassNP cn) ;
|
||||||
|
neg = ExistNP (DetCN (DetQuant no_Quant NumSg) cn) ;
|
||||||
|
in posNegClause pos neg ;
|
||||||
|
ExistPluralCN cn =
|
||||||
|
let
|
||||||
|
pos = ExistNP (DetCN (DetQuant IndefArt NumPl) cn) ;
|
||||||
|
neg = ExistNP (DetCN (DetQuant no_Quant NumPl) cn) ;
|
||||||
|
in posNegClause pos neg ;
|
||||||
|
|
||||||
|
|
||||||
ComplBareVS v s = insertExtra s.s (predV v) ;
|
ComplBareVS v s = insertExtra s.s (predV v) ;
|
||||||
SlashBareV2S v s = insertExtrac s.s (predVc v) ;
|
SlashBareV2S v s = insertExtrac s.s (predVc v) ;
|
||||||
|
|||||||
@@ -313,7 +313,11 @@ oper
|
|||||||
mkVV : V -> VV ; -- e.g. want (to VP)
|
mkVV : V -> VV ; -- e.g. want (to VP)
|
||||||
infVV : V -> VV ; -- e.g. want (to VP)
|
infVV : V -> VV ; -- e.g. want (to VP)
|
||||||
ingVV : V -> VV ; -- e.g. start (VPing)
|
ingVV : V -> VV ; -- e.g. start (VPing)
|
||||||
mkV2V : V -> Prep -> Prep -> V2V ; -- e.g. want (noPrep NP) (to VP)
|
mkV2V : overload {
|
||||||
|
mkV2V : Str -> V2V ;
|
||||||
|
mkV2V : V -> V2V ;
|
||||||
|
mkV2V : V -> Prep -> Prep -> V2V ; -- e.g. want (noPrep NP) (to VP)
|
||||||
|
} ;
|
||||||
ingV2V : V -> Prep -> Prep -> V2V ; -- e.g. prevent (noPrep NP) (from VP-ing)
|
ingV2V : V -> Prep -> Prep -> V2V ; -- e.g. prevent (noPrep NP) (from VP-ing)
|
||||||
mkVA : V -> VA ; -- e.g. become (AP)
|
mkVA : V -> VA ; -- e.g. become (AP)
|
||||||
mkV2A : V -> Prep -> V2A ; -- e.g. paint (NP) (AP)
|
mkV2A : V -> Prep -> V2A ; -- e.g. paint (NP) (AP)
|
||||||
@@ -502,12 +506,14 @@ mkInterj : Str -> Interj
|
|||||||
cries = (regN cry).s ! Pl ! Nom ; -- !
|
cries = (regN cry).s ! Pl ! Nom ; -- !
|
||||||
cried : Str = case cries of {
|
cried : Str = case cries of {
|
||||||
_ + "es" => init cries + "d" ;
|
_ + "es" => init cries + "d" ;
|
||||||
|
_ + "ers" => init cries + "ed" ;
|
||||||
_ => duplFinal cry + "ed"
|
_ => duplFinal cry + "ed"
|
||||||
} ;
|
} ;
|
||||||
crying : Str = case cry of {
|
crying : Str = case cry of {
|
||||||
_ + "ee" => cry + "ing" ;
|
_ + "ee" => cry + "ing" ;
|
||||||
d + "ie" => d + "ying" ;
|
d + "ie" => d + "ying" ;
|
||||||
us + "e" => us + "ing" ;
|
us + "e" => us + "ing" ;
|
||||||
|
ent + "er" => ent + "ered" ;
|
||||||
_ => duplFinal cry + "ing"
|
_ => duplFinal cry + "ing"
|
||||||
}
|
}
|
||||||
in mk5V cry cries cried cried crying ;
|
in mk5V cry cries cried cried crying ;
|
||||||
@@ -582,7 +588,12 @@ mkInterj : Str -> Interj
|
|||||||
|
|
||||||
mkV0 v = v ;
|
mkV0 v = v ;
|
||||||
mkV2S v p = lin V2S (prepV2 v p) ;
|
mkV2S v p = lin V2S (prepV2 v p) ;
|
||||||
mkV2V v p t = lin V2V (prepV2 v p ** {c3 = t.s ; typ = VVAux}) ;
|
mkV2V = overload {
|
||||||
|
mkV2V : Str -> V2V = \s -> lin V2V (dirV2 (regV s) ** {c3 = [] ; typ = VVAux}) ;
|
||||||
|
mkV2V : V -> V2V = \v -> lin V2V (dirV2 v ** {c3 = [] ; typ = VVAux}) ;
|
||||||
|
mkV2V : V -> Prep -> Prep -> V2V = \v,p,t -> lin V2V (prepV2 v p ** {c3 = t.s ; typ = VVAux}) ;
|
||||||
|
} ;
|
||||||
|
|
||||||
ingV2V v p t = lin V2V (prepV2 v p ** {c3 = t.s ; typ = VVPresPart}) ;
|
ingV2V v p t = lin V2V (prepV2 v p ** {c3 = t.s ; typ = VVPresPart}) ;
|
||||||
mkVA v = lin VA v ;
|
mkVA v = lin VA v ;
|
||||||
mkV2A v p = lin V2A (prepV2 v p) ;
|
mkV2A v p = lin V2A (prepV2 v p) ;
|
||||||
|
|||||||
@@ -556,6 +556,14 @@ param
|
|||||||
}
|
}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
-- for pos/neg variation other than negation word, e.g. "there is a car"/"there is no car"
|
||||||
|
posNegClause : Clause -> Clause -> Clause = \pos,neg -> {
|
||||||
|
s = \\t,a,b,o => case b of {
|
||||||
|
CPos => pos.s ! t ! a ! b ! o ;
|
||||||
|
_ => neg.s ! t ! a ! CPos ! o
|
||||||
|
}
|
||||||
|
} ;
|
||||||
|
|
||||||
|
|
||||||
-- For $Numeral$.
|
-- For $Numeral$.
|
||||||
|
|
||||||
|
|||||||
112
src/finnish/ExtendFin.gf
Normal file
112
src/finnish/ExtendFin.gf
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
--# -path=.:../common:../abstract
|
||||||
|
|
||||||
|
concrete ExtendFin of Extend =
|
||||||
|
CatFin ** ExtendFunctor - [
|
||||||
|
VPI2,VPS2,MkVPS2,ConjVPS2,ComplVPS2,MkVPI2,ConjVPI2,ComplVPI2,ComplVPIVV
|
||||||
|
,ExistCN, ExistMassCN
|
||||||
|
]
|
||||||
|
with
|
||||||
|
(Grammar = GrammarFin) **
|
||||||
|
|
||||||
|
open
|
||||||
|
GrammarFin,
|
||||||
|
ResFin,
|
||||||
|
(S=StemFin),
|
||||||
|
IdiomFin,
|
||||||
|
Coordination,
|
||||||
|
Prelude,
|
||||||
|
MorphoFin,
|
||||||
|
ParadigmsFin in {
|
||||||
|
|
||||||
|
lin
|
||||||
|
ExistCN cn =
|
||||||
|
let
|
||||||
|
pos = ExistNP (DetCN (DetQuant IndefArt NumSg) cn) ;
|
||||||
|
neg = ExistNP (partCN cn) ;
|
||||||
|
in posNegClause pos neg ;
|
||||||
|
ExistMassCN cn = ExistNP (partCN cn) ;
|
||||||
|
|
||||||
|
oper
|
||||||
|
partCN : CN -> GrammarFin.NP ;
|
||||||
|
partCN cn =
|
||||||
|
let
|
||||||
|
acn = DetCN (DetQuant IndefArt NumSg) cn
|
||||||
|
in acn ** {
|
||||||
|
s = table {
|
||||||
|
NPCase Nom | NPAcc => acn.s ! NPCase ResFin.Part ;
|
||||||
|
c => acn.s ! c
|
||||||
|
}
|
||||||
|
} ;
|
||||||
|
|
||||||
|
|
||||||
|
lincat
|
||||||
|
VPS = {s : Agr => Str } ;
|
||||||
|
[VPS] = {s1,s2 : Agr => Str } ;
|
||||||
|
VPI = {s : VVType => Agr => Str ; sc : SubjCase } ; -- Agr needed for possessive suffix:
|
||||||
|
[VPI] = {s1,s2 : VVType => Agr => Str ; sc : SubjCase } ; -- e.g. toivon nukkuva+ni
|
||||||
|
|
||||||
|
lin
|
||||||
|
BaseVPS = twoTable Agr ;
|
||||||
|
ConsVPS = consrTable Agr comma ;
|
||||||
|
|
||||||
|
BaseVPI = twoTable2 VVType Agr ;
|
||||||
|
ConsVPI = consrTable2 VVType Agr comma ;
|
||||||
|
|
||||||
|
MkVPS t p vp = mkVPS t p (lin VP vp) ;
|
||||||
|
ConjVPS c xs = conjunctDistrTable Agr c xs ;
|
||||||
|
PredVPS np vps = {s = np.s ! npNom ++ vps.s ! np.a} ;
|
||||||
|
|
||||||
|
|
||||||
|
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 {
|
||||||
|
SCNom => vv.sc ; -- minun täytyy pestä auto
|
||||||
|
c => c }}) -- minulla täytyy olla auto
|
||||||
|
) ;
|
||||||
|
|
||||||
|
|
||||||
|
-------- two-place verb conjunction
|
||||||
|
|
||||||
|
lincat
|
||||||
|
-- Polarity needed to pick the right object case
|
||||||
|
VPS2 = {s : Agr => Str ; c2 : Compl ; p : Polarity } ;
|
||||||
|
[VPS2] = {s1,s2 : Agr => Str ; c2 : Compl ; p : Polarity } ;
|
||||||
|
-- A version with
|
||||||
|
VPI2 = {s : VVType => Agr => Str ; c2 : Compl ; sc : SubjCase } ;
|
||||||
|
[VPI2] = {s1,s2 : VVType => Agr => Str ; c2 : Compl ; sc : SubjCase } ;
|
||||||
|
|
||||||
|
lin
|
||||||
|
-- : Temp -> Pol -> VPSlash -> VPS2 ; -- has loved
|
||||||
|
MkVPS2 t p vpsl = mkVPS t p (lin VP vpsl) ** {c2 = vpsl.c2 ; p = p.p } ;
|
||||||
|
|
||||||
|
-- : VPSlash -> VPI2 ; -- to love
|
||||||
|
MkVPI2 vpsl = mkVPI (lin VP vpsl) ** {c2 = vpsl.c2} ;
|
||||||
|
|
||||||
|
BaseVPS2 x y = twoTable Agr x y ** {c2 = y.c2 ; p = xs.p } ; ---- just remembering the compl. case of the latter verb
|
||||||
|
ConsVPS2 x xs = consrTable Agr comma x xs ** {c2 = xs.c2 ; p = xs.p } ;
|
||||||
|
|
||||||
|
BaseVPI2 x y = twoTable2 VVType Agr x y ** {c2 = y.c2} ; ---- just remembering the compl. case of the latter verb
|
||||||
|
ConsVPI2 x xs = consrTable2 VVType Agr comma x xs ** {c2 = xs.c2} ;
|
||||||
|
|
||||||
|
|
||||||
|
ConjVPS2 c xs = conjunctDistrTable Agr c xs ** {c2 = xs.c2 ; p = xs.p } ;
|
||||||
|
ConjVPI2 c xs = conjunctDistrTable2 VVType Agr c xs ** {c2 = xs.c2 ; p = xs.p ; sc = xs.sc } ;
|
||||||
|
|
||||||
|
|
||||||
|
-- appCompl : Bool -> Polarity -> Compl -> ResFin.NP -> Str
|
||||||
|
ComplVPS2 v np = { s = \\agr => v.s ! agr ++ appCompl True v.p v.c2 np } ;
|
||||||
|
|
||||||
|
-- TODO: Version with variable polarity?
|
||||||
|
ComplVPI2 v np = v ** { s = \\vt,a => v.s ! vt ! a ++ appCompl True Pos v.c2 np };
|
||||||
|
|
||||||
|
oper
|
||||||
|
mkVPS : Temp -> Pol -> VP -> VPS = \tem,pol,vp -> lin VPS {
|
||||||
|
s = \\agr => (UseCl tem pol (S.mkClause (\_ -> []) agr vp)).s } ;
|
||||||
|
|
||||||
|
mkVPI : VP -> VPI = \vp -> lin VPI {
|
||||||
|
s = \\vt,agr => S.infVP vp.s.sc Pos agr vp (vvtype2infform vt) ;
|
||||||
|
sc = vp.s.sc } ;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -305,7 +305,13 @@ oper
|
|||||||
|
|
||||||
glueTok : Str -> Str = \s -> "&+" ++ s ;
|
glueTok : Str -> Str = \s -> "&+" ++ s ;
|
||||||
|
|
||||||
|
-- for pos/neg variation other than just negation word, e.g. case in "on ongelma"/"ei ole ongelmaa"
|
||||||
|
posNegClause : Clause -> Clause -> Clause = \pos,neg -> {
|
||||||
|
s = \\t,a,b,o => case b of {
|
||||||
|
Pos => pos.s ! t ! a ! b ! o ;
|
||||||
|
_ => neg.s ! t ! a ! b ! o
|
||||||
|
}
|
||||||
|
} ;
|
||||||
-- This is used for subjects of passives: therefore isFin in False.
|
-- This is used for subjects of passives: therefore isFin in False.
|
||||||
|
|
||||||
subjForm : NP -> SubjCase -> Polarity -> Str = \np,sc,b ->
|
subjForm : NP -> SubjCase -> Polarity -> Str = \np,sc,b ->
|
||||||
|
|||||||
@@ -3,5 +3,5 @@
|
|||||||
concrete AllFre of AllFreAbs =
|
concrete AllFre of AllFreAbs =
|
||||||
LangFre,
|
LangFre,
|
||||||
IrregFre,
|
IrregFre,
|
||||||
ExtraFre
|
ExtendFre ---- ExtraFre
|
||||||
** {} ;
|
** {} ;
|
||||||
|
|||||||
43
src/french/ExtendFre.gf
Normal file
43
src/french/ExtendFre.gf
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
--# -path=alltenses:../common:../abstract
|
||||||
|
|
||||||
|
concrete ExtendFre of Extend =
|
||||||
|
CatFre ** ExtendFunctor -
|
||||||
|
[
|
||||||
|
---- iFem_Pron, youFem_Pron, weFem_Pron, youPlFem_Pron, theyFem_Pron, youPolFem_Pron, youPolPl_Pron, youPolPlFem_Pron,
|
||||||
|
ExistCN, ExistMassCN, ExistPluralCN
|
||||||
|
] -- put the names of your own definitions here
|
||||||
|
with
|
||||||
|
(Grammar = GrammarFre) **
|
||||||
|
open
|
||||||
|
GrammarFre,
|
||||||
|
ResFre,
|
||||||
|
MorphoFre,
|
||||||
|
PhonoFre,
|
||||||
|
Coordination,
|
||||||
|
Prelude,
|
||||||
|
ParadigmsFre in {
|
||||||
|
-- put your own definitions here
|
||||||
|
|
||||||
|
lin
|
||||||
|
ExistCN cn =
|
||||||
|
let
|
||||||
|
pos = ExistNP (DetCN (DetQuant IndefArt NumSg) cn) ;
|
||||||
|
neg = ExistNP (DetCN (DetQuant de_Quant NumSg) cn) ;
|
||||||
|
in posNegClause pos neg PNeg.p ;
|
||||||
|
ExistMassCN cn =
|
||||||
|
let
|
||||||
|
pos = ExistNP (MassNP cn) ;
|
||||||
|
neg = ExistNP (DetCN (DetQuant de_Quant NumSg) cn) ;
|
||||||
|
in posNegClause pos neg PNeg.p ;
|
||||||
|
ExistPluralCN cn =
|
||||||
|
let
|
||||||
|
pos = ExistNP (DetCN (DetQuant IndefArt NumPl) cn) ;
|
||||||
|
neg = ExistNP (DetCN (DetQuant de_Quant NumPl) cn) ;
|
||||||
|
in posNegClause pos neg PNeg.p ;
|
||||||
|
|
||||||
|
oper
|
||||||
|
de_Quant : Quant = IndefArt ** {s = \\_,_,_,_ => elisDe} ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -99,9 +99,21 @@ concrete ExtraFre of ExtraFreAbs = ExtraRomanceFre **
|
|||||||
let cls = cl.s ! DInv ! t ! a ! p
|
let cls = cl.s ! DInv ! t ! a ! p
|
||||||
in table {
|
in table {
|
||||||
QDir => cls ! Indic ;
|
QDir => cls ! Indic ;
|
||||||
QIndir => subjIf ++ cls ! Indic
|
QIndir => subjIf ++ cl.s ! DDir ! t ! a ! p ! Indic
|
||||||
}
|
}
|
||||||
} ;
|
} ;
|
||||||
|
InvQuestIAdvCl iadv cl = {s = \\t,a,p => -- dort-il ?
|
||||||
|
let cls = cl.s ! DInv ! t ! a ! p
|
||||||
|
in table {
|
||||||
|
QDir => iadv.s ++ cls ! Indic ;
|
||||||
|
QIndir => iadv.s ++ cl.s ! DDir ! t ! a ! p ! Indic
|
||||||
|
}
|
||||||
|
} ;
|
||||||
|
|
||||||
|
quel_IComp = {
|
||||||
|
s = aagrForms "quel" "quelle" "quels" "quelles" ;
|
||||||
|
cop = <> ;
|
||||||
|
} ;
|
||||||
|
|
||||||
--- in ExtraRomance
|
--- in ExtraRomance
|
||||||
-- PassAgentVPSlash vps np = passVPSlash
|
-- PassAgentVPSlash vps np = passVPSlash
|
||||||
|
|||||||
@@ -56,6 +56,9 @@ abstract ExtraFreAbs = ExtraRomanceAbs - [ProDrop] ** {
|
|||||||
|
|
||||||
EstcequeQuestCl : Cl -> QCl ; -- est-ce qu'il dort
|
EstcequeQuestCl : Cl -> QCl ; -- est-ce qu'il dort
|
||||||
InvQuestCl : Cl -> QCl ; -- dort-il
|
InvQuestCl : Cl -> QCl ; -- dort-il
|
||||||
|
InvQuestIAdvCl : IAdv -> Cl -> QCl ; -- dort-il
|
||||||
|
|
||||||
|
quel_IComp : IComp ; -- quelle est votre nationalité
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
3
src/french/MarkupFre.gf
Normal file
3
src/french/MarkupFre.gf
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
--# -path=.:../abstract:../common:../romance
|
||||||
|
|
||||||
|
concrete MarkupFre of Markup = CatFre, MarkHTMLX ** MarkupRomance with (ResRomance = ResFre) ;
|
||||||
@@ -20,6 +20,10 @@ concrete ConjunctionGer of Conjunction =
|
|||||||
c = ss.c
|
c = ss.c
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
ConjCN conj ss = conjunctDistrTable3 Adjf Number Case conj ss ** {
|
||||||
|
rc = \\_ => [] ; ext = [] ; adv = [] ; g = ss.g
|
||||||
|
} ;
|
||||||
|
|
||||||
|
|
||||||
-- These fun's are generated from the list cat's.
|
-- These fun's are generated from the list cat's.
|
||||||
|
|
||||||
@@ -56,6 +60,17 @@ concrete ConjunctionGer of Conjunction =
|
|||||||
ext = []} ;
|
ext = []} ;
|
||||||
BaseRS x y = twoTable RelGenNum x y ** {c = y.c} ;
|
BaseRS x y = twoTable RelGenNum x y ** {c = y.c} ;
|
||||||
ConsRS xs x = consrTable RelGenNum comma xs x ** {c = xs.c} ;
|
ConsRS xs x = consrTable RelGenNum comma xs x ** {c = xs.c} ;
|
||||||
|
BaseCN x y = {
|
||||||
|
s1 = bigCN x ;
|
||||||
|
s2 = bigCN y ;
|
||||||
|
g = x.g ; --- gender of first CN, used e.g. in articles
|
||||||
|
} ;
|
||||||
|
ConsCN x xs = {
|
||||||
|
s1 = \\a,n,c => bigCN x ! a ! n ! c ++ comma ++ xs.s1 ! a ! n ! c ;
|
||||||
|
s2 = xs.s2 ;
|
||||||
|
g = x.g ; --- gender of first CN, used e.g. in articles
|
||||||
|
} ;
|
||||||
|
|
||||||
|
|
||||||
lincat
|
lincat
|
||||||
[S] = {s1,s2 : Order => Str} ;
|
[S] = {s1,s2 : Order => Str} ;
|
||||||
@@ -63,8 +78,12 @@ concrete ConjunctionGer of Conjunction =
|
|||||||
[NP] = {s1,s2 : PCase => Str ; a : Agr} ;
|
[NP] = {s1,s2 : PCase => Str ; a : Agr} ;
|
||||||
[AP] = {s1,s2 : AForm => Str ; isPre : Bool; c : Str * Str ; ext : Str} ;
|
[AP] = {s1,s2 : AForm => Str ; isPre : Bool; c : Str * Str ; ext : Str} ;
|
||||||
[RS] = {s1,s2 : RelGenNum => Str ; c : Case} ;
|
[RS] = {s1,s2 : RelGenNum => Str ; c : Case} ;
|
||||||
|
[CN] = {s1,s2 : Adjf => Number => Case => Str ; g : Gender} ;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
bigAP : AP -> AForm => Str = \ap ->
|
bigAP : AP -> AForm => Str = \ap ->
|
||||||
\\a => ap.c.p1 ++ ap.s ! a ++ ap.c.p2 ++ ap.ext;
|
\\a => ap.c.p1 ++ ap.s ! a ++ ap.c.p2 ++ ap.ext;
|
||||||
|
bigCN : CN -> Adjf => Number => Case => Str = \cn ->
|
||||||
|
\\a,n,c => cn.s ! a ! n ! c ++ cn.adv ++ cn.ext ++ cn.rc ! n ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35875,7 +35875,7 @@ lin
|
|||||||
ss_mann_N = mkN "SS-Mann" "SS-Männer" masculine ;
|
ss_mann_N = mkN "SS-Mann" "SS-Männer" masculine ;
|
||||||
ss_N = mkN "ẞ" "ẞ" neuter ;
|
ss_N = mkN "ẞ" "ẞ" neuter ;
|
||||||
st_vincent_undgrenadinen_N = mkN "St. Vincent undGrenadinen" "St. Vincent undGrenadinen" neuter ;
|
st_vincent_undgrenadinen_N = mkN "St. Vincent undGrenadinen" "St. Vincent undGrenadinen" neuter ;
|
||||||
staat_N = mkN "Staat" "Staaten" masculine ;
|
staat_N = mkN "Staat" "Staat" "Staat" "Staats" "Staaten" "Staaten" masculine ;
|
||||||
staatlich_A = regA "staatlich" ;
|
staatlich_A = regA "staatlich" ;
|
||||||
staatsanleihe_N = mkN "Staatsanleihe" "Staatsanleihen" feminine ;
|
staatsanleihe_N = mkN "Staatsanleihe" "Staatsanleihen" feminine ;
|
||||||
staatsanwaeltin_N = mkN "Staatsanwältin" "Staatsanwältinnen" feminine ;
|
staatsanwaeltin_N = mkN "Staatsanwältin" "Staatsanwältinnen" feminine ;
|
||||||
|
|||||||
16
src/german/MarkupGer.gf
Normal file
16
src/german/MarkupGer.gf
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
--# -path=.:../abstract:../common
|
||||||
|
|
||||||
|
concrete MarkupGer of Markup = CatGer, MarkHTMLX ** {
|
||||||
|
|
||||||
|
lin
|
||||||
|
MarkupCN m cn = cn ** {s = \\a,n,c => appMark m (cn.s ! a ! n ! c)} ; --- other fields e.g ext intact
|
||||||
|
MarkupNP m np = np ** {s = \\c => appMark m (np.s ! c)} ;
|
||||||
|
MarkupAP m ap = ap ** {s = \\a => appMark m (ap.s ! a)} ;
|
||||||
|
MarkupAdv m adv = {s = appMark m adv.s} ;
|
||||||
|
MarkupS m s = {s = \\o => appMark m (s.s ! o)} ;
|
||||||
|
MarkupUtt m utt = {s = appMark m utt.s} ;
|
||||||
|
MarkupPhr m phr = {s = appMark m phr.s} ;
|
||||||
|
MarkupText m txt = {s = appMark m txt.s} ;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@@ -192,10 +192,11 @@ concrete NounGer of Noun = CatGer ** open ResGer, MorphoGer, Prelude in {
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|
||||||
RelCN cn rs = cn ** {rc = \\n => embedInCommas (rs.s ! RGenNum (gennum cn.g n))} ;
|
RelCN cn rs = cn ** {rc = \\n => (cn.rc ! n ++ embedInCommas (rs.s ! RGenNum (gennum cn.g n)))} ;
|
||||||
|
---- another layer of embedInCommas needed if there is a non-empty rc
|
||||||
|
|
||||||
RelNP np rs = np ** {
|
RelNP np rs = np ** {
|
||||||
rc = embedInCommas (rs.s ! RGenNum (gennum (genderAgr np.a) (numberAgr np.a))) ;
|
rc = (np.rc ++ embedInCommas (rs.s ! RGenNum (gennum (genderAgr np.a) (numberAgr np.a)))) ;
|
||||||
isPron = False } ;
|
isPron = False } ;
|
||||||
|
|
||||||
SentCN cn s = cn ** {ext = embedInCommas s.s} ;
|
SentCN cn s = cn ** {ext = embedInCommas s.s} ;
|
||||||
|
|||||||
@@ -755,14 +755,14 @@ resource ResGer = ParamX ** open Prelude in {
|
|||||||
infVP : Bool -> VP -> ((Agr => Str) * Str * Str * Str) = \isAux, vp -> let vps = useVP vp in
|
infVP : Bool -> VP -> ((Agr => Str) * Str * Str * Str) = \isAux, vp -> let vps = useVP vp in
|
||||||
<
|
<
|
||||||
\\agr => (vp.nn ! agr).p1 ++ (vp.nn ! agr).p2 ++ vp.a2,
|
\\agr => (vp.nn ! agr).p1 ++ (vp.nn ! agr).p2 ++ vp.a2,
|
||||||
vp.a1 ! Pos ++ (vps.s ! (notB isAux) ! agrP3 Sg ! VPInfinit Simul).inf,
|
vp.a1 ! Pos ++ vp.adj ++ (vps.s ! (notB isAux) ! agrP3 Sg ! VPInfinit Simul).inf,
|
||||||
vp.inf,
|
vp.inf,
|
||||||
vp.ext
|
vp.infExt ++ vp.ext
|
||||||
> ;
|
> ;
|
||||||
|
|
||||||
useInfVP : Bool -> VP -> Str = \isAux,vp ->
|
useInfVP : Bool -> VP -> Str = \isAux,vp ->
|
||||||
let vpi = infVP isAux vp in
|
let vpi = infVP isAux vp in
|
||||||
vpi.p1 ! agrP3 Sg ++ vpi.p3 ++ vpi.p2 ;
|
vpi.p1 ! agrP3 Sg ++ vpi.p3 ++ vpi.p2 ++ vpi.p4 ;
|
||||||
|
|
||||||
-- The nominative case is not used as reflexive, but defined here
|
-- The nominative case is not used as reflexive, but defined here
|
||||||
-- so that we can reuse this in personal pronouns.
|
-- so that we can reuse this in personal pronouns.
|
||||||
|
|||||||
@@ -2,12 +2,12 @@
|
|||||||
|
|
||||||
resource MakeStructuralIta = open CatIta, ParadigmsIta, MorphoIta, Prelude in {
|
resource MakeStructuralIta = open CatIta, ParadigmsIta, MorphoIta, Prelude in {
|
||||||
|
|
||||||
oper
|
oper
|
||||||
mkConj : Str -> Str -> ParadigmsIta.Number -> Conj = \x,y,n ->
|
mkConj : Str -> Str -> ParadigmsIta.Number -> Conj = \x,y,n ->
|
||||||
{s1 = x ; s2 = y ; n = n ; lock_Conj = <>} ;
|
{s1 = x ; s2 = y ; n = n ; lock_Conj = <>} ;
|
||||||
mkSubj : Str -> Subj = \x ->
|
mkSubj : Str -> Subj = \x ->
|
||||||
{s = x ; m = Indic ; lock_Subj = <>} ;
|
{s = x ; m = Indic ; lock_Subj = <>} ;
|
||||||
mkSubjSubj : Str -> Subj = \x ->
|
mkSubjSubj : Str -> Subj = \x ->
|
||||||
{s = x ; m = Conjunct ; lock_Subj = <>} ;
|
{s = x ; m = Conjunct ; lock_Subj = <>} ;
|
||||||
|
|
||||||
mkIQuant : Str -> IQuant = \s ->
|
mkIQuant : Str -> IQuant = \s ->
|
||||||
@@ -21,9 +21,62 @@ oper
|
|||||||
} ;
|
} ;
|
||||||
mkPredet : Str -> Str -> Prep -> Bool -> Predet = \m,f,c,p -> lin Predet {
|
mkPredet : Str -> Str -> Prep -> Bool -> Predet = \m,f,c,p -> lin Predet {
|
||||||
s = \\g,k => prepCase k ++ case g.g of {Masc => m ; Fem => f} ; ---- number?
|
s = \\g,k => prepCase k ++ case g.g of {Masc => m ; Fem => f} ; ---- number?
|
||||||
c = c.c ;
|
c = c.c ;
|
||||||
a = if_then_else PAgr p (PAg Sg) PNoAg ---- e,g, "chacun de"; other possibilities?
|
a = if_then_else PAgr p (PAg Sg) PNoAg ---- e,g, "chacun de"; other possibilities?
|
||||||
} ;
|
} ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
mkQuant = overload {
|
||||||
|
-- Does not inflect for number or gender
|
||||||
|
mkQuant : Str -> Quant = \s ->
|
||||||
|
let
|
||||||
|
questo : Number => Gender => Case => Str = \\n,g,c => prepCase c ++ s ;
|
||||||
|
in lin Quant {
|
||||||
|
s = \\b => questo ;
|
||||||
|
sp = questo ;
|
||||||
|
s2 = [] ;
|
||||||
|
isNeg = False
|
||||||
|
} ;
|
||||||
|
-- Inflects for number and gender
|
||||||
|
mkQuant : Str -> Str -> Str -> Str -> Quant = \tutto,tutta,tutti,tutte ->
|
||||||
|
let
|
||||||
|
questo : Number => Gender => Case => Str = table {
|
||||||
|
Sg => table {
|
||||||
|
Masc => \\c => prepCase c ++ tutto ;
|
||||||
|
Fem => \\c => prepCase c ++ tutta
|
||||||
|
} ;
|
||||||
|
Pl => table {
|
||||||
|
Masc => \\c => prepCase c ++ tutti ;
|
||||||
|
Fem => \\c => prepCase c ++ tutte
|
||||||
|
}
|
||||||
|
}
|
||||||
|
in lin Quant {
|
||||||
|
s = \\b => questo ;
|
||||||
|
sp = questo ;
|
||||||
|
s2 = [] ;
|
||||||
|
isNeg = False
|
||||||
|
} ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
mkDet = overload {
|
||||||
|
-- Does not inflect for number
|
||||||
|
mkDet : Str -> Number -> Det = \piu,n -> lin Det {
|
||||||
|
s,sp = \\_,_ => piu ;
|
||||||
|
n = n ;
|
||||||
|
s2 = [] ;
|
||||||
|
isNeg = False
|
||||||
|
} ;
|
||||||
|
-- Inflects for number
|
||||||
|
mkDet : Str -> Str -> Number -> Det = \alcuni,alcune,n -> lin Det {
|
||||||
|
s,sp = table {
|
||||||
|
Masc => \\_ => alcuni ;
|
||||||
|
Fem => \\_ => alcune
|
||||||
|
} ;
|
||||||
|
n = n ;
|
||||||
|
s2 = [] ;
|
||||||
|
isNeg = False
|
||||||
|
} ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
3
src/italian/MarkupIta.gf
Normal file
3
src/italian/MarkupIta.gf
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
--# -path=.:../abstract:../common:../romance
|
||||||
|
|
||||||
|
concrete MarkupIta of Markup = CatIta, MarkHTMLX ** MarkupRomance with (ResRomance = ResIta) ;
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
-- syntax. To build a lexicon, it is better to use $ParadigmsIta$, which
|
-- syntax. To build a lexicon, it is better to use $ParadigmsIta$, which
|
||||||
-- gives a higher-level access to this module.
|
-- gives a higher-level access to this module.
|
||||||
|
|
||||||
resource MorphoIta = CommonRomance, ResIta **
|
resource MorphoIta = CommonRomance, ResIta **
|
||||||
open PhonoIta, Prelude, Predef in {
|
open PhonoIta, Prelude, Predef in {
|
||||||
|
|
||||||
flags optimize=all ;
|
flags optimize=all ;
|
||||||
@@ -23,7 +23,7 @@ resource MorphoIta = CommonRomance, ResIta **
|
|||||||
|
|
||||||
oper
|
oper
|
||||||
numForms : (_,_ : Str) -> Number => Str = \vino, vini ->
|
numForms : (_,_ : Str) -> Number => Str = \vino, vini ->
|
||||||
table {Sg => vino ; Pl => vini} ;
|
table {Sg => vino ; Pl => vini} ;
|
||||||
|
|
||||||
-- For example:
|
-- For example:
|
||||||
|
|
||||||
@@ -41,19 +41,23 @@ oper
|
|||||||
|
|
||||||
-- Common nouns are inflected in number and have an inherent gender.
|
-- Common nouns are inflected in number and have an inherent gender.
|
||||||
|
|
||||||
mkNoun : (Number => Str) -> Gender -> Noun = \mecmecs,gen ->
|
mkNoun : (Number => Str) -> Gender -> Noun = \mecmecs,gen ->
|
||||||
{s = mecmecs ; g = gen} ;
|
{s = mecmecs ; g = gen} ;
|
||||||
|
|
||||||
mkNounIrreg : Str -> Str -> Gender -> Noun = \mec,mecs ->
|
mkNounIrreg : Str -> Str -> Gender -> Noun = \mec,mecs ->
|
||||||
mkNoun (numForms mec mecs) ;
|
mkNoun (numForms mec mecs) ;
|
||||||
|
|
||||||
mkNomReg : Str -> Noun = \vino ->
|
mkNomReg : Str -> Noun = \vino ->
|
||||||
let
|
let
|
||||||
o = last vino ;
|
o = last vino ;
|
||||||
vin = init vino ;
|
vin = init vino ;
|
||||||
n = last vin
|
n = last vin
|
||||||
in
|
in
|
||||||
case vino of {
|
case vino of {
|
||||||
|
_ + "ico" => {s = numForms vino (vin + "i") -- amico -> amici
|
||||||
|
; g = Masc} ;
|
||||||
|
_ + "ccia" => {s = numForms vino (init vin + "e") -- doccia -> docce
|
||||||
|
; g = Fem} ;
|
||||||
_ + "o" => {s = case n of {
|
_ + "o" => {s = case n of {
|
||||||
"c" | "g" => numForms vino (vin + "hi") ;
|
"c" | "g" => numForms vino (vin + "hi") ;
|
||||||
"i" => numForms vino vin ;
|
"i" => numForms vino vin ;
|
||||||
@@ -90,22 +94,22 @@ oper
|
|||||||
|
|
||||||
-- Then the regular and invariant patterns.
|
-- Then the regular and invariant patterns.
|
||||||
|
|
||||||
adjSolo : Str -> Adj = \solo ->
|
adjSolo : Str -> Adj = \solo ->
|
||||||
let
|
let
|
||||||
sol = Predef.tk 1 solo
|
sol = Predef.tk 1 solo
|
||||||
in
|
in
|
||||||
mkAdj solo (sol + "a") (sol + "i") (sol + "e") (sol + "amente") ;
|
mkAdj solo (sol + "a") (sol + "i") (sol + "e") (sol + "amente") ;
|
||||||
|
|
||||||
adjTale : Str -> Adj = \tale ->
|
adjTale : Str -> Adj = \tale ->
|
||||||
let
|
let
|
||||||
tal = Predef.tk 1 tale ;
|
tal = Predef.tk 1 tale ;
|
||||||
tali = tal + "i" ;
|
tali = tal + "i" ;
|
||||||
tala = if_then_Str (pbool2bool (Predef.occur (Predef.dp 1 tal) "lr")) tal tale
|
tala = if_then_Str (pbool2bool (Predef.occur (Predef.dp 1 tal) "lr")) tal tale
|
||||||
in
|
in
|
||||||
mkAdj tale tale tali tali (tala + "mente") ;
|
mkAdj tale tale tali tali (tala + "mente") ;
|
||||||
|
|
||||||
adjBlu : Str -> Adj = \blu ->
|
adjBlu : Str -> Adj = \blu ->
|
||||||
mkAdj blu blu blu blu blu ; ---
|
mkAdj blu blu blu blu blu ; ---
|
||||||
|
|
||||||
|
|
||||||
mkAdjReg : Str -> Adj = \solo ->
|
mkAdjReg : Str -> Adj = \solo ->
|
||||||
@@ -117,7 +121,12 @@ oper
|
|||||||
in
|
in
|
||||||
case o of {
|
case o of {
|
||||||
"o" => case l of {
|
"o" => case l of {
|
||||||
"c" | "g" => mkAdj solo (sol + "a") (sol + "hi") (sol + "he") solamente ;
|
-- "c" | "g" => mkAdj solo (sol + "a") (sol + "hi") (sol + "he") solamente ;
|
||||||
|
"c" => case last (init sol) of {
|
||||||
|
"i" => mkAdj solo (sol + "a") (sol + "i") (sol + "he") solamente ; -- pubblico -> pubblici
|
||||||
|
_ => mkAdj solo (sol + "a") (sol + "hi") (sol + "he") solamente -- ricco -> ricchi
|
||||||
|
} ;
|
||||||
|
"g" => mkAdj solo (sol + "a") (sol + "hi") (sol + "he") solamente ;
|
||||||
"i" => mkAdj solo (sol + "a") sol (sol + "e") solamente ;
|
"i" => mkAdj solo (sol + "a") sol (sol + "e") solamente ;
|
||||||
_ => mkAdj solo (sol + "a") (sol + "i") (sol + "e") solamente
|
_ => mkAdj solo (sol + "a") (sol + "i") (sol + "e") solamente
|
||||||
} ;
|
} ;
|
||||||
@@ -138,7 +147,7 @@ oper
|
|||||||
-- given in $DiffIta.argPron$ and therefore wouldn't be needed in the
|
-- given in $DiffIta.argPron$ and therefore wouldn't be needed in the
|
||||||
-- pronoun itself.)
|
-- pronoun itself.)
|
||||||
|
|
||||||
mkPronoun : (_,_,_,_,_,_,_,_,_ : Str) ->
|
mkPronoun : (_,_,_,_,_,_,_,_,_ : Str) ->
|
||||||
Gender -> Number -> Person -> Pronoun =
|
Gender -> Number -> Person -> Pronoun =
|
||||||
\il,le,lui,glie,Lui,son,sa,ses,see,g,n,p ->
|
\il,le,lui,glie,Lui,son,sa,ses,see,g,n,p ->
|
||||||
let
|
let
|
||||||
@@ -155,14 +164,14 @@ oper
|
|||||||
<Sg,Masc> => son ;
|
<Sg,Masc> => son ;
|
||||||
<Sg,Fem> => sa ;
|
<Sg,Fem> => sa ;
|
||||||
<Pl,Masc> => ses ;
|
<Pl,Masc> => ses ;
|
||||||
<Pl,Fem> => see
|
<Pl,Fem> => see
|
||||||
} ;
|
} ;
|
||||||
a = Ag g n p ;
|
a = Ag g n p ;
|
||||||
hasClit = True ; isPol = False
|
hasClit = True ; isPol = False
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
{- --e
|
{- --e
|
||||||
mkPronoun : (_,_,_,_,_,_,_,_,_ : Str) ->
|
mkPronoun : (_,_,_,_,_,_,_,_,_ : Str) ->
|
||||||
Gender -> Number -> Person -> Pronoun =
|
Gender -> Number -> Person -> Pronoun =
|
||||||
\il,le,lui,glie,Lui,son,sa,ses,see,g,n,p ->
|
\il,le,lui,glie,Lui,son,sa,ses,see,g,n,p ->
|
||||||
{s = table {
|
{s = table {
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ concrete SymbolPes of Symbol = CatPes ** open Prelude, ResPes in {
|
|||||||
lin
|
lin
|
||||||
-- SymbPN i = {s = \\_ => i.s ; g = Masc} ;
|
-- SymbPN i = {s = \\_ => i.s ; g = Masc} ;
|
||||||
SymbPN i = {s = i.s ; animacy = Inanimate} ; -- "از" is removed for Phrasebook
|
SymbPN i = {s = i.s ; animacy = Inanimate} ; -- "از" is removed for Phrasebook
|
||||||
IntPN i = {s = i.s ++ "از" ; animacy = Inanimate} ;
|
IntPN i = {s = i.s ; animacy = Inanimate} ;
|
||||||
FloatPN i = {s = i.s ++ "از" ; animacy = Inanimate} ;
|
FloatPN i = {s = i.s ; animacy = Inanimate} ;
|
||||||
NumPN i = {s = i.s ; animacy = Inanimate} ;
|
NumPN i = {s = i.s ; animacy = Inanimate} ;
|
||||||
CNIntNP cn i = {
|
CNIntNP cn i = {
|
||||||
s = \\ez => cn.s ! aEzafa ! Sg ++ i.s ;
|
s = \\ez => cn.s ! aEzafa ! Sg ++ i.s ;
|
||||||
|
|||||||
21
src/romance/MarkupRomance.gf
Normal file
21
src/romance/MarkupRomance.gf
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
--# -path=.:../abstract:../common
|
||||||
|
|
||||||
|
incomplete concrete MarkupRomance of Markup = CatRomance, MarkHTMLX ** {
|
||||||
|
|
||||||
|
lin
|
||||||
|
MarkupCN m cn = cn ** {s = \\n => appMark m (cn.s ! n)} ;
|
||||||
|
MarkupNP m np = np ** {s = \\c => {
|
||||||
|
c1 = appMark m (np.s ! c).c1 ;
|
||||||
|
c2 = appMark m (np.s ! c).c2 ;
|
||||||
|
comp = appMark m (np.s ! c).comp ;
|
||||||
|
ton = appMark m (np.s ! c).ton
|
||||||
|
}
|
||||||
|
} ;
|
||||||
|
MarkupAP m ap = ap ** {s = \\a => appMark m (ap.s ! a)} ;
|
||||||
|
MarkupAdv m adv = {s = appMark m adv.s} ;
|
||||||
|
MarkupS m s = {s = \\md => appMark m (s.s ! md)} ;
|
||||||
|
MarkupUtt m utt = {s = appMark m utt.s} ;
|
||||||
|
MarkupPhr m phr = {s = appMark m phr.s} ;
|
||||||
|
MarkupText m txt = {s = appMark m txt.s} ;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -178,6 +178,16 @@ oper
|
|||||||
|
|
||||||
mkVPSlash : Compl -> VP -> VP ** {c2 : Compl} = \c,vp -> vp ** {c2 = c} ;
|
mkVPSlash : Compl -> VP -> VP ** {c2 : Compl} = \c,vp -> vp ** {c2 = c} ;
|
||||||
|
|
||||||
|
Clause : Type = {s : Direct => RTense => Anteriority => RPolarity => Mood => Str} ;
|
||||||
|
|
||||||
|
-- for pos/neg variation other than negation word, e.g. "il y a du vin" / "il n'y a pas de vin"
|
||||||
|
posNegClause : Clause -> Clause -> RPolarity -> Clause = \pos,neg,pol -> {
|
||||||
|
s = \\d,t,a,b,m => case b of {
|
||||||
|
RPos => pos.s ! d ! t ! a ! b ! m ;
|
||||||
|
_ => neg.s ! d ! t ! a ! pol ! m
|
||||||
|
}
|
||||||
|
} ;
|
||||||
|
|
||||||
mkClause : Str -> Bool -> Bool -> Agr -> VP ->
|
mkClause : Str -> Bool -> Bool -> Agr -> VP ->
|
||||||
{s : Direct => RTense => Anteriority => RPolarity => Mood => Str} =
|
{s : Direct => RTense => Anteriority => RPolarity => Mood => Str} =
|
||||||
mkClausePol False ;
|
mkClausePol False ;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
--# -path=.:../romance:../abstract:../common:prelude
|
--# -path=.:../romance:../abstract:../common:prelude
|
||||||
|
|
||||||
instance DiffSpa of DiffRomance - [partAgr,vpAgrSubj,vpAgrClits] = open CommonRomance, PhonoSpa, BeschSpa, Prelude in {
|
instance DiffSpa of DiffRomance - [partAgr,vpAgrSubj,vpAgrClits,contractInf] = open CommonRomance, PhonoSpa, BeschSpa, Prelude in {
|
||||||
|
|
||||||
flags optimize=noexpand ;
|
flags optimize=noexpand ;
|
||||||
coding=utf8 ;
|
coding=utf8 ;
|
||||||
@@ -10,7 +10,7 @@ instance DiffSpa of DiffRomance - [partAgr,vpAgrSubj,vpAgrClits] = open CommonRo
|
|||||||
partAgr : VType -> Bool = \vtyp -> False ;
|
partAgr : VType -> Bool = \vtyp -> False ;
|
||||||
vpAgrSubj : Verb -> VPAgrType = \v -> <verbDefaultPart v, False> ;
|
vpAgrSubj : Verb -> VPAgrType = \v -> <verbDefaultPart v, False> ;
|
||||||
vpAgrClits : Verb -> AAgr -> VPAgrType = \v,a -> <verbDefaultPart v, False> ;
|
vpAgrClits : Verb -> AAgr -> VPAgrType = \v,a -> <verbDefaultPart v, False> ;
|
||||||
|
contractInf : Bool -> Bool -> Bool = orB ; --- the effect of this is that the clitic is bound to the infinitive: matarte
|
||||||
--------------------------------
|
--------------------------------
|
||||||
|
|
||||||
param
|
param
|
||||||
|
|||||||
@@ -80,4 +80,10 @@ concrete ExtraSpa of ExtraSpaAbs = ExtraRomanceSpa **
|
|||||||
|
|
||||||
UseComp_estar comp = insertComplement comp.s (predV I.estar_V) ;
|
UseComp_estar comp = insertComplement comp.s (predV I.estar_V) ;
|
||||||
|
|
||||||
|
cual_IComp = {
|
||||||
|
s = aagrForms "cual" "cual" "cuáles" "cuáles" ;
|
||||||
|
cop = serCopula ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,4 +34,6 @@ abstract ExtraSpaAbs = ExtraRomanceAbs ** {
|
|||||||
|
|
||||||
UseComp_estar : Comp -> VP ; -- esta lleno, as opposed to es lleno
|
UseComp_estar : Comp -> VP ; -- esta lleno, as opposed to es lleno
|
||||||
|
|
||||||
|
cual_IComp : IComp ; -- cual es ...
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,4 +20,56 @@ oper
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|
||||||
|
mkQuant = overload {
|
||||||
|
-- Does not inflect for number or gender
|
||||||
|
mkQuant : Str -> Quant = \s ->
|
||||||
|
let
|
||||||
|
questo : Number => Gender => Case => Str = \\n,g,c => prepCase c ++ s ;
|
||||||
|
in lin Quant {
|
||||||
|
s = \\b => questo ;
|
||||||
|
sp = questo ;
|
||||||
|
s2 = [] ;
|
||||||
|
isNeg = False
|
||||||
|
} ;
|
||||||
|
-- Inflects for number and gender
|
||||||
|
mkQuant : Str -> Str -> Str -> Str -> Quant = \tutto,tutta,tutti,tutte ->
|
||||||
|
let
|
||||||
|
questo : Number => Gender => Case => Str = table {
|
||||||
|
Sg => table {
|
||||||
|
Masc => \\c => prepCase c ++ tutto ;
|
||||||
|
Fem => \\c => prepCase c ++ tutta
|
||||||
|
} ;
|
||||||
|
Pl => table {
|
||||||
|
Masc => \\c => prepCase c ++ tutti ;
|
||||||
|
Fem => \\c => prepCase c ++ tutte
|
||||||
|
}
|
||||||
|
}
|
||||||
|
in lin Quant {
|
||||||
|
s = \\b => questo ;
|
||||||
|
sp = questo ;
|
||||||
|
s2 = [] ;
|
||||||
|
isNeg = False
|
||||||
|
} ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
mkDet = overload {
|
||||||
|
-- Does not inflect for number
|
||||||
|
mkDet : Str -> Number -> Det = \piu,n -> lin Det {
|
||||||
|
s,sp = \\_,_ => piu ;
|
||||||
|
n = n ;
|
||||||
|
s2 = [] ;
|
||||||
|
isNeg = False
|
||||||
|
} ;
|
||||||
|
-- Inflects for number
|
||||||
|
mkDet : Str -> Str -> Number -> Det = \alcuni,alcune,n -> lin Det {
|
||||||
|
s,sp = table {
|
||||||
|
Masc => \\_ => alcuni ;
|
||||||
|
Fem => \\_ => alcune
|
||||||
|
} ;
|
||||||
|
n = n ;
|
||||||
|
s2 = [] ;
|
||||||
|
isNeg = False
|
||||||
|
} ;
|
||||||
|
} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
3
src/spanish/MarkupSpa.gf
Normal file
3
src/spanish/MarkupSpa.gf
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
--# -path=.:../abstract:../common:../romance
|
||||||
|
|
||||||
|
concrete MarkupSpa of Markup = CatSpa, MarkHTMLX ** MarkupRomance with (ResRomance = ResSpa) ;
|
||||||
@@ -139,8 +139,8 @@ lin
|
|||||||
when_Subj = ss "cuando" ** {m = Indic} ;
|
when_Subj = ss "cuando" ** {m = Indic} ;
|
||||||
where_IAdv = ss "dónde" ;
|
where_IAdv = ss "dónde" ;
|
||||||
which_IQuant = {s = table {
|
which_IQuant = {s = table {
|
||||||
Sg => \\g,c => prepCase c ++ "qué" ; --- cual
|
Sg => \\g,c => prepCase c ++ "cual" ;
|
||||||
Pl => \\g,c => prepCase c ++ "qué"
|
Pl => \\g,c => prepCase c ++ "cuales"
|
||||||
}
|
}
|
||||||
} ;
|
} ;
|
||||||
whoPl_IP = {s = \\c => prepCase c ++ "quién" ; a = aagr Masc Pl} ;
|
whoPl_IP = {s = \\c => prepCase c ++ "quién" ; a = aagr Masc Pl} ;
|
||||||
|
|||||||
@@ -15125,7 +15125,7 @@ lin deed_N = mkN "deed" "deeds";
|
|||||||
lin deed_box_N = variants {mkN "deed-box" "deed-boxes"; mkN "deedbox" "deedboxes"};
|
lin deed_box_N = variants {mkN "deed-box" "deed-boxes"; mkN "deedbox" "deedboxes"};
|
||||||
lin deedpoll_N = mkN "deedpoll" "deedpolls";
|
lin deedpoll_N = mkN "deedpoll" "deedpolls";
|
||||||
lin deem_V2 = mkV2 (mkV "deem" "deems" "deemed" "deemed" "deeming");
|
lin deem_V2 = mkV2 (mkV "deem" "deems" "deemed" "deemed" "deeming");
|
||||||
lin deem_V2A = mkV2V (mkV "deem") noPrep to_Prep;
|
lin deem_V2A = mkV2A (mkV "deem") noPrep;
|
||||||
lin deem_V2V = mkV2V (mkV "deem") noPrep to_Prep;
|
lin deem_V2V = mkV2V (mkV "deem") noPrep to_Prep;
|
||||||
lin deep_A = mkA "deep" "deeper";
|
lin deep_A = mkA "deep" "deeper";
|
||||||
lin deep_Adv = mkAdv "deep";
|
lin deep_Adv = mkAdv "deep";
|
||||||
|
|||||||
@@ -347,6 +347,35 @@ concrete LexiconTur of Lexicon = CatTur **
|
|||||||
watch_V2 = mkV2 (mkV "izlemek") ;
|
watch_V2 = mkV2 (mkV "izlemek") ;
|
||||||
win_V2 = mkV2 (mkV "kazanmak") ;
|
win_V2 = mkV2 (mkV "kazanmak") ;
|
||||||
wipe_V2 = mkV2 (mkV "silmek") ;
|
wipe_V2 = mkV2 (mkV "silmek") ;
|
||||||
wonder_VQ = mkV "merak" et_Aux ;
|
|
||||||
write_V2 = mkV2 (mkV "yazmak") ;
|
write_V2 = mkV2 (mkV "yazmak") ;
|
||||||
|
|
||||||
|
wonder_VQ = mkV "merak" et_Aux ;
|
||||||
|
know_VQ = mkV "bilmek" SgSylConIrreg ;
|
||||||
|
|
||||||
|
alas_Interj = { s = "ne yazık ki" } ;
|
||||||
|
|
||||||
|
already_Adv = mkAdv "zaten" ;
|
||||||
|
far_Adv = mkAdv "uzak" ;
|
||||||
|
now_Adv = mkAdv "şimdi" ;
|
||||||
|
today_Adv = mkAdv "bugün" ;
|
||||||
|
|
||||||
|
-- TODO: should `linearize easy_A2V` be (A) "kolay" (Eng "easy") or (B)
|
||||||
|
-- ("için kolay") (Eng "easy for")? I got the latter from the English
|
||||||
|
-- linearization but the following seems to be the correct way using the
|
||||||
|
-- paradigms. I might need to do something so that the resulting
|
||||||
|
-- linearization is (B).
|
||||||
|
easy_A2V = mkA2 (mkA "kolay") icinP ;
|
||||||
|
|
||||||
|
-- TODO: It is not obvious to me why these are inflected so putting
|
||||||
|
-- this here as an implementation stub.
|
||||||
|
left_Ord = { s = \\_,_ => "sol" } ;
|
||||||
|
right_Ord = { s = \\_,_ => "sağ" } ;
|
||||||
|
|
||||||
|
probable_AS = mkAS (mkA "olası") ;
|
||||||
|
|
||||||
|
fun_AV = mkAV (mkA "neşe") ;
|
||||||
|
|
||||||
|
|
||||||
|
oper
|
||||||
|
icinP = mkPrep "için" Gen ;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,8 +13,9 @@ resource ParadigmsTur = open
|
|||||||
coding=utf8 ; optimize=noexpand ;
|
coding=utf8 ; optimize=noexpand ;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
-- Paradigms for verb
|
AS, AV : Type = A ;
|
||||||
|
|
||||||
|
-- Paradigms for verb
|
||||||
mkV : overload {
|
mkV : overload {
|
||||||
-- make regular verbs, one form is enough
|
-- make regular verbs, one form is enough
|
||||||
mkV : (esmek : Str) -> V ;
|
mkV : (esmek : Str) -> V ;
|
||||||
@@ -155,6 +156,9 @@ resource ParadigmsTur = open
|
|||||||
mkA : Str -> Str -> HarVowP -> A ;
|
mkA : Str -> Str -> HarVowP -> A ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
mkAS : A -> AS ;
|
||||||
|
mkAV : A -> AV ;
|
||||||
|
|
||||||
mkA2 : overload {
|
mkA2 : overload {
|
||||||
-- (biri) ile evli
|
-- (biri) ile evli
|
||||||
mkA2 : A -> Prep -> A2 ;
|
mkA2 : A -> Prep -> A2 ;
|
||||||
@@ -184,6 +188,10 @@ resource ParadigmsTur = open
|
|||||||
makeDigit : Str -> Str -> Number -> {s : CardOrd => Number => Case => Str ; n : Number} ;
|
makeDigit : Str -> Str -> Number -> {s : CardOrd => Number => Case => Str ; n : Number} ;
|
||||||
|
|
||||||
|
|
||||||
|
-- Adverbs
|
||||||
|
|
||||||
|
mkAdv : Str -> Adv ;
|
||||||
|
|
||||||
--Implementation of verb paradigms
|
--Implementation of verb paradigms
|
||||||
|
|
||||||
mkV = overload {
|
mkV = overload {
|
||||||
@@ -425,6 +433,9 @@ resource ParadigmsTur = open
|
|||||||
|
|
||||||
mkN3 base = (mkN base) ** lin N3 {c1,c2 = lin Prep {s=[]; c=Gen}} ;
|
mkN3 base = (mkN base) ** lin N3 {c1,c2 = lin Prep {s=[]; c=Gen}} ;
|
||||||
|
|
||||||
|
-- Implementation for adverb paradigms.
|
||||||
|
mkAdv s = lin Adv { s = s } ;
|
||||||
|
|
||||||
-- Implementation of adjactive paradigms
|
-- Implementation of adjactive paradigms
|
||||||
mkA = overload {
|
mkA = overload {
|
||||||
-- güzel
|
-- güzel
|
||||||
@@ -441,6 +452,9 @@ resource ParadigmsTur = open
|
|||||||
mkA : (base, base1 : Str) -> (ih_har : HarVowP) -> A = \base,base1,ih_har -> (irregN_h base base ih_har) ** lin A {adv = addSuffix base (mkHar ih_har (getHarConP base)) adjAdvSuffix};
|
mkA : (base, base1 : Str) -> (ih_har : HarVowP) -> A = \base,base1,ih_har -> (irregN_h base base ih_har) ** lin A {adv = addSuffix base (mkHar ih_har (getHarConP base)) adjAdvSuffix};
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
mkAS v = v ;
|
||||||
|
mkAV v = v ;
|
||||||
|
|
||||||
mkA2 =
|
mkA2 =
|
||||||
overload {
|
overload {
|
||||||
mkA2 : A -> Prep -> A2 = \base,c -> base ** lin A2 {c = c} ;
|
mkA2 : A -> Prep -> A2 = \base,c -> base ** lin A2 {c = c} ;
|
||||||
|
|||||||
Reference in New Issue
Block a user