mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-05-05 09:12:51 -06:00
improved the performance of Romance while retaining correct agreement ; removed Diff modules from Phrasebook
This commit is contained in:
@@ -63,12 +63,6 @@ oper
|
||||
_ => Masc
|
||||
} ;
|
||||
|
||||
conjAgr : Agr -> Agr -> Agr = \a,b -> case <a,b> of {
|
||||
<Ag g n p, Ag h m q> => Ag (conjGender g h) (conjNumber n m) (conjPerson p q) ;
|
||||
<Ag g n p, AgPol h> => Ag (conjGender g h) Pl (conjPerson p P2) ;
|
||||
<AgPol h, Ag g n p> => Ag (conjGender g h) Pl (conjPerson p P2) ;
|
||||
<AgPol g, AgPol h> => AgPol (conjGender g h)
|
||||
} ;
|
||||
|
||||
--3 Verbs
|
||||
--
|
||||
@@ -123,6 +117,27 @@ param
|
||||
oper
|
||||
AAgr : Type = {g : Gender ; n : Number} ;
|
||||
|
||||
Agr : Type = {g : Gender ; n : Number ; p : Person} ;
|
||||
|
||||
complAgr : Agr -> {g : Gender ; n : Number} = \a -> {g = a.g ; n = a.n} ;
|
||||
|
||||
verbAgr : Agr -> {g : Gender ; n : Number ; p : Person} = \a -> a ;
|
||||
|
||||
conjAgr : Agr -> Agr -> Agr = \a,b ->
|
||||
{g = conjGender a.g b.g ; n = conjNumber a.n b.n ; p = conjPerson a.p b.p} ;
|
||||
|
||||
Ag : Gender -> Number -> Person -> Agr = \g,n,p -> {g = g ; n = n ; p = p} ;
|
||||
|
||||
-- The imperative forms depend on number and person.
|
||||
|
||||
vImper : Number -> Person -> VF = \n,p -> case <n,p> of {
|
||||
<Sg,P2> => VImper SgP2 ;
|
||||
<Pl,P1> => VImper PlP1 ;
|
||||
<Pl,P2> => VImper PlP2 ;
|
||||
_ => VInfin False
|
||||
} ;
|
||||
|
||||
{-
|
||||
param
|
||||
Agr = Ag Gender Number Person | AgPol Gender ;
|
||||
|
||||
@@ -136,6 +151,21 @@ param
|
||||
AgPol g => {g = g ; n = Pl ; p = P2}
|
||||
} ;
|
||||
|
||||
conjAgr : Agr -> Agr -> Agr = \a,b -> case <a,b> of {
|
||||
<Ag g n p, Ag h m q> => Ag (conjGender g h) (conjNumber n m) (conjPerson p q) ;
|
||||
<Ag g n p, AgPol h> => Ag (conjGender g h) Pl (conjPerson p P2) ;
|
||||
<AgPol h, Ag g n p> => Ag (conjGender g h) Pl (conjPerson p P2) ;
|
||||
<AgPol g, AgPol h> => AgPol (conjGender g h)
|
||||
} ;
|
||||
|
||||
vImperForm : Agr -> VF = \a -> case a of {
|
||||
Ag _ Pl P1 => VImper PlP1 ;
|
||||
Ag _ n P3 => VFin (VPres Conjunct) n P3 ;
|
||||
Ag _ Sg _ => VImper SgP2 ;
|
||||
_ => VImper PlP2 -- covers French AgPol
|
||||
} ;
|
||||
|
||||
-}
|
||||
param
|
||||
RAgr = RAg {g : Gender ; n : Number} | RNoAg ; --- AAgr
|
||||
PAgr = PAg Number | PNoAg ;
|
||||
@@ -159,23 +189,6 @@ oper
|
||||
|
||||
presInd = VPres Indic ;
|
||||
|
||||
-- The imperative forms depend on number and person.
|
||||
|
||||
vImper : Number -> Person -> VF = \n,p -> case <n,p> of {
|
||||
<Sg,P2> => VImper SgP2 ;
|
||||
<Pl,P1> => VImper PlP1 ;
|
||||
<Pl,P2> => VImper PlP2 ;
|
||||
_ => VInfin False
|
||||
} ;
|
||||
|
||||
vImperForm : Agr -> VF = \a -> case a of {
|
||||
Ag _ Pl P1 => VImper PlP1 ;
|
||||
Ag _ n P3 => VFin (VPres Conjunct) n P3 ;
|
||||
Ag _ Sg _ => VImper SgP2 ;
|
||||
_ => VImper PlP2 -- covers French AgPol
|
||||
} ;
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@ interface DiffRomance = open CommonRomance, Prelude in {
|
||||
|
||||
-- To render imperatives (with their clitics etc).
|
||||
|
||||
oper mkImperative : Bool -> Person -> VP -> {s : Polarity => Agr => Str} ;
|
||||
oper mkImperative : Bool -> Person -> VP -> Polarity => Gender => Number => Str ;
|
||||
|
||||
--2 Constants that must derivatively depend on language
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ incomplete concrete QuestionRomance of Question =
|
||||
QuestVP qp vp = {
|
||||
s = \\t,a,b,_ =>
|
||||
let
|
||||
cl = mkClause (qp.s ! Nom) False (agrP3 qp.a.g qp.a.n) vp
|
||||
cl = mkClause (qp.s ! Nom) False False (agrP3 qp.a.g qp.a.n) vp
|
||||
in
|
||||
cl.s ! DDir ! t ! a ! b ! Indic
|
||||
} ;
|
||||
@@ -50,7 +50,7 @@ incomplete concrete QuestionRomance of Question =
|
||||
s = \\t,a,p,_ =>
|
||||
let
|
||||
vp = predV copula ;
|
||||
cls = (mkClause (np.s ! Nom).comp np.hasClit np.a vp).s !
|
||||
cls = (mkClause (np.s ! Nom).comp np.hasClit np.isPol np.a vp).s !
|
||||
DInv ! t ! a ! p ! Indic ;
|
||||
why = icomp.s ! complAgr np.a ;
|
||||
in why ++ cls
|
||||
|
||||
@@ -15,12 +15,12 @@ incomplete concrete RelativeRomance of Relative =
|
||||
RelVP rp vp = case rp.hasAgr of {
|
||||
True => {s = \\ag =>
|
||||
(mkClause
|
||||
(rp.s ! False ! complAgr ag ! Nom) False
|
||||
(rp.s ! False ! complAgr ag ! Nom) False False
|
||||
(Ag rp.a.g rp.a.n P3)
|
||||
vp).s ! DDir ; c = Nom} ;
|
||||
False => {s = \\ag =>
|
||||
(mkClause
|
||||
(rp.s ! False ! complAgr ag ! Nom) False
|
||||
(rp.s ! False ! complAgr ag ! Nom) False False
|
||||
ag
|
||||
vp).s ! DDir ; c = Nom
|
||||
}
|
||||
|
||||
@@ -15,7 +15,8 @@ oper
|
||||
NounPhrase : Type = {
|
||||
s : Case => {c1,c2,comp,ton : Str} ;
|
||||
a : Agr ;
|
||||
hasClit : Bool
|
||||
hasClit : Bool ;
|
||||
isPol : Bool --- only needed for French complement agr
|
||||
} ;
|
||||
Pronoun : Type = NounPhrase ** {
|
||||
poss : Number => Gender => Str ---- also: substantival
|
||||
@@ -24,7 +25,8 @@ oper
|
||||
heavyNP : {s : Case => Str ; a : Agr} -> NounPhrase = \np -> {
|
||||
s = \\c => {comp,ton = np.s ! c ; c1,c2 = []} ;
|
||||
a = np.a ;
|
||||
hasClit = False
|
||||
hasClit = False ;
|
||||
isPol = False
|
||||
} ;
|
||||
|
||||
Compl : Type = {s : Str ; c : Case ; isDir : Bool} ;
|
||||
@@ -188,19 +190,22 @@ oper
|
||||
ext : Polarity => Str ; -- que je dors / que je dorme
|
||||
} ;
|
||||
|
||||
mkClause : Str -> Bool -> Agr -> VP ->
|
||||
mkClause : Str -> Bool -> Bool -> Agr -> VP ->
|
||||
{s : Direct => RTense => Anteriority => Polarity => Mood => Str} =
|
||||
\subj, hasClit, ag, vp -> {
|
||||
\subj, hasClit, isPol, agr, vp -> {
|
||||
s = \\d,te,a,b,m =>
|
||||
let
|
||||
neg = vp.neg ! b ;
|
||||
compl = vp.comp ! ag ++ vp.ext ! b ;
|
||||
neg = vp.neg ! b ;
|
||||
|
||||
agr = verbAgr ag ;
|
||||
gen = agr.g ;
|
||||
num = agr.n ;
|
||||
per = agr.p ;
|
||||
|
||||
compl = case isPol of {
|
||||
True => vp.comp ! {g = gen ; n = Sg ; p = per} ;
|
||||
_ => vp.comp ! agr
|
||||
} ++ vp.ext ! b ;
|
||||
|
||||
vtyp = vp.s.vtyp ;
|
||||
refl = case vtyp of {
|
||||
VRefl => reflPron num per Acc ; ---- case ?
|
||||
|
||||
@@ -4,13 +4,13 @@ incomplete concrete SentenceRomance of Sentence =
|
||||
flags optimize=all_subs ;
|
||||
|
||||
lin
|
||||
PredVP np vp = mkClause (np.s ! Nom).comp np.hasClit np.a vp ;
|
||||
PredVP np vp = mkClause (np.s ! Nom).comp np.hasClit np.isPol np.a vp ;
|
||||
|
||||
PredSCVP sc vp = mkClause sc.s False (agrP3 Masc Sg) vp ;
|
||||
PredSCVP sc vp = mkClause sc.s False False (agrP3 Masc Sg) vp ;
|
||||
|
||||
ImpVP vp = {
|
||||
s = \\p,i,g => case i of {
|
||||
ImpF n b => (mkImperative b P2 vp).s ! p ! (Ag g n P2) ---- AgPol ?
|
||||
ImpF n b => mkImperative b P2 vp ! p ! g ! n ---- AgPol ?
|
||||
}
|
||||
} ;
|
||||
|
||||
@@ -23,7 +23,7 @@ incomplete concrete SentenceRomance of Sentence =
|
||||
---- <Acc,True> => insertAgr ag v2 ;
|
||||
---- _ => v2
|
||||
----e }
|
||||
in (mkClause (np.s ! Nom).comp np.hasClit np.a vp).s ;
|
||||
in (mkClause (np.s ! Nom).comp np.hasClit np.isPol np.a vp).s ;
|
||||
c2 = v2.c2
|
||||
} ;
|
||||
|
||||
@@ -40,7 +40,7 @@ incomplete concrete SentenceRomance of Sentence =
|
||||
SlashVS np vs slash =
|
||||
{s = \\ag =>
|
||||
(mkClause
|
||||
(np.s ! Nom).comp np.hasClit np.a
|
||||
(np.s ! Nom).comp np.hasClit np.isPol np.a
|
||||
(insertExtrapos (\\b => conjThat ++ slash.s ! ag ! (vs.m ! b))
|
||||
(predV vs))
|
||||
).s ;
|
||||
|
||||
Reference in New Issue
Block a user