mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-09 04:59:31 -06:00
gfcm in Java ; Finnish close to finished
This commit is contained in:
@@ -25,24 +25,24 @@ lin
|
||||
|
||||
Drink = PresV2 (dirV2 drink_V) ;
|
||||
Eat = PresV2 (dirV2 eat_V) ;
|
||||
Bite = PresV2 (dirV2 bite_V) ;
|
||||
Bite = PresV2 (partV2 bite_V) ;
|
||||
Suck = PresV2 (dirV2 suck_V) ;
|
||||
See = PresV2 (dirV2 see_V) ;
|
||||
Hear = PresV2 (dirV2 hear_V) ;
|
||||
Know = PresV2 (dirV2 know_V) ;
|
||||
Smell = PresV2 (dirV2 smell_V) ;
|
||||
Fear = PresV2 (dirV2 fear_V) ;
|
||||
Fear = PresV2 (partV2 fear_V) ;
|
||||
Kill = PresV2 (dirV2 kill_V) ;
|
||||
Fight = PresV2 (dirV2 fight_V) ;
|
||||
Hunt = PresV2 (dirV2 hunt_V) ;
|
||||
Hit = PresV2 (dirV2 hit_V) ;
|
||||
Fight = PresV2 (mkV2 fight_V (postpP partitive "vastaan")) ;
|
||||
Hunt = PresV2 (partV2 hunt_V) ;
|
||||
Hit = PresV2 (partV2 hit_V) ;
|
||||
Cut = PresV2 (dirV2 cut_V) ;
|
||||
Split = PresV2 (dirV2 split_V) ;
|
||||
Stab = PresV2 (dirV2 stab_V) ;
|
||||
Scratch = PresV2 (dirV2 scratch_V) ;
|
||||
Hold = PresV2 (dirV2 hold_V) ;
|
||||
Stab = PresV2 (partV2 stab_V) ;
|
||||
Scratch = PresV2 (partV2 scratch_V) ;
|
||||
Hold = PresV2 (partV2 hold_V) ;
|
||||
Squeeze = PresV2 (dirV2 squeeze_V) ;
|
||||
Rub = PresV2 (dirV2 rub_V) ;
|
||||
Rub = PresV2 (partV2 rub_V) ;
|
||||
Wash = PresV2 (dirV2 wash_V) ;
|
||||
Wipe = PresV2 (dirV2 wipe_V) ;
|
||||
Pull = PresV2 (dirV2 pull_V) ;
|
||||
@@ -79,7 +79,7 @@ lin
|
||||
Swell = PresV swell_V ;
|
||||
Burn = PresV burn_V ;
|
||||
|
||||
---- Give = PresV3 (dirV3 give_V "to") ;
|
||||
Give = PresV3 (dirV3 give_V allative) ;
|
||||
|
||||
-- Say = ;
|
||||
|
||||
@@ -198,8 +198,8 @@ lin
|
||||
Name = UseN name_N ;
|
||||
|
||||
-- NameOf = AppN2 name_N2 ;
|
||||
----- MotherOf = AppN2 (mkN2 mother_N "of") ;
|
||||
----- FatherOf = AppN2 (mkN2 father_N "of") ;
|
||||
MotherOf = AppN2 (genN2 mother_N) ;
|
||||
FatherOf = AppN2 (genN2 father_N) ;
|
||||
|
||||
Big = ModPosA big_ADeg ;
|
||||
Long = ModPosA long_ADeg ;
|
||||
|
||||
@@ -5,6 +5,7 @@ oper
|
||||
PresV2 : V2 -> NP -> NP -> Phr = \v,s,o -> PresCl (SPredV2 s v o) ;
|
||||
PresV3 : V3 -> NP -> NP -> NP -> Phr = \v,s,o,r -> PresCl (SPredV3 s v o r) ;
|
||||
PresVasV2 : V -> NP -> NP -> Phr = \ v -> PresV2 (dirV2 v) ;
|
||||
PresPartV2 : V -> NP -> NP -> Phr = \ v -> PresV2 (caseV2 v partitive) ;
|
||||
|
||||
PresCl : Cl -> Phr =
|
||||
\c -> { s = (UseCl (PosTP TPresent ASimul) c).s } ** {lock_Phr = <>} ;
|
||||
@@ -12,4 +13,6 @@ oper
|
||||
ModPosA : ADeg -> CN -> CN = \a -> ModAP (PositADeg a) ;
|
||||
ModA : A -> CN -> CN = \a -> ModAP (UseA a) ;
|
||||
|
||||
partV2 : V -> V2 = \v -> caseV2 v partitive ;
|
||||
|
||||
}
|
||||
|
||||
@@ -71,7 +71,7 @@ instance SyntaxDan of SyntaxScand = TypesDan **
|
||||
auxSka = "vil" ;
|
||||
auxSkulle = "ville" ;
|
||||
|
||||
infinAtt = "at" ;
|
||||
infinAtt, subordAtt = "at" ;
|
||||
|
||||
varjeDet : Determiner = mkDeterminerSg (detSgInvar "hver") IndefP ;
|
||||
allaDet : Determiner = mkDeterminerPl "alle" IndefP ;
|
||||
|
||||
@@ -815,7 +815,7 @@ In two language families:
|
||||
<tr><td>Language</td> <td>v0.6</td> <td>v0.9 API</td> <td>Paradigms</td> <td>Basic lex</td> <td>Verbs</td></tr>
|
||||
<tr><td>Danish</td> <td>-</td> <td>X</td> <td>-</td> <td>-</td> <td>-</tr>
|
||||
<tr><td>English</td> <td>X</td> <td>X</td> <td>X</td> <td>X</td> <td>X</tr>
|
||||
<tr><td>Finnish</td> <td>X</td> <td>-</td> <td>-</td> <td>-</td> <td>-</tr>
|
||||
<tr><td>Finnish</td> <td>X</td> <td>+</td> <td>X</td> <td>X</td> <td>0</tr>
|
||||
<tr><td>French</td> <td>X</td> <td>X</td> <td>X</td> <td>X</td> <td>X</tr>
|
||||
<tr><td>German</td> <td>X</td> <td>-</td> <td>*</td> <td>-</td> <td>-</tr>
|
||||
<tr><td>Italian</td> <td>X</td> <td>X</td> <td>X</td> <td>X</td> <td>X</tr>
|
||||
@@ -826,10 +826,13 @@ In two language families:
|
||||
</table>
|
||||
X = implemented (few exceptions may occur)
|
||||
<br>
|
||||
+ = implemented for a large part
|
||||
<br>
|
||||
* = linguistic material ready for implementation
|
||||
<br>
|
||||
- = not implemented
|
||||
|
||||
<br>
|
||||
0 = not applicable
|
||||
|
||||
|
||||
<!-- NEW -->
|
||||
@@ -842,7 +845,10 @@ Danish
|
||||
<p>
|
||||
English:
|
||||
<p>
|
||||
Finnish
|
||||
Finnish:
|
||||
missing many nominal forms of verbs;
|
||||
the basic lexicon has some erroneous inflectional patterns;
|
||||
possessive and interrogative suffixes have no proper lexer.
|
||||
<p>
|
||||
French:
|
||||
no inverted questions;
|
||||
|
||||
@@ -10,18 +10,18 @@ flags
|
||||
lin
|
||||
|
||||
airplane_N = regN "lentokone" ;
|
||||
answer_V2S = mkV2S (regV "vastata") allative [] [] ;
|
||||
answer_V2S = mkV2S (caseV2 (regV "vastata") allative) ;
|
||||
apartment_N = regN "asunto" ;
|
||||
apple_N = regN "omena" ; --- omenia, not omenoita
|
||||
art_N = regN "taide" ;
|
||||
ask_V2Q = mkV2Q (regV "kysyä") ablative [] [] ;
|
||||
ask_V2Q = mkV2Q (caseV2 (regV "kysyä") ablative) ;
|
||||
baby_N = regN "vauva" ;
|
||||
bad_ADeg = mkADeg (regN "paha") "pahempi" "pahin" ;
|
||||
bank_N = regN "pankki" ;
|
||||
beautiful_ADeg = mkADeg (regN "kaunis") "kauniimpi" "kaunein" ;
|
||||
become_VA = mkVA (regV "tulla") translative ;
|
||||
beer_N = regN "olut" ;
|
||||
beg_V2V = mkV2V (reg2V "pyytää" "pyysi") partitive inf_illative ;
|
||||
beg_V2V = mkV2V (caseV2 (reg2V "pyytää" "pyysi") partitive) ;
|
||||
big_ADeg = mkADeg (reg2N "suuri" "suuria") "suurempi" "suurin" ;
|
||||
bike_N = nLukko "polkupyörä" ; --- for correct vowel harmony
|
||||
bird_N = regN "lintu" ;
|
||||
@@ -68,7 +68,7 @@ lin
|
||||
dog_N = regN "koira" ;
|
||||
door_N = reg2N "ovi" "ovia" ;
|
||||
drink_V2 = dirV2 (regV "juoda") ;
|
||||
easy_A2V = mkA2V (regN (mkA "helppo")) allative ;
|
||||
easy_A2V = mkA2V (mkA2 (mkA (regN "helppo")) allative) ;
|
||||
eat_V2 = dirV2 (regV "syödä") ;
|
||||
empty_ADeg = mkADeg (regN "tyhjä") "tyhjempi" "tyhjin" ;
|
||||
enemy_N = regN "vihollinen" ;
|
||||
@@ -93,7 +93,7 @@ lin
|
||||
harbour_N = reg3N "satama" "sataman" "satamia" ;
|
||||
hate_V2 = dirV2 (regV "vihata") ;
|
||||
hat_N = regN "hattu" ;
|
||||
have_V2 = dirV2 (regV "omistaa") ; ---- olla
|
||||
have_V2 = dirV2 (caseV adessive vOlla) ;
|
||||
hear_V2 = dirV2 (regV "kuulla") ;
|
||||
hill_N = regN "kukkula" ;
|
||||
hope_VS = mkVS (regV "toivoa") ;
|
||||
@@ -134,7 +134,7 @@ lin
|
||||
oil_N = regN "öljy" ;
|
||||
old_ADeg = mkADeg (regN "vanha") "vanhempi" "vanhin" ;
|
||||
open_V2 = dirV2 (regV "avata") ;
|
||||
paint_V2A = mkV2A (regV "maalata") translative ;
|
||||
paint_V2A = mkV2A (dirV2 (regV "maalata")) translative ;
|
||||
paper_N = reg2N "paperi" "papereita" ;
|
||||
peace_N = regN "rauha" ;
|
||||
pen_N = regN "kynä" ;
|
||||
@@ -145,14 +145,14 @@ lin
|
||||
priest_N = regN "pappi" ;
|
||||
probable_AS = mkAS (mkA (nNainen "todennäköistä")) ; --- for vowel harmony
|
||||
queen_N = regN "kuningatar" ;
|
||||
radio_N = reg3N "radio" "radioita" ;
|
||||
rain_V0 = mkV0 (vHuoltaa "sataa" "sadan" "satoi" "sadoin") ;
|
||||
radio_N = reg2N "radio" "radioita" ;
|
||||
rain_V0 = mkV0 (reg2V "sataa" "satoi") ;
|
||||
read_V2 = dirV2 (regV "lukea") ;
|
||||
red_ADeg = regADeg "punainen" ;
|
||||
religion_N = regN "uskonto" ;
|
||||
restaurant_N = regN "ravintola" ;
|
||||
river_N = nArpi "joki" ;
|
||||
rock_N = regN "kallio" "kallioita" ;
|
||||
rock_N = reg2N "kallio" "kallioita" ;
|
||||
roof_N = regN "katto" ;
|
||||
rubber_N = regN "kumi" ;
|
||||
run_V = reg2V "juosta" "juoksi" ;
|
||||
@@ -189,7 +189,7 @@ lin
|
||||
switch8off_V2 = dirV2 (regV "sammuttaa") ; ---
|
||||
switch8on_V2 = dirV2 (regV "sytyttää") ; ---
|
||||
table_N = regN "pöytä" ;
|
||||
talk_V3 = mkV3 (regV "puhua") allative elative ;
|
||||
talk_V3 = mkV3 (regV "puhua") (caseP allative) (caseP elative) ;
|
||||
teacher_N = regN "opettaja" ;
|
||||
teach_V2 = dirV2 (regV "opettaa") ;
|
||||
television_N = reg2N "televisio" "telievisioita" ;
|
||||
|
||||
@@ -37,27 +37,27 @@ lincat
|
||||
|
||||
A = Adjective ;
|
||||
-- = CommonNoun ;
|
||||
A2 = Adjective ** {c : NPForm} ;
|
||||
A2 = Adjective ** {c : ComplCase} ;
|
||||
ADeg = {s : Degree => AForm => Str} ;
|
||||
AP = {s : AdjPos => AForm => Str} ;
|
||||
AS = Adjective ; --- "more difficult for him to come than..."
|
||||
A2S = Adjective ** {c : NPForm} ;
|
||||
A2S = Adjective ** {c : ComplCase} ;
|
||||
AV = Adjective ;
|
||||
A2V = Adjective ** {c : NPForm} ;
|
||||
A2V = Adjective ** {c : ComplCase} ;
|
||||
|
||||
V = Verb ;
|
||||
V = Verb1 ;
|
||||
-- = {s : VForm => Str}
|
||||
---- VP = {s,s2 : Bool => SForm => Agr => Str ; isAux : Bool} ;
|
||||
VPI = {s : VIForm => Str} ;
|
||||
----- VP = Verb ** {s2 : VForm => Str ; c : ComplCase} ;
|
||||
---- VG = {s,s2 : Bool => VForm => Str ; c : ComplCase} ;
|
||||
V2 = TransVerb ;
|
||||
-- = Verb ** {s3, s4 : Str ; c : ComplCase} ;
|
||||
V3 = TransVerb ** {s5, s6 : Str ; c2 : ComplCase} ;
|
||||
VS = Verb ;
|
||||
VV = Verb ** {c : ComplCase} ;
|
||||
VQ = Verb ;
|
||||
VA = Verb ** {c : Case} ;
|
||||
-- = Verb ** {s3 : Str ; p : Bool ; c : ComplCase} ;
|
||||
V3 = TransVerb ** {s5 : Str ; p2 : Bool ; c2 : ComplCase} ;
|
||||
VS = Verb1 ;
|
||||
VV = Verb1 ** {i : VIForm} ;
|
||||
VQ = Verb1 ;
|
||||
VA = Verb1 ** {c : Case} ;
|
||||
|
||||
V2S = TransVerb ;
|
||||
V2Q = TransVerb ;
|
||||
|
||||
@@ -14,7 +14,7 @@ concrete ClauseFin of Clause = CategoriesFin **
|
||||
sats2clause (mkSatsObject np v y) ;
|
||||
SPredV3 subj verb obj1 obj2 =
|
||||
sats2clause (
|
||||
insertObject (mkSatsObject subj verb obj1) verb.c2 verb.s5 verb.s6 obj2) ;
|
||||
insertObject (mkSatsObject subj verb obj1) verb.c2 verb.s5 verb.p obj2) ;
|
||||
---- SPredReflV2 subj verb =
|
||||
---- sats2clause (
|
||||
---- mkSatsObject subj
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -63,7 +63,8 @@ lin
|
||||
ComplA2 = complAdj ;
|
||||
|
||||
ComplAV av vpi = {s = \\_,a => av.s ! a ++ vpi.s ! VIInfinit} ;
|
||||
ComplObjA2V av obj vpi = {s = \\_,a => av.s ! a ++ obj.s ! av.c ++ vpi.s ! VIInfinit} ;
|
||||
ComplObjA2V av obj vpi = {s = \\_,a => av.s ! a ++ obj.s ! complCase
|
||||
True av.c VImperat ++ vpi.s ! VIInfinit} ;
|
||||
|
||||
PositADeg = positAdjPhrase ;
|
||||
ComparADeg = comparAdjPhrase ;
|
||||
@@ -73,10 +74,10 @@ lin
|
||||
|
||||
PredAS adj sent = sats2clause (
|
||||
insertComplement
|
||||
(mkSats impersNounPhrase verbOlla)
|
||||
(mkSats impersNounPhrase (vNom verbOlla))
|
||||
(complAdjPhrase Sg (adj2adjPhrase adj) ++ sent.s)
|
||||
) ;
|
||||
PredV0 rain = sats2clause (mkSats impersNounPhrase rain) ;
|
||||
PredV0 rain = sats2clause (mkSats impersNounPhrase (vNom rain)) ;
|
||||
|
||||
-- Partial saturation.
|
||||
|
||||
|
||||
@@ -27,8 +27,8 @@ concrete StructuralFin of Structural =
|
||||
both_AndConjD = sd2 "sekä" "että" ** {n = Pl} ;
|
||||
by8agent_Prep = prepPostpGen "toimesta" ;
|
||||
by8means_Prep = prepPostpGen "avulla" ;
|
||||
can8know_VV = nomVerbVerb (vOsata "osata") ;
|
||||
can_VV = nomVerbVerb (vJuoda "voida" "voi") ;
|
||||
---- can8know_VV = nomVerbVerb (vOsata "osata") ;
|
||||
---- can_VV = nomVerbVerb (vJuoda "voida" "voi") ;
|
||||
during_Prep = prepPostpGen "aikana" ;
|
||||
either8or_ConjD = sd2 "joko" "tai" ** {n = Sg} ;
|
||||
everybody_NP = {
|
||||
@@ -55,7 +55,7 @@ concrete StructuralFin of Structural =
|
||||
most8many_Det = useimmatDet ;
|
||||
most_Det = mkDeterminer singular (caseTable singular (sSuurin "enintä")) ;
|
||||
much_Det = mkDeterminer singular (caseTable singular (sNauris "runsasta")) ;
|
||||
must_VV = vHukkua "täytyä" "täydy" ** {c = CCase Gen} ;
|
||||
---- must_VV = vHukkua "täytyä" "täydy" ** {c = CCase Gen} ;
|
||||
no_Phr = ss ("Ei" ++ stopPunct) ;
|
||||
on_Prep = prepCase Adess ;
|
||||
or_Conj = ss "tai" ** {n = Sg} ;
|
||||
@@ -92,7 +92,7 @@ concrete StructuralFin of Structural =
|
||||
to_Prep = prepCase Illat ; --- allat
|
||||
under_Prep = prepPostpGen "alla" ;
|
||||
very_Adv = ss "hyvin" ;
|
||||
want_VV = nomVerbVerb (vOsata "haluta") ;
|
||||
---- want_VV = nomVerbVerb (vOsata "haluta") ;
|
||||
we_NP = pronNounPhrase pronMe ;
|
||||
what8many_IP = intPronWhat Pl ;
|
||||
what8one_IP = intPronWhat Sg ;
|
||||
|
||||
@@ -367,23 +367,22 @@ oper
|
||||
-- "tyytyväinen vaalitulokseen", "jaollinen kolmella"), which is not a possible
|
||||
-- order for the accusative case.
|
||||
|
||||
AdjCompl = Adjective ** {c : NPForm} ;
|
||||
AdjCompl = Adjective ** {c : ComplCase} ;
|
||||
|
||||
--- Only the middle argument of $complCase$ matters, since
|
||||
--- no accusatives come into question.
|
||||
|
||||
complAdj : AdjCompl -> NounPhrase -> AdjPhrase = \hyva,paini ->
|
||||
let {
|
||||
let
|
||||
hyvat : AForm => Str = \\a => hyva.s ! a ;
|
||||
painissa : Str = paini.s ! hyva.c
|
||||
}
|
||||
c : NPForm = complCase True hyva.c VImperat ;
|
||||
painissa : Str = paini.s ! c
|
||||
in
|
||||
{s = table {
|
||||
AAttr => \\a => painissa ++ hyvat ! a ;
|
||||
APred => \\a => if_then_else Str
|
||||
(isLocalNPForm hyva.c)
|
||||
(variants {
|
||||
hyvat ! a ++ painissa ;
|
||||
painissa ++ hyvat ! a
|
||||
}
|
||||
)
|
||||
(isLocalNPForm c)
|
||||
(hyvat ! a ++ painissa)
|
||||
(painissa ++ hyvat ! a)
|
||||
}
|
||||
} ;
|
||||
@@ -479,6 +478,14 @@ oper
|
||||
--
|
||||
--3 Verb phrases
|
||||
--
|
||||
-- In Finnish, verbs can have nominative subjects, but there are
|
||||
-- also verbs with a special subject case ("täytyy").
|
||||
|
||||
Verb1 : Type = Verb ** {sc : Case} ;
|
||||
|
||||
vCase : Verb -> Case -> Verb1 = \v,c -> v ** {sc = c} ;
|
||||
vNom : Verb -> Verb1 = \v -> vCase v Nom ;
|
||||
|
||||
-- These are parameters for clauses and sentences.
|
||||
|
||||
param
|
||||
@@ -528,27 +535,33 @@ oper
|
||||
|
||||
questPart : Str -> Str = \s -> glueParticle s "ko" ; --- "kö"
|
||||
|
||||
mkSats : NounPhrase -> Verb -> Sats = \subj,verb ->
|
||||
{subj = subj.s ! NPCase Nom ; --- "minusta tulee poliisi"
|
||||
mkSats : NounPhrase -> Verb1 -> Sats = \subj,verb ->
|
||||
let
|
||||
np = case verb.sc of {
|
||||
Nom => <subj.n, np2Person subj.p> ;
|
||||
_ => <Sg, P3>
|
||||
}
|
||||
in
|
||||
{subj = subj.s ! NPCase verb.sc ; -- "minusta tulee poliisi"
|
||||
pred = \\b,sf =>
|
||||
inflectVerb verb subj.n (np2Person subj.p) b sf ** {obj = []} ;
|
||||
inflectVerb verb np.p1 np.p2 b sf ** {obj = []} ;
|
||||
comp = []
|
||||
} ;
|
||||
|
||||
mkSatsObject : NounPhrase -> TransVerb -> NounPhrase -> Sats = \subj,verb,obj ->
|
||||
insertObject (mkSats subj verb) verb.c verb.s3 verb.s4 obj ;
|
||||
insertObject (mkSats subj verb) verb.c verb.s3 verb.p obj ;
|
||||
|
||||
mkSatsCopula : NounPhrase -> Str -> Sats = \subj,comp ->
|
||||
insertComplement (mkSats subj verbOlla) comp ;
|
||||
insertComplement (mkSats subj (vNom verbOlla)) comp ;
|
||||
|
||||
insertObject : Sats -> ComplCase -> Str -> Str -> NounPhrase -> Sats =
|
||||
\sats, c, prep, postp, obj ->
|
||||
insertObject : Sats -> ComplCase -> Str -> Bool -> NounPhrase -> Sats =
|
||||
\sats, c, prep, pos, obj ->
|
||||
{subj = sats.subj ;
|
||||
pred = \\b,sf =>
|
||||
let spred = sats.pred ! b ! sf in
|
||||
{fin = spred.fin ;
|
||||
inf = spred.inf ;
|
||||
obj = spred.obj ++ prep ++ obj.s ! complCase b c sf ++ postp
|
||||
obj = spred.obj ++ pPosit prep pos (obj.s ! complCase b c sf)
|
||||
} ;
|
||||
comp = sats.comp
|
||||
} ;
|
||||
@@ -664,7 +677,7 @@ oper
|
||||
--3 Transitive verbs
|
||||
--
|
||||
-- Transitive verbs are verbs with a case and, possibly, a preposition
|
||||
-- or a postposition for the complement,
|
||||
-- or a postposition for the complement ($True$ = preposition),
|
||||
-- in analogy with two-place adjectives and functions.
|
||||
-- One might prefer to use the term "2-place verb", since
|
||||
-- "transitive" traditionally means that the inherent preposition is empty.
|
||||
@@ -674,7 +687,10 @@ param
|
||||
ComplCase = CCase Case | CAcc ;
|
||||
|
||||
oper
|
||||
TransVerb : Type = Verb ** {s3, s4 : Str ; c : ComplCase} ;
|
||||
TransVerb : Type = Verb1 ** {s3 : Str ; p : Bool ; c : ComplCase} ;
|
||||
|
||||
pPosit : Str -> Bool -> Str -> Str = \p,b,s ->
|
||||
if_then_Str b (p ++ s) (s ++ p) ;
|
||||
|
||||
-- The rule for using transitive verbs is the complementization rule.
|
||||
--
|
||||
@@ -700,13 +716,13 @@ oper
|
||||
-- Verbs that take their object with a case other than the accusative,
|
||||
-- without pre- or postposition:
|
||||
|
||||
mkTransVerbCase : Verb -> Case -> TransVerb = \nauraa,c ->
|
||||
nauraa ** {s3 = [] ; s4 = [] ; c = CCase c} ;
|
||||
mkTransVerbCase : Verb1 -> Case -> TransVerb = \nauraa,c ->
|
||||
nauraa ** {s3 = [] ; p = True ; c = CCase c} ;
|
||||
|
||||
-- Verbs that take direct object with the accusative:
|
||||
|
||||
mkTransVerbDir : Verb -> TransVerb = \ostaa ->
|
||||
ostaa ** {s3 = [] ; s4 = [] ; c = CAcc} ;
|
||||
mkTransVerbDir : Verb1 -> TransVerb = \ostaa ->
|
||||
ostaa ** {s3 = [] ; p = True ; c = CAcc} ;
|
||||
{-
|
||||
-- Most two-place verbs can be used passively; the object case need not be
|
||||
-- the accusative, and it becomes the subject case in the passive sentence.
|
||||
@@ -727,7 +743,7 @@ oper
|
||||
-- is left to applications. The definition is trivial, due to record
|
||||
-- subtyping.
|
||||
|
||||
transAsVerb : TransVerb -> Verb = \juoda ->
|
||||
transAsVerb : TransVerb -> Verb1 = \juoda ->
|
||||
juoda ;
|
||||
|
||||
-- The 'real' Finnish passive is unpersonal, equivalent to the
|
||||
@@ -740,7 +756,7 @@ oper
|
||||
-- We treat so far only the rule in which the ditransitive
|
||||
-- verb takes both complements to form a verb phrase.
|
||||
|
||||
DitransVerb = TransVerb ** {s5, s6 : Str ; c2 : ComplCase} ;
|
||||
DitransVerb = TransVerb ** {s5 : Str ; p2 : Bool ; c2 : ComplCase} ;
|
||||
|
||||
|
||||
--2 Adverbials
|
||||
@@ -807,7 +823,7 @@ oper
|
||||
--
|
||||
-- Sentence-complement verbs take sentences as complements.
|
||||
|
||||
SentenceVerb : Type = Verb ;
|
||||
SentenceVerb : Type = Verb1 ;
|
||||
|
||||
-- To generate "sanoo että Jussi ui" / "ei sano että Jussi ui"
|
||||
|
||||
@@ -815,10 +831,8 @@ oper
|
||||
--3 Verb-complement verbs
|
||||
--
|
||||
-- Verb-complement verbs take verb phrases as complements.
|
||||
-- In Finnish, they can be ordinary verbs ("haluta", "yrittää"), but
|
||||
-- also verbs with a special subject case ("täytyy", "on pakko").
|
||||
|
||||
VerbVerb : Type = Verb ** {c : ComplCase} ;
|
||||
VerbVerb : Type = Verb1 ** {i : VIForm} ;
|
||||
{-
|
||||
complVerbVerb : VerbVerb -> VerbGroup -> VerbGroup = \haluta, uida ->
|
||||
let
|
||||
@@ -839,7 +853,7 @@ oper
|
||||
c = hc
|
||||
} ;
|
||||
-}
|
||||
nomVerbVerb : Verb -> VerbVerb = \v -> v ** {c = CCase Nom} ;
|
||||
|
||||
|
||||
--2 Sentences missing noun phrases
|
||||
--
|
||||
|
||||
@@ -74,6 +74,7 @@ instance SyntaxNor of SyntaxScand = TypesNor **
|
||||
auxSkulle = "ville" ;
|
||||
|
||||
infinAtt = "å" ;
|
||||
subordAtt = "at" ;
|
||||
|
||||
varjeDet : Determiner = mkDeterminerSg (detSgInvar "hver") IndefP ;
|
||||
allaDet : Determiner = mkDeterminerPl "alle" IndefP ;
|
||||
|
||||
@@ -286,7 +286,7 @@ oper
|
||||
-- first place as common nouns, so that one can also have "ett förslag att...".
|
||||
|
||||
nounThatSentence : CommNounPhrase -> Sentence -> CommNounPhrase = \tanke,x ->
|
||||
{s = \\n,d,c => tanke.s ! n ! d ! c ++ infinAtt ++ x.s ! Sub ;
|
||||
{s = \\n,d,c => tanke.s ! n ! d ! c ++ subordAtt ++ x.s ! Sub ;
|
||||
g = tanke.g ;
|
||||
p = tanke.p
|
||||
} ;
|
||||
@@ -709,7 +709,7 @@ oper
|
||||
predVerbGroupClause
|
||||
npDet
|
||||
(vara (
|
||||
\\g,n,_ => bra.s ! predFormAdj g n ! Nom ++ infinAtt ++ hansover.s ! Sub)) ;
|
||||
\\g,n,_ => bra.s ! predFormAdj g n ! Nom ++ subordAtt ++ hansover.s ! Sub)) ;
|
||||
|
||||
predAdjSent2 : AdjCompl -> NounPhrase -> Adjective = \bra,han ->
|
||||
{s = \\af,c => bra.s ! af ! c ++ {-strPrep-} bra.s2 ++ han.s ! PAcc} ;
|
||||
@@ -1026,7 +1026,7 @@ oper
|
||||
SentenceVerb : Type = Verb ;
|
||||
|
||||
complSentVerb : SentenceVerb -> Sentence -> VerbGroup = \se,duler ->
|
||||
useVerb se (\\_,_,_ => optStr infinAtt ++ duler.s ! Sub) ;
|
||||
useVerb se (\\_,_,_ => optStr subordAtt ++ duler.s ! Sub) ;
|
||||
|
||||
complQuestVerb : SentenceVerb -> QuestionSent -> VerbGroup = \se,omduler ->
|
||||
useVerb se (\\_,_,_ => omduler.s ! IndirQ) ;
|
||||
@@ -1034,7 +1034,7 @@ oper
|
||||
complDitransSentVerb : TransVerb -> NounPhrase -> Sentence -> VerbGroup =
|
||||
\sa,honom,duler ->
|
||||
useVerb sa
|
||||
(\\_,_,_ => {-strPrep-} sa.s2 ++ honom.s ! PAcc ++ optStr infinAtt ++ duler.s ! Main) ;
|
||||
(\\_,_,_ => {-strPrep-} sa.s2 ++ honom.s ! PAcc ++ optStr subordAtt ++ duler.s ! Main) ;
|
||||
|
||||
complDitransQuestVerb : TransVerb -> NounPhrase -> QuestionSent -> VerbGroup =
|
||||
\sa,honom,omduler ->
|
||||
@@ -1212,7 +1212,7 @@ oper
|
||||
-- "tal x sådant att x är primt".
|
||||
|
||||
relSuch : Clause -> RelClause = \A ->
|
||||
{s = \\b,sf,g,p => pronSådan ! g ++ infinAtt ++ A.s ! b ! s2cl sf Sub} ;
|
||||
{s = \\b,sf,g,p => pronSådan ! g ++ subordAtt ++ A.s ! b ! s2cl sf Sub} ;
|
||||
|
||||
-- The main use of relative clauses is to modify common nouns.
|
||||
-- The result is a common noun, out of which noun phrases can be formed
|
||||
@@ -1687,7 +1687,7 @@ oper
|
||||
|
||||
auxHar, auxHade, auxHa, auxSka, auxSkulle : Str ;
|
||||
|
||||
infinAtt : Str ;
|
||||
infinAtt, subordAtt : Str ;
|
||||
prepÄn : Str ;
|
||||
negInte : Str ;
|
||||
conjOm : Str ;
|
||||
|
||||
@@ -73,7 +73,7 @@ instance SyntaxSwe of SyntaxScand = TypesSwe **
|
||||
auxSka = "ska" ;
|
||||
auxSkulle = "skulle" ;
|
||||
|
||||
infinAtt = "att" ;
|
||||
infinAtt,subordAtt = "att" ;
|
||||
|
||||
varjeDet : Determiner = mkDeterminerSg (detSgInvar "varje") IndefP ;
|
||||
allaDet : Determiner = mkDeterminerPl "alla" IndefP ;
|
||||
|
||||
@@ -20,7 +20,7 @@ import javax.swing.filechooser.*;
|
||||
|
||||
public class GrammarFilter extends FileFilter {
|
||||
|
||||
// Accept all directories and all gf, gfm files.
|
||||
// Accept all directories and all gf, gfcm files.
|
||||
public boolean accept(File f) {
|
||||
if (f.isDirectory()) {
|
||||
return true;
|
||||
@@ -29,7 +29,7 @@ public class GrammarFilter extends FileFilter {
|
||||
String extension = Utils.getExtension(f);
|
||||
if (extension != null) {
|
||||
if (extension.equals(Utils.gf) ||
|
||||
extension.equals(Utils.gfm)) {
|
||||
extension.equals(Utils.gfcm)) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
@@ -41,6 +41,6 @@ public class GrammarFilter extends FileFilter {
|
||||
|
||||
// The description of this filter
|
||||
public String getDescription() {
|
||||
return "Just Grammars (*.gf, *.gfm)";
|
||||
return "Just Grammars (*.gf, *.gfcm)";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ public class Utils {
|
||||
}
|
||||
|
||||
public static final String gf = "gf";
|
||||
public static final String gfm = "gfm";
|
||||
public static final String gfcm = "gfcm";
|
||||
|
||||
/*
|
||||
* Get the extension of a file.
|
||||
|
||||
Reference in New Issue
Block a user