diff --git a/lib/resource-1.0/abstract/Noun.gf b/lib/resource-1.0/abstract/Noun.gf index 26b05654d..2360b691b 100644 --- a/lib/resource-1.0/abstract/Noun.gf +++ b/lib/resource-1.0/abstract/Noun.gf @@ -118,4 +118,10 @@ abstract Noun = Cat ** { SentCN : CN -> SC -> CN ; -- fact that John smokes, question if he does +--2 Apposition + +-- This is certainly overgenerating. + + ApposCN : CN -> NP -> CN ; -- number x, numbers x and y + } ; diff --git a/lib/resource-1.0/english/NounEng.gf b/lib/resource-1.0/english/NounEng.gf index c11d97fb1..2977b72b5 100644 --- a/lib/resource-1.0/english/NounEng.gf +++ b/lib/resource-1.0/english/NounEng.gf @@ -68,4 +68,6 @@ concrete NounEng of Noun = CatEng ** open ResEng, Prelude in { SentCN cn sc = {s = \\n,c => cn.s ! n ! c ++ sc.s} ; + ApposCN cn np = {s = \\n,c => cn.s ! n ! Nom ++ np.s ! c} ; + } diff --git a/lib/resource-1.0/finnish/NounFin.gf b/lib/resource-1.0/finnish/NounFin.gf index f1d680510..20140292c 100644 --- a/lib/resource-1.0/finnish/NounFin.gf +++ b/lib/resource-1.0/finnish/NounFin.gf @@ -146,6 +146,8 @@ concrete NounFin of Noun = CatFin ** open ResFin, Prelude in { SentCN cn sc = {s = \\nf=> cn.s ! nf ++ sc.s} ; + ApposCN cn np = {s = \\nf=> cn.s ! nf ++ np.s ! NPCase Nom} ; --- luvun x + oper numN : NForm -> Number = \nf -> case nf of { NCase n _ => n ; diff --git a/lib/resource-1.0/german/NounGer.gf b/lib/resource-1.0/german/NounGer.gf index 14803b1a0..f4e2262b6 100644 --- a/lib/resource-1.0/german/NounGer.gf +++ b/lib/resource-1.0/german/NounGer.gf @@ -129,4 +129,10 @@ concrete NounGer of Noun = CatGer ** open ResGer, Prelude in { g = cn.g } ; + ApposCN cn np = let g = cn.g in { + s = \\a,n,c => cn.s ! a ! n ! c ++ np.s ! c ; + g = g ; + isMod = cn.isMod + } ; + } diff --git a/lib/resource-1.0/romance/NounRomance.gf b/lib/resource-1.0/romance/NounRomance.gf index 3608f887b..f813d1529 100644 --- a/lib/resource-1.0/romance/NounRomance.gf +++ b/lib/resource-1.0/romance/NounRomance.gf @@ -102,4 +102,9 @@ incomplete concrete NounRomance of Noun = g = g } ; + ApposCN cn np = let g = cn.g in { + s = \\n => cn.s ! n ++ np.s ! Ton Nom ; + g = g + } ; + } diff --git a/lib/resource-1.0/scandinavian/NounScand.gf b/lib/resource-1.0/scandinavian/NounScand.gf index c229c9004..b532fea29 100644 --- a/lib/resource-1.0/scandinavian/NounScand.gf +++ b/lib/resource-1.0/scandinavian/NounScand.gf @@ -116,15 +116,20 @@ incomplete concrete NounScand of Noun = g = g ; isMod = cn.isMod } ; - SentCN cn sc = let g = cn.g in { - s = \\n,d,c => cn.s ! n ! d ! c ++ sc.s ; - g = g ; - isMod = cn.isMod - } ; AdvCN cn sc = let g = cn.g in { s = \\n,d,c => cn.s ! n ! d ! c ++ sc.s ; g = g ; isMod = cn.isMod } ; + SentCN cn sc = let g = cn.g in { + s = \\n,d,c => cn.s ! n ! d ! c ++ sc.s ; + g = g ; + isMod = cn.isMod + } ; + ApposCN cn np = let g = cn.g in { + s = \\n,d,c => cn.s ! n ! d ! Nom ++ np.s ! NPNom ; --c + g = g ; + isMod = cn.isMod + } ; }