summaryrefslogtreecommitdiff
path: root/deprecated/old-lib/resource/finnish/NounFin.gf
diff options
context:
space:
mode:
Diffstat (limited to 'deprecated/old-lib/resource/finnish/NounFin.gf')
-rw-r--r--deprecated/old-lib/resource/finnish/NounFin.gf251
1 files changed, 251 insertions, 0 deletions
diff --git a/deprecated/old-lib/resource/finnish/NounFin.gf b/deprecated/old-lib/resource/finnish/NounFin.gf
new file mode 100644
index 000000000..5425aa54e
--- /dev/null
+++ b/deprecated/old-lib/resource/finnish/NounFin.gf
@@ -0,0 +1,251 @@
+concrete NounFin of Noun = CatFin ** open ResFin, Prelude in {
+
+ flags optimize=all_subs ;
+
+ lin
+
+-- The $Number$ is subtle: "nuo autot", "nuo kolme autoa" are both plural
+-- for verb agreement, but the noun form is singular in the latter.
+
+ DetCN det cn =
+ let
+ n : Number = case det.isNum of {
+ True => Sg ;
+ _ => det.n
+ } ;
+ ncase : Case -> NForm = \c ->
+ case <n, c, det.isNum, det.isPoss, det.isDef> of {
+ <_, Nom, True,_,_> => NCase Sg Part ; -- kolme kytkintä(ni)
+ <_, _, True,False,_> => NCase Sg c ; -- kolmeksi kytkimeksi
+ <Pl,Nom, _,_,False> => NCase Pl Part ; -- kytkimiä
+ <_, Nom,_,True,_> => NPossNom n ; -- kytkime+ni on/ovat...
+ <_, Gen,_,True,_> => NPossNom n ; -- kytkime+ni vika
+ <_, Transl,_,True,_> => NPossTransl n ; -- kytkim(e|i)kse+ni
+ <_, Illat,_,True,_> => NPossIllat n ; -- kytkim(ee|ii)+ni
+
+ _ => NCase n c -- kytkin, kytkimen,...
+ }
+ in {
+ s = \\c => let k = npform2case n c in
+ det.s1 ! k ++ cn.s ! ncase k ++ det.s2 ;
+ a = agrP3 (case det.isDef of {
+ False => Sg ; -- autoja menee; kolme autoa menee
+ _ => det.n
+ }) ;
+ isPron = False
+ } ;
+
+ DetNP det =
+ let
+ n : Number = case det.isNum of {
+ True => Sg ;
+ _ => det.n
+ } ;
+ in {
+ s = \\c => let k = npform2case n c in
+ det.s1 ! k ; -- det.s2 is possessive suffix
+ a = agrP3 (case det.isDef of {
+ False => Sg ; -- autoja menee; kolme autoa menee
+ _ => det.n
+ }) ;
+ isPron = False
+ } ;
+
+ UsePN pn = {
+ s = \\c => pn.s ! npform2case Sg c ;
+ a = agrP3 Sg ;
+ isPron = False
+ } ;
+ UsePron p = p ** {isPron = True} ;
+
+ PredetNP pred np = {
+ s = \\c => pred.s ! np.a.n ! c ++ np.s ! c ;
+ a = np.a ;
+ isPron = np.isPron -- kaikki minun - ni
+ } ;
+
+ PPartNP np v2 = {
+ s = \\c => np.s ! c ++ v2.s ! PastPartPass (AN (NCase np.a.n Ess)) ;
+ a = np.a ;
+ isPron = np.isPron -- minun täällä - ni
+ } ;
+
+ AdvNP np adv = {
+ s = \\c => np.s ! c ++ adv.s ;
+ a = np.a ;
+ isPron = np.isPron -- minun täällä - ni
+ } ;
+
+ DetQuantOrd quant num ord = {
+ s1 = \\c => quant.s1 ! num.n ! c ++ num.s ! Sg ! c ++ ord.s ! Pl ! c ;
+ s2 = quant.s2 ;
+ n = num.n ;
+ isNum = num.isNum ;
+ isPoss = quant.isPoss ;
+ isDef = True
+ } ;
+
+ DetQuant quant num = {
+ s1 = \\c => quant.s1 ! num.n ! c ++ num.s ! Sg ! c ;
+ s2 = quant.s2 ;
+ n = num.n ;
+ isNum = num.isNum ;
+ isPoss = quant.isPoss ;
+ isDef = True
+ } ;
+
+ DetArtOrd quant num ord = {
+ s1 = \\c => quant.s1 ! num.n ! c ++ num.s ! Sg ! c ++ ord.s ! Pl ! c ;
+ s2 = [] ;
+ n = num.n ;
+ isNum = num.isNum ;
+ isPoss = False ;
+ isDef = True
+ } ;
+
+ DetArtCard quant num = {
+ s1 = \\c => quant.s1 ! num.n ! c ++ num.s ! Sg ! c ;
+ s2 = [] ;
+ n = num.n ;
+ isNum = case num.n of {Sg => False ; _ => True} ;
+ isPoss = False ;
+ isDef = True
+ } ;
+
+ DetArtSg det cn =
+ let
+ n : Number = Sg ;
+ ncase : Case -> NForm = \c -> NCase n c ;
+ in {
+ s = \\c => let k = npform2case n c in
+ det.s1 ! Sg ! k ++ cn.s ! ncase k ;
+ a = agrP3 Sg ;
+ isPron = False
+ } ;
+
+ DetArtPl det cn =
+ let
+ n : Number = Pl ;
+ ncase : Case -> NForm = \c ->
+ case <n,c,det.isDef> of {
+ <Pl,Nom,False> => NCase Pl Part ; -- kytkimiä
+ _ => NCase n c -- kytkin, kytkimen,...
+ }
+ in {
+ s = \\c => let k = npform2case n c in
+ det.s1 ! Pl ! k ++ cn.s ! ncase k ;
+ a = agrP3 (case det.isDef of {
+ False => Sg ; -- autoja menee; kolme autoa menee
+ _ => Pl
+ }) ;
+ isPron = False
+ } ;
+
+ PossPron p = {
+ s1 = \\_,_ => p.s ! NPCase Gen ;
+ s2 = BIND ++ possSuffix p.a ;
+ isNum = False ;
+ isPoss = True ;
+ isDef = True --- "minun kolme autoani ovat" ; thus "...on" is missing
+ } ;
+
+ NumSg = {s = \\_,_ => [] ; isNum = False ; n = Sg} ;
+ NumPl = {s = \\_,_ => [] ; isNum = False ; n = Pl} ;
+
+ NumCard n = n ** {isNum = case n.n of {Sg => False ; _ => True}} ; -- yksi talo/kaksi taloa
+
+ NumDigits numeral = {
+ s = \\n,c => numeral.s ! NCard (NCase n c) ;
+ n = numeral.n
+ } ;
+ OrdDigits numeral = {s = \\n,c => numeral.s ! NOrd (NCase n c)} ;
+
+ NumNumeral numeral = {
+ s = \\n,c => numeral.s ! NCard (NCase n c) ;
+ n = numeral.n
+ } ;
+ OrdNumeral numeral = {s = \\n,c => numeral.s ! NOrd (NCase n c)} ;
+
+ AdNum adn num = {
+ s = \\n,c => adn.s ++ num.s ! n ! c ;
+ n = num.n
+ } ;
+
+ OrdSuperl a = {s = \\n,c => a.s ! Superl ! AN (NCase n c)} ;
+
+ DefArt = {
+ s1 = \\_,_ => [] ;
+ s2 = [] ;
+ isNum,isPoss = False ;
+ isDef = True -- autot ovat
+ } ;
+
+ IndefArt = {
+ s1 = \\_,_ => [] ; -- Nom is Part in Pl: use isDef in DetCN
+ s2 = [] ;
+ isNum,isPoss,isDef = False -- autoja on
+ } ;
+
+ MassNP cn =
+ let
+ n : Number = Sg ;
+ ncase : Case -> NForm = \c -> NCase n c ;
+ in {
+ s = \\c => let k = npform2case n c in
+ cn.s ! ncase k ;
+ a = agrP3 Sg ;
+ isPron = False
+ } ;
+
+ UseN n = n ;
+
+ UseN2 n = n ;
+
+ Use2N3 f = {
+ s = f.s ;
+ c2 = f.c2 ;
+ isPre = f.isPre
+ } ;
+ Use3N3 f = {
+ s = f.s ;
+ c2 = f.c3 ;
+ isPre = f.isPre2
+ } ;
+
+
+--- If a possessive suffix is added here it goes after the complements...
+
+ ComplN2 f x = {
+ s = \\nf => preOrPost f.isPre (f.s ! nf) (appCompl True Pos f.c2 x)
+ } ;
+ ComplN3 f x = {
+ s = \\nf => preOrPost f.isPre (f.s ! nf) (appCompl True Pos f.c2 x) ;
+ c2 = f.c3 ;
+ isPre = f.isPre2
+ } ;
+
+ AdjCN ap cn = {
+ s = \\nf => ap.s ! True ! AN (n2nform nf) ++ cn.s ! nf
+ } ;
+
+ RelCN cn rs = {s = \\nf => cn.s ! nf ++ rs.s ! agrP3 (numN nf)} ;
+
+ RelNP np rs = {
+ s = \\c => np.s ! c ++ "," ++ rs.s ! np.a ;
+ a = np.a ;
+ isPron = np.isPron ---- correct ?
+ } ;
+
+ AdvCN cn ad = {s = \\nf => cn.s ! nf ++ ad.s} ;
+
+ 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 ;
+ _ => Sg ---
+ } ;
+
+}