Merge branch 'GrammaticalFramework:master' into corrections

This commit is contained in:
Hans Leiß
2025-10-05 19:15:50 +02:00
committed by GitHub
42 changed files with 74326 additions and 8 deletions

View File

@@ -2,6 +2,7 @@ Code,Name,Directory,Functor,Unlexer,Present,All,Try,Symbolic,Compatibility,Synop
Afr,Afrikaans,afrikaans,,,,,,n,,y,n
Amh,Amharic,amharic,,,,,n,n,,n,n
Ara,Arabic,arabic,,,,,,y,,y,y
Bel,Belarusian,belarusian,,,,y,n,n,n,y,n
Bul,Bulgarian,bulgarian,,,y,,,,,y,n
Cat,Catalan,catalan,Romance,,y,,,,y,y,n
Cgg,Rukiga,rukiga,,,y,y,n,n,y,y,n
@@ -22,6 +23,7 @@ Heb,Hebrew,hebrew,,,,,n,n,,n,n
Hin,Hindi,hindi,Hindustani,to_devanagari,y,,,,,y,n
Hrv,Croatian,croatian,,,,,,y,,n,n
Hun,Hungarian,hungarian,,,n,y,y,y,n,n,n
Hye,Armenian,armenian,,,,y,n,n,n,y,n
Ice,Icelandic,icelandic,,,,,,n,,y,n
Ina,Interlingua,interlingua,,,y,,n,n,,n,n
Ita,Italian,italian,Romance,,y,,,,y,y,y
@@ -55,6 +57,7 @@ Tam,Tamil,tamil,n,n,n,n,n,n,n,n,n
Tel,Telugu,telugu,,,y,n,n,n,,n,n
Tha,Thai,thai,,to_thai,,,,,,y,n
Tur,Turkish,turkish,,,y,,,n,,n,n
Ukr,Ukrainian,ukrainian,,,,y,n,n,n,y,n
Urd,Urdu,urdu,Hindustani,,,,,,,y,n
Som,Somali,somali,,,,,n,n,,n,n
Zul,Zulu,zulu,,,,,n,n,,n,n
1 Code Name Directory Functor Unlexer Present All Try Symbolic Compatibility Synopsis MorphoDict
2 Afr Afrikaans afrikaans n y n
3 Amh Amharic amharic n n n n
4 Ara Arabic arabic y y y
5 Bel Belarusian belarusian y n n n y n
6 Bul Bulgarian bulgarian y y n
7 Cat Catalan catalan Romance y y y n
8 Cgg Rukiga rukiga y y n n y y n
23 Hin Hindi hindi Hindustani to_devanagari y y n
24 Hrv Croatian croatian y n n
25 Hun Hungarian hungarian n y y y n n n
26 Hye Armenian armenian y n n n y n
27 Ice Icelandic icelandic n y n
28 Ina Interlingua interlingua y n n n n
29 Ita Italian italian Romance y y y y
57 Tel Telugu telugu y n n n n n
58 Tha Thai thai to_thai y n
59 Tur Turkish turkish y n n n
60 Ukr Ukrainian ukrainian y n n n y n
61 Urd Urdu urdu Hindustani y n
62 Som Somali somali n n n n
63 Zul Zulu zulu n n n n

View File

@@ -0,0 +1,4 @@
concrete AdjectiveHye of Adjective = CatHye ** {
lin
PositA a = a ;
}

4
src/armenian/AllHye.gf Normal file
View File

@@ -0,0 +1,4 @@
concrete AllHye of AllHyeAbs =
LangHye
**
{} ;

View File

@@ -0,0 +1,3 @@
abstract AllHyeAbs =
Lang
** {}

16
src/armenian/CatHye.gf Normal file
View File

@@ -0,0 +1,16 @@
concrete CatHye of Cat = CommonX ** open ResHye in {
lincat V = Verb ;
lincat VV,VS,VQ,VA = Verb ;
lincat V2 = Verb ** {c2 : Compl} ;
lincat V3,V2A,V2S,V2Q,V2V = Verb ** {c2,c3 : Compl} ;
lincat N = Noun ;
lincat N2 = Noun ** {c2 : Compl} ;
lincat N3 = Noun ** {c2,c3 : Compl} ;
lincat CN = Noun ;
lincat A = Adj ;
lincat A2 = Adj ** {c2 : Compl} ;
lincat AP = Adj ;
lincat Prep = Compl ;
}

View File

@@ -0,0 +1,133 @@
concrete DocumentationHye of Documentation = CatHye ** open
ResHye, Prelude, HTML in {
lincat
Inflection = {t : Str; s1,s2,s3 : Str} ;
Definition = {s : Str} ;
Document = {s : Str} ;
Tag = {s : Str} ;
lin
InflectionV,InflectionV2,InflectionV2A,InflectionV2Q,InflectionV2S,InflectionV2V,InflectionV3,InflectionVA,InflectionVQ,InflectionVS,InflectionVV = \x -> {
t="v" ;
s1="" ;
s2=heading1 "Infinitive" ++
paragraph (x.s) ++
heading1 "Converb" ++
frameTable (
tr (th "Imperfective" ++ td (x.Converb.Imperfective)) ++
tr (th "Simultaneous" ++ td (x.Converb.Simultaneous)) ++
tr (th "Perfective" ++ td (x.Converb.Perfective)) ++
tr (th "Futute I" ++ td (x.Converb.FutCon1)) ++
tr (th "Futute II" ++ td (x.Converb.FutCon2)) ++
tr (th "Connegative" ++ td (x.Converb.Negative))) ++
heading1 "Passive" ++
paragraph x.Passive ++
heading1 "Participle" ++
frameTable (
tr (th "Resultative" ++ td (x.Participle ! Resultative)) ++
tr (th "Subject" ++ td (x.Participle ! Subject))) ++
heading1 "Past" ++
frameTable (
tr (th "" ++ th "Sg" ++ th "Pl") ++
tr (th "P1" ++ td (x.Past ! P1 ! Sg) ++ td (x.Past ! P1 ! Pl)) ++
tr (th "P2" ++ td (x.Past ! P2 ! Sg) ++ td (x.Past ! P2 ! Pl)) ++
tr (th "P3" ++ td (x.Past ! P3 ! Sg) ++ td (x.Past ! P3 ! Pl))) ++
heading1 "Subjunctive" ++
frameTable (
tr (intagAttr "th" "colspan=\"2\"" "" ++ th "Sg" ++ th "Pl") ++
tr (intagAttr "th" "rowspan=\"3\"" "Perfect" ++
th "P1" ++ td (x.Subjunctive ! Perfect ! P1 ! Sg) ++ td (x.Subjunctive ! Perfect ! P1 ! Pl)) ++
tr (th "P2" ++ td (x.Subjunctive ! Perfect ! P2 ! Sg) ++ td (x.Subjunctive ! Perfect ! P2 ! Pl)) ++
tr (th "P3" ++ td (x.Subjunctive ! Perfect ! P3 ! Sg) ++ td (x.Subjunctive ! Perfect ! P3 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"3\"" "Non_Past" ++
th "P1" ++ td (x.Subjunctive ! Non_Past ! P1 ! Sg) ++ td (x.Subjunctive ! Non_Past ! P1 ! Pl)) ++
tr (th "P2" ++ td (x.Subjunctive ! Non_Past ! P2 ! Sg) ++ td (x.Subjunctive ! Non_Past ! P2 ! Pl)) ++
tr (th "P3" ++ td (x.Subjunctive ! Non_Past ! P3 ! Sg) ++ td (x.Subjunctive ! Non_Past ! P3 ! Pl))) ++
heading1 "Conditional" ++
frameTable (
tr (intagAttr "th" "colspan=\"2\"" "" ++ th "Sg" ++ th "Pl") ++
tr (intagAttr "th" "rowspan=\"3\"" "Perfect" ++
th "P1" ++ td (x.Conditional ! Perfect ! P1 ! Sg) ++ td (x.Conditional ! Perfect ! P1 ! Pl)) ++
tr (th "P2" ++ td (x.Conditional ! Perfect ! P2 ! Sg) ++ td (x.Conditional ! Perfect ! P2 ! Pl)) ++
tr (th "P3" ++ td (x.Conditional ! Perfect ! P3 ! Sg) ++ td (x.Conditional ! Perfect ! P3 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"4\"" "Non_Past" ++
th "P1" ++ td (x.Conditional ! Non_Past ! P1 ! Sg) ++ td (x.Conditional ! Non_Past ! P1 ! Pl)) ++
tr (th "P2" ++ td (x.Conditional ! Non_Past ! P2 ! Sg) ++ td (x.Conditional ! Non_Past ! P2 ! Pl)) ++
tr (th "P3" ++ td (x.Conditional ! Non_Past ! P3 ! Sg) ++ td (x.Conditional ! Non_Past ! P3 ! Pl))) ++
heading1 "Imperative" ++
frameTable (
tr (th "Sg" ++ th "Pl") ++
tr (td (x.Imperative_Jussive ! Sg) ++ td (x.Imperative_Jussive ! Pl))) ;
s3=[]
} ;
lin
InflectionN,InflectionN2,InflectionN3 = \x -> {
t="n" ;
s1="" ;
s2=frameTable (
tr (th "" ++ th "Sg" ++ th "Pl") ++
tr (th "Nom" ++ td (x.s ! Nom ! Sg) ++ td (x.s ! Nom ! Pl)) ++
tr (th "Dat" ++ td (x.s ! Dat ! Sg) ++ td (x.s ! Dat ! Pl)) ++
tr (th "Ablat" ++ td (x.s ! Ablat ! Sg) ++ td (x.s ! Ablat ! Pl)) ++
tr (th "Instr" ++ td (x.s ! Instr ! Sg) ++ td (x.s ! Instr ! Pl)) ++
tr (th "Loc" ++ td (x.s ! Loc ! Sg) ++ td (x.s ! Loc ! Pl)) ++
tr (intagAttr "th" "colspan=\"3\"" "definite forms") ++
tr (th "Nom" ++ td (x.def_nom ! Sg) ++ td (x.def_nom ! Pl)) ++
tr (th "Dat" ++ td (x.def_dat ! Sg) ++ td (x.def_dat ! Pl)) ++
tr (intagAttr "th" "colspan=\"3\"" "1st person possessive forms") ++
tr (th "Nom" ++ td (x.poss1 ! Nom ! Sg) ++ td (x.poss1 ! Nom ! Pl)) ++
tr (th "Dat" ++ td (x.poss1 ! Dat ! Sg) ++ td (x.poss1 ! Dat ! Pl)) ++
tr (th "Ablat" ++ td (x.poss1 ! Ablat ! Sg) ++ td (x.poss1 ! Ablat ! Pl)) ++
tr (th "Instr" ++ td (x.poss1 ! Instr ! Sg) ++ td (x.poss1 ! Instr ! Pl)) ++
tr (th "Loc" ++ td (x.poss1 ! Loc ! Sg) ++ td (x.poss1 ! Loc ! Pl)) ++
tr (intagAttr "th" "colspan=\"3\"" "2nd person possessive forms") ++
tr (th "Nom" ++ td (x.poss2 ! Nom ! Sg) ++ td (x.poss2 ! Nom ! Pl)) ++
tr (th "Dat" ++ td (x.poss2 ! Dat ! Sg) ++ td (x.poss2 ! Dat ! Pl)) ++
tr (th "Ablat" ++ td (x.poss2 ! Ablat ! Sg) ++ td (x.poss2 ! Ablat ! Pl)) ++
tr (th "Instr" ++ td (x.poss2 ! Instr ! Sg) ++ td (x.poss2 ! Instr ! Pl)) ++
tr (th "Loc" ++ td (x.poss2 ! Loc ! Sg) ++ td (x.poss2 ! Loc ! Pl))) ;
s3=[]
} ;
lin
InflectionA,InflectionA2 = \x -> {
t="a" ;
s1="" ;
s2=frameTable (
tr (th "" ++ th "Sg" ++ th "Pl") ++
tr (th "Nom" ++ td (x.s ! Nom ! Sg) ++ td (x.s ! Nom ! Pl)) ++
tr (th "Dat" ++ td (x.s ! Dat ! Sg) ++ td (x.s ! Dat ! Pl)) ++
tr (th "Ablat" ++ td (x.s ! Ablat ! Sg) ++ td (x.s ! Ablat ! Pl)) ++
tr (th "Instr" ++ td (x.s ! Instr ! Sg) ++ td (x.s ! Instr ! Pl)) ++
tr (th "Loc" ++ td (x.s ! Loc ! Sg) ++ td (x.s ! Loc ! Pl)) ++
tr (intagAttr "th" "colspan=\"3\"" "definite forms") ++
tr (th "Nom" ++ td (x.def_nom ! Sg) ++ td (x.def_nom ! Pl)) ++
tr (th "Dat" ++ td (x.def_dat ! Sg) ++ td (x.def_dat ! Pl)) ++
tr (intagAttr "th" "colspan=\"3\"" "1st person possessive forms") ++
tr (th "Nom" ++ td (x.poss1 ! Nom ! Sg) ++ td (x.poss1 ! Nom ! Pl)) ++
tr (th "Dat" ++ td (x.poss1 ! Dat ! Sg) ++ td (x.poss1 ! Dat ! Pl)) ++
tr (th "Ablat" ++ td (x.poss1 ! Ablat ! Sg) ++ td (x.poss1 ! Ablat ! Pl)) ++
tr (th "Instr" ++ td (x.poss1 ! Instr ! Sg) ++ td (x.poss1 ! Instr ! Pl)) ++
tr (th "Loc" ++ td (x.poss1 ! Loc ! Sg) ++ td (x.poss1 ! Loc ! Pl)) ++
tr (intagAttr "th" "colspan=\"3\"" "2nd person possessive forms") ++
tr (th "Nom" ++ td (x.poss2 ! Nom ! Sg) ++ td (x.poss2 ! Nom ! Pl)) ++
tr (th "Dat" ++ td (x.poss2 ! Dat ! Sg) ++ td (x.poss2 ! Dat ! Pl)) ++
tr (th "Ablat" ++ td (x.poss2 ! Ablat ! Sg) ++ td (x.poss2 ! Ablat ! Pl)) ++
tr (th "Instr" ++ td (x.poss2 ! Instr ! Sg) ++ td (x.poss2 ! Instr ! Pl)) ++
tr (th "Loc" ++ td (x.poss2 ! Loc ! Sg) ++ td (x.poss2 ! Loc ! Pl))) ;
s3=[]
} ;
lin
InflectionAdA,InflectionAdN,InflectionAdV,InflectionAdv = \x -> {t="adv"; s1=""; s2=x.s; s3=""} ;
InflectionPrep = \x -> {t="prep"; s1=""; s2=x.s; s3=""} ;
lin
NoDefinition t = {s=t.s};
MkDefinition t d = {s="<p><b>Definition:</b>"++t.s++d.s++"</p>"};
MkDefinitionEx t d e = {s="<p><b>Definition:</b>"++t.s++d.s++"</p><p><b>Example:</b>"++e.s++"</p>"};
lin
MkDocument d i e = {s = i.s1 ++ d.s ++ i.s2 ++ i.s3 ++ e.s} ;
MkTag i = {s = i.t} ;
}

View File

@@ -0,0 +1,2 @@
concrete GrammarHye of Grammar = TenseX ** {
}

10
src/armenian/LangHye.gf Normal file
View File

@@ -0,0 +1,10 @@
--# -path=.:../abstract
concrete LangHye of Lang =
GrammarHye,
LexiconHye
,DocumentationHye --# notpresent
** {
flags startcat = Phr ;
}

View File

@@ -0,0 +1,2 @@
concrete LexiconHye of Lexicon = CatHye ** open ParadigmsHye in {
}

7506
src/armenian/MorphoHye.gf Normal file

File diff suppressed because it is too large Load Diff

4
src/armenian/NounHye.gf Normal file
View File

@@ -0,0 +1,4 @@
concrete NounHye of Noun = CatHye ** {
lin
UseN n = n ;
}

View File

@@ -0,0 +1,488 @@
resource ParadigmsHye = MorphoHye ** open Predef, Prelude, CatHye, ResHye in {
oper
regV : Str -> V -- s
= \form -> case form of {
_ + "ղալ" => mkV002 form;
_ + "ձալ" => mkV002 form;
_ + "զալ" => mkV002 form;
_ + "լալ" => mkV002 form;
_ + "թալ" => mkV002 form;
_ + "ռալ" => mkV002 form;
_ + "րալ" => mkV002 form;
_ + "ւալ" => mkV002 form;
_ + "ջալ" => mkV002 form;
_ + "գալ" => mkV002 form;
_ + "տալ" => mkV002 form;
_ + "ճալ" => mkV002 form;
_ + "սալ" => mkV002 form;
_ + "փալ" => mkV002 form;
_ + "կալ" => mkV002 form;
_ + "վալ" => mkV002 form;
_ + "բալ" => mkV002 form;
_ + "ծալ" => mkV002 form;
_ + "չալ" => mkV002 form;
_ + "նալ" => mkV004 form;
_ + "ել" => mkV001 form;
_ => error "Cannot find an inflection rule"
} ;
reg2V : Str -> Str -> V -- s Imperative_Jussive;Pl
= \form1, form2 -> case <form1, form2> of {
<_ + "լ", _ + "է՛ք"> => mkV012 form1;
_ => regV form1
} ;
regN : Str -> N -- s;Nom;Sg
= \form -> case form of {
_ + "իւն" => mkN008 form;
_ + "ժամ" => mkN007 form;
_ + "մոմ" => mkN007 form;
_ + "ւնտ" => mkN007 form;
_ + "րստ" => mkN007 form;
_ + "խոտ" => mkN007 form;
_ + "ելտ" => mkN007 form;
_ + "տառ" => mkN007 form;
_ + "երդ" => mkN007 form;
_ + "ձող" => mkN007 form;
_ + "փող" => mkN007 form;
_ + "հող" => mkN007 form;
_ + "խաղ" => mkN007 form;
_ + "իկղ" => mkN007 form;
_ + "շոր" => mkN007 form;
_ + "զոր" => mkN007 form;
_ + "շեր" => mkN016 form;
_ + "եգր" => mkN007 form;
_ + "թել" => mkN007 form;
_ + "խել" => mkN007 form;
_ + "ճոճ" => mkN007 form;
_ + "իցք" => mkN007 form;
_ + "ենք" => mkN007 form;
_ + "ուրծք" => mkN005 form;
_ + "յծք" => mkN007 form;
_ + "նչք" => mkN007 form;
_ + "ծոց" => mkN007 form;
_ + "այց" => mkN007 form;
_ + "կաց" => mkN007 form;
_ + "ջիջ" => mkN013 form;
_ + "եղջ" => mkN007 form;
_ + "ւրթ" => mkN007 form;
_ + "յոթ" => mkN007 form;
_ + "ճապ" => mkN001 form;
_ + "րապ" => mkN001 form;
_ + "լեպ" => mkN001 form;
_ + "ծագ" => mkN007 form;
_ + "ենգ" => mkN007 form;
_ + "գիչ" => mkN013 form;
_ + "միչ" => mkN013 form;
_ + "տիչ" => mkN013 form;
_ + "նիչ" => mkN013 form;
_ + "ւրծ" => mkN007 form;
_ + "թու" => mkN012 form;
_ + "զու" => mkN012 form;
_ + "ռու" => mkN012 form;
_ + "ճու" => mkN012 form;
_ + "ղու" => mkN012 form;
_ + "ճաշ" => mkN007 form;
_ + "վիշ" => mkN013 form;
_ + "ուրձ" => mkN005 form;
_ + "դհի" => mkN006 form;
_ + "ւդի" => mkN006 form;
_ + "ուն" => mkN010 form;
_ + "սն" => mkN007 form;
_ + "կն" => mkN007 form;
_ + "շն" => mkN007 form;
_ + "մն" => mkN007 form;
_ + "ռն" => mkN007 form;
_ + "ձն" => mkN007 form;
_ + "նն" => mkN007 form;
_ + "ւմ" => mkN004 form;
_ + "րմ" => mkN007 form;
_ + "ղմ" => mkN007 form;
_ + "յմ" => mkN007 form;
_ + "հմ" => mkN007 form;
_ + "լմ" => mkN007 form;
_ + "յտ" => mkN007 form;
_ + "յռ" => mkN007 form;
_ + "ղդ" => mkN007 form;
_ + "տղ" => mkN007 form;
_ + "ղխ" => mkN007 form;
_ + "լխ" => mkN007 form;
_ + "ճխ" => mkN007 form;
_ + "չխ" => mkN007 form;
_ + "ղկ" => mkN007 form;
_ + "սկ" => mkN007 form;
_ + "տր" => mkN007 form;
_ + "կր" => mkN007 form;
_ + "նր" => mkN007 form;
_ + "ղր" => mkN007 form;
_ + "խր" => mkN007 form;
_ + "բր" => mkN007 form;
_ + "օր" => mkN016 form;
_ + "յլ" => mkN007 form;
_ + "րս" => mkN007 form;
_ + "մս" => mkN007 form;
_ + "փս" => mkN007 form;
_ + "լս" => mkN007 form;
_ + "րճ" => mkN007 form;
_ + "եճ" => mkN007 form;
_ + "աճ" => mkN007 form;
_ + "նճ" => mkN007 form;
_ + "ջք" => mkN007 form;
_ + "մք" => mkN007 form;
_ + "վք" => mkN007 form;
_ + "թք" => mkN007 form;
_ + "բք" => mkN007 form;
_ + "խց" => mkN007 form;
_ + "ղց" => mkN007 form;
_ + "վթ" => mkN007 form;
_ + "ղբ" => mkN007 form;
_ + "րբ" => mkN007 form;
_ + "ուբ" => mkN005 form;
_ + "զբ" => mkN007 form;
_ + "եբ" => mkN007 form;
_ + "ոպ" => mkN001 form;
_ + "ւպ" => mkN001 form;
_ + "իպ" => mkN001 form;
_ + "եգ" => mkN007 form;
_ + "իգ" => mkN007 form;
_ + "ոգ" => mkN007 form;
_ + "յգ" => mkN007 form;
_ + "ուրչ" => mkN005 form;
_ + "շչ" => mkN007 form;
_ + "նծ" => mkN007 form;
_ + "եծ" => mkN007 form;
_ + "յծ" => mkN007 form;
_ + "եւ" => mkN001 form;
_ + "աւ" => mkN001 form;
_ + "ւժ" => mkN007 form;
_ + "իժ" => mkN013 form;
_ + "քշ" => mkN007 form;
_ + "րշ" => mkN007 form;
_ + "ուզ" => mkN005 form;
_ + "րզ" => mkN007 form;
_ + "ավ" => mkN007 form;
_ + "յվ" => mkN007 form;
_ + "աֆ" => mkN001 form;
_ + "լֆ" => mkN001 form;
_ + "իփ" => mkN001 form;
_ + "ափ" => mkN001 form;
_ + "ոյ" => mkN007 form;
_ + "լի" => mkN006 form;
_ + "բի" => mkN006 form;
_ + "խի" => mkN006 form;
_ + "թի" => mkN006 form;
_ + "պի" => mkN006 form;
_ + "վի" => mkN006 form;
_ + "փի" => mkN006 form;
_ + "աի" => mkN006 form;
_ + "ջի" => mkN006 form;
_ + "ն" => mkN001 form;
_ + "մ" => mkN001 form;
_ + "տ" => mkN001 form;
_ + "ռ" => mkN001 form;
_ + "դ" => mkN001 form;
_ + "ղ" => mkN001 form;
_ + "խ" => mkN001 form;
_ + "կ" => mkN001 form;
_ + "ր" => mkN001 form;
_ + "լ" => mkN001 form;
_ + "ս" => mkN001 form;
_ + "ճ" => mkN001 form;
_ + "ք" => mkN001 form;
_ + "ց" => mkN001 form;
_ + "ջ" => mkN001 form;
_ + "թ" => mkN001 form;
_ + "բ" => mkN001 form;
_ + "պ" => mkN007 form;
_ + "գ" => mkN001 form;
_ + "չ" => mkN001 form;
_ + "ծ" => mkN001 form;
_ + "ւ" => mkN006 form;
_ + "ժ" => mkN001 form;
_ + "շ" => mkN001 form;
_ + "զ" => mkN001 form;
_ + "ձ" => mkN007 form;
_ + "վ" => mkN001 form;
_ + "ֆ" => mkN007 form;
_ + "հ" => mkN001 form;
_ + "փ" => mkN007 form;
_ + "յ" => mkN001 form;
_ + "ա" => mkN002 form;
_ + "ո" => mkN002 form;
_ + "ի" => mkN003 form;
_ + "ե" => mkN006 form;
_ + "է" => mkN006 form;
_ => error "Cannot find an inflection rule"
} ;
reg2N : Str -> Str -> N -- s;Nom;Sg s;Dat;Sg
= \form1, form2 -> case <form1, form2> of {
<_ + "թու", _ + "ւի"> => mkN006 form1;
<_ + "շեր", _ + "ի"> => mkN001 form1;
<_ + "ժամ", _ + "ա"> => mkN016 form1;
<_ + "ուն", _ + "բնի"> => mkN005 form1;
<_ + "ւն", _ + "վան"> => mkN009 form1;
<_ + "ւն", _ + "տան"> => mkN028 form1;
<_ + "ւն", _ + "շան"> => mkN028 form1;
<_ + "ւզ", _ + "ւզի"> => mkN001 form1;
<_ + "ւն", _ + "ի"> => mkN001 form1;
<_ + "ւն", _ + "ա"> => mkN032 form1;
<_ + "ւմ", _ + "ի"> => mkN001 form1;
<_ + "լի", _ + "ւ"> => mkN003 form1;
<_ + "բի", _ + "ւ"> => mkN003 form1;
<_ + "խի", _ + "ւ"> => mkN003 form1;
<_ + "թի", _ + "ւ"> => mkN003 form1;
<_ + "տ", _ + "մտի"> => mkN005 form1;
<_ + "տ", _ + "գտի"> => mkN005 form1;
<_ + "տ", _ + "վտի"> => mkN013 form1;
<_ + "ռ", _ + "ճռի"> => mkN013 form1;
<_ + "ն", _ + "ծնի"> => mkN013 form1;
<_ + "ն", _ + "տնի"> => mkN013 form1;
<_ + "ն", _ + "ցնի"> => mkN013 form1;
<_ + "ն", _ + "ձնի"> => mkN013 form1;
<_ + "ն", _ + "բնի"> => mkN013 form1;
<_ + "ն", _ + "խնի"> => mkN013 form1;
<_ + "ղ", _ + "ւղի"> => mkN007 form1;
<_ + "ղ", _ + "վղի"> => mkN013 form1;
<_ + "ղ", _ + "փղի"> => mkN015 form1;
<_ + "ղ", _ + "տղի"> => mkN031 form1;
<_ + "խ", _ + "ծխի"> => mkN005 form1;
<_ + "խ", _ + "բխի"> => mkN031 form1;
<_ + "կ", _ + "ղկի"> => mkN013 form1;
<_ + "կ", _ + "տկի"> => mkN013 form1;
<_ + "կ", _ + "պկի"> => mkN013 form1;
<_ + "կ", _ + "զկի"> => mkN031 form1;
<_ + "ս", _ + "մսի"> => mkN013 form1;
<_ + "ճ", _ + "վճի"> => mkN013 form1;
<_ + "ճ", _ + "հճի"> => mkN013 form1;
<_ + "ց", _ + "տցի"> => mkN005 form1;
<_ + "ց", _ + "կցի"> => mkN013 form1;
<_ + "ր", _ + "դրի"> => mkN013 form1;
<_ + "ր", _ + "գրի"> => mkN015 form1;
<_ + "ր", _ + "տրի"> => mkN005 form1;
<_ + "ր", _ + "ջրի"> => mkN005 form1;
<_ + "ր", _ + "լրի"> => mkN005 form1;
<_ + "ր", _ + "նրի"> => mkN013 form1;
<_ + "ր", _ + "խրի"> => mkN013 form1;
<_ + "ր", _ + "կրի"> => mkN013 form1;
<_ + "ր", _ + "ցրի"> => mkN013 form1;
<_ + "չ", _ + "պչի"> => mkN013 form1;
<_ + "չ", _ + "կչի"> => mkN013 form1;
<_ + "չ", _ + "րչի"> => mkN013 form1;
<_ + "չ", _ + "ցչի"> => mkN013 form1;
<_ + "չ", _ + "վչի"> => mkN013 form1;
<_ + "ծ", _ + "գծի"> => mkN015 form1;
<_ + "շ", _ + "փշի"> => mkN005 form1;
<_ + "ի", _ + "իու"> => mkN027 form1;
<_ + "ի", _ + "ձիի"> => mkN017 form1;
<_ + "ւ", _ + "վի"> => mkN012 form1;
<_ + "տ", _ + "ա"> => mkN016 form1;
<_ + "ռ", _ + "ն"> => mkN026 form1;
<_ + "ն", _ + "ջ"> => mkN034 form1;
<_ + "կ", _ + "ա"> => mkN016 form1;
<_ + "կ", _ + "ն"> => mkN023 form1;
<_ + "ր", _ + "ջ"> => mkN043 form1;
<_ + "ի", _ + "ի"> => mkN006 form1;
_ => regN form1
} ;
regA : Str -> A -- s;Nom;Sg
= \form -> case form of {
_ + "կիչ" => mkA006 form;
_ + "ենգ" => mkA005 form;
_ + "աղջ" => mkA005 form;
_ + "սկի" => mkA003 form;
_ + "աղի" => mkA003 form;
_ + "ղց" => mkA005 form;
_ + "ջն" => mkA005 form;
_ + "եպ" => mkA005 form;
_ + "նտ" => mkA005 form;
_ + "ոդ" => mkA005 form;
_ + "ղծ" => mkA005 form;
_ + "յծ" => mkA005 form;
_ + "եծ" => mkA005 form;
_ + "ձր" => mkA005 form;
_ + "նր" => mkA005 form;
_ + "ծր" => mkA005 form;
_ + "մր" => mkA005 form;
_ + "սր" => mkA005 form;
_ + "քր" => mkA005 form;
_ + "ցր" => mkA005 form;
_ + "եւ" => mkA001 form;
_ + "ոկ" => mkA005 form;
_ + "ղմ" => mkA005 form;
_ + "տք" => mkA005 form;
_ + "իղ" => mkA006 form;
_ + "նչ" => mkA008 form;
_ + "ոխ" => mkA005 form;
_ + "ղխ" => mkA005 form;
_ + "ղթ" => mkA005 form;
_ + "ւթ" => mkA011 form;
_ + "րշ" => mkA005 form;
_ + "եշ" => mkA005 form;
_ + "քշ" => mkA005 form;
_ + "ոռ" => mkA005 form;
_ + "ւգ" => mkA005 form;
_ + "եգ" => mkA005 form;
_ + "րճ" => mkA005 form;
_ + "րզ" => mkA005 form;
_ + "եզ" => mkA005 form;
_ + "ւփ" => mkA005 form;
_ + "նջ" => mkA005 form;
_ + "աջ" => mkA005 form;
_ + "մբ" => mkA001 form;
_ + "ոյ" => mkA001 form;
_ + "բի" => mkA003 form;
_ + "սի" => mkA003 form;
_ + "ց" => mkA001 form;
_ + "ն" => mkA001 form;
_ + "պ" => mkA001 form;
_ + "տ" => mkA001 form;
_ + "դ" => mkA001 form;
_ + "վ" => mkA001 form;
_ + "ծ" => mkA001 form;
_ + "ձ" => mkA001 form;
_ + "ր" => mkA001 form;
_ + "լ" => mkA001 form;
_ + "ւ" => mkA002 form;
_ + "կ" => mkA001 form;
_ + "մ" => mkA001 form;
_ + "ք" => mkA001 form;
_ + "ղ" => mkA001 form;
_ + "չ" => mkA001 form;
_ + "ժ" => mkA001 form;
_ + "խ" => mkA001 form;
_ + "թ" => mkA001 form;
_ + "ս" => mkA001 form;
_ + "շ" => mkA001 form;
_ + "հ" => mkA001 form;
_ + "ռ" => mkA001 form;
_ + "գ" => mkA001 form;
_ + "ճ" => mkA001 form;
_ + "զ" => mkA001 form;
_ + "փ" => mkA001 form;
_ + "ջ" => mkA001 form;
_ + "բ" => mkA005 form;
_ + "յ" => mkA005 form;
_ + "ե" => mkA002 form;
_ + "ի" => mkA002 form;
_ + "ա" => mkA004 form;
_ + "ո" => mkA004 form;
_ => error "Cannot find an inflection rule"
} ;
reg2A : Str -> Str -> A -- s;Nom;Sg s;Nom;Pl
= \form1, form2 -> case <form1, form2> of {
<_ + "ոռ", _ + "ներ"> => mkA001 form1;
<_ + "տ", _ + "տեր"> => mkA005 form1;
<_ + "վ", _ + "վեր"> => mkA005 form1;
<_ + "ծ", _ + "ծեր"> => mkA005 form1;
<_ + "ձ", _ + "ձեր"> => mkA005 form1;
<_ + "լ", _ + "լեր"> => mkA005 form1;
<_ + "կ", _ + "կեր"> => mkA005 form1;
<_ + "մ", _ + "մեր"> => mkA005 form1;
<_ + "ք", _ + "քեր"> => mkA005 form1;
<_ + "ղ", _ + "ղեր"> => mkA005 form1;
<_ + "խ", _ + "խեր"> => mkA005 form1;
<_ + "թ", _ + "թեր"> => mkA005 form1;
<_ + "շ", _ + "շեր"> => mkA005 form1;
<_ + "հ", _ + "հեր"> => mkA005 form1;
<_ + "ռ", _ + "ռեր"> => mkA005 form1;
<_ + "գ", _ + "գեր"> => mkA005 form1;
<_ + "ճ", _ + "ճեր"> => mkA005 form1;
<_ + "զ", _ + "զեր"> => mkA005 form1;
<_ + "ջ", _ + "ջեր"> => mkA005 form1;
_ => regA form1
} ;
mkV = overload {
mkV : Str -> V = regV; -- s
mkV : Str -> Str -> V = reg2V -- s Imperative_Jussive;Pl
} ;
mkVV,mkVS,mkVQ,mkVA = \v -> v ;
mkV2 = overload {
mkV2 : V -> V2 = \v -> v ** {c2 = noPrep} ;
mkV2 : V -> Prep -> V2 = \v,p -> v ** {c2 = p} ;
} ;
mkV3 = overload {
mkV3 : V -> V3 = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV3 : V -> Prep -> Prep -> V3 = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
} ;
mkV2A = overload {
mkV2A : V -> V2A = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV2A : V -> Prep -> Prep -> V2A = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
} ;
mkV2S = overload {
mkV2S : V -> V2S = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV2S : V -> Prep -> Prep -> V2S = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
} ;
mkV2Q = overload {
mkV2Q : V -> V2Q = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV2Q : V -> Prep -> Prep -> V2Q = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
} ;
mkV2V = overload {
mkV2V : V -> V2V = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV2V : V -> Prep -> Prep -> V2V = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
} ;
mkN = overload {
mkN : Str -> N = regN; -- s;Nom;Sg
mkN : Str -> Str -> N = reg2N -- s;Nom;Sg s;Dat;Sg
} ;
mkN2 = overload {
mkN2 : N -> N2 = \n -> n ** {c2 = noPrep} ;
mkN2 : N -> Prep -> N2 = \n,p -> n ** {c2 = p} ;
} ;
mkN3 = overload {
mkN3 : N -> N3 = \n -> n ** {c2 = noPrep; c3 = noPrep} ;
mkN3 : N -> Prep -> Prep -> N3 = \n,p1,p2 -> n ** {c2 = p1; c3 = p2} ;
} ;
mkA = overload {
mkA : Str -> A = regA; -- s;Nom;Sg
mkA : Str -> Str -> A = reg2A -- s;Nom;Sg s;Nom;Pl
} ;
mkA2 = overload {
mkA2 : A -> A2 = \a -> a ** {c2 = noPrep} ;
mkA2 : A -> Prep -> A2 = \a,p -> a ** {c2 = p} ;
} ;
mkAdv : Str -> Adv = \s -> lin Adv {s=s} ;
mkAdV : Str -> AdV = \s -> lin AdV {s=s} ;
mkAdA : Str -> AdA = \s -> lin AdA {s=s} ;
mkAdN : Str -> AdN = \s -> lin AdN {s=s} ;
mkCAdv : Str -> CAdv = \s -> lin CAdv {s=s; p=""} ;
mkInterj : Str -> Interj = \s -> lin Interj {s=s} ;
mkMU : Str -> MU = \s -> lin MU {s=s; isPre=False} ;
mkPrep : Str -> Prep = \s -> lin Prep {s=s; c=Dat} ;
mkIAdv : Str -> IAdv = \s -> lin IAdv {s=s} ;
mkIP : Str -> IP = \s -> lin IP {s=s} ;
mkIQuant : Str -> IQuant = \s -> lin IQuant {s=s} ;
mkIDet : Str -> IDet = \s -> lin IDet {s=s} ;
mkSubj : Str -> Subj = \s -> lin Subj {s=s} ;
mkQuant : Str -> Quant = \s -> lin Quant {s=s} ;
mkPredet : Str -> Predet = \s -> lin Predet {s=s} ;
mkDet : Str -> Det = \s -> lin Det {s=s} ;
mkCard : Str -> Card = \s -> lin Card {s=s} ;
mkConj : Str -> Conj = \s -> lin Conj {s=s} ;
mkPConj : Str -> PConj = \s -> lin PConj {s=s} ;
mkVoc : Str -> Voc = \s -> lin Voc {s=s} ;
mkLN : Str -> LN = \s -> lin LN {s=s} ;
mkGN : Str -> GN = \s -> lin GN {s=s} ;
mkSN : Str -> SN = \s -> lin SN {s=s} ;
mkPN : Str -> PN = \s -> lin PN {s=s} ;
}

11
src/armenian/PhraseHye.gf Normal file
View File

@@ -0,0 +1,11 @@
concrete PhraseHye of Phrase = CatHye ** {
lin
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
UttS s = s ;
UttInterj i = i ;
NoPConj = {s = []} ;
NoVoc = {s = []} ;
}

269
src/armenian/ResHye.gf Normal file
View File

@@ -0,0 +1,269 @@
resource ResHye = {
param Aspect = Non_Past | Perfect ;
param Person = P1 | P3 | P2 ;
param Number = Sg | Pl ;
param Case = Nom | Dat | Ablat | Instr | Loc ;
param PartType = Resultative | Subject ;
oper Verb = {s: Str; Causative: Str; Conditional: Aspect => Person => Number => Str; Converb: {Imperfective: Str; FutCon1: Str; FutCon2: Str; Negative: Str; Perfective: Str; Simultaneous: Str}; Imperative_Jussive: Number => Str; Passive: Str; Past: Person => Number => Str; Participle: PartType => Str; Subjunctive: Aspect => Person => Number => Str} ; -- 898
oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Verb =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24,f25,f26,f27,f28,f29,f30,f31,f32,f33,f34,f35,f36,f37,f38,f39,f40,f41,f42,f43 ->
{ s = f1 ;
Causative = f2 ;
Conditional = table {
Perfect => table {
P1 => table {
Sg => f3 ;
Pl => f4
} ;
P2 => table {
Sg => f5 ;
Pl => f6
} ;
P3 => table {
Sg => f7 ;
Pl => f8
}
} ;
Non_Past => table {
P1 => table {
Sg => f9 ;
Pl => f10
} ;
P2 => table {
Sg => f11 ;
Pl => f12
} ;
P3 => table {
Sg => f13 ;
Pl => f14
}
}
} ;
Converb = { Imperfective = f15 ;
FutCon1 = f16 ;
FutCon2 = f17 ;
Negative = f18 ;
Perfective = f19 ;
Simultaneous = f20
} ;
Imperative_Jussive = table {
Sg => f21 ;
Pl => f22
} ;
Passive = f23 ;
Past = table {
P1 => table {
Sg => f24 ;
Pl => f25
} ;
P2 => table {
Sg => f26 ;
Pl => f27
} ;
P3 => table {
Sg => f28 ;
Pl => f29
}
} ;
Participle = table {
Resultative => f30 ;
Subject => f31
} ;
Subjunctive = table {
Perfect => table {
P1 => table {
Sg => f32 ;
Pl => f33
} ;
P2 => table {
Sg => f34 ;
Pl => f35
} ;
P3 => table {
Sg => f36 ;
Pl => f37
}
} ;
Non_Past => table {
P1 => table {
Sg => f38 ;
Pl => f39
} ;
P2 => table {
Sg => f40 ;
Pl => f41
} ;
P3 => table {
Sg => f42 ;
Pl => f43
}
}
}
} ;
oper Noun = {s: Case => Number => Str; def_dat: Number => Str; def_nom: Number => Str; poss1: Case => Number => Str; poss2: Case => Number => Str} ; -- 4880
oper mkNoun : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Noun =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24,f25,f26,f27,f28,f29,f30,f31,f32,f33,f34 ->
{ s = table {
Nom => table {
Sg => f1 ;
Pl => f2
} ;
Dat => table {
Sg => f3 ;
Pl => f4
} ;
Ablat => table {
Sg => f5 ;
Pl => f6
} ;
Instr => table {
Sg => f7 ;
Pl => f8
} ;
Loc => table {
Sg => f9 ;
Pl => f10
}
} ;
def_dat = table {
Sg => f11 ;
Pl => f12
} ;
def_nom = table {
Sg => f13 ;
Pl => f14
} ;
poss1 = table {
Nom => table {
Sg => f15 ;
Pl => f16
} ;
Dat => table {
Sg => f17 ;
Pl => f18
} ;
Ablat => table {
Sg => f19 ;
Pl => f20
} ;
Instr => table {
Sg => f21 ;
Pl => f22
} ;
Loc => table {
Sg => f23 ;
Pl => f24
}
} ;
poss2 = table {
Nom => table {
Sg => f25 ;
Pl => f26
} ;
Dat => table {
Sg => f27 ;
Pl => f28
} ;
Ablat => table {
Sg => f29 ;
Pl => f30
} ;
Instr => table {
Sg => f31 ;
Pl => f32
} ;
Loc => table {
Sg => f33 ;
Pl => f34
}
}
} ;
oper Adj = {s: Case => Number => Str; def_dat: Number => Str; def_nom: Number => Str; poss1: Case => Number => Str; poss2: Case => Number => Str} ; -- 1608
oper mkAdj : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Adj =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24,f25,f26,f27,f28,f29,f30,f31,f32,f33,f34 ->
{ s = table {
Nom => table {
Sg => f1 ;
Pl => f2
} ;
Dat => table {
Sg => f3 ;
Pl => f4
} ;
Ablat => table {
Sg => f5 ;
Pl => f6
} ;
Instr => table {
Sg => f7 ;
Pl => f8
} ;
Loc => table {
Sg => f9 ;
Pl => f10
}
} ;
def_dat = table {
Sg => f11 ;
Pl => f12
} ;
def_nom = table {
Sg => f13 ;
Pl => f14
} ;
poss1 = table {
Nom => table {
Sg => f15 ;
Pl => f16
} ;
Dat => table {
Sg => f17 ;
Pl => f18
} ;
Ablat => table {
Sg => f19 ;
Pl => f20
} ;
Instr => table {
Sg => f21 ;
Pl => f22
} ;
Loc => table {
Sg => f23 ;
Pl => f24
}
} ;
poss2 = table {
Nom => table {
Sg => f25 ;
Pl => f26
} ;
Dat => table {
Sg => f27 ;
Pl => f28
} ;
Ablat => table {
Sg => f29 ;
Pl => f30
} ;
Instr => table {
Sg => f31 ;
Pl => f32
} ;
Loc => table {
Sg => f33 ;
Pl => f34
}
}
} ;
oper Compl = {s : Str; c : Case} ;
oper noPrep : Compl = {s=""; c=Dat} ;
}

View File

@@ -0,0 +1,4 @@
concrete AdjectiveBel of Adjective = CatBel ** {
lin
PositA a = a ;
}

4
src/belarusian/AllBel.gf Normal file
View File

@@ -0,0 +1,4 @@
concrete AllBel of AllBelAbs =
LangBel
**
{} ;

View File

@@ -0,0 +1,3 @@
abstract AllBelAbs =
Lang
** {}

21
src/belarusian/CatBel.gf Normal file
View File

@@ -0,0 +1,21 @@
concrete CatBel of Cat = CommonX ** open ResBel in {
lincat N = Noun ;
lincat N2 = Noun ** {c2 : Compl} ;
lincat N3 = Noun ** {c2,c3 : Compl} ;
lincat V = V ;
lincat VV,VS,VQ,VA = V ;
lincat V2 = V ** {c2 : Compl} ;
lincat V3,V2A,V2S,V2Q,V2V = V ** {c2,c3 : Compl} ;
lincat A = A ;
lincat A2 = A ** {c2 : Compl} ;
lincat Prep = Compl ;
lincat CN = CommonNoun ;
lincat AP = AdjPhrase ;
lincat S = {s : Str} ;
lincat LN,SN,GN,PN = {s : Str} ;
linref V,VV,V2,V3,V2A,V2S,V2Q,V2V = \v -> v.infinitive ;
}

View File

@@ -0,0 +1,77 @@
concrete DocumentationBel of Documentation = CatBel ** open
ResBel, Prelude, HTML in {
lincat
Inflection = {t : Str; s1,s2,s3 : Str} ;
Definition = {s : Str} ;
Document = {s : Str} ;
Tag = {s : Str} ;
lin
InflectionN,InflectionN2,InflectionN3 = \x -> {
t="n" ;
s1="" ;
s2=frameTable (
tr (th "" ++ th "Sg" ++ th "Pl") ++
tr (th "Nom" ++ td (x.s ! Nom ! Sg) ++ td (x.s ! Nom ! Pl)) ++
tr (th "Acc" ++ td (x.s ! Acc ! Sg) ++ td (x.s ! Acc ! Pl)) ++
tr (th "Dat" ++ td (x.s ! Dat ! Sg) ++ td (x.s ! Dat ! Pl)) ++
tr (th "Gen" ++ td (x.s ! Gen ! Sg) ++ td (x.s ! Gen ! Pl)) ++
tr (th "Loc" ++ td (x.s ! Loc ! Sg) ++ td (x.s ! Loc ! Pl)) ++
tr (th "Instr" ++ td (x.s ! Instr ! Sg) ++ td (x.s ! Instr ! Pl))) ;
s3=[]
} ;
lin
InflectionV,InflectionV2,InflectionV2A,InflectionV2Q,InflectionV2S,InflectionV2V,InflectionV3,InflectionVA,InflectionVQ,InflectionVS,InflectionVV = \x -> {
t="v" ;
s1="" ;
s2=heading1 "Infinitive" ++
paragraph (x.infinitive) ++
heading1 "Present" ++
frameTable (
tr (intagAttr "th" "rowspan=\"6\"" "Pres" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td ((x.active ! Imperf).Pres ! P1 ! Sg)) ++
tr (th "Pl" ++ td ((x.active ! Imperf).Pres ! P1 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2" ++ th "Sg" ++ td ((x.active ! Imperf).Pres ! P2 ! Sg)) ++
tr (th "Pl" ++ td ((x.active ! Imperf).Pres ! P2 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td ((x.active ! Imperf).Pres ! P3 ! Sg)) ++
tr (th "Pl" ++ td ((x.active ! Imperf).Pres ! P3 ! Pl))) ++
heading1 "Imperative" ++
frameTable (
tr (th "Sg" ++ td (x.imperative ! Sg)) ++
tr (th "Pl" ++ td (x.imperative ! Pl))) ++
heading1 "participle" ++
frameTable (
tr (th "" ++ th "Sg" ++ th "Pl") ++
tr (th "Masc" ++ td (x.participle ! Masc ! Sg) ++ td (x.participle ! Masc ! Pl)) ++
tr (th "Fem" ++ td (x.participle ! Fem ! Sg) ++ td (x.participle ! Fem ! Pl)) ++
tr (th "Neuter" ++ td (x.participle ! Neuter ! Sg) ++ td (x.participle ! Neuter ! Pl))) ;
s3=[]
} ;
lin
InflectionA,InflectionA2 = \x -> {
t="a" ;
s1="" ;
s2=frameTable (
tr (th "" ++ th "Masc" ++ th "Fem" ++ th "Neuter" ++ th "Pl") ++
tr (th "Nom" ++ td (x.s ! Nom ! GSg Masc) ++ td (x.s ! Nom ! GSg Fem) ++ td (x.s ! Nom ! GSg Neuter) ++ td (x.s ! Nom ! GPl)) ++
tr (th "Acc" ++ td (x.s ! Acc ! GSg Masc) ++ td (x.s ! Acc ! GSg Fem) ++ td (x.s ! Acc ! GSg Neuter) ++ td (x.s ! Acc ! GPl)) ++
tr (th "Dat" ++ td (x.s ! Dat ! GSg Masc) ++ td (x.s ! Dat ! GSg Fem) ++ td (x.s ! Dat ! GSg Neuter) ++ td (x.s ! Dat ! GPl)) ++
tr (th "Gen" ++ td (x.s ! Gen ! GSg Masc) ++ td (x.s ! Gen ! GSg Fem) ++ td (x.s ! Gen ! GSg Neuter) ++ td (x.s ! Gen ! GPl)) ++
tr (th "Loc" ++ td (x.s ! Loc ! GSg Masc) ++ td (x.s ! Loc ! GSg Fem) ++ td (x.s ! Loc ! GSg Neuter) ++ td (x.s ! Loc ! GPl)) ++
tr (th "Instr"++td (x.s ! Instr ! GSg Masc)++td (x.s ! Instr ! GSg Fem)++td (x.s ! Instr ! GSg Neuter)++td (x.s ! Instr ! GPl))) ;
s3=[]
} ;
lin
InflectionAdA,InflectionAdN,InflectionAdV,InflectionAdv = \x -> {t="adv"; s1=""; s2=x.s; s3=""} ;
InflectionPrep = \x -> {t="prep"; s1=""; s2=x.s; s3=""} ;
lin
NoDefinition t = {s=t.s};
MkDefinition t d = {s="<p><b>Definition:</b>"++t.s++d.s++"</p>"};
MkDefinitionEx t d e = {s="<p><b>Definition:</b>"++t.s++d.s++"</p><p><b>Example:</b>"++e.s++"</p>"};
lin
MkDocument d i e = {s = i.s1 ++ d.s ++ i.s2 ++ i.s3 ++ e.s} ;
MkTag i = {s = i.t} ;
}

View File

@@ -0,0 +1,6 @@
concrete GrammarBel of Grammar =
TenseX,
PhraseBel,
NounBel,
AdjectiveBel ** {
}

10
src/belarusian/LangBel.gf Normal file
View File

@@ -0,0 +1,10 @@
--# -path=.:../abstract
concrete LangBel of Lang =
GrammarBel,
LexiconBel
,DocumentationBel --# notpresent
** {
flags startcat = Phr ;
}

View File

@@ -0,0 +1,2 @@
concrete LexiconBel of Lexicon = CatBel ** open ParadigmsBel in {
}

29614
src/belarusian/MorphoBel.gf Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,4 @@
concrete NounBel of Noun = CatBel ** {
lin
UseN n = n ;
}

View File

@@ -0,0 +1,839 @@
resource ParadigmsBel = MorphoBel ** open Predef, Prelude, CatBel, ResBel in {
oper
regN : Str -> N -- s;Nom;Sg
= \form -> case form of {
_ + "цат" => mkN056 form;
_ + "фат" => mkN099 form;
_ + "бат" => mkN131 form;
_ + "ват" => mkN131 form;
_ + "кат" => mkN131 form;
_ + "энт" => mkN131 form;
_ + "онт" => mkN056 form;
_ + "ікт" => mkN056 form;
_ + "укт" => mkN056 form;
_ + "сіт" => mkN131 form;
_ + "біт" => mkN131 form;
_ + "ірт" => mkN205 form;
_ + "ост" => mkN056 form;
_ + "уст" => mkN125 form;
_ + "эфт" => mkN056 form;
_ + "нёт" => mkN056 form;
_ + "ыёт" => mkN131 form;
_ + "аэт" => mkN131 form;
_ + "цэт" => mkN131 form;
_ + "чыт" => mkN125 form;
_ + "гут" => mkN125 form;
_ + "'ят" => mkN131 form;
_ + "лец" => mkN002 form;
_ + "аец" => mkN235 form;
_ + "еец" => mkN235 form;
_ + "ыец" => mkN235 form;
_ + "іец" => mkN235 form;
_ + "зец" => mkN265 form;
_ + "вец" => mkN300 form;
_ + "рац" => mkN286 form;
_ + "рка" => mkN003 form;
_ + "іка" => mkN003 form;
_ + "ека" => mkN003 form;
_ + "ыка" => mkN003 form;
_ + "ўка" => mkN217 form;
_ + "ука" => mkN026 form;
_ + "эка" => mkN026 form;
_ + "ока" => mkN026 form;
_ + "ака" => mkN026 form;
_ + "яка" => mkN026 form;
_ + "йка" => mkN124 form;
_ + "ька" => mkN196 form;
_ + "ква" => mkN039 form;
_ + "ова" => mkN150 form;
_ + "зва" => mkN039 form;
_ + "хва" => mkN039 form;
_ + "рва" => mkN039 form;
_ + "ева" => mkN138 form;
_ + "ява" => mkN150 form;
_ + "эва" => mkN166 form;
_ + "уза" => mkN012 form;
_ + "аза" => mkN012 form;
_ + "нза" => mkN012 form;
_ + "еза" => mkN024 form;
_ + "ўза" => mkN039 form;
_ + "яза" => mkN187 form;
_ + "іма" => mkN012 form;
_ + "ома" => mkN012 form;
_ + "ьма" => mkN091 form;
_ + "чма" => mkN215 form;
_ + "ьба" => mkN012 form;
_ + "аба" => mkN012 form;
_ + "ыба" => mkN012 form;
_ + "ёба" => mkN024 form;
_ + "жба" => mkN039 form;
_ + "чба" => mkN039 form;
_ + "ўба" => mkN091 form;
_ + "ўна" => mkN012 form;
_ + "ына" => mkN012 form;
_ + "ана" => mkN012 form;
_ + "рна" => mkN012 form;
_ + "дна" => mkN024 form;
_ + "нна" => mkN039 form;
_ + "яна" => mkN061 form;
_ + "уна" => mkN091 form;
_ + "спа" => mkN012 form;
_ + "лпа" => mkN083 form;
_ + "гла" => mkN012 form;
_ + "ула" => mkN188 form;
_ + "ёла" => mkN012 form;
_ + "іла" => mkN188 form;
_ + "ела" => mkN188 form;
_ + "яла" => mkN091 form;
_ + "сла" => mkN260 form;
_ + "ыса" => mkN012 form;
_ + "оса" => mkN024 form;
_ + "йга" => mkN020 form;
_ + "рга" => mkN061 form;
_ + "ьга" => mkN088 form;
_ + "ята" => mkN245 form;
_ + "ыта" => mkN245 form;
_ + "дра" => mkN102 form;
_ + "тра" => mkN080 form;
_ + "бра" => mkN080 form;
_ + "ўра" => mkN099 form;
_ + "кра" => mkN102 form;
_ + "ыца" => mkN137 form;
_ + "ўца" => mkN137 form;
_ + "дца" => mkN078 form;
_ + "йца" => mkN078 form;
_ + "чца" => mkN078 form;
_ + "нца" => mkN080 form;
_ + "рца" => mkN080 form;
_ + "сца" => mkN080 form;
_ + "ржа" => mkN064 form;
_ + "жжа" => mkN080 form;
_ + "джа" => mkN102 form;
_ + "ыча" => mkN036 form;
_ + "эча" => mkN036 form;
_ + "яча" => mkN064 form;
_ + "чча" => mkN080 form;
_ + "нча" => mkN102 form;
_ + "оха" => mkN309 form;
_ + "ьха" => mkN309 form;
_ + "зык" => mkN005 form;
_ + "мык" => mkN005 form;
_ + "тык" => mkN043 form;
_ + "аяк" => mkN005 form;
_ + "пяк" => mkN005 form;
_ + "ляк" => mkN063 form;
_ + "мак" => mkN006 form;
_ + "пак" => mkN006 form;
_ + "шак" => mkN006 form;
_ + "сак" => mkN006 form;
_ + "вак" => mkN063 form;
_ + "зак" => mkN251 form;
_ + "вік" => mkN005 form;
_ + "лік" => mkN043 form;
_ + "вук" => mkN006 form;
_ + "цук" => mkN006 form;
_ + "рук" => mkN043 form;
_ + "шук" => mkN043 form;
_ + "нук" => mkN063 form;
_ + "чук" => mkN328 form;
_ + "шок" => mkN015 form;
_ + "мок" => mkN063 form;
_ + "чок" => mkN015 form;
_ + "нок" => mkN015 form;
_ + "рэк" => mkN063 form;
_ + "цуг" => mkN005 form;
_ + "раг" => mkN063 form;
_ + "онг" => mkN008 form;
_ + "рог" => mkN337 form;
_ + "лог" => mkN200 form;
_ + "жух" => mkN005 form;
_ + "тух" => mkN063 form;
_ + "нах" => mkN063 form;
_ + "віч" => mkN062 form;
_ + "нач" => mkN184 form;
_ + "ршч" => mkN204 form;
_ + "пыр" => mkN334 form;
_ + "лор" => mkN007 form;
_ + "рор" => mkN042 form;
_ + "пор" => mkN059 form;
_ + "хор" => mkN155 form;
_ + "фар" => mkN007 form;
_ + "нар" => mkN007 form;
_ + "хар" => mkN019 form;
_ + "гар" => mkN019 form;
_ + "вар" => mkN042 form;
_ + "жар" => mkN042 form;
_ + "сір" => mkN062 form;
_ + "пір" => mkN062 form;
_ + "хір" => mkN365 form;
_ + "гір" => mkN365 form;
_ + "кер" => mkN007 form;
_ + "мер" => mkN042 form;
_ + "лер" => mkN042 form;
_ + "нер" => mkN062 form;
_ + "вер" => mkN174 form;
_ + "ґер" => mkN127 form;
_ + "цэр" => mkN062 form;
_ + "шэр" => mkN062 form;
_ + "дэр" => mkN062 form;
_ + "гур" => mkN062 form;
_ + "чур" => mkN062 form;
_ + "аўр" => mkN334 form;
_ + "ыгр" => mkN334 form;
_ + "даж" => mkN034 form;
_ + "гаж" => mkN071 form;
_ + "ыум" => mkN031 form;
_ + "нос" => mkN013 form;
_ + "пус" => mkN009 form;
_ + "лас" => mkN009 form;
_ + "рас" => mkN045 form;
_ + "лёс" => mkN011 form;
_ + "цыс" => mkN013 form;
_ + "нес" => mkN045 form;
_ + "зіс" => mkN045 form;
_ + "вол" => mkN035 form;
_ + "рол" => mkN159 form;
_ + "пел" => mkN011 form;
_ + "рал" => mkN013 form;
_ + "дал" => mkN013 form;
_ + "кал" => mkN013 form;
_ + "сал" => mkN013 form;
_ + "сул" => mkN013 form;
_ + "мул" => mkN045 form;
_ + "нёл" => mkN013 form;
_ + "вон" => mkN009 form;
_ + "рон" => mkN011 form;
_ + "лон" => mkN011 form;
_ + "зон" => mkN011 form;
_ + "аон" => mkN013 form;
_ + "зан" => mkN013 form;
_ + "бан" => mkN195 form;
_ + "зін" => mkN011 form;
_ + "фін" => mkN013 form;
_ + "він" => mkN013 form;
_ + "рэн" => mkN011 form;
_ + "зын" => mkN011 form;
_ + "лын" => mkN214 form;
_ + "іян" => mkN013 form;
_ + "лян" => mkN045 form;
_ + "цян" => mkN195 form;
_ + "жун" => mkN195 form;
_ + "кун" => mkN195 form;
_ + "сун" => mkN195 form;
_ + "пун" => mkN366 form;
_ + "лаб" => mkN009 form;
_ + "ваб" => mkN011 form;
_ + "раб" => mkN013 form;
_ + "арб" => mkN045 form;
_ + "цай" => mkN022 form;
_ + "гай" => mkN117 form;
_ + "тай" => mkN117 form;
_ + "чай" => mkN305 form;
_ + "бой" => mkN017 form;
_ + "рой" => mkN022 form;
_ + "пой" => mkN305 form;
_ + "зей" => mkN022 form;
_ + "куй" => mkN099 form;
_ + "мыз" => mkN011 form;
_ + "цуз" => mkN013 form;
_ + "буз" => mkN214 form;
_ + "куп" => mkN013 form;
_ + "чуп" => mkN045 form;
_ + "ноп" => mkN035 form;
_ + "хоп" => mkN045 form;
_ + "льф" => mkN011 form;
_ + "орф" => mkN011 form;
_ + "сад" => mkN037 form;
_ + "гад" => mkN037 form;
_ + "айд" => mkN037 form;
_ + "код" => mkN037 form;
_ + "лод" => mkN048 form;
_ + "луд" => mkN048 form;
_ + "пед" => mkN037 form;
_ + "зед" => mkN081 form;
_ + "оід" => mkN037 form;
_ + "туш" => mkN034 form;
_ + "рыш" => mkN062 form;
_ + "дло" => mkN278 form;
_ + "яло" => mkN278 form;
_ + "бло" => mkN278 form;
_ + "ало" => mkN316 form;
_ + "іно" => mkN061 form;
_ + "гно" => mkN278 form;
_ + "тно" => mkN316 form;
_ + "дро" => mkN246 form;
_ + "яро" => mkN246 form;
_ + "шкі" => mkN242 form;
_ + "ані" => mkN088 form;
_ + "дні" => mkN241 form;
_ + "уры" => mkN061 form;
_ + "юты" => mkN181 form;
_ + "оны" => mkN145 form;
_ + "чны" => mkN181 form;
_ + "ены" => mkN291 form;
_ + "аны" => mkN291 form;
_ + "нны" => mkN291 form;
_ + "іцы" => mkN145 form;
_ + "ёды" => mkN145 form;
_ + "зія" => mkN133 form;
_ + "хія" => mkN133 form;
_ + "лея" => mkN133 form;
_ + "ель" => mkN237 form;
_ + "унь" => mkN164 form;
_ + "энь" => mkN164 form;
_ + "ань" => mkN164 form;
_ + "онь" => mkN164 form;
_ + "азь" => mkN100 form;
_ + "дзь" => mkN152 form;
_ + "ось" => mkN375 form;
_ + "ась" => mkN375 form;
_ + "яць" => mkN325 form;
_ + "уць" => mkN325 form;
_ + "іць" => mkN325 form;
_ + "іт" => mkN056 form;
_ + "рт" => mkN056 form;
_ + "ст" => mkN131 form;
_ + "ыт" => mkN056 form;
_ + "ят" => mkN056 form;
_ + "лт" => mkN056 form;
_ + "шт" => mkN056 form;
_ + "нц" => mkN042 form;
_ + "яц" => mkN046 form;
_ + "ац" => mkN046 form;
_ + "ва" => mkN024 form;
_ + "за" => mkN016 form;
_ + "ма" => mkN016 form;
_ + "ба" => mkN016 form;
_ + "на" => mkN016 form;
_ + "па" => mkN016 form;
_ + "ла" => mkN024 form;
_ + "са" => mkN016 form;
_ + "га" => mkN021 form;
_ + "та" => mkN023 form;
_ + "ра" => mkN036 form;
_ + "ца" => mkN036 form;
_ + "жа" => mkN036 form;
_ + "ша" => mkN036 form;
_ + "ча" => mkN297 form;
_ + "эа" => mkN061 form;
_ + "да" => mkN087 form;
_ + "ха" => mkN114 form;
_ + "ык" => mkN063 form;
_ + "як" => mkN006 form;
_ + "ак" => mkN178 form;
_ + "юк" => mkN006 form;
_ + "ок" => mkN043 form;
_ + "ск" => mkN043 form;
_ + "ўк" => mkN044 form;
_ + "ёк" => mkN122 form;
_ + "уг" => mkN115 form;
_ + "рг" => mkN008 form;
_ + "аг" => mkN008 form;
_ + "яг" => mkN008 form;
_ + "зг" => mkN030 form;
_ + "ог" => mkN105 form;
_ + "ег" => mkN200 form;
_ + "іх" => mkN006 form;
_ + "эх" => mkN008 form;
_ + "ях" => mkN113 form;
_ + "рч" => mkN007 form;
_ + "іч" => mkN007 form;
_ + "юч" => mkN034 form;
_ + "яч" => mkN034 form;
_ + "шч" => mkN034 form;
_ + "ыч" => mkN034 form;
_ + "еч" => mkN184 form;
_ + "эч" => mkN184 form;
_ + "ыр" => mkN019 form;
_ + "ар" => mkN062 form;
_ + "ір" => mkN007 form;
_ + "яр" => mkN019 form;
_ + "юр" => mkN042 form;
_ + "гр" => mkN062 form;
_ + "ёр" => mkN062 form;
_ + "аж" => mkN062 form;
_ + "ож" => mkN059 form;
_ + "ўж" => mkN155 form;
_ + "рж" => mkN155 form;
_ + "дж" => mkN204 form;
_ + "ам" => mkN031 form;
_ + "ум" => mkN045 form;
_ + "ьм" => mkN031 form;
_ + "ім" => mkN031 form;
_ + "йм" => mkN031 form;
_ + "ём" => mkN031 form;
_ + "юм" => mkN031 form;
_ + "эм" => mkN045 form;
_ + "яс" => mkN009 form;
_ + "ёс" => mkN045 form;
_ + "нс" => mkN045 form;
_ + "рс" => mkN045 form;
_ + "эс" => mkN045 form;
_ + "ыл" => mkN011 form;
_ + "ел" => mkN330 form;
_ + "эл" => mkN045 form;
_ + "іл" => mkN013 form;
_ + "ёл" => mkN018 form;
_ + "ін" => mkN239 form;
_ + "эн" => mkN013 form;
_ + "рн" => mkN011 form;
_ + "ын" => mkN013 form;
_ + "ен" => mkN013 form;
_ + "ун" => mkN214 form;
_ + "рб" => mkN035 form;
_ + "ўб" => mkN035 form;
_ + "юб" => mkN045 form;
_ + "уб" => mkN050 form;
_ + "ыб" => mkN050 form;
_ + "ей" => mkN017 form;
_ + "яй" => mkN017 form;
_ + "эй" => mkN022 form;
_ + "уй" => mkN067 form;
_ + "ыз" => mkN045 form;
_ + "оз" => mkN057 form;
_ + "уп" => mkN050 form;
_ + "ап" => mkN013 form;
_ + "ўп" => mkN045 form;
_ + "ып" => mkN045 form;
_ + "іф" => mkN045 form;
_ + "рд" => mkN037 form;
_ + "юд" => mkN081 form;
_ + "зд" => mkN082 form;
_ + "ьв" => mkN120 form;
_ + "аш" => mkN034 form;
_ + "уш" => mkN046 form;
_ + "рш" => mkN046 form;
_ + "ўш" => mkN059 form;
_ + "ро" => mkN061 form;
_ + "кі" => mkN322 form;
_ + "ні" => mkN099 form;
_ + "ці" => mkN099 form;
_ + "лі" => mkN241 form;
_ + "гі" => mkN242 form;
_ + "ыё" => mkN061 form;
_ + "нё" => mkN433 form;
_ + "ье" => mkN061 form;
_ + "ае" => mkN361 form;
_ + "ры" => mkN145 form;
_ + "ты" => mkN145 form;
_ + "шы" => mkN181 form;
_ + "бы" => mkN291 form;
_ + "лы" => mkN291 form;
_ + "чы" => mkN291 form;
_ + "мы" => mkN291 form;
_ + "мя" => mkN092 form;
_ + "бя" => mkN092 form;
_ + "оя" => mkN133 form;
_ + "ця" => mkN154 form;
_ + "ка" => mkN004 form;
_ + "ль" => mkN100 form;
_ + "нь" => mkN100 form;
_ + "зь" => mkN410 form;
_ + "сь" => mkN116 form;
_ + "ыў" => mkN252 form;
_ + "еў" => mkN252 form;
_ + "т" => mkN032 form;
_ + "ц" => mkN127 form;
_ + "к" => mkN008 form;
_ + "г" => mkN043 form;
_ + "х" => mkN043 form;
_ + "ч" => mkN019 form;
_ + "р" => mkN046 form;
_ + "ж" => mkN046 form;
_ + "м" => mkN011 form;
_ + "с" => mkN031 form;
_ + "л" => mkN031 form;
_ + "н" => mkN031 form;
_ + "б" => mkN031 form;
_ + "й" => mkN010 form;
_ + "з" => mkN031 form;
_ + "п" => mkN031 form;
_ + "ф" => mkN031 form;
_ + "д" => mkN027 form;
_ + "в" => mkN031 form;
_ + ("яляш"|"ялюш") => mkN243 form;
_ + "о" => mkN055 form;
_ + "і" => mkN061 form;
_ + "э" => mkN061 form;
_ + "ё" => mkN230 form;
_ + "ю" => mkN061 form;
_ + "е" => mkN201 form;
_ + "ы" => mkN283 form;
_ + "я" => mkN206 form;
_ + "у" => mkN088 form;
_ + "ь" => mkN262 form;
_ + "o" => mkN144 form;
_ + "ў" => mkN351 form;
_ => error "Cannot find an inflection rule"
} ;
reg2N : Str -> Str -> N -- s;Nom;Sg s;Acc;Pl
= \form1, form2 -> case <form1, form2> of {
<_ + "мак", _ + "мкі"> => mkN178 form1;
<_ + "ана", _ + "оны"> => mkN070 form1;
<_ + "ана", _ + "эны"> => mkN182 form1;
<_ + "нер", _ + "яры"> => mkN069 form1;
<_ + "ель", _ + "блі"> => mkN118 form1;
<_ + "ель", _ + "флі"> => mkN179 form1;
<_ + "ань", _ + "жні"> => mkN177 form1;
<_ + "раб", _ + "оў"> => mkN195 form1;
<_ + "вак", _ + "оў"> => mkN328 form1;
<_ + "вец", _ + "оў"> => mkN420 form1;
<_ + "рка", _ + "і"> => mkN004 form1;
<_ + "іка", _ + "і"> => mkN026 form1;
<_ + "ека", _ + "і"> => mkN256 form1;
<_ + "ыка", _ + "і"> => mkN026 form1;
<_ + "ыка", _ + "ў"> => mkN129 form1;
<_ + "ўка", _ + "к"> => mkN161 form1;
<_ + "зык", _ + "ў"> => mkN006 form1;
<_ + "мак", _ + "і"> => mkN005 form1;
<_ + "пак", _ + "і"> => mkN005 form1;
<_ + "шок", _ + "і"> => mkN008 form1;
<_ + "лік", _ + "ў"> => mkN063 form1;
<_ + "нос", _ + "ы"> => mkN009 form1;
<_ + "гай", _ + "і"> => mkN010 form1;
<_ + "льф", _ + "ы"> => mkN031 form1;
<_ + "рон", _ + "ў"> => mkN013 form1;
<_ + "лон", _ + "ў"> => mkN029 form1;
<_ + "лон", _ + "ы"> => mkN045 form1;
<_ + "лёс", _ + "ы"> => mkN045 form1;
<_ + "зін", _ + "ы"> => mkN031 form1;
<_ + "уза", _ + "ы"> => mkN091 form1;
<_ + "аза", _ + "ы"> => mkN016 form1;
<_ + "аза", _ + "з"> => mkN139 form1;
<_ + "ьба", _ + "ы"> => mkN016 form1;
<_ + "іма", _ + "ы"> => mkN091 form1;
<_ + "ына", _ + "ы"> => mkN016 form1;
<_ + "спа", _ + "ы"> => mkN039 form1;
<_ + "ана", _ + "ы"> => mkN016 form1;
<_ + "гла", _ + "ы"> => mkN356 form1;
<_ + "аба", _ + "ы"> => mkN016 form1;
<_ + "ула", _ + "л"> => mkN012 form1;
<_ + "ула", _ + "ы"> => mkN016 form1;
<_ + "ыса", _ + "ы"> => mkN016 form1;
<_ + "рна", _ + "ы"> => mkN091 form1;
<_ + "раб", _ + "ы"> => mkN031 form1;
<_ + "іян", _ + "ы"> => mkN031 form1;
<_ + "цыс", _ + "ы"> => mkN031 form1;
<_ + "мок", _ + "і"> => mkN015 form1;
<_ + "іла", _ + "ы"> => mkN016 form1;
<_ + "ела", _ + "ы"> => mkN016 form1;
<_ + "ова", _ + "ў"> => mkN138 form1;
<_ + "вол", _ + "ў"> => mkN029 form1;
<_ + "дра", _ + "ў"> => mkN141 form1;
<_ + "гад", _ + "ў"> => mkN081 form1;
<_ + "зва", _ + "ў"> => mkN083 form1;
<_ + "рва", _ + "ў"> => mkN083 form1;
<_ + "вар", _ + "ў"> => mkN062 form1;
<_ + "рук", _ + "ў"> => mkN328 form1;
<_ + "нер", _ + "ы"> => mkN046 form1;
<_ + "ост", _ + "ы"> => mkN054 form1;
<_ + "энт", _ + "ы"> => mkN056 form1;
<_ + "вер", _ + "ў"> => mkN062 form1;
<_ + "раг", _ + "і"> => mkN115 form1;
<_ + "ўца", _ + "ў"> => mkN078 form1;
<_ + "бра", _ + "ы"> => mkN102 form1;
<_ + "ьма", _ + "ў"> => mkN083 form1;
<_ + "ель", _ + "і"> => mkN100 form1;
<_ + "рог", _ + "і"> => mkN105 form1;
<_ + "рог", _ + "ў"> => mkN339 form1;
<_ + "унь", _ + "і"> => mkN121 form1;
<_ + "йка", _ + "к"> => mkN160 form1;
<_ + "ька", _ + "ў"> => mkN129 form1;
<_ + "ька", _ + "і"> => mkN197 form1;
<_ + "яць", _ + "ў"> => mkN132 form1;
<_ + "ось", _ + "ў"> => mkN152 form1;
<_ + "зак", _ + "ў"> => mkN191 form1;
<_ + "ар", _ + "тры"> => mkN373 form1;
<_ + "ок", _ + "ркі"> => mkN015 form1;
<_ + "ок", _ + "ткі"> => mkN015 form1;
<_ + "ок", _ + "акі"> => mkN030 form1;
<_ + "ва", _ + "івы"> => mkN150 form1;
<_ + "ла", _ + "элы"> => mkN182 form1;
<_ + "ла", _ + "ылы"> => mkN188 form1;
<_ + "са", _ + "осы"> => mkN070 form1;
<_ + "ел", _ + "елы"> => mkN031 form1;
<_ + "ль", _ + "злі"> => mkN177 form1;
<_ + "нь", _ + "дні"> => mkN173 form1;
<_ + "нь", _ + "ўні"> => mkN175 form1;
<_ + "нь", _ + "сні"> => mkN179 form1;
<_ + "нь", _ + "пні"> => mkN179 form1;
<_ + "нь", _ + "яні"> => mkN400 form1;
<_ + "ак", _ + "оў"> => mkN006 form1;
<_ + "ык", _ + "оў"> => mkN006 form1;
<_ + "як", _ + "аў"> => mkN063 form1;
<_ + "ар", _ + "оў"> => mkN019 form1;
<_ + "ла", _ + "ол"> => mkN139 form1;
<_ + "ын", _ + "оў"> => mkN038 form1;
<_ + "яр", _ + "аў"> => mkN062 form1;
<_ + "іт", _ + "ты"> => mkN032 form1;
<_ + "ль", _ + "ёў"> => mkN203 form1;
<_ + "ак", _ + "ў"> => mkN276 form1;
<_ + "ык", _ + "і"> => mkN008 form1;
<_ + "ыр", _ + "ы"> => mkN034 form1;
<_ + "ір", _ + "ы"> => mkN042 form1;
<_ + "ар", _ + "ы"> => mkN046 form1;
<_ + "аг", _ + "ў"> => mkN063 form1;
<_ + "эх", _ + "ў"> => mkN063 form1;
<_ + "ма", _ + "м"> => mkN012 form1;
<_ + "на", _ + "н"> => mkN012 form1;
<_ + "ба", _ + "б"> => mkN012 form1;
<_ + "ла", _ + "л"> => mkN012 form1;
<_ + "па", _ + "п"> => mkN012 form1;
<_ + "ап", _ + "ы"> => mkN031 form1;
<_ + "эл", _ + "ў"> => mkN013 form1;
<_ + "ен", _ + "ы"> => mkN045 form1;
<_ + "ей", _ + "ў"> => mkN022 form1;
<_ + "ёл", _ + "ы"> => mkN031 form1;
<_ + "та", _ + "ў"> => mkN078 form1;
<_ + "ін", _ + "ы"> => mkN031 form1;
<_ + "ст", _ + "ы"> => mkN032 form1;
<_ + "шч", _ + "ў"> => mkN346 form1;
<_ + "ца", _ + "ц"> => mkN137 form1;
<_ + "рд", _ + "ў"> => mkN081 form1;
<_ + "ск", _ + "ў"> => mkN063 form1;
<_ + "еч", _ + "ы"> => mkN069 form1;
<_ + "ча", _ + "ў"> => mkN141 form1;
<_ + "бя", _ + "т"> => mkN153 form1;
<_ + "ль", _ + "ў"> => mkN152 form1;
<_ + "нь", _ + "ў"> => mkN152 form1;
<_ + "ха", _ + "і"> => mkN309 form1;
<_ + "зь", _ + "ў"> => mkN132 form1;
<_ + "оя", _ + "і"> => mkN301 form1;
<_ + "ж", _ + "ыжы"> => mkN090 form1;
<_ + "г", _ + "ўгі"> => mkN044 form1;
<_ + "с", _ + "ысы"> => mkN050 form1;
<_ + "д", _ + "оды"> => mkN037 form1;
<_ + "р", _ + "ары"> => mkN059 form1;
<_ + "ь", _ + "кці"> => mkN177 form1;
<_ + "ь", _ + "гці"> => mkN177 form1;
<_ + "ь", _ + "аці"> => mkN325 form1;
<_ + "т", _ + "оў"> => mkN001 form1;
<_ + "к", _ + "оў"> => mkN006 form1;
<_ + "л", _ + "оў"> => mkN159 form1;
<_ + "й", _ + "оі"> => mkN017 form1;
<_ + "й", _ + "іі"> => mkN067 form1;
<_ + "с", _ + "оў"> => mkN195 form1;
<_ + "н", _ + "оў"> => mkN038 form1;
<_ + "о", _ + "вы"> => mkN278 form1;
<_ + "т", _ + "ў"> => mkN131 form1;
<_ + "а", _ + "к"> => mkN003 form1;
<_ + "к", _ + "ў"> => mkN063 form1;
<_ + "м", _ + "ў"> => mkN013 form1;
<_ + "л", _ + "ў"> => mkN013 form1;
<_ + "с", _ + "ў"> => mkN013 form1;
<_ + "з", _ + "ў"> => mkN013 form1;
<_ + "н", _ + "ў"> => mkN013 form1;
<_ + "п", _ + "ў"> => mkN029 form1;
<_ + "р", _ + "ў"> => mkN062 form1;
<_ + "х", _ + "ў"> => mkN063 form1;
<_ + "я", _ + "т"> => mkN153 form1;
<_ + "я", _ + "ў"> => mkN154 form1;
<_ + "я", _ + "ь"> => mkN232 form1;
<_ + "я", _ + "й"> => mkN384 form1;
<_ + "ц", _ + "ы"> => mkN299 form1;
<_ + "ь", _ + "й"> => mkN323 form1;
_ => regN form1
} ;
regV : Str -> V -- infinitive
= \form -> case form of {
_ + "агчы" => mkV021 form;
_ + "іць" => mkV036 form;
_ + "эць" => mkV048 form;
_ + "ыць" => mkV020 form;
_ + "уць" => mkV045 form;
_ + "ячы" => mkV072 form;
_ + "ьці" => mkV013 form;
_ + "зці" => mkV049 form;
_ + "бці" => mkV137 form;
_ + "сці" => mkV016 form;
_ + "цца" => mkV043 form;
_ + "ма" => mkV013 form;
_ + "шы" => mkV013 form;
_ + "ь" => mkV015 form;
_ => error "Cannot find an inflection rule"
} ;
reg2V : Str -> Str -> V -- infinitive Imperative;Sg
= \form1, form2 -> case <form1, form2> of {
<_ + "іць", _ + "ані"> => mkV096 form1;
<_ + "іць", _ + "яні"> => mkV079 form1;
<_ + "іць", _ + "апі"> => mkV017 form1;
<_ + "іць", _ + "сці"> => mkV078 form1;
<_ + "уць", _ + "кні"> => mkV074 form1;
<_ + "уць", _ + "хні"> => mkV074 form1;
<_ + "іць", _ + "ві"> => mkV001 form1;
<_ + "іць", _ + "бі"> => mkV058 form1;
<_ + "іць", _ + "зі"> => mkV058 form1;
<_ + "іць", _ + "аі"> => mkV155 form1;
<_ + "іць", _ + "пі"> => mkV058 form1;
<_ + "іць", _ + "ці"> => mkV033 form1;
<_ + "іць", _ + "сі"> => mkV050 form1;
<_ + "іць", _ + "ць"> => mkV060 form1;
<_ + "іць", _ + "мь"> => mkV106 form1;
<_ + "ыць", _ + "жы"> => mkV064 form1;
<_ + "іць", _ + "і"> => mkV011 form1;
<_ + "іць", _ + "ў"> => mkV139 form1;
<_ + "іць", _ + "й"> => mkV156 form1;
<_ + "эць", _ + "й"> => mkV015 form1;
<_ + "эць", _ + "ь"> => mkV063 form1;
<_ + "ыць", _ + "ы"> => mkV070 form1;
<_ + "ыць", _ + "й"> => mkV055 form1;
<_ + "ыць", _ + "і"> => mkV089 form1;
<_ + "уць", _ + "ь"> => mkV037 form1;
<_ + "уць", _ + "й"> => mkV055 form1;
<_ + "зці", _ + "ь"> => mkV092 form1;
<_ + "ь", _ + "жуй"> => mkV003 form1;
<_ + "ь", _ + "цай"> => mkV055 form1;
<_ + "ь", _ + "лжы"> => mkV125 form1;
<_ + "ь", _ + "аві"> => mkV102 form1;
<_ + "ь", _ + "ссі"> => mkV145 form1;
<_ + "і", _ + "асі"> => mkV137 form1;
<_ + "ы", _ + "яжы"> => mkV143 form1;
<_ + "а", _ + "іся"> => mkV046 form1;
<_ + "а", _ + "ыся"> => mkV046 form1;
<_ + "а", _ + "ься"> => mkV080 form1;
<_ + "а", _ + "рся"> => mkV087 form1;
<_ + "а", _ + "чся"> => mkV087 form1;
<_ + "ь", _ + "уй"> => mkV029 form1;
<_ + "ь", _ + "ой"> => mkV025 form1;
<_ + "ь", _ + "юй"> => mkV120 form1;
<_ + "ь", _ + "нь"> => mkV063 form1;
<_ + "ь", _ + "шы"> => mkV028 form1;
<_ + "ь", _ + "чы"> => mkV130 form1;
<_ + "ь", _ + "мі"> => mkV039 form1;
<_ + "ь", _ + "ві"> => mkV039 form1;
<_ + "ь", _ + "зі"> => mkV115 form1;
<_ + "ь", _ + "ні"> => mkV102 form1;
<_ + "ь", _ + "бі"> => mkV145 form1;
<_ + "і", _ + "сі"> => mkV049 form1;
<_ + "і", _ + "ці"> => mkV056 form1;
<_ + "ь", _ + "ь"> => mkV018 form1;
<_ + "ь", _ + "ы"> => mkV066 form1;
<_ + "ь", _ + "ч"> => mkV034 form1;
<_ + "ь", _ + "і"> => mkV069 form1;
<_ + "і", _ + "ь"> => mkV054 form1;
_ => regV form1
} ;
regA : Str -> A -- s;Nom;('GSg', Masc)
= \form -> case form of {
_ + "які" => mkA006 form;
_ + "пы" => mkA002 form;
_ + "гі" => mkA006 form;
_ + "хі" => mkA006 form;
_ + "ні" => mkA005 form;
_ + "ці" => mkA005 form;
_ + "ыі" => mkA005 form;
_ + "ы" => mkA001 form;
_ + "і" => mkA003 form;
_ + "а" => mkA004 form;
_ + "н" => mkA004 form;
_ + "т" => mkA004 form;
_ + "ў" => mkA004 form;
_ + "ь" => mkA004 form;
_ => error "Cannot find an inflection rule"
} ;
reg2A : Str -> Str -> A -- s;Nom;('GSg', Masc) s;Nom;('GSg', Neuter)
= \form1, form2 -> case <form1, form2> of {
<_ + "гі", _ + "ае"> => mkA003 form1;
<_ + "хі", _ + "ае"> => mkA003 form1;
<_ + "ы", _ + "ое"> => mkA002 form1;
<_ + "і", _ + "яе"> => mkA004 form1;
<_ + "і", _ + "ое"> => mkA006 form1;
_ => regA form1
} ;
mkN = overload {
mkN : Str -> N = regN; -- s;Nom;Sg
mkN : Str -> Str -> N = reg2N -- s;Nom;Sg s;Acc;Pl
} ;
mkN2 = overload {
mkN2 : N -> N2 = \n -> n ** {c2 = noPrep} ;
mkN2 : N -> Prep -> N2 = \n,p -> n ** {c2 = p} ;
} ;
mkN3 = overload {
mkN3 : N -> N3 = \n -> n ** {c2 = noPrep; c3 = noPrep} ;
mkN3 : N -> Prep -> Prep -> N3 = \n,p1,p2 -> n ** {c2 = p1; c3 = p2} ;
} ;
mkV = overload {
mkV : Str -> V = regV; -- infinitive
mkV : Str -> Str -> V = reg2V -- infinitive Imperative;Sg
} ;
mkVV,mkVS,mkVQ,mkVA = \v -> v ;
mkV2 = overload {
mkV2 : V -> V2 = \v -> v ** {c2 = noPrep} ;
mkV2 : V -> Prep -> V2 = \v,p -> v ** {c2 = p} ;
} ;
mkV3 = overload {
mkV3 : V -> V3 = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV3 : V -> Prep -> Prep -> V3 = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
} ;
mkV2A = overload {
mkV2A : V -> V2A = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV2A : V -> Prep -> Prep -> V2A = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
} ;
mkV2S = overload {
mkV2S : V -> V2S = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV2S : V -> Prep -> Prep -> V2S = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
} ;
mkV2Q = overload {
mkV2Q : V -> V2Q = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV2Q : V -> Prep -> Prep -> V2Q = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
} ;
mkV2V = overload {
mkV2V : V -> V2V = \v -> v ** {c2 = noPrep; c3 = noPrep} ;
mkV2V : V -> Prep -> Prep -> V2V = \v,p1,p2 -> v ** {c2 = p1; c3 = p2} ;
} ;
mkA = overload {
mkA : Str -> A = regA; -- s;Nom;('GSg', Masc)
mkA : Str -> Str -> A = reg2A -- s;Nom;('GSg', Masc) s;Nom;('GSg', Neuter)
} ;
mkA2 = overload {
mkA2 : A -> A2 = \a -> a ** {c2 = noPrep} ;
mkA2 : A -> Prep -> A2 = \a,p -> a ** {c2 = p} ;
} ;
mkAdv : Str -> Adv = \s -> lin Adv {s=s} ;
mkAdV : Str -> AdV = \s -> lin AdV {s=s} ;
mkAdA : Str -> AdA = \s -> lin AdA {s=s} ;
mkAdN : Str -> AdN = \s -> lin AdN {s=s} ;
mkCAdv : Str -> CAdv = \s -> lin CAdv {s=s; p=""} ;
mkInterj : Str -> Interj = \s -> lin Interj {s=s} ;
mkMU : Str -> MU = \s -> lin MU {s=s; isPre=False} ;
mkPrep : Str -> Prep = \s -> lin Prep {s=s; c=Acc} ;
mkIAdv : Str -> IAdv = \s -> lin IAdv {s=s} ;
mkIP : Str -> IP = \s -> lin IP {s=s} ;
mkIQuant : Str -> IQuant = \s -> lin IQuant {s=s} ;
mkIDet : Str -> IDet = \s -> lin IDet {s=s} ;
mkSubj : Str -> Subj = \s -> lin Subj {s=s} ;
mkQuant : Str -> Quant = \s -> lin Quant {s=s} ;
mkPredet : Str -> Predet = \s -> lin Predet {s=s} ;
mkDet : Str -> Det = \s -> lin Det {s=s} ;
mkCard : Str -> Card = \s -> lin Card {s=s} ;
mkConj : Str -> Conj = \s -> lin Conj {s=s} ;
mkPConj : Str -> PConj = \s -> lin PConj {s=s} ;
mkVoc : Str -> Voc = \s -> lin Voc {s=s} ;
mkLN : Str -> LN = \s -> lin LN {s=s} ;
mkGN : Str -> GN = \s -> lin GN {s=s} ;
mkSN : Str -> SN = \s -> lin SN {s=s} ;
mkPN : Str -> PN = \s -> lin PN {s=s} ;
}

View File

@@ -0,0 +1,11 @@
concrete PhraseBel of Phrase = CatBel ** {
lin
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
UttS s = s ;
UttInterj i = i ;
NoPConj = {s = []} ;
NoVoc = {s = []} ;
}

163
src/belarusian/ResBel.gf Normal file
View File

@@ -0,0 +1,163 @@
resource ResBel = {
param Case = Nom | Acc | Dat | Gen | Loc | Instr ;
param Number = Sg | Pl ;
param Gender = Masc | Fem | Neuter ;
oper Noun = {s: Case => Number => Str; voc: Str; g: Gender} ; -- 2696
oper mkNoun : (_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Gender -> Noun =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,g ->
{ s = table {
Nom => table {
Sg => f1 ;
Pl => f2
} ;
Acc => table {
Sg => f3 ;
Pl => f4
} ;
Dat => table {
Sg => f5 ;
Pl => f6
} ;
Gen => table {
Sg => f7 ;
Pl => f8
} ;
Loc => table {
Sg => f9 ;
Pl => f10
} ;
Instr => table {
Sg => f11 ;
Pl => f12
}
} ;
voc = f13 ;
g = g
} ;
param Aspect = Imperf | Perf ;
param Person = P1 | P2 | P3 ;
param Tense = Pres | Past ;
oper V = {active: Aspect => {Past: Str; Pres: Person => Number => Str}; imperative: Number => Str; infinitive: Str; participle: Gender => Number => Str; passive: Aspect => Tense => Str} ; -- 703
oper mkV : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> V =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24,f25,f26,f27 ->
{ active = table {
Imperf => { Past = f1 ;
Pres = table {
P1 => table {
Sg => f2 ;
Pl => f3
} ;
P2 => table {
Sg => f4 ;
Pl => f5
} ;
P3 => table {
Sg => f6 ;
Pl => f7
}
}
} ;
Perf => { Past = f8 ;
Pres = table {
P1 => table {
Sg => f9 ;
Pl => f10
} ;
P2 => table {
Sg => f11 ;
Pl => f12
} ;
P3 => table {
Sg => f13 ;
Pl => f14
}
}
}
} ;
imperative = table {
Sg => f15 ;
Pl => f16
} ;
infinitive = f17 ;
participle = table {
Masc => table {
Sg => f18 ;
Pl => f19
} ;
Fem => table {
Sg => f20 ;
Pl => f21
} ;
Neuter => table {
Sg => f22 ;
Pl => f23
}
} ;
passive = table {
Imperf => table {
Pres => f24 ;
Past => f25
} ;
Perf => table {
Pres => f26 ;
Past => f27
}
}
} ;
param GenNum = GSg Gender | GPl ;
oper A = {s: Case => GenNum => Str} ; -- 704
oper mkA : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> A =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24 ->
{ s = table {
Nom => table {
GSg Masc => f1 ;
GSg Fem => f2 ;
GSg Neuter => f3 ;
GPl => f4
} ;
Acc => table {
GSg Masc => f5 ;
GSg Fem => f6 ;
GSg Neuter => f7 ;
GPl => f8
} ;
Dat => table {
GSg Masc => f9 ;
GSg Fem => f10 ;
GSg Neuter => f11 ;
GPl => f12
} ;
Gen => table {
GSg Masc => f13 ;
GSg Fem => f14 ;
GSg Neuter => f15 ;
GPl => f16
} ;
Loc => table {
GSg Masc => f17 ;
GSg Fem => f18 ;
GSg Neuter => f19 ;
GPl => f20
} ;
Instr => table {
GSg Masc => f21 ;
GSg Fem => f22 ;
GSg Neuter => f23 ;
GPl => f24
}
}
} ;
oper Compl = {s : Str; c : Case} ;
oper noPrep : Compl = {s=""; c=Acc} ;
oper CommonNoun = Noun ;
oper AdjPhrase = A ;
}

View File

@@ -41,7 +41,7 @@ concrete CatGer of Cat =
VP = ResGer.VP ;
VPSlash = ResGer.VPSlash ;
Comp = {s : Agr => Str ; ext : Str} ;
Comp = {s : Agr => Str ; ext : Number => Str} ;
-- Adjective (HL 7/23: we need c : Agr => Str * Str to handle reflexive objects, cf ReflA2)

View File

@@ -103,27 +103,27 @@ concrete VerbGer of Verb = CatGer ** open Prelude, ResGer, Coordination in {
insertObj' obj b w c vps ;
UseComp comp =
insertExtrapos comp.ext (insertObj comp.s (predV sein_V)) ; -- agr not used
insertExtrapos (comp.ext ! Sg) (insertObj comp.s (predV sein_V)) ; -- agr not used ---- TODO: comp.ext depends on number if CompCN
-- SS: adj slot not used here for e.g. "ich bin alt" but same behaviour as NPs?
-- "ich bin nicht alt" "ich bin nicht Doris"
UseCopula = predV sein_V ;
CompAP ap = {s = \\_ => ap.c.p1 ++ ap.s ! APred ++ ap.c.p2 ; ext = ap.s2 ! Nom ++ ap.ext} ;
CompNP np = {s = \\_ => np.s ! False ! Nom ++ np.rc ; ext = np.ext} ;
CompAdv a = {s = \\_ => a.s ; ext = []} ;
CompAP ap = {s = \\_ => ap.c.p1 ++ ap.s ! APred ++ ap.c.p2 ; ext = \\_ => ap.s2 ! Nom ++ ap.ext} ;
CompNP np = {s = \\_ => np.s ! False ! Nom ; ext = \\_ => np.rc ++ np.ext} ;
CompAdv a = {s = \\_ => a.s ; ext = \\_ => []} ;
CompCN cn = {
s = let
sg : Str = "ein" + pronEnding ! GSg cn.g ! Nom ++ cn.s ! Strong ! Sg ! Nom ++ cn.rc ! Sg ; ---
pl : Str = cn.s ! Strong ! Pl ! Nom ++ cn.rc ! Pl
sg : Str = "ein" + pronEnding ! GSg cn.g ! Nom ++ cn.s ! Strong ! Sg ! Nom ++ cn.adv ; ---
pl : Str = cn.s ! Strong ! Pl ! Nom ++ cn.adv
in table {
AgPlPol => sg ;
a => case numberAgr a of {
Sg => sg ;
Pl => pl }
} ;
ext = cn.adv ++ cn.ext
ext = \\n => cn.rc ! n ++ cn.ext
} ;
AdvVP vp adv = insertAdv adv.s vp ;

View File

@@ -0,0 +1,4 @@
concrete AdjectiveUkr of Adjective = CatUkr ** {
lin
PositA a = a ;
}

4
src/ukrainian/AllUkr.gf Normal file
View File

@@ -0,0 +1,4 @@
concrete AllUkr of AllUkrAbs =
LangUkr
**
{} ;

View File

@@ -0,0 +1,3 @@
abstract AllUkrAbs =
Lang
** {}

21
src/ukrainian/CatUkr.gf Normal file
View File

@@ -0,0 +1,21 @@
concrete CatUkr of Cat = CommonX ** open ResUkr in {
lincat N = N ;
lincat N2 = N ** {c2 : Compl} ;
lincat N3 = N ** {c2,c3 : Compl} ;
lincat V = V ;
lincat VV,VS,VQ,VA = V ;
lincat V2 = V ** {c2 : Compl} ;
lincat V3,V2A,V2S,V2Q,V2V = V ** {c2,c3 : Compl} ;
lincat A = A ;
lincat A2 = A ** {c2 : Compl} ;
lincat Prep = Compl ;
lincat CN = CommonNoun ;
lincat AP = AdjPhrase ;
lincat S = {s : Str} ;
lincat LN,SN,GN,PN = {s : Str} ;
linref V,VV,V2,V3,V2A,V2S,V2Q,V2V = \v -> v.infinitive ;
}

View File

@@ -0,0 +1,79 @@
concrete DocumentationUkr of Documentation = CatUkr ** open
ResUkr, Prelude, HTML in {
lincat
Inflection = {t : Str; s1,s2,s3 : Str} ;
Definition = {s : Str} ;
Document = {s : Str} ;
Tag = {s : Str} ;
lin
InflectionN,InflectionN2,InflectionN3 = \x -> {
t="n" ;
s1="" ;
s2=frameTable (
tr (th "" ++ th "Sg" ++ th "Pl") ++
tr (th "Nom" ++ td (x.s ! Nom ! Sg) ++ td (x.s ! Nom ! Pl)) ++
tr (th "Acc" ++ td (x.s ! Acc ! Sg) ++ td (x.s ! Acc ! Pl)) ++
tr (th "Dat" ++ td (x.s ! Dat ! Sg) ++ td (x.s ! Dat ! Pl)) ++
tr (th "Gen" ++ td (x.s ! Gen ! Sg) ++ td (x.s ! Gen ! Pl)) ++
tr (th "Loc" ++ td (x.s ! Loc ! Sg) ++ td (x.s ! Loc ! Pl)) ++
tr (th "Instr" ++ td (x.s ! Instr ! Sg) ++ td (x.s ! Instr ! Pl)) ++
tr (th "Voc" ++ td (x.Voc ! Sg) ++ td (x.Voc ! Pl))) ;
s3=[]
} ;
lin
InflectionV,InflectionV2,InflectionV2A,InflectionV2Q,InflectionV2S,InflectionV2V,InflectionV3,InflectionVA,InflectionVQ,InflectionVS,InflectionVV = \x -> {
t="v" ;
s1="" ;
s2=heading1 "Infinitive" ++
paragraph (x.infinitive) ++
heading1 "Present" ++
frameTable (
tr (intagAttr "th" "rowspan=\"6\"" "Pres" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td ((x.active ! Imperf).Pres ! P1 ! Sg)) ++
tr (th "Pl" ++ td ((x.active ! Imperf).Pres ! P1 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2" ++ th "Sg" ++ td ((x.active ! Imperf).Pres ! P2 ! Sg)) ++
tr (th "Pl" ++ td ((x.active ! Imperf).Pres ! P2 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td ((x.active ! Imperf).Pres ! P3 ! Sg)) ++
tr (th "Pl" ++ td ((x.active ! Imperf).Pres ! P3 ! Pl))) ++
heading1 "Imperative" ++
paragraph (x.imperative1) ++
frameTable (
tr (th "Sg" ++ td (x.imperative2 ! Sg)) ++
tr (th "Pl" ++ td (x.imperative2 ! Pl))) ++
heading1 "participle" ++
frameTable (
tr (th "" ++ th "Sg" ++ th "Pl") ++
tr (th "Masc" ++ td (x.participle ! Masc ! Sg) ++ td (x.participle ! Masc ! Pl)) ++
tr (th "Fem" ++ td (x.participle ! Fem ! Sg) ++ td (x.participle ! Fem ! Pl)) ++
tr (th "Neuter" ++ td (x.participle ! Neuter ! Sg) ++ td (x.participle ! Neuter ! Pl))) ;
s3=[]
} ;
lin
InflectionA,InflectionA2 = \x -> {
t="a" ;
s1="" ;
s2=frameTable (
tr (th "" ++ th "Masc" ++ th "Fem" ++ th "Neuter" ++ th "Pl") ++
tr (th "Nom" ++ td (x.s ! Nom ! GSg Masc) ++ td (x.s ! Nom ! GSg Fem) ++ td (x.s ! Nom ! GSg Neuter) ++ td (x.s ! Nom ! GPl)) ++
tr (th "Acc" ++ td (x.s ! Acc ! GSg Masc) ++ td (x.s ! Acc ! GSg Fem) ++ td (x.s ! Acc ! GSg Neuter) ++ td (x.s ! Acc ! GPl)) ++
tr (th "Dat" ++ td (x.s ! Dat ! GSg Masc) ++ td (x.s ! Dat ! GSg Fem) ++ td (x.s ! Dat ! GSg Neuter) ++ td (x.s ! Dat ! GPl)) ++
tr (th "Gen" ++ td (x.s ! Gen ! GSg Masc) ++ td (x.s ! Gen ! GSg Fem) ++ td (x.s ! Gen ! GSg Neuter) ++ td (x.s ! Gen ! GPl)) ++
tr (th "Loc" ++ td (x.s ! Loc ! GSg Masc) ++ td (x.s ! Loc ! GSg Fem) ++ td (x.s ! Loc ! GSg Neuter) ++ td (x.s ! Loc ! GPl)) ++
tr (th "Instr"++td (x.s ! Instr ! GSg Masc)++td (x.s ! Instr ! GSg Fem)++td (x.s ! Instr ! GSg Neuter)++td (x.s ! Instr ! GPl))) ;
s3=[]
} ;
lin
InflectionAdA,InflectionAdN,InflectionAdV,InflectionAdv = \x -> {t="adv"; s1=""; s2=x.s; s3=""} ;
InflectionPrep = \x -> {t="prep"; s1=""; s2=x.s; s3=""} ;
lin
NoDefinition t = {s=t.s};
MkDefinition t d = {s="<p><b>Definition:</b>"++t.s++d.s++"</p>"};
MkDefinitionEx t d e = {s="<p><b>Definition:</b>"++t.s++d.s++"</p><p><b>Example:</b>"++e.s++"</p>"};
lin
MkDocument d i e = {s = i.s1 ++ d.s ++ i.s2 ++ i.s3 ++ e.s} ;
MkTag i = {s = i.t} ;
}

View File

@@ -0,0 +1,6 @@
concrete GrammarUkr of Grammar =
TenseX,
PhraseUkr,
NounUkr,
AdjectiveUkr ** {
}

10
src/ukrainian/LangUkr.gf Normal file
View File

@@ -0,0 +1,10 @@
--# -path=.:../abstract
concrete LangUkr of Lang =
GrammarUkr,
LexiconUkr
,DocumentationUkr --# notpresent
** {
flags startcat = Phr ;
}

View File

@@ -0,0 +1,2 @@
concrete LexiconUkr of Lexicon = CatUkr ** open ParadigmsUkr in {
}

33464
src/ukrainian/MorphoUkr.gf Normal file

File diff suppressed because it is too large Load Diff

4
src/ukrainian/NounUkr.gf Normal file
View File

@@ -0,0 +1,4 @@
concrete NounUkr of Noun = CatUkr ** {
lin
UseN n = n ;
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,11 @@
concrete PhraseUkr of Phrase = CatUkr ** {
lin
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
UttS s = s ;
UttInterj i = i ;
NoPConj = {s = []} ;
NoVoc = {s = []} ;
}

166
src/ukrainian/ResUkr.gf Normal file
View File

@@ -0,0 +1,166 @@
resource ResUkr = {
param Case = Nom | Acc | Dat | Gen | Loc | Instr ;
param Number = Sg | Pl ;
param Gender = Masc | Neuter | Fem ;
oper N = {s: Case => Number => Str; Voc: Number => Str; g: Gender} ; -- 11407
oper mkN : (_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Gender -> N =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,g ->
{ s = table {
Nom => table {
Sg => f1 ;
Pl => f2
} ;
Acc => table {
Sg => f3 ;
Pl => f4
} ;
Dat => table {
Sg => f5 ;
Pl => f6
} ;
Gen => table {
Sg => f7 ;
Pl => f8
} ;
Loc => table {
Sg => f9 ;
Pl => f10
} ;
Instr => table {
Sg => f11 ;
Pl => f12
}
} ;
Voc = table {
Sg => f13 ;
Pl => f14
} ;
g = g
} ;
param Aspect = Perf | Imperf ;
param Person = P1 | P2 | P3 ;
param Tense = Past | Pres ;
oper V = {active: Aspect => {Past: Str; Pres: Person => Number => Str}; imperative1: Str; imperative2: Number => Str; infinitive: Str; participle: Gender => Number => Str; passive: Aspect => Tense => Str} ; -- 4822
oper mkV : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> V =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24,f25,f26,f27,f28 ->
{ active = table {
Imperf => { Past = f1 ;
Pres = table {
P1 => table {
Sg => f2 ;
Pl => f3
} ;
P2 => table {
Sg => f4 ;
Pl => f5
} ;
P3 => table {
Sg => f6 ;
Pl => f7
}
}
} ;
Perf => { Past = f8 ;
Pres = table {
P1 => table {
Sg => f9 ;
Pl => f10
} ;
P2 => table {
Sg => f11 ;
Pl => f12
} ;
P3 => table {
Sg => f13 ;
Pl => f14
}
}
}
} ;
imperative1 = f15 ;
imperative2 = table {
Sg => f16 ;
Pl => f17
} ;
infinitive = f18 ;
participle = table {
Masc => table {
Sg => f19 ;
Pl => f20
} ;
Fem => table {
Sg => f21 ;
Pl => f22
} ;
Neuter => table {
Sg => f23 ;
Pl => f24
}
} ;
passive = table {
Imperf => table {
Pres => f25 ;
Past => f26
} ;
Perf => table {
Pres => f27 ;
Past => f28
}
}
} ;
param GenNum = GSg Gender | GPl ;
oper A = {s: Case => GenNum => Str} ; -- 4394
oper mkA : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> A =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24 ->
{ s = table {
Nom => table {
GSg Masc => f1 ;
GSg Fem => f2 ;
GSg Neuter => f3 ;
GPl => f4
} ;
Acc => table {
GSg Masc => f5 ;
GSg Fem => f6 ;
GSg Neuter => f7 ;
GPl => f8
} ;
Dat => table {
GSg Masc => f9 ;
GSg Fem => f10 ;
GSg Neuter => f11 ;
GPl => f12
} ;
Gen => table {
GSg Masc => f13 ;
GSg Fem => f14 ;
GSg Neuter => f15 ;
GPl => f16
} ;
Loc => table {
GSg Masc => f17 ;
GSg Fem => f18 ;
GSg Neuter => f19 ;
GPl => f20
} ;
Instr => table {
GSg Masc => f21 ;
GSg Fem => f22 ;
GSg Neuter => f23 ;
GPl => f24
}
}
} ;
oper Compl = {s : Str; c : Case} ;
oper noPrep : Compl = {s=""; c=Acc} ;
oper CommonNoun = N ;
oper AdjPhrase = A ;
}