diff --git a/examples/phrasebook/SentencesRon.gf b/examples/phrasebook/SentencesRon.gf index f7c404f60..94c94d9eb 100644 --- a/examples/phrasebook/SentencesRon.gf +++ b/examples/phrasebook/SentencesRon.gf @@ -1,26 +1,27 @@ concrete SentencesRon of Sentences = NumeralRon ** SentencesI - [ - IFemale, YouFamFemale, YouPolFemale, IMale, YouFamMale, YouPolMale - ] + IFemale, YouFamFemale, YouPolFemale, IMale, YouFamMale, YouPolMale, + ThePlace +] with (Syntax = SyntaxRon), (Symbolic = SymbolicRon), (Lexicon = LexiconRon) ** open SyntaxRon, ExtraRon in { - lin - IFemale = - {name = mkNP i8fem_Pron ; isPron = True ; poss = mkQuant i_Pron} ; - YouFamFemale = - {name = mkNP youSg8fem_Pron ; isPron = True ; poss = mkQuant youSg_Pron} ; - YouPolFemale = - {name = mkNP youPol8fem_Pron ; isPron = True ; poss = mkQuant youPol_Pron}; - IMale = - {name = mkNP i_Pron ; isPron = True ; poss = mkQuant i_Pron} ; - YouFamMale = - {name = mkNP youSg_Pron ; isPron = True ; poss = mkQuant youSg_Pron} ; - YouPolMale = - {name = mkNP youPol_Pron ; isPron = True ; poss = mkQuant youPol_Pron} ; + +lin + IFemale = {name = mkNP i8fem_Pron ; isPron = True ; poss = mkQuant i_Pron} ; + YouFamFemale = {name = mkNP youSg8fem_Pron ; isPron = True ; poss = mkQuant youSg_Pron} ; + YouPolFemale = {name = mkNP youPol8fem_Pron ; isPron = True ; poss = mkQuant youPol_Pron}; + IMale = {name = mkNP i_Pron ; isPron = True ; poss = mkQuant i_Pron} ; + YouFamMale = {name = mkNP youSg_Pron ; isPron = True ; poss = mkQuant youSg_Pron} ; + YouPolMale = {name = mkNP youPol_Pron ; isPron = True ; poss = mkQuant youPol_Pron} ; + ThePlace kind = let name : NP = mkNP the_Quant kind.name in { + name = name ; + at = if_then_else Adv kind.at.needIndef (mkAdv kind.at name) (mkAdv kind.at (mkNP kind.name)); + to = if_then_else Adv kind.at.needIndef (mkAdv kind.to name) (mkAdv kind.at (mkNP kind.name)) + } ; } diff --git a/examples/phrasebook/WordsRon.gf b/examples/phrasebook/WordsRon.gf index b20c5df1c..85b88046d 100644 --- a/examples/phrasebook/WordsRon.gf +++ b/examples/phrasebook/WordsRon.gf @@ -88,11 +88,11 @@ concrete WordsRon of Words = SentencesRon ** open (mkNP (mkNP a_Det (P.mkN "cameră")) (SyntaxRon.mkAdv for_Prep (mkNP num (P.mkN "persoană")))) ; AHasTable p num = mkCl p.name have_V2 (mkNP (mkNP a_Det (P.mkN "masa" "mese")) (SyntaxRon.mkAdv for_Prep (mkNP num (P.mkN "persoană")))) ; - AHasName p name = mkCl p.name (P.dirV2 (mkRVAcc (v_besch119 "numi"))) name ; + AHasName p name = mkCl p.name (P.mmkV2 (mkRVAcc (v_besch119 "numi")) (P.noPrep P.Nom)) name ; AHungry p = DatSubjCl p.name (mkVP (mkNP (P.mkN "foame"))) ; AIll p = mkCl p.name (P.mkA "bolnav") ; AKnow p = mkCl p.name (v_besch122 "şti") ; - ALike p item = mkCl p.name (P.dirV2 (v_besch71 "plăcea")) item ; + ALike p item = DatSubjCompCl p.name (mkVP (v_besch71 "plăcea")) item ; ALive p co = mkCl p.name (mkVP (mkVP (v_besch121 "locui")) (SyntaxRon.mkAdv in_Prep co)) ; ALove p q = mkCl p.name (P.dirV2 (P.mkV "iubi")) q.name ; @@ -166,7 +166,8 @@ open_A : A = P.mkA "deschis" ; ad = {s = d} in mkNPDay day ad ad; ---- difference is enforced by additional constructions - xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p -> mkRelative n (mkCN x) p ; + xOf : GNumber -> N -> NPPerson -> NPPerson = \n,x,p -> mkRelative n (refCN x) p ; + -- auxiliaries diff --git a/lib/src/romanian/CatRon.gf b/lib/src/romanian/CatRon.gf index d1d6aedbe..91b4199cf 100644 --- a/lib/src/romanian/CatRon.gf +++ b/lib/src/romanian/CatRon.gf @@ -47,7 +47,8 @@ concrete CatRon of Cat = -- Noun - CN = {s : Number => Species => ACase => Str; g : NGender; a : Animacy ; isComp : Bool} ; + CN = {s : Number => Species => ACase => Str; g : NGender; + a : Animacy; isComp : Bool; needsRefForm : Bool} ; Pron = {s : NCase => Str ; c1, c2 : Clitics => Str ; diff --git a/lib/src/romanian/ExtraRon.gf b/lib/src/romanian/ExtraRon.gf index ad9bacd16..e481755b3 100644 --- a/lib/src/romanian/ExtraRon.gf +++ b/lib/src/romanian/ExtraRon.gf @@ -3,7 +3,10 @@ concrete ExtraRon of ExtraRonAbs = CatRon ** open ResRon, ParadigmsRon, Prelude, MorphoRon in { lin - at_Prep = mkPrep "la" Ac True; + at_Prep = mkPrep "la" Ac True; + DatSubjCompCl np vp np2 = let ss = if_then_Str np.isPronoun "" (np.s ! Dat).comp + in + mkClause ss np.isPol np2.a (insertClit (insertSimpObj (\\_ => (np2.s ! Nom).comp) vp) np); DatSubjCl np vp = let ss = if_then_Str np.isPronoun "" (np.s ! Da).comp in mkClause ss np.isPol (agrP3 Masc Sg) (insertClit vp np); i8fem_Pron = mkPronoun "eu" "mine" "mie" [] [] "meu" "mea" "mei" "mele" Fem Sg P1 ; @@ -13,7 +16,8 @@ youPol8fem_Pron = let dvs = mkPronoun "dumneavoastră" "dumneavoastră" "dumneav in {s = dvs.s; c1 = dvs.c1; c2 = dvs.c2; a = dvs.a; isPol = True; poss = dvs.poss} ; - + +refCN n = n ** {isComp = False; needsRefForm = True}; oper insertClit : VerbPhrase -> NounPhrase -> VerbPhrase = \vp, np -> diff --git a/lib/src/romanian/ExtraRonAbs.gf b/lib/src/romanian/ExtraRonAbs.gf index 78cad03ce..cb17982e9 100644 --- a/lib/src/romanian/ExtraRonAbs.gf +++ b/lib/src/romanian/ExtraRonAbs.gf @@ -4,13 +4,15 @@ abstract ExtraRonAbs = Cat **{ fun DatSubjCl : NP -> VP -> Cl ; + DatSubjCompCl : NP -> VP -> NP -> Cl ; at_Prep : Prep ; + refCN : N -> CN ; i8fem_Pron : Pron ; youSg8fem_Pron : Pron ; youPl8fem_Pron : Pron ; youPol8fem_Pron : Pron ; - + diff --git a/lib/src/romanian/NounRon.gf b/lib/src/romanian/NounRon.gf index 9e75029f7..60eaf2383 100644 --- a/lib/src/romanian/NounRon.gf +++ b/lib/src/romanian/NounRon.gf @@ -9,7 +9,7 @@ concrete NounRon of Noun = n = det.n; gg = agrGender cn.g n ; ag = agrP3 gg n ; - hr = orB (andB (getClit cn.a) det.hasRef) (andB det.isDef cn.isComp); + hr = orB cn.needsRefForm (orB (andB (getClit cn.a) det.hasRef) (andB det.isDef cn.isComp)); nf = if_then_else NForm hr HasClit (HasRef False); st= if_then_else Species det.isDef Def Indef; rs = if_then_else Species det.hasRef Def Indef @@ -233,7 +233,7 @@ in { -- This is based on record subtyping. - UseN, UseN2 = \noun -> noun ** {isComp = False}; + UseN, UseN2 = \noun -> noun ** {isComp = False; needsRefForm = False}; Use2N3 f = f ; @@ -243,6 +243,7 @@ in { s = \\n,sp,c => f.s ! n ! sp ! c ++ appCompl f.c2 x ; g = f.g ; a = f.a ; + needsRefForm = False ; isComp = getClit f.a } ; @@ -251,6 +252,7 @@ in { g = f.g ; c2 = f.c3; a = f.a ; + needsRefForm = False ; isComp = getClit f.a } ; @@ -266,6 +268,7 @@ in { }; g = g ; a = cn.a ; + needsRefForm = cn.needsRefForm ; isComp = getClit cn.a } ; @@ -274,6 +277,7 @@ in { s = \\n,sp,c => cn.s ! n ! sp ! c ++ rs.s ! Indic ! agrP3 (agrGender cn.g n) n ; g = cn.g ; a = cn.a ; + needsRefForm = cn.needsRefForm; isComp = False } ; @@ -281,6 +285,7 @@ in { s = \\n,sp,c => cn.s ! n ! sp ! c ++ sc.s ; g = g ; a = cn.a ; + needsRefForm = cn.needsRefForm; isComp = False } ; @@ -288,6 +293,7 @@ in { s = \\n,sp,c => cn.s ! n ! sp ! c ++ sc.s ; g = g; a = cn.a ; + needsRefForm = cn.needsRefForm; isComp = False } ; @@ -295,6 +301,7 @@ in { s = \\n,sp,c => cn.s ! n ! sp ! c ++ (np.s ! No).comp ; g = g; a = cn.a ; + needsRefForm = cn.needsRefForm; isComp = False } ; diff --git a/lib/src/romanian/ParadigmsRon.gf b/lib/src/romanian/ParadigmsRon.gf index 388b10452..1b02d086d 100644 --- a/lib/src/romanian/ParadigmsRon.gf +++ b/lib/src/romanian/ParadigmsRon.gf @@ -54,7 +54,9 @@ oper Acc : NCase ; Dat : NCase ; Gen : NCase ; - mkPrep : overload { + Nom : NCase ; + +mkPrep : overload { mkPrep : Str -> NCase-> Bool -> Prep ; mkPrep : Str -> NCase -> Prep; }; @@ -173,7 +175,7 @@ lock_PN = <> Acc = Ac ; Dat = Da ; Gen = Ge ; - + Nom = No ; Preposition = Compl ;