diff --git a/lib/src/abstract/Noun.gf b/lib/src/abstract/Noun.gf index f953e7d4e..9d996f78c 100644 --- a/lib/src/abstract/Noun.gf +++ b/lib/src/abstract/Noun.gf @@ -134,5 +134,15 @@ abstract Noun = Cat ** { ApposCN : CN -> NP -> CN ; -- city Paris (, numbers x and y) +--2 Possessive and partitive constructs + +-- (New 13/3/2013 AR; Structural.possess_Prep and part_Prep should be deprecated in favour of these.) + + PossNP : CN -> NP -> CN ; -- house of Paris, house of mine + PartNP : CN -> NP -> CN ; -- glass of wine + +-- This is different from the partitive, as shown by many languages. + + CountNP : Det -> NP -> NP ; -- three of them, some of the boys } diff --git a/lib/src/english/NounEng.gf b/lib/src/english/NounEng.gf index 863ca5450..18332b5fd 100644 --- a/lib/src/english/NounEng.gf +++ b/lib/src/english/NounEng.gf @@ -42,20 +42,21 @@ concrete NounEng of Noun = CatEng ** open MorphoEng, ResEng, Prelude in { } ; DetQuantOrd quant num ord = { - s = quant.s ! num.hasCard ! num.n ++ num.s ! Nom ++ ord.s ! Nom; + s = quant.s ! num.hasCard ! num.n ++ num.s ! Nom ++ ord.s ! Nom; sp = \\c => quant.sp ! num.hasCard ! num.n ! npNom ++ num.s ! Nom ++ ord.s ! npcase2case c ; n = num.n ; hasNum = True } ; DetNP det = { - s = case det.hasNum of {True => \\_ => det.s ; _ => \\c => det.sp ! c} ; + -- s = case det.hasNum of {True => \\_ => det.s ; _ => \\c => det.sp ! c} ; + s = det.sp ; a = agrP3 det.n } ; PossPron p = { s = \\_,_ => p.s ! NCase Gen ; - sp = \\_,_,c => p.sp ! npcase2case c + sp = \\_,_,c => p.sp ! Gen } ; NumSg = {s = \\c => []; n = Sg ; hasCard = False} ; @@ -137,4 +138,13 @@ concrete NounEng of Noun = CatEng ** open MorphoEng, ResEng, Prelude in { ApposCN cn np = {s = \\n,c => cn.s ! n ! Nom ++ np.s ! NCase c ; g = cn.g} ; + PossNP cn np = {s = \\n,c => cn.s ! n ! c ++ "of" ++ np.s ! NPNomPoss ; g = cn.g} ; + + PartNP cn np = {s = \\n,c => cn.s ! n ! c ++ "of" ++ np.s ! NPAcc ; g = cn.g} ; + + CountNP det np = { + s = \\c => det.sp ! c ++ "of" ++ np.s ! NPAcc ; + a = agrP3 det.n + } ; + }