Compare commits

..
11 Commits
Author SHA1 Message Date
msyds 0e5b224f5c oops 2026-04-05 18:26:40 -06:00
msyds 7a1d1412fb toki preps 2026-04-05 12:33:43 -06:00
msyds 19e35edf09 oops NumPl 2026-04-05 11:52:21 -06:00
msyds 43979ed054 fix detcn 2026-04-05 11:48:07 -06:00
msyds 786340192f toki transitives 2026-04-05 10:15:24 -06:00
msyds ecdc0a85f6 toki preverb 2026-04-05 09:33:58 -06:00
msyds 0bd3506e1b toki adjs 2026-04-05 09:18:03 -06:00
msyds fc2b2a0954 Pron 2026-04-05 08:34:35 -06:00
msyds eccbdcfb97 li in PredVP 2026-04-05 08:29:48 -06:00
msyds d2568cf869 toki params 2026-04-04 20:05:26 -06:00
msyds bcb16ae376 init toki pona 2026-04-04 20:05:26 -06:00
348 changed files with 10482 additions and 154031 deletions
+1
View File
@@ -0,0 +1 @@
use flake
+12
View File
@@ -5,3 +5,15 @@ dist/
*.pgf *.pgf
*.tmp *.tmp
*~ *~
.direnv
_grphp_*.dot
_grphp_*.png
_grpht_*.dot
_grpht_*.png
_gftmp
t.dot
t.dot.png
u.dot.png
t.dot.*.png
u.dot.*.png
u.dot
Generated
+62
View File
@@ -0,0 +1,62 @@
{
"nodes": {
"nixpkgs": {
"locked": {
"lastModified": 1775036866,
"narHash": "sha256-ZojAnPuCdy657PbTq5V0Y+AHKhZAIwSIT2cb8UgAz/U=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "6201e203d09599479a3b3450ed24fa81537ebc4e",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1750386251,
"narHash": "sha256-1ovgdmuDYVo5OUC5NzdF+V4zx2uT8RtsgZahxidBTyw=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "076e8c6678d8c54204abcb4b1b14c366835a58bb",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"nixpkgs": "nixpkgs",
"sydpkgs": "sydpkgs"
}
},
"sydpkgs": {
"inputs": {
"nixpkgs": "nixpkgs_2"
},
"locked": {
"lastModified": 1771299872,
"narHash": "sha256-+OPW1SKKHT7aqhyjs2O20gd1MXa7LyD+9/lwMUCVL7Y=",
"ref": "refs/heads/main",
"rev": "53bf019e26478666ab7f458f78e569b8b106cc1f",
"revCount": 36,
"type": "git",
"url": "https://git.deertopia.net/msyds/sydpkgs"
},
"original": {
"type": "git",
"url": "https://git.deertopia.net/msyds/sydpkgs"
}
}
},
"root": "root",
"version": 7
}
+55
View File
@@ -0,0 +1,55 @@
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
# gf.url = "github:anka-213/cclaw-nix-stuff/nix-flakes";
sydpkgs.url = "git+https://git.deertopia.net/msyds/sydpkgs";
};
outputs = { self, nixpkgs, sydpkgs, ... }@inputs:
let
supportedSystems = [
"aarch64-darwin"
"aarch64-linux"
"x86_64-darwin"
"x86_64-linux"
];
each-system = f: nixpkgs.lib.genAttrs supportedSystems (system: f rec {
pkgs = import nixpkgs {
inherit system;
overlays = [
# (final: prev: { inherit (gf.packages.${system}) gf-core; })
sydpkgs.overlays.default
];
};
inherit (pkgs) lib;
inherit system;
});
in {
# Exposed as a REPL convenience.
_pkgs = each-system ({ pkgs, ... }: pkgs);
packages = each-system ({ pkgs, ... }: {
default = pkgs.callPackage ./package.nix {};
});
devShells = each-system ({ pkgs, system, ... }:
let
gf-lsp = import
(pkgs.fetchzip {
url = "https://github.com/anka-213/gf-lsp/archive/refs/tags/1.0.6.0.tar.gz";
hash = "sha256-UAI2qUslzLOWYjTirZJ0y4DZbkPZnVXTY0XtFO8+Rks=";
}) {inherit system;};
in {
default = pkgs.mkShell {
inputsFrom = [ self.packages.${system}.default ];
packages = [
gf-lsp.gf-lsp
pkgs.gftest
pkgs.graphviz
pkgs.imagemagick
];
};
});
};
}
+2 -2
View File
@@ -7,7 +7,7 @@ Bul,Bulgarian,bulgarian,,,y,,,,,y,n
Cat,Catalan,catalan,Romance,,y,,,,y,y,n Cat,Catalan,catalan,Romance,,y,,,,y,y,n
Cgg,Rukiga,rukiga,,,y,y,n,n,y,y,n Cgg,Rukiga,rukiga,,,y,y,n,n,y,y,n
Chi,Chinese (simplified),chinese,,,,,,,,y,y Chi,Chinese (simplified),chinese,,,,,,,,y,y
Cze,Czech,czech,,,,,,y,,y,n Cze,Czech,czech,,,,,,n,,y,n
Dan,Danish,danish,Scand,,y,,,,,y,n Dan,Danish,danish,Scand,,y,,,,,y,n
Dut,Dutch,dutch,,,y,,,,,y,n Dut,Dutch,dutch,,,y,,,,,y,n
Eng,English,english,,,y,,,,y,y,y Eng,English,english,,,y,,,,y,y,y
@@ -55,7 +55,7 @@ Sco,Scots,scots,,,y,,,,,y,n
Swa,Swahili,swahili,Bantu,,,y,n,n,n,n,n Swa,Swahili,swahili,Bantu,,,y,n,n,n,n,n
Swe,Swedish,swedish,Scand,,y,,,,y,y,y Swe,Swedish,swedish,Scand,,y,,,,y,y,y
Tam,Tamil,tamil,n,n,n,n,n,n,n,n,n Tam,Tamil,tamil,n,n,n,n,n,n,n,n,n
Tel,Telugu,telugu,,,y,y,n,n,,n,n Tel,Telugu,telugu,,,y,n,n,n,,n,n
Tha,Thai,thai,,to_thai,,,,,,y,n Tha,Thai,thai,,to_thai,,,,,,y,n
Tur,Turkish,turkish,,,y,,,n,,n,n Tur,Turkish,turkish,,,y,,,n,,n,n
Ukr,Ukrainian,ukrainian,,,,y,n,n,n,y,n Ukr,Ukrainian,ukrainian,,,,y,n,n,n,y,n
1 Code Name Directory Functor Unlexer Present All Try Symbolic Compatibility Synopsis MorphoDict
7 Cat Catalan catalan Romance y y y n
8 Cgg Rukiga rukiga y y n n y y n
9 Chi Chinese (simplified) chinese y y
10 Cze Czech czech y n y n
11 Dan Danish danish Scand y y n
12 Dut Dutch dutch y y n
13 Eng English english y y y y
55 Swa Swahili swahili Bantu y n n n n n
56 Swe Swedish swedish Scand y y y y
57 Tam Tamil tamil n n n n n n n n n
58 Tel Telugu telugu y y n n n n n
59 Tha Thai thai to_thai y n
60 Tur Turkish turkish y n n n
61 Ukr Ukrainian ukrainian y n n n y n
+23
View File
@@ -0,0 +1,23 @@
{ stdenv
, ghc
, gf-core
}:
stdenv.mkDerivation {
name = "gf-rgl";
src = ./.;
buildInputs = [ ghc gf-core ];
# Keep references to source, so go to definition works
# postUnpack = ''
# rm -r source/src
# ln -s $src/src source/src
# '';
LC_ALL = "C.UTF-8";
buildPhase = ''
runghc Setup.hs build
'';
installPhase = ''
mkdir -p $out/share/gf/lib
runghc Setup.hs copy --dest=$out/share/gf/lib
'';
}
+6
View File
@@ -52,6 +52,12 @@ apiModules = ["Try","Symbolic","Syntax","Constructors","Combinators"]
clone :: [String] -> String -> String -> String -> String -> (String, String) -> IO () clone :: [String] -> String -> String -> String -> String -> (String, String) -> IO ()
clone options fromdir todir from to (absname,absfx) = do clone options fromdir todir from to (absname,absfx) = do
printf "clone options=%s\n\
\ fromdir=%s\n\
\ todir=%s\n\
\ from=%s\n\
\ to=%s\n" (show options) (show fromdir)
(show todir) (show from) (show to)
s <- readFile (fromdir ++ "/" ++ absname ++ from ++ absfx ++ ".gf") s <- readFile (fromdir ++ "/" ++ absname ++ from ++ absfx ++ ".gf")
writeAndReportFile (todir ++ "/" ++ absname ++ to ++ absfx ++ ".gf") (commentIf options (replaceLang from to s)) writeAndReportFile (todir ++ "/" ++ absname ++ to ++ absfx ++ ".gf") (commentIf options (replaceLang from to s))
-1
View File
@@ -35,7 +35,6 @@ fun
InflectionAdA : AdA -> Inflection ; InflectionAdA : AdA -> Inflection ;
InflectionAdN : AdN -> Inflection ; InflectionAdN : AdN -> Inflection ;
InflectionPrep : Prep -> Inflection ; InflectionPrep : Prep -> Inflection ;
InflectionCl : Cl -> Inflection ;
fun fun
NoDefinition : String -> Definition ; NoDefinition : String -> Definition ;
+24 -60
View File
@@ -1,61 +1,25 @@
concrete CatSqi of Cat = CommonX ** open ParamX,Prelude,ResSqi in { concrete CatSqi of Cat = CommonX ** open ParamX, Prelude, ResSqi in {
lincat A = Adj ;
lincat A2 = Adj ** {c2 : Compl} ; lincat N = Noun ;
lincat V, VA, VV, VS, VQ = Verb ; lincat N2 = Noun ** {c2 : Compl} ;
lincat V2, V2S, V2Q = Verb ** {c2 : Compl} ; lincat N3 = Noun ** {c2,c3 : Compl} ;
lincat V3, V2A, V2V = Verb ** {c2,c3 : Compl} ; lincat A = Adj ;
lincat Prep = Compl ; lincat A2 = Adj ** {c2 : Compl} ;
lincat ACard = {s : Str} ; lincat V, VA, VV, VS, VQ = Verb ;
lincat AP = {s : Species => Case => Gender => Number => Str} ; lincat V2, V2S, V2Q = Verb ** {c2 : Compl} ;
lincat CN = Noun ; lincat V3, V2A, V2V = Verb ** {c2,c3 : Compl} ;
lincat Card = {s : Str} ; lincat Prep = Compl ;
lincat Cl = {s : Str} ;
lincat ClSlash = {s : Str} ; lincat Numeral = {s : Str} ;
lincat Comp = {s : Str} ; lincat Digits = {s : Str; n : Number; tail : DTail} ;
lincat Conj = {s : Str} ; lincat Decimal = {s : Str; n : Number; hasDot : Bool} ;
lincat DAP = {s : Str} ;
lincat Decimal = {s : Str; n : Number; hasDot : Bool} ; lincat AP = {s: Species => Case => Gender => Number => Str} ;
lincat Det = {s : Case => Gender => Str; sp : Species; n : Number} ; lincat CN = Noun ;
lincat Digits = {s : Str; n : Number; tail : DTail} ; lincat Num = {s : Str; n : Number} ;
lincat GN = {s : Str} ; lincat Quant = {s : Case => Gender => Number => Str; spec : Species} ;
lincat IComp = {s : Str} ; lincat Det = {s : Case => Gender => Str; spec : Species; n : Number} ;
lincat IDet = {s : Str} ; lincat NP = {s: Case => Str; a : Agr} ;
lincat IP = {s : Str} ; lincat Pron = {s: Case => Str; acc_clit, dat_clit : Str; a : Agr} ;
lincat IQuant = {s : Str} ;
lincat Imp = {s : Str} ;
lincat LN = {s : Str} ;
lincat N = Noun ;
lincat N2 = {s : Species => Case => Number => Str; g : Gender;
c2 : {s : Str}} ;
lincat N3 = {s : Species => Case => Number => Str; g : Gender;
c2 : {s : Str}; c3 : {s : Str}} ;
lincat NP = {s : Case => Str; a : Agr} ;
lincat Num = {s : Str; n : Number} ;
lincat Numeral = {s : Str} ;
lincat Ord = {s : Str} ;
lincat PN = {s : Str} ;
lincat Predet = {s : Str} ;
lincat Pron = {s: Case => Str; acc_clit, dat_clit : Str; a : Agr} ;
lincat QCl = {s : Str} ;
lincat QS = {s : Str} ;
lincat Quant = {s : Case => Gender => Number => Str; sp : Species} ;
lincat RCl = {s : Str} ;
lincat RP = {s : Str} ;
lincat RS = {s : Str} ;
lincat S = {s : Str} ;
lincat SN = {s : Str} ;
lincat SSlash = {s : Str} ;
lincat Subj = {s : Str} ;
lincat VP = {indicative : Tense => Number => Person => Case => Str;
participle : Case => Str;
pres_optative : Number => Person => Case => Str;
perf_optative : Number => Person => Case => Str;
pres_admirative : Number => Person => Case => Str;
imperf_admirative : Number => Person => Case => Str} ;
lincat VPSlash = {indicative : Tense => Number => Person => Str;
imperative : Number => Str; participle : Str;
pres_optative : Number => Person => Str;
perf_optative : Number => Person => Str;
pres_admirative : Number => Person => Str;
imperf_admirative : Number => Person => Str} ;
} }
+26 -26
View File
@@ -51,32 +51,32 @@ lin InflectionV = \x -> {
t="fl" ; t="fl" ;
s1=heading1 "Folje" ; s1=heading1 "Folje" ;
s2=frameTable ( s2=frameTable (
tr (intagAttr "th" "rowspan=\"24\"" "Indicative" ++ intagAttr "th" "rowspan=\"6\"" "Pres" ++ intagAttr "th" "rowspan=\"3\"" "Sg" ++ th "P1" ++ td (x.indicative ! Pres ! Sg ! P1)) ++ tr (intagAttr "th" "rowspan=\"24\"" "Indicative" ++ intagAttr "th" "rowspan=\"6\"" "Pres" ++ intagAttr "th" "rowspan=\"3\"" "Sg" ++ th "P1" ++ td (x.Indicative ! Pres ! Sg ! P1)) ++
tr (th "P2" ++ td (x.indicative ! Pres ! Sg ! P2)) ++ tr (th "P2" ++ td (x.Indicative ! Pres ! Sg ! P2)) ++
tr (th "P3" ++ td (x.indicative ! Pres ! Sg ! P3)) ++ tr (th "P3" ++ td (x.Indicative ! Pres ! Sg ! P3)) ++
tr (intagAttr "th" "rowspan=\"3\"" "Pl" ++ th "P1" ++ td (x.indicative ! Pres ! Pl ! P1)) ++ tr (intagAttr "th" "rowspan=\"3\"" "Pl" ++ th "P1" ++ td (x.Indicative ! Pres ! Pl ! P1)) ++
tr (th "P2" ++ td (x.indicative ! Pres ! Pl ! P2)) ++ tr (th "P2" ++ td (x.Indicative ! Pres ! Pl ! P2)) ++
tr (th "P3" ++ td (x.indicative ! Pres ! Pl ! P3)) ++ tr (th "P3" ++ td (x.Indicative ! Pres ! Pl ! P3)) ++
tr (intagAttr "th" "rowspan=\"6\"" "Past" ++ intagAttr "th" "rowspan=\"3\"" "Sg" ++ th "P1" ++ td (x.indicative ! Past ! Sg ! P1)) ++ tr (intagAttr "th" "rowspan=\"6\"" "Past" ++ intagAttr "th" "rowspan=\"3\"" "Sg" ++ th "P1" ++ td (x.Indicative ! Past ! Sg ! P1)) ++
tr (th "P2" ++ td (x.indicative ! Past ! Sg ! P2)) ++ tr (th "P2" ++ td (x.Indicative ! Past ! Sg ! P2)) ++
tr (th "P3" ++ td (x.indicative ! Past ! Sg ! P3)) ++ tr (th "P3" ++ td (x.Indicative ! Past ! Sg ! P3)) ++
tr (intagAttr "th" "rowspan=\"3\"" "Pl" ++ th "P1" ++ td (x.indicative ! Past ! Pl ! P1)) ++ tr (intagAttr "th" "rowspan=\"3\"" "Pl" ++ th "P1" ++ td (x.Indicative ! Past ! Pl ! P1)) ++
tr (th "P2" ++ td (x.indicative ! Past ! Pl ! P2)) ++ tr (th "P2" ++ td (x.Indicative ! Past ! Pl ! P2)) ++
tr (th "P3" ++ td (x.indicative ! Past ! Pl ! P3)) ++ tr (th "P3" ++ td (x.Indicative ! Past ! Pl ! P3)) ++
tr (intagAttr "th" "rowspan=\"6\"" "Aorist" ++ intagAttr "th" "rowspan=\"3\"" "Sg" ++ th "P1" ++ td (x.indicative ! Aorist ! Sg ! P1)) ++ tr (intagAttr "th" "rowspan=\"6\"" "Aorist" ++ intagAttr "th" "rowspan=\"3\"" "Sg" ++ th "P1" ++ td (x.Indicative ! Aorist ! Sg ! P1)) ++
tr (th "P2" ++ td (x.indicative ! Aorist ! Sg ! P2)) ++ tr (th "P2" ++ td (x.Indicative ! Aorist ! Sg ! P2)) ++
tr (th "P3" ++ td (x.indicative ! Aorist ! Sg ! P3)) ++ tr (th "P3" ++ td (x.Indicative ! Aorist ! Sg ! P3)) ++
tr (intagAttr "th" "rowspan=\"3\"" "Pl" ++ th "P1" ++ td (x.indicative ! Aorist ! Pl ! P1)) ++ tr (intagAttr "th" "rowspan=\"3\"" "Pl" ++ th "P1" ++ td (x.Indicative ! Aorist ! Pl ! P1)) ++
tr (th "P2" ++ td (x.indicative ! Aorist ! Pl ! P2)) ++ tr (th "P2" ++ td (x.Indicative ! Aorist ! Pl ! P2)) ++
tr (th "P3" ++ td (x.indicative ! Aorist ! Pl ! P3)) ++ tr (th "P3" ++ td (x.Indicative ! Aorist ! Pl ! P3)) ++
tr (intagAttr "th" "rowspan=\"6\"" "Imperfect" ++ intagAttr "th" "rowspan=\"3\"" "Sg" ++ th "P1" ++ td (x.indicative ! Imperfect ! Sg ! P1)) ++ tr (intagAttr "th" "rowspan=\"6\"" "Imperfect" ++ intagAttr "th" "rowspan=\"3\"" "Sg" ++ th "P1" ++ td (x.Indicative ! Imperfect ! Sg ! P1)) ++
tr (th "P2" ++ td (x.indicative ! Imperfect ! Sg ! P2)) ++ tr (th "P2" ++ td (x.Indicative ! Imperfect ! Sg ! P2)) ++
tr (th "P3" ++ td (x.indicative ! Imperfect ! Sg ! P3)) ++ tr (th "P3" ++ td (x.Indicative ! Imperfect ! Sg ! P3)) ++
tr (intagAttr "th" "rowspan=\"3\"" "Pl" ++ th "P1" ++ td (x.indicative ! Imperfect ! Pl ! P1)) ++ tr (intagAttr "th" "rowspan=\"3\"" "Pl" ++ th "P1" ++ td (x.Indicative ! Imperfect ! Pl ! P1)) ++
tr (th "P2" ++ td (x.indicative ! Imperfect ! Pl ! P2)) ++ tr (th "P2" ++ td (x.Indicative ! Imperfect ! Pl ! P2)) ++
tr (th "P3" ++ td (x.indicative ! Imperfect ! Pl ! P3)) ++ tr (th "P3" ++ td (x.Indicative ! Imperfect ! Pl ! P3)) ++
tr (intagAttr "th" "rowspan=\"2\"" "Imperative" ++ th "Sg" ++ td (x.imperative ! Sg)) ++ tr (intagAttr "th" "rowspan=\"2\"" "Imperative" ++ th "Sg" ++ td (x.Imperative ! Sg)) ++
tr (th "Pl" ++ td (x.imperative ! Pl)) ++ tr (th "Pl" ++ td (x.Imperative ! Pl)) ++
tr (th "participle" ++ td (x.participle)) ++ tr (th "participle" ++ td (x.participle)) ++
tr (intagAttr "th" "rowspan=\"6\"" "pres_optative" ++ intagAttr "th" "rowspan=\"3\"" "Sg" ++ th "P1" ++ td (x.pres_optative ! Sg ! P1)) ++ tr (intagAttr "th" "rowspan=\"6\"" "pres_optative" ++ intagAttr "th" "rowspan=\"3\"" "Sg" ++ th "P1" ++ td (x.pres_optative ! Sg ! P1)) ++
tr (th "P2" ++ td (x.pres_optative ! Sg ! P2)) ++ tr (th "P2" ++ td (x.pres_optative ! Sg ! P2)) ++
+270 -270
View File
File diff suppressed because it is too large Load Diff
+6 -5
View File
@@ -4,16 +4,16 @@ concrete NounSqi of Noun = CatSqi ** open MorphoSqi, ResSqi in {
lin lin
DetCN det cn = { DetCN det cn = {
s = \\c => det.s ! c ! cn.g ++ cn.s ! det.sp ! c ! det.n ; s = \\c => det.s ! c ! cn.g ++ cn.s ! det.spec ! c ! det.n ;
a = agrgP3 cn.g det.n a = agrgP3 cn.g det.n
} ; } ;
-- UsePron p = p ; UsePron p = p ;
DetQuant quant num = { DetQuant quant num = {
s = \\c,g => quant.s ! c ! g ! num.n ++ num.s ; s = \\c,g => quant.s ! c ! g ! num.n ++ num.s ;
n = num.n ; n = num.n ;
sp = quant.sp spec = quant.spec
} ; } ;
NumSg = {s = []; n = Sg} ; NumSg = {s = []; n = Sg} ;
@@ -21,15 +21,16 @@ concrete NounSqi of Noun = CatSqi ** open MorphoSqi, ResSqi in {
DefArt = { DefArt = {
s = \\c,g,n => [] ; s = \\c,g,n => [] ;
sp = Def spec = Def
} ; } ;
IndefArt = { IndefArt = {
s = \\c,g => table Number ["një"; []] ; s = \\c,g => table Number ["një"; []] ;
sp = Indef spec = Indef
} ; } ;
UseN n = n ; UseN n = n ;
UseN2 n = n ;
AdjCN ap cn = { AdjCN ap cn = {
s = \\spec,c,n => cn.s ! spec ! c ! n ++ ap.s ! spec ! c ! cn.g ! n ; s = \\spec,c,n => cn.s ! spec ! c ! n ++ ap.s ! spec ! c ! cn.g ! n ;
+2 -2
View File
@@ -1327,7 +1327,7 @@ oper mkQuant : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Quant =
} }
} }
} ; } ;
sp = Indef spec = Indef
} ; } ;
oper mkDet : (_,_,_,_,_,_,_,_ : Str) -> Number -> Det = oper mkDet : (_,_,_,_,_,_,_,_ : Str) -> Number -> Det =
@@ -1350,7 +1350,7 @@ oper mkDet : (_,_,_,_,_,_,_,_ : Str) -> Number -> Det =
Fem => f8 Fem => f8
} }
} ; } ;
sp = Indef ; spec = Indef ;
n = n n = n
} ; } ;
+3 -3
View File
@@ -104,10 +104,10 @@ oper mkAdj : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Bool -> Adj =
param Tense = Pres | Past | Imperfect | Aorist ; param Tense = Pres | Past | Imperfect | Aorist ;
oper Verb = {indicative: Tense => Number => Person => Str; imperative: Number => Str; participle: Str; pres_optative: Number => Person => Str; perf_optative: Number => Person => Str; pres_admirative: Number => Person => Str; imperf_admirative: Number => Person => Str} ; -- 758 oper Verb = {Indicative: Tense => Number => Person => Str; Imperative: Number => Str; participle: Str; pres_optative: Number => Person => Str; perf_optative: Number => Person => Str; pres_admirative: Number => Person => Str; imperf_admirative: Number => Person => Str} ; -- 758
oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Verb = 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,f44,f45,f46,f47,f48,f49,f50,f51 -> \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,f44,f45,f46,f47,f48,f49,f50,f51 ->
{ indicative = table { { Indicative = table {
Pres => table { Pres => table {
Sg => table { Sg => table {
P1 => f1 ; P1 => f1 ;
@@ -157,7 +157,7 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_
} }
} }
} ; } ;
imperative = table { Imperative = table {
Sg => f25 ; Sg => f25 ;
Pl => f26 Pl => f26
} ; } ;
+420 -1
View File
@@ -128,8 +128,10 @@ C1eC2aC3 = {C1 ="" ; C1C2="'"; C2C3 ="!"; C3="#"};
peC1aC2C3 = { C1 = "ä" ; C1C2="'"; C2C3 ="'"; C3=""}; peC1aC2C3 = { C1 = "ä" ; C1C2="'"; C2C3 ="'"; C3=""};
penC1aC2C3e = { C1 = "än" ; C1C2="'"; C2C3 ="'"; C3=""}; penC1aC2C3e = { C1 = "än" ; C1C2="'"; C2C3 ="'"; C3=""};
pteC1aC2C3 = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3=""}; pteC1aC2C3 = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3=""};
pteC1aC2C3 = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3=""};-- 3
pteC1aC2C3u = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3="&"}; pteC1aC2C3u = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3="&"};
pyeC1aC2C3 = { C1 = "y" ; C1C2="'"; C2C3 ="'"; C3=""}; pyeC1aC2C3 = { C1 = "y" ; C1C2="'"; C2C3 ="'"; C3=""};
pteC1aC2C3 = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3=""};
pyeC1aC2C3u = { C1 = "y" ; C1C2="'"; C2C3 ="'"; C3="&"}; pyeC1aC2C3u = { C1 = "y" ; C1C2="'"; C2C3 ="'"; C3="&"};
--Passive Jus_Imperat mkV3gdl --Passive Jus_Imperat mkV3gdl
@@ -341,6 +343,7 @@ leC1AC2aC3 = {C1 ="l" ; C1C2="!"; C2C3 ="'"; C3=""};
enC1AC2aC3 = { C1 = "(n" ; C1C2="!"; C2C3 ="'"; C3=""}; enC1AC2aC3 = { C1 = "(n" ; C1C2="!"; C2C3 ="'"; C3=""};
C1AC2aC3 = { C1 = "" ; C1C2="!"; C2C3 ="'"; C3=""}; C1AC2aC3 = { C1 = "" ; C1C2="!"; C2C3 ="'"; C3=""};
C1AC2aC3i = { C1 = "" ; C1C2="!"; C2C3 ="'"; C3="#"}; C1AC2aC3i = { C1 = "" ; C1C2="!"; C2C3 ="'"; C3="#"};
C1AC2aC3u = { C1 = "" ; C1C2="!"; C2C3 ="'"; C3="&"};
yC1AC2aC3 = { C1 = "y" ; C1C2="!"; C2C3 ="'"; C3=""}; yC1AC2aC3 = { C1 = "y" ; C1C2="!"; C2C3 ="'"; C3=""};
tC1AC2aC3 = { C1 = "t" ; C1C2="!"; C2C3 ="'"; C3=""}; tC1AC2aC3 = { C1 = "t" ; C1C2="!"; C2C3 ="'"; C3=""};
yC1AC2aC3u = { C1 = "y" ; C1C2="!"; C2C3 ="'"; C3="&"}; yC1AC2aC3u = { C1 = "y" ; C1C2="!"; C2C3 ="'"; C3="&"};
@@ -658,7 +661,7 @@ C1AC2n = { C1 = "" ; C1C2="!"; C2 ="n"};
C1AC2k = { C1 = "" ; C1C2="!"; C2 ="k"}; C1AC2k = { C1 = "" ; C1C2="!"; C2 ="k"};
C1AC2sh = { C1 = "" ; C1C2="!"; C2 ="x"}; C1AC2sh = { C1 = "" ; C1C2="!"; C2 ="x"};
C1AC2achehu = { C1 = "" ; C1C2 ="!"; C2 ="!ch&"}; C1AC2achehu = { C1 = "" ; C1C2 ="!"; C2 ="!ch&"};
C1AC2a = { C1 = "" ; C1C2="!"; C2 ="'"}; C1AC2a = { C1 = "" ; C1C2="!"; C2 ="'"};
C1AC2ach = { C1 = "" ; C1C2="!"; C2 ="'c"}; C1AC2ach = { C1 = "" ; C1C2="!"; C2 ="'c"};
C1AC2u = { C1 = "" ; C1C2="!"; C2 ="&"}; C1AC2u = { C1 = "" ; C1C2="!"; C2 ="&"};
-- Imper -- mkV2yz -- Imper -- mkV2yz
@@ -698,6 +701,7 @@ C1C2ek = { C1 = "" ; C1C2=""; C2 ="'k"};
C1C2esh = { C1 = "" ; C1C2=""; C2 ="'x"}; C1C2esh = { C1 = "" ; C1C2=""; C2 ="'x"};
C1C2achehu = { C1 = "" ; C1C2=""; C2 ="!ch&"}; C1C2achehu = { C1 = "" ; C1C2=""; C2 ="!ch&"};
C1C2o = { C1 = "" ; C1C2=""; C2 ="/"}; C1C2o = { C1 = "" ; C1C2=""; C2 ="/"};
C1C2a = { C1 = "" ; C1C2=""; C2="!"};
C1C2ew = { C1 = "" ; C1C2=""; C2="'w"}; C1C2ew = { C1 = "" ; C1C2=""; C2="'w"};
--CompPer mkV2yz y!l'h& !l !l !l cX7l 7l l'c !l --CompPer mkV2yz y!l'h& !l !l !l cX7l 7l l'c !l
@@ -717,12 +721,81 @@ meC1aC2= {C1 ="m'" ; C1C2="!"; C2 =""};
--Infinitve mkV2yz --Infinitve mkV2yz
C1aC2ii= {C1 ="" ; C1C2="!"; C2 ="#"}; C1aC2ii= {C1 ="" ; C1C2="!"; C2 ="#"};
--mkV2yz -- yz -- catch
--Perf --
C1AC2hu = {C1 ="" ; C1C2="!"; C2 ="h&"};
C1AC2n = { C1 = "" ; C1C2="!"; C2 ="n"};
C1AC2k = { C1 = "" ; C1C2="!"; C2 ="k"};
C1AC2sh = { C1 = "" ; C1C2="!"; C2 ="x"};
C1AC2achehu = { C1 = "" ; C1C2 ="!"; C2 ="!ch&"};
C1AC2a = { C1 = "" ; C1C2="!"; C2 ="'"};
C1AC2ach = { C1 = "" ; C1C2="!"; C2 ="'c"};
C1AC2u = { C1 = "" ; C1C2="!"; C2 ="&"};
-- Imper -- mkV2yz
eC1C2alehu = { C1 = "ä" ; C1C2=""; C2 ="!l'h&"};
enC1C2alen = { C1 = "än" ; C1C2=""; C2 ="!l'n"};
teC1C2yaleh = { C1 = "t" ; C1C2=""; C2 ="!l'h"};
teC1C2aleh = { C1 = "t" ; C1C2=""; C2 ="y!l'x"};
teC1C2alachehu = { C1 = "t" ; C1C2=""; C2 ="!l!ch&"};
yeC1C2al = { C1 = "y" ; C1C2=""; C2 ="!l"};
teC1C2alech = { C1 = "t" ; C1C2=""; C2 ="!l'c"};
yeC1C2alu = { C1 = "y" ; C1C2=""; C2 ="!l&"};
-- Cont -- mkV2yz
eC1C2 = { C1 = "ä" ; C1C2=""; C2 =""};
enC1C2 = { C1 = "än" ; C1C2=""; C2 =""};
teC1C2 = { C1 = "t" ; C1C2=""; C2 =""};
--teC1C2 = { C1 = "t" ; C1C2=""; C2 =""};3
teC1C2u = { C1 = "t" ; C1C2=""; C2 ="&"};
yeC1C2 = { C1 = "y" ; C1C2=""; C2 =""};
--teC1C2 = { C1 = "t" ; C1C2=""; C2 =""};
yeC1C2u = { C1 = "y" ; C1C2=""; C2 ="&"};
--Jus_Imperat mkV2yz
leC1aC2a = {C1 ="l" ; C1C2="!"; C2 =""};
enC1aC2a = { C1 = "än" ; C1C2="!"; C2 =""};
C1aC2 = { C1 = "" ; C1C2="!"; C2 =""};
C1aC2i = { C1 = "" ; C1C2="!"; C2 ="#"};
C1eC2u = { C1 = "" ; C1C2="!"; C2 ="&"};
yC1aC2a = { C1 = "y" ; C1C2="!"; C2 =""};
tC1aC2a = { C1 = "t" ; C1C2="!"; C2 =""};
yC1aC2u = { C1 = "y" ; C1C2="!"; C2 ="&"};
--Gerund mkV2yz
C1C2ie = {C1 ="" ; C1C2=""; C2 ="%"};
C1C2en = { C1 = "" ; C1C2=""; C2 ="'n"};
C1C2ek = { C1 = "" ; C1C2=""; C2 ="'k"};
C1C2esh = { C1 = "" ; C1C2=""; C2 ="'x"};
C1C2achehu = { C1 = "" ; C1C2=""; C2 ="!ch&"};
C1C2o = { C1 = "" ; C1C2=""; C2 ="/"};
C1C2a = { C1 = "" ; C1C2=""; C2="!"};
C1C2ew = { C1 = "" ; C1C2=""; C2="'w"};
--CompPer mkV2yz y!l'h& !l !l !l cX7l 7l l'c !l
C1C2iealehu = {C1 ="" ; C1C2=""; C2 ="%y!l'h&"};
C1C2enal = { C1 = "" ; C1C2=""; C2 ="'n!l"};
C1C2ekal = { C1 = "" ; C1C2=""; C2 ="'k!l"};
C1C2eshal = { C1 = "" ; C1C2=""; C2 ="'x!l"};
C1C2achehual = { C1 = "" ; C1C2=""; C2 ="!cX7l"};
C1C2oal = { C1 = "" ; C1C2=""; C2 ="7l"};
C1C2alech = { C1 = "" ; C1C2=""; C2="!l'c"};
C1C2ewal = { C1 = "" ; C1C2=""; C2="'w!l"};
--Infinitve mkV2yz
meC1aC2= {C1 ="m'" ; C1C2="!"; C2 =""};
--Infinitve mkV2yz
C1aC2ii= {C1 ="" ; C1C2="!"; C2 ="#"};
--nore -- nr -- live --nore -- nr -- live
--Perf -- --Perf --
C1oC2hu = {C1 ="" ; C1C2="/"; C2 ="h&"}; C1oC2hu = {C1 ="" ; C1C2="/"; C2 ="h&"};
C1oC2n = { C1 = "" ; C1C2="/"; C2 ="n"}; C1oC2n = { C1 = "" ; C1C2="/"; C2 ="n"};
C1oC2k = { C1 = "" ; C1C2="/"; C2 ="k"}; C1oC2k = { C1 = "" ; C1C2="/"; C2 ="k"};
C1oC2sh = { C1 = "" ; C1C2="/"; C2 ="x"}; C1oC2sh = { C1 = "" ; C1C2="/"; C2 ="x"};
C1oC2achehu = { C1 = "" ; C1C2 ="/"; C2 ="!ch&"};
C1oC2a = { C1 = "" ; C1C2="/"; C2 ="'"}; C1oC2a = { C1 = "" ; C1C2="/"; C2 ="'"};
C1oC2ach = { C1 = "" ; C1C2="/"; C2 ="'c"}; C1oC2ach = { C1 = "" ; C1C2="/"; C2 ="'c"};
C1oC2u = { C1 = "" ; C1C2="/"; C2 ="&"}; C1oC2u = { C1 = "" ; C1C2="/"; C2 ="&"};
@@ -785,12 +858,87 @@ meC1oC2= {C1 ="m'" ; C1C2="/"; C2 =""};
C1uaC2i= {C1 ="" ; C1C2="7"; C2 ="#"}; C1uaC2i= {C1 ="" ; C1C2="7"; C2 ="#"};
--nore -- nr -- live
--Perf --
C1oC2hu = {C1 ="" ; C1C2="/"; C2 ="h&"};
C1oC2n = { C1 = "" ; C1C2="/"; C2 ="n"};
C1oC2k = { C1 = "" ; C1C2="/"; C2 ="k"};
C1oC2sh = { C1 = "" ; C1C2="/"; C2 ="x"};
C1oC2achehu = { C1 = "" ; C1C2 ="/"; C2 ="!ch&"};
C1oC2a = { C1 = "" ; C1C2="/"; C2 ="'"};
C1oC2ach = { C1 = "" ; C1C2="/"; C2 ="'c"};
C1oC2u = { C1 = "" ; C1C2="/"; C2 ="&"};
-- Imper -- mkV2nr
eC1oC2alehu = { C1 = "ä" ; C1C2="/"; C2 ="!l'h&"};
enC1oC2alen = { C1 = "än" ; C1C2="/"; C2 ="!l'n"};
teC1oC2yaleh = { C1 = "t" ; C1C2="/"; C2 ="!l'h"};
teC1oC2alesh = { C1 = "t" ; C1C2="/"; C2 ="y!l'x"};
teC1oC2alachehu = { C1 = "t" ; C1C2="/"; C2 ="!l!ch&"};
yeC1oC2al = { C1 = "y" ; C1C2="/"; C2 ="!l"};
teC1oC2alech = { C1 = "t" ; C1C2="/"; C2 ="!l'c"};
yeC1oC2alu = { C1 = "y" ; C1C2="/"; C2 ="!l&"};
-- Imper -- mkV2nr
eC1oC2 = { C1 = "ä" ; C1C2="/"; C2 =""};
enC1oC2 = { C1 = "än" ; C1C2="/"; C2 =""};
teC1oC2 = { C1 = "t" ; C1C2="/"; C2 =""};
teC1oC2i = { C1 = "t" ; C1C2="/"; C2 ="#"};
teC1oC2u = { C1 = "t" ; C1C2="/"; C2 ="&"};
yeC1oC2 = { C1 = "y" ; C1C2="/"; C2 =""};
--teC1oC2 = { C1 = "t" ; C1C2="/"; C2 ="!l'c"};
yeC1oC2u = { C1 = "y" ; C1C2="/"; C2 ="&"};
--Jus_Imperat mkV2nr
leC1uC2 = {C1 ="l" ; C1C2="&"; C2 =""};
enC1uC2 = { C1 = "än" ; C1C2="&"; C2 =""};
C1uC2 = { C1 = "" ; C1C2="&"; C2 =""};
C1uC2i = { C1 = "" ; C1C2="&"; C2 ="#"};
C1uC2u = { C1 = "" ; C1C2="&"; C2 ="&"};
yC1uC2 = { C1 = "y" ; C1C2="&"; C2 =""};
tC1uC2 = { C1 = "t" ; C1C2="&"; C2 =""};
yC1uC2u = { C1 = "y" ; C1C2="&"; C2 ="&"};
--Gerund mkV2nr
C1oC2ie = {C1 ="" ; C1C2="/"; C2 ="%"};
C1oC2en = { C1 = "" ; C1C2="/"; C2 ="'n"};
C1oC2ek = { C1 = "" ; C1C2="/"; C2 ="'k"};
C1oC2esh = { C1 = "" ; C1C2="/"; C2 ="'x"};
C1oC2achehu = { C1 = "" ; C1C2="/"; C2 ="!ch&"};
C1oC2o = { C1 = "" ; C1C2="/"; C2 ="/"};
C1oC2A = { C1 = "" ; C1C2="/"; C2="!"};
C1oC2ew = { C1 = "" ; C1C2="/"; C2="'w"};
--CompPer mkV2nr y!l'h& !l !l !l cX7l 7l l'c !l
C1oC2iealehu = {C1 ="" ; C1C2="/"; C2 ="%y!l'h& "};
C1oC2enal = { C1 = "" ; C1C2="/"; C2 ="'n!l"};
C1oC2ekal = { C1 = "" ; C1C2="/"; C2 ="'k!l"};
C1oC2eshal = { C1 = "" ; C1C2="/"; C2 ="'x!l"};
C1oC2achehual = { C1 = "" ; C1C2="/"; C2 ="!cX7l"};
C1oC2oal = { C1 = "" ; C1C2="/"; C2 ="7l"};
C1oC2Alech = { C1 = "" ; C1C2="/"; C2="!l'c"};
C1oC2ewal = { C1 = "" ; C1C2="/"; C2="'w!l"};
--Infinitve mkV2nr
meC1oC2= {C1 ="m'" ; C1C2="/"; C2 =""};
--Participle mkV2nr
C1uaC2i= {C1 ="" ; C1C2="7"; C2 ="#"};
--mkV2wN -- wN -- swim --- Eg lie, see, say --mkV2wN -- wN -- swim --- Eg lie, see, say
--Perf -- --Perf --
C1AC2ehu = {C1 ="" ; C1C2="!"; C2 ="'h&"}; C1AC2ehu = {C1 ="" ; C1C2="!"; C2 ="'h&"};
C1AC2en = { C1 = "" ; C1C2="!"; C2 ="'n"}; C1AC2en = { C1 = "" ; C1C2="!"; C2 ="'n"};
C1AC2ek = { C1 = "" ; C1C2="!"; C2 ="'k"}; C1AC2ek = { C1 = "" ; C1C2="!"; C2 ="'k"};
C1AC2esh = { C1 = "" ; C1C2="!"; C2 ="'x"}; C1AC2esh = { C1 = "" ; C1C2="!"; C2 ="'x"};
--C1AC2achehu = { C1 = "" ; C1C2 ="!"; C2 ="!ch&"};
--C1AC2a = { C1 = "" ; C1C2="!"; C2 ="'"};
--C1AC2ach = { C1 = "" ; C1C2="!"; C2 ="'c"};
--C1AC2u = { C1 = "" ; C1C2="!"; C2 ="&"};
-- Imper -- mkV2wN -- Imper -- mkV2wN
eC1aC2alehu = { C1 = "ä" ; C1C2="!"; C2 ="!l'h&"}; eC1aC2alehu = { C1 = "ä" ; C1C2="!"; C2 ="!l'h&"};
enC1aC2alen = { C1 = "än" ; C1C2="!"; C2 ="!l'n"}; enC1aC2alen = { C1 = "än" ; C1C2="!"; C2 ="!l'n"};
@@ -844,6 +992,74 @@ C1aC2tewal = { C1 = "" ; C1C2="!"; C2="t'w!l"};
meC1aC2et= {C1 ="m'" ; C1C2="!"; C2 ="'t"}; meC1aC2et= {C1 ="m'" ; C1C2="!"; C2 ="'t"};
--nore -- nr -- live --nore -- nr -- live
--mkV2wN -- wN -- swim --- Eg lie, see, say
--Perf --
C1AC2ehu = {C1 ="" ; C1C2="!"; C2 ="'h&"};
C1AC2en = { C1 = "" ; C1C2="!"; C2 ="'n"};
C1AC2ek = { C1 = "" ; C1C2="!"; C2 ="'k"};
C1AC2esh = { C1 = "" ; C1C2="!"; C2 ="'x"};
--C1AC2achehu = { C1 = "" ; C1C2 ="!"; C2 ="!ch&"};
--C1AC2a = { C1 = "" ; C1C2="!"; C2 ="'"};
--C1AC2ach = { C1 = "" ; C1C2="!"; C2 ="'c"};
--C1AC2u = { C1 = "" ; C1C2="!"; C2 ="&"};
-- Imper -- mkV2wN
eC1aC2alehu = { C1 = "ä" ; C1C2="!"; C2 ="!l'h&"};
enC1aC2alen = { C1 = "än" ; C1C2="!"; C2 ="!l'n"};
teC1aC2yaleh = { C1 = "t" ; C1C2="!"; C2 ="!l'h"};
teC1aC2alesh = { C1 = "t" ; C1C2="!"; C2 ="y!l'x"};
teC1aC2alachehu = { C1 = "t" ; C1C2="!"; C2 ="!l!ch&"};
yeC1aC2al = { C1 = "y" ; C1C2="!"; C2 ="!l"};
teC1aC2alech = { C1 = "t" ; C1C2="!"; C2 ="!l'c"};
yeC1aC2alu = { C1 = "y" ; C1C2="!"; C2 ="!l&"};
-- Cont -- mkV2wN
eC1aC2 = { C1 = "ä" ; C1C2="!"; C2 =""};
enC1aC2 = { C1 = "än" ; C1C2="!"; C2 =""};
teC1aC2 = { C1 = "t" ; C1C2="!"; C2 =""};
--teC1aC2 = { C1 = "t" ; C1C2="!"; C2 =""};
teC1aC2u = { C1 = "t" ; C1C2="!"; C2 ="&"};
yeC1aC2 = { C1 = "y" ; C1C2="!"; C2 =""};
--teC1aC2 = { C1 = "t" ; C1C2="!"; C2 =""};
yeC1aC2u = { C1 = "y" ; C1C2="!"; C2 ="&"};
--Jus_Imperat mkV2wN
--leC1aC2a = {C1 ="l" ; C1C2="!"; C2 =""};
--enC1aC2a = { C1 = "än" ; C1C2="!"; C2 =""};
--C1aC2 = { C1 = "" ; C1C2="!"; C2 =""};
--C1aC2i = { C1 = "" ; C1C2="!"; C2 ="#"};
--C1eC2u = { C1 = "" ; C1C2="!"; C2 ="&"};
--yC1aC2a = { C1 = "y" ; C1C2="!"; C2 =""};
--tC1aC2a = { C1 = "t" ; C1C2="!"; C2 =""};
--yC1aC2u = { C1 = "y" ; C1C2="!"; C2 ="&"};
--Gerund mkV2wN
C1aC2cie = {C1 ="" ; C1C2="!"; C2 ="c%"};
C1aC2ten = { C1 = "" ; C1C2="!"; C2 ="t'n"};
C1aC2tek = { C1 = "" ; C1C2="!"; C2 ="t'k"};
C1aC2tesh = { C1 = "" ; C1C2="!"; C2 ="t'x"};
C1aC2tachehu = { C1 = "" ; C1C2="!"; C2 ="t!ch&"};
C1aC2to = { C1 = "" ; C1C2="!"; C2 ="t/"};
C1aC2ta = { C1 = "" ; C1C2="!"; C2="t!"};
C1aC2tew = { C1 = "" ; C1C2="!"; C2="t'w"};
--ComPer mkV2wN y!l'h& !l !l !l cX7l 7l l'c !l
C1aC2ciealehu = {C1 ="" ; C1C2="!"; C2 ="c%y!l'h&"};
C1aC2tenal = { C1 = "" ; C1C2="!"; C2 ="t'n!l"};
C1aC2tekal = { C1 = "" ; C1C2="!"; C2 ="t'k!l"};
C1aC2teshal = { C1 = "" ; C1C2="!"; C2 ="t'x!l"};
C1aC2tachehual = { C1 = "" ; C1C2="!"; C2 ="t!cX7l"};
C1aC2toal = { C1 = "" ; C1C2="!"; C2 ="t7l"};
C1aC2talech = { C1 = "" ; C1C2="!"; C2="t!l'c"};
C1aC2tewal = { C1 = "" ; C1C2="!"; C2="t'w!l"};
--Infinitve mkV2wN
meC1aC2et= {C1 ="m'" ; C1C2="!"; C2 ="'t"};
--nore -- nr -- live
----------- This much is enough for the duo-radicals--- ----------- This much is enough for the duo-radicals---
--There are few verbs still remaining like the case of shete, hede , --washe, aye, ale , all need unique froms for them selves. I will get --back here later!! --There are few verbs still remaining like the case of shete, hede , --washe, aye, ale , all need unique froms for them selves. I will get --back here later!!
@@ -893,8 +1109,63 @@ tC1eC2 = { C1 = "t" ; C1C2=""; C2 =""};
meC1C2et= {C1 ="m'" ; C1C2=""; C2 ="'t"}; meC1C2et= {C1 ="m'" ; C1C2=""; C2 ="'t"};
----------- This much is enough for the duo-radicals---
--There are few verbs still remaining like the case of shete, hede , --washe, aye, ale , all need unique froms for them selves. I will get --back here later!!
--seTe -- st -- give
--Perf --
C1eC2hu = {C1 ="" ; C1C2="'"; C2 ="'h&"};
C1eC2n = { C1 = "" ; C1C2="'"; C2 ="'n"};
C1eC2k = { C1 = "" ; C1C2="'"; C2 ="'k"};
C1eC2sh = { C1 = "" ; C1C2="'"; C2 ="'x"};
C1eC2achehu = { C1 = "" ; C1C2 ="'"; C2 ="'ch&"};
C1eC2a = { C1 = "" ; C1C2="'"; C2 ="'"};
C1eC2ach = { C1 = "" ; C1C2="'"; C2 ="'c"};
--C1eC2u = { C1 = "" ; C1C2="'"; C2 ="&"}; same as C1aC2u (bela)
-- Imper -- mkV2sT
--eC1eC2alehu = { C1 = "ä" ; C1C2="'"; C2 ="!l'h&"}; eC1aC2alehu
--enC1eC2alen = { C1 = "än" ; C1C2="'"; C2 ="!l'n"};enC1aC2alen
--teC1eC2yaleh = { C1 = "t" ; C1C2="'"; C2 ="!l'h"};teC1aC2yaleh
--teC1eC2aleh = { C1 = "t" ; C1C2="'"; C2 ="y!l'x"};teC1aC2aleh
--teC1eC2alachehu = { C1 = "t" ; C1C2="'"; C2 ="!l!ch&"};teC1aC2alachehu
--yeC1eC2al = { C1 = "y" ; C1C2="'"; C2 ="!l"};yeC1aC2al
--teC1eC2alech = { C1 = "t" ; C1C2="'"; C2 ="!l'c"};teC1aC2alech
--yeC1eC2alu = { C1 = "y" ; C1C2="'"; C2 ="!l&"};yeC1aC2alu
--Jus_Imperat mkV2sT
leC1eC2 = {C1 ="l" ; C1C2=""; C2 =""};
enC1eC2 = { C1 = "än" ; C1C2=""; C2 =""};
C1C2 = { C1 = "" ; C1C2=""; C2 =""};
C1eC2i = { C1 = "" ; C1C2=""; C2 ="#"};
--C1eC2u = { C1 = "" ; C1C2=""; C2 ="&"}; C1C2u
yC1eC2 = { C1 = "y" ; C1C2=""; C2 =""};
tC1eC2 = { C1 = "t" ; C1C2=""; C2 =""};
--yC1eC2u = { C1 = "y" ; C1C2=""; C2 ="&"};yC1C2u
--Gerund mkV2sT
--C1eC2ie = {C1 ="" ; C1C2="'"; C2 ="c%"}; C1aC2cie
--C1eC2en = { C1 = "" ; C1C2="'"; C2 ="'n"};C1aC2ten
--C1eC2ek = { C1 = "" ; C1C2="'"; C2 ="'k"}; C1aC2tek
--C1eC2esh = { C1 = "" ; C1C2="'"; C2 ="'x"}; C1aC2tesh
--C1eC2achehu = { C1 = "" ; C1C2="'"; C2 ="!ch&"};C1aC2tachehu
--C1eC2o = { C1 = "" ; C1C2="'"; C2 ="/"};C1aC2to
--C1eC2A = { C1 = "" ; C1C2="'"; C2="!"};C1aC2ta
--C1eC2ew = { C1 = "" ; C1C2="'"; C2="'w"}; C1aC2tew
--Infinitve mkV2sT
meC1C2et= {C1 ="m'" ; C1C2=""; C2 ="'t"};
---- Quadro_Radical ---- Quadro_Radical
--Starting with type Tri-Radical Roots --Starting with type Tri-Radical Roots
-- Eg. dbdb - fight -- Eg. dbdb - fight
-- qzqz - freeze -- qzqz - freeze
@@ -967,4 +1238,152 @@ meC1aC2C3aC4 = {C1 ="m'" ; C1C2="'"; C2C3 =""; C3C4="'"; C4= "" };
--Participle mkV4dbdb --Participle mkV4dbdb
C1eC2C3aC4i = {C1 ="" ; C1C2="'"; C2C3 =""; C3C4="!"; C4= "#" }; C1eC2C3aC4i = {C1 ="" ; C1C2="'"; C2C3 =""; C3C4="!"; C4= "#" };
---- Quadro_Radical
--Starting with type Tri-Radical Roots
-- Eg. dbdb - fight
-- qzqz - freeze
-- wrwr - throw
-- tnfs - breath
--Perf --
C1aC2aC3aC4hu = {C1 ="" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "h&" };
C1aC2aC3aC4n = { C1 = "" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "n" };
C1aC2aC3aC4k = { C1 = "" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "k" };
C1aC2aC3aC4sh = { C1 = "" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "x" };
C1aC2aC3aC4achehu = { C1 = "" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "!ch&" };
C1aC2aC3aC4a = { C1 = "" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "'" };
C1aC2aC3aC4ech = { C1 = "" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "'c" };
C1aC2aC3aC4u = { C1 = "" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "&" };
--Imper --mkV4dbdb
eC1aC2aC3C4alehu = { C1 = "ä" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "!l'h&" };
enC1aC2aC3C4alen = { C1 = "än" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "!l'n" };
teC1aC2aC3C4yaleh = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "!l'h" };
teC1aC2aC3C4aleh = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "y!l'x" };
teC1aC2aC3C4alachehu = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "!l!ch&" };
yeC1aC2aC3C4al = { C1 = "y" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "!l" };
teC1aC2aC3C4alech = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "!l'c" };
yeC1aC2aC3C4alu = { C1 = "y" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "!l&" };
--Cont --mkV4dbdb
eC1aC2aC3C4 = { C1 = "ä" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "" };
enC1aC2aC3C4 = { C1 = "än" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "" };
teC1aC2aC3C4 = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "" };
teC1aC2aC3C4i = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "#" };
teC1aC2aC3C4u = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "&" };
yeC1aC2aC3C4 = { C1 = "y" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "" };
--teC1aC2aC3C4 = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "" };
yeC1aC2aC3C4u = { C1 = "y" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "&" };
--Jus_Imperat mkV4dbdb
leC1aC2C3C4 = {C1 ="l" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "" };
enC1aC2C3C4 = { C1 = "än" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "" };
C1aC2C3C4 = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "" };
C1aC2C3C4i = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "#" };
C1aC2C3C4u = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "&" };
yC1aC2C3C4 = { C1 = "y" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "" };
tC1aC2C3C4 = { C1 = "t" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "" };
yC1aC2C3C4u = { C1 = "y" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "&" };
--Gerund mkV4dbdb
C1aC2C3C4ie = {C1 ="" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "%" };
C1aC2C3C4en = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'n" };
C1aC2C3C4ek = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'k" };
C1aC2C3C4esh = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'x" };
C1aC2C3C4achehu = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "!ch&" };
C1aC2C3C4o = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "/" };
C1aC2C3C4a = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "!" };
C1aC2C3C4ew = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'w" };
--CompPerf mkV4dbdb y!l'h& !l !l !l cX7l 7l l'c !l
C1aC2C3C4iealehu = {C1 ="" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "%y!l'h&" };
C1aC2C3C4enal = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'n!l" };
C1aC2C3C4ekal = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'k!l" };
C1aC2C3C4eshal = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'x!l" };
C1aC2C3C4achehual = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "!cX7l" };
C1aC2C3C4oal = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "7l" };
C1aC2C3C4alech = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "!l'c" };
C1aC2C3C4ewal = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'w!l" };
--Infinitve mkV4dbdb
meC1aC2C3aC4 = {C1 ="m'" ; C1C2="'"; C2C3 =""; C3C4="'"; C4= "" };
--Participle mkV4dbdb
C1eC2C3aC4i = {C1 ="" ; C1C2="'"; C2C3 =""; C3C4="!"; C4= "#" };
} }
{-
resource PatternsAmh = {
flags coding=utf8 ;
oper
--perf
C1aC2aC3ku = {C1 ="" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="ኩ"};
C1aC2aC3n = { C1 = "" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="ን"};
C1aC2aC3k = { C1 = "" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="ክ"};
C1aC2aC3sh = { C1 = "" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="ሽ"};
C1aC2aC3achehu = { C1 = "" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="አችሁ"};
C1aC2aC3e = { C1 = "" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="ኧ"};
C1aC2aC3ech = { C1 = "" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="ኧች"};
C1aC2aC3u = { C1 = "" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="ኡ"};
--imper
eC1aC2C3alehu = { C1 = "እ" ; C1C2="ኧ"; C2C3 =""; C3="አለሁ"};
enC1aC2C3alen = { C1 = "እን" ; C1C2="ኧ"; C2C3 =""; C3="አለን"};
teC1aC2C3yaleh = { C1 = "ት" ; C1C2="ኧ"; C2C3 =""; C3="አለህ"};
teC1aC2C3aleh = { C1 = "ት" ; C1C2="ኧ"; C2C3 =""; C3="ያለሽ"};
teC1aC2C3alachehu = { C1 = "ት" ; C1C2="ኧ"; C2C3 =""; C3="አላችሁ"};
yeC1aC2C3al = { C1 = "ይ" ; C1C2="ኧ"; C2C3 =""; C3="አል"};
teC1aC2C3alech = { C1 = "ት" ; C1C2="ኧ"; C2C3 =""; C3="አለች"};
yeC1aC2C3alu = { C1 = "ይ" ; C1C2="ኧ"; C2C3 =""; C3="አሉ"};
}
-}
+3
View File
@@ -22,9 +22,12 @@ concrete PhraseAmh of Phrase = CatAmh ** open
UttIP ip = ip ; --- Acc also UttIP ip = ip ; --- Acc also
UttVP vp = {s = vp.obj.s ++ vp.inf} ; UttVP vp = {s = vp.obj.s ++ vp.inf} ;
UttIAdv iadv = iadv ; UttIAdv iadv = iadv ;
UttCN n = {s = n.s ! Sg ! Indef!Nom} ;
UttCard n = {s = n.s ! Masc!Sg!Indef!Nom} ;
UttImpSg pol imp = {s = pol.s ++ imp.s!pol.p!Masc!Sg}; UttImpSg pol imp = {s = pol.s ++ imp.s!pol.p!Masc!Sg};
UttImpPl pol imp = {s = pol.s ++ imp.s ! pol.p! Masc! Pl} ; --- TO DO UttImpPl pol imp = {s = pol.s ++ imp.s ! pol.p! Masc! Pl} ; --- TO DO
UttImpPol pol imp = {s = pol.s ++ imp.s ! pol.p ! Masc!Pl} ; -- TO DO --- UttImpPol pol imp = {s = pol.s ++ imp.s ! pol.p ! Masc!Pl} ; -- TO DO ---
UttQS qs = {s = qs.s } ; -- TO DO
{- {-
PConjConj conj = {s = conj.s2} ; --- PConjConj conj = {s = conj.s2} ; ---
+1 -1
View File
@@ -1,6 +1,6 @@
--# -path=.:../maltese:../common:../abstract:../prelude --# -path=.:../maltese:../common:../abstract:../prelude
resource TryMlt = SyntaxMlt, LexiconMlt, ParadigmsMlt - [mkAdN, mkAdv,mkCard,mkDet,mkIAdv,mkIDet,mkOrd,mkPConj,mkQuant,mkVoc] ** resource TryMlt = SyntaxMlt, LexiconMlt, ParadigmsMlt - [mkAdN, mkAdv,mkOrd,mkQuant] **
open (P = ParadigmsMlt) in { open (P = ParadigmsMlt) in {
} }
+1 -3
View File
@@ -4,7 +4,7 @@ concrete ExtendAra of Extend =
CatAra ** ExtendFunctor - [ CatAra ** ExtendFunctor - [
GenNP, ApposNP, ICompAP, DetNPMasc, DetNPFem, GenNP, ApposNP, ICompAP, DetNPMasc, DetNPFem,
EmptyRelSlash, PredAPVP, EmptyRelSlash, PredAPVP,
ComplDirectVS, ComplDirectVQ, UttAdV, -- because of Utt ComplDirectVS, ComplDirectVQ, -- because of Utt
VPS, MkVPS, PredVPS, BaseVPS, ConsVPS, ConjVPS, VPS, MkVPS, PredVPS, BaseVPS, ConsVPS, ConjVPS,
EmbedSSlash, AdjAsNP, GerundNP, EmbedSSlash, AdjAsNP, GerundNP,
PassVPSlash, ---- bogus implementation, see below PassVPSlash, ---- bogus implementation, see below
@@ -31,8 +31,6 @@ lin
-- : NP -> NP -> NP -- : NP -> NP -> NP
ApposNP np1 np2 = np2 ** {s = \\c => np1.s ! c ++ np2.s ! c} ; ApposNP np1 np2 = np2 ** {s = \\c => np1.s ! c ++ np2.s ! c} ;
UttAdV adv = {s = \\_ => adv.s} ;
-- : AP -> IComp ; -- "how old" -- : AP -> IComp ; -- "how old"
ICompAP ap = {s = \\gn => "كَمْ" ++ ap.s ! NoHum ! gn.g ! gn.n ! Indef ! Acc} ; ICompAP ap = {s = \\gn => "كَمْ" ++ ap.s ! NoHum ! gn.g ! gn.n ! Indef ! Acc} ;
+2 -17
View File
@@ -1,19 +1,4 @@
concrete AdjectiveHye of Adjective = CatHye ** open ResHye, Prelude in { concrete AdjectiveHye of Adjective = CatHye ** {
lin lin
AdAP ada ap = { PositA a = a ;
s = \\sp,c,num => ada.s ++ ap.s ! sp ! c ! num;
isPre = ap.isPre
} ;
PositA a = {
s = \\sp,c,num =>
case <sp,c> of {
<Def,Nom> => a.def_nom ! num ;
<Def,Dat> => a.def_dat ! num ;
<Poss P1,_> => a.poss1 ! c ! num ;
<Poss P2,_> => a.poss2 ! c ! num ;
_ => a.s ! c ! num
} ;
isPre = True
} ;
} }
-6
View File
@@ -1,6 +0,0 @@
concrete AdverbHye of Adverb = CatHye ** open Prelude,ResHye in {
lin PrepNP p np = {s = case p.isPre of {
False => np.s ! p.c ++ p.s;
True => p.s ++ np.s ! p.c
}} ;
}
+15 -62
View File
@@ -1,63 +1,16 @@
concrete CatHye of Cat = CommonX ** open Prelude,ResHye in { concrete CatHye of Cat = CommonX ** open ResHye in {
lincat A = Adj ;
lincat A2 = Adj ** {c2 : Compl} ; lincat V = Verb ;
lincat ACard = {s : Str} ; lincat VV,VS,VQ,VA = Verb ;
lincat AP = {s : Species => Case => Number => Str; isPre : Bool} ; lincat V2 = Verb ** {c2 : Compl} ;
lincat CN = {s : Species => Case => Number => Str} ; lincat V3,V2A,V2S,V2Q,V2V = Verb ** {c2,c3 : Compl} ;
lincat Card = {s : Str} ; lincat N = Noun ;
lincat Cl = {s : Str; lincat N2 = Noun ** {c2 : Compl} ;
conditional : Aspect => Number => Str; lincat N3 = Noun ** {c2,c3 : Compl} ;
converb : {imperfective : Str; futCon1 : Str; lincat CN = Noun ;
futCon2 : Str; negative : Str; lincat A = Adj ;
perfective : Str; simultaneous : Str}; lincat A2 = Adj ** {c2 : Compl} ;
passive : Str; past : Person => Number => Str; lincat AP = Adj ;
participle : PartType => Str; lincat Prep = Compl ;
subjunctive : Aspect => Number => Str} ;
lincat ClSlash = {s : Str} ;
lincat Comp = {s : Str} ;
lincat Conj = {s : Str} ;
lincat DAP = {s : Str} ;
lincat Decimal = {s : Str} ;
lincat Det = {s : Str; n : Number; sp : Species} ;
lincat Digits = {s : Str} ;
lincat GN = {s : Str} ;
lincat IComp = {s : Str} ;
lincat IDet = {s : Str} ;
lincat IP = {s : Str} ;
lincat IQuant = {s : Str} ;
lincat Imp = {s : Str} ;
lincat LN = {s : Str} ;
lincat N = Noun ;
lincat N2 = Noun ** {c2 : Compl} ;
lincat N3 = Noun ** {c2,c3 : Compl} ;
lincat NP = {s : Case => Str; a : Agr} ;
lincat Num = {s : Str; n : Number} ;
lincat Numeral = {s : Str} ;
lincat Ord = {s : Str} ;
lincat PN = {s : Str} ;
lincat Predet = {s : Str} ;
lincat Prep = Compl ** {isPre : Bool} ;
lincat Pron = {s : Str; empty : Str; a : Agr} ;
lincat QCl = {s : Str} ;
lincat QS = {s : Str} ;
lincat Quant = {s : Str; sp : Species} ;
lincat RCl = {s : Str} ;
lincat RP = {s : Str} ;
lincat RS = {s : Str} ;
lincat S = {s : Str} ;
lincat SN = {s : Str} ;
lincat SSlash = {s : Str} ;
lincat Subj = {s : Str} ;
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 VP = {s : Str;
conditional : Aspect => Person => Number => Str;
converb : {imperfective : Str; futCon1 : Str; futCon2 : Str;
negative : Str; perfective : Str; simultaneous : Str};
imperative : Number => Str; passive : Str;
past : Person => Number => Str; participle : PartType => Str;
subjunctive : Aspect => Person => Number => Str} ;
lincat VPSlash = Verb ** {c2 : Compl} ;
} }
+25 -25
View File
@@ -15,50 +15,50 @@ lin
paragraph (x.s) ++ paragraph (x.s) ++
heading1 "Converb" ++ heading1 "Converb" ++
frameTable ( frameTable (
tr (th "Imperfective" ++ td (x.converb.imperfective)) ++ tr (th "Imperfective" ++ td (x.Converb.Imperfective)) ++
tr (th "Simultaneous" ++ td (x.converb.simultaneous)) ++ tr (th "Simultaneous" ++ td (x.Converb.Simultaneous)) ++
tr (th "Perfective" ++ td (x.converb.perfective)) ++ tr (th "Perfective" ++ td (x.Converb.Perfective)) ++
tr (th "Futute I" ++ td (x.converb.futCon1)) ++ tr (th "Futute I" ++ td (x.Converb.FutCon1)) ++
tr (th "Futute II" ++ td (x.converb.futCon2)) ++ tr (th "Futute II" ++ td (x.Converb.FutCon2)) ++
tr (th "Connegative" ++ td (x.converb.negative))) ++ tr (th "Connegative" ++ td (x.Converb.Negative))) ++
heading1 "Passive" ++ heading1 "Passive" ++
paragraph x.passive ++ paragraph x.Passive ++
heading1 "Participle" ++ heading1 "Participle" ++
frameTable ( frameTable (
tr (th "Resultative" ++ td (x.participle ! Resultative)) ++ tr (th "Resultative" ++ td (x.Participle ! Resultative)) ++
tr (th "Subject" ++ td (x.participle ! Subject))) ++ tr (th "Subject" ++ td (x.Participle ! Subject))) ++
heading1 "Past" ++ heading1 "Past" ++
frameTable ( frameTable (
tr (th "" ++ th "Sg" ++ th "Pl") ++ tr (th "" ++ th "Sg" ++ th "Pl") ++
tr (th "P1" ++ td (x.past ! P1 ! Sg) ++ td (x.past ! P1 ! 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 "P2" ++ td (x.Past ! P2 ! Sg) ++ td (x.Past ! P2 ! Pl)) ++
tr (th "P3" ++ td (x.past ! P3 ! Sg) ++ td (x.past ! P3 ! Pl))) ++ tr (th "P3" ++ td (x.Past ! P3 ! Sg) ++ td (x.Past ! P3 ! Pl))) ++
heading1 "Subjunctive" ++ heading1 "Subjunctive" ++
frameTable ( frameTable (
tr (intagAttr "th" "colspan=\"2\"" "" ++ th "Sg" ++ th "Pl") ++ tr (intagAttr "th" "colspan=\"2\"" "" ++ th "Sg" ++ th "Pl") ++
tr (intagAttr "th" "rowspan=\"3\"" "Perfect" ++ tr (intagAttr "th" "rowspan=\"3\"" "Perfect" ++
th "P1" ++ td (x.subjunctive ! Perfect ! P1 ! Sg) ++ td (x.subjunctive ! Perfect ! P1 ! Pl)) ++ 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 "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 (th "P3" ++ td (x.Subjunctive ! Perfect ! P3 ! Sg) ++ td (x.Subjunctive ! Perfect ! P3 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"3\"" "Non_Past" ++ tr (intagAttr "th" "rowspan=\"3\"" "Non_Past" ++
th "P1" ++ td (x.subjunctive ! Non_Past ! P1 ! Sg) ++ td (x.subjunctive ! Non_Past ! P1 ! Pl)) ++ 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 "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))) ++ tr (th "P3" ++ td (x.Subjunctive ! Non_Past ! P3 ! Sg) ++ td (x.Subjunctive ! Non_Past ! P3 ! Pl))) ++
heading1 "Conditional" ++ heading1 "Conditional" ++
frameTable ( frameTable (
tr (intagAttr "th" "colspan=\"2\"" "" ++ th "Sg" ++ th "Pl") ++ tr (intagAttr "th" "colspan=\"2\"" "" ++ th "Sg" ++ th "Pl") ++
tr (intagAttr "th" "rowspan=\"3\"" "Perfect" ++ tr (intagAttr "th" "rowspan=\"3\"" "Perfect" ++
th "P1" ++ td (x.conditional ! Perfect ! P1 ! Sg) ++ td (x.conditional ! Perfect ! P1 ! Pl)) ++ 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 "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 (th "P3" ++ td (x.Conditional ! Perfect ! P3 ! Sg) ++ td (x.Conditional ! Perfect ! P3 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"4\"" "Non_Past" ++ tr (intagAttr "th" "rowspan=\"4\"" "Non_Past" ++
th "P1" ++ td (x.conditional ! Non_Past ! P1 ! Sg) ++ td (x.conditional ! Non_Past ! P1 ! Pl)) ++ 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 "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))) ++ tr (th "P3" ++ td (x.Conditional ! Non_Past ! P3 ! Sg) ++ td (x.Conditional ! Non_Past ! P3 ! Pl))) ++
heading1 "Imperative" ++ heading1 "Imperative" ++
frameTable ( frameTable (
tr (th "Sg" ++ th "Pl") ++ tr (th "Sg" ++ th "Pl") ++
tr (td (x.imperative ! Sg) ++ td (x.imperative ! Pl))) ; tr (td (x.Imperative_Jussive ! Sg) ++ td (x.Imperative_Jussive ! Pl))) ;
s3=[] s3=[]
} ; } ;
lin lin
+2 -6
View File
@@ -2,9 +2,5 @@ concrete GrammarHye of Grammar =
TenseX, TenseX,
PhraseHye, PhraseHye,
NounHye, NounHye,
VerbHye, AdjectiveHye ** {
AdjectiveHye, }
AdverbHye,
SentenceHye,
StructuralHye ** {
}
+1 -4
View File
@@ -1,5 +1,2 @@
concrete LexiconHye of Lexicon = CatHye ** open ParadigmsHye in { concrete LexiconHye of Lexicon = CatHye ** open ParadigmsHye in {
lin apple_N = mkN001 "խնձոր" ; }
lin man_N = mkN047 "տղամարդ" ;
lin woman_N = mkN034 "կին" ;
}
+375 -375
View File
File diff suppressed because it is too large Load Diff
+3 -34
View File
@@ -1,35 +1,4 @@
concrete NounHye of Noun = CatHye ** open ResHye in { concrete NounHye of Noun = CatHye ** {
lin AdjCN ap cn = { lin
s = \\sp,c,n => UseN n = n ;
case ap.isPre of {
True => ap.s ! Indef ! Nom ! Sg ++ cn.s ! sp ! c ! n;
False => cn.s ! sp ! c ! n ++ ap.s ! Indef ! Nom ! Sg
}
} ;
lin AdvCN cn adv = {
s = \\sp,c,num => adv.s ++ cn.s ! sp ! c ! num
} ;
lin DefArt = {s = []; sp = Def} ;
lin DetCN det cn = {s = \\c => det.s ++ cn.s ! det.sp ! c ! det.n;
a = {n=det.n; p=P3}} ;
lin DetQuant quant num = {s = quant.s ++ num.s; n = num.n; sp=quant.sp} ;
lin IndefArt = {s = "մի"; sp = Indef} ;
lin NumPl = {s = []; n = Pl} ;
lin NumSg = {s = []; n = Sg} ;
lin MassNP cn = {
s = \\c => cn.s ! Indef ! c ! Sg;
a = {n=Sg; p=P3}
} ;
lin PossPron pron = {s = pron.empty; sp = Poss pron.a.p} ;
lin UseN n = {
s = \\sp,c,num =>
case <sp,c> of {
<Def,Nom> => n.def_nom ! num ;
<Def,Dat> => n.def_dat ! num ;
<Poss P1,_> => n.poss1 ! c ! num ;
<Poss P2,_> => n.poss2 ! c ! num ;
_ => n.s ! c ! num
}
} ;
lin UsePron pron = {s = \\c => pron.s; a=pron.a} ;
} }
+3 -12
View File
@@ -468,19 +468,16 @@ oper
mkInterj : Str -> Interj = \s -> lin Interj {s=s} ; mkInterj : Str -> Interj = \s -> lin Interj {s=s} ;
mkMU : Str -> MU = \s -> lin MU {s=s; isPre=False} ; mkMU : Str -> MU = \s -> lin MU {s=s; isPre=False} ;
mkPrep : Str -> Prep = \s -> lin Prep {s=s; c=Dat; isPre=False} ; mkPrep : Str -> Prep = \s -> lin Prep {s=s; c=Dat} ;
singular : Number = Sg ;
plural : Number = Pl ;
mkIAdv : Str -> IAdv = \s -> lin IAdv {s=s} ; mkIAdv : Str -> IAdv = \s -> lin IAdv {s=s} ;
mkIP : Str -> IP = \s -> lin IP {s=s} ; mkIP : Str -> IP = \s -> lin IP {s=s} ;
mkIQuant : Str -> IQuant = \s -> lin IQuant {s=s} ; mkIQuant : Str -> IQuant = \s -> lin IQuant {s=s} ;
mkIDet : Str -> IDet = \s -> lin IDet {s=s} ; mkIDet : Str -> IDet = \s -> lin IDet {s=s} ;
mkSubj : Str -> Subj = \s -> lin Subj {s=s} ; mkSubj : Str -> Subj = \s -> lin Subj {s=s} ;
mkQuant : Str -> Quant = \s -> lin Quant {s=s; sp=Indef} ; mkQuant : Str -> Quant = \s -> lin Quant {s=s} ;
mkDet : Str -> Number -> Det = \s,n -> lin Det {s=s; n=n; sp=Indef} ;
mkPredet : Str -> Predet = \s -> lin Predet {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} ; mkCard : Str -> Card = \s -> lin Card {s=s} ;
mkConj : Str -> Conj = \s -> lin Conj {s=s} ; mkConj : Str -> Conj = \s -> lin Conj {s=s} ;
mkPConj : Str -> PConj = \s -> lin PConj {s=s} ; mkPConj : Str -> PConj = \s -> lin PConj {s=s} ;
@@ -491,10 +488,4 @@ oper
mkSN : Str -> SN = \s -> lin SN {s=s} ; mkSN : Str -> SN = \s -> lin SN {s=s} ;
mkPN : Str -> PN = \s -> lin PN {s=s} ; mkPN : Str -> PN = \s -> lin PN {s=s} ;
mkPron : Str -> Number -> Person -> Pron = \s,n,p ->
lin Pron {
s = s ;
empty = [] ;
a = {n = n; p = p}
} ;
} }
+18 -17
View File
@@ -1,14 +1,16 @@
resource ResHye = ParamX ** { resource ResHye = {
param Aspect = Non_Past | Perfect ; param Aspect = Non_Past | Perfect ;
param Person = P1 | P3 | P2 ;
param Number = Sg | Pl ;
param Case = Nom | Dat | Ablat | Instr | Loc ; param Case = Nom | Dat | Ablat | Instr | Loc ;
param PartType = Resultative | Subject ; 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: Number => Str; passive: Str; past: Person => Number => Str; participle: PartType => Str; subjunctive: Aspect => Person => Number => Str} ; -- 898 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 = 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 -> \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 ; { s = f1 ;
causative = f2 ; Causative = f2 ;
conditional = table { Conditional = table {
Perfect => table { Perfect => table {
P1 => table { P1 => table {
Sg => f3 ; Sg => f3 ;
@@ -38,19 +40,19 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_
} }
} }
} ; } ;
converb = { imperfective = f15 ; Converb = { Imperfective = f15 ;
futCon1 = f16 ; FutCon1 = f16 ;
futCon2 = f17 ; FutCon2 = f17 ;
negative = f18 ; Negative = f18 ;
perfective = f19 ; Perfective = f19 ;
simultaneous = f20 Simultaneous = f20
} ; } ;
imperative = table { Imperative_Jussive = table {
Sg => f21 ; Sg => f21 ;
Pl => f22 Pl => f22
} ; } ;
passive = f23 ; Passive = f23 ;
past = table { Past = table {
P1 => table { P1 => table {
Sg => f24 ; Sg => f24 ;
Pl => f25 Pl => f25
@@ -64,11 +66,11 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_
Pl => f29 Pl => f29
} }
} ; } ;
participle = table { Participle = table {
Resultative => f30 ; Resultative => f30 ;
Subject => f31 Subject => f31
} ; } ;
subjunctive = table { Subjunctive = table {
Perfect => table { Perfect => table {
P1 => table { P1 => table {
Sg => f32 ; Sg => f32 ;
@@ -100,8 +102,7 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_
} }
} ; } ;
param Species = Indef | Def | Poss Person ;
oper Agr = {n : Number; p : Person} ;
oper Noun = {s: Case => Number => Str; def_dat: Number => Str; def_nom: Number => Str; poss1: Case => Number => Str; poss2: Case => Number => Str} ; -- 4880 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 = 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 -> \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 ->
-14
View File
@@ -1,14 +0,0 @@
concrete SentenceHye of Sentence = CatHye ** open Prelude,ResHye in {
lin PredVP np vp = {s = np.s ! Nom ++ vp.s;
conditional = \\a,n => np.s ! Nom ++ vp.conditional ! a ! P3 ! n;
converb = {imperfective = np.s ! Nom ++ vp.converb.imperfective;
futCon1 = np.s ! Nom ++ vp.converb.futCon1;
futCon2 = np.s ! Nom ++ vp.converb.futCon2;
negative = np.s ! Nom ++ vp.converb.negative;
perfective = np.s ! Nom ++ vp.converb.perfective;
simultaneous = np.s ! Nom ++ vp.converb.simultaneous};
passive = np.s ! Nom ++ vp.passive;
past = \\_,n => np.s ! Nom ++ vp.past ! P3 ! n;
participle = \\p => np.s ! Nom ++ vp.participle ! p;
subjunctive = \\a,n => np.s ! Nom ++ vp.subjunctive ! a ! P3 ! n} ;
}
-8
View File
@@ -1,8 +0,0 @@
concrete StructuralHye of Structural = CatHye ** open ResHye, ParadigmsHye in {
lin i_Pron = mkPron "ես" Sg P1 ;
lin youSg_Pron = mkPron "դու" Sg P2 ;
lin he_Pron, she_Pron, it_Pron = mkPron "նա" Sg P3 ;
lin we_Pron = mkPron "մեք" Pl P1 ;
lin youPl_Pron = mkPron "դուք" Pl P2 ;
lin they_Pron = mkPron "նոքա" Pl P3 ;
}
-35
View File
@@ -1,35 +0,0 @@
concrete VerbHye of Verb = CatHye ** open Prelude,ResHye in {
lin AdvVP vp adv = {s = adv.s ++ vp.s;
conditional = \\a,p,n => adv.s ++ vp.conditional ! a ! p ! n;
converb = {imperfective = adv.s ++ vp.converb.imperfective;
futCon1 = adv.s ++ vp.converb.futCon1;
futCon2 = adv.s ++ vp.converb.futCon2;
negative = adv.s ++ vp.converb.negative;
perfective = adv.s ++ vp.converb.perfective;
simultaneous = adv.s ++ vp.converb.simultaneous};
imperative = \\n => vp.imperative ! n ++ adv.s;
passive = adv.s ++ vp.passive;
past = \\p,n => adv.s ++ vp.past ! p ! n;
participle = \\p => adv.s ++ vp.participle ! p;
subjunctive = \\a,p,n => adv.s ++ vp.subjunctive ! a ! p ! n} ;
lin ComplSlash vp np = {s = vp.s ++ vp.c2.s ++ np.s ! vp.c2.c;
conditional = \\a,p,n => vp.conditional ! a ! p ! n
++ vp.c2.s ++ np.s ! vp.c2.c;
converb = {imperfective = vp.converb.imperfective
++ vp.c2.s ++ np.s ! vp.c2.c;
futCon1 = vp.converb.futCon1 ++ vp.c2.s ++ np.s ! vp.c2.c;
futCon2 = vp.converb.futCon2 ++ vp.c2.s ++ np.s ! vp.c2.c;
negative = vp.converb.negative ++ vp.c2.s ++ np.s ! vp.c2.c;
perfective = vp.converb.perfective
++ vp.c2.s ++ np.s ! vp.c2.c;
simultaneous = vp.converb.simultaneous
++ vp.c2.s ++ np.s ! vp.c2.c};
imperative = \\n => vp.imperative ! n ++ vp.c2.s ++ np.s ! Nom;
passive = vp.passive ++ vp.c2.s ++ np.s ! vp.c2.c;
past = \\p,n => vp.past ! p ! n ++ vp.c2.s ++ np.s ! vp.c2.c;
participle = \\p => vp.participle ! p ++ vp.c2.s ++ np.s ! vp.c2.c;
subjunctive = \\a,p,n => vp.subjunctive ! a ! p ! n
++ vp.c2.s ++ np.s ! vp.c2.c} ;
lin SlashV2a v = v ;
lin UseV v = v ;
}
+1 -11
View File
@@ -1,14 +1,4 @@
concrete AdjectiveBel of Adjective = CatBel ** open ResBel in { concrete AdjectiveBel of Adjective = CatBel ** {
lin lin
PositA a = a ; PositA a = a ;
ComparA a np = {s = \\c,gn => "больш" ++ a.s ! c ! gn ++ "за" ++ np.s ! Acc} ;
ComplA2 a np = {s = \\c,gn => a.s ! c ! gn ++ prepNP a.c2 np} ;
ReflA2 a = {s = \\c,gn => a.s ! c ! gn ++ "да сябе"} ;
UseA2 a = a ;
UseComparA a = {s = \\c,gn => "больш" ++ a.s ! c ! gn} ;
CAdvAP cadv ap np = {s = \\c,gn => cadv.s ++ ap.s ! c ! gn ++ cadv.p ++ np.s ! Nom} ;
AdjOrd ord = ord ;
SentAP ap sc = {s = \\c,gn => ap.s ! c ! gn ++ sc.s} ;
AdAP ada ap = {s = \\c,gn => ada.s ++ ap.s ! c ! gn} ;
AdvAP ap adv = {s = \\c,gn => ap.s ! c ! gn ++ adv.s} ;
} }
-13
View File
@@ -1,13 +0,0 @@
concrete AdverbBel of Adverb = CatBel ** open ResBel in {
lin
PositAdvAdj a = {s = a.s ! Nom ! GSg Neuter} ;
PrepNP prep np = {s = prepNP prep np} ;
ComparAdvAdj cadv a np = {s = cadv.s ++ a.s ! Nom ! GSg Neuter ++ cadv.p ++ np.s ! Nom} ;
ComparAdvAdjS cadv a s = {s = cadv.s ++ a.s ! Nom ! GSg Neuter ++ cadv.p ++ s.s} ;
AdAdv ada adv = {s = ada.s ++ adv.s} ;
PositAdAAdj a = {s = a.s ! Nom ! GSg Neuter} ;
SubjS subj s = {s = subj.s ++ s.s} ;
AdnCAdv cadv = {s = cadv.s} ;
}
+1 -2
View File
@@ -1,5 +1,4 @@
concrete AllBel of AllBelAbs = concrete AllBel of AllBelAbs =
LangBel, LangBel
ExtendBel
** **
{} ; {} ;
+2 -3
View File
@@ -1,4 +1,3 @@
abstract AllBelAbs = abstract AllBelAbs =
Lang, Lang
Extend ** {}
** {}
+16 -63
View File
@@ -1,68 +1,21 @@
concrete CatBel of Cat = CommonX ** open ResBel, (R = ParamX) in { concrete CatBel of Cat = CommonX ** open ResBel in {
lincat lincat N = Noun ;
S = {s : Str} ; lincat N2 = Noun ** {c2 : Compl} ;
QS = {s : Str} ; lincat N3 = Noun ** {c2,c3 : Compl} ;
RS = {s : Str} ; lincat V = V ;
Cl = {s : R.Tense => R.Polarity => Str} ; lincat VV,VS,VQ,VA = V ;
ClSlash = {s : R.Tense => R.Polarity => Str; c : Compl} ; lincat V2 = V ** {c2 : Compl} ;
SSlash = {s : Str; c : Compl} ; lincat V3,V2A,V2S,V2Q,V2V = V ** {c2,c3 : Compl} ;
Imp = {s : R.Polarity => Number => Str} ; lincat A = A ;
lincat A2 = A ** {c2 : Compl} ;
lincat Prep = Compl ;
lincat CN = CommonNoun ;
lincat AP = AdjPhrase ;
lincat S = {s : Str} ;
QCl = {s : R.Tense => R.Polarity => Str} ; lincat LN,SN,GN,PN = {s : Str} ;
IP = NPhrase ;
IComp = {s : Str} ;
IDet = {s : Case => Gender => Str; n : Number} ;
IQuant = {s : Case => Gender => Number => Str} ;
RCl = {s : R.Tense => R.Polarity => Str} ; linref V,VV,V2,V3,V2A,V2S,V2Q,V2V = \v -> v.infinitive ;
RP = {s : Str} ;
VP = VPhrase ;
Comp = {s : Agr => Str} ;
VPSlash = VSlash ;
N = Noun ;
N2 = Noun ** {c2 : Compl} ;
N3 = Noun ** {c2,c3 : Compl} ;
CN = CommonNoun ;
NP = NPhrase ;
Pron = {s: Case => Str; a: Agr} ;
Det = {s : Case => Gender => Str; n : Number} ;
Predet = {s : Case => Gender => Number => Str} ;
Quant = {s : Case => Gender => Number => Str} ;
Num = {s : Case => Gender => Str; n : Number} ;
Card = {s : Str; n : Number} ;
ACard = {s : Str; n : Number} ;
Ord = Adj ;
DAP = {s : Case => Gender => Str; n : Number} ;
Numeral = {s : Str} ;
Digits = {s : Str} ;
Decimal = {s : Str} ;
Conj = {s : Str; n : Number} ;
Subj = {s : Str} ;
Prep = Compl ;
V = Verb ;
VV,VS,VQ,VA = Verb ;
V2 = Verb ** {c2 : Compl} ;
V3,V2A,V2S,V2Q,V2V = Verb ** {c2,c3 : Compl} ;
A = Adj ;
A2 = Adj ** {c2 : Compl} ;
AP = AdjPhrase ;
LN = {s : Case => Str; g : Gender; n : Number} ;
PN = {s : Case => Str; g : Gender; n : Number} ;
GN = {s : Str; g : Gender} ;
SN = {s : Str} ;
linref
V,VV,V2,V3,V2A,V2S,V2Q,V2V = \v -> v.infinitive ;
N,N2,N3 = \n -> n.s ! Nom ! Sg ;
A,A2,AP,Ord = \a -> a.s ! Nom ! GSg Masc ;
NP,IP = \np -> np.s ! Nom ;
S,QS,RS = \s -> s.s ;
} }
-60
View File
@@ -1,60 +0,0 @@
concrete ConjunctionBel of Conjunction = CatBel ** open ResBel in {
lin
ConjS conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ;
ConjRS conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ;
ConjAP conj xs = {s = \\c,gn => xs.s1 ! c ! gn ++ conj.s ++ xs.s2 ! c ! gn} ;
ConjNP conj xs = {
s = \\c => xs.s1 ! c ++ conj.s ++ xs.s2 ! c ;
a = {g=Masc; n=conj.n; p=P3}
} ;
ConjAdv conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ;
ConjAdV conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ;
ConjIAdv conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ;
ConjCN conj xs = {
s = \\c,n => xs.s1 ! c ! n ++ conj.s ++ xs.s2 ! c ! n ;
voc = xs.voc ;
g = xs.g
} ;
ConjDet conj xs = {
s = \\c,g => xs.s1 ! c ! g ++ conj.s ++ xs.s2 ! c ! g ;
n = conj.n
} ;
BaseS x y = {s1 = x.s; s2 = y.s} ;
ConsS x xs = {s1 = x.s ++ "," ++ xs.s1; s2 = xs.s2} ;
BaseRS x y = {s1 = x.s; s2 = y.s} ;
ConsRS x xs = {s1 = x.s ++ "," ++ xs.s1; s2 = xs.s2} ;
BaseAdv x y = {s1 = x.s; s2 = y.s} ;
ConsAdv x xs = {s1 = x.s ++ "," ++ xs.s1; s2 = xs.s2} ;
BaseAdV x y = {s1 = x.s; s2 = y.s} ;
ConsAdV x xs = {s1 = x.s ++ "," ++ xs.s1; s2 = xs.s2} ;
BaseIAdv x y = {s1 = x.s; s2 = y.s} ;
ConsIAdv x xs = {s1 = x.s ++ "," ++ xs.s1; s2 = xs.s2} ;
BaseNP x y = {
s1 = x.s ;
s2 = y.s
} ;
ConsNP x xs = {
s1 = \\c => x.s ! c ++ "," ++ xs.s1 ! c ;
s2 = xs.s2
} ;
BaseAP x y = {s1 = x.s; s2 = y.s} ;
ConsAP x xs = {s1 = \\c,gn => x.s ! c ! gn ++ "," ++ xs.s1 ! c ! gn; s2 = xs.s2} ;
BaseCN x y = {s1 = x.s; s2 = y.s; voc = x.voc ++ "," ++ y.voc; g = x.g} ;
ConsCN x xs = {s1 = \\c,n => x.s ! c ! n ++ "," ++ xs.s1 ! c ! n; s2 = xs.s2; voc = x.voc ++ "," ++ xs.voc; g = xs.g} ;
BaseDAP x y = {s1 = x.s; s2 = y.s} ;
ConsDAP x xs = {s1 = \\c,g => x.s ! c ! g ++ "," ++ xs.s1 ! c ! g; s2 = xs.s2} ;
lincat
[S] = {s1,s2 : Str} ;
[RS] = {s1,s2 : Str} ;
[Adv] = {s1,s2 : Str} ;
[AdV] = {s1,s2 : Str} ;
[IAdv] = {s1,s2 : Str} ;
[NP] = {s1,s2 : Case => Str} ;
[AP] = {s1,s2 : Case => GenNum => Str} ;
[CN] = {s1,s2 : Case => Number => Str; voc : Str; g : Gender} ;
[DAP] = {s1,s2 : Case => Gender => Str} ;
}
-141
View File
@@ -1,141 +0,0 @@
concrete ConstructionBel of Construction = CatBel ** open ResBel, ParadigmsBel, (R = ParamX) in {
lincat
Timeunit, Hour, Weekday, Month, Monthday, Year, Language = {s : Str} ;
oper
adjVP : Adj -> VPhrase = \a -> {
s = \\t,p,agr => copula t p agr ++ a.s ! Nom ! genNum agr.g agr.n ;
inf = "быць" ++ a.s ! Nom ! GSg Masc ;
imp = \\p,_ => neg p ++ "будзь" ++ a.s ! Nom ! GSg Masc
} ;
lin
hungry_VP = adjVP (mkA "галодны") ;
thirsty_VP = adjVP (mkA "спрагнены") ;
tired_VP = adjVP (mkA "стомлены") ;
scared_VP = adjVP (mkA "спалоханы") ;
ill_VP = adjVP (mkA "хворы") ;
ready_VP = adjVP (mkA "гатовы") ;
has_age_VP card = {
s = \\t,p,a => copula t p a ++ card.s ++ "гадоў" ;
inf = card.s ++ "гадоў" ;
imp = \\p,_ => neg p ++ card.s ++ "гадоў"
} ;
have_name_Cl np name = {s = \\t,p => np.s ! Gen ++ "імя" ++ name.s ! Nom} ;
married_Cl np spouse = {s = \\t,p => np.s ! Nom ++ copula t p np.a ++ "жанаты" ++ "з" ++ spouse.s ! Instr} ;
what_name_QCl np = {s = \\t,p => "як" ++ "завуць" ++ np.s ! Acc} ;
how_old_QCl np = {s = \\t,p => "колькі гадоў" ++ np.s ! Dat} ;
how_far_QCl np = {s = \\t,p => "як далёка" ++ np.s ! Nom} ;
weather_adjCl ap = {s = \\t,p => copula t p defaultAgr ++ ap.s ! Nom ! GSg Neuter} ;
is_right_VP = adjVP (mkA "правы") ;
is_wrong_VP = adjVP (mkA "няправы") ;
n_units_AP card cn a = {s = \\c,gn => card.s ++ cn.s ! Gen ! Pl ++ a.s ! c ! gn} ;
n_units_of_NP card cn np = mkSimpleNP (card.s ++ cn.s ! Gen ! Pl ++ np.s ! Gen) Neuter Sg P3 ;
n_unit_CN card unit cn = nounFromStr (card.s ++ unit.s ! Nom ! Pl ++ cn.s ! Nom ! Sg) cn.g ;
bottle_of_CN np = nounFromStr ("бутэлька" ++ np.s ! Gen) Fem ;
cup_of_CN np = nounFromStr ("кубак" ++ np.s ! Gen) Masc ;
glass_of_CN np = nounFromStr ("шклянка" ++ np.s ! Gen) Fem ;
few_X_short_of_Y np x y = {s = np.s ! Nom ++ "бракуе" ++ x.s ! Gen ! Pl ++ "да" ++ y.s ! Gen ! Sg} ;
timeunitAdv card unit = {s = card.s ++ unit.s} ;
timeunitRange c1 c2 unit = {s = c1.s ++ "да" ++ c2.s ++ unit.s} ;
oneHour = {s = "1"} ; twoHour = {s = "2"} ; threeHour = {s = "3"} ; fourHour = {s = "4"} ;
fiveHour = {s = "5"} ; sixHour = {s = "6"} ; sevenHour = {s = "7"} ; eightHour = {s = "8"} ;
nineHour = {s = "9"} ; tenHour = {s = "10"} ; elevenHour = {s = "11"} ; twelveHour = {s = "12"} ;
thirteenHour = {s = "13"} ; fourteenHour = {s = "14"} ; fifteenHour = {s = "15"} ; sixteenHour = {s = "16"} ;
seventeenHour = {s = "17"} ; eighteenHour = {s = "18"} ; nineteenHour = {s = "19"} ; twentyHour = {s = "20"} ;
twentyOneHour = {s = "21"} ; twentyTwoHour = {s = "22"} ; twentyThreeHour = {s = "23"} ; twentyFourHour = {s = "24"} ;
timeHour h = {s = "а" ++ h.s} ;
timeHourMinute h m = {s = "а" ++ h.s ++ ":" ++ m.s} ;
weekdayPunctualAdv d = {s = "у" ++ d.s} ;
weekdayHabitualAdv d = {s = "па" ++ d.s} ;
weekdayLastAdv d = {s = "мінулай" ++ d.s} ;
weekdayNextAdv d = {s = "наступнай" ++ d.s} ;
monthAdv m = {s = "у" ++ m.s} ;
yearAdv y = {s = "у" ++ y.s} ;
dayMonthAdv d m = {s = d.s ++ m.s} ;
monthYearAdv m y = {s = m.s ++ y.s} ;
dayMonthYearAdv d m y = {s = d.s ++ m.s ++ y.s} ;
intYear i = {s = i.s} ;
intMonthday i = {s = i.s} ;
InLanguage l = {s = "па-" ++ l.s} ;
weekdayN d = nounFromStr d.s Masc ;
monthN m = nounFromStr m.s Masc ;
weekdayPN d = mkPN d.s ;
monthPN m = mkPN m.s ;
languageNP l = mkSimpleNP l.s Neuter Sg P3 ;
languageCN l = nounFromStr l.s Neuter ;
second_Timeunit = {s = "секунд"} ;
minute_Timeunit = {s = "хвілін"} ;
hour_Timeunit = {s = "гадзін"} ;
day_Timeunit = {s = "дзён"} ;
week_Timeunit = {s = "тыдняў"} ;
month_Timeunit = {s = "месяцаў"} ;
year_Timeunit = {s = "гадоў"} ;
monday_Weekday = {s = "панядзелак"} ;
tuesday_Weekday = {s = "аўторак"} ;
wednesday_Weekday = {s = "серада"} ;
thursday_Weekday = {s = "чацвер"} ;
friday_Weekday = {s = "пятніца"} ;
saturday_Weekday = {s = "субота"} ;
sunday_Weekday = {s = "нядзеля"} ;
january_Month = {s = "студзень"} ;
february_Month = {s = "люты"} ;
march_Month = {s = "сакавік"} ;
april_Month = {s = "красавік"} ;
may_Month = {s = "май"} ;
june_Month = {s = "чэрвень"} ;
july_Month = {s = "ліпень"} ;
august_Month = {s = "жнівень"} ;
september_Month = {s = "верасень"} ;
october_Month = {s = "кастрычнік"} ;
november_Month = {s = "лістапад"} ;
december_Month = {s = "снежань"} ;
afrikaans_Language = {s = "афрыкаанс"} ;
amharic_Language = {s = "амхарску"} ;
arabic_Language = {s = "арабску"} ;
bulgarian_Language = {s = "балгарску"} ;
catalan_Language = {s = "каталанску"} ;
chinese_Language = {s = "кітайску"} ;
danish_Language = {s = "дацку"} ;
dutch_Language = {s = "нідэрландску"} ;
english_Language = {s = "англійску"} ;
estonian_Language = {s = "эстонску"} ;
finnish_Language = {s = "фінску"} ;
french_Language = {s = "французску"} ;
german_Language = {s = "нямецку"} ;
greek_Language = {s = "грэцку"} ;
hebrew_Language = {s = "іўрыце"} ;
hindi_Language = {s = "хіндзі"} ;
japanese_Language = {s = "японску"} ;
italian_Language = {s = "італьянску"} ;
latin_Language = {s = "лацінску"} ;
latvian_Language = {s = "латышску"} ;
maltese_Language = {s = "мальтыйску"} ;
nepali_Language = {s = "непальску"} ;
norwegian_Language = {s = "нарвежску"} ;
persian_Language = {s = "персідску"} ;
polish_Language = {s = "польску"} ;
punjabi_Language = {s = "панджабі"} ;
romanian_Language = {s = "румынску"} ;
russian_Language = {s = "руску"} ;
sindhi_Language = {s = "сіндхі"} ;
spanish_Language = {s = "іспанску"} ;
swahili_Language = {s = "суахілі"} ;
swedish_Language = {s = "шведску"} ;
thai_Language = {s = "тайску"} ;
turkish_Language = {s = "турэцку"} ;
urdu_Language = {s = "урду"} ;
}
+6 -6
View File
@@ -29,12 +29,12 @@ lin
paragraph (x.infinitive) ++ paragraph (x.infinitive) ++
heading1 "Present" ++ heading1 "Present" ++
frameTable ( frameTable (
tr (intagAttr "th" "rowspan=\"6\"" "Pres" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td ((x.active ! Imperf).pres ! P1 ! Sg)) ++ 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 (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 (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 (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 (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td ((x.active ! Imperf).Pres ! P3 ! Sg)) ++
tr (th "Pl" ++ td ((x.active ! Imperf).pres ! P3 ! Pl))) ++ tr (th "Pl" ++ td ((x.active ! Imperf).Pres ! P3 ! Pl))) ++
heading1 "Imperative" ++ heading1 "Imperative" ++
frameTable ( frameTable (
tr (th "Sg" ++ td (x.imperative ! Sg)) ++ tr (th "Sg" ++ td (x.imperative ! Sg)) ++
-244
View File
@@ -1,244 +0,0 @@
--# -path=.:../abstract:../common:prelude
concrete ExtendBel of Extend = CatBel ** open ResBel, (R = ParamX), ParadigmsBel in {
lincat
VPS = {s : Agr => Str} ;
[VPS] = {s1,s2 : Agr => Str} ;
VPI = {s : Str} ;
[VPI] = {s1,s2 : Str} ;
VPS2 = {s : Agr => Str; c : Compl; post : Str} ;
[VPS2] = {s1,s2 : Agr => Str; c : Compl; post : Str} ;
VPI2 = {s : Str; c : Compl; post : Str} ;
[VPI2] = {s1,s2 : Str; c : Compl; post : Str} ;
[Comp] = {s1,s2 : Agr => Str} ;
[Imp] = {s1,s2 : R.Polarity => Number => Str} ;
RNP = {s : Case => Str} ;
RNPList = {s1,s2 : Case => Str} ;
X = {s : Str} ;
lin
iFem_Pron = mkPron "я" "мяне" "мне" "мяне" "мне" "мной" Fem Sg P1 ;
youFem_Pron = mkPron "ты" "цябе" "табе" "цябе" "табе" "табой" Fem Sg P2 ;
weFem_Pron = mkPron "мы" "нас" "нам" "нас" "нас" "намі" Fem Pl P1 ;
youPlFem_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Fem Pl P2 ;
theyFem_Pron = mkPron "яны" "іх" "ім" "іх" "іх" "імі" Fem Pl P3 ;
theyNeutr_Pron = mkPron "яны" "іх" "ім" "іх" "іх" "імі" Neuter Pl P3 ;
youPolFem_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Fem Pl P2 ;
youPolPl_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Fem Pl P2 ;
youPolPlFem_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Fem Pl P2 ;
GenNP np = {s = \\_,_,_ => np.s ! Gen} ;
GenIP ip = {s = \\_,_,_ => ip.s ! Gen} ;
GenRP num cn = {s = cn.s ! Gen ! num.n ++ "якога"} ;
GenModNP num np cn = {
s = \\c => np.s ! Gen ++ cn.s ! c ! num.n ;
a = {g=cn.g; n=num.n; p=P3}
} ;
GenModIP num ip cn = {
s = \\c => ip.s ! Gen ++ cn.s ! c ! num.n ;
a = {g=cn.g; n=num.n; p=P3}
} ;
CompBareCN cn = {s = \\a => cn.s ! Nom ! a.n} ;
PiedPipingQuestSlash ip cl = {s = \\t,p => cl.c.s ++ ip.s ! cl.c.c ++ cl.s ! t ! p} ;
PiedPipingRelSlash rp cl = {s = \\t,p => rp.s ++ cl.s ! t ! p} ;
StrandQuestSlash ip cl = {s = \\t,p => cl.c.s ++ ip.s ! cl.c.c ++ cl.s ! t ! p} ;
StrandRelSlash rp cl = {s = \\t,p => rp.s ++ cl.s ! t ! p} ;
EmptyRelSlash cl = {s = \\t,p => "што" ++ cl.s ! t ! p} ;
MkVPS temp pol vp = {s = \\a => vp.s ! temp.t ! pol.p ! a} ;
ConjVPS conj xs = {s = \\a => xs.s1 ! a ++ conj.s ++ xs.s2 ! a} ;
PredVPS np vps = {s = np.s ! Nom ++ vps.s ! np.a} ;
SQuestVPS np vps = {s = np.s ! Nom ++ vps.s ! np.a} ;
QuestVPS ip vps = {s = ip.s ! Nom ++ vps.s ! ip.a} ;
RelVPS rp vps = {s = rp.s ++ vps.s ! defaultAgr} ;
BaseVPS x y = {s1 = x.s; s2 = y.s} ;
ConsVPS x xs = {s1 = \\a => x.s ! a ++ "," ++ xs.s1 ! a; s2 = xs.s2} ;
ExistS temp pol np = {s = copula temp.t pol.p np.a ++ np.s ! Nom} ;
ExistNPQS temp pol np = {s = copula temp.t pol.p np.a ++ np.s ! Nom} ;
ExistIPQS temp pol ip = {s = copula temp.t pol.p ip.a ++ ip.s ! Nom} ;
MkVPI vp = {s = vp.inf} ;
ConjVPI conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ;
ComplVPIVV vv vpi = {
s = \\t,p,a => finiteVerb vv t p a ++ vpi.s ;
inf = vv.infinitive ++ vpi.s ;
imp = \\p,n => neg p ++ vv.imperative ! n ++ vpi.s
} ;
BaseVPI x y = {s1 = x.s; s2 = y.s} ;
ConsVPI x xs = {s1 = x.s ++ "," ++ xs.s1; s2 = xs.s2} ;
MkVPS2 temp pol vp = {s = \\a => vp.s ! temp.t ! pol.p ! a; c = vp.c; post = vp.post} ;
ConjVPS2 conj xs = {s = \\a => xs.s1 ! a ++ conj.s ++ xs.s2 ! a; c = xs.c; post = xs.post} ;
ComplVPS2 vps np = {s = \\a => vps.s ! a ++ prepNP vps.c np ++ vps.post} ;
ReflVPS2 vps rnp = {s = \\a => vps.s ! a ++ rnp.s ! vps.c.c ++ vps.post} ;
BaseVPS2 x y = {s1 = x.s; s2 = y.s; c = x.c; post = x.post ++ y.post} ;
ConsVPS2 x xs = {s1 = \\a => x.s ! a ++ "," ++ xs.s1 ! a; s2 = xs.s2; c = xs.c; post = x.post ++ xs.post} ;
MkVPI2 vp = {s = vp.inf; c = vp.c; post = vp.post} ;
ConjVPI2 conj xs = {s = xs.s1 ++ conj.s ++ xs.s2; c = xs.c; post = xs.post} ;
ComplVPI2 vpi np = {s = vpi.s ++ prepNP vpi.c np ++ vpi.post} ;
BaseVPI2 x y = {s1 = x.s; s2 = y.s; c = x.c; post = x.post ++ y.post} ;
ConsVPI2 x xs = {s1 = x.s ++ "," ++ xs.s1; s2 = xs.s2; c = xs.c; post = x.post ++ xs.post} ;
ConjComp conj xs = {s = \\a => xs.s1 ! a ++ conj.s ++ xs.s2 ! a} ;
BaseComp x y = {s1 = x.s; s2 = y.s} ;
ConsComp x xs = {s1 = \\a => x.s ! a ++ "," ++ xs.s1 ! a; s2 = xs.s2} ;
ConjImp conj xs = {s = \\p,n => xs.s1 ! p ! n ++ conj.s ++ xs.s2 ! p ! n} ;
BaseImp x y = {s1 = x.s; s2 = y.s} ;
ConsImp x xs = {s1 = \\p,n => x.s ! p ! n ++ "," ++ xs.s1 ! p ! n; s2 = xs.s2} ;
ProDrop pron = pron ;
ICompAP ap = {s = ap.s ! Nom ! GSg Masc} ;
IAdvAdv adv = {s = adv.s} ;
CompIQuant iq = {s = iq.s ! Nom ! Masc ! Sg} ;
PrepCN prep cn = {s = prep.s ++ cn.s ! prep.c ! Sg} ;
FocusObj np ss = {s = np.s ! Acc ++ ss.s} ;
FocusAdv adv s = {s = adv.s ++ s.s} ;
FocusAdV adv s = {s = adv.s ++ s.s} ;
FocusAP ap np = {s = ap.s ! Nom ! genNum np.a.g np.a.n ++ np.s ! Nom} ;
PresPartAP vp = adjFromStr vp.inf ;
EmbedPresPart vp = {s = vp.inf} ;
PastPartAP vp = adjFromStr vp.inf ;
PastPartAgentAP vp np = adjFromStr (vp.inf ++ prepNP (mkPrep "кім" instrumental) np) ;
PassVPSlash vp = {
s = \\t,p,a => copula t p a ++ vp.inf ;
inf = "быць" ++ vp.inf ;
imp = \\p,_ => neg p ++ "будзь" ++ vp.inf
} ;
PassAgentVPSlash vp np = addAdvVP (PassVPSlash vp) (prepNP (mkPrep "кім" instrumental) np) ;
NominalizeVPSlashNP vp np = mkSimpleNP (vp.inf ++ prepNP vp.c np) Neuter Sg P3 ;
ProgrVPSlash vp = vp ;
A2VPSlash a = {
s = \\t,p,agr => copula t p agr ++ a.s ! Nom ! genNum agr.g agr.n ;
inf = a.s ! Nom ! GSg Masc ;
c = a.c2 ;
imp = \\p,_ => neg p ++ a.s ! Nom ! GSg Masc ;
post = []
} ;
N2VPSlash n = {
s = \\t,p,agr => copula t p agr ++ n.s ! Nom ! agr.n ;
inf = n.s ! Nom ! Sg ;
c = n.c2 ;
imp = \\p,_ => neg p ++ n.s ! Nom ! Sg ;
post = []
} ;
ExistsNP np = {s = \\t,p => copula t p np.a ++ np.s ! Nom} ;
ExistCN cn = {s = \\t,p => copula t p {g=cn.g; n=Sg; p=P3} ++ cn.s ! Nom ! Sg} ;
ExistMassCN cn = ExistCN cn ;
ExistPluralCN cn = {s = \\t,p => copula t p {g=cn.g; n=Pl; p=P3} ++ cn.s ! Nom ! Pl} ;
AdvIsNP adv np = {s = \\t,p => adv.s ++ copula t p np.a ++ np.s ! Nom} ;
AdvIsNPAP adv np ap = {s = \\t,p => adv.s ++ copula t p np.a ++ np.s ! Nom ++ ap.s ! Nom ! genNum np.a.g np.a.n} ;
PurposeVP vp = {s = "каб" ++ vp.inf} ;
ComplBareVS vs s = {
s = \\t,p,a => finiteVerb vs t p a ++ s.s ;
inf = vs.infinitive ++ s.s ;
imp = \\p,n => neg p ++ vs.imperative ! n ++ s.s
} ;
SlashBareV2S v s = {
s = \\t,p,a => finiteVerb v t p a ;
inf = v.infinitive ++ s.s ;
c = v.c2 ;
imp = \\p,n => neg p ++ v.imperative ! n ;
post = s.s
} ;
ComplDirectVS vs utt = {
s = \\t,p,a => finiteVerb vs t p a ++ utt.s ;
inf = vs.infinitive ++ utt.s ;
imp = \\p,n => neg p ++ vs.imperative ! n ++ utt.s
} ;
ComplDirectVQ vq utt = {
s = \\t,p,a => finiteVerb vq t p a ++ utt.s ;
inf = vq.infinitive ++ utt.s ;
imp = \\p,n => neg p ++ vq.imperative ! n ++ utt.s
} ;
FrontComplDirectVS np vs utt = {s = \\t,p => utt.s ++ np.s ! Nom ++ finiteVerb vs t p np.a} ;
FrontComplDirectVQ np vq utt = {s = \\t,p => utt.s ++ np.s ! Nom ++ finiteVerb vq t p np.a} ;
PredAPVP ap vp = {s = \\t,p => copula t p defaultAgr ++ ap.s ! Nom ! GSg Neuter ++ vp.inf} ;
AdjAsCN ap = nounFromStr (ap.s ! Nom ! GSg Masc) Masc ;
AdjAsNP ap = mkSimpleNP (ap.s ! Nom ! GSg Masc) Masc Sg P3 ;
PredIAdvVP iadv vp = {s = \\t,p => iadv.s ++ vp.inf} ;
EmbedSSlash ss = {s = ss.s} ;
ReflRNP vp rnp = {
s = \\t,p,a => vp.s ! t ! p ! a ++ rnp.s ! vp.c.c ++ vp.post ;
inf = vp.inf ++ rnp.s ! vp.c.c ;
imp = \\p,n => vp.imp ! p ! n ++ rnp.s ! vp.c.c ++ vp.post
} ;
ReflPron = {s = caseTable "сябе"} ;
ReflPoss num cn = {s = \\c => "свой" ++ cn.s ! c ! num.n} ;
PredetRNP pred rnp = {s = \\c => pred.s ! c ! Masc ! Sg ++ rnp.s ! c} ;
AdvRNP np prep rnp = {s = \\c => np.s ! c ++ prep.s ++ rnp.s ! prep.c} ;
AdvRVP vp prep rnp = addAdvVP vp (prep.s ++ rnp.s ! prep.c) ;
AdvRAP ap prep rnp = {s = \\c,gn => ap.s ! c ! gn ++ prep.s ++ rnp.s ! prep.c} ;
ReflA2RNP a rnp = {s = \\c,gn => a.s ! c ! gn ++ a.c2.s ++ rnp.s ! a.c2.c} ;
PossPronRNP pron num cn rnp = {
s = \\c => pron.s ! Gen ++ cn.s ! c ! num.n ++ rnp.s ! Gen ;
a = {g=cn.g; n=num.n; p=P3}
} ;
ConjRNP conj xs = {s = \\c => xs.s1 ! c ++ conj.s ++ xs.s2 ! c} ;
Base_rr_RNP x y = {s1 = x.s; s2 = y.s} ;
Base_nr_RNP x y = {s1 = x.s; s2 = y.s} ;
Base_rn_RNP x y = {s1 = x.s; s2 = y.s} ;
Cons_rr_RNP x xs = {s1 = \\c => x.s ! c ++ "," ++ xs.s1 ! c; s2 = xs.s2} ;
Cons_nr_RNP x xs = {s1 = \\c => x.s ! c ++ "," ++ xs.s1 ! c; s2 = xs.s2} ;
ReflPossPron = mkQuant "свой" ;
ComplGenVV vv ant pol vp = {
s = \\t,p,a => finiteVerb vv t p a ++ neg pol.p ++ vp.inf ;
inf = vv.infinitive ++ neg pol.p ++ vp.inf ;
imp = \\p,n => neg p ++ vv.imperative ! n ++ neg pol.p ++ vp.inf
} ;
CompoundN n1 n2 = {
s = \\c,n => n1.s ! Nom ! Sg ++ n2.s ! c ! n ;
voc = n1.voc ++ n2.voc ;
g = n2.g
} ;
CompoundAP n a = {s = \\c,gn => n.s ! Nom ! Sg ++ a.s ! c ! gn} ;
GerundCN vp = nounFromStr vp.inf Neuter ;
GerundNP vp = mkSimpleNP vp.inf Neuter Sg P3 ;
GerundAdv vp = {s = vp.inf} ;
WithoutVP vp = {s = "без" ++ vp.inf} ;
ByVP vp = {s = "праз" ++ vp.inf} ;
InOrderToVP vp = {s = "каб" ++ vp.inf} ;
ApposNP np app = {s = \\c => np.s ! c ++ app.s ! Nom; a = np.a} ;
AdAdV ada adv = {s = ada.s ++ adv.s} ;
UttAdV adv = {s = adv.s} ;
PositAdVAdj a = {s = a.s ! Nom ! GSg Neuter} ;
CompS s = {s = \\_ => s.s} ;
CompQS qs = {s = \\_ => qs.s} ;
CompVP ant pol vp = {s = \\_ => neg pol.p ++ vp.inf} ;
UncontractedNeg = {s = []; p = R.Neg} ;
UttVPShort vp = {s = vp.inf} ;
ComplSlashPartLast vp np = {
s = \\t,p,a => vp.s ! t ! p ! a ++ prepNP vp.c np ++ vp.post ;
inf = vp.inf ++ prepNP vp.c np ;
imp = \\p,n => vp.imp ! p ! n ++ prepNP vp.c np ++ vp.post
} ;
DetNPMasc det = {s = \\c => det.s ! c ! Masc; a = {g=Masc; n=det.n; p=P3}} ;
DetNPFem det = {s = \\c => det.s ! c ! Fem; a = {g=Fem; n=det.n; p=P3}} ;
UseComp_estar comp = UseComp_ser comp ;
UseComp_ser comp = {
s = \\t,p,a => copula t p a ++ comp.s ! a ;
inf = "быць" ++ comp.s ! defaultAgr ;
imp = \\p,_ => neg p ++ "будзь" ++ comp.s ! defaultAgr
} ;
SubjRelNP np rs = {s = \\c => np.s ! c ++ rs.s; a = np.a} ;
UttAccNP np = {s = np.s ! Acc} ;
UttDatNP np = {s = np.s ! Dat} ;
UttAccIP ip = {s = ip.s ! Acc} ;
UttDatIP ip = {s = ip.s ! Dat} ;
UseDAP dap = {s = \\c => dap.s ! c ! Masc; a = {g=Neuter; n=dap.n; p=P3}} ;
UseDAPMasc dap = {s = \\c => dap.s ! c ! Masc; a = {g=Masc; n=dap.n; p=P3}} ;
UseDAPFem dap = {s = \\c => dap.s ! c ! Fem; a = {g=Fem; n=dap.n; p=P3}} ;
CardCNCard card cn = {s = card.s ++ cn.s ! Gen ! Pl; n = Pl} ;
TPastSimple = {s = []; t = R.Past} ;
SubjunctRelCN cn rs = {
s = \\c,n => cn.s ! c ! n ++ rs.s ;
voc = cn.voc ;
g = cn.g
} ;
}
+2 -12
View File
@@ -2,15 +2,5 @@ concrete GrammarBel of Grammar =
TenseX, TenseX,
PhraseBel, PhraseBel,
NounBel, NounBel,
AdjectiveBel, AdjectiveBel ** {
AdverbBel, }
VerbBel,
SentenceBel,
QuestionBel,
RelativeBel,
ConjunctionBel,
NumeralBel,
NamesBel,
StructuralBel,
IdiomBel ** {
}
-22
View File
@@ -1,22 +0,0 @@
concrete IdiomBel of Idiom = CatBel ** open ResBel, (R = ParamX), ParadigmsBel in {
lin
ImpersCl vp = {s = \\t,p => vp.s ! t ! p ! defaultAgr} ;
GenericCl vp = {s = \\t,p => "нехта" ++ vp.s ! t ! p ! defaultAgr} ;
CleftNP np rs = {s = \\_,_ => "гэта" ++ np.s ! Nom ++ rs.s} ;
CleftAdv adv s = {s = \\_,_ => "гэта" ++ adv.s ++ s.s} ;
ExistNP np = {s = \\t,p => copula t p np.a ++ np.s ! Nom} ;
ExistIP ip = {s = \\t,p => copula t p ip.a ++ ip.s ! Nom} ;
ExistNPAdv np adv = {s = \\t,p => copula t p np.a ++ np.s ! Nom ++ adv.s} ;
ExistIPAdv ip adv = {s = \\t,p => copula t p ip.a ++ ip.s ! Nom ++ adv.s} ;
ProgrVP vp = vp ;
ImpPl1 vp = {s = "давайце" ++ vp.inf} ;
ImpP3 np vp = {s = "няхай" ++ np.s ! Nom ++ vp.s ! R.Pres ! R.Pos ! np.a} ;
SelfAdvVP vp = addAdvVP vp "сам" ;
SelfAdVVP vp = addAdVVP "сам" vp ;
SelfNP np = {s = \\c => np.s ! c ++ "сам"; a = np.a} ;
}
+2 -4
View File
@@ -1,12 +1,10 @@
--# -path=.:../abstract --# -path=.:../abstract
concrete LangBel of Lang = concrete LangBel of Lang =
GrammarBel, GrammarBel,
LexiconBel, LexiconBel
ConstructionBel
,DocumentationBel --# notpresent ,DocumentationBel --# notpresent
** { ** {
flags startcat = Phr ; flags startcat = Phr ;
} }
File diff suppressed because it is too large Load Diff
-19
View File
@@ -1,19 +0,0 @@
concrete NamesBel of Names = CatBel ** open ResBel, ParadigmsBel in {
lin
GivenName gn = mkSimpleNP gn.s gn.g Sg P3 ;
MaleSurname sn = mkSimpleNP sn.s Masc Sg P3 ;
FemaleSurname sn = mkSimpleNP sn.s Fem Sg P3 ;
PlSurname sn = mkSimpleNP sn.s Masc Pl P3 ;
FullName gn sn = mkSimpleNP (gn.s ++ sn.s) gn.g Sg P3 ;
UseLN ln = {s = ln.s; a = {g=ln.g; n=ln.n; p=P3}} ;
PlainLN ln = {s = ln.s; a = {g=ln.g; n=ln.n; p=P3}} ;
InLN ln = {s = "у" ++ ln.s ! Loc} ;
AdjLN ap ln = {
s = \\c => ap.s ! c ! genNum ln.g ln.n ++ ln.s ! c ;
g = ln.g ;
n = ln.n
} ;
}
+1 -123
View File
@@ -1,126 +1,4 @@
concrete NounBel of Noun = CatBel ** open ResBel, Prelude in { concrete NounBel of Noun = CatBel ** {
lin lin
UseN n = n ; UseN n = n ;
DetCN det cn = {
s = \\c => det.s ! c ! cn.g ++ cn.s ! c ! det.n ;
a = {g=cn.g; n=det.n; p=P3}
} ;
UsePN pn = {
s = pn.s ;
a = {g=pn.g; n=pn.n; p=P3}
} ;
UsePron p = p ;
PredetNP pred np = {
s = \\c => pred.s ! c ! np.a.g ! np.a.n ++ np.s ! c ;
a = np.a
} ;
PPartNP np v = {
s = \\c => np.s ! c ++ v.participle ! np.a.g ! np.a.n ;
a = np.a
} ;
AdvNP np adv = {
s = \\c => np.s ! c ++ adv.s ;
a = np.a
} ;
ExtAdvNP np adv = {
s = \\c => np.s ! c ++ adv.s ;
a = np.a
} ;
RelNP np rs = {
s = \\c => np.s ! c ++ rs.s ;
a = np.a
} ;
DetNP det = {
s = \\c => det.s ! c ! Masc ;
a = {g=Masc; n=det.n; p=P3}
} ;
DetQuant q n = {
s = \\c,g => q.s ! c ! g ! n.n ++ n.s ! c ! g ;
n = n.n
} ;
DetQuantOrd q n o = {
s = \\c,g => q.s ! c ! g ! n.n ++ n.s ! c ! g ++ o.s ! c ! genNum g n.n ;
n = n.n
} ;
NumSg = {s = \\_,_ => []; n = Sg} ;
NumPl = {s = \\_,_ => []; n = Pl} ;
NumCard card = {s = \\_,_ => card.s; n = card.n} ;
NumDigits digits = {s = digits.s; n = Pl} ;
NumDecimal dec = {s = dec.s; n = Pl} ;
NumNumeral numeral = {s = numeral.s; n = Pl} ;
AdNum adn card = {s = adn.s ++ card.s; n = card.n} ;
OrdDigits d = adjFromStr d.s ;
OrdNumeral n = adjFromStr n.s ;
OrdSuperl a = {s = \\c,gn => "най" ++ a.s ! c ! gn} ;
OrdNumeralSuperl n a = {s = \\c,gn => n.s ++ a.s ! c ! gn} ;
IndefArt = {s = \\_,_,_ => []} ;
DefArt = {s = \\_,_,_ => []} ;
MassNP cn = {
s = \\c => cn.s ! c ! Sg ;
a = {g=cn.g; n=Sg; p=P3}
} ;
PossPron p = {s = \\_,_,_ => p.s ! Gen} ;
ComplN2 n np = {
s = \\c,num => n.s ! c ! num ++ prepNP n.c2 np ;
voc = n.voc ;
g = n.g
} ;
ComplN3 n np = n ** {c2 = n.c3} ;
UseN2 n = n ;
Use2N3 n = n ** {c2 = n.c2} ;
Use3N3 n = n ** {c2 = n.c3} ;
AdjCN ap cn = {
s = \\c,num => ap.s ! c ! genNum cn.g num ++ cn.s ! c ! num ;
voc = cn.voc ;
g = cn.g
} ;
RelCN cn rs = {
s = \\c,num => cn.s ! c ! num ++ rs.s ;
voc = cn.voc ;
g = cn.g
} ;
AdvCN cn adv = {
s = \\c,num => cn.s ! c ! num ++ adv.s ;
voc = cn.voc ;
g = cn.g
} ;
SentCN cn sc = {
s = \\c,num => cn.s ! c ! num ++ sc.s ;
voc = cn.voc ;
g = cn.g
} ;
ApposCN cn np = {
s = \\c,num => cn.s ! c ! num ++ np.s ! Nom ;
voc = cn.voc ;
g = cn.g
} ;
PossNP cn np = {
s = \\c,num => cn.s ! c ! num ++ np.s ! Gen ;
voc = cn.voc ;
g = cn.g
} ;
PartNP cn np = {
s = \\c,num => cn.s ! c ! num ++ np.s ! Gen ;
voc = cn.voc ;
g = cn.g
} ;
CountNP det np = {
s = \\c => det.s ! c ! Masc ++ "з" ++ np.s ! Gen ;
a = {g=Masc; n=det.n; p=P3}
} ;
AdjDAP dap ap = {
s = \\c,g => dap.s ! c ! g ++ ap.s ! c ! genNum g dap.n ;
n = dap.n
} ;
DetDAP det = det ;
QuantityNP dec mu = mkSimpleNP (dec.s ++ mu.s) Neuter Sg P3 ;
} }
-65
View File
@@ -1,65 +0,0 @@
concrete NumeralBel of Numeral = CatBel ** {
lincat
Digit, Sub10, Sub100, Sub1000, Sub1000000, Sub1000000000, Sub1000000000000 = {s : Str} ;
Dig = {s : Str} ;
lin
num n = n ;
n2 = {s = "2"} ;
n3 = {s = "3"} ;
n4 = {s = "4"} ;
n5 = {s = "5"} ;
n6 = {s = "6"} ;
n7 = {s = "7"} ;
n8 = {s = "8"} ;
n9 = {s = "9"} ;
pot01 = {s = "1"} ;
pot0 d = d ;
pot0as1 n = n ;
pot110 = {s = "10"} ;
pot111 = {s = "11"} ;
pot1to19 d = {s = "1" ++ d.s} ;
pot1 d = {s = d.s ++ "0"} ;
pot1plus d n = {s = d.s ++ n.s} ;
pot1as2 n = n ;
pot21 = {s = "100"} ;
pot2 n = {s = n.s ++ "00"} ;
pot2plus n m = {s = n.s ++ "00" ++ m.s} ;
pot2as3 n = n ;
pot31 = {s = "1000"} ;
pot3 n = {s = n.s ++ "000"} ;
pot3plus n m = {s = n.s ++ "000" ++ m.s} ;
pot3as4 n = n ;
pot3decimal d = {s = d.s ++ "тысяч"} ;
pot41 = {s = "1000000"} ;
pot4 n = {s = n.s ++ "000000"} ;
pot4plus n m = {s = n.s ++ "000000" ++ m.s} ;
pot4as5 n = n ;
pot4decimal d = {s = d.s ++ "мільёна"} ;
pot51 = {s = "1000000000"} ;
pot5 n = {s = n.s ++ "000000000"} ;
pot5plus n m = {s = n.s ++ "000000000" ++ m.s} ;
pot5decimal d = {s = d.s ++ "мільярда"} ;
IDig d = d ;
IIDig d ds = {s = d.s ++ ds.s} ;
D_0 = {s = "0"} ;
D_1 = {s = "1"} ;
D_2 = {s = "2"} ;
D_3 = {s = "3"} ;
D_4 = {s = "4"} ;
D_5 = {s = "5"} ;
D_6 = {s = "6"} ;
D_7 = {s = "7"} ;
D_8 = {s = "8"} ;
D_9 = {s = "9"} ;
PosDecimal d = d ;
NegDecimal d = {s = "-" ++ d.s} ;
IFrac d dig = {s = d.s ++ "." ++ dig.s} ;
}
+12 -71
View File
@@ -636,42 +636,6 @@ oper
_ => regN form1 _ => regN form1
} ; } ;
compoundN = overload {
compoundN : A -> N -> N = \a,n -> lin N {
s = \\c,num => a.s ! c ! genNum n.g num ++ n.s ! c ! num ;
voc = a.s ! Nom ! genNum n.g Sg ++ n.voc ;
g = n.g
} ;
compoundN : N -> A -> N = \n,a -> lin N {
s = \\c,num => n.s ! c ! num ++ a.s ! c ! genNum n.g num ;
voc = n.voc ++ a.s ! Nom ! genNum n.g Sg ;
g = n.g
} ;
compoundN : N -> Str -> N = \n,adv -> lin N {
s = \\c,num => n.s ! c ! num ++ adv ;
voc = n.voc ++ adv ;
g = n.g
} ;
compoundN : Str -> N -> N = \adv,n -> lin N {
s = \\c,num => adv ++ n.s ! c ! num ;
voc = adv ++ n.voc ;
g = n.g
}
} ;
mkPron : (_,_,_,_,_,_ : Str) -> Gender -> Number -> Person -> Pron =
\nom,acc,dat,gen,loc,instr,g,n,p -> lin Pron {
s = table {
Nom => nom ;
Acc => acc ;
Dat => dat ;
Gen => gen ;
Loc => loc ;
Instr => instr
} ;
a = {g=g; n = n; p = p}
} ;
regV : Str -> V -- infinitive regV : Str -> V -- infinitive
= \form -> case form of { = \form -> case form of {
_ + "агчы" => mkV021 form; _ + "агчы" => mkV021 form;
@@ -753,16 +717,6 @@ oper
_ => regV form1 _ => regV form1
} ; } ;
compoundV : V -> Str -> V = \v,adv -> lin V {
active = \\a => {past=(v.active ! a).past ++ adv ;
pres=\\p,num=>(v.active ! a).pres ! p ! num ++ adv
} ;
imperative = \\num => v.imperative ! num ++ adv ;
infinitive = v.infinitive ++ adv ;
participle = \\g,num => v.participle ! g ! num ++ adv ;
passive = \\a,t => v.passive ! a ! t ++ adv
} ;
regA : Str -> A -- s;Nom;('GSg', Masc) regA : Str -> A -- s;Nom;('GSg', Masc)
= \form -> case form of { = \form -> case form of {
_ + "які" => mkA006 form; _ + "які" => mkA006 form;
@@ -865,37 +819,24 @@ oper
mkInterj : Str -> Interj = \s -> lin Interj {s=s} ; mkInterj : Str -> Interj = \s -> lin Interj {s=s} ;
mkMU : Str -> MU = \s -> lin MU {s=s; isPre=False} ; mkMU : Str -> MU = \s -> lin MU {s=s; isPre=False} ;
nominative : Case = Nom ; mkPrep : Str -> Prep = \s -> lin Prep {s=s; c=Acc} ;
accusative : Case = Acc ;
dative : Case = Dat ;
genitive : Case = Gen ;
locative : Case = Loc ;
instrumental : Case = Instr ;
mkPrep = overload {
mkPrep : Str -> Prep = \s -> lin Prep {s=s; c=Acc} ;
mkPrep : Case -> Prep = \c -> lin Prep {s=[]; c=c} ;
mkPrep : Str -> Case -> Prep = \s,c -> lin Prep {s=s; c=c}
} ;
mkIAdv : Str -> IAdv = \s -> lin IAdv {s=s} ; mkIAdv : Str -> IAdv = \s -> lin IAdv {s=s} ;
mkIP : Str -> IP = \s -> lin IP (mkSimpleNP s Masc Sg P3) ; mkIP : Str -> IP = \s -> lin IP {s=s} ;
mkIQuant : Str -> IQuant = \s -> lin IQuant {s=\\_,_,_ => s} ; mkIQuant : Str -> IQuant = \s -> lin IQuant {s=s} ;
mkIDet : Str -> IDet = \s -> lin IDet {s=\\_,_ => s; n=Sg} ; mkIDet : Str -> IDet = \s -> lin IDet {s=s} ;
mkSubj : Str -> Subj = \s -> lin Subj {s=s} ; mkSubj : Str -> Subj = \s -> lin Subj {s=s} ;
mkQuant : Str -> Quant = \s -> lin Quant {s=\\_,_,_ => s} ; mkQuant : Str -> Quant = \s -> lin Quant {s=s} ;
adjQuant : A -> Quant = \a -> lin Quant {s=\\c,g,n => a.s ! c ! genNum g n} ; mkPredet : Str -> Predet = \s -> lin Predet {s=s} ;
mkPredet : Str -> Predet = \s -> lin Predet {s=\\_,_,_ => s} ; mkDet : Str -> Det = \s -> lin Det {s=s} ;
mkDet : Str -> Det = \s -> lin Det {s=\\_,_ => s; n=Sg} ; mkCard : Str -> Card = \s -> lin Card {s=s} ;
mkCard : Str -> Card = \s -> lin Card {s=s; n=Pl} ; mkConj : Str -> Conj = \s -> lin Conj {s=s} ;
mkACard : Str -> ACard = \s -> lin ACard {s=s; n=Pl} ;
mkConj : Str -> Conj = \s -> lin Conj {s=s; n=Pl} ;
mkPConj : Str -> PConj = \s -> lin PConj {s=s} ; mkPConj : Str -> PConj = \s -> lin PConj {s=s} ;
mkVoc : Str -> Voc = \s -> lin Voc {s=s} ; mkVoc : Str -> Voc = \s -> lin Voc {s=s} ;
mkLN : Str -> LN = \s -> lin LN {s=caseTable s; g=Neuter; n=Sg} ; mkLN : Str -> LN = \s -> lin LN {s=s} ;
mkGN : Str -> GN = \s -> lin GN {s=s; g=Masc} ; mkGN : Str -> GN = \s -> lin GN {s=s} ;
mkSN : Str -> SN = \s -> lin SN {s=s} ; mkSN : Str -> SN = \s -> lin SN {s=s} ;
mkPN : Str -> PN = \s -> lin PN {s=caseTable s; g=Masc; n=Sg} ; mkPN : Str -> PN = \s -> lin PN {s=s} ;
} }
+1 -15
View File
@@ -1,25 +1,11 @@
concrete PhraseBel of Phrase = CatBel ** open ResBel in { concrete PhraseBel of Phrase = CatBel ** {
lin lin
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ; PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
UttS s = s ; UttS s = s ;
UttQS qs = qs ;
UttImpSg pol imp = {s = pol.s ++ imp.s ! pol.p ! Sg} ;
UttImpPl pol imp = {s = pol.s ++ imp.s ! pol.p ! Pl} ;
UttImpPol pol imp = {s = pol.s ++ imp.s ! pol.p ! Pl} ;
UttIP ip = {s = ip.s ! Nom} ;
UttIAdv iadv = iadv ;
UttNP np = {s = np.s ! Nom} ;
UttAdv adv = adv ;
UttVP vp = {s = vp.inf} ;
UttCN cn = {s = cn.s ! Nom ! Sg} ;
UttCard card = {s = card.s} ;
UttAP ap = {s = ap.s ! Nom ! GSg Masc} ;
UttInterj i = i ; UttInterj i = i ;
NoPConj = {s = []} ; NoPConj = {s = []} ;
PConjConj conj = {s = conj.s} ;
NoVoc = {s = []} ; NoVoc = {s = []} ;
VocNP np = {s = np.s ! Nom} ;
} }
-50
View File
@@ -1,50 +0,0 @@
concrete QuestionBel of Question = CatBel ** open ResBel, (R = ParamX) in {
lincat
QVP = {s : Str} ;
lin
QuestCl cl = cl ;
QuestVP ip vp = {
s = \\t,p => ip.s ! Nom ++ vp.s ! t ! p ! ip.a
} ;
QuestSlash ip cl = {
s = \\t,p => cl.c.s ++ ip.s ! cl.c.c ++ cl.s ! t ! p
} ;
QuestIAdv iadv cl = {
s = \\t,p => iadv.s ++ cl.s ! t ! p
} ;
QuestIComp icomp np = {
s = \\t,p => icomp.s ++ np.s ! Nom
} ;
IdetCN idet cn = {
s = \\c => idet.s ! c ! cn.g ++ cn.s ! c ! idet.n ;
a = {g=cn.g; n=idet.n; p=P3}
} ;
IdetIP idet = {
s = \\c => idet.s ! c ! Masc ;
a = {g=Masc; n=idet.n; p=P3}
} ;
AdvIP ip adv = {
s = \\c => ip.s ! c ++ adv.s ;
a = ip.a
} ;
IdetQuant iquant num = {
s = \\c,g => iquant.s ! c ! g ! num.n ++ num.s ! c ! g ;
n = num.n
} ;
PrepIP prep ip = {s = prepNP prep ip} ;
AdvIAdv iadv adv = {s = iadv.s ++ adv.s} ;
CompIAdv iadv = iadv ;
CompIP ip = {s = ip.s ! Nom} ;
ComplSlashIP vp ip = {s = vp.s ! R.Pres ! R.Pos ! defaultAgr ++ vp.c.s ++ ip.s ! vp.c.c ++ vp.post} ;
AdvQVP vp iadv = {s = vp.s ! R.Pres ! R.Pos ! defaultAgr ++ iadv.s} ;
AddAdvQVP qvp iadv = {s = qvp.s ++ iadv.s} ;
QuestQVP ip qvp = {
s = \\_,_ => ip.s ! Nom ++ qvp.s
} ;
}
-11
View File
@@ -1,11 +0,0 @@
concrete RelativeBel of Relative = CatBel ** open ResBel in {
lin
RelCl cl = {s = \\t,p => "што" ++ cl.s ! t ! p} ;
RelVP rp vp = {s = \\t,p => rp.s ++ vp.s ! t ! p ! defaultAgr} ;
RelSlash rp cl = {s = \\t,p => rp.s ++ cl.s ! t ! p} ;
IdRP = {s = "які"} ;
FunRP prep np rp = {s = prepNP prep np ++ rp.s} ;
}
+10 -133
View File
@@ -1,4 +1,4 @@
resource ResBel = open (R = ParamX), Prelude in { resource ResBel = {
param Case = Nom | Acc | Dat | Gen | Loc | Instr ; param Case = Nom | Acc | Dat | Gen | Loc | Instr ;
param Number = Sg | Pl ; param Number = Sg | Pl ;
@@ -40,12 +40,12 @@ oper mkNoun : (_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Gender -> Noun =
param Aspect = Imperf | Perf ; param Aspect = Imperf | Perf ;
param Person = P1 | P2 | P3 ; param Person = P1 | P2 | P3 ;
param Tense = Pres | Past ; param Tense = Pres | Past ;
oper Verb = {active: Aspect => {past: Str; pres: Person => Number => Str}; imperative: Number => Str; infinitive: Str; participle: Gender => Number => Str; passive: Aspect => Tense => Str} ; -- 703 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 mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Verb = 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 -> \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 { { active = table {
Imperf => { past = f1 ; Imperf => { Past = f1 ;
pres = table { Pres = table {
P1 => table { P1 => table {
Sg => f2 ; Sg => f2 ;
Pl => f3 Pl => f3
@@ -60,8 +60,8 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> V
} }
} }
} ; } ;
Perf => { past = f8 ; Perf => { Past = f8 ;
pres = table { Pres = table {
P1 => table { P1 => table {
Sg => f9 ; Sg => f9 ;
Pl => f10 Pl => f10
@@ -110,14 +110,8 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> V
param GenNum = GSg Gender | GPl ; param GenNum = GSg Gender | GPl ;
oper genNum : Gender -> Number -> GenNum = \g,n -> oper A = {s: Case => GenNum => Str} ; -- 704
case n of { oper mkA : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> A =
Sg => GSg g ;
Pl => GPl
} ;
oper Adj = {s: Case => GenNum => Str} ; -- 704
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 -> \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 { { s = table {
Nom => table { Nom => table {
@@ -164,123 +158,6 @@ oper Compl = {s : Str; c : Case} ;
oper noPrep : Compl = {s=""; c=Acc} ; oper noPrep : Compl = {s=""; c=Acc} ;
oper CommonNoun = Noun ; oper CommonNoun = Noun ;
oper AdjPhrase = Adj ; oper AdjPhrase = A ;
oper Agr = {g : Gender ; n : Number ; p : Person} ;
oper defaultAgr : Agr = {g=Masc; n=Sg; p=P3} ;
oper NPhrase : Type = {s : Case => Str; a : Agr} ;
oper mkNPhrase : (Case => Str) -> Agr -> NPhrase =
\s,a -> {s = s; a = a} ;
oper caseTable : Str -> Case => Str =
\s -> table {Nom => s; Acc => s; Dat => s; Gen => s; Loc => s; Instr => s} ;
oper mkSimpleNP : Str -> Gender -> Number -> Person -> NPhrase =
\s,g,n,p -> mkNPhrase (caseTable s) {g=g; n=n; p=p} ;
oper nounFromStr : Str -> Gender -> Noun =
\s,g -> {
s = \\_,_ => s ;
voc = s ;
g = g
} ;
oper adjFromStr : Str -> Adj =
\s -> {s = \\_,_ => s} ;
oper prepNP : Compl -> NPhrase -> Str =
\prep,np -> prep.s ++ np.s ! prep.c ;
oper neg : R.Polarity -> Str =
\p -> case p of {
R.Pos => [] ;
R.Neg => "не"
} ;
oper futureBe : Agr -> Str =
\a -> case <a.p,a.n> of {
<P1,Sg> => "буду" ;
<P2,Sg> => "будзеш" ;
<P3,Sg> => "будзе" ;
<P1,Pl> => "будзем" ;
<P2,Pl> => "будзеце" ;
<P3,Pl> => "будуць"
} ;
oper pastBe : Agr -> Str =
\a -> case <a.g,a.n> of {
<Masc,Sg> => "быў" ;
<Fem,Sg> => "была" ;
<Neuter,Sg> => "было" ;
<_,Pl> => "былі"
} ;
oper copula : R.Tense -> R.Polarity -> Agr -> Str =
\t,p,a -> case t of {
R.Pres => neg p ;
R.Past => neg p ++ pastBe a ;
R.Fut => neg p ++ futureBe a ;
R.Cond => neg p ++ pastBe a ++ "бы"
} ;
oper finiteVerb : Verb -> R.Tense -> R.Polarity -> Agr -> Str =
\v,t,p,a -> case t of {
R.Pres => neg p ++ (v.active ! Imperf).pres ! a.p ! a.n ;
R.Past => neg p ++ v.participle ! a.g ! a.n ;
R.Fut => neg p ++ futureBe a ++ v.infinitive ;
R.Cond => neg p ++ v.participle ! a.g ! a.n ++ "бы"
} ;
oper VPhrase : Type = {
s : R.Tense => R.Polarity => Agr => Str ;
inf : Str ;
imp : R.Polarity => Number => Str
} ;
oper mkVPhrase : Verb -> VPhrase =
\v -> {
s = \\t,p,a => finiteVerb v t p a ;
inf = v.infinitive ;
imp = \\p,n => neg p ++ v.imperative ! n
} ;
oper VSlash : Type = {
s : R.Tense => R.Polarity => Agr => Str ;
inf : Str ;
c : Compl ;
imp : R.Polarity => Number => Str ;
post : Str
} ;
oper mkVSlash : Verb -> Compl -> VSlash =
\v,c -> {
s = \\t,p,a => finiteVerb v t p a ;
inf = v.infinitive ;
c = c ;
imp = \\p,n => neg p ++ v.imperative ! n ;
post = []
} ;
oper addAdvVP : VPhrase -> Str -> VPhrase =
\vp,adv -> {
s = \\t,p,a => vp.s ! t ! p ! a ++ adv ;
inf = vp.inf ++ adv ;
imp = \\p,n => vp.imp ! p ! n ++ adv
} ;
oper addAdVVP : Str -> VPhrase -> VPhrase =
\adv,vp -> {
s = \\t,p,a => adv ++ vp.s ! t ! p ! a ;
inf = adv ++ vp.inf ;
imp = \\p,n => adv ++ vp.imp ! p ! n
} ;
oper addAdvSlash : VSlash -> Str -> VSlash =
\vp,adv -> {
s = \\t,p,a => vp.s ! t ! p ! a ;
inf = vp.inf ++ adv ;
c = vp.c ;
imp = \\p,n => vp.imp ! p ! n ;
post = vp.post ++ adv
} ;
} }
-45
View File
@@ -1,45 +0,0 @@
concrete SentenceBel of Sentence = CatBel ** open ResBel, (R = ParamX), Prelude in {
lin
PredVP np vp = {
s = \\t,p => np.s ! Nom ++ vp.s ! t ! p ! np.a
} ;
PredSCVP sc vp = {
s = \\t,p => sc.s ++ vp.s ! t ! p ! defaultAgr
} ;
SlashVP np vp = {
s = \\t,p => np.s ! Nom ++ vp.s ! t ! p ! np.a ++ vp.post ;
c = vp.c
} ;
AdvSlash cl adv = {
s = \\t,p => cl.s ! t ! p ++ adv.s ;
c = cl.c
} ;
SlashPrep cl prep = {
s = \\t,p => cl.s ! t ! p ++ prep.s ;
c = prep
} ;
SlashVS np vs ss = {
s = \\t,p => np.s ! Nom ++ finiteVerb vs t p np.a ++ ss.s ;
c = ss.c
} ;
ImpVP vp = {s = \\p,n => vp.imp ! p ! n} ;
AdvImp adv imp = {s = \\p,n => adv.s ++ imp.s ! p ! n} ;
EmbedS s = {s = "што" ++ s.s} ;
EmbedQS qs = {s = qs.s} ;
EmbedVP vp = {s = vp.inf} ;
UseCl temp pol cl = {s = temp.s ++ pol.s ++ cl.s ! temp.t ! pol.p} ;
UseQCl temp pol cl = {s = temp.s ++ pol.s ++ cl.s ! temp.t ! pol.p} ;
UseRCl temp pol cl = {s = cl.s ! temp.t ! pol.p} ;
UseSlash temp pol cl = {s = cl.s ! temp.t ! pol.p; c = cl.c} ;
AdvS adv s = {s = adv.s ++ s.s} ;
ExtAdvS adv s = {s = adv.s ++ s.s} ;
SSubjS s1 subj s2 = {s = s1.s ++ subj.s ++ s2.s} ;
RelS s rs = {s = s.s ++ rs.s} ;
}
-110
View File
@@ -1,110 +0,0 @@
concrete StructuralBel of Structural = CatBel ** open ResBel, ParadigmsBel in {
lin
above_Prep = mkPrep "над" instrumental ;
after_Prep = mkPrep "пасля" genitive ;
all_Predet = mkPredet "усе" ;
almost_AdA = mkAdA "амаль" ;
almost_AdN = mkAdN "амаль" ;
although_Subj = mkSubj "хоць" ;
always_AdV = mkAdV "заўсёды" ;
and_Conj = mkConj "і" ;
because_Subj = mkSubj "бо" ;
before_Prep = mkPrep "перад" instrumental ;
behind_Prep = mkPrep "за" instrumental ;
between_Prep = mkPrep "паміж" instrumental ;
both7and_DConj = mkConj "і" ;
but_PConj = mkPConj "але" ;
by8agent_Prep = mkPrep "кім" instrumental ;
by8means_Prep = mkPrep "праз" accusative ;
can8know_VV = mkVV (mkV021 "магчы") ;
can_VV = mkVV (mkV021 "магчы") ;
during_Prep = mkPrep "падчас" genitive ;
either7or_DConj = mkConj "або" ;
every_Det = {s = \\_,_ => "кожны"; n = Sg} ;
everybody_NP = mkSimpleNP "усе" Masc Pl P3 ;
everything_NP = mkSimpleNP "усё" Neuter Sg P3 ;
everywhere_Adv = mkAdv "усюды" ;
few_Det = {s = \\_,_ => "некалькі"; n = Pl} ;
for_Prep = mkPrep "для" genitive ;
from_Prep = mkPrep "ад" genitive ;
i_Pron = mkPron "я" "мяне" "мне" "мяне" "мне" "мной" Masc Sg P1 ;
youSg_Pron = mkPron "ты" "цябе" "табе" "цябе" "табе" "табой" Masc Sg P2 ;
he_Pron = mkPron "ён" "яго" "яму" "яго" "ім" "ім" Masc Sg P3 ;
she_Pron = mkPron "яна" "яе" "ёй" "яе" "ёй" "ёю" Fem Sg P3 ;
it_Pron = mkPron "яно" "яго" "яму" "яго" "ім" "ім" Neuter Sg P3 ;
we_Pron = mkPron "мы" "нас" "нам" "нас" "нас" "намі" Masc Pl P1 ;
youPl_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Masc Pl P2 ;
youPol_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Masc Pl P2 ;
they_Pron = mkPron "яны" "іх" "ім" "іх" "іх" "імі" Masc Pl P3 ;
here_Adv = mkAdv "тут" ;
here7to_Adv = mkAdv "сюды" ;
here7from_Adv = mkAdv "адсюль" ;
how_IAdv = mkIAdv "як" ;
how8many_IDet = mkIDet "колькі" ;
how8much_IAdv = mkIAdv "колькі" ;
if_Subj = mkSubj "калі" ;
in8front_Prep = mkPrep "перад" instrumental ;
in_Prep = mkPrep "у" locative ;
less_CAdv = {s = "менш"; p = "чым"} ;
many_Det = {s = \\_,_ => "шмат"; n = Pl} ;
more_CAdv = {s = "больш"; p = "чым"} ;
most_Predet = mkPredet "большасць" ;
much_Det = {s = \\_,_ => "шмат"; n = Sg} ;
must_VV = mkVV (mkV "мусіць") ;
no_Utt = {s = "не"} ;
on_Prep = mkPrep "на" locative ;
only_Predet = mkPredet "толькі" ;
or_Conj = mkConj "або" ;
otherwise_PConj = mkPConj "інакш" ;
part_Prep = mkPrep "з" genitive ;
please_Voc = mkVoc "калі ласка" ;
possess_Prep = mkPrep "у" genitive ;
quite_Adv = mkAdA "зусім" ;
so_AdA = mkAdA "так" ;
someSg_Det = {s = \\_,_ => "нейкі"; n = Sg} ;
somePl_Det = {s = \\_,_ => "некаторыя"; n = Pl} ;
somebody_NP = mkSimpleNP "нехта" Masc Sg P3 ;
something_NP = mkSimpleNP "нешта" Neuter Sg P3 ;
somewhere_Adv = mkAdv "недзе" ;
that_Quant = mkQuant "той" ;
that_Subj = mkSubj "што" ;
there_Adv = mkAdv "там" ;
there7to_Adv = mkAdv "туды" ;
there7from_Adv = mkAdv "адтуль" ;
therefore_PConj = mkPConj "таму" ;
this_Quant = mkQuant "гэты" ;
through_Prep = mkPrep "праз" accusative ;
to_Prep = mkPrep "да" genitive ;
too_AdA = mkAdA "занадта" ;
under_Prep = mkPrep "пад" instrumental ;
very_AdA = mkAdA "вельмі" ;
want_VV = mkVV (mkV009 "хацець") ;
whatPl_IP = mkSimpleNP "што" Neuter Pl P3 ;
whatSg_IP = mkSimpleNP "што" Neuter Sg P3 ;
when_IAdv = mkIAdv "калі" ;
when_Subj = mkSubj "калі" ;
where_IAdv = mkIAdv "дзе" ;
which_IQuant = mkIQuant "які" ;
whoPl_IP = mkSimpleNP "хто" Masc Pl P3 ;
whoSg_IP = mkSimpleNP "хто" Masc Sg P3 ;
why_IAdv = mkIAdv "чаму" ;
with_Prep = mkPrep "з" instrumental ;
without_Prep = mkPrep "без" genitive ;
yes_Utt = {s = "так"} ;
no_Quant = mkQuant "ніякі" ;
not_Predet = mkPredet "не" ;
if_then_Conj = mkConj "калі" ;
at_least_AdN = mkAdN "прынамсі" ;
at_most_AdN = mkAdN "найбольш" ;
nobody_NP = mkSimpleNP "ніхто" Masc Sg P3 ;
nothing_NP = mkSimpleNP "нішто" Neuter Sg P3 ;
except_Prep = mkPrep "акрамя" genitive ;
as_CAdv = {s = "так"; p = "як"} ;
have_V2 = mkV2 (mkV071 "мець") ;
language_title_Utt = {s = "беларуская"} ;
}
-138
View File
@@ -1,138 +0,0 @@
concrete VerbBel of Verb = CatBel ** open ResBel, (R = ParamX), Prelude in {
lin
UseV v = mkVPhrase v ;
ComplVV vv vp = {
s = \\t,p,a => finiteVerb vv t p a ++ vp.inf ;
inf = vv.infinitive ++ vp.inf ;
imp = \\p,n => neg p ++ vv.imperative ! n ++ vp.inf
} ;
ComplVS vs s = {
s = \\t,p,a => finiteVerb vs t p a ++ "што" ++ s.s ;
inf = vs.infinitive ++ "што" ++ s.s ;
imp = \\p,n => neg p ++ vs.imperative ! n ++ "што" ++ s.s
} ;
ComplVQ vq qs = {
s = \\t,p,a => finiteVerb vq t p a ++ qs.s ;
inf = vq.infinitive ++ qs.s ;
imp = \\p,n => neg p ++ vq.imperative ! n ++ qs.s
} ;
ComplVA va ap = {
s = \\t,p,a => finiteVerb va t p a ++ ap.s ! Nom ! genNum a.g a.n ;
inf = va.infinitive ++ ap.s ! Nom ! GSg Masc ;
imp = \\p,n => neg p ++ va.imperative ! n ++ ap.s ! Nom ! GPl
} ;
SlashV2a v = mkVSlash v v.c2 ;
Slash2V3 v np = {
s = \\t,p,a => finiteVerb v t p a ++ prepNP v.c2 np ;
inf = v.infinitive ++ prepNP v.c2 np ;
c = v.c3 ;
imp = \\p,n => neg p ++ v.imperative ! n ++ prepNP v.c2 np ;
post = []
} ;
Slash3V3 v np = {
s = \\t,p,a => finiteVerb v t p a ;
inf = v.infinitive ++ prepNP v.c3 np ;
c = v.c2 ;
imp = \\p,n => neg p ++ v.imperative ! n ;
post = prepNP v.c3 np
} ;
SlashV2V v vp = {
s = \\t,p,a => finiteVerb v t p a ;
inf = v.infinitive ++ vp.inf ;
c = v.c2 ;
imp = \\p,n => neg p ++ v.imperative ! n ;
post = vp.inf
} ;
SlashV2S v s = {
s = \\t,p,a => finiteVerb v t p a ;
inf = v.infinitive ++ "што" ++ s.s ;
c = v.c2 ;
imp = \\p,n => neg p ++ v.imperative ! n ;
post = "што" ++ s.s
} ;
SlashV2Q v qs = {
s = \\t,p,a => finiteVerb v t p a ;
inf = v.infinitive ++ qs.s ;
c = v.c2 ;
imp = \\p,n => neg p ++ v.imperative ! n ;
post = qs.s
} ;
SlashV2A v ap = {
s = \\t,p,a => finiteVerb v t p a ;
inf = v.infinitive ++ ap.s ! Nom ! GSg Masc ;
c = v.c2 ;
imp = \\p,n => neg p ++ v.imperative ! n ;
post = ap.s ! Nom ! GSg Masc
} ;
ComplSlash vp np = {
s = \\t,p,a => vp.s ! t ! p ! a ++ prepNP vp.c np ++ vp.post ;
inf = vp.inf ++ prepNP vp.c np ;
imp = \\p,n => vp.imp ! p ! n ++ prepNP vp.c np ++ vp.post
} ;
SlashVV vv vp = {
s = \\t,p,a => finiteVerb vv t p a ++ vp.s ! R.Pres ! R.Pos ! a ;
inf = vv.infinitive ++ vp.inf ;
c = vp.c ;
imp = \\p,n => neg p ++ vv.imperative ! n ++ vp.imp ! R.Pos ! n ;
post = vp.post
} ;
SlashV2VNP v np vp = {
s = \\t,p,a => finiteVerb v t p a ++ prepNP v.c2 np ++ vp.s ! R.Pres ! R.Pos ! a ;
inf = v.infinitive ++ prepNP v.c2 np ++ vp.inf ;
c = vp.c ;
imp = \\p,n => neg p ++ v.imperative ! n ++ prepNP v.c2 np ++ vp.imp ! R.Pos ! n ;
post = vp.post
} ;
ReflVP vp = {
s = \\t,p,a => vp.s ! t ! p ! a ++ "сябе" ++ vp.post ;
inf = vp.inf ++ "сябе" ;
imp = \\p,n => vp.imp ! p ! n ++ "сябе" ++ vp.post
} ;
UseComp comp = {
s = \\t,p,a => copula t p a ++ comp.s ! a ;
inf = "быць" ++ comp.s ! defaultAgr ;
imp = \\p,_ => neg p ++ "будзь" ++ comp.s ! defaultAgr
} ;
PassV2 v = {
s = \\t,p,a => copula t p a ++ v.participle ! a.g ! a.n ;
inf = "быць" ++ v.participle ! Masc ! Sg ;
imp = \\p,_ => neg p ++ "будзь" ++ v.participle ! Masc ! Sg
} ;
AdvVP vp adv = addAdvVP vp adv.s ;
ExtAdvVP vp adv = addAdvVP vp adv.s ;
AdVVP adv vp = addAdVVP adv.s vp ;
AdvVPSlash vp adv = addAdvSlash vp adv.s ;
AdVVPSlash adv vp = {
s = \\t,p,a => adv.s ++ vp.s ! t ! p ! a ;
inf = adv.s ++ vp.inf ;
c = vp.c ;
imp = \\p,n => adv.s ++ vp.imp ! p ! n ;
post = vp.post
} ;
VPSlashPrep vp prep = {
s = \\t,p,a => vp.s ! t ! p ! a ++ prep.s ;
inf = vp.inf ++ prep.s ;
c = prep ;
imp = \\p,n => vp.imp ! p ! n ++ prep.s ;
post = []
} ;
CompAP ap = {s = \\a => ap.s ! Nom ! genNum a.g a.n} ;
CompNP np = {s = \\_ => np.s ! Nom} ;
CompAdv adv = {s = \\_ => adv.s} ;
CompCN cn = {s = \\a => cn.s ! Nom ! a.n} ;
UseCopula = {
s = \\t,p,a => copula t p a ;
inf = "быць" ;
imp = \\p,_ => neg p ++ "будзь"
} ;
}
+3 -111
View File
@@ -1,5 +1,7 @@
--# -path=.:../abstract:../common
concrete DocumentationBul of Documentation = CatBul ** open concrete DocumentationBul of Documentation = CatBul ** open
ResBul, Prelude, ParamX, HTML in { ResBul, Prelude,
HTML in {
flags coding=utf8 ; flags coding=utf8 ;
lincat lincat
@@ -180,116 +182,6 @@ lin
s3= "" s3= ""
} ; } ;
{-
-} --# notpresent
InflectionCl = \cl -> {
t = "изр" ;
s1 = heading1 ("Изречение") ;
s2 =
heading2 "Изявително Наклонение" ++
frameTable (
tr (intagAttr "th" "colspan=\"3\"" "Акционни времена" ++
intagAttr "th" "colspan=\"3\"" "Резултативни времена") ++
tr (th "" ++ th "съобщително" ++ th "въпросително" ++
th "" ++ th "съобщително" ++ th "въпросително") ++
tr (intagAttr "th" "rowspan=\"2\"" "сегашно" ++
td (cl.s ! VPresent ! Simul ! Pos ! Main) ++
td (cl.s ! VPresent ! Simul ! Pos ! Quest) ++
intagAttr "th" "rowspan=\"2\"" "минало неопределено" ++
td (cl.s ! VPresent ! Anter ! Pos ! Main) ++
td (cl.s ! VPresent ! Anter ! Pos ! Quest)) ++
tr (td (cl.s ! VPresent ! Simul ! Neg ! Main) ++
td (cl.s ! VPresent ! Simul ! Neg ! Quest) ++
td (cl.s ! VPresent ! Anter ! Neg ! Main) ++
td (cl.s ! VPresent ! Anter ! Neg ! Quest)) ++
tr (intagAttr "th" "rowspan=\"2\"" "минало несвършено" ++
td (cl.s ! (VPastImperfect Indicative) ! Simul ! Pos ! Main) ++
td (cl.s ! (VPastImperfect Indicative) ! Simul ! Pos ! Quest) ++
intagAttr "th" "rowspan=\"2\"" "минало предварително" ++
td (cl.s ! (VPastImperfect Indicative) ! Anter ! Pos ! Main) ++
td (cl.s ! (VPastImperfect Indicative) ! Anter ! Pos ! Quest)) ++
tr (td (cl.s ! (VPastImperfect Indicative) ! Simul ! Neg ! Main) ++
td (cl.s ! (VPastImperfect Indicative) ! Simul ! Neg ! Quest) ++
td (cl.s ! (VPastImperfect Indicative) ! Anter ! Neg ! Main) ++
td (cl.s ! (VPastImperfect Indicative) ! Anter ! Neg ! Quest)) ++
tr (intagAttr "th" "rowspan=\"2\"" "минало свършено" ++
td (cl.s ! (VPastSimple Indicative) ! Simul ! Pos ! Main) ++
td (cl.s ! (VPastSimple Indicative) ! Simul ! Pos ! Quest) ++
intagAttr "th" "rowspan=\"2\" colspan=\"3\"" "") ++
tr (td (cl.s ! (VPastSimple Indicative) ! Simul ! Neg ! Main) ++
td (cl.s ! (VPastSimple Indicative) ! Simul ! Neg ! Quest)) ++
tr (intagAttr "th" "rowspan=\"2\"" "бъдеще" ++
td (cl.s ! (VFut Indicative) ! Simul ! Pos ! Main) ++
td (cl.s ! (VFut Indicative) ! Simul ! Pos ! Quest) ++
intagAttr "th" "rowspan=\"2\"" "бъдеще предварително" ++
td (cl.s ! (VFut Indicative) ! Anter ! Pos ! Main) ++
td (cl.s ! (VFut Indicative) ! Anter ! Pos ! Quest)) ++
tr (td (cl.s ! (VFut Indicative) ! Simul ! Neg ! Main) ++
td (cl.s ! (VFut Indicative) ! Simul ! Neg ! Quest) ++
td (cl.s ! (VFut Indicative) ! Anter ! Neg ! Main) ++
td (cl.s ! (VFut Indicative) ! Anter ! Neg ! Quest)) ++
tr (intagAttr "th" "rowspan=\"2\"" "бъдеще в миналото" ++
td (cl.s ! (VPastFut) ! Simul ! Pos ! Main) ++
td (cl.s ! (VPastFut) ! Simul ! Pos ! Quest) ++
intagAttr "th" "rowspan=\"2\"" "бъдеще предв. в миналото" ++
td (cl.s ! VPastFut ! Anter ! Pos ! Main) ++
td (cl.s ! VPastFut ! Anter ! Pos ! Quest)) ++
tr (td (cl.s ! VPastFut ! Simul ! Neg ! Main) ++
td (cl.s ! VPastFut ! Simul ! Neg ! Quest) ++
td (cl.s ! VPastFut ! Anter ! Neg ! Main) ++
td (cl.s ! VPastFut ! Anter ! Neg ! Quest))) ++
heading3 "Условно Наклонение" ++
frameTable (
tr (th "съобщително" ++ th "въпросително") ++
tr (td (cl.s ! (VCond Indicative) ! Simul ! Pos ! Main) ++
td (cl.s ! (VCond Indicative) ! Simul ! Pos ! Quest)) ++
tr (td (cl.s ! (VCond Indicative) ! Simul ! Neg ! Main) ++
td (cl.s ! (VCond Indicative) ! Simul ! Neg ! Quest))) ++
heading2 "Преизказни Форми" ++
frameTable (
tr (intagAttr "th" "colspan=\"3\"" "Акционни времена" ++
intagAttr "th" "colspan=\"3\"" "Резултативни времена") ++
tr (th "" ++ th "съобщително" ++ th "въпросително" ++
th "" ++ th "съобщително" ++ th "въпросително") ++
tr (intagAttr "th" "rowspan=\"2\"" "сегашно / минало несвършено" ++
td (cl.s ! (VPastImperfect Renarrative) ! Simul ! Pos ! Main) ++
td (cl.s ! (VPastImperfect Renarrative) ! Simul ! Pos ! Quest) ++
intagAttr "th" "rowspan=\"2\"" "минало неопределено/предварително" ++
td (cl.s ! (VPastImperfect Renarrative) ! Anter ! Pos ! Main) ++
td (cl.s ! (VPastImperfect Renarrative) ! Anter ! Pos ! Quest)) ++
tr (td (cl.s ! (VPastImperfect Renarrative) ! Simul ! Neg ! Main) ++
td (cl.s ! (VPastImperfect Renarrative) ! Simul ! Neg ! Quest) ++
td (cl.s ! (VPastImperfect Renarrative) ! Anter ! Neg ! Main) ++
td (cl.s ! (VPastImperfect Renarrative) ! Anter ! Neg ! Quest)) ++
tr (intagAttr "th" "rowspan=\"2\"" "минало свършено" ++
td (cl.s ! (VPastSimple Renarrative) ! Simul ! Pos ! Main) ++
td (cl.s ! (VPastSimple Renarrative) ! Simul ! Pos ! Quest) ++
intagAttr "th" "rowspan=\"2\" colspan=\"3\"" "") ++
tr (td (cl.s ! (VPastSimple Renarrative) ! Simul ! Neg ! Main) ++
td (cl.s ! (VPastSimple Renarrative) ! Simul ! Neg ! Quest)) ++
tr (intagAttr "th" "rowspan=\"2\"" "бъдеще / бъдеще в миналото" ++
td (cl.s ! (VFut Renarrative) ! Simul ! Pos ! Main) ++
td (cl.s ! (VFut Renarrative) ! Simul ! Pos ! Quest) ++
intagAttr "th" "rowspan=\"2\"" "бъдеще предв. / бъдеще предв. в миналото" ++
td (cl.s ! (VFut Renarrative) ! Anter ! Pos ! Main) ++
td (cl.s ! (VFut Renarrative) ! Anter ! Pos ! Quest)) ++
tr (td (cl.s ! (VFut Renarrative) ! Simul ! Neg ! Main) ++
td (cl.s ! (VFut Renarrative) ! Simul ! Neg ! Quest) ++
td (cl.s ! (VFut Renarrative) ! Anter ! Neg ! Main) ++
td (cl.s ! (VFut Renarrative) ! Anter ! Neg ! Quest))) ++
heading3 "Условно Наклонение" ++
frameTable (
tr (th "съобщително" ++ th "въпросително") ++
tr (td (cl.s ! (VCond Renarrative) ! Simul ! Pos ! Main) ++
td (cl.s ! (VCond Renarrative) ! Simul ! Pos ! Quest)) ++
tr (td (cl.s ! (VCond Renarrative) ! Simul ! Neg ! Main) ++
td (cl.s ! (VCond Renarrative) ! Simul ! Neg ! Quest))) ;
s3 = ""
} ;
{- --# notpresent
-}
InflectionV v = { InflectionV v = {
t = "гл" ; t = "гл" ;
s1= heading1 ("Глагол") ++ s1= heading1 ("Глагол") ++
+3 -4
View File
@@ -8,8 +8,6 @@ lin
AdAdV a adv = {s = a.s ++ adv.s; p = adv.p} ; AdAdV a adv = {s = a.s ++ adv.s; p = adv.p} ;
UttAdV adv = {s = adv.s} ;
EmptyRelSlash slash = { EmptyRelSlash slash = {
s = \\t,a,p,agr => linPrep slash.c2 ++ whichRP ! agr.gn ++ slash.s ! agr ! t ! a ! p ! Main s = \\t,a,p,agr => linPrep slash.c2 ++ whichRP ! agr.gn ++ slash.s ! agr ! t ! a ! p ! Main
} ; } ;
@@ -152,7 +150,7 @@ lin
MkVPS t p vp = { MkVPS t p vp = {
s = \\a => s = \\a =>
let verb = vpTenses vp ! t.t ! t.a ! p.p ! a ! Main ! Perf ; let verb = vpTenses vp ! t.t ! t.a ! p.p ! a ! False ! Perf ;
compl = vp.compl ! a compl = vp.compl ! a
in t.s ++ p.s ++ verb ++ compl in t.s ++ p.s ++ verb ++ compl
} ; } ;
@@ -318,6 +316,7 @@ lin UseComp_estar = UseComp ;
lin ProDrop pro = pro ; lin ProDrop pro = pro ;
lin TPastSimple = {s = []} ** {t = VPastSimple Indicative} ; --# notpresent lin TPastSimple = {s = []} ** {t = VPastSimple} ; --# notpresent
} }
+1 -1
View File
@@ -67,7 +67,7 @@ concrete ExtraBul of ExtraBulAbs = CatBul **
MkVPS t p vp = { MkVPS t p vp = {
s = \\a => s = \\a =>
let verb = vpTenses vp ! t.t ! t.a ! p.p ! a ! Main ! Perf ; let verb = vpTenses vp ! t.t ! t.a ! p.p ! a ! False ! Perf ;
compl = vp.compl ! a compl = vp.compl ! a
in t.s ++ p.s ++ verb ++ compl in t.s ++ p.s ++ verb ++ compl
} ; } ;
+25 -4
View File
@@ -26,13 +26,34 @@ concrete IdiomBul of Idiom = CatBul ** open Prelude, ParadigmsBul, ResBul in {
} ; } ;
agr=agrP3 (GSg Neut); agr=agrP3 (GSg Neut);
present = verb ! (VPres (numGenNum agr.gn) agr.p) ;
aorist = verb ! (VAorist (numGenNum agr.gn) agr.p) ;
imperfect = verb ! (VImperfect (numGenNum agr.gn) agr.p) ;
perfect = verb ! (VPerfect (aform agr.gn Indef (RObj Acc))) ;
auxPres = auxBe ! VPres (numGenNum agr.gn) agr.p ;
auxAorist = auxBe ! VAorist (numGenNum agr.gn) agr.p ;
auxCondS = auxCond ! numGenNum agr.gn ! agr.p ;
tenses = vpTenses (predV (singleV verb)) ! t ! a ! Pos ! agr v : {aux1:Str; aux2:Str; main:Str}
= case <t,a> of {
<VPresent,Simul> => {aux1=[]; aux2=[]; main=present}
; --# notpresent
<VPresent,Anter> => {aux1=[]; aux2=auxPres; main=perfect} ; --# notpresent
<VPastSimple,Simul> => {aux1=[]; aux2=[]; main=aorist} ; --# notpresent
<VPastSimple,Anter> => {aux1=[]; aux2=auxAorist; main=perfect} ; --# notpresent
<VPastImperfect,Simul> => {aux1=[]; aux2=[]; main=imperfect} ; --# notpresent
<VPastImperfect,Anter> => {aux1=[]; aux2=auxAorist; main=perfect} ; --# notpresent
<VFut, Simul> => {aux1="ще"; aux2=[]; main=present} ; --# notpresent
<VFut, Anter> => {aux1="ще"++auxPres; aux2=[]; main=perfect} ; --# notpresent
<VCond,_> => {aux1=auxCondS; aux2=[]; main=perfect} --# notpresent
} ;
in case o of { in case o of {
Main => tenses ! Inv ! Perf ++ np.s ! RObj Acc ++ adv.s ; Main => v.aux1 ++ v.main ++ v.aux2 ++ np.s ! RObj Acc ++ adv.s ;
Inv => np.s ! RObj Acc ++ tenses ! Main ! Perf ++ adv.s ; Inv => np.s ! RObj Acc ++ v.aux1 ++ v.main ++ v.aux2 ++ adv.s ;
Quest => tenses ! Quest ! Perf ++ np.s ! RObj Acc ++ adv.s Quest => v.aux1 ++ v.main ++ "ли" ++ v.aux2 ++ np.s ! RObj Acc ++ adv.s
} }
} ; } ;
-1
View File
@@ -121,7 +121,6 @@ concrete NounBul of Noun = CatBul ** open ResBul, Prelude in {
NumNumeral numeral = {s = \\gspec => numeral.s ! NCard gspec; nn = case numeral.n of {Sg => NNum Sg; Pl => NCountable}} ; NumNumeral numeral = {s = \\gspec => numeral.s ! NCard gspec; nn = case numeral.n of {Sg => NNum Sg; Pl => NCountable}} ;
OrdNumeral numeral = {s = \\aform => numeral.s ! NOrd aform} ; OrdNumeral numeral = {s = \\aform => numeral.s ! NOrd aform} ;
OrdNumeralSuperl numeral a = {s = \\aform => numeral.s ! NOrd aform ++ "най" ++ hyphen ++ a.s ! indefAForm aform} ;
AdNum adn num = {s = \\gspec => adn.s ++ num.s ! gspec; nn = num.nn} ; AdNum adn num = {s = \\gspec => adn.s ++ num.s ! gspec; nn = num.nn} ;
+26 -102
View File
@@ -77,17 +77,12 @@ resource ResBul = ParamX - [Tense,Pres,Past,Fut,Cond] ** open Prelude, Predef in
VVType = VVInf Aspect | VVGerund ; VVType = VVInf Aspect | VVGerund ;
Mood =
Indicative
| Renarrative ;
Tense = Tense =
VPresent VPresent
| VPastSimple Mood --# notpresent | VPastSimple --# notpresent
| VPastImperfect Mood --# notpresent | VPastImperfect --# notpresent
| VPastFut --# notpresent | VFut --# notpresent
| VFut Mood --# notpresent | VCond --# notpresent
| VCond Mood --# notpresent
; ;
-- The order of sentence is needed already in $VP$. -- The order of sentence is needed already in $VP$.
@@ -408,19 +403,6 @@ resource ResBul = ParamX - [Tense,Pres,Past,Fut,Cond] ** open Prelude, Predef in
} }
} ; } ;
auxWill : Number => Person => Str =
table {
Sg => table {
P1 => "щях" ;
_ => "щеше"
} ;
Pl => table {
P1 => "щяхме" ;
P2 => "щяхте" ;
P3 => "щяха"
}
} ;
verbBe : Verb = {s=table Aspect [auxBe; auxWould] ; vtype=VNormal} ; verbBe : Verb = {s=table Aspect [auxBe; auxWould] ; vtype=VNormal} ;
reflClitics : Case => Str = table {Acc => "се"; Dat => "си"; WithPrep => with_Word ++ "себе си"; CPrep => "себе си"} ; reflClitics : Case => Str = table {Acc => "се"; Dat => "си"; WithPrep => with_Word ++ "себе си"; CPrep => "себе си"} ;
@@ -537,17 +519,18 @@ resource ResBul = ParamX - [Tense,Pres,Past,Fut,Cond] ** open Prelude, Predef in
_ => Pos _ => Pos
} ; } ;
agr = personAgr gn p1 ; agr = personAgr gn p1 ;
verb : Order => Str verb : Bool => Str
= \\o => vpTenses vp ! t ! a ! p ! agr ! o ! Perf ; = \\q => vpTenses vp ! t ! a ! p ! agr ! q ! Perf ;
compl = vp.compl ! agr compl = vp.compl ! agr
in case o of { in case o of {
Inv => verb ! Inv ++ compl ++ subj ; Main => subj ++ verb ! False ++ compl ;
o => subj ++ verb ! o ++ compl Inv => verb ! False ++ compl ++ subj ;
Quest => subj ++ verb ! True ++ compl
} }
} ; } ;
vpTenses : VP -> Tense => Anteriority => Polarity => Agr => Order => Aspect => Str = vpTenses : VP -> Tense => Anteriority => Polarity => Agr => Bool => Aspect => Str =
\verb -> \\t,a,p,agr,o,asp => \verb -> \\t,a,p,agr,q0,asp =>
let clitic = case verb.vtype of { let clitic = case verb.vtype of {
VNormal => {s=verb.clitics; agr=agr} ; VNormal => {s=verb.clitics; agr=agr} ;
VMedial c => {s=verb.clitics++reflClitics ! c; agr=agr} ; VMedial c => {s=verb.clitics++reflClitics ! c; agr=agr} ;
@@ -560,14 +543,11 @@ resource ResBul = ParamX - [Tense,Pres,Past,Fut,Cond] ** open Prelude, Predef in
aorist = verb.s ! asp ! (VAorist (numGenNum clitic.agr.gn) clitic.agr.p) ; aorist = verb.s ! asp ! (VAorist (numGenNum clitic.agr.gn) clitic.agr.p) ;
imperfect = verb.s ! Imperf ! (VImperfect (numGenNum clitic.agr.gn) clitic.agr.p) ; imperfect = verb.s ! Imperf ! (VImperfect (numGenNum clitic.agr.gn) clitic.agr.p) ;
perfect = verb.s ! asp ! (VPerfect (aform clitic.agr.gn Indef (RObj Acc))) ; perfect = verb.s ! asp ! (VPerfect (aform clitic.agr.gn Indef (RObj Acc))) ;
pluperfect = verb.s ! asp ! (VPluPerfect (aform clitic.agr.gn Indef (RObj Acc))) ;
auxPres = auxBe ! VPres (numGenNum clitic.agr.gn) clitic.agr.p ; auxPres = auxBe ! VPres (numGenNum clitic.agr.gn) clitic.agr.p ;
auxAorist = auxBe ! VAorist (numGenNum clitic.agr.gn) clitic.agr.p ; auxAorist = auxBe ! VAorist (numGenNum clitic.agr.gn) clitic.agr.p ;
auxPerf = auxBe ! VPerfect (aform clitic.agr.gn Indef (RObj Acc)) ;
auxImperf = auxBe ! VImperfect (numGenNum clitic.agr.gn) clitic.agr.p ; auxImperf = auxBe ! VImperfect (numGenNum clitic.agr.gn) clitic.agr.p ;
auxCondS = auxCond ! numGenNum clitic.agr.gn ! clitic.agr.p ; auxCondS = auxCond ! numGenNum clitic.agr.gn ! clitic.agr.p ;
auxWillS = auxWill ! numGenNum clitic.agr.gn ! clitic.agr.p ;
apc : Str -> Str = \s -> apc : Str -> Str = \s ->
case <numGenNum clitic.agr.gn, clitic.agr.p> of { case <numGenNum clitic.agr.gn, clitic.agr.p> of {
@@ -575,33 +555,22 @@ resource ResBul = ParamX - [Tense,Pres,Past,Fut,Cond] ** open Prelude, Predef in
_ => auxPres++s++clitic.s _ => auxPres++s++clitic.s
} ; } ;
li0 = case <verb.ad.isEmpty,o> of { li0 = case <verb.ad.isEmpty,q0> of {<False,True> => "ли"; _ => []} ;
<False,Quest> => "ли" ;
_ => []
} ;
li = case <verb.ad.isEmpty,o> of { q = case verb.ad.isEmpty of {True => q0; False => False} ;
<True,Quest> => "ли"; li = case q of {True => "ли"; _ => []} ;
_ => []
} ;
vf1 : Str -> {s1 : Str; s2 : Str} = \s -> vf1 : Str -> {s1 : Str; s2 : Str} = \s ->
case p of { case p of {
Pos => case <verb.ad.isEmpty,o> of { Pos => case q of {True => {s1=[]; s2="ли"++apc []};
<True,Quest> => {s1=[]; s2="ли"++apc []}; False => {s1=apc []; s2=[]}} ;
<True,Inv> => {s1=[]; s2=apc []};
_ => {s1=apc []; s2=[]}
} ;
Neg => {s1="не"++apc li; s2=[]} Neg => {s1="не"++apc li; s2=[]}
} ; } ;
vf2 : Str -> {s1 : Str; s2 : Str} = \s -> vf2 : Str -> {s1 : Str; s2 : Str} = \s ->
case p of { case p of {
Pos => case <verb.ad.isEmpty,o> of { Pos => case q of {True => {s1=[]; s2="ли"++s};
<True,Quest> => {s1=[]; s2="ли"++s}; False => {s1=s; s2=[]}} ;
<True,Inv> => {s1=[]; s2=s};
_ => {s1=s; s2=[]}
} ;
Neg => case verb.vtype of Neg => case verb.vtype of
{VNormal => {s1="не"++s; s2=li} ; {VNormal => {s1="не"++s; s2=li} ;
_ => {s1="не"++s++li; s2=[]}} _ => {s1="не"++s++li; s2=[]}}
@@ -619,63 +588,18 @@ resource ResBul = ParamX - [Tense,Pres,Past,Fut,Cond] ** open Prelude, Predef in
Neg => {s1="не"++s++li++clitic.s; s2=[]} Neg => {s1="не"++s++li++clitic.s; s2=[]}
} ; } ;
vf5 : Str -> {s1 : Str; s2 : Str} = \s ->
case p of {
Pos => {s1=auxWillS++li++"да"++s; s2=[]} ;
Neg => {s1="нямаше"++li++"да"++s; s2=[]}
} ;
vf6 : Str -> {s1 : Str; s2 : Str} = \s ->
case p of {
Pos => let aux : Str =
case numGenNum clitic.agr.gn of {
Sg => "щял" ;
Pl => "щели"
}
in case <verb.ad.isEmpty,o> of {
<True,Quest> => {s1=aux++li++auxPres++"да"++s; s2=[]};
<True,Inv> => {s1=aux++auxPres++"да"++s; s2=[]};
_ => {s1=auxPres++aux++li++"да"++s; s2=[]}
} ;
Neg => {s1="нямало"++li++"да"++s; s2=[]}
} ;
vf7 : {s1 : Str; s2 : Str} =
case <a,clitic.agr.p> of {
<Simul,P1> => case <p,o> of {
<Pos,Inv> => {s1=[]; s2=auxPres++li++clitic.s} ;
<Pos,_> => {s1=auxPres++li++clitic.s; s2=[]} ;
<Neg,_> => {s1="не"++auxPres++li++clitic.s; s2=[]}
} ;
<Simul,P2> => vf4 auxPres ;
<Simul,P3> => vf2 clitic.s ;
<Anter,P3> => vf4 auxPerf ;
<Anter,_ > => case <p,o> of {
<Pos,Inv> => {s1=[]; s2=auxPres++li++clitic.s++auxPerf} ;
<Pos,_> => {s1=auxPres++li++clitic.s++auxPerf; s2=[]} ;
<Neg,_> => {s1="не"++auxPres++li++clitic.s++auxPerf; s2=[]}
}
} ;
verbs : {aux:{s1:Str; s2:Str}; main:Str} = verbs : {aux:{s1:Str; s2:Str}; main:Str} =
case <t,a> of { case <t,a> of {
<VPresent,Simul> => {aux=vf2 clitic.s; main=presentImperf} <VPresent,Simul> => {aux=vf2 clitic.s; main=presentImperf}
; --# notpresent ; --# notpresent
<VPresent,Anter> => {aux=vf1 clitic.s; main=perfect} ; --# notpresent <VPresent,Anter> => {aux=vf1 clitic.s; main=perfect} ; --# notpresent
<VPastSimple Indicative,Simul> => {aux=vf2 clitic.s; main=aorist} ; --# notpresent <VPastSimple,Simul> => {aux=vf2 clitic.s; main=aorist} ; --# notpresent
<VPastSimple Indicative,Anter> => {aux=vf4 auxAorist; main=perfect} ; --# notpresent <VPastSimple,Anter> => {aux=vf4 auxAorist; main=perfect} ; --# notpresent
<VPastSimple Renarrative,_> => {aux=vf7; main=pluperfect} ; --# notpresent <VPastImperfect,Simul> => {aux=vf2 clitic.s; main=imperfect} ; --# notpresent
<VPastImperfect Indicative,Simul> => {aux=vf2 clitic.s; main=imperfect} ; --# notpresent <VPastImperfect,Anter> => {aux=vf4 auxImperf; main=perfect} ; --# notpresent
<VPastImperfect Indicative,Anter> => {aux=vf4 auxImperf; main=perfect} ; --# notpresent <VFut, Simul> => {aux=vf3 clitic.s; main=present} ; --# notpresent
<VPastImperfect Renarrative,_> => {aux=vf7; main=perfect} ; --# notpresent <VFut, Anter> => {aux=vf3 (apc []); main=perfect} ; --# notpresent
<VPastFut,Simul> => {aux=vf5 clitic.s; main=present} ; --# notpresent <VCond,_ > => {aux=vf4 auxCondS; main=perfect} --# notpresent
<VPastFut,Anter> => {aux=vf5 (apc []); main=perfect} ; --# notpresent
<VFut Indicative, Simul> => {aux=vf3 clitic.s; main=present} ; --# notpresent
<VFut Indicative, Anter> => {aux=vf3 (apc []); main=perfect} ; --# notpresent
<VFut Renarrative, Simul> => {aux=vf6 clitic.s; main=present} ; --# notpresent
<VFut Renarrative, Anter> => {aux=vf6 (apc []); main=perfect} ; --# notpresent
<VCond Indicative,_ > => {aux=vf4 auxCondS; main=perfect} ; --# notpresent
<VCond Renarrative,_ > => {aux=vf4 (auxCondS++auxPerf); main=perfect} --# notpresent
} }
in verb.ad.s ++ li0 ++ verbs.aux.s1 ++ verbs.main ++ verbs.aux.s2 ; in verb.ad.s ++ li0 ++ verbs.aux.s1 ++ verbs.main ++ verbs.aux.s2 ;
+3 -3
View File
@@ -3,8 +3,8 @@ concrete TenseBul of Tense = CatBul [Tense,Temp], TenseX - [Temp,Tense,TTAnt,TPr
lin lin
TTAnt t a = {s = a.s ++ t.s ; a = a.a ; t = t.t} ; TTAnt t a = {s = a.s ++ t.s ; a = a.a ; t = t.t} ;
TPres = {s = []} ** {t = VPresent} ; TPres = {s = []} ** {t = VPresent} ;
TPast = {s = []} ** {t = VPastImperfect Indicative} ; --# notpresent TPast = {s = []} ** {t = VPastImperfect} ; --# notpresent
TFut = {s = []} ** {t = VFut Indicative} ; --# notpresent TFut = {s = []} ** {t = VFut} ; --# notpresent
TCond = {s = []} ** {t = VCond Indicative} ; --# notpresent TCond = {s = []} ** {t = VCond} ; --# notpresent
} }
+4 -1
View File
@@ -101,7 +101,7 @@ lin
InOrderToVP = variants {} ; -- VP -> Adv ; -- (in order) to publish the document InOrderToVP = variants {} ; -- VP -> Adv ; -- (in order) to publish the document
ApposNP = variants {} ; -- NP -> NP -> NP ; -- Mr Macron, the president of France, ApposNP = variants {} ; -- NP -> NP -> NP ; -- Mr Macron, the president of France,
AdAdV = variants {} ; -- AdA -> AdV -> AdV ; -- almost always AdAdV = variants {} ; -- AdA -> AdV -> AdV ; -- almost always
UttAdV adv = {s = adv.s} ; -- AdV -> Utt ; -- always(!) UttAdV = variants {} ; -- AdV -> Utt ; -- always(!)
PositAdVAdj = variants {} ; -- A -> AdV ; -- (that she) positively (sleeps) PositAdVAdj = variants {} ; -- A -> AdV ; -- (that she) positively (sleeps)
CompS = variants {} ; -- S -> Comp ; -- (the fact is) that she sleeps CompS = variants {} ; -- S -> Comp ; -- (the fact is) that she sleeps
CompQS = variants {} ; -- QS -> Comp ; -- (the question is) who sleeps CompQS = variants {} ; -- QS -> Comp ; -- (the question is) who sleeps
@@ -139,6 +139,9 @@ lin
SubjunctRelCN cn rs = RelCN cn rs ; -- no difference from indicative SubjunctRelCN cn rs = RelCN cn rs ; -- no difference from indicative
lincat
X = {s : Str} ;
lin lin
UseComp_estar = UseComp ; UseComp_estar = UseComp ;
UseComp_ser = UseComp ; UseComp_ser = UseComp ;
-4
View File
@@ -6,8 +6,4 @@ lin
s = prep.s ++ np.prep ! prep.c s = prep.s ++ np.prep ! prep.c
} ; } ;
SubjS subj s = {
s = subj.s ++ s.s
} ;
} }
+2 -3
View File
@@ -21,11 +21,10 @@ concrete CatCze of Cat =
RP = AdjForms ; RP = AdjForms ;
VP = {verb : VerbForms ; clit,compl : Agr => Str} ; ---- more fields probably needed VP = {verb : VerbForms ; clit,compl : Agr => Str} ; ---- more fields probably needed
VPSlash = {verb : VerbForms ; clit,compl : Agr => Str ; c : ComplementCase ; ind : Agr => Str} ; -- ind : incorporated indirect object, rendered after the object slot VPSlash = {verb : VerbForms ; clit,compl : Agr => Str ; c : ComplementCase} ; ----
V = ResCze.VerbForms ; V = ResCze.VerbForms ;
V2 = ResCze.VerbForms ** {c : ComplementCase} ; V2 = ResCze.VerbForms ** {c : ComplementCase} ;
V3 = ResCze.VerbForms ** {c,c2 : ComplementCase} ; -- c : direct object, c2 : indirect object VS,VQ = ResCze.VerbForms ;
VS,VQ,VV = ResCze.VerbForms ;
A = ResCze.AdjForms ; A = ResCze.AdjForms ;
AP = ResCze.Adjective ** {isPost : Bool} ; -- {s : Gender => Number => Case => Str} AP = ResCze.Adjective ** {isPost : Bool} ; -- {s : Gender => Number => Case => Str}
+1
View File
@@ -12,6 +12,7 @@ concrete ExtendCze of Extend = CatCze **
,SlashBareV2S ,SlashBareV2S
,PredIAdvVP ,PredIAdvVP
,PredAPVP ,PredAPVP
,ExistsNP
,ExistS ,ExistS
,ExistPluralCN ,ExistPluralCN
,ExistNPQS ,ExistNPQS
-27
View File
@@ -1,32 +1,5 @@
concrete IdiomCze of Idiom = CatCze ** open Prelude, ResCze in { concrete IdiomCze of Idiom = CatCze ** open Prelude, ResCze in {
lin
ImpP3 np vp = {
s = "nechť" ++ np.s ! Nom ++ vp.clit ! np.a ++
verbAgr vp.verb np.a True ++ vp.compl ! np.a
} ;
ImpersCl vp = let agr = Ag Neutr Sg P3 in {
subj = [] ;
clit = vp.clit ! agr ;
compl = vp.compl ! agr ;
verb = vp.verb ;
a = agr
} ;
GenericCl vp = let agr = Ag (Masc Anim) Pl P3 in {
subj = [] ;
clit = vp.clit ! agr ;
compl = vp.compl ! agr ;
verb = vp.verb ;
a = agr
} ;
ExistNP np = {
subj, clit = [] ;
compl = np.s ! Nom ;
verb = iii_kupovatVerbForms "existovat" ;
a = np.a
} ;
} }
+1 -2
View File
@@ -1,11 +1,10 @@
--# -path=.:../abstract:../common:../api --# -path=.:../abstract:../common:../api
concrete LangCze of Lang = concrete LangCze of Lang =
GrammarCze, GrammarCze,
LexiconCze LexiconCze
-- ,ConstructionCze -- ,ConstructionCze
-- ,DocumentationCze --# notpresent -- ,DocumentationCze --# notpresent
,MarkupCze - [stringMark]
** { ** {
} }
-27
View File
@@ -1,27 +0,0 @@
--# -path=.:../abstract:../common
concrete MarkupCze of Markup = CatCze, MarkHTMLX ** open ResCze in {
lin
MarkupCN m cn = cn ** {s = \\n,c => appMark m (cn.s ! n ! c)} ;
-- s, clit and prep are alternative surface forms, so each is marked;
-- but clit ! Nom is the pro-drop subject, empty for every pronoun,
-- and marking it up would leave the tags around nothing
MarkupNP m np = np ** {
s = \\c => appMark m (np.s ! c) ;
clit = \\c => case c of {
Nom => np.clit ! Nom ;
_ => appMark m (np.clit ! c)
} ;
prep = \\c => appMark m (np.prep ! c)
} ;
MarkupAP m ap = ap ** {s = \\g,n,c => appMark m (ap.s ! g ! n ! c)} ;
MarkupAdv m adv = {s = appMark m adv.s} ;
MarkupS m s = {s = appMark m s.s} ;
MarkupUtt m utt = {s = appMark m utt.s} ;
MarkupPhr m phr = {s = appMark m phr.s} ;
MarkupText m txt = {s = appMark m txt.s} ;
}
+4
View File
@@ -9,10 +9,12 @@ oper AdjOrd : Ord -> AP = notYet "AdjOrd" ;
oper AdnCAdv : CAdv -> AdN = notYet "AdnCAdv" ; oper AdnCAdv : CAdv -> AdN = notYet "AdnCAdv" ;
oper AdvIAdv : IAdv -> Adv -> IAdv = notYet "AdvIAdv" ; oper AdvIAdv : IAdv -> Adv -> IAdv = notYet "AdvIAdv" ;
oper AdvIP : IP -> Adv -> IP = notYet "AdvIP" ; oper AdvIP : IP -> Adv -> IP = notYet "AdvIP" ;
oper AdvS : Adv -> S -> S = notYet "AdvS" ;
oper AdvSlash : ClSlash -> Adv -> ClSlash = notYet "AdvSlash" ; oper AdvSlash : ClSlash -> Adv -> ClSlash = notYet "AdvSlash" ;
oper CAdvAP : CAdv -> AP -> NP -> AP = notYet "CAdvAP" ; oper CAdvAP : CAdv -> AP -> NP -> AP = notYet "CAdvAP" ;
oper CleftAdv : Adv -> S -> Cl = notYet "CleftAdv" ; oper CleftAdv : Adv -> S -> Cl = notYet "CleftAdv" ;
oper CleftNP : NP -> RS -> Cl = notYet "CleftNP" ; oper CleftNP : NP -> RS -> Cl = notYet "CleftNP" ;
oper CompCN : CN -> Comp = notYet "CompCN" ;
oper CompIAdv : IAdv -> IComp = notYet "CompIAdv" ; oper CompIAdv : IAdv -> IComp = notYet "CompIAdv" ;
oper CompIP : IP -> IComp = notYet "CompIP" ; oper CompIP : IP -> IComp = notYet "CompIP" ;
oper ComparA : A -> NP -> AP = notYet "ComparA" ; oper ComparA : A -> NP -> AP = notYet "ComparA" ;
@@ -61,6 +63,8 @@ oper RelNP : NP -> RS -> NP = notYet "RelNP" ;
oper RelSlash : RP -> ClSlash -> RCl = notYet "RelSlash" ; oper RelSlash : RP -> ClSlash -> RCl = notYet "RelSlash" ;
oper SentAP : AP -> SC -> AP = notYet "SentAP" ; oper SentAP : AP -> SC -> AP = notYet "SentAP" ;
oper SentCN : CN -> SC -> CN = notYet "SentCN" ; oper SentCN : CN -> SC -> CN = notYet "SentCN" ;
oper Slash2V3 : V3 -> NP -> VPSlash = notYet "Slash2V3" ;
oper Slash3V3 : V3 -> NP -> VPSlash = notYet "Slash3V3" ;
oper SlashPrep : Cl -> Prep -> ClSlash = notYet "SlashPrep" ; oper SlashPrep : Cl -> Prep -> ClSlash = notYet "SlashPrep" ;
oper SlashV2A : V2A -> AP -> VPSlash = notYet "SlashV2A" ; oper SlashV2A : V2A -> AP -> VPSlash = notYet "SlashV2A" ;
oper SlashV2Q : V2Q -> QS -> VPSlash = notYet "SlashV2Q" ; oper SlashV2Q : V2Q -> QS -> VPSlash = notYet "SlashV2Q" ;
-7
View File
@@ -99,12 +99,5 @@ lin
NumDecimal ds = ds ** {s = \\_,_ => ds.s} ; NumDecimal ds = ds ** {s = \\_,_ => ds.s} ;
NumNumeral nu = nu ; NumNumeral nu = nu ;
SentCN cn sc = cn ** {s = \\n,c => cn.s ! n ! c ++ sc.s} ;
PredetNP pred np = np ** {
s = \\c => pred.s ++ np.s ! c ;
clit = \\c => pred.s ++ np.clit ! c ;
prep = \\c => pred.s ++ np.prep ! c
} ;
} }
-8
View File
@@ -122,14 +122,6 @@ oper
= \vf,c -> vf ** {c = c} ; = \vf,c -> vf ** {c = c} ;
} ; } ;
mkV3 = overload {
mkV3 : VerbForms -> VerbForms ** {c,c2 : ComplementCase}
= \vf -> vf ** {c = {s = [] ; c = Acc ; hasPrep = False} ;
c2 = {s = [] ; c = Dat ; hasPrep = False}} ;
mkV3 : VerbForms -> ComplementCase -> ComplementCase -> VerbForms ** {c,c2 : ComplementCase}
= \vf,c,c2 -> vf ** {c = c ; c2 = c2} ;
} ;
------------------------ ------------------------
-- Adverbs, prepositions, conjunctions, ... -- Adverbs, prepositions, conjunctions, ...
-5
View File
@@ -6,11 +6,6 @@ lin
UttCN cn = {s = cn.s ! Sg ! Nom} ; UttCN cn = {s = cn.s ! Sg ! Nom} ;
UttAP ap = {s = ap.s ! Masc Anim ! Sg ! Nom} ; UttAP ap = {s = ap.s ! Masc Anim ! Sg ! Nom} ;
UttNP np = {s = np.s ! Nom} ; UttNP np = {s = np.s ! Nom} ;
UttVP vp = let agr = Ag Neutr Sg P3 in {s = vp.clit ! agr ++ vp.verb.inf ++ vp.compl ! agr} ;
UttImpSg pol imp = {s = pol.s ++ imp.s} ;
UttImpPl pol imp = {s = pol.s ++ imp.s} ;
UttImpPol pol imp = {s = pol.s ++ imp.s} ;
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ; PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
-2
View File
@@ -4,6 +4,4 @@ concrete QuestionCze of Question = CatCze **
lin lin
QuestCl cl = cl ; ---- QuestCl cl = cl ; ----
QuestIAdv iadv cl = cl ** {clit = iadv.s ++ cl.clit} ;
} }
+18 -121
View File
@@ -28,11 +28,6 @@ oper
softConsonant : pattern Str = #("ť"|"ď"|"j"|"ň"|"ř"|"š"|"c"|"č"|"ž") ; softConsonant : pattern Str = #("ť"|"ď"|"j"|"ň"|"ř"|"š"|"c"|"č"|"ž") ;
neutralConsonant : pattern Str = #("b"|"f"|"l"|"m"|"p"|"s"|"v") ; neutralConsonant : pattern Str = #("b"|"f"|"l"|"m"|"p"|"s"|"v") ;
-- neutral consonants take the hard endings by default (hrad, pán), and so do
-- the foreign "z" and "x"; this is the class to test when choosing a paradigm
hardishConsonant : pattern Str =
#("d"|"t"|"g"|"h"|"k"|"n"|"r" | "b"|"f"|"l"|"m"|"p"|"s"|"v" | "z"|"x") ;
consonant : pattern Str = consonant : pattern Str =
#( #(
"d" | "t" | "g" | "h" | "k" | "n" | "r" | "d" | "t" | "g" | "h" | "k" | "n" | "r" |
@@ -144,33 +139,22 @@ oper
declensionNounForms : (nom,gen : Str) -> Gender -> NounForms declensionNounForms : (nom,gen : Str) -> Gender -> NounForms
= \nom,gen,g -> = \nom,gen,g ->
-- the oblique stem, for the paradigms that cannot derive it from the nominative let decl : DeclensionType = case <g, nom, gen> of {
let stem : Str = Predef.tk 1 gen ; <Masc Anim, _ + #hardConsonant, _ + "a"> => declPAN ;
decl : DeclensionType = case <g, nom, gen> of {
<Masc Anim, _ + "tel" , _ + "e"> => declMUZstem stem ;
<Masc Anim, _ + "ce" , _ + "e"> => declSOUDCE ;
<Masc Anim, _ + ("us"|"os") , _ + "a"> => declLATINUSA ;
<Masc Anim, _ + "a" , _ + "a"> => declPREDSEDA ; <Masc Anim, _ + "a" , _ + "a"> => declPREDSEDA ;
<Masc Anim, _ + (#softConsonant|#hardishConsonant), _ + ("e"|"ě")> => declMUZstem stem ; <Masc Inanim, _ + #hardConsonant, _ + "u"> => declHRAD ;
<Masc Anim, _ + #hardishConsonant, _ + "a"> => declPAN ;
<Masc Inanim, _ + ("us"|"os") , _ + "u"> => declLATINUS ;
<Masc Inanim, _ + "ý" , _ + "ého"> => declADJM ;
<Masc Inanim, _ + (#softConsonant|#hardishConsonant), _ + ("e"|"ě")> => declSTROJ ;
<Masc Inanim, _ + #hardishConsonant, _ + "u"> => declHRADstem stem ;
<Masc Inanim, _ + #hardishConsonant, _ + "a"> => declHRADAstem stem ;
<Fem, _ + "a" , _ + "y"> => declZENA ; <Fem, _ + "a" , _ + "y"> => declZENA ;
<Fem, _ + "á" , _ + "é"> => declADJF ;
<Fem, _ + ("e"|"ě") , _ + ("e"|"ě")> => declRUZE ;
<Fem, _ + (#softConsonant|#hardishConsonant), _ + "i"> => declKOST ; --- also many other "st" 3.6.3
<Fem, _ + (#softConsonant|#hardishConsonant), _ + ("e"|"ě")> => declPISEN ;
<Neutr, _ + "um" , _ + "a"> => declLATINUM ;
<Neutr, _ + "ma" , _ + ("matu"|"mata")> => declGREEKMA ;
<Neutr, _ + "o" , _ + "a"> => declMESTO ; <Neutr, _ + "o" , _ + "a"> => declMESTO ;
<Masc Anim, _ + #softConsonant, _ + "e"> => declMUZ ;
<Masc Anim, _ + "tel" , _ + "e"> => declMUZ ;
<Masc Anim, _ + "ce" , _ + "e"> => declSOUDCE ;
<Masc Inanim, _ + #softConsonant, _ + "e"> => declSTROJ ;
<Fem, _ + ("e"|"ě") , _ + ("e"|"ě")> => declRUZE ;
<Fem, _ + #softConsonant, _ + "e"> => declPISEN ;
<Fem, _ + "ost" , _ + "i"> => declKOST ; --- also many other "st" 3.6.3
<Neutr, _ + "e" , _+"ete"> => declKURE ; <Neutr, _ + "e" , _+"ete"> => declKURE ;
<Neutr, _ + "e" , _ + "e"> => declMORE ;
<Neutr, _ + "í" , _ + "í"> => declSTAVENI ; <Neutr, _ + "í" , _ + "í"> => declSTAVENI ;
<Neutr, _ + ("e"|"ě") , _ + ("e"|"ě")> => declMORE ;
<Masc Inanim, _ + ("é"|"i"|"y"|"e"), _ + ("é"|"i"|"y"|"e")> => declINVAR (Masc Inanim) ;
<Neutr, _ + ("é"|"i"|"y") , _ + ("é"|"i"|"y")> => declINVAR Neutr ;
_ => (\s -> declSTROJ ("" + s)) -- Predef.error ("cannot infer declension type for" ++ nom ++ gen) _ => (\s -> declSTROJ ("" + s)) -- Predef.error ("cannot infer declension type for" ++ nom ++ gen)
} }
in decl nom ; in decl nom ;
@@ -181,14 +165,12 @@ oper
= \s -> case s of { = \s -> case s of {
_ + "ost" => declKOST s ; _ + "ost" => declKOST s ;
_ + "tel" => declMUZ s ; _ + "tel" => declMUZ s ;
_ + "us" => declLATINUS s ; _ + #hardConsonant => declHRAD s ;
_ + "um" => declLATINUM s ;
_ + #hardishConsonant => declHRAD s ;
_ + #softConsonant => declSTROJ s ; _ + #softConsonant => declSTROJ s ;
_ + "a" => declZENA s ; _ + "a" => declZENA s ;
_ + "o" => declMESTO s ; _ + "o" => declMESTO s ;
_ + "ce" => declSOUDCE s ; _ + "ce" => declSOUDCE s ;
_ + ("e"|"ě") => declMORE s ; _ + "e" => declMORE s ;
_ + "í" => declSTAVENI s ; _ + "í" => declSTAVENI s ;
_ => declSTROJ ("" + s) -- Predef.error ("cannot guess declension type for" ++ s) _ => declSTROJ ("" + s) -- Predef.error ("cannot guess declension type for" ++ s)
} ; } ;
@@ -234,9 +216,9 @@ oper
g = Masc Anim g = Masc Anim
} ; } ;
-- the oblique stem is a separate argument, because it cannot always be declHRAD : DeclensionType = \hrad -> --- 3.5.2: sloc u/ě/e extra arg, sport-u, hrad-ě ; sgen u/a
-- derived from the nominative: uzel-uzlu but člen-členu let hrd = dropFleetingE hrad
declHRADstem : Str -> DeclensionType = \hrd,hrad -> in
{ {
snom,sacc = hrad ; snom,sacc = hrad ;
sgen,sdat = hrd + "u" ; --- Berlín-a sgen,sdat = hrd + "u" ; --- Berlín-a
@@ -251,9 +233,6 @@ oper
g = Masc Inanim g = Masc Inanim
} ; } ;
declHRAD : DeclensionType = \hrad -> --- 3.5.2: sloc u/ě/e extra arg, sport-u, hrad-ě ; sgen u/a
declHRADstem (dropFleetingE hrad) hrad ;
declZENA : DeclensionType = \zena -> --- 3.6.1 sge y/i ; pgen sometimes shortening declZENA : DeclensionType = \zena -> --- 3.6.1 sge y/i ; pgen sometimes shortening
let zen = init zena let zen = init zena
in in
@@ -291,91 +270,9 @@ oper
g = Neutr g = Neutr
} ; } ;
-- Latin masculines in -us: the ending is dropped outside the nominative
-- (algoritmus - algoritmu), otherwise they follow hrad
declLATINUS : DeclensionType = \algoritmus ->
let algoritm = Predef.tk 2 algoritmus
in declHRAD algoritm ** {
snom, sacc = algoritmus ;
svoc = algoritm + "e"
} ;
declLATINUSA : DeclensionType = \genius ->
declLATINUS genius ** {g = Masc Anim} ;
-- Latin neuters in -um: the ending is dropped outside the nominative
-- (kontinuum - kontinua), otherwise they follow město
declLATINUM : DeclensionType = \kompaktum ->
let kompakt = Predef.tk 2 kompaktum
in declMESTO (kompakt + "o") ** {
snom, sacc, svoc = kompaktum
} ;
-- Greek neuters in -ma, with the stem extended by -t- (schéma - schématu)
declGREEKMA : DeclensionType = \schema ->
let schemat = schema + "t"
in {
snom,sacc,svoc = schema ;
sgen,sdat,sloc = schemat + "u" ;
sins = schemat + "em" ;
pnom,pacc = schemat + "a" ;
pgen = schemat ;
pdat = schemat + "ům" ;
ploc = schemat + "ech" ;
pins = schemat + "y" ;
g = Neutr
} ;
-- the hrad type with genitive -a instead of -u (les - lesa, zákon - zákona)
declHRADAstem : Str -> DeclensionType = \les_,les ->
declHRADstem les_ les ** {sgen = les_ + "a"} ;
declHRADA : DeclensionType = \les ->
declHRADAstem (dropFleetingE les) les ;
-- nouns that are adjectives in form: proměnná - proměnné, nultý - nultého
declADJF : DeclensionType = \promenna ->
let a = mladyAdjForms (init promenna + "ý")
in {
snom,svoc = a.fsnom ;
sgen = a.fsgen ;
sdat,sloc = a.fsdat ;
sacc = a.fsacc ;
sins = a.fsins ;
pnom,pacc = a.fpnom ;
pgen,ploc = a.pgen ;
pdat = a.msins ;
pins = a.pins ;
g = Fem
} ;
declADJM : DeclensionType = \nulty ->
let a = mladyAdjForms nulty
in {
snom,sacc,svoc = a.msnom ;
sgen = a.msgen ;
sdat = a.msdat ;
sloc = a.msloc ;
sins = a.msins ;
pnom,pacc = a.fpnom ;
pgen,ploc = a.pgen ;
pdat = a.msins ;
pins = a.pins ;
g = Masc Inanim
} ;
-- indeclinable loans: bombé, tamari, software
declINVAR : Gender -> DeclensionType = \g,s -> {
snom,sgen,sdat,sacc,svoc,sloc,sins = s ;
pnom,pgen,pdat,pacc,ploc,pins = s ;
g = g
} ;
declMUZ : DeclensionType = \muz_ -> --- 3.5.3 : sdat,sloc ; pnom declMUZ : DeclensionType = \muz_ -> --- 3.5.3 : sdat,sloc ; pnom
declMUZstem (dropFleetingE muz_) muz_ ; let muz = dropFleetingE muz_
in
declMUZstem : Str -> DeclensionType = \muz,muz_ ->
{ {
snom = muz_ ; snom = muz_ ;
sgen,sacc = muz + "e" ; --- pacc sgen,sacc = muz + "e" ; --- pacc
+1 -20
View File
@@ -28,24 +28,5 @@ lin
pol.s ++ verbAgr rcl.verb a pol.p ++ pol.s ++ verbAgr rcl.verb a pol.p ++
rcl.compl ! a ; rcl.compl ! a ;
} ; } ;
-- no imperative in VerbForms yet; the 1st person plural present is used
-- instead, which is the normal register in mathematical Czech
-- ("předpokládáme, že ..." = "we assume that ...")
ImpVP vp = let agr = Ag (Masc Anim) Pl P1 in
{s = vp.clit ! agr ++ verbAgr vp.verb agr True ++ vp.compl ! agr} ;
EmbedS s = {s = "že" ++ s.s} ;
EmbedQS qs = {s = qs.s} ;
EmbedVP vp = let agr = Ag Neutr Sg P3 in
{s = vp.clit ! agr ++ vp.verb.inf ++ vp.compl ! agr} ;
AdvS a s = {s = a.s ++ s.s} ;
ExtAdvS a s = {s = a.s ++ SOFT_BIND ++ "," ++ s.s} ;
SSubjS a subj b = {s = a.s ++ SOFT_BIND ++ "," ++ subj.s ++ b.s} ;
} }
-31
View File
@@ -1,42 +1,11 @@
concrete StructuralCze of Structural = CatCze ** concrete StructuralCze of Structural = CatCze **
open ParadigmsCze, ResCze, Prelude in { open ParadigmsCze, ResCze, Prelude in {
-- a singular determiner inflecting like an adjective, e.g. "každý", "nějaký"
oper
adjDet : AdjForms -> Determiner = \afs -> {
s = \\g,c => (adjFormsAdjective afs).s ! g ! Sg ! c ;
size = Num1
} ;
lin lin
all_Predet = {s = "všechny"} ;
and_Conj = mkConj "a" ; and_Conj = mkConj "a" ;
both7and_DConj = {s1 = "jak" ; s2 = "tak"} ;
between_Prep = mkPrep "mezi" Ins ;
by8agent_Prep = mkPrep "od" Gen ; ---- TODO this means "from", there might be no good translation by8agent_Prep = mkPrep "od" Gen ; ---- TODO this means "from", there might be no good translation
by8means_Prep = mkPrep "pomocí" Gen ;
can_VV = {
inf = "moci" ;
pressg1 = "mohu" ;
pressg2 = "můžeš" ;
pressg3, negpressg3 = "může" ;
prespl1 = "můžeme" ;
prespl2 = "můžete" ;
prespl3 = "mohou" ;
pastpartsg = "mohl" ;
pastpartpl = "mohli" ;
} ;
either7or_DConj = {s1 = "buď" ; s2 = "nebo"} ;
every_Det = adjDet (mladyAdjForms "každý") ;
few_Det = invarNumeral "málo" ; -- CEG 6.8 --- TODO genitive mála few_Det = invarNumeral "málo" ; -- CEG 6.8 --- TODO genitive mála
for_Prep = mkPrep "pro" accusative ; for_Prep = mkPrep "pro" accusative ;
if_Subj = {s = "jestliže"} ;
no_Quant = adjFormsAdjective (mladyAdjForms "žádný") ;
on_Prep = mkPrep "na" Loc ;
someSg_Det = adjDet (mladyAdjForms "nějaký") ;
that_Subj = {s = "že"} ;
under_Prep = mkPrep "pod" Ins ;
where_IAdv = {s = "kde"} ;
from_Prep = mkPrep (pre {"s"|"z" => "ze" ; _ => "z"}) Gen ; ---- consonant clusters from_Prep = mkPrep (pre {"s"|"z" => "ze" ; _ => "z"}) Gen ; ---- consonant clusters
have_V2 = mkV2 haveVerbForms ; have_V2 = mkV2 haveVerbForms ;
in_Prep = mkPrep (pre {"v"|"m" => "ve" ; _ => "v"}) Loc ; ---- in_Prep = mkPrep (pre {"v"|"m" => "ve" ; _ => "v"}) Loc ; ----
+2 -41
View File
@@ -3,48 +3,9 @@
concrete SymbolCze of Symbol = CatCze ** open Prelude, ResCze in { concrete SymbolCze of Symbol = CatCze ** open Prelude, ResCze in {
lincat lincat
Symb, [Symb] = SS ; Symb = {s : Str} ;
lin lin
MkSymb s = s ; MkSymb s = s ;
SymbPN s = lin PN {s = \\_ => s.s ; g = Neutr} ;
BaseSymb = infixSS "a" ;
ConsSymb = infixSS bindComma ;
SymbPN s = symbolPN s.s ;
IntPN i = symbolPN i.s ;
FloatPN f = symbolPN f.s ;
-- unlike a bare symbol, a cardinal used as a name still declines
NumPN card = lin PN {s = \\c => card.s ! Neutr ! c ; g = Neutr} ;
-- the numeral is an invariable label: "úroveň pět", "na úrovni pět"
CNNumNP cn card = {
s,clit,prep = \\c => cn.s ! Sg ! c ++ card.s ! cn.g ! Nom ;
a = Ag cn.g Sg P3 ;
hasClit = False ;
} ;
CNIntNP cn i = {
s,clit,prep = \\c => cn.s ! Sg ! c ++ i.s ;
a = Ag cn.g Sg P3 ;
hasClit = False ;
} ;
-- as DetCN in NounCze, with the symbols in apposition
CNSymbNP det cn xs = {
s,clit,prep = \\c => det.s ! cn.g ! c ++ numSizeForm cn.s det.size c ++ xs.s ;
a = numSizeAgr cn.g det.size P3 ;
hasClit = False ;
} ;
SymbS sy = sy ;
SymbNum sy = {s = \\_,_ => sy.s ; size = Num5} ; -- "n čísel", like numerals from 5 up
SymbOrd sy = {s = glue sy.s "-tý"} ; ---- Ord is still an uninflected string
oper
symbolPN : Str -> PN
= \s -> lin PN {s = \\_ => s ; g = Neutr} ;
} }
+3 -47
View File
@@ -8,35 +8,17 @@ lin
ComplSlash vps np = case <np.hasClit, vps.c.hasPrep> of { ComplSlash vps np = case <np.hasClit, vps.c.hasPrep> of {
<True,False> => vps ** { <True,False> => vps ** {
clit = \\a => vps.clit ! a ++ np.clit ! vps.c.c ; clit = \\a => vps.clit ! a ++ np.clit ! vps.c.c
compl = \\a => vps.compl ! a ++ vps.ind ! a
} ; } ;
_ => vps ** { _ => vps ** {
compl = \\a => vps.compl ! a ++ vps.c.s ++ np.s ! vps.c.c ++ vps.ind ! a compl = \\a => vps.compl ! a ++ vps.c.s ++ np.s ! vps.c.c
} }
} ; } ;
SlashV2a v = { SlashV2a v = {
verb = v ; verb = v ;
clit,compl = \\_ => [] ; clit,compl = \\_ => [] ;
c = v.c ; c = v.c
ind = \\_ => []
} ;
-- three-place verbs: c = direct object case, c2 = indirect object case
Slash2V3 v np = { -- fill the direct object, leave the indirect open
verb = v ;
clit = \\_ => [] ;
compl = \\_ => v.c.s ++ np.s ! v.c.c ;
c = v.c2 ;
ind = \\_ => []
} ;
Slash3V3 v np = { -- fill the indirect object (rendered after the object slot)
verb = v ;
clit = \\_ => [] ;
compl = \\_ => [] ;
c = v.c ;
ind = \\_ => v.c2.s ++ np.s ! v.c2.c
} ; } ;
UseComp comp = { UseComp comp = {
@@ -54,12 +36,6 @@ lin
CompNP np = { CompNP np = {
s = \\a_ => np.s ! Nom ; ---- InstrC in Pol s = \\a_ => np.s ! Nom ; ---- InstrC in Pol
} ; } ;
CompCN cn = {
s = \\a => case a of {
Ag _ n _ => cn.s ! n ! Nom ---- InstrC also possible
}
} ;
CompAdv adv = { CompAdv adv = {
s = \\a_ => adv.s s = \\a_ => adv.s
@@ -69,24 +45,4 @@ lin
compl = \\a => vp.compl ! a ++ adv.s compl = \\a => vp.compl ! a ++ adv.s
} ; } ;
-- VerbForms has no passive participle yet, so the reflexive passive is used:
-- "číslo se dělí" = "the number is divided"
PassV2 v = {
verb = v ;
clit = \\_ => "se" ;
compl = \\_ => []
} ;
ComplVV vv vp = {
verb = vv ;
clit = vp.clit ;
compl = \\a => vp.verb.inf ++ vp.compl ! a
} ;
ComplVS vs s = {
verb = vs ;
clit = \\_ => [] ;
compl = \\_ => SOFT_BIND ++ "," ++ "že" ++ s.s
} ;
} }
-40
View File
@@ -111,27 +111,6 @@ lin
s3= "" s3= ""
} ; } ;
{-
-} --# notpresent
InflectionCl = \cl -> {
t = "cl" ;
s1 = heading1 "Clause" ;
s2 = frameTable (
tr (intagAttr "th" "colspan=\"3\"" "Simple tenses" ++
intagAttr "th" "colspan=\"3\"" "Perfect tenses") ++
tr (th "tense" ++ th "declarative" ++ th "interrogative" ++
th "tense" ++ th "declarative" ++ th "interrogative") ++
inflClauseTense "present" "present perfect" Pres cl ++
inflClauseTense "past" "past perfect" Past cl ++
inflClauseTense "future" "future perfect" Fut cl ++
inflClauseTense "conditional" "conditional perfect" Cond cl
)
} ;
{- --# notpresent
-}
InflectionV v = { InflectionV v = {
t = "v" ; t = "v" ;
s1= heading1 "Verb" ++ s1= heading1 "Verb" ++
@@ -248,25 +227,6 @@ lin
} ; } ;
oper oper
{-
-} --# notpresent
inflClauseTense : Str -> Str -> ResEng.Tense -> Cl -> Str = \simple,perfect,tense,cl ->
tr (intagAttr "th" "rowspan=\"2\"" simple ++
td (cl.s ! tense ! Simul ! CPos ! ODir False) ++
td (cl.s ! tense ! Simul ! CPos ! OQuest) ++
intagAttr "th" "rowspan=\"2\"" perfect ++
td (cl.s ! tense ! Anter ! CPos ! ODir False) ++
td (cl.s ! tense ! Anter ! CPos ! OQuest)) ++
tr (td (cl.s ! tense ! Simul ! CNeg True ! ODir False) ++
td (cl.s ! tense ! Simul ! CNeg True ! OQuest) ++
td (cl.s ! tense ! Anter ! CNeg True ! ODir False) ++
td (cl.s ! tense ! Anter ! CNeg True ! OQuest)) ;
{- --# notpresent
-}
inflVerb : Verb -> Str = \verb -> inflVerb : Verb -> Str = \verb ->
frameTable ( frameTable (
tr (th "infinitive" ++ td (verb.s ! VInf)) ++ tr (th "infinitive" ++ td (verb.s ! VInf)) ++
-2
View File
@@ -500,6 +500,4 @@ lin CardCNCard card cn =
lin theyFem_Pron = mkPron "they" "them" "their" "theirs" plural P3 feminine ; lin theyFem_Pron = mkPron "they" "them" "their" "theirs" plural P3 feminine ;
lin theyNeutr_Pron = mkPron "they" "them" "their" "theirs" plural P3 nonhuman ; lin theyNeutr_Pron = mkPron "they" "them" "their" "theirs" plural P3 nonhuman ;
lin UttAdV adv = adv ;
} }
+1 -1
View File
@@ -149,7 +149,7 @@ flags optimize=values ;
stick_V = irregV "stick" "stuck" "stuck" ; stick_V = irregV "stick" "stuck" "stuck" ;
sting_V = irregV "sting" "stung" "stung" ; sting_V = irregV "sting" "stung" "stung" ;
stink_V = irregV "stink" "stank" "stunk" ; stink_V = irregV "stink" "stank" "stunk" ;
stride_V = irregV "stride" "strode" "stridden" ; stride_V = irregV "stride" "strod" "stridden" ;
strike_V = irregV "strike" "struck" "struck" ; strike_V = irregV "strike" "struck" "struck" ;
string_V = irregV "string" "strung" "strung" ; string_V = irregV "string" "strung" "strung" ;
strive_V = irregV "strive" "strove" "striven" ; strive_V = irregV "strive" "strove" "striven" ;
+3 -3
View File
@@ -39,9 +39,9 @@ concrete NounEng of Noun = CatEng ** open MorphoEng, ResEng, Prelude in {
DetQuant quant num = { DetQuant quant num = {
s = quant.s ! num.hasCard ! num.n ++ num.s ! quant.isDef ! Nom; s = quant.s ! num.hasCard ! num.n ++ num.s ! quant.isDef ! Nom;
sp = \\g,hasAdj,c => case num.hasCard of { sp = \\g,hasAdj,c => case <num.hasCard,num.n> of {
False => quant.sp ! g ! hasAdj ! num.n ! c ++ num.s ! quant.isDef ! Nom ; <False,Sg> => quant.sp ! g ! hasAdj ! num.n ! c ++ num.s ! quant.isDef ! Nom ;
_ => quant.s ! True ! num.n ++ num.sp ! quant.isDef ! npcase2case c _ => quant.s ! True ! num.n ++ num.sp ! quant.isDef ! npcase2case c
} ; } ;
n = num.n ; n = num.n ;
hasNum = num.hasCard hasNum = num.hasCard
+1 -29
View File
@@ -1,32 +1,4 @@
concrete AdjectiveFao of Adjective = CatFao ** open ResFao in { concrete AdjectiveFao of Adjective = CatFao ** {
lin lin
PositA a = a ; PositA a = a ;
ComparA a np = {
s = \\g,n,c => "meir" ++ a.s ! g ! n ! c ++ "enn" ++ np.s ! Nom
} ;
ComplA2 a np = {
s = \\g,n,c => a.s ! g ! n ! c ++ a.c2.s ++ np.s ! a.c2.c
} ;
ReflA2 a = {
s = \\g,n,c => a.s ! g ! n ! c ++ a.c2.s ++ "seg"
} ;
UseA2 a = a ;
UseComparA a = {
s = \\g,n,c => "meir" ++ a.s ! g ! n ! c
} ;
CAdvAP cadv ap np = {
s = \\g,n,c => cadv.s ++ ap.s ! g ! n ! c ++ cadv.p ++ np.s ! Nom
} ;
AdjOrd ord = {
s = ord.s
} ;
SentAP ap sc = {
s = \\g,n,c => ap.s ! g ! n ! c ++ sc.s
} ;
AdAP ada ap = {
s = \\g,n,c => ada.s ++ ap.s ! g ! n ! c
} ;
AdvAP ap adv = {
s = \\g,n,c => ap.s ! g ! n ! c ++ adv.s
} ;
} }
-11
View File
@@ -1,11 +0,0 @@
concrete AdverbFao of Adverb = CatFao ** open Prelude,ResFao in {
lin
PositAdvAdj a = {s = a.s ! Neuter ! Sg ! Nom} ;
PrepNP p np = {s = p.s ++ np.s ! p.c} ;
ComparAdvAdj cadv a np = {s = cadv.s ++ a.s ! Neuter ! Sg ! Nom ++ cadv.p ++ np.s ! Nom} ;
ComparAdvAdjS cadv a s = {s = cadv.s ++ a.s ! Neuter ! Sg ! Nom ++ cadv.p ++ s.s} ;
AdAdv ada adv = {s = ada.s ++ adv.s} ;
PositAdAAdj a = {s = a.s ! Neuter ! Sg ! Nom} ;
SubjS subj s = {s = subj.s ++ s.s} ;
AdnCAdv cadv = {s = cadv.s} ;
}
+1 -2
View File
@@ -1,5 +1,4 @@
concrete AllFao of AllFaoAbs = concrete AllFao of AllFaoAbs =
LangFao, LangFao
ExtendFao
** **
{} ; {} ;
+2 -3
View File
@@ -1,4 +1,3 @@
abstract AllFaoAbs = abstract AllFaoAbs =
Lang, Lang
Extend ** {}
** {}
+1 -34
View File
@@ -1,4 +1,4 @@
concrete CatFao of Cat = CommonX ** open ResFao, Prelude in { concrete CatFao of Cat = CommonX ** open ResFao in {
lincat N = Noun ; lincat N = Noun ;
lincat N2 = Noun ** {c2 : Compl} ; lincat N2 = Noun ** {c2 : Compl} ;
@@ -9,43 +9,10 @@ lincat V = Verb ;
lincat VV,VS,VQ,VA = Verb ; lincat VV,VS,VQ,VA = Verb ;
lincat V2 = Verb ** {c2 : Compl} ; lincat V2 = Verb ** {c2 : Compl} ;
lincat V3,V2A,V2S,V2Q,V2V = Verb ** {c2,c3 : Compl} ; lincat V3,V2A,V2S,V2Q,V2V = Verb ** {c2,c3 : Compl} ;
lincat VP = VerbPhrase ;
lincat VPSlash = Verb ** {c2 : Compl ; sc : Str} ;
lincat Comp = {s : Gender => Number => Str} ;
lincat Cl = Clause ;
lincat ClSlash = {s : Tense => Polarity => Str ; c2 : Compl} ;
lincat SSlash = {s : Str ; c2 : Compl} ;
lincat Imp = {s : Polarity => Number => Str} ;
lincat Prep = Compl ; lincat Prep = Compl ;
lincat CN = CommonNoun ; lincat CN = CommonNoun ;
lincat NP, Pron = {s : Case => Str ; g : Gender ; n : Number ; p : Person} ;
lincat QS = {s : Str} ;
lincat QCl = {s : Tense => Polarity => Str} ;
lincat IP = {s : Str ; n : Number} ;
lincat IComp = {s : Str} ;
lincat IDet = {s : Str ; n : Number} ;
lincat IQuant = {s : Str} ;
lincat RCl = {s : Tense => Polarity => Gender => PersNum => Str} ;
lincat RS = {s : Gender => PersNum => Str} ;
lincat RP = {s : Str} ;
lincat AP = AdjPhrase ; lincat AP = AdjPhrase ;
lincat Det = {s : Gender => Case => Str ; n : Number ; sp : Species} ;
lincat Predet = {s : Str} ;
lincat Quant = {s : Bool => Gender => Number => Case => Str; sp : Species} ;
lincat Num = {s : Gender => Case => Str ; n : Number ; hasCard : Bool} ;
lincat Card = {s : Gender => Case => Str ; n : Number} ;
lincat ACard = {s : Str} ;
lincat Ord = {s : Gender => Number => Case => Str} ;
lincat DAP = {s : Gender => Case => Str ; n : Number ; sp : Species} ;
lincat S = {s : Str} ; lincat S = {s : Str} ;
lincat Numeral = {
s : CardOrd => Gender => Case => Str ;
n : Number
} ;
lincat Digits = {s : Str ; n : Number} ;
lincat Decimal = {s : Str ; n : Number ; hasDot : Bool} ;
lincat Conj = {s : Str} ;
lincat Subj = {s : Str} ;
lincat LN,SN,GN,PN = {s : Str} ; lincat LN,SN,GN,PN = {s : Str} ;
-53
View File
@@ -1,53 +0,0 @@
concrete ConjunctionFao of Conjunction = CatFao ** open ResFao, Prelude in {
lincat
[S] = {s1,s2 : Str} ;
[RS] = {s1,s2 : Gender => PersNum => Str} ;
[Adv], [AdV], [IAdv] = {s1,s2 : Str} ;
[NP] = {s1,s2 : Case => Str ; g : Gender ; n : Number ; p : Person} ;
[AP] = {s1,s2 : Gender => Number => Case => Str} ;
[CN] = {s1,s2 : Species => Number => Case => Str ; g : Gender} ;
[DAP] = {s1,s2 : Gender => Case => Str ; n : Number ; sp : Species} ;
lin
ConjS conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ;
ConjRS conj xs = {s = \\g,p => xs.s1 ! g ! p ++ conj.s ++ xs.s2 ! g ! p} ;
ConjAdv conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ;
ConjAdV conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ;
ConjIAdv conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ;
ConjNP conj xs = {
s = \\c => xs.s1 ! c ++ conj.s ++ xs.s2 ! c ;
g = xs.g ;
n = Pl ;
p = P3
} ;
ConjAP conj xs = {s = \\g,n,c => xs.s1 ! g ! n ! c ++ conj.s ++ xs.s2 ! g ! n ! c} ;
ConjCN conj xs = {
s = \\sp,n,c => xs.s1 ! sp ! n ! c ++ conj.s ++ xs.s2 ! sp ! n ! c ;
g = xs.g
} ;
ConjDet conj xs = {
s = \\g,c => xs.s1 ! g ! c ++ conj.s ++ xs.s2 ! g ! c ;
n = xs.n ;
sp = xs.sp
} ;
BaseS x y = {s1 = x.s ; s2 = y.s} ;
ConsS x xs = {s1 = x.s ++ "," ++ xs.s1 ; s2 = xs.s2} ;
BaseRS x y = {s1 = x.s ; s2 = y.s} ;
ConsRS x xs = {s1 = \\g,p => x.s ! g ! p ++ "," ++ xs.s1 ! g ! p ; s2 = xs.s2} ;
BaseAdv x y = {s1 = x.s ; s2 = y.s} ;
ConsAdv x xs = {s1 = x.s ++ "," ++ xs.s1 ; s2 = xs.s2} ;
BaseAdV x y = {s1 = x.s ; s2 = y.s} ;
ConsAdV x xs = {s1 = x.s ++ "," ++ xs.s1 ; s2 = xs.s2} ;
BaseIAdv x y = {s1 = x.s ; s2 = y.s} ;
ConsIAdv x xs = {s1 = x.s ++ "," ++ xs.s1 ; s2 = xs.s2} ;
BaseNP x y = {s1 = x.s ; s2 = y.s ; g = x.g ; n = Pl ; p = P3} ;
ConsNP x xs = {s1 = \\c => x.s ! c ++ "," ++ xs.s1 ! c ; s2 = xs.s2 ; g = xs.g ; n = Pl ; p = P3} ;
BaseAP x y = {s1 = x.s ; s2 = y.s} ;
ConsAP x xs = {s1 = \\g,n,c => x.s ! g ! n ! c ++ "," ++ xs.s1 ! g ! n ! c ; s2 = xs.s2} ;
BaseCN x y = {s1 = x.s ; s2 = y.s ; g = x.g} ;
ConsCN x xs = {s1 = \\sp,n,c => x.s ! sp ! n ! c ++ "," ++ xs.s1 ! sp ! n ! c ; s2 = xs.s2 ; g = xs.g} ;
BaseDAP x y = {s1 = x.s ; s2 = y.s ; n = y.n ; sp = y.sp} ;
ConsDAP x xs = {s1 = \\g,c => x.s ! g ! c ++ "," ++ xs.s1 ! g ! c ; s2 = xs.s2 ; n = xs.n ; sp = xs.sp} ;
}
-173
View File
@@ -1,173 +0,0 @@
concrete ConstructionFao of Construction = CatFao ** open ResFao, ParadigmsFao in {
lincat
Timeunit, Hour, Weekday, Month, Monthday, Year, Language = {s : Str} ;
lin
hungry_VP = beVP "svangur" ;
thirsty_VP = beVP "tystur" ;
tired_VP = beVP "troyttur" ;
scared_VP = beVP "bangin" ;
ill_VP = beVP "sjúkur" ;
ready_VP = beVP "klárur" ;
has_age_VP card = beVP (cardStr card ++ "ára gamal") ;
have_name_Cl np name = {
Converb = np.s ! Nom ++ "eitur" ++ name.s ! Nom ;
Indicative = \\t,pol => np.s ! Nom ++ "eitur" ++ negStr pol ++ name.s ! Nom ;
Nonfinite = np.s ! Nom ++ "eita" ++ name.s ! Nom ;
Participle = \\_ => np.s ! Nom ++ "itið" ++ name.s ! Nom
} ;
married_Cl np spouse = {
Converb = np.s ! Nom ++ "er giftur við" ++ spouse.s ! Dat ;
Indicative = \\t,pol => np.s ! Nom ++ copula ! t ! persNum np.n np.p ++ negStr pol ++ "giftur við" ++ spouse.s ! Dat ;
Nonfinite = np.s ! Nom ++ "vera giftur við" ++ spouse.s ! Dat ;
Participle = \\_ => np.s ! Nom ++ "verið giftur við" ++ spouse.s ! Dat
} ;
what_name_QCl np = {
s = \\t,pol => "hvat" ++ "eitur" ++ np.s ! Nom
} ;
how_old_QCl np = {
s = \\t,pol => "hvussu gamal" ++ copula ! t ! persNum np.n np.p ++ negStr pol ++ np.s ! Nom
} ;
how_far_QCl np = {
s = \\t,pol => "hvussu langt burtur" ++ copula ! t ! persNum np.n np.p ++ negStr pol ++ np.s ! Nom
} ;
weather_adjCl ap = {
Converb = "tað er" ++ ap.s ! Neuter ! Sg ! Nom ;
Indicative = \\t,pol => "tað" ++ copula ! t ! PSg P3 ++ negStr pol ++ ap.s ! Neuter ! Sg ! Nom ;
Nonfinite = "vera" ++ ap.s ! Neuter ! Sg ! Nom ;
Participle = \\_ => "verið" ++ ap.s ! Neuter ! Sg ! Nom
} ;
is_right_VP = beVP "rættur" ;
is_wrong_VP = beVP "skeivur" ;
n_units_AP card cn a = {
s = \\g,n,c => card.s ! cn.g ! Nom ++ cn.s ! Indef ! Pl ! Nom ++ a.s ! g ! n ! c
} ;
n_units_of_NP card cn np = mkNP (card.s ! cn.g ! Nom ++ cn.s ! Indef ! Pl ! Nom ++ "av" ++ np.s ! Dat) np.g np.n np.p ;
n_unit_CN card unit cn = mkCN (card.s ! unit.g ! Nom ++ unit.s ! Indef ! Sg ! Nom ++ cn.s ! Indef ! Sg ! Nom) cn.g ;
bottle_of_CN np = mkCN ("fløska av" ++ np.s ! Dat) Fem ;
cup_of_CN np = mkCN ("koppur av" ++ np.s ! Dat) Masc ;
glass_of_CN np = mkCN ("glas av" ++ np.s ! Dat) Neuter ;
few_X_short_of_Y np x y = {s = np.s ! Nom ++ "vantar nakrar" ++ x.s ! Indef ! Pl ! Acc ++ "í" ++ y.s ! Def ! Sg ! Acc} ;
timeunitAdv card unit = {s = "í" ++ cardStr card ++ unit.s} ;
timeunitRange c1 c2 unit = {s = "í" ++ cardStr c1 ++ "til" ++ cardStr c2 ++ unit.s} ;
oneHour = {s = "eitt"} ;
twoHour = {s = "tvey"} ;
threeHour = {s = "trý"} ;
fourHour = {s = "fýra"} ;
fiveHour = {s = "fimm"} ;
sixHour = {s = "seks"} ;
sevenHour = {s = "sjey"} ;
eightHour = {s = "átta"} ;
nineHour = {s = "níggju"} ;
tenHour = {s = "tíggju"} ;
elevenHour = {s = "ellivu"} ;
twelveHour = {s = "tólv"} ;
thirteenHour = {s = "trettan"} ;
fourteenHour = {s = "fjúrtan"} ;
fifteenHour = {s = "fimtan"} ;
sixteenHour = {s = "sekstan"} ;
seventeenHour = {s = "seytjan"} ;
eighteenHour = {s = "átjan"} ;
nineteenHour = {s = "nítjan"} ;
twentyHour = {s = "tjúgu"} ;
twentyOneHour = {s = "tjúgueitt"} ;
twentyTwoHour = {s = "tjúgutvey"} ;
twentyThreeHour = {s = "tjúgutrý"} ;
twentyFourHour = {s = "tjúgufýra"} ;
timeHour h = {s = "klokkan" ++ h.s} ;
timeHourMinute h m = {s = "klokkan" ++ h.s ++ cardStr m} ;
weekdayPunctualAdv w = {s = w.s} ;
weekdayHabitualAdv w = {s = w.s} ;
weekdayLastAdv w = {s = "seinasta" ++ w.s} ;
weekdayNextAdv w = {s = "næsta" ++ w.s} ;
monthAdv m = {s = "í" ++ m.s} ;
yearAdv y = {s = "í" ++ y.s} ;
dayMonthAdv d m = {s = d.s ++ m.s} ;
monthYearAdv m y = {s = m.s ++ y.s} ;
dayMonthYearAdv d m y = {s = d.s ++ m.s ++ y.s} ;
intYear i = {s = i.s} ;
intMonthday i = {s = i.s} ;
InLanguage l = {s = "á" ++ l.s} ;
weekdayN w = mkCN w.s Masc ;
monthN m = mkCN m.s Masc ;
weekdayPN w = {s = w.s} ;
monthPN m = {s = m.s} ;
languageNP l = mkNP l.s Neuter Sg P3 ;
languageCN l = mkCN l.s Neuter ;
second_Timeunit = {s = "sekund"} ;
minute_Timeunit = {s = "minutt"} ;
hour_Timeunit = {s = "tími"} ;
day_Timeunit = {s = "dagur"} ;
week_Timeunit = {s = "vika"} ;
month_Timeunit = {s = "mánaður"} ;
year_Timeunit = {s = "ár"} ;
monday_Weekday = {s = "mánadagur"} ;
tuesday_Weekday = {s = "týsdagur"} ;
wednesday_Weekday = {s = "mikudagur"} ;
thursday_Weekday = {s = "hósdagur"} ;
friday_Weekday = {s = "fríggjadagur"} ;
saturday_Weekday = {s = "leygardagur"} ;
sunday_Weekday = {s = "sunnudagur"} ;
january_Month = {s = "januar"} ;
february_Month = {s = "februar"} ;
march_Month = {s = "mars"} ;
april_Month = {s = "apríl"} ;
may_Month = {s = "mai"} ;
june_Month = {s = "juni"} ;
july_Month = {s = "juli"} ;
august_Month = {s = "august"} ;
september_Month = {s = "september"} ;
october_Month = {s = "oktober"} ;
november_Month = {s = "november"} ;
december_Month = {s = "desember"} ;
afrikaans_Language = {s = "afrikaans"} ;
amharic_Language = {s = "amhariskt"} ;
arabic_Language = {s = "arabiskt"} ;
bulgarian_Language = {s = "bulgarskt"} ;
catalan_Language = {s = "katalanskt"} ;
chinese_Language = {s = "kinesiskt"} ;
danish_Language = {s = "danskt"} ;
dutch_Language = {s = "hollendskt"} ;
english_Language = {s = "enskt"} ;
estonian_Language = {s = "estiskt"} ;
finnish_Language = {s = "finskt"} ;
french_Language = {s = "franskt"} ;
german_Language = {s = "týskt"} ;
greek_Language = {s = "grikskt"} ;
hebrew_Language = {s = "hebraiskt"} ;
hindi_Language = {s = "hindi"} ;
japanese_Language = {s = "japanskt"} ;
italian_Language = {s = "italskt"} ;
latin_Language = {s = "latín"} ;
latvian_Language = {s = "lettiskt"} ;
maltese_Language = {s = "maltesiskt"} ;
nepali_Language = {s = "nepalskt"} ;
norwegian_Language = {s = "norskt"} ;
persian_Language = {s = "persiskt"} ;
polish_Language = {s = "pólskt"} ;
punjabi_Language = {s = "punjabi"} ;
romanian_Language = {s = "rumenskt"} ;
russian_Language = {s = "russiskt"} ;
sindhi_Language = {s = "sindhi"} ;
spanish_Language = {s = "spanskt"} ;
swahili_Language = {s = "swahili"} ;
swedish_Language = {s = "svenskt"} ;
thai_Language = {s = "tailendskt"} ;
turkish_Language = {s = "turkiskt"} ;
urdu_Language = {s = "urdu"} ;
oper
beVP : Str -> VerbPhrase = \ap -> {
Converb = copula ! Pres ! PPl ++ ap ;
Indicative = \\t,pol,_,p => copula ! t ! p ++ negStr pol ++ ap ;
Nonfinite = "vera" ++ ap ;
Participle = \\_ => "verið" ++ ap
} ;
cardStr : Card -> Str = \card ->
card.s ! Neuter ! Nom ;
}
+12 -16
View File
@@ -10,11 +10,7 @@ lincat
lin lin
InflectionN,InflectionN2,InflectionN3 = \x -> { InflectionN,InflectionN2,InflectionN3 = \x -> {
t="n" ; t="n" ;
s1 = heading1 ("Noun" ++ case x.g of { s1="" ;
Neuter=> "(neuter)";
Masc => "(masc)";
Fem => "(fem)"
}) ;
s2=frameTable ( s2=frameTable (
tr (intagAttr "th" "colspan=\"2\"" "" ++ th "Indef" ++ th "Def") ++ tr (intagAttr "th" "colspan=\"2\"" "" ++ th "Indef" ++ th "Def") ++
tr (intagAttr "th" "rowspan=\"4\"" "Sg" ++ tr (intagAttr "th" "rowspan=\"4\"" "Sg" ++
@@ -34,17 +30,17 @@ lin
t="a" ; t="a" ;
s1="" ; s1="" ;
s2=frameTable ( s2=frameTable (
tr (intagAttr "th" "colspan=\"2\"" "" ++ th "Masc" ++ th "Fem" ++ th "Neuter") ++ tr (intagAttr "th" "colspan=\"2\"" "" ++ th "Masc" ++ th "Fem" ++ th "Neutr") ++
tr (intagAttr "th" "rowspan=\"4\"" "Sg" ++ tr (intagAttr "th" "rowspan=\"4\"" "Sg" ++
th "Nom" ++ td (x.s ! Masc ! Sg ! Nom) ++ td (x.s ! Fem ! Sg ! Nom) ++ td (x.s ! Neuter ! Sg ! Nom)) ++ th "Nom" ++ td (x.s ! Masc ! Sg ! Nom) ++ td (x.s ! Fem ! Sg ! Nom) ++ td (x.s ! Neutr ! Sg ! Nom)) ++
tr (th "Acc" ++ td (x.s ! Masc ! Sg ! Acc) ++ td (x.s ! Fem ! Sg ! Acc) ++ td (x.s ! Neuter ! Sg ! Acc)) ++ tr (th "Acc" ++ td (x.s ! Masc ! Sg ! Acc) ++ td (x.s ! Fem ! Sg ! Acc) ++ td (x.s ! Neutr ! Sg ! Acc)) ++
tr (th "Dat" ++ td (x.s ! Masc ! Sg ! Dat) ++ td (x.s ! Fem ! Sg ! Dat) ++ td (x.s ! Neuter ! Sg ! Dat)) ++ tr (th "Dat" ++ td (x.s ! Masc ! Sg ! Dat) ++ td (x.s ! Fem ! Sg ! Dat) ++ td (x.s ! Neutr ! Sg ! Dat)) ++
tr (th "Gen" ++ td (x.s ! Masc ! Sg ! Gen) ++ td (x.s ! Fem ! Sg ! Gen) ++ td (x.s ! Neuter ! Sg ! Gen)) ++ tr (th "Gen" ++ td (x.s ! Masc ! Sg ! Gen) ++ td (x.s ! Fem ! Sg ! Gen) ++ td (x.s ! Neutr ! Sg ! Gen)) ++
tr (intagAttr "th" "rowspan=\"4\"" "Pl" ++ tr (intagAttr "th" "rowspan=\"4\"" "Pl" ++
th "Nom" ++ td (x.s ! Masc ! Pl ! Nom) ++ td (x.s ! Fem ! Pl ! Nom) ++ td (x.s ! Neuter ! Pl ! Nom)) ++ th "Nom" ++ td (x.s ! Masc ! Pl ! Nom) ++ td (x.s ! Fem ! Pl ! Nom) ++ td (x.s ! Neutr ! Pl ! Nom)) ++
tr (th "Acc" ++ td (x.s ! Masc ! Pl ! Acc) ++ td (x.s ! Fem ! Pl ! Acc) ++ td (x.s ! Neuter ! Pl ! Acc)) ++ tr (th "Acc" ++ td (x.s ! Masc ! Pl ! Acc) ++ td (x.s ! Fem ! Pl ! Acc) ++ td (x.s ! Neutr ! Pl ! Acc)) ++
tr (th "Dat" ++ td (x.s ! Masc ! Pl ! Dat) ++ td (x.s ! Fem ! Pl ! Dat) ++ td (x.s ! Neuter ! Pl ! Dat)) ++ tr (th "Dat" ++ td (x.s ! Masc ! Pl ! Dat) ++ td (x.s ! Fem ! Pl ! Dat) ++ td (x.s ! Neutr ! Pl ! Dat)) ++
tr (th "Gen" ++ td (x.s ! Masc ! Pl ! Gen) ++ td (x.s ! Fem ! Pl ! Gen) ++ td (x.s ! Neuter ! Pl ! Gen))) ; tr (th "Gen" ++ td (x.s ! Masc ! Pl ! Gen) ++ td (x.s ! Fem ! Pl ! Gen) ++ td (x.s ! Neutr ! Pl ! Gen))) ;
s3=[] s3=[]
} ; } ;
lin lin
@@ -55,8 +51,8 @@ lin
paragraph x.Converb ++ paragraph x.Converb ++
heading2 "Imperative" ++ heading2 "Imperative" ++
frameTable ( frameTable (
tr (th "Sg" ++ td (x.imperative ! Sg)) ++ tr (th "Sg" ++ td (x.Imperative_Jussive ! Sg)) ++
tr (th "Pl" ++ td (x.imperative ! Pl))) ++ tr (th "Pl" ++ td (x.Imperative_Jussive ! Pl))) ++
heading2 "Indicative" ++ heading2 "Indicative" ++
frameTable ( frameTable (
tr (intagAttr "th" "rowspan=\"4\"" "Pres" ++ th "Sg P1" ++ td (x.Indicative ! Pres ! PSg P1)) ++ tr (intagAttr "th" "rowspan=\"4\"" "Pres" ++ th "Sg P1" ++ td (x.Indicative ! Pres ! PSg P1)) ++
-34
View File
@@ -1,34 +0,0 @@
concrete ExtendFao of Extend = CatFao **
open ParadigmsFao, ResFao, (P = ParamX) in {
lincat
VPS = {s : Gender => PersNum => Str} ;
[VPS] = {s1,s2 : Gender => PersNum => Str} ;
VPI = {s : Str} ;
[VPI] = {s1,s2 : Str} ;
VPS2 = {s : Gender => PersNum => Str ; c2 : Compl ; sc : Str} ;
[VPS2] = {s1,s2 : Gender => PersNum => Str ; c2 : Compl ; sc : Str} ;
VPI2 = {s : Str ; c2 : Compl ; sc : Str} ;
[VPI2] = {s1,s2 : Str ; c2 : Compl ; sc : Str} ;
[Comp] = {s1,s2 : Gender => Number => Str} ;
[Imp] = {s1,s2 : Polarity => Number => Str} ;
RNP = {s : Case => Str ; g : Gender ; n : Number ; p : Person} ;
RNPList = {s1,s2 : Case => Str ; g : Gender ; n : Number ; p : Person} ;
X = {s : Str} ;
lin
UttAdV adv = {s = adv.s} ;
iFem_Pron = mkPron "eg" "meg" "mær" "mín" Masc Sg P1 ;
youFem_Pron = mkPron "tú" "teg" "tær" "tín" Masc Sg P2 ;
weFem_Pron = mkPron "vit" "okkum" "okkum" "okkara" Masc Pl P1 ;
youPlFem_Pron = mkPron "tit" "tykkum" "tykkum" "tykkara" Masc Pl P2 ;
theyFem_Pron = mkPron "tær" "tær" "teimum" "teirra" Masc Pl P3 ;
youPolFem_Pron = mkPron "tit" "tykkum" "tykkum" "tykkara" Masc Pl P2 ;
youPolPl_Pron = mkPron "tit" "tykkum" "tykkum" "tykkara" Masc Pl P2 ;
youPolPlFem_Pron = mkPron "tit" "tykkum" "tykkum" "tykkara" Masc Pl P2 ;
lin
TPastSimple = {s = [] ; t = P.Past} ;
}
+2 -12
View File
@@ -2,15 +2,5 @@ concrete GrammarFao of Grammar =
TenseX, TenseX,
PhraseFao, PhraseFao,
NounFao, NounFao,
VerbFao, AdjectiveFao ** {
AdjectiveFao, }
AdverbFao,
NumeralFao,
SentenceFao,
QuestionFao,
RelativeFao,
ConjunctionFao,
StructuralFao,
IdiomFao,
NamesFao ** {
}
-62
View File
@@ -1,62 +0,0 @@
concrete IdiomFao of Idiom = CatFao ** open ResFao in {
lin
ImpersCl vp = {
Converb = "tað" ++ vp.Converb ;
Indicative = \\t,pol => "tað" ++ vp.Indicative ! t ! pol ! Neuter ! PSg P3 ;
Nonfinite = "tað" ++ vp.Nonfinite ;
Participle = \\t => "tað" ++ vp.Participle ! t
} ;
GenericCl vp = {
Converb = "mann" ++ vp.Converb ;
Indicative = \\t,pol => "mann" ++ vp.Indicative ! t ! pol ! Masc ! PSg P3 ;
Nonfinite = "mann" ++ vp.Nonfinite ;
Participle = \\t => "mann" ++ vp.Participle ! t
} ;
CleftNP np rs = {
Converb = "tað er" ++ np.s ! Nom ++ rs.s ! np.g ! persNum np.n np.p ;
Indicative = \\t,pol => "tað" ++ copula ! t ! PSg P3 ++ negStr pol ++ np.s ! Nom ++ rs.s ! np.g ! persNum np.n np.p ;
Nonfinite = "vera" ++ np.s ! Nom ++ rs.s ! np.g ! persNum np.n np.p ;
Participle = \\_ => "verið" ++ np.s ! Nom ++ rs.s ! np.g ! persNum np.n np.p
} ;
CleftAdv adv s = {
Converb = "tað er" ++ adv.s ++ s.s ;
Indicative = \\t,pol => "tað" ++ copula ! t ! PSg P3 ++ negStr pol ++ adv.s ++ s.s ;
Nonfinite = "vera" ++ adv.s ++ s.s ;
Participle = \\_ => "verið" ++ adv.s ++ s.s
} ;
ExistNP np = {
Converb = "tað er" ++ np.s ! Nom ;
Indicative = \\t,pol => "tað" ++ copula ! t ! persNum np.n P3 ++ negStr pol ++ np.s ! Nom ;
Nonfinite = "vera" ++ np.s ! Nom ;
Participle = \\_ => "verið" ++ np.s ! Nom
} ;
ExistIP ip = {
s = \\t,pol => "hvat" ++ copula ! t ! persNum ip.n P3 ++ negStr pol
} ;
ExistNPAdv np adv = {
Converb = "tað er" ++ np.s ! Nom ++ adv.s ;
Indicative = \\t,pol => "tað" ++ copula ! t ! persNum np.n P3 ++ negStr pol ++ np.s ! Nom ++ adv.s ;
Nonfinite = "vera" ++ np.s ! Nom ++ adv.s ;
Participle = \\_ => "verið" ++ np.s ! Nom ++ adv.s
} ;
ExistIPAdv ip adv = {
s = \\t,pol => ip.s ++ copula ! t ! persNum ip.n P3 ++ negStr pol ++ adv.s
} ;
ProgrVP vp = {
Converb = "vera við at" ++ vp.Nonfinite ;
Indicative = \\t,pol,g,p => copula ! t ! p ++ negStr pol ++ "við at" ++ vp.Nonfinite ;
Nonfinite = "vera við at" ++ vp.Nonfinite ;
Participle = \\_ => "verið við at" ++ vp.Nonfinite
} ;
ImpPl1 vp = {s = "lat okkum" ++ vp.Nonfinite} ;
ImpP3 np vp = {s = "lat" ++ np.s ! Acc ++ vp.Nonfinite} ;
SelfAdvVP vp = vp ** {
Converb = vp.Converb ++ "sjálvur" ;
Indicative = \\t,pol,g,p => vp.Indicative ! t ! pol ! g ! p ++ "sjálvur" ;
Nonfinite = vp.Nonfinite ++ "sjálvur" ;
Participle = \\t => vp.Participle ! t ++ "sjálvur"
} ;
SelfAdVVP = SelfAdvVP ;
SelfNP np = np ** {s = \\c => np.s ! c ++ "sjálvur"} ;
}
+1 -2
View File
@@ -2,10 +2,9 @@
concrete LangFao of Lang = concrete LangFao of Lang =
GrammarFao, GrammarFao,
LexiconFao LexiconFao
,ConstructionFao
,DocumentationFao --# notpresent ,DocumentationFao --# notpresent
** { ** {
flags startcat = Phr ; flags startcat = Phr ;
} }
+2 -9
View File
@@ -1,9 +1,2 @@
concrete LexiconFao of Lexicon = CatFao ** open ParadigmsFao, ResFao in { concrete LexiconFao of Lexicon = CatFao ** open ParadigmsFao in {
lin }
apple_N = mkN "epli" ;
big_A = mkA "stórur" ;
child_N = mkN "barn" ;
die_V = mkV "doyggja" "doyrt" ;
good_A = mkA "góður" ;
go_V = mkVerb "farið" "far" "farið" "fari" "fert" "fer" "fara" "fór" "fórt" "fór" "fóru" "fara" "farandi" "farin" ;
}
+339 -509
View File
File diff suppressed because it is too large Load Diff
-14
View File
@@ -1,14 +0,0 @@
concrete NamesFao of Names = CatFao ** open ResFao in {
lin
GivenName gn = mkNP gn.s Masc Sg P3 ;
MaleSurname sn = mkNP sn.s Masc Sg P3 ;
FemaleSurname sn = mkNP sn.s Fem Sg P3 ;
PlSurname sn = mkNP sn.s Masc Pl P3 ;
FullName gn sn = mkNP (gn.s ++ sn.s) Masc Sg P3 ;
UseLN ln = mkNP ln.s Neuter Sg P3 ;
PlainLN ln = mkNP ln.s Neuter Sg P3 ;
InLN ln = {s = "í" ++ ln.s} ;
AdjLN ap ln = {s = ap.s ! Neuter ! Sg ! Nom ++ ln.s} ;
}
+1 -158
View File
@@ -1,161 +1,4 @@
concrete NounFao of Noun = CatFao ** open ResFao, Prelude in { concrete NounFao of Noun = CatFao ** {
lin lin
UseN n = n ; UseN n = n ;
UseN2 n = n ;
Use2N3 n = n ** {c2 = n.c2} ;
Use3N3 n = n ** {c2 = n.c3} ;
UsePN pn = mkNP pn.s Masc Sg P3 ;
UsePron p = p ;
RelNP np rs =
np ** {s = \\c => np.s ! c ++ "," ++ rs.s ! np.g ! persNum np.n np.p} ;
DetNP det = {
s = \\c => det.s ! Masc ! c ;
g = Masc ;
n = det.n ;
p = P3
} ;
PredetNP pred np = np ** {
s = \\c => pred.s ++ np.s ! c
} ;
PPartNP np v2 = np ** {
s = \\c => np.s ! c ++ v2.Participle ! Past
} ;
AdvNP np adv = np ** {
s = \\c => np.s ! c ++ adv.s
} ;
ExtAdvNP np adv = np ** {
s = \\c => np.s ! c ++ "," ++ adv.s
} ;
DetCN det cn = {
s = \\c => det.s ! cn.g ! c ++ cn.s ! det.sp ! det.n ! c ;
g = cn.g ;
n = det.n ;
p = P3
} ;
DefArt = {
s = \\_,_,_,_ => [] ;
sp = Def ;
} ;
IndefArt = {
s = \\b =>
table {
Masc => table {
Sg => case b of {
False => table {Nom => "ein" ; Acc => "ein" ; Dat => "einum" ; Gen => "eins"} ;
True => \\_ => []
} ;
Pl => \\_ => []
} ;
Fem => table {
Sg => case b of {
False => table {Nom => "ein" ; Acc => "eina" ; Dat => "einari" ; Gen => "einar"} ;
True => \\_ => []
} ;
Pl => \\_ => []
} ;
Neuter => table {
Sg => case b of {
False => table {Nom => "eitt" ; Acc => "eitt" ; Dat => "einum" ; Gen => "eins"} ;
True => \\_ => []
} ;
Pl => \\_ => []
}
} ;
sp = Indef ;
} ;
DetQuant quant num = {
s = \\g,c => quant.s ! num.hasCard ! g ! num.n ! c ++
num.s ! g ! c ;
n = num.n ;
sp = quant.sp
} ;
DetQuantOrd quant num ord = {
s = \\g,c => quant.s ! num.hasCard ! g ! num.n ! c ++
num.s ! g ! c ++ ord.s ! g ! num.n ! c ;
n = num.n ;
sp = quant.sp
} ;
NumSg = {
s = \\_,_ => [] ;
n = Sg ;
hasCard = False
} ;
NumPl = {
s = \\_,_ => [] ;
n = Pl ;
hasCard = False
} ;
NumCard card = card ** {hasCard = True} ;
NumDigits digits = {s = \\_,_ => digits.s ; n = Pl} ;
NumDecimal dec = {s = \\_,_ => dec.s ; n = Pl} ;
NumNumeral numeral = {s=numeral.s ! NCard; n=numeral.n} ;
AdNum adn card = {s = \\g,c => adn.s ++ card.s ! g ! c ; n = card.n} ;
OrdDigits digits = {s = \\_,_,_ => digits.s ++ BIND ++ "."} ;
OrdNumeral numeral = {s = \\g,n,c => numeral.s ! NOrd n ! g ! c} ;
OrdSuperl a = {s = a.s} ;
OrdNumeralSuperl numeral a = {
s = \\g,n,c => numeral.s ! NOrd n ! g ! c ++ a.s ! g ! n ! c
} ;
MassNP cn = {
s = \\c => cn.s ! Indef ! Sg ! c ;
g = cn.g ;
n = Sg ;
p = P3
} ;
PossPron pron = {
s = \\_,_,_,_ => pron.s ! Gen ;
sp = Def
} ;
ComplN2 n2 np = {
s = \\sp,n,c => n2.s ! sp ! n ! c ++ n2.c2.s ++ np.s ! n2.c2.c ;
g = n2.g
} ;
ComplN3 n3 np = n3 ** {
s = \\sp,n,c => n3.s ! sp ! n ! c ++ n3.c2.s ++ np.s ! n3.c2.c ;
c2 = n3.c3
} ;
AdjCN ap cn = {
s = \\sp,n,c => ap.s ! cn.g ! n ! c ++ cn.s ! sp ! n ! c ;
g = cn.g
} ;
RelCN cn rs = {
s = \\sp,n,c => cn.s ! sp ! n ! c ++ rs.s ! cn.g ! persNum n P3 ;
g = cn.g
} ;
AdvCN cn adv = {
s = \\sp,n,c => cn.s ! sp ! n ! c ++ adv.s ;
g = cn.g
} ;
SentCN cn sc = {
s = \\sp,n,c => cn.s ! sp ! n ! c ++ sc.s ;
g = cn.g
} ;
ApposCN cn np = {
s = \\sp,n,c => cn.s ! sp ! n ! c ++ np.s ! Nom ;
g = cn.g
} ;
PossNP cn np = {
s = \\sp,n,c => cn.s ! sp ! n ! c ++ np.s ! Gen ;
g = cn.g
} ;
PartNP cn np = {
s = \\sp,n,c => cn.s ! sp ! n ! c ++ "av" ++ np.s ! Dat ;
g = cn.g
} ;
CountNP det np = {
s = \\c => det.s ! np.g ! c ++ "av" ++ np.s ! Dat ;
g = np.g ;
n = det.n ;
p = P3
} ;
AdjDAP dap ap = dap ** {
s = \\g,c => dap.s ! g ! c ++ ap.s ! g ! dap.n ! c
} ;
DetDAP det = det ;
QuantityNP dec mu = {
s = \\_ => dec.s ++ mu.s ;
g = Neuter ;
n = Pl ;
p = P3
} ;
} }
-316
View File
@@ -1,316 +0,0 @@
concrete NumeralFao of Numeral = CatFao [Numeral, Digits, Decimal] ** open Prelude, ResFao in {
lincat
Digit = {
s,teen,ten : CardOrd => Gender => Case => Str ;
n : Number ;
} ;
Sub10 = {
s : CardOrd => Gender => Case => Str ;
hundredth, thousandth, millionth, milliardth : Gender => Case => Str ;
n : Number
} ;
Sub100, Sub1000 = {
s : CardOrd => Gender => Case => Str ;
thousandth, millionth, milliardth : Gender => Case => Str ;
n : Number
} ;
Sub1000000, Sub1000000000, Sub1000000000000 =
{s : CardOrd => Gender => Case => Str ; n : Number} ;
Dig = {s : Str; n : Number} ;
lin
num n = n ;
n2 = {
s = table {
NCard => table {
Masc => caseList "tveir" "tveir" "tveimum" "tveggja" ;
Fem => caseList "tvær" "tvær" "tveimum" "tveggja" ;
Neuter => caseList "tvey" "tvey" "tveimum" "tveggja"
} ;
NOrd n => table {
Masc => case n of {
Sg => caseList "annar" "annan" "øðrum" "annars" ;
Pl => caseList "aðrir" "aðrar" "øðrum" "annara"
} ;
Fem => case n of {
Sg => caseList "onnur" "aðra" "aðrari" "annarar" ;
Pl => caseList "aðrar" "aðrar" "øðrum" "annara"
} ;
Neuter => case n of {
Sg => caseList "annað" "annað" "øðrum" "annars" ;
Pl => caseList "onnur" "onnur" "øðrum" "annara"
}
}
} ;
teen = table {
NCard => \\_,_ => "tólv" ;
NOrd n => mkWeakOrd "tólvti" ! n
} ;
ten = table {
NCard => \\_,_ => "tjúgu" ;
NOrd n => mkWeakOrd "tjúgundi" ! n
} ;
n = Pl
} ;
n3 = {
s = table {
NCard => table {
Masc => caseList "tríggir" "tríggjar" "trimum" "tríggja" ;
Fem => caseList "tríggjar" "tríggjar" "trimum" "tríggja" ;
Neuter => caseList "trý" "trý" "trimum" "tríggja"
} ;
NOrd n => mkOrdForms "triði" "triðja" "triðju" ! n
} ;
teen = table {
NCard => \\_,_ => "trettan" ;
NOrd n => mkWeakOrd "trettandi" ! n
} ;
ten = table {
NCard => \\_,_ => "tríati" ;
NOrd n => mkWeakOrd "tretivundi" ! n
} ;
n = Pl
} ;
n4 = mkDigit "fýra" "fjúrtan" "fýrati" "fjórði" "fjúrtandi" "fjørutandi" ;
n5 = mkDigit "fimm" "fimtan" "fimmti" "fimti" "fimtandi" "fimtandi" ;
n6 = mkDigit "seks" "sekstan" "seksti" "sætti" "sekstandi" "sekstandi" ;
n7 = mkDigit "sjey" "seytjan" "sjeyti" "sjeyndi" "seytjandi" "sjútandi" ;
n8 = mkDigit "átta" "átjan" "áttati" "áttandi" "átjandi" "áttandi" ;
n9 = mkDigit "níggju" "nítjan" "níti" "níggjundi" "nítjandi" "nítandi" ;
pot01 = {
s = table {
NCard => table {
Masc => caseList "ein" "ein" "einum" "eins" ;
Fem => caseList "einar" "eina" "einari" "einar" ;
Neuter => caseList "eitt" "eitt" "einum" "eins"
} ;
NOrd n => mkWeakOrd "fyrsti" ! n
} ;
hundredth = mkWeakOrd "hundraðandi" ! Sg ;
thousandth = mkWeakOrd "túsundandi" ! Sg ;
millionth = mkWeakOrd "milliónandi" ! Sg ;
milliardth = mkWeakOrd "milliardandi" ! Sg ;
n = Sg
} ;
pot0 d = d ** {
hundredth = mkCompoundOrd (numBase d) "hundraðandi" ! Pl ;
thousandth = mkCompoundOrd (numBase d) "túsundandi" ! Pl ;
millionth = mkCompoundOrd (numBase d) "milliónandi" ! Pl ;
milliardth = mkCompoundOrd (numBase d) "milliardandi" ! Pl
} ;
pot0as1 n = n ;
pot110 =
let ten : Gender => Case => Str =
table {
Neuter => \\_ => "ti" ;
_ => \\_ => "tíggju"
} ;
in mkCardOrd ten
(mkWeakOrd "tíggjundi") ** {
thousandth = \\g,c => ten ! g ! Nom ++ mkWeakOrd "túsundandi" ! Pl ! g ! Nom ;
millionth = \\g,c => ten ! g ! Nom ++ mkWeakOrd "milliónandi" ! Pl ! g ! Nom ;
milliardth = \\g,c => ten ! g ! Nom ++ mkWeakOrd "milliardandi" ! Pl ! g ! Nom
};
pot111 =
mkCardOrd (\\_,_ => "ellivu")
(mkWeakOrd "ellivti") ** {
thousandth = \\g,c => "ellivu" ++ mkWeakOrd "túsundandi" ! Pl ! g ! Nom ;
millionth = \\g,c => "ellivu" ++ mkWeakOrd "milliónandi" ! Pl ! g ! Nom ;
milliardth = \\g,c => "ellivu" ++ mkWeakOrd "milliardandi" ! Pl ! g ! Nom
};
pot1to19 d =
mkCardOrd (d.teen ! NCard)
(\\n => d.teen ! NOrd n) ** {
thousandth = \\g,c => d.teen ! NCard ! g ! Nom ++ mkWeakOrd "túsundandi" ! Pl ! g ! Nom ;
millionth = \\g,c => d.teen ! NCard ! g ! Nom ++ mkWeakOrd "milliónandi" ! Pl ! g ! Nom ;
milliardth = \\g,c => d.teen ! NCard ! g ! Nom ++ mkWeakOrd "milliardandi" ! Pl ! g ! Nom
};
pot1 d =
mkCardOrd (d.ten ! NCard)
(\\n => d.ten ! NOrd n) ** {
thousandth = \\g,c => d.ten ! NCard ! g ! Nom ++ mkWeakOrd "túsundandi" ! Pl ! g ! Nom ;
millionth = \\g,c => d.ten ! NCard ! g ! Nom ++ mkWeakOrd "milliónandi" ! Pl ! g ! Nom ;
milliardth = \\g,c => d.ten ! NCard ! g ! Nom ++ mkWeakOrd "milliardandi" ! Pl ! g ! Nom
} ;
pot1plus d e = {
s = table {
NCard => \\g,c => e.s ! NCard ! g ! c ++ "og" ++ d.ten ! NCard ! g ! Nom ;
NOrd n => \\g,c => d.ten ! NCard ! g ! c ++ "og" ++ e.s ! NOrd n ! g ! Nom
} ;
thousandth = \\g,c => d.ten ! NCard ! g ! Nom ++ "og" ++ e.s ! NCard ! g ! c ++ mkWeakOrd "túsundandi" ! Pl ! g ! Nom ;
millionth = \\g,c => d.ten ! NCard ! g ! Nom ++ "og" ++ e.s ! NCard ! g ! c ++ mkWeakOrd "milliónandi" ! Pl ! g ! Nom ;
milliardth = \\g,c => d.ten ! NCard ! g ! Nom ++ "og" ++ e.s ! NCard ! g ! c ++ mkWeakOrd "milliardandi" ! Pl ! g ! Nom ;
n = Pl
} ;
pot1as2 n = n ;
pot21 =
mkCardOrd (\\_,_ => "hundrað")
(mkWeakOrd "hundraðandi") ** {
thousandth = \\g,c => "hundrað" ++ mkWeakOrd "túsundandi" ! Pl ! g ! Nom ;
millionth = \\g,c => "hundrað" ++ mkWeakOrd "milliónandi" ! Pl ! g ! Nom ;
milliardth = \\g,c => "hundrað" ++ mkWeakOrd "milliardandi" ! Pl ! g ! Nom
} ;
pot2 d =
mkCardOrd (\\_,_ => numBase d ++ "hundrað")
(\\_ => d.hundredth) ** {
thousandth = \\g,c => numBase d ++ "hundrað" ++ mkWeakOrd "túsundandi" ! Pl ! g ! Nom ;
millionth = \\g,c => numBase d ++ "hundrað" ++ mkWeakOrd "milliónandi" ! Pl ! g ! Nom ;
milliardth = \\g,c => numBase d ++ "hundrað" ++ mkWeakOrd "milliardandi" ! Pl ! g ! Nom
} ;
pot2plus d e = {
s = table {
NCard => \\g,c => numBase d ++ "hundrað" ++ e.s ! NCard ! g ! c ;
NOrd n => \\g,c => numBase d ++ "hundrað" ++ "og" ++ e.s ! NOrd n ! g ! c
} ;
thousandth = \\g,c => numBase d ++ "hundrað" ++ e.s ! NCard ! g ! c ++ mkWeakOrd "túsundandi" ! Pl ! g ! Nom ;
millionth = \\g,c => numBase d ++ "hundrað" ++ e.s ! NCard ! g ! c ++ mkWeakOrd "milliónandi" ! Pl ! g ! Nom ;
milliardth = \\g,c => numBase d ++ "hundrað" ++ e.s ! NCard ! g ! c ++ mkWeakOrd "milliardandi" ! Pl ! g ! Nom ;
n = Pl
} ;
pot2as3 n = n ;
pot31 = mkCardOrd (\\_,_ => "túsund")
(mkWeakOrd "túsundandi") ;
pot3 n = mkCardOrd (\\_,_ => numBase n ++ "túsund")
(\\_ => n.thousandth) ;
pot3plus n m = {
s = table {
NCard => \\g,c => numBase n ++ "túsund" ++ m.s ! NCard ! g ! c ;
NOrd num => \\g,c => numBase n ++ "túsund" ++ "og" ++ m.s ! NOrd num ! g ! c
} ;
n = Pl
} ;
pot3as4 n = n ;
pot3decimal d = mkCardOrd (\\_,_ => d.s ++ "túsund")
(\\_,_,_ => d.s ++ "túsundandi") ;
pot41 = mkCardOrd (\\_,_ => "millión")
(mkWeakOrd "milliónandi") ;
pot4 n = mkCardOrd (\\_,_ => numBase n ++ "millión")
(\\_ => n.millionth) ;
pot4plus n m = {
s = table {
NCard => \\g,c => numBase n ++ "millión" ++ m.s ! NCard ! g ! c ;
NOrd num => \\g,c => numBase n ++ "millión" ++ "og" ++ m.s ! NOrd num ! g ! c
} ;
n = Pl
} ;
pot4as5 n = n ;
pot4decimal d = mkCardOrd (\\_,_ => d.s ++ "millión")
(\\_,_,_ => d.s ++ "milliónandi") ;
pot51 = mkCardOrd (\\_,_ => "milliard")
(mkWeakOrd "milliardandi") ;
pot5 n = mkCardOrd (\\_,_ => numBase n ++ "milliard")
(\\_ => n.milliardth) ;
pot5plus n m = {
s = table {
NCard => \\g,c => numBase n ++ "milliard" ++ m.s ! NCard ! g ! c ;
NOrd num => \\g,c => numBase n ++ "milliard" ++ "og" ++ m.s ! NOrd num ! g ! c
} ;
n = Pl
} ;
pot5decimal d = mkCardOrd (\\_,_ => d.s ++ "milliard")
(\\_,_,_ => d.s ++ "milliardandi") ;
IDig d = d ;
IIDig d ds = {s = d.s ++ BIND ++ ds.s; n = Pl} ;
D_0 = {s = "0"; n = Pl} ;
D_1 = {s = "1"; n = Sg} ;
D_2 = {s = "2"; n = Pl} ;
D_3 = {s = "3"; n = Pl} ;
D_4 = {s = "4"; n = Pl} ;
D_5 = {s = "5"; n = Pl} ;
D_6 = {s = "6"; n = Pl} ;
D_7 = {s = "7"; n = Pl} ;
D_8 = {s = "8"; n = Pl} ;
D_9 = {s = "9"; n = Pl} ;
PosDecimal d = d ** {hasDot = False} ;
NegDecimal d = {s = "-" ++ BIND ++ d.s; n = Pl; hasDot = False} ;
IFrac d i = {s = d.s ++ if_then_Str d.hasDot BIND (BIND++"."++BIND) ++ i.s; n = Pl; hasDot = True} ;
oper
caseList : Str -> Str -> Str -> Str -> Case => Str = \nom,acc,dat,gen ->
table {Nom => nom ; Acc => acc ; Dat => dat ; Gen => gen} ;
mkCardOrd :
(Gender => Case => Str) ->
(Number => Gender => Case => Str) ->
{s : CardOrd => Gender => Case => Str ; n : Number} =
\card,ord -> {
s = table {
NCard => card ;
NOrd n => ord ! n
} ;
n = Pl
} ;
mkDigit :
Str -> Str -> Str -> Str -> Str -> Str -> Digit =
\str,teen,ten,unitOrd,teenOrd,tenOrd -> lin Digit {
s = table {
NCard => \\_,_ => str ;
NOrd n => mkWeakOrd unitOrd ! n
} ;
teen = table {
NCard => \\_,_ => teen ;
NOrd n => mkWeakOrd teenOrd ! n
} ;
ten = table {
NCard => \\_,_ => ten ;
NOrd n => mkWeakOrd tenOrd ! n
} ;
n = Pl
} ;
mkOrdForms : Str -> Str -> Str -> Number => Gender => Case => Str = \masc,obl,pl ->
table {
Sg =>
table {
Masc => caseList masc obl obl obl ;
Fem => caseList obl pl pl pl ;
Neuter => \\_ => obl
} ;
Pl => \\_,_ => pl
} ;
mkWeakOrd : Str -> Number => Gender => Case => Str = \lemma ->
let stem : Str = init lemma in
mkOrdForms lemma (stem + "a") (stem + "u") ;
mkCompoundOrd : Str -> Str -> Number => Gender => Case => Str = \prefix,lemma ->
let stem : Str = init lemma in
mkOrdForms
(prefix ++ BIND ++ lemma)
(prefix ++ BIND ++ (stem + "a"))
(prefix ++ BIND ++ (stem + "u")) ;
numBase : {s : CardOrd => Gender => Case => Str} -> Str = \n ->
n.s ! NCard ! Neuter ! Nom ;
}

Some files were not shown because too many files have changed in this diff Show More