diff --git a/examples/phrasebook/pgraph.png b/examples/phrasebook/pgraph.png
new file mode 100644
index 000000000..33a0c7b49
Binary files /dev/null and b/examples/phrasebook/pgraph.png differ
diff --git a/examples/phrasebook/phrasebook.html b/examples/phrasebook/phrasebook.html
index af4a7dbfe..d7ead422c 100644
--- a/examples/phrasebook/phrasebook.html
+++ b/examples/phrasebook/phrasebook.html
@@ -116,6 +116,18 @@ Separate concrete syntaxes.
DisambPhrasebook: disambiguation grammars generating feedback phrases if
the input language is ambiguous.
+
+Here is the module structure produced by
+
+
+ > i -retain DisambPhrasebookEng.gf
+ > dg -only=Phrasebook*,Sentences*,Words*,Greetings*,DiffP*,DisambPhrasebookEng
+ > ! dot -Tpng _gfdepgraph.dot >pgraph.png
+
+
+
+
+
To Do
Improved translation interface
diff --git a/examples/phrasebook/phrasebook.txt b/examples/phrasebook/phrasebook.txt
index 556a64fb2..e8387308c 100644
--- a/examples/phrasebook/phrasebook.txt
+++ b/examples/phrasebook/phrasebook.txt
@@ -97,6 +97,15 @@ Separate concrete syntaxes.
``DisambPhrasebook``: disambiguation grammars generating feedback phrases if
the input language is ambiguous.
+Here is the module structure produced by
+```
+ > i -retain DisambPhrasebookEng.gf
+ > dg -only=Phrasebook*,Sentences*,Words*,Greetings*,DiffP*,DisambPhrasebookEng
+ > ! dot -Tpng _gfdepgraph.dot >pgraph.png
+```
+
+[pgraph.png]
+
=To Do=
diff --git a/lib/src/catalan/DiffCat.gf b/lib/src/catalan/DiffCat.gf
index 1c626054c..8a484407e 100644
--- a/lib/src/catalan/DiffCat.gf
+++ b/lib/src/catalan/DiffCat.gf
@@ -88,10 +88,11 @@ oper
infForm _ _ _ _ = True ;
mkImperative b p vp = {
- s = \\pol,aag =>
+ s = \\pol,agr =>
let
pe = case b of {True => P3 ; _ => p} ;
- agr = aag ** {p = pe} ;
+---- agr = aag ** {p = pe} ;
+ aag = verbAgr agr ; ----
clpr = <[],[],False> ; ----e pronArg agr.n agr.p vp.clAcc vp.clDat ;
----e verb = case of {
----e => (vp.s ! VPInfinit Simul clpr.p3).inf ! aag ;
diff --git a/lib/src/catalan/IdiomCat.gf b/lib/src/catalan/IdiomCat.gf
index 9a6079dcd..56b18c7aa 100644
--- a/lib/src/catalan/IdiomCat.gf
+++ b/lib/src/catalan/IdiomCat.gf
@@ -38,7 +38,7 @@ concrete IdiomCat of Idiom = CatCat **
} ;
ImpPl1 vp = {s =
- (mkImperative False P1 vp).s ! Pos ! {n = Pl ; g = Masc} --- fem
+ (mkImperative False P1 vp).s ! Pos ! Ag Masc Pl P1 ; --- fem
} ;
CleftAdv ad s = mkClause [] True (agrP3 Masc Sg)
diff --git a/lib/src/catalan/MorphoCat.gf b/lib/src/catalan/MorphoCat.gf
index 8aa7a58db..689aa1865 100644
--- a/lib/src/catalan/MorphoCat.gf
+++ b/lib/src/catalan/MorphoCat.gf
@@ -146,7 +146,7 @@ oper
=> sa ;
_ => ses
} ;
- a = {g = g ; n = n ; p = p} ;
+ a = Ag g n p ;
hasClit = True
} ;
diff --git a/lib/src/finnish/ExtraFin.gf b/lib/src/finnish/ExtraFin.gf
index 2cb86d506..381b72104 100644
--- a/lib/src/finnish/ExtraFin.gf
+++ b/lib/src/finnish/ExtraFin.gf
@@ -31,9 +31,10 @@ concrete ExtraFin of ExtraFinAbs = CatFin **
RelExistNP prep rp np = {
s = \\t,ant,bo,ag =>
- let cl =
- mkClause
- (\_ -> appCompl True Pos prep (rp2np ag.n rp))
+ let
+ n = complNumAgr ag ;
+ cl = mkClause
+ (\_ -> appCompl True Pos prep (rp2np n rp))
np.a
(insertObj
(\\_,b,_ => np.s ! NPCase Nom)
@@ -71,7 +72,7 @@ concrete ExtraFin of ExtraFinAbs = CatFin **
vai_Conj = {s1 = [] ; s2 = "vai" ; n = Sg} ;
CompPartAP ap = {
- s = \\agr => ap.s ! False ! NCase agr.n Part
+ s = \\agr => ap.s ! False ! NCase (complNumAgr agr) Part
} ;
}
diff --git a/lib/src/french/DiffFre.gf b/lib/src/french/DiffFre.gf
index 30bb1b55f..17be8b770 100644
--- a/lib/src/french/DiffFre.gf
+++ b/lib/src/french/DiffFre.gf
@@ -62,7 +62,8 @@ instance DiffFre of DiffRomance = open CommonRomance, PhonoFre, Prelude in {
_ => VPAgrSubj
} ;
- vpAgrClit : Agr -> VPAgr = \a ->
+ vpAgrClit : Agr -> VPAgr = \a0 ->
+ let a = complAgr a0 in
VPAgrClit a.g a.n ;
---- pronArg = pronArgGen Neg ; --- takes more space and time
@@ -118,14 +119,14 @@ instance DiffFre of DiffRomance = open CommonRomance, PhonoFre, Prelude in {
} ;
mkImperative b p vp = {
- s = \\pol,aag =>
+ s = \\pol,ag =>
let
- num = if_then_else Number b Pl aag.n ;
- agr = {g = aag.g ; n = num ; p = p} ;
- verb = vp.s.s ! vImperForm agr ;
+ agr = verbAgr ag ;
+ num = if_then_else Number b Pl agr.n ;
+ verb = vp.s.s ! vImperForm ag ;
neg = vp.neg ! pol ;
clpr = ; ---- TODO: True if clit
- compl = vp.comp ! agr ++ vp.ext ! pol
+ compl = vp.comp ! ag ++ vp.ext ! pol
in
case pol of {
Pos => verb ++ if_then_Str clpr.p2 "-" [] ++ clpr.p1 ++ compl ;
diff --git a/lib/src/french/ExtraFre.gf b/lib/src/french/ExtraFre.gf
index 1877d8334..00005bff7 100644
--- a/lib/src/french/ExtraFre.gf
+++ b/lib/src/french/ExtraFre.gf
@@ -42,9 +42,8 @@ concrete ExtraFre of ExtraFreAbs = ExtraRomanceFre **
Fem Sg P2 ;
youPl8fem_Pron,
youPol8fem_Pron =
- mkPronoun
- "vous" "vous" "vous" "vous" "votre" "votre" "vos"
- Fem Pl P2 ;
+ let vous = mkPronoun "vous" "vous" "vous" "vous" "votre" "votre" "vos" Masc Pl P2
+ in {s = vous.s ; hasClit = vous.hasClit ; poss = vous.poss ; a = AgPol Fem} ;
oper
prepQue : Case -> Str = \c -> case c of {
diff --git a/lib/src/french/IdiomFre.gf b/lib/src/french/IdiomFre.gf
index 38d00d2d7..e01073085 100644
--- a/lib/src/french/IdiomFre.gf
+++ b/lib/src/french/IdiomFre.gf
@@ -34,7 +34,7 @@ concrete IdiomFre of Idiom = CatFre **
(predV copula) ;
ImpPl1 vp = {s =
- (mkImperative False P1 vp).s ! Pos ! {n = Pl ; g = Masc} --- fem
+ (mkImperative False P1 vp).s ! Pos ! Ag Masc Pl P1 --- fem
} ;
ImpP3 np vp = {
diff --git a/lib/src/french/MorphoFre.gf b/lib/src/french/MorphoFre.gf
index 00dd88536..a95b1c58a 100644
--- a/lib/src/french/MorphoFre.gf
+++ b/lib/src/french/MorphoFre.gf
@@ -177,7 +177,7 @@ oper
=> sa ;
_ => ses
} ;
- a = {g = g ; n = n ; p = p} ;
+ a = Ag g n p ;
hasClit = True
} ;
diff --git a/lib/src/french/StructuralFre.gf b/lib/src/french/StructuralFre.gf
index ebc7ef9d3..347f5c5fa 100644
--- a/lib/src/french/StructuralFre.gf
+++ b/lib/src/french/StructuralFre.gf
@@ -166,10 +166,13 @@ lin
youSg_Pron = mkPronoun
"tu" (elision "t") (elision "t") "toi" "ton" (elisPoss "t") "tes"
Masc Sg P2 ;
- youPl_Pron, youPol_Pron =
+ youPl_Pron =
mkPronoun
"vous" "vous" "vous" "vous" "votre" "votre" "vos"
Masc Pl P2 ;
+ youPol_Pron =
+ let vous = mkPronoun "vous" "vous" "vous" "vous" "votre" "votre" "vos" Masc Pl P2
+ in {s = vous.s ; hasClit = vous.hasClit ; poss = vous.poss ; a = AgPol Masc} ;
not_Predet = {s = \\a,c => prepCase c ++ "pas" ; c = Nom ; a = PNoAg} ;
diff --git a/lib/src/italian/DiffIta.gf b/lib/src/italian/DiffIta.gf
index 3fa3f844b..3c6eab703 100644
--- a/lib/src/italian/DiffIta.gf
+++ b/lib/src/italian/DiffIta.gf
@@ -77,8 +77,9 @@ instance DiffIta of DiffRomance = open CommonRomance, PhonoIta, BeschIta, Prelud
_ => VPAgrSubj
} ;
- vpAgrClit : Agr -> VPAgr = \a ->
- VPAgrClit a.g a.n ; --- subty
+ vpAgrClit : Agr -> VPAgr = \a0 ->
+ let a = complAgr a0 in
+ VPAgrClit a.g a.n ;
pronArg = \n,p,acc,dat ->
let
@@ -108,10 +109,11 @@ instance DiffIta of DiffRomance = open CommonRomance, PhonoIta, BeschIta, Prelud
infForm n p x y = (pronArg n p x y).p3 ;
mkImperative b p vp = {
- s = \\pol,aag =>
+ s = \\pol,agr =>
let
pe = case b of {True => P3 ; _ => p} ;
- agr = aag ** {p = pe} ;
+---- agr = aag ** {p = pe} ;
+ aag = verbAgr agr ; ----
clpr = ; ---- TODO: True is clit
verb = case of {
=> vp.s.s ! VInfin clpr.p3 ; ---- ! aag ;
diff --git a/lib/src/italian/IdiomIta.gf b/lib/src/italian/IdiomIta.gf
index 0ca5c094a..4669ef2ba 100644
--- a/lib/src/italian/IdiomIta.gf
+++ b/lib/src/italian/IdiomIta.gf
@@ -18,7 +18,8 @@ concrete IdiomIta of Idiom = CatIta **
(insertComplement (\\_ => ad.s) (predV copula))) ;
ExistNP np =
- mkClause [] True (agrP3 np.a.g np.a.n)
+ let npa = complAgr np.a in
+ mkClause [] True (agrP3 npa.g npa.n)
(insertClit3 (elision "ci" "c'" "ci")
(insertComplement (\\_ => (np.s ! Nom).ton)
(predV copula))) ;
@@ -43,7 +44,7 @@ concrete IdiomIta of Idiom = CatIta **
(predV (essereV (verboV (stare_16 "stare")))) ;
ImpPl1 vp = {s =
- (mkImperative False P1 vp).s ! Pos ! {n = Pl ; g = Masc} --- fem
+ (mkImperative False P1 vp).s ! Pos ! Ag Masc Pl P1 --- fem
} ;
}
diff --git a/lib/src/italian/MorphoIta.gf b/lib/src/italian/MorphoIta.gf
index 43f58fa0e..ad0ce1202 100644
--- a/lib/src/italian/MorphoIta.gf
+++ b/lib/src/italian/MorphoIta.gf
@@ -154,7 +154,7 @@ oper
=> ses ;
=> see
} ;
- a = {g = g ; n = n ; p = p} ;
+ a = Ag g n p ;
hasClit = True
} ;
diff --git a/lib/src/romance/CommonRomance.gf b/lib/src/romance/CommonRomance.gf
index 3d6c27497..ae23addfc 100644
--- a/lib/src/romance/CommonRomance.gf
+++ b/lib/src/romance/CommonRomance.gf
@@ -63,12 +63,12 @@ oper
_ => Masc
} ;
- conjAgr : Agr -> Agr -> Agr = \a,b -> {
- g = conjGender a.g b.g ;
- n = conjNumber a.n b.n ;
- p = conjPerson a.p b.p
- } ;
-
+ conjAgr : Agr -> Agr -> Agr = \a,b -> case of {
+ => Ag (conjGender g h) (conjNumber n m) (conjPerson p q) ;
+ => Ag (conjGender g h) Pl (conjPerson p P2) ;
+ => Ag (conjGender g h) Pl (conjPerson p P2) ;
+ => AgPol (conjGender g h)
+ } ;
--3 Verbs
--
@@ -122,7 +122,19 @@ param
oper
AAgr : Type = {g : Gender ; n : Number} ;
- Agr : Type = AAgr ** {p : Person} ;
+
+param
+ Agr = Ag Gender Number Person | AgPol Gender ;
+
+ oper
+ complAgr : Agr -> {g : Gender ; n : Number} = \a -> case a of {
+ Ag g n _ => {g = g ; n = n} ;
+ AgPol g => {g = g ; n = Sg} -- vous êtes fatiguée
+ } ;
+ verbAgr : Agr -> {g : Gender ; n : Number ; p : Person} = \a -> case a of {
+ Ag g n p => {g = g ; n = n ; p = p} ;
+ AgPol g => {g = g ; n = Pl ; p = P2}
+ } ;
param
RAgr = RAg {g : Gender ; n : Number} | RNoAg ; --- AAgr
@@ -137,7 +149,7 @@ oper
aagr : Gender -> Number -> AAgr = \g,n ->
{g = g ; n = n} ;
agrP3 : Gender -> Number -> Agr = \g,n ->
- aagr g n ** {p = P3} ;
+ Ag g n P3 ;
vf2numpers : VF -> (Number * Person) = \v -> case v of {
@@ -156,11 +168,11 @@ oper
_ => VInfin False
} ;
- vImperForm : Agr -> VF = \a -> case of {
- => VImper PlP1 ;
- <_, P3> => VFin (VPres Conjunct) a.n P3 ;
- => VImper SgP2 ;
- => VImper PlP2
+ 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
} ;
diff --git a/lib/src/romance/ConjunctionRomance.gf b/lib/src/romance/ConjunctionRomance.gf
index 521d2ed4b..8d98dd715 100644
--- a/lib/src/romance/ConjunctionRomance.gf
+++ b/lib/src/romance/ConjunctionRomance.gf
@@ -10,7 +10,7 @@ incomplete concrete ConjunctionRomance of Conjunction =
ConjAdv conj ss = conjunctDistrSS conj ss ;
ConjNP conj ss = heavyNP (conjunctDistrTable Case conj ss ** {
- a = {g = ss.a.g ; n = conjNumber conj.n ss.a.n ; p = ss.a.p} ;
+ a = conjAgr (Ag Masc conj.n P3) ss.a ;
hasClit = False
}) ;
ConjAP conj ss = conjunctDistrTable AForm conj ss ** {
diff --git a/lib/src/romance/DiffRomance.gf b/lib/src/romance/DiffRomance.gf
index 742e98b6b..c8d056f6a 100644
--- a/lib/src/romance/DiffRomance.gf
+++ b/lib/src/romance/DiffRomance.gf
@@ -49,7 +49,7 @@ interface DiffRomance = open CommonRomance, Prelude in {
-- To render imperatives (with their clitics etc).
- oper mkImperative : Bool -> Person -> VP -> {s : Polarity => AAgr => Str} ;
+ oper mkImperative : Bool -> Person -> VP -> {s : Polarity => Agr => Str} ;
--2 Constants that must derivatively depend on language
diff --git a/lib/src/romance/NounRomance.gf b/lib/src/romance/NounRomance.gf
index a8e0e5c3e..7c71b4d81 100644
--- a/lib/src/romance/NounRomance.gf
+++ b/lib/src/romance/NounRomance.gf
@@ -18,16 +18,20 @@ incomplete concrete NounRomance of Noun =
UsePron p = p ;
- PredetNP pred np = heavyNP {
- s = \\c => pred.s ! aagr (np.a.g) (np.a.n) ! c ++ (np.s ! pred.c).ton ;
- a = case pred.a of {PAg n => agrP3 np.a.g n ; _ => np.a} ;
- hasClit = False
+ PredetNP pred np =
+ let agr = complAgr np.a in
+ heavyNP {
+ s = \\c => pred.s ! agr ! c ++ (np.s ! pred.c).ton ;
+ a = case pred.a of {PAg n => agrP3 agr.g n ; _ => np.a} ;
+ hasClit = False
} ;
- PPartNP np v2 = heavyNP {
- s = \\c => (np.s ! c).ton ++ v2.s ! VPart np.a.g np.a.n ;
- a = np.a ;
- hasClit = False
+ PPartNP np v2 =
+ let agr = complAgr np.a in
+ heavyNP {
+ s = \\c => (np.s ! c).ton ++ v2.s ! VPart agr.g agr.n ;
+ a = np.a ;
+ hasClit = False
} ;
RelNP np rs = heavyNP {
diff --git a/lib/src/romance/QuestionRomance.gf b/lib/src/romance/QuestionRomance.gf
index 09a6e5e9e..4cae05232 100644
--- a/lib/src/romance/QuestionRomance.gf
+++ b/lib/src/romance/QuestionRomance.gf
@@ -52,7 +52,7 @@ incomplete concrete QuestionRomance of Question =
vp = predV copula ;
cls = (mkClause (np.s ! Nom).comp np.hasClit np.a vp).s !
DInv ! t ! a ! p ! Indic ;
- why = icomp.s ! {g = np.a.g ; n = np.a.n}
+ why = icomp.s ! complAgr np.a ;
in why ++ cls
} ;
diff --git a/lib/src/romance/RelativeRomance.gf b/lib/src/romance/RelativeRomance.gf
index 1f5773e4a..163ca924f 100644
--- a/lib/src/romance/RelativeRomance.gf
+++ b/lib/src/romance/RelativeRomance.gf
@@ -6,7 +6,7 @@ incomplete concrete RelativeRomance of Relative =
lin
RelCl cl = {
- s = \\ag,t,a,p,m => pronSuch ! {g=ag.g; n=ag.n} ++ conjThat ++
+ s = \\ag,t,a,p,m => pronSuch ! complAgr ag ++ conjThat ++
cl.s ! DDir ! t ! a ! p ! m ;
c = Nom
} ;
@@ -15,12 +15,12 @@ incomplete concrete RelativeRomance of Relative =
RelVP rp vp = case rp.hasAgr of {
True => {s = \\ag =>
(mkClause
- (rp.s ! False ! {g = ag.g ; n = ag.n} ! Nom) False
- {g = rp.a.g ; n = rp.a.n ; p = P3}
+ (rp.s ! False ! complAgr ag ! Nom) False
+ (Ag rp.a.g rp.a.n P3)
vp).s ! DDir ; c = Nom} ;
False => {s = \\ag =>
(mkClause
- (rp.s ! False ! {g = ag.g ; n = ag.n} ! Nom) False
+ (rp.s ! False ! complAgr ag ! Nom) False
ag
vp).s ! DDir ; c = Nom
}
@@ -28,7 +28,7 @@ incomplete concrete RelativeRomance of Relative =
RelSlash rp slash = {
s = \\ag,t,a,p,m =>
- let aag = {g = ag.g ; n = ag.n}
+ let aag = complAgr ag
in
slash.c2.s ++
rp.s ! False ! aag ! slash.c2.c ++
@@ -38,7 +38,7 @@ incomplete concrete RelativeRomance of Relative =
FunRP p np rp = {
s = \\_,a,c => (np.s ! Nom).ton ++ p.s ++ rp.s ! True ! a ! p.c ;
- a = {g = np.a.g ; n = np.a.n} ;
+ a = complAgr np.a ;
hasAgr = True
} ;
IdRP = {
diff --git a/lib/src/romance/ResRomance.gf b/lib/src/romance/ResRomance.gf
index 090aa057c..2f0d74439 100644
--- a/lib/src/romance/ResRomance.gf
+++ b/lib/src/romance/ResRomance.gf
@@ -190,12 +190,13 @@ oper
mkClause : Str -> Bool -> Agr -> VP ->
{s : Direct => RTense => Anteriority => Polarity => Mood => Str} =
- \subj, hasClit, agr, vp -> {
+ \subj, hasClit, ag, vp -> {
s = \\d,te,a,b,m =>
let
neg = vp.neg ! b ;
- compl = vp.comp ! agr ++ vp.ext ! b ;
+ compl = vp.comp ! ag ++ vp.ext ! b ;
+ agr = verbAgr ag ;
gen = agr.g ;
num = agr.n ;
per = agr.p ;
diff --git a/lib/src/romance/SentenceRomance.gf b/lib/src/romance/SentenceRomance.gf
index 55e3423b1..f64ccf65c 100644
--- a/lib/src/romance/SentenceRomance.gf
+++ b/lib/src/romance/SentenceRomance.gf
@@ -10,13 +10,13 @@ incomplete concrete SentenceRomance of Sentence =
ImpVP vp = {
s = \\p,i,g => case i of {
- ImpF n b => (mkImperative b P2 vp).s ! p ! (aagr g n)
+ ImpF n b => (mkImperative b P2 vp).s ! p ! (Ag g n P2) ---- AgPol ?
}
} ;
SlashVP np v2 =
-- agreement decided afterwards: la fille qu'il a trouvée
- {s = \\ag =>
+ {s = \\_ =>
let
vp = v2
----e vp = case of {
diff --git a/lib/src/romance/VerbRomance.gf b/lib/src/romance/VerbRomance.gf
index 06166cdc2..d0dd0a738 100644
--- a/lib/src/romance/VerbRomance.gf
+++ b/lib/src/romance/VerbRomance.gf
@@ -11,7 +11,7 @@ incomplete concrete VerbRomance of Verb =
ComplVS v s = insertExtrapos (\\b => conjThat ++ s.s ! (v.m ! b)) (predV v) ;
ComplVQ v q = insertExtrapos (\\_ => q.s ! QIndir) (predV v) ;
ComplVA v ap =
- insertComplement (\\a => ap.s ! AF a.g a.n) (predV v) ;
+ insertComplement (\\a => let agr = complAgr a in ap.s ! AF agr.g agr.n) (predV v) ;
SlashV2a v = mkVPSlash v.c2 (predV v) ;
@@ -58,7 +58,7 @@ incomplete concrete VerbRomance of Verb =
ReflVP v = case v.c2.isDir of {
True => insertRefl v ;
False => insertComplement
- (\\a => v.c2.s ++ reflPron a.n a.p v.c2.c) v
+ (\\a => let agr = verbAgr a in v.c2.s ++ reflPron agr.n agr.p v.c2.c) v
} ;
SlashVV v vp =
@@ -73,14 +73,15 @@ incomplete concrete VerbRomance of Verb =
UseComp comp = insertComplement comp.s (predV copula) ;
- CompAP ap = {s = \\ag => ap.s ! AF ag.g ag.n} ;
+ CompAP ap = {s = \\ag => let agr = complAgr ag in ap.s ! AF agr.g agr.n} ;
CompNP np = {s = \\_ => (np.s ! Nom).ton} ;
CompAdv a = {s = \\_ => a.s} ;
AdvVP vp adv = insertAdv adv.s vp ;
AdVVP adv vp = insertAdV adv.s vp ;
- PassV2 v = insertComplement (\\a => v.s ! VPart a.g a.n) (predV auxPassive) ;
+ PassV2 v = insertComplement
+ (\\a => let agr = complAgr a in v.s ! VPart agr.g agr.n) (predV auxPassive) ;
}
diff --git a/lib/src/spanish/DiffSpa.gf b/lib/src/spanish/DiffSpa.gf
index 442cd43cb..d78d42b78 100644
--- a/lib/src/spanish/DiffSpa.gf
+++ b/lib/src/spanish/DiffSpa.gf
@@ -91,10 +91,12 @@ instance DiffSpa of DiffRomance = open CommonRomance, PhonoSpa, BeschSpa, Prelud
infForm _ _ _ _ = True ;
mkImperative b p vp = {
- s = \\pol,aag =>
+ s = \\pol,agr =>
let
pe = case b of {True => P3 ; _ => p} ;
- agr = aag ** {p = pe} ;
+---- agr = aag ** {p = pe} ;
+ aag = verbAgr agr ; ----
+
clpr = <[],[],False> ; ----e pronArg agr.n agr.p vp.clAcc vp.clDat ;
----e verb = case of {
----e => (vp.s ! VPInfinit Simul clpr.p3).inf ! aag ;
diff --git a/lib/src/spanish/IdiomSpa.gf b/lib/src/spanish/IdiomSpa.gf
index b2b12c1a9..92aff2105 100644
--- a/lib/src/spanish/IdiomSpa.gf
+++ b/lib/src/spanish/IdiomSpa.gf
@@ -39,7 +39,7 @@ concrete IdiomSpa of Idiom = CatSpa **
(predV (verboV (estar_2 "estar"))) ;
ImpPl1 vp = {s =
- (mkImperative False P1 vp).s ! Pos ! {n = Pl ; g = Masc} --- fem
+ (mkImperative False P1 vp).s ! Pos ! Ag Masc Pl P1 ; --- fem
} ;
}
diff --git a/lib/src/spanish/MorphoSpa.gf b/lib/src/spanish/MorphoSpa.gf
index a78e45e03..8a2b4fae5 100644
--- a/lib/src/spanish/MorphoSpa.gf
+++ b/lib/src/spanish/MorphoSpa.gf
@@ -110,7 +110,7 @@ oper
=> see
} ;
- a = {g = g ; n = n ; p = p} ;
+ a = Ag g n p ;
hasClit = True
} ;