1
0
forked from GitHub/gf-core

gfcm in Java ; Finnish close to finished

This commit is contained in:
aarne
2005-06-30 22:09:36 +00:00
parent 33fbd1358c
commit 3377aaabdd
16 changed files with 168 additions and 122 deletions

View File

@@ -43,6 +43,7 @@ oper
nominative : Case ;
genitive : Case ;
partitive : Case ;
translative : Case ;
inessive : Case ;
elative : Case ;
illative : Case ;
@@ -51,8 +52,10 @@ oper
allative : Case ;
PPosition : Type ;
PPrep : Case -> Str -> PPosition ;
PPostp : Case -> Str -> PPosition ;
prepP : Case -> Str -> PPosition ;
postpP : Case -> Str -> PPosition ;
caseP : Case -> PPosition ;
accusative : PPosition ;
--2 Nouns
@@ -171,6 +174,8 @@ oper
mkN2 : N -> Case -> N2 ;
genN2 : N -> N2 ;
mkN3 : N -> Case -> Case -> N3 ;
-- Proper names can be formed by using declensions for nouns.
-- The plural forms are filtered away by the compiler.
@@ -185,7 +190,7 @@ oper
-- Two-place adjectives need a case for the second argument.
mkA2 : N -> Case -> A2 ;
mkA2 : A -> Case -> A2 ;
-- Comparison adjectives have three forms. The comparative and the superlative
-- are always inflected in the same way, so the nominative of them is actually
@@ -232,6 +237,11 @@ oper
vTuoda : (tuoda : Str) -> V ;
-- All the patterns above have $nominative$ as subject case.
-- If another case is wanted, use the following.
caseV : Case -> V -> V ;
-- The verbs "be" and the negative auxiliary are special.
vOlla : V ;
@@ -240,7 +250,7 @@ oper
-- Two-place verbs need a case, and can have a pre- or postposition.
-- At least one of the latter is empty, $[]$.
mkV2 : V -> PPostp -> V2 ;
mkV2 : V -> PPosition -> V2 ;
-- If both are empty, the following special function can be used.
@@ -257,7 +267,7 @@ oper
-- the first one or both can be absent.
mkV3 : V -> PPosition -> PPosition -> V3 ; -- speak, with, about
dirV3 : V -> PPosition -> V3 ; -- give,_,to
dirV3 : V -> Case -> V3 ; -- give,_,to
dirdirV3 : V -> V3 ; -- acc, allat
--3 Other complement patterns
@@ -275,10 +285,10 @@ oper
mkVQ : V -> VQ ;
mkV2Q : V2 -> V2Q ;
mkAS : A -> AS ;
mkA2S : A -> Str -> A2S ;
mkAV : A -> AV ;
mkA2V : A -> Str -> A2V ;
mkAS : A -> AS ;
mkA2S : A2 -> A2S ;
mkAV : A -> AV ;
mkA2V : A2 -> A2V ;
-- The definitions should not bother the user of the API. So they are
@@ -297,6 +307,7 @@ oper
nominative = Nom ;
genitive = Gen ;
partitive = Part ;
translative = Transl ;
inessive = Iness ;
elative = Elat ;
illative = Illat ;
@@ -304,11 +315,14 @@ oper
ablative = Ablat ;
allative = Allat ;
PPosition : Type = {c : Case ; s1,s2 : Str} ;
PPrep : Case -> Str -> PPosition =
\c,p -> {c = c ; s1 = p ; s2 = []} ;
PPostp : Case -> Str -> PPosition =
\c,p -> {c = c ; s1 = [] ; s2 = p} ;
PPosition : Type = {c : ComplCase ; s3 : Str ; p : Bool} ;
prepP : Case -> Str -> PPosition =
\c,p -> {c = CCase c ; s3 = p ; p = True} ;
postpP : Case -> Str -> PPosition =
\c,p -> {c = CCase c ; s3 = p ; p = False} ;
caseP : Case -> PPosition =
\c -> {c = CCase c ; s3 = [] ; p = True} ;
accusative = {c = CAcc ; s3 = [] ; p = True} ;
mkN = \a,b,c,d,e,f,g,h,i,j,k ->
mkNoun a b c d e f g h i j ** {g = k ; lock_N = <>} ;
@@ -414,11 +428,12 @@ reg3N = \vesi,veden,vesi
nComp = \s,n -> {s = \\c => s ++ n.s ! c ; g = n.g ; lock_N = <>} ;
mkN2 = \n,c -> n2n n ** {c = NPCase c ; lock_N2 = <>} ;
mkN3 = \n,c,e -> n2n n ** {c = NPCase c ; c2 = NPCase e ; lock_N3 = <>} ;
genN2 = \n -> mkN2 n genitive ;
mkPN n = mkProperName n ** {lock_PN = <>} ;
mkA = \x -> noun2adj x ** {lock_A = <>} ;
mkA2 = \x,c -> mkA x ** {c = NPCase c ; lock_A2 = <>} ;
mkA2 = \x,c -> x ** {c = CCase c ; lock_A2 = <>} ;
mkADeg x kivempi kivin =
let
a = last (x.s ! ((NCase Sg Part))) ; ---- gives "kivinta"
@@ -434,7 +449,8 @@ reg3N = \vesi,veden,vesi
(init (suur.s ! NCase Sg Gen) + "mpi")
(init (suur.s ! NCase Pl Ess)) ;
mkV a b c d e f g h i j k l = mkVerb a b c d e f g h i j k l ** {lock_V = <>} ;
mkV a b c d e f g h i j k l = mkVerb a b c d e f g h i j k l **
{sc = Nom ; lock_V = <>} ;
regV soutaa =
let
@@ -455,7 +471,7 @@ regV soutaa =
"da" | "dä" => vJuoda soutaa joi ;
"ta" | "tä" => vOsata soutaa ;
_ => vHukkua soutaa souda
}} ** {lock_V = <>} ;
}} ** {sc = Nom ; lock_V = <>} ;
reg2V : (soutaa,souti : Str) -> V = \soutaa,souti ->
let
@@ -476,7 +492,7 @@ reg2V : (soutaa,souti : Str) -> V = \soutaa,souti ->
"at" | "ät" => vPalkata soutaa souti ;
"st" => vJuosta soutaa souden (juo + o+u+"t") (juo + "t"+u) ;
_ => soudat
}} ** {lock_V = <>} ;
}} ** {sc = Nom ; lock_V = <>} ;
reg3V soutaa soudan souti =
let
@@ -496,43 +512,48 @@ reg3V soutaa soudan souti =
"aa" | "ää" => vHuoltaa soutaa soudan souti soudin ;
"da" | "dä" => vJuoda soutaa souti ;
_ => soudat
}} ** {lock_V = <>} ;
}} ** {sc = Nom ; lock_V = <>} ;
vValua v = vSanoa v ** {sc = Nom ; lock_V = <>} ;
vKattaa v u = vOttaa v u ** {sc = Nom ; lock_V = <>} ;
vOstaa v = vPoistaa v ** {sc = Nom ; lock_V = <>} ;
vNousta v u = vJuosta v u [] [] ** {sc = Nom ; lock_V = <>} ; -----
vTuoda v = vJuoda v [] ** {sc = Nom ; lock_V = <>} ; -----
caseV c v = {s = v.s ; sc = c ; lock_V = <>} ;
vOlla = verbOlla ** {sc = Nom ; lock_V = <>} ;
vEi = verbEi ** {sc = Nom ; lock_V = <>} ;
vValua v = vSanoa v ** {lock_V = <>} ;
vKattaa v u = vOttaa v u ** {lock_V = <>} ;
vOstaa v = vPoistaa v ** {lock_V = <>} ;
vNousta v u = vJuosta v u [] [] ** {lock_V = <>} ; -----
vTuoda v = vJuoda v [] ** {lock_V = <>} ; -----
vOlla = verbOlla ** {lock_V = <>} ;
vEi = verbEi ** {lock_V = <>} ;
vHuoltaa : (_,_,_,_ : Str) -> Verb = \ottaa,otan,otti,otin ->
SyntaxFin.vHuoltaa ottaa otan otti otin ** {lock_V = <>} ;
-- mkV2 = \v,c,p,o -> v ** {s3 = p ; s4 = o ; c = CCase c ; lock_V2 = <>} ;
-- caseV2 = \v,c -> mkV2 v c [] [] ;
SyntaxFin.vHuoltaa ottaa otan otti otin ** {sc = Nom ; lock_V = <>} ;
mkV2 = \v,c -> v ** {s3 = c.s3 ; p = c.p ; c = c.c ; lock_V2 = <>} ;
caseV2 = \v,c -> mkV2 v (caseP c) ;
dirV2 v = mkTransVerbDir v ** {lock_V2 = <>} ;
mkAdv : Str -> Adv = \s -> {s = s ; lock_Adv = <>} ;
-- mkV3 : V -> PPosition -> PPosition -> V3 ; -- speak, with, about
-- dirV3 : V -> PPosition -> V3 ; -- give,_,to
-- dirdirV3 : V -> -> V3 ; -- acc, allat
mkV3 v p q = v **
{s3 = p.s3 ; p = p.p ; c = p.c ; s5 = q.s3 ; p2 = q.p ; c2 = q.c ;
lock_V3 = <>} ;
dirV3 v p = mkV3 v accusative (caseP p) ;
dirdirV3 v = dirV3 v allative ;
mkV0 v = v ** {lock_V0 = <>} ;
mkVS v = v ** {lock_VS = <>} ;
mkV2S v = v ** {lock_V2S = <>} ;
-- mkVV v = v ** {lock_VV = <>} ;
mkV2V v = v ** {lock_V2V = <>} ;
-- mkVA v c = v ** {c = c ; lock_V0 = <>} ;
-- mkV2A v c = v ** {c2 = c ; lock_V0 = <>} ;
mkVA v c = v ** {c = c ; lock_VA = <>} ;
mkV2A v c = v ** {c2 = c ; lock_V2A = <>} ;
mkVQ v = v ** {lock_VQ = <>} ;
mkV2Q v = v ** {lock_V2Q = <>} ;
mkAS v = v ** {lock_AS = <>} ;
-- mkA2S v c = v ** {c = c ; lock_AS = <>} ;
mkA2S v = v ** {lock_A2S = <>} ;
mkAV v = v ** {lock_AV = <>} ;
-- mkA2V v c = v ** {c = c ; lock_AS = <>} ;
mkA2V v = v ** {lock_A2V = <>} ;
-- inf_illative
-- infinitive