improved the performance of Romance while retaining correct agreement ; removed Diff modules from Phrasebook

This commit is contained in:
aarne
2010-04-06 20:35:12 +00:00
parent 40ec2f5229
commit f3ae4092d5
49 changed files with 161 additions and 240 deletions

View File

@@ -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
} ;
---

View File

@@ -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

View File

@@ -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

View File

@@ -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
}

View File

@@ -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 ?

View File

@@ -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 ;