11 Commits

Author SHA1 Message Date
0e5b224f5c oops 2026-04-05 18:26:40 -06:00
7a1d1412fb toki preps 2026-04-05 12:33:43 -06:00
19e35edf09 oops NumPl 2026-04-05 11:52:21 -06:00
43979ed054 fix detcn 2026-04-05 11:48:07 -06:00
786340192f toki transitives 2026-04-05 10:15:24 -06:00
ecdc0a85f6 toki preverb 2026-04-05 09:33:58 -06:00
0bd3506e1b toki adjs 2026-04-05 09:18:03 -06:00
fc2b2a0954 Pron 2026-04-05 08:34:35 -06:00
eccbdcfb97 li in PredVP 2026-04-05 08:29:48 -06:00
d2568cf869 toki params 2026-04-04 20:05:26 -06:00
bcb16ae376 init toki pona 2026-04-04 20:05:26 -06:00
184 changed files with 7729 additions and 145455 deletions

1
.envrc Normal file
View File

@@ -0,0 +1 @@
use flake

12
.gitignore vendored
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

62
flake.lock generated Normal file
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
flake.nix Normal file
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
];
};
});
};
}

23
package.nix Normal file
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
'';
}

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))

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} ;
} }

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)) ++

File diff suppressed because it is too large Load Diff

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 ;

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
} ; } ;

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
} ; } ;

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="&"};
@@ -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="አሉ"};
}
-}

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} ; ---

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
} ;
} }

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
}} ;
}

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} ;
} }

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

View File

@@ -2,9 +2,5 @@ concrete GrammarHye of Grammar =
TenseX, TenseX,
PhraseHye, PhraseHye,
NounHye, NounHye,
VerbHye, AdjectiveHye ** {
AdjectiveHye,
AdverbHye,
SentenceHye,
StructuralHye ** {
} }

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 "կին" ;
} }

File diff suppressed because it is too large Load Diff

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} ;
} }

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}
} ;
} }

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 ->

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} ;
}

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 ;
}

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 ;
}

View File

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

View File

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

View File

@@ -3,13 +3,12 @@ concrete CatBel of Cat = CommonX ** open ResBel in {
lincat N = Noun ; lincat N = Noun ;
lincat N2 = Noun ** {c2 : Compl} ; lincat N2 = Noun ** {c2 : Compl} ;
lincat N3 = Noun ** {c2,c3 : Compl} ; lincat N3 = Noun ** {c2,c3 : Compl} ;
lincat Pron = {s: Case => Str; g: Gender; n : Number; p: Person} ; lincat V = V ;
lincat V = Verb ; lincat VV,VS,VQ,VA = V ;
lincat VV,VS,VQ,VA = Verb ; lincat V2 = V ** {c2 : Compl} ;
lincat V2 = Verb ** {c2 : Compl} ; lincat V3,V2A,V2S,V2Q,V2V = V ** {c2,c3 : Compl} ;
lincat V3,V2A,V2S,V2Q,V2V = Verb ** {c2,c3 : Compl} ; lincat A = A ;
lincat A = Adj ; lincat A2 = A ** {c2 : Compl} ;
lincat A2 = Adj ** {c2 : Compl} ;
lincat Prep = Compl ; lincat Prep = Compl ;
lincat CN = CommonNoun ; lincat CN = CommonNoun ;
lincat AP = AdjPhrase ; lincat AP = AdjPhrase ;

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)) ++

View File

@@ -1,15 +0,0 @@
--# -path=.:../abstract:../common:prelude
concrete ExtendBel of Extend = CatBel ** open ResBel, ParadigmsBel in {
lin
iFem_Pron = mkPron "я" "мяне" "мне" "мяне" "мне" "мной" Fem Sg P1 ;
youFem_Pron = mkPron "ты" "табе" "табе" "табе" "табе" "табой" Fem Sg P2 ;
weFem_Pron = mkPron "мы" "нас" "нам" "нас" "наc" "намі" Fem Pl P1 ;
youPlFem_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Fem Pl P2 ;
theyFem_Pron = mkPron "вони" "їх" "їм" "їх" "них" "ними" Fem Pl P3 ;
youPolFem_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Fem Pl P2 ;
youPolPl_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Fem Pl P2 ;
youPolPlFem_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Fem Pl P2 ;
}

View File

@@ -2,6 +2,5 @@ concrete GrammarBel of Grammar =
TenseX, TenseX,
PhraseBel, PhraseBel,
NounBel, NounBel,
AdjectiveBel, AdjectiveBel ** {
StructuralBel ** {
} }

File diff suppressed because it is too large Load Diff

View File

@@ -636,44 +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
} ;
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;
@@ -755,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;

View File

@@ -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,6 +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 ;
} }

View File

@@ -1,12 +0,0 @@
concrete StructuralBel of Structural = CatBel ** open ResBel, ParadigmsBel in {
lin
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 "мы" "нас" "нам" "нас" "наc" "намі" Masc Pl P1 ;
youPl_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Masc Pl P2 ;
youPol_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Masc Pl P2 ;
they_Pron = mkPron "яны" "іх" "їм" "їх" "іх" "імі" Masc Pl P3 ;
}

View File

@@ -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 ;

View File

@@ -39,8 +39,8 @@ 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 ;

View File

@@ -1,7 +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
} ;
} }

View File

@@ -1,5 +1,4 @@
concrete AllFao of AllFaoAbs = concrete AllFao of AllFaoAbs =
LangFao, LangFao
ExtendFao
** **
{} ; {} ;

View File

@@ -1,4 +1,3 @@
abstract AllFaoAbs = abstract AllFaoAbs =
Lang, Lang
Extend
** {} ** {}

View File

@@ -9,20 +9,9 @@ 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} ;
lincat Comp = {s : Gender => Number => Str} ;
lincat Cl = Clause ;
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 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 Quant = {s : Gender => Number => Case => Str ; sp : Species} ;
lincat Num = {s : Gender => Case => Str ; n : Number} ;
lincat S = {s : Str} ; lincat S = {s : Str} ;
lincat LN,SN,GN,PN = {s : Str} ; lincat LN,SN,GN,PN = {s : Str} ;

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)) ++

View File

@@ -1,13 +0,0 @@
concrete ExtendFao of Extend = CatFao **
open ParadigmsFao, ResFao in {
lin
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 ;
}

View File

@@ -2,9 +2,5 @@ concrete GrammarFao of Grammar =
TenseX, TenseX,
PhraseFao, PhraseFao,
NounFao, NounFao,
VerbFao, AdjectiveFao ** {
AdjectiveFao,
SentenceFao,
RelativeFao,
StructuralFao ** {
} }

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" ;
} }

File diff suppressed because it is too large Load Diff

View File

@@ -1,51 +1,4 @@
concrete NounFao of Noun = CatFao ** open ResFao in { concrete NounFao of Noun = CatFao ** {
lin lin
UseN n = n ; UseN n = n ;
UsePron p = p ;
RelNP np rs =
np ** {s = \\c => np.s ! c ++ "," ++ rs.s ! np.g ! persNum np.n np.p} ;
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 = table {
Masc => table {
Sg => table {Nom => "ein" ; Acc => "ein" ; Dat => "einum" ; Gen => "eins"} ;
Pl => \\_ => []
} ;
Fem => table {
Sg => table {Nom => "ein" ; Acc => "eina" ; Dat => "einari" ; Gen => "einar"} ;
Pl => \\_ => []
} ;
Neuter => table {
Sg => table {Nom => "eitt" ; Acc => "eitt" ; Dat => "einum" ; Gen => "eins"} ;
Pl => \\_ => []
}
} ;
sp = Indef
} ;
DetQuant quant num = {
s = \\g,c => quant.s ! g ! num.n ! c ++ num.s ! g ! c ;
n = num.n ;
sp = quant.sp
} ;
NumSg = {
s = \\_,_ => [] ;
n = Sg
} ;
NumPl = {
s = \\_,_ => [] ;
n = Pl
} ;
AdjCN ap cn = {
s = \\sp,n,c => ap.s ! cn.g ! n ! c ++ cn.s ! sp ! n ! c ;
g = cn.g
} ;
} }

View File

@@ -319,19 +319,6 @@ oper
_ => regN form1 _ => regN form1
} ; } ;
mkPron : (_,_,_,_ : Str) -> Gender -> Number -> Person -> Pron =
\nom,acc,dat,gen,g,n,p -> lin Pron {
s = table {
Nom => nom ;
Acc => acc ;
Dat => dat ;
Gen => gen
} ;
g = g ;
n = n ;
p = p
} ;
regA : Str -> A -- s;Masc;Sg;Nom regA : Str -> A -- s;Masc;Sg;Nom
= \form -> case form of { = \form -> case form of {
_ + "dur" => mkA001 form; _ + "dur" => mkA001 form;
@@ -507,10 +494,6 @@ oper
mkA : Str -> Str -> A = reg2A -- s;Masc;Sg;Nom s;Masc;Sg;Dat mkA : Str -> Str -> A = reg2A -- s;Masc;Sg;Nom s;Masc;Sg;Dat
} ; } ;
invarA : Str -> A = \s -> lin A {
s = \\_,_,_ => s
} ;
mkA2 = overload { mkA2 = overload {
mkA2 : A -> A2 = \a -> lin A2 (a ** {c2 = noPrep}) ; mkA2 : A -> A2 = \a -> lin A2 (a ** {c2 = noPrep}) ;
mkA2 : A -> Prep -> A2 = \a,p -> lin A2 (a ** {c2 = p}) ; mkA2 : A -> Prep -> A2 = \a,p -> lin A2 (a ** {c2 = p}) ;
@@ -573,11 +556,10 @@ oper
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} ;
mkPredet : Str -> Predet = \s -> lin Predet {s=s} ; mkPredet : Str -> Predet = \s -> lin Predet {s=s} ;
mkDet : Str -> Det = \s -> lin Det {s=\\_,_ => s; n=Sg; sp=Indef} ; mkDet : Str -> Det = \s -> lin Det {s=s} ;
mkCard : Str -> Card = \s -> lin Card {s=s} ; mkCard : Str -> Card = \s -> lin Card {s=s} ;
mkACard : Str -> ACard = \s -> lin ACard {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} ;
mkVoc : Str -> Voc = \s -> lin Voc {s=s} ; mkVoc : Str -> Voc = \s -> lin Voc {s=s} ;

View File

@@ -1,13 +1,8 @@
concrete PhraseFao of Phrase = CatFao ** open ResFao in { concrete PhraseFao of Phrase = CatFao ** {
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 ;
UttNP np = {s = np.s ! Nom} ;
UttVP vp = {s = vp.Nonfinite} ;
UttCN cn = {s = cn.s ! Indef ! Sg ! Nom} ;
UttAP ap = {s = ap.s ! Masc ! Sg ! Nom} ;
UttAdv adv = adv ;
UttInterj i = i ; UttInterj i = i ;
NoPConj = {s = []} ; NoPConj = {s = []} ;

View File

@@ -1,7 +0,0 @@
concrete RelativeFao of Relative = CatFao ** open ResFao in {
lin
IdRP = {s = "sum"} ;
RelVP rp vp = {
s = \\t,pol,g,pn => rp.s ++ vp.Indicative ! t ! pol ! g ! pn
} ;
}

View File

@@ -1,11 +1,12 @@
resource ResFao = ParamX - [Tense,Pres,Past] ** { resource ResFao = {
param Species = Indef | Def ; param Species = Indef | Def ;
param Number = Sg | Pl ;
param Case = Nom | Acc | Dat | Gen ; param Case = Nom | Acc | Dat | Gen ;
param Gender = Masc | Fem | Neuter ; param Gender = Neutr | Fem | Masc ;
oper Noun = {s: Species => Number => Case => Str; g : Gender} ; -- 2135 oper Noun = {s: Species => Number => Case => Str} ; -- 2135
oper mkNoun : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Gender -> Noun = oper mkNoun : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Noun =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,g -> \f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16 ->
{ s = table { { s = table {
Indef => table { Indef => table {
Sg => table { Sg => table {
@@ -35,8 +36,7 @@ oper mkNoun : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Gender -> Noun =
Gen => f16 Gen => f16
} }
} }
} ; }
g = g
} ; } ;
@@ -72,7 +72,7 @@ oper mkAdj : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Adj =
Gen => f16 Gen => f16
} }
} ; } ;
Neuter=> table { Neutr => table {
Sg => table { Sg => table {
Nom => f17 ; Nom => f17 ;
Acc => f18 ; Acc => f18 ;
@@ -89,25 +89,14 @@ oper mkAdj : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Adj =
} }
} ; } ;
param Tense = Pres | Past ; param Tense = Past | Pres ;
param PersNum = PSg Person | PPl ; param PersNum = PSg Person | PPl ;
oper persNum : Number -> Person -> PersNum = param Person = P1 | P3 | P2 ;
\n,p -> case n of { oper Verb = {Converb: Str; Imperative_Jussive: Number => Str; Indicative: Tense => PersNum => Str; Nonfinite: Str; Participle: Tense => Str ; particle : Str} ; -- 596
Sg => PSg p ;
Pl => PPl
} ;
oper persNumNumber : PersNum -> Number =
\pn -> case pn of {
PSg _ => Sg ;
PPl => Pl
} ;
oper Verb = {Converb: Str; imperative: Number => Str; Indicative: Tense => PersNum => Str; Nonfinite: Str; Participle: Tense => Str ; particle : Str} ; -- 596
oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Verb = oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Verb =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14 -> \f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14 ->
{ Converb = f1 ; { Converb = f1 ;
imperative = table { Imperative_Jussive = table {
Sg => f2 ; Sg => f2 ;
Pl => f3 Pl => f3
} ; } ;
@@ -139,34 +128,5 @@ oper noPrep : Compl = {s=""; c=Acc} ;
oper CommonNoun = Noun ; oper CommonNoun = Noun ;
oper AdjPhrase = Adj ; oper AdjPhrase = Adj ;
oper VerbPhrase = {
Converb : Str ;
Indicative : Tense => Polarity => Gender => PersNum => Str ;
Nonfinite : Str ;
Participle : Tense => Str ;
} ;
oper Clause = {
Converb : Str ;
Indicative : Tense => Polarity => Str ;
Nonfinite : Str ;
Participle : Tense => Str
} ;
oper
copula : Tense => PersNum => Str =
table {
Pres => table {
PSg P1 => "eri" ;
PSg P2 => "ert" ;
PSg P3 => "er" ;
PPl => "eru"
} ;
Past => table {
PSg P1 => "var" ;
PSg P2 => "vart" ;
PSg P3 => "var" ;
PPl => "vóru"
}
} ;
} }

View File

@@ -1,31 +0,0 @@
concrete SentenceFao of Sentence = CatFao ** open Prelude, ResFao, (P = ParamX) in {
lin PredVP np vp = {Converb = np.s ! Nom ++ vp.Converb;
Indicative = \\t,pol =>
let p = persNum np.n np.p
in np.s ! Nom ++ vp.Indicative ! t ! pol ! np.g ! p;
Nonfinite = np.s ! Nom ++ vp.Nonfinite;
Participle = \\t => np.s ! Nom ++ vp.Participle ! t} ;
UseCl temp pol cl =
let
tense = case temp.t of {
P.Pres => Pres ;
P.Past => Past ;
P.Fut => Pres ;
P.Cond => Past
} ;
in {
s = temp.s ++ pol.s ++ cl.Indicative ! tense ! pol.p
} ;
UseRCl temp pol rcl =
let
tense = case temp.t of {
P.Pres => Pres ;
P.Past => Past ;
P.Fut => Pres ;
P.Cond => Past
}
in {
s = \\g,pn =>
temp.s ++ pol.s ++ rcl.s ! tense ! pol.p ! g ! pn
} ;
}

View File

@@ -1,14 +0,0 @@
concrete StructuralFao of Structural = CatFao **
open ParadigmsFao, ResFao in {
lin
i_Pron = mkPron "eg" "meg" "mær" "mín" Masc Sg P1 ;
youSg_Pron = mkPron "tú" "teg" "tær" "tín" Masc Sg P2 ;
he_Pron = mkPron "hann" "hann" "honum" "hansara" Masc Sg P3 ;
she_Pron = mkPron "hon" "hana" "henni" "hennara" Fem Sg P3 ;
it_Pron = mkPron "tað" "tað" "tí" "tess" Neuter Sg P3 ;
we_Pron = mkPron "vit" "okkum" "okkum" "okkara" Masc Pl P1 ;
youPl_Pron = mkPron "tit" "tykkum" "tykkum" "tykkara" Masc Pl P2 ;
they_Pron = mkPron "teir" "teir" "teimum" "teirra" Masc Pl P3 ;
youPol_Pron = mkPron "tit" "tykkum" "tykkum" "tykkara" Masc Pl P2 ;
}

View File

@@ -1,42 +0,0 @@
concrete VerbFao of Verb = CatFao ** open Prelude,ResFao in {
lin UseV v = {Converb = v.Converb ++ v.particle;
Indicative = \\t,pol,g,p => v.Indicative ! t ! p ++ v.particle ++
case pol of {
Pos => [] ;
Neg => "ikki"
} ;
Nonfinite = v.Nonfinite ++ v.particle;
Participle = \\t => v.Participle ! t ++ v.particle} ;
lin AdvVP vp adv = {Converb = vp.Converb ++ adv.s;
Indicative = \\t,pol,g,p => vp.Indicative ! t ! pol ! g ! p ++ adv.s;
Nonfinite = vp.Nonfinite ++ adv.s;
Participle = \\t => vp.Participle ! t ++ adv.s} ;
lin ComplSlash vps np = {Converb = vps.Converb ++ vps.particle
++ vps.c2.s ++ np.s ! vps.c2.c;
Indicative = \\t,pol,g,p =>
vps.Indicative ! t ! p ++ vps.particle ++
case pol of {
Pos => [] ;
Neg => "ikki"
} ++
vps.c2.s ++ np.s ! vps.c2.c ;
Nonfinite = vps.Nonfinite ++ vps.particle ++ vps.c2.s ++ np.s ! vps.c2.c;
Participle = \\t => vps.Participle ! t ++ vps.particle ++ vps.c2.s ++ np.s ! vps.c2.c} ;
lin UseComp comp = {
Converb = copula ! Pres ! PPl ++ comp.s ! Masc ! Sg ;
Indicative = \\t,pol,g,p => copula ! t ! p ++
case pol of {
Pos => [] ;
Neg => "ikki"
} ++
comp.s ! g ! persNumNumber p ;
Nonfinite = "vera" ++ comp.s ! Masc ! Sg ;
Participle = \\t => "verið" ++ comp.s ! Masc ! Sg
} ;
lin CompAP ap = {s = \\g,n => ap.s ! g ! n ! Nom} ;
lin CompNP np = {s = \\_,_ => np.s ! Nom} ;
lin CompAdv adv = {s = \\_,_ => adv.s} ;
lin CompCN cn = {s = \\_,n => cn.s ! Indef ! n ! Nom} ;
lin SlashV2a v = v ;
}

View File

@@ -83,7 +83,6 @@ concrete CatGer of Cat =
Num = {s,sp : AForm => Str ; n : Number ; isNum : Bool} ; -- Num,Card.s AForm HL 12/23 Num = {s,sp : AForm => Str ; n : Number ; isNum : Bool} ; -- Num,Card.s AForm HL 12/23
Card = {s : AForm => Str ; n : Number} ; -- inflection mainly for: einer,eine,eines Card = {s : AForm => Str ; n : Number} ; -- inflection mainly for: einer,eine,eines
ACard = {s : Str ; n : Number} ;
Ord = {s : AForm => Str} ; Ord = {s : AForm => Str} ;
-- Numeral -- Numeral

View File

@@ -46,10 +46,6 @@ lin
is_wrong_VP = mkVP have_V2 (mkNP (P.mkN "Unrecht")) ; is_wrong_VP = mkVP have_V2 (mkNP (P.mkN "Unrecht")) ;
n_units_AP card cn a = mkAP (lin AdA (mkUtt (mkNP <lin Card card : Card> (lin CN cn)))) (lin A a) ; n_units_AP card cn a = mkAP (lin AdA (mkUtt (mkNP <lin Card card : Card> (lin CN cn)))) (lin A a) ;
n_units_of_NP card cn np =
G.AdvNP
(mkNP <lin Card card : Card> (lin CN cn))
(SyntaxGer.mkAdv P.von_Prep (lin NP np)) ;
n_unit_CN card unit cn = mkCN (invarA (mkUtt (mkNP <lin Card card : Card> (lin CN unit))).s) cn ; n_unit_CN card unit cn = mkCN (invarA (mkUtt (mkNP <lin Card card : Card> (lin CN unit))).s) cn ;
bottle_of_CN np = N.ApposCN (mkCN (P.mkN "Flasche")) np ; bottle_of_CN np = N.ApposCN (mkCN (P.mkN "Flasche")) np ;

View File

@@ -6,17 +6,15 @@ concrete ExtendGer of Extend =
GenNP, GenRP, EmptyRelSlash, GenIP, GenModIP, GenNP, GenRP, EmptyRelSlash, GenIP, GenModIP,
VPS, ListVPS, MkVPS, BaseVPS, ConsVPS, ConjVPS, PredVPS, VPS, ListVPS, MkVPS, BaseVPS, ConsVPS, ConjVPS, PredVPS,
VPI, ListVPI, MkVPI, BaseVPI, ConsVPI, ConjVPI, ComplVPIVV, VPI, ListVPI, MkVPI, BaseVPI, ConsVPI, ConjVPI, ComplVPIVV,
ListComp, BaseComp, ConsComp, ConjComp,
ListImp, BaseImp, ConsImp, ConjImp,
ICompAP, IAdvAdv, CompIQuant, PrepCN, ICompAP, IAdvAdv, CompIQuant, PrepCN,
PresPartAP, PastPartAP, PastPartAgentAP, PastPartAP, PastPartAgentAP,
PassVPSlash, PassAgentVPSlash, PassVPSlash, PassAgentVPSlash,
ProgrVPSlash, AdvIsNP, AdvRVP, AdvIsNP,
RNP, RNPList, Base_rr_RNP, Base_nr_RNP, Base_rn_RNP, Cons_rr_RNP, Cons_nr_RNP, ConjRNP, RNP, RNPList, Base_rr_RNP, Base_nr_RNP, Base_rn_RNP, Cons_rr_RNP, Cons_nr_RNP, ConjRNP,
ReflRNP, ReflPron, ReflPoss, PredetRNP, AdvRNP, ReflA2RNP, PossPronRNP, ReflRNP, ReflPron, ReflPoss, PredetRNP, AdvRNP, ReflA2RNP, PossPronRNP,
CompoundN, DetNPMasc, DetNPFem, UseDAP, UseDAPMasc, UseDAPFem, CompoundN, DetNPMasc, DetNPFem, UseDAP, UseDAPMasc, UseDAPFem,
CardCNCard, CompoundAP, GerundCN, GerundNP, GerundAdv, ByVP, ApposNP, CardCNCard,
InOrderToVP, PositAdVAdj InOrderToVP
] ]
with with
(Grammar = GrammarGer) ** (Grammar = GrammarGer) **
@@ -190,30 +188,8 @@ concrete ExtendGer of Extend =
-- Conjunction of copula complements -- Conjunction of copula complements
lincat
[Comp] = {s1,s2 : Agr => Str} ;
lin
BaseComp x y =
twoTable Agr
{s = \\a => x.s ! a ++ x.ext ! numberAgr a}
{s = \\a => y.s ! a ++ y.ext ! numberAgr a} ;
ConsComp x xs =
consrTable Agr comma
{s = \\a => x.s ! a ++ x.ext ! numberAgr a}
xs ;
ConjComp conj xs = (conjunctDistrTable Agr conj xs) ** {ext = \\_ => []} ;
-- Conjunction of imperatives -- Conjunction of imperatives
lincat
ListImp = {s1,s2 : Polarity => ImpForm => Str} ;
lin
BaseImp = twoTable2 Polarity ImpForm ;
ConsImp = consrTable2 Polarity ImpForm comma ;
ConjImp conj xs = conjunctDistrTable2 Polarity ImpForm conj xs ;
ICompAP ap = { ICompAP ap = {
s = \\_ => "wie" ++ ap.s ! APred ; s = \\_ => "wie" ++ ap.s ! APred ;
ext = ap.c.p1 ++ ap.c.p2 ++ ap.ext ext = ap.c.p1 ++ ap.c.p2 ++ ap.ext
@@ -233,16 +209,6 @@ concrete ExtendGer of Extend =
-- participle constructions -- participle constructions
PresPartAP vp =
let a = agrP3 Sg in {
s = \\af => (vp.nn ! a).p1 ++ (vp.nn ! a).p2 ++ (vp.nn ! a).p3 ++ vp.a2 ++ vp.adj
++ vp.inf.inpl.p2 ++ (vp.inf.extr ! a) ++ vp.s.s ! VPresPart af ;
s2 = \\_ => [] ;
isPre = True ;
c = <[],[]> ;
ext = vp.ext
} ;
PastPartAP vp = PastPartAP vp =
let a = agrP3 Sg in { let a = agrP3 Sg in {
s = \\af => (vp.nn ! a).p1 ++ (vp.nn ! a).p2 ++ (vp.nn ! a).p3 ++ vp.a2 ++ vp.adj s = \\af => (vp.nn ! a).p1 ++ (vp.nn ! a).p2 ++ (vp.nn ! a).p3 ++ vp.a2 ++ vp.adj
@@ -280,23 +246,8 @@ concrete ExtendGer of Extend =
-- publishing of the document -- publishing of the document
GerundCN vp = {
s = \\_,_,_ => useInfVP False vp ;
rc = \\_ => [] ;
ext, adv = [] ;
g = Neutr
} ;
GerundNP vp = MassNP (GerundCN vp) ;
GerundAdv vp = {s = useInfVP False vp} ;
ByVP vp = {s = "durch" ++ useInfVP False vp} ;
-- counterpart to ProgrVP, for VPSlash -- counterpart to ProgrVP, for VPSlash
ProgrVPSlash vp = vp ;
-- construct VPSlash from A2 and N2 -- construct VPSlash from A2 and N2
-- existential for mathematics -- existential for mathematics
@@ -386,9 +337,6 @@ concrete ExtendGer of Extend =
adv = appPrep prep (rnp.s ! agrP3 Sg) ; -- bug: fixed agreement adv = appPrep prep (rnp.s ! agrP3 Sg) ; -- bug: fixed agreement
in ap ** { s = \\af => ap.s ! af ++ adv } ; -- e.g. unknown in one's youth in ap ** { s = \\af => ap.s ! af ++ adv } ; -- e.g. unknown in one's youth
AdvRVP vp prep rnp =
insertAdv (appPrep prep (rnp.s ! agrP3 Sg) ++ rnp.ext ++ rnp.rc) vp ;
ReflA2RNP adj rnp = -- would need AP.c : Agr => Str*Str, not AP.c : Str*Str ReflA2RNP adj rnp = -- would need AP.c : Agr => Str*Str, not AP.c : Str*Str
let -- as we have no reflexive AP, let -- as we have no reflexive AP,
compl = appPrep adj.c2 (rnp.s ! agrP3 Sg) ; -- we use a fixed agreement compl = appPrep adj.c2 (rnp.s ! agrP3 Sg) ; -- we use a fixed agreement
@@ -487,23 +435,9 @@ concrete ExtendGer of Extend =
n = Pl n = Pl
} ; } ;
CompoundAP n a = {
s = \\af => n.co ++ Predef.BIND ++ a.s ! Posit ! af ;
s2 = \\_ => [] ;
isPre = True ;
c = <[],[]> ;
ext = []
} ;
ApposNP np app = np ** {
s = \\b,c => np.s ! b ! c ++ embedInCommas (app.s ! False ! c ++ bigNP app) ;
w = WHeavy
} ;
InOrderToVP vp = {s = "um" ++ useInfVP False vp} ; InOrderToVP vp = {s = "um" ++ useInfVP False vp} ;
PositAdVAdj a = {s = a.s ! Posit ! APred} ;
oper oper
insertObjReflNP : RNP -> ResGer.VPSlash -> ResGer.VP = -- HL 5/2022 insertObjReflNP : RNP -> ResGer.VPSlash -> ResGer.VP = -- HL 5/2022
\rnp,vp -> insertObjRNP rnp vp.c2 vp ; \rnp,vp -> insertObjRNP rnp vp.c2 vp ;

View File

@@ -68,8 +68,6 @@ oper
mkPN = overload { mkPN = overload {
mkPN : (anna : Str) -> PN mkPN : (anna : Str) -> PN
= \p -> lin PN (regName p) ; = \p -> lin PN (regName p) ;
mkPN : (anna : Str) -> Gender -> PN
= \p, g -> lin PN (regName p ** {g = g}) ;
mkPN : (nm,gm,am,vm,pn,pa : Str) -> Gender -> PN mkPN : (nm,gm,am,vm,pn,pa : Str) -> Gender -> PN
= \ nm,gm,am,vm,pn,pa, g -> lin PN (mkName nm gm am vm pn pa g) ; = \ nm,gm,am,vm,pn,pa, g -> lin PN (mkName nm gm am vm pn pa g) ;
} ; } ;

View File

@@ -670,6 +670,31 @@ resource ResGre = ParamX ** open Prelude in {
g = g g = g
} ; } ;
mkNoun_anthropos : (s1,_ : Str) -> Gender -> Noun =
\anthropos, anthropon, g ->
let
anthrop = Predef.tk 2 anthropos ;
anthrOp = Predef.tk 2 anthropon ;
in {
s = table {
Sg => table {
Nom => anthropos ;
Gen|CPrep P_Dat => anthrOp + "ου" ;
Acc |CPrep P_se |CPrep PNul => anthrop + "ο";
Vocative => anthrop + "ε"
} ;
Pl => table {
Nom | Vocative=> anthrop + "οι" ;
Gen |CPrep P_Dat=> anthropon ;
Acc |CPrep P_se |CPrep PNul => anthrOp + "ους"
}
} ;
g = g
} ;
----------------Neuter nouns in -ς , with stress movement,syllabic augmentation, irregular (φως, γεγονός, ημίφως) -------------- ----------------Neuter nouns in -ς , with stress movement,syllabic augmentation, irregular (φως, γεγονός, ημίφως) --------------
mkNoun_fws: (s1,_ : Str) -> Gender -> Noun = mkNoun_fws: (s1,_ : Str) -> Gender -> Noun =
\fws, fwtos, g -> \fws, fwtos, g ->

View File

@@ -72,7 +72,9 @@ taC1C2eC3o = { C1 = "ת" ; C1C2=""; C2C3 =""; C3="ו"};
taC1C2aC3nah = { C1 = "ת" ; C1C2=""; C2C3 =""; C3="נה"}; taC1C2aC3nah = { C1 = "ת" ; C1C2=""; C2C3 =""; C3="נה"};
yaC1C2aC3 = { C1 = "י" ; C1C2=""; C2C3 =""; C3=""}; yaC1C2aC3 = { C1 = "י" ; C1C2=""; C2C3 =""; C3=""};
taC1C2aC3 = { C1 = "ת" ; C1C2=""; C2C3 =""; C3=""};
yaC1C2aC3u = { C1 = "י" ; C1C2=""; C2C3 =""; C3="ו"}; yaC1C2aC3u = { C1 = "י" ; C1C2=""; C2C3 =""; C3="ו"};
taC1C2aC3nah = { C1 = "ת" ; C1C2=""; C2C3 =""; C3="נה"};
C1uC2aC3 = { C1 = "" ; C1C2="ו"; C2C3 =""; C3=""}; C1uC2aC3 = { C1 = "" ; C1C2="ו"; C2C3 =""; C3=""};

View File

@@ -7,7 +7,7 @@ concrete AdjectiveHun of Adjective = CatHun ** open ResHun, Prelude in {
-- : A -> AP ; -- : A -> AP ;
PositA a = emptyAP ** { PositA a = emptyAP ** {
s = \\n,c => s = \\n,c =>
let adj : Noun = (a ** {s = a.s ! Posit; g = NonHuman}) in let adj : Noun = (a ** {s = a.s ! Posit}) in
caseFromStem glue adj c n ; caseFromStem glue adj c n ;
} ; } ;
@@ -35,7 +35,7 @@ concrete AdjectiveHun of Adjective = CatHun ** open ResHun, Prelude in {
-- : A -> AP ; -- warmer -- : A -> AP ; -- warmer
UseComparA a = emptyAP ** { UseComparA a = emptyAP ** {
s = \\n,c => s = \\n,c =>
let adj : Noun = (a ** {s = a.s ! Compar; g = NonHuman}) in let adj : Noun = (a ** {s = a.s ! Compar}) in
caseFromStem glue adj c n ; caseFromStem glue adj c n ;
} ; } ;
@@ -54,9 +54,7 @@ concrete AdjectiveHun of Adjective = CatHun ** open ResHun, Prelude in {
-- phrases, although the semantics is only clear for some adjectives. -- phrases, although the semantics is only clear for some adjectives.
-- : AP -> SC -> AP ; -- good that she is here -- : AP -> SC -> AP ; -- good that she is here
SentAP ap sc = ap ** { -- SentAP ap sc = ap ** {} ;
compl = \\n => ap.compl ! n ++ sc.s ;
} ;
-- An adjectival phrase can be modified by an *adadjective*, such as "very". -- An adjectival phrase can be modified by an *adadjective*, such as "very".

View File

@@ -3,11 +3,7 @@ concrete AdverbHun of Adverb = CatHun ** open ResHun, ParamHun, ParadigmsHun, Pr
lin lin
-- : A -> Adv ; -- : A -> Adv ;
PositAdvAdj adj = { --PositAdvAdj adj = { } ;
s = let a : Str = adj.s ! Posit ! SgNom
in a ++ BIND ++ "an" ;
isPre = False ;
} ;
-- : CAdv -> A -> NP -> Adv ; -- more warmly than John -- : CAdv -> A -> NP -> Adv ; -- more warmly than John
-- ComparAdvAdj cadv a np = { } ; -- ComparAdvAdj cadv a np = { } ;
@@ -23,18 +19,15 @@ lin
-- Adverbs can be modified by 'adadjectives', just like adjectives. -- Adverbs can be modified by 'adadjectives', just like adjectives.
--AdAdv : AdA -> Adv -> Adv ; -- very quickly --AdAdv : AdA -> Adv -> Adv ; -- very quickly
AdAdv ada adv = adv ** {s = ada.s ++ adv.s} ; -- AdAdv ada adv = adv **
-- Like adverbs, adadjectives can be produced by adjectives. -- Like adverbs, adadjectives can be produced by adjectives.
-- : A -> AdA ; -- extremely -- : A -> AdA ; -- extremely
PositAdAAdj a = {s = a.s ! Posit ! SgNom} ; -- PositAdAAdj a = { } ;
-- Subordinate clauses can function as adverbs. -- Subordinate clauses can function as adverbs.
-- : Subj -> S -> Adv ; -- : Subj -> S -> Adv ;
SubjS subj s = { -- SubjS subj s =
s = subj.s ++ s.s ;
isPre = False ;
} ;
-- Comparison adverbs also work as numeral adverbs. -- Comparison adverbs also work as numeral adverbs.

View File

@@ -2,6 +2,5 @@
concrete AllHun of AllHunAbs = concrete AllHun of AllHunAbs =
LangHun, LangHun,
IrregHun,
ExtendHun ExtendHun
** {} ; ** {} ;

View File

@@ -2,6 +2,5 @@
abstract AllHunAbs = abstract AllHunAbs =
Lang, Lang,
IrregHunAbs,
Extend Extend
** {} ; ** {} ;

View File

@@ -76,7 +76,8 @@ concrete CatHun of Cat = CommonX - [Adv] ** open ResHun, Prelude in {
-- Constructed in NumeralHun. -- Constructed in NumeralHun.
Card, ACard, Numeral = ResHun.Numeral ; Card = ResHun.Numeral ;
Numeral = ResHun.Numeral ;
Digits = {s : CardOrd => Str} ; Digits = {s : CardOrd => Str} ;
Decimal = {s : CardOrd => Str; hasDot : Bool} ; Decimal = {s : CardOrd => Str; hasDot : Bool} ;
@@ -125,8 +126,5 @@ linref
NP = linNP ; NP = linNP ;
V,VS,VQ,VA = \v -> v.s ! VPres P3 Sg ; V,VS,VQ,VA = \v -> v.s ! VPres P3 Sg ;
V2,V3,V2S,V2Q,V2A = \v -> v.s ! Indef ! VPres P3 Sg ; V2,V3,V2S,V2Q,V2A = \v -> v.s ! Indef ! VPres P3 Sg ;
VP = \vp -> vp.obj ++ vp.adv ++ vp.s ! VInf ;
lindef
VP = \s -> {s = \\_=>s; obj,adv=[]; sc=SCNom; c2=Acc} ;
} }

View File

@@ -52,37 +52,22 @@ lin
in np ** {s = linTable} ; in np ** {s = linTable} ;
-- Relative sentences -- Relative sentences
lincat lincat
[RS] = {s1,s2 : Gender => Number => Case => Str} ; [RS] = {s1,s2 : Number => Case => Str} ;
lin lin
BaseRS = twoTable3 Gender Number Case ; BaseRS = twoTable2 Number Case ;
ConsRS = consrTable3 Gender Number Case comma ; ConsRS = consrTable2 Number Case comma ;
ConjRS = conjunctDistrTable3 Gender Number Case ; ConjRS = conjunctDistrTable2 Number Case ;
lincat
[CN] = {
s1,s2 : NumCaseStem => Str ;
h : Harm ;
g : Gender
} ;
lin
BaseCN x y = twoTable NumCaseStem x y ** {
h = y.h ;
g = y.g
} ;
ConsCN x xs = consrTable NumCaseStem comma x xs ** {
h = xs.h ;
g = xs.g
} ;
ConjCN co cs = conjunctDistrTable NumCaseStem co cs ** {
compl = \\_,_ => [] ;
postmod = [] ;
h = cs.h ;
g = cs.g
} ;
{- {-
lincat
[CN] = { } ;
lin
BaseCN = {} ;
ConsCN = {} ;
ConjCN co cs = conjunctDistrTable … co cs ** cs ;
lincat lincat
[DAP] = [DAP] =

View File

@@ -1,178 +1,11 @@
concrete ConstructionHun of Construction = CatHun ** open concrete ConstructionHun of Construction = CatHun ** open ParadigmsHun in {
ParadigmsHun, ResHun, NounHun, VerbHun, AdjectiveHun, Prelude in {
lincat lincat
Timeunit = N ; Timeunit = N ;
Hour = {s : Str} ;
Weekday = N ; Weekday = N ;
Monthday = NP ; Monthday = NP ;
Month = N ; Month = N ;
Year = NP ; Year = NP ;
Language = N ;
lin
hungry_VP = UseComp (CompAP (PositA (mkA "éhes"))) ;
thirsty_VP = UseComp (CompAP (PositA (mkA "szomjas"))) ;
tired_VP = UseComp (CompAP (PositA (mkA "fáradt"))) ;
scared_VP = UseComp (CompAP (PositA (mkA "ijedt"))) ;
ill_VP = UseComp (CompAP (PositA (mkA "beteg"))) ;
ready_VP = UseComp (CompAP (PositA (mkA "kész"))) ;
has_age_VP card = useV (copula ** {
s = \\vf => case vf of {
VPres P3 _ => [] ;
_ => copula.s ! vf
}
}) ** {
adv = card.s ! Indep ++ "éves"
} ;
n_units_AP card cn a =
let ap : AP = PositA a in ap ** {
s = \\n,c => card.s ! Attrib ++ cn.s ! SgNom ++ ap.s ! n ! c
} ;
n_units_of_NP card cn np = lin NP (indeclNP
(card.s ! Attrib ++ cn.s ! SgNom ++ np.s ! NoPoss ! Nom ++ np.postmod)) ;
n_unit_CN card unit cn = cn ** {
s = \\ncs => card.s ! Attrib ++ unit.s ! SgNom ++ cn.s ! ncs
} ;
bottle_of_CN np = (UseN (mkN "palack")) ** {
compl = \\_,_ => np.s ! NoPoss ! Nom ++ np.postmod
} ;
cup_of_CN np = (UseN (mkN "csésze")) ** {
compl = \\_,_ => np.s ! NoPoss ! Nom ++ np.postmod
} ;
glass_of_CN np = (UseN (mkN "pohár")) ** {
compl = \\_,_ => np.s ! NoPoss ! Nom ++ np.postmod
} ;
timeunitAdv n time = mkAdv (n.s ! Attrib ++ time.s ! SgNom) ;
timeunitRange l u time =
mkAdv (l.s ! Attrib ++ BIND ++ "-" ++ BIND ++ u.s ! Attrib ++ time.s ! SgNom) ;
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 = mkAdv (h.s ++ "órakor") ;
timeHourMinute h m = mkAdv (h.s ++ BIND ++ ":" ++ BIND ++ m.s ! Attrib) ;
weekdayPunctualAdv w = mkAdv (caseFromStem glue w Sup Sg) ;
weekdayHabitualAdv w = mkAdv (caseFromStem glue w Sup Sg) ;
weekdayNextAdv w = mkAdv ("jövő" ++ caseFromStem glue w Sup Sg) ;
weekdayLastAdv w = mkAdv ("múlt" ++ caseFromStem glue w Sup Sg) ;
monthAdv m = mkAdv (caseFromStem glue m Ine Sg) ;
yearAdv y = mkAdv (y.s ! NoPoss ! Nom ++ BIND ++ "-ban") ;
dayMonthAdv d m =
mkAdv (d.s ! NoPoss ! Nom ++ BIND ++ "." ++ m.s ! SgNom) ;
monthYearAdv m y =
mkAdv (m.s ! SgNom ++ y.s ! NoPoss ! Nom ++ BIND ++ "-ban") ;
dayMonthYearAdv d m y =
mkAdv (d.s ! NoPoss ! Nom ++ BIND ++ "." ++ m.s ! SgNom ++ y.s ! NoPoss ! Nom ++ BIND ++ "-ban") ;
intYear i = lin NP (indeclNP i.s) ;
intMonthday i = lin NP (indeclNP i.s) ;
InLanguage l = mkAdv (l.s ! SgNom ++ "nyelven") ;
weekdayN w = w ;
monthN m = m ;
weekdayPN w = lin PN (MassNP (UseN w)) ;
monthPN m = lin PN (MassNP (UseN m)) ;
languageCN l = UseN l ;
languageNP l = lin NP (MassNP (UseN l)) ;
second_Timeunit = mkN "másodperc" ;
minute_Timeunit = mkN "perc" ;
hour_Timeunit = mkN "óra" ;
day_Timeunit = mkN "nap" ;
week_Timeunit = mkN "hét" ;
month_Timeunit = mkN "hónap" ;
year_Timeunit = mkN "év" ;
monday_Weekday = mkN "hétfő" ;
tuesday_Weekday = mkN "kedd" ;
wednesday_Weekday = mkN "szerda" ;
thursday_Weekday = mkN "csütörtök" ;
friday_Weekday = mkN "péntek" ;
saturday_Weekday = mkN "szombat" ;
sunday_Weekday = mkN "vasárnap" ;
january_Month = mkN "január" ;
february_Month = mkN "február" ;
march_Month = mkN "március" ;
april_Month = mkN "április" ;
may_Month = mkN "május" ;
june_Month = mkN "június" ;
july_Month = mkN "július" ;
august_Month = mkN "augusztus" ;
september_Month = mkN "szeptember" ;
october_Month = mkN "október" ;
november_Month = mkN "november" ;
december_Month = mkN "december" ;
afrikaans_Language = mkN "afrikaans" ;
amharic_Language = mkN "amhara" ;
arabic_Language = mkN "arab" ;
bulgarian_Language = mkN "bolgár" ;
catalan_Language = mkN "katalán" ;
chinese_Language = mkN "kínai" ;
danish_Language = mkN "dán" ;
dutch_Language = mkN "holland" ;
english_Language = mkN "angol" ;
estonian_Language = mkN "észt" ;
finnish_Language = mkN "finn" ;
french_Language = mkN "francia" ;
german_Language = mkN "német" ;
greek_Language = mkN "görög" ;
hebrew_Language = mkN "héber" ;
hindi_Language = mkN "hindi" ;
japanese_Language = mkN "japán" ;
italian_Language = mkN "olasz" ;
latin_Language = mkN "latin" ;
latvian_Language = mkN "lett" ;
maltese_Language = mkN "máltai" ;
nepali_Language = mkN "nepáli" ;
norwegian_Language = mkN "norvég" ;
persian_Language = mkN "perzsa" ;
polish_Language = mkN "lengyel" ;
punjabi_Language = mkN "pandzsábi" ;
romanian_Language = mkN "román" ;
russian_Language = mkN "orosz" ;
sindhi_Language = mkN "szindhi" ;
spanish_Language = mkN "spanyol" ;
swahili_Language = mkN "szuahéli" ;
swedish_Language = mkN "svéd" ;
thai_Language = mkN "thai" ;
turkish_Language = mkN "török" ;
urdu_Language = mkN "urdu" ;
{- {-
lin lin

View File

@@ -1,206 +0,0 @@
--# -path=.:../abstract:../common:../prelude
concrete DocumentationHun of Documentation = CatHun ** open
ResHun, Prelude, HTML in {
lincat
Inflection = {t : Str; s1,s2 : Str} ;
Definition = {s : Str} ;
Document = {s : Str} ;
Tag = {s : Str} ;
lin
InflectionN = \noun -> nounInflection "n" "Főnév" noun ;
InflectionN2 = \noun -> nounInflection "n2" "Kétargumentumú főnév" noun ;
InflectionN3 = \noun -> nounInflection "n3" "Háromargumentumú főnév" noun ;
InflectionPN = \pn -> nameInflection "pn" "Tulajdonnév" pn ;
InflectionLN = \ln -> nameInflection "ln" "Helynév" ln ;
InflectionGN = \gn -> nameInflection "gn" "Keresztnév" gn ;
InflectionSN = \sn -> nameInflection "sn" "Vezetéknév" sn ;
InflectionA = \adj -> adjectiveInflection "a" "Melléknév" adj ;
InflectionA2 = \adj -> adjectiveInflection "a2" "Vonzatos melléknév" adj ;
InflectionV = \v -> verbInflection "v" "Ige" v ;
InflectionVS = \v -> verbInflection "vs" "Mondatvonzatú ige" v ;
InflectionVQ = \v -> verbInflection "vq" "Kérdő mondatvonzatú ige" v ;
InflectionVA = \v -> verbInflection "va" "Melléknévi vonzatú ige" v ;
InflectionV2 = \v -> verb2Inflection "v2" "Tárgyas ige" v ;
InflectionVV = \v -> verb2Inflection "vv" "Igenévi vonzatú ige" v ;
InflectionV3 = \v -> verb2Inflection "v3" "Háromargumentumú ige" v ;
InflectionV2V = \v -> verb2Inflection "v2v" "Tárgyas és igenévi vonzatú ige" v ;
InflectionV2S = \v -> verb2Inflection "v2s" "Tárgyas és mondatvonzatú ige" v ;
InflectionV2Q = \v -> verb2Inflection "v2q" "Tárgyas és kérdő mondatvonzatú ige" v ;
InflectionV2A = \v -> verb2Inflection "v2a" "Tárgyas és melléknévi vonzatú ige" v ;
InflectionAdv = \adv -> adverbInflection "adv" "Határozószó" adv.s ;
InflectionAdV = \adv -> adverbInflection "adv" "Igei határozószó" adv.s ;
InflectionAdA = \adv -> adverbInflection "adv" "Melléknévi határozószó" adv.s ;
InflectionAdN = \adv -> adverbInflection "adv" "Főnévi határozószó" adv.s ;
InflectionPrep = \prep -> {
t = "prep" ;
s1 = heading1 "Névutó" ;
s2 = frameTable (
tr (th "előtag" ++ td prep.pr) ++
tr (th "eset" ++ td (caseName prep.c)) ++
tr (th "névutó" ++ td prep.s))
} ;
lin
NoDefinition t = {s = t.s} ;
MkDefinition t d = {s = "<p><b>Meghatározás:</b>" ++ t.s ++ d.s ++ "</p>"} ;
MkDefinitionEx t d e =
{s = "<p><b>Meghatározás:</b>" ++ t.s ++ d.s ++
"</p><p><b>Példa:</b>" ++ e.s ++ "</p>"} ;
lin
MkDocument d i e = {s = i.s1 ++ d.s ++ i.s2 ++ paragraph e.s} ;
MkTag i = {s = i.t} ;
oper
nounInflection : Str -> Str -> Noun -> {t : Str; s1,s2 : Str} =
\tag,title,noun -> {
t = tag ;
s1 = heading1 title ;
s2 = caseTable2 (\n,c -> nounCase noun n c) ++
heading2 "Birtokos alakok" ++
possTable noun
} ;
nameInflection : Str -> Str -> NounPhrase -> {t : Str; s1,s2 : Str} =
\tag,title,np -> {
t = tag ;
s1 = heading1 title ;
s2 = frameTable (
tr (th "alanyeset" ++ td (np.s ! NoPoss ! Nom)) ++
tr (th "tárgyeset" ++ td (np.s ! NoPoss ! Acc)) ++
tr (th "részes eset" ++ td (np.s ! NoPoss ! Dat)) ++
tr (th "inessivus" ++ td (np.s ! NoPoss ! Ine)) ++
tr (th "elativus" ++ td (np.s ! NoPoss ! Ela)) ++
tr (th "allativus" ++ td (np.s ! NoPoss ! All)) ++
tr (th "adessivus" ++ td (np.s ! NoPoss ! Ade)) ++
tr (th "ablativus" ++ td (np.s ! NoPoss ! Abl)) ++
tr (th "superessivus" ++ td (np.s ! NoPoss ! Sup)) ++
tr (th "instrumentalis" ++ td (np.s ! NoPoss ! Ins)) ++
tr (th "translativus" ++ td (np.s ! NoPoss ! Tra)))
} ;
adjectiveInflection : Str -> Str -> Adjective -> {t : Str; s1,s2 : Str} =
\tag,title,adj -> {
t = tag ;
s1 = heading1 title ;
s2 = heading2 "Alapfok" ++
caseTable2 (\n,c -> adjCase adj Posit n c) ++
heading2 "Középfok" ++
caseTable2 (\n,c -> adjCase adj Compar n c) ++
heading2 "Felsőfok" ++
caseTable2 (\n,c -> adjCase adj Superl n c)
} ;
adverbInflection : Str -> Str -> Str -> {t : Str; s1,s2 : Str} =
\tag,title,s -> {
t = tag ;
s1 = heading1 title ;
s2 = paragraph s
} ;
verbInflection : Str -> Str -> Verb -> {t : Str; s1,s2 : Str} =
\tag,title,v -> {
t = tag ;
s1 = heading1 title ;
s2 = verbTable (\vf -> v.s ! vf)
} ;
verb2Inflection : Str -> Str -> Verb2 -> {t : Str; s1,s2 : Str} =
\tag,title,v -> {
t = tag ;
s1 = heading1 title ;
s2 = paragraph ("vonzat esete: " ++ caseName v.c2) ++
heading2 "Határozatlan ragozás" ++
verbTable (\vf -> v.s ! Indef ! vf) ++
heading2 "Határozott ragozás" ++
verbTable (\vf -> v.s ! Def ! vf)
} ;
caseTable2 : (Number -> Case -> Str) -> Str =
\forms -> frameTable (
tr (th "" ++ th "egyes szám" ++ th "többes szám") ++
tr (th "alanyeset" ++ td (forms Sg Nom) ++ td (forms Pl Nom)) ++
tr (th "tárgyeset" ++ td (forms Sg Acc) ++ td (forms Pl Acc)) ++
tr (th "részes eset" ++ td (forms Sg Dat) ++ td (forms Pl Dat)) ++
tr (th "inessivus" ++ td (forms Sg Ine) ++ td (forms Pl Ine)) ++
tr (th "elativus" ++ td (forms Sg Ela) ++ td (forms Pl Ela)) ++
tr (th "allativus" ++ td (forms Sg All) ++ td (forms Pl All)) ++
tr (th "adessivus" ++ td (forms Sg Ade) ++ td (forms Pl Ade)) ++
tr (th "ablativus" ++ td (forms Sg Abl) ++ td (forms Pl Abl)) ++
tr (th "superessivus" ++ td (forms Sg Sup) ++ td (forms Pl Sup)) ++
tr (th "instrumentalis" ++ td (forms Sg Ins) ++ td (forms Pl Ins)) ++
tr (th "translativus" ++ td (forms Sg Tra) ++ td (forms Pl Tra)))
;
possTable : Noun -> Str =
\noun -> frameTable (
tr (th "" ++ th "birtok egyes szám" ++ th "birtok többes szám") ++
tr (th "1. személy egyes szám" ++ td (possForm noun Sg P1 Sg) ++ td (possForm noun Pl P1 Sg)) ++
tr (th "2. személy egyes szám" ++ td (possForm noun Sg P2 Sg) ++ td (possForm noun Pl P2 Sg)) ++
tr (th "3. személy egyes szám" ++ td (possForm noun Sg P3 Sg) ++ td (possForm noun Pl P3 Sg)) ++
tr (th "1. személy többes szám" ++ td (possForm noun Sg P1 Pl) ++ td (possForm noun Pl P1 Pl)) ++
tr (th "2. személy többes szám" ++ td (possForm noun Sg P2 Pl) ++ td (possForm noun Pl P2 Pl)) ++
tr (th "3. személy többes szám" ++ td (possForm noun Sg P3 Pl) ++ td (possForm noun Pl P3 Pl)))
;
verbTable : (VForm -> Str) -> Str =
\forms ->
heading2 "Főnévi igenév" ++
paragraph (forms VInf) ++
heading2 "Jelen idő" ++
personNumberTable (\p,n -> forms (VPres p n)) ++
heading2 "Múlt idő" ++
personNumberTable (\p,n -> forms (VPast p n)) ;
personNumberTable : (Person -> Number -> Str) -> Str =
\forms -> frameTable (
tr (th "" ++ th "egyes szám" ++ th "többes szám") ++
tr (th "1. személy" ++ td (forms P1 Sg) ++ td (forms P1 Pl)) ++
tr (th "2. személy" ++ td (forms P2 Sg) ++ td (forms P2 Pl)) ++
tr (th "3. személy" ++ td (forms P3 Sg) ++ td (forms P3 Pl)))
;
nounCase : Noun -> Number -> Case -> Str =
\noun,n,c -> caseFromStem glue noun c n ;
adjCase : Adjective -> Degree -> Number -> Case -> Str =
\adj,d,n,c -> caseFromStem glue {s = adj.s ! d ; h = adj.h ; g = NonHuman} c n ;
possForm : Noun -> Number -> Person -> Number -> Str =
\noun,possd,person,possr ->
let det : Determiner = {
s = \\_ => [] ;
sp = \\_ => [] ;
n = possd ;
dt = DetPoss (agr2pstem <person,possr>) ;
poss = possForms ! <person,possr> ;
caseagr = False
} ;
cn : CNoun = noun ** {compl = \\_,_ => [] ; postmod = []} ;
in caseFromPossStem cn det Nom ;
caseName : Case -> Str = \c ->
case c of {
Nom => "alanyeset" ;
Acc => "tárgyeset" ;
Dat => "részes eset" ;
Ine => "inessivus" ;
Ela => "elativus" ;
All => "allativus" ;
Ade => "adessivus" ;
Abl => "ablativus" ;
Sup => "superessivus" ;
Ins => "instrumentalis" ;
Tra => "translativus" ;
_ => case2str c
} ;
}

View File

@@ -3,362 +3,9 @@
concrete ExtendHun of Extend = CatHun concrete ExtendHun of Extend = CatHun
-- ** ExtendFunctor - [] -- ** ExtendFunctor - []
-- with (Grammar=GrammarHun) -- with (Grammar=GrammarHun)
** open Prelude, ResHun, NounHun, VerbHun, AdjectiveHun in { ** open Prelude, ResHun, NounHun in {
lincat
VPS = {s : Person => Number => Str} ;
[VPS] = {s1,s2 : Person => Number => Str} ;
VPI = SS ;
[VPI] = {s1,s2 : Str} ;
VPS2 = {s : ObjDef => Person => Number => Str ; c2 : Case} ;
[VPS2] = {s1,s2 : ObjDef => Person => Number => Str ; c2 : Case} ;
VPI2 = {s : ObjDef => Str ; c2 : Case} ;
[VPI2] = {s1,s2 : ObjDef => Str ; c2 : Case} ;
[Comp] = {s1,s2 : VForm => Str} ;
[Imp] = {s1,s2 : Number => Polarity => Str} ;
RNP = NounPhrase ;
RNPList = {s1,s2 : Possessor => Case => Str ; agr : Person*Number ; g : Gender ; postmod : Str} ;
lin lin
TPastSimple = {s = []} ** {t = Past} ; --# notpresent TPastSimple = {s = []} ** {t = Past} ; --# notpresent
CompoundN n1 n2 =
n2 ** {s = \\nc => n1.s ! SgNom ++ BIND ++ n2.s ! nc} ;
GenModNP num np cn =
let det : Determiner = DetQuant DefArt num ;
pron : Pronoun = pronTable ! np.agr ;
in emptyNP ** cn ** det ** {
s = \\_,c =>
np.s ! NoPoss ! Nom
++ np.postmod
++ caseFromPossStem cn (DetQuant (PossPron pron) num) c
++ cn.compl ! det.n ! c ;
agr = <P3,det.n> ;
objdef = Def ;
} ;
EmptyRelSlash cls = relSlash {s = \\_,_,_ => []} cls ;
UseDAP = DetNP ;
UseDAPMasc,
UseDAPFem = \dap -> DetNP dap ** {g = Human} ;
MkVPS t pol vp = {
s = \\p,n =>
t.s ++ pol.s ++ if_then_Pol pol.p [] "nem" ++
case t.t of {
Past => vp.s ! VPast p n ;
Fut => futureAux Indef p n ++ vp.s ! VInf ;
_ => vp.s ! VPres p n
} ++ vp.obj ++ vp.adv
} ;
BaseVPS x y = {
s1 = x.s ;
s2 = y.s
} ;
ConsVPS x xs = {
s1 = \\p,n => x.s ! p ! n ++ bindComma ++ xs.s1 ! p ! n ;
s2 = xs.s2
} ;
ConjVPS conj xs = {
s = \\p,n => xs.s1 ! p ! n ++ conj.s2 ++ xs.s2 ! p ! n
} ;
PredVPS np vps = {
s = linNP np ++ vps.s ! np.agr.p1 ! np.agr.p2
} ;
MkVPI vp = {s = infVP vp} ;
BaseVPI x y = {
s1 = x.s ;
s2 = y.s
} ;
ConsVPI x xs = {
s1 = x.s ++ bindComma ++ xs.s1 ;
s2 = xs.s2
} ;
ConjVPI conj xs = {
s = xs.s1 ++ conj.s2 ++ xs.s2
} ;
ComplVPIVV vv vpi =
useV (vv ** {s = vv.s ! Indef}) ** {
adv = vpi.s
} ;
MkVPS2 t pol vps = {
s = \\od,p,n =>
t.s ++ pol.s ++ if_then_Pol pol.p [] "nem" ++
case t.t of {
Past => vps.s ! od ! VPast p n ;
Fut => futureAux od p n ++ vps.s ! od ! VInf ;
_ => vps.s ! od ! VPres p n
} ++ vps.adv ;
c2 = vps.c2
} ;
ComplVPS2 vps np = {
s = \\p,n => vps.s ! np.objdef ! p ! n ++ np.s ! NoPoss ! vps.c2 ++ np.postmod
} ;
ReflVPS2 vps rnp = {
s = \\p,n => vps.s ! rnp.objdef ! p ! n ++ rnp.s ! NoPoss ! vps.c2 ++ rnp.postmod
} ;
BaseVPS2 x y = {
s1 = x.s ;
s2 = y.s ;
c2 = y.c2
} ;
ConsVPS2 x xs = {
s1 = \\od,p,n => x.s ! od ! p ! n ++ bindComma ++ xs.s1 ! od ! p ! n ;
s2 = xs.s2 ;
c2 = xs.c2
} ;
ConjVPS2 conj xs = {
s = \\od,p,n => xs.s1 ! od ! p ! n ++ conj.s2 ++ xs.s2 ! od ! p ! n ;
c2 = xs.c2
} ;
MkVPI2 vps = {
s = \\_ => infVPSlash vps ;
c2 = vps.c2
} ;
ComplVPI2 vpi np = {
s = vpi.s ! np.objdef ++ np.s ! NoPoss ! vpi.c2 ++ np.postmod
} ;
BaseVPI2 x y = {
s1 = x.s ;
s2 = y.s ;
c2 = y.c2
} ;
ConsVPI2 x xs = {
s1 = \\od => x.s ! od ++ bindComma ++ xs.s1 ! od ;
s2 = xs.s2 ;
c2 = xs.c2
} ;
ConjVPI2 conj xs = {
s = \\od => xs.s1 ! od ++ conj.s2 ++ xs.s2 ! od ;
c2 = xs.c2
} ;
BaseComp x y = {
s1 = x.s ;
s2 = y.s
} ;
ConsComp x xs = {
s1 = \\vf => x.s ! vf ++ bindComma ++ xs.s1 ! vf ;
s2 = xs.s2
} ;
ConjComp conj xs = UseCopula ** {
s = \\vf => xs.s1 ! vf ++ conj.s2 ++ xs.s2 ! vf
} ;
BaseImp x y = {
s1 = x.s ;
s2 = y.s
} ;
ConsImp x xs = {
s1 = \\n,p => x.s ! n ! p ++ bindComma ++ xs.s1 ! n ! p ;
s2 = xs.s2
} ;
ConjImp conj xs = {
s = \\n,p => xs.s1 ! n ! p ++ conj.s2 ++ xs.s2 ! n ! p
} ;
PresPartAP vp = emptyAP ** {
s = \\_,_ => vp.obj ++ vp.adv ++ vp.s ! VPresPart
} ;
EmbedPresPart vp = {s = infVP vp} ;
PastPartAP vps = emptyAP ** {
s = \\_,_ => vps.adv ++ vps.s ! Indef ! VAdvPart
} ;
PastPartAgentAP vps np = emptyAP ** {
s = \\_,_ =>
vps.adv ++ vps.s ! Indef ! VAdvPart
++ applyAdp (caseAdp Nom "által") np
} ;
PassVPSlash vps = passiveVP vps [] ;
PassAgentVPSlash vps np =
passiveVP vps (applyAdp (caseAdp Nom "által") np) ;
ProgrVPSlash vps = vps ;
ComplBareVS vs s = useV vs ** {
adv = s.s
} ;
ReflRNP vps rnp = insertObj vps rnp ;
ReflPron = indeclNP "magát" ** {objdef = Def ; g = Human} ;
ReflPoss num cn = DetCN (DetQuant DefArt num) cn ;
PredetRNP predet rnp = rnp ** {
s = \\p,c => predet.s ++ rnp.s ! p ! c
} ;
AdvRNP np prep rnp = np ** {
s = \\p,c => np.s ! p ! c ++ applyAdp prep rnp ;
postmod = []
} ;
AdvRVP vp prep rnp = insertAdv vp {
s = applyAdp prep rnp
} ;
AdvRAP ap prep rnp = ap ** {
compl = \\n => ap.compl ! n ++ applyAdp prep rnp
} ;
ReflA2RNP a2 rnp =
let ap : AP = ComplA2 a2 rnp in ap ;
PossPronRNP pron num cn rnp =
let det : Determiner = DetQuant (PossPron pron) num
in emptyNP ** cn ** det ** {
s = \\_,c =>
rnp.s ! NoPoss ! Nom
++ caseFromPossStem cn det c
++ cn.compl ! det.n ! c ;
agr = <P3,det.n> ;
objdef = Def ;
g = NonHuman
} ;
Base_rr_RNP x y = {
s1 = x.s ;
s2 = y.s ;
agr = y.agr ;
g = y.g ;
postmod = []
} ;
Base_nr_RNP x y = {
s1 = x.s ;
s2 = y.s ;
agr = y.agr ;
g = y.g ;
postmod = []
} ;
Base_rn_RNP x y = {
s1 = x.s ;
s2 = y.s ;
agr = y.agr ;
g = y.g ;
postmod = []
} ;
ConjRNP conj xs = emptyNP ** {
s = \\p,c => xs.s1 ! p ! c ++ conj.s2 ++ xs.s2 ! p ! c ;
agr = <P3,conj.n> ;
objdef = Def ;
g = xs.g ;
postmod = [] ;
empty = []
} ;
GerundCN vp =
let gn : Str = infVP vp
in {
s = \\_ => gn ;
h = H_a ;
g = NonHuman ;
compl = \\_,_ => [] ;
postmod = []
} ;
GerundNP vp = MassNP (GerundCN vp) ;
GerundAdv vp = {
s = infVP vp ;
isPre = False
} ;
CompoundAP n a = emptyAP ** {
s = \\_,_ => n.s ! SgNom ++ a.s ! Posit ! SgNom
} ;
WithoutVP vp = {
s = infVP vp ++ "nélkül" ;
isPre = False
} ;
ByVP vp = {
s = infVP vp ++ "által" ;
isPre = False
} ;
InOrderToVP vp = {
s = infVP vp ++ "céljából" ;
isPre = False
} ;
ApposNP np1 np2 = np1 ** {
s = \\p,c => np1.s ! p ! c ++ bindComma ++ np2.s ! NoPoss ! Nom ;
postmod = []
} ;
AdAdV ada adv = {
s = ada.s ++ adv.s
} ;
UttAdV adv = {
s = adv.s
} ;
PositAdVAdj adj = {
s = adj.s ! Posit ! SgNom
} ;
UttVPShort vp = {
s = infVP vp
} ;
ComplSlashPartLast vps np = insertObj vps np ;
iFem_Pron = pronTable ! <P1,Sg> ** {g = Human} ;
theyFem_Pron = pronTable ! <P3,Pl> ** {g = Human} ;
theyNeutr_Pron = pronTable ! <P3,Pl> ;
weFem_Pron = pronTable ! <P1,Pl> ** {g = Human} ;
youFem_Pron = pronTable ! <P2,Sg> ** {g = Human} ;
youPlFem_Pron = pronTable ! <P2,Pl> ** {g = Human} ;
youPolFem_Pron = pronTable ! <P2,Sg> ** {g = Human} ;
youPolPlFem_Pron = pronTable ! <P2,Pl> ** {g = Human} ;
youPolPl_Pron = pronTable ! <P2,Pl> ** {g = Human} ;
oper
passiveVP : VPSlash -> Str -> VP = \vps,agent ->
lin VP (useV (copula ** {
s = \\vf => case vf of {
VPres P3 _ => [] ;
_ => copula.s ! vf
}
}) ** {
adv = vps.adv ++ vps.s ! Indef ! VAdvPart ++ agent
}) ;
} ; } ;

View File

@@ -12,8 +12,7 @@ concrete GrammarHun of Grammar =
TextX - [Adv], TextX - [Adv],
StructuralHun, StructuralHun,
IdiomHun, IdiomHun,
TenseX - [Adv], TenseX - [Adv]
NamesHun
** { ** {
flags startcat = Phr ; unlexer = text ; lexer = text ; flags startcat = Phr ; unlexer = text ; lexer = text ;

View File

@@ -44,51 +44,4 @@ concrete IdiomHun of Idiom = CatHun ** open Prelude, ResHun, VerbHun, NounHun, S
SelfNP : NP -> NP ; -- the president himself (is at home) SelfNP : NP -> NP ; -- the president himself (is at home)
-} -}
lin
ImpersCl vp = predVP emptyNP vp ;
ExistNP np = existNP np [] ;
ExistNPAdv np adv = existNP np adv.s ;
ExistIP ip = {
s = \\t,a,p =>
ip.s ! NoPoss ! Nom
++ if_then_Pol p [] "nem"
++ copula.s ! case t of {
Past => VPast P3 ip.agr.p2 ;
_ => VPres P3 ip.agr.p2
}
} ;
ExistIPAdv ip adv = {
s = \\t,a,p =>
ip.s ! NoPoss ! Nom
++ adv.s
++ if_then_Pol p [] "nem"
++ copula.s ! case t of {
Past => VPast P3 ip.agr.p2 ;
_ => VPres P3 ip.agr.p2
}
} ;
ProgrVP vp = vp ;
ImpPl1 vp = {
s = "próbáljunk" ++ infVP vp
} ;
oper
existNP : NounPhrase -> Str -> ResHun.ClSlash = \np,adv -> {
s = \\t,_,p =>
if_then_Pol p [] "nem"
++ copula.s ! case t of {
Past => VPast P3 np.agr.p2 ;
_ => VPres P3 np.agr.p2
}
++ linNP np
++ adv ;
c2 = Acc
} ;
} }

View File

@@ -1,46 +0,0 @@
--# -path=.:prelude:../abstract:../common
concrete IrregHun of IrregHunAbs = CatHun ** open ParadigmsHun in {
lin
áll_V = mkV "állok" "állsz" "áll" "állunk" "álltok" "állnak"
"álltam" "álltál" "állt" "álltunk" "álltatok" "álltak"
"állni" "álló" "állva" ;
átugrik_V = mkV "átugrom" "átugrasz" "átugrik" "átugrunk" "átugrotok" "átugranak"
"átugrottam" "átugrottál" "átugrott" "átugrottunk" "átugrottatok" "átugrottak"
"átugrani" "átugrikó" "átugrikva" ;
bovelkedik_V = mkV "bővelkedem" "bővelkedsz" "bővelkedik" "bővelkedünk" "bővelkedtek" "bővelkednek"
"bővelkedtem" "bővelkedtél" "bővelkedett" "bővelkedtünk" "bővelkedtetek" "bővelkedtek"
"bővelkedni" "bővelkedő" "bővelkedve" ;
csatlakozik_V = mkV "csatlakozom" "csatlakozol" "csatlakozik" "csatlakozunk" "csatlakoztok" "csatlakoznak"
"csatlakoztam" "csatlakoztál" "csatlakozott" "csatlakoztunk" "csatlakoztatok" "csatlakoztak"
"csatlakozni" "csatlakozó" "csatlakozva" ;
csökken_V = mkV "csökkenek" "csökkensz" "csökken" "csökkenünk" "csökkentek" "csökkennek"
"csökkentem" "csökkentél" "csökkent" "csökkentünk" "csökkentetek" "csökkentek"
"csökkenni" "csökkenő" "csökkenve" ;
dolgozik_V = mkV "dolgozom" "dolgozol" "dolgozik" "dolgozunk" "dolgoztok" "dolgoznak"
"dolgoztam" "dolgoztál" "dolgozott" "dolgoztunk" "dolgoztatok" "dolgoztak"
"dolgozni" "dolgozó" "dolgozva" ;
elvet_V = mkV "elvetek" "elvetsz" "elvet" "elvetünk" "elvettek" "elvetnek"
"elvetettem" "elvetettél" "elvetett" "elvetettünk" "elvetettetek" "elvetettek"
"elvetni" "elvető" "elvetve" ;
eszik_V = mkV "eszem" "eszel" "eszik" "eszünk" "esztek" "esznek"
"ettem" "ettél" "evett" "ettünk" "ettetek" "ettek"
"enni" "evő" "éve" ;
fut_V = mkV "futok" "futsz" "fut" "futunk" "futtok" "futnak"
"futottam" "futottál" "futott" "futottunk" "futottatok" "futottak"
"futni" "futó" "futva" ;
jár_V = mkV "járok" "jársz" "jár" "járunk" "jártok" "járnak"
"jártam" "jártál" "járt" "jártunk" "jártatok" "jártak"
"járni" "járó" "járva" ;
küld_V = mkV "küldök" "küldesz" "küld" "küldünk" "küldötök" "küldenek"
"küldtem" "küldtél" "küldött" "küldtünk" "küldtetek" "küldtek"
"küldeni" "küldő" "küldve" ;
meglátogat_V = mkV "meglátogatok" "meglátogatsz" "meglátogat" "meglátogatunk" "meglátogattok" "meglátogatnak"
"meglátogattam" "meglátogattál" "meglátogatott" "meglátogattunk" "meglátogattatok" "meglátogattak"
"meglátogatni" "meglátogató" "meglátogatva" ;
tud_V = mkV "tudok" "tudsz" "tud" "tudunk" "tudtok" "tudnak"
"tudtam" "tudtál" "tudott" "tudtunk" "tudtatok" "tudtak"
"tudni" "tudó" "tudva" ;
úszik_V = mkV "úszom" "úszol" "úszik" "úszunk" "úsztok" "úsznak"
"úsztam" "úsztál" "úszott" "úsztunk" "úsztatok" "úsztak"
"úszni" "úszó" "úszva" ;
}

View File

@@ -1,17 +0,0 @@
abstract IrregHunAbs = Cat ** {
fun
áll_V : V ;
átugrik_V : V ;
bovelkedik_V : V ;
csatlakozik_V : V ;
csökken_V : V ;
dolgozik_V : V ;
elvet_V : V ;
eszik_V : V ;
fut_V : V ;
jár_V : V ;
küld_V : V ;
meglátogat_V : V ;
tud_V : V ;
úszik_V : V ;
}

View File

@@ -1,6 +1,4 @@
concrete LangHun of Lang = concrete LangHun of Lang =
GrammarHun, GrammarHun,
LexiconHun, LexiconHun,
ConstructionHun, ConstructionHun ;
DocumentationHun --# notpresent
;

View File

@@ -1,5 +1,5 @@
concrete LexiconHun of Lexicon = CatHun ** concrete LexiconHun of Lexicon = CatHun **
open ParadigmsHun, ParamHun, IrregHun, Prelude in { open ParadigmsHun, ParamHun, Prelude in {
---- ----
-- A -- A
@@ -19,7 +19,7 @@ lin art_N = mkN "művészet" "művészetet" ;
---- ----
-- B -- B
lin baby_N = humanN (mkN "bébi" "bébit") ; lin baby_N = mkN "bébi" "bébit" ;
-- lin back_N = mkN "" ; -- lin back_N = mkN "" ;
lin bad_A = mkA "rossz" ; lin bad_A = mkA "rossz" ;
lin bank_N = mkN "bank" "bankot" ; lin bank_N = mkN "bank" "bankot" ;
@@ -65,7 +65,7 @@ lin cat_N = mkN "macska" "macskát";
lin ceiling_N = roof_N ; lin ceiling_N = roof_N ;
lin chair_N = mkN "szék" "széket"; lin chair_N = mkN "szék" "széket";
lin cheese_N = mkN "sajt" "sajtot" ; lin cheese_N = mkN "sajt" "sajtot" ;
lin child_N = humanN (mkN "gyerek" "gyereket") ; lin child_N = mkN "gyerek" "gyereket" ;
lin church_N = mkN "templom" "templomot" ; lin church_N = mkN "templom" "templomot" ;
lin city_N = mkN "város" "várost" ; lin city_N = mkN "város" "várost" ;
lin clean_A = mkA "tiszta" ; lin clean_A = mkA "tiszta" ;
@@ -92,7 +92,7 @@ lin day_N = mkN "nap" "napot" ;
-- lin dirty_A = mkA "" ; -- lin dirty_A = mkA "" ;
-- lin distance_N3 = mkN "" ; -- lin distance_N3 = mkN "" ;
-- lin do_V2 = mkV2 do_V ; -- lin do_V2 = mkV2 do_V ;
lin doctor_N = humanN (mkN "orvos" "orvost"); lin doctor_N = mkN "orvos" "orvost";
lin dog_N = mkN "kutya" "kutyát"; lin dog_N = mkN "kutya" "kutyát";
lin door_N = mkN "ajtó" "ajtót" ; lin door_N = mkN "ajtó" "ajtót" ;
-- lin drink_V2 = mkV2 "" ; -- lin drink_V2 = mkV2 "" ;
@@ -105,7 +105,7 @@ lin door_N = mkN "ajtó" "ajtót" ;
lin ear_N = mkN "fül" "fület"; lin ear_N = mkN "fül" "fület";
lin earth_N = mkN "föld" "földet"; lin earth_N = mkN "föld" "földet";
lin eat_V2 = mkV2 eszik_V ; -- lin eat_V2 = mkV2 "" ;
lin egg_N = mkN "tojás" "tojást" ; lin egg_N = mkN "tojás" "tojást" ;
lin empty_A = mkA "üres" ; lin empty_A = mkA "üres" ;
lin enemy_N = mkN "ellenség" "ellenséget" ; lin enemy_N = mkN "ellenség" "ellenséget" ;
@@ -139,7 +139,7 @@ lin forest_N = mkN "erdő" "erdőt" ;
-- lin forget_V2 = mkV2 "" ; -- lin forget_V2 = mkV2 "" ;
-- lin freeze_V = mkV "" ; -- lin freeze_V = mkV "" ;
lin fridge_N = mkN "hűtő" "hűtőt" ; lin fridge_N = mkN "hűtő" "hűtőt" ;
lin friend_N = humanN (mkN "barát" "barátot") ; lin friend_N = mkN "barát" "barátot" ;
lin fruit_N = mkN "gyümölcs" "gyümölcsöt" "gyümölcsök" "gyümölcse" ; --TODO: plural PossPl2 fails "gyümölcseitek" instead of "gyümölcseitök", wovel harmony changing? lin fruit_N = mkN "gyümölcs" "gyümölcsöt" "gyümölcsök" "gyümölcse" ; --TODO: plural PossPl2 fails "gyümölcseitek" instead of "gyümölcseitök", wovel harmony changing?
lin full_A = mkA "tele" ; lin full_A = mkA "tele" ;
-- --lin fun_AV -- --lin fun_AV
@@ -148,7 +148,7 @@ lin full_A = mkA "tele" ;
-- G -- G
lin garden_N = mkN "kert" "kertet" ; lin garden_N = mkN "kert" "kertet" ;
lin girl_N = humanN (mkN "lány" "lányt"); lin girl_N = mkN "lány" "lányt";
-- lin give_V3 = mkV3 "" ; -- lin give_V3 = mkV3 "" ;
lin glove_N = mkN "kesztyű" "kesztyűt" ; lin glove_N = mkN "kesztyű" "kesztyűt" ;
-- lin go_V = mkV "" ; -- lin go_V = mkV "" ;
@@ -179,7 +179,7 @@ lin horse_N = mkN "ló" "lovat";
lin hot_A = mkA "forró" ; lin hot_A = mkA "forró" ;
lin house_N = mkN "ház" "házat" ; lin house_N = mkN "ház" "házat" ;
-- lin hunt_V2 = mkV2 "" ; -- lin hunt_V2 = mkV2 "" ;
lin husband_N = humanN (mkN "férj" "férjet"); lin husband_N = mkN "férj" "férjet";
-------- --------
-- I - K -- I - K
@@ -190,7 +190,7 @@ lin iron_N = mkN "vas" "vasat" ;
-- lin john_PN = mkPN "" ; -- lin john_PN = mkPN "" ;
-- lin jump_V = mkV "" ; -- lin jump_V = mkV "" ;
-- lin kill_V2 = mkV2 "" ; -- lin kill_V2 = mkV2 "" ;
lin king_N = humanN (mkN "király" "királyt") ; lin king_N = mkN "király" "királyt" ;
lin knee_N = mkN "térd" "térdet"; lin knee_N = mkN "térd" "térdet";
-- lin know_V2 = mkV2 "" ; -- lin know_V2 = mkV2 "" ;
-- lin know_VQ = mkVQ "" ; -- lin know_VQ = mkVQ "" ;
@@ -223,12 +223,12 @@ lin love_N = mkN "szerelem" "szerelmet";
---- ----
-- M -- M
lin man_N = humanN (mkN "férfi" "ak" harmA) ; -- force plural allomorph and a-harmony lin man_N = mkN "férfi" "ak" harmA ; -- force plural allomorph and a-harmony
lin married_A2 = mkA2 "házas" Ins ; lin married_A2 = mkA2 "házas" Ins ;
lin meat_N = mkN "hús" "húst"; lin meat_N = mkN "hús" "húst";
lin milk_N = mkN "tej" "tejet" ; lin milk_N = mkN "tej" "tejet" ;
lin moon_N = mkN "hold" "holdat" ; lin moon_N = mkN "hold" "holdat" ;
lin mother_N2 = mkN2 (humanN (mkN "anya" "anyát")) ; lin mother_N2 = mkN2 (mkN "anya" "anyát") ;
lin mountain_N = mkN "hegy" "hegyet"; lin mountain_N = mkN "hegy" "hegyet";
lin mouth_N = mkN "száj" "szájat" ; lin mouth_N = mkN "száj" "szájat" ;
lin music_N = mkN "zene" "zenét"; lin music_N = mkN "zene" "zenét";
@@ -259,12 +259,12 @@ lin paper_N = mkN "papír" "papírt" "papírok" "papírja" ;
-- lin paris_PN = mkPN "Paris" ; -- lin paris_PN = mkPN "Paris" ;
lin peace_N = mkN "béke" "békét"; lin peace_N = mkN "béke" "békét";
lin pen_N = mkN "toll" "tollat" ; lin pen_N = mkN "toll" "tollat" ;
lin person_N = humanN (mkN "ember" "embert"); lin person_N = mkN "ember" "embert";
lin planet_N = mkN "bolygó" "bolygót" ; lin planet_N = mkN "bolygó" "bolygót" ;
lin plastic_N = mkN "műanyag" "műanyagot" "műanyagok" "műanyaga" ; lin plastic_N = mkN "műanyag" "műanyagot" "műanyagok" "műanyaga" ;
-- lin play_V = mkV "" ; -- lin play_V = mkV "" ;
lin policeman_N = humanN (mkN "rendőr" "rendőrt"); --the police "rendőrség" lin policeman_N = mkN "rendőr" "rendőrt"; --the police "rendőrség"
lin priest_N = humanN (mkN "pap" "papot" "papok" "papja") ; lin priest_N = mkN "pap" "papot" "papok" "papja" ;
-- lin pull_V2 = mkV2 "" ; -- lin pull_V2 = mkV2 "" ;
-- lin push_V2 = mkV2 "" ; -- lin push_V2 = mkV2 "" ;
-- lin put_V2 = mkV2 "" ; -- lin put_V2 = mkV2 "" ;
@@ -272,12 +272,12 @@ lin priest_N = humanN (mkN "pap" "papot" "papok" "papja") ;
-- -------- -- --------
-- -- Q - R -- -- Q - R
-- --
lin queen_N = humanN (mkN "kírálynő" "kírálynőt") ; lin queen_N = mkN "kírálynő" "kírálynőt" ;
lin question_N = mkN "kérdés" "kérdést" ; lin question_N = mkN "kérdés" "kérdést" ;
lin radio_N = mkN "rádió" "rádiót" ; lin radio_N = mkN "rádió" "rádiót" ;
lin rain_N = mkN "eső" "esőt" ; lin rain_N = mkN "eső" "esőt" ;
-- lin rain_V0 = mkV "" ; -- lin rain_V0 = mkV "" ;
lin read_V2 = mkV2 "olvas" ; -- lin read_V2 = mkV2 "" ;
lin ready_A = mkA "kész" ; lin ready_A = mkA "kész" ;
lin reason_N = mkN "ok" "okot" "okok" "oka" ; lin reason_N = mkN "ok" "okot" "okok" "oka" ;
lin red_A = mkA "piros" ; lin red_A = mkA "piros" ;
@@ -363,7 +363,7 @@ lin table_N = mkN "asztal" "asztalt";
lin tail_N = mkN "farok" "farkot"; lin tail_N = mkN "farok" "farkot";
lin talk_V3 = mkV3 "beszél" ; lin talk_V3 = mkV3 "beszél" ;
-- lin teach_V2 = mkV2 "" ; -- lin teach_V2 = mkV2 "" ;
lin teacher_N = humanN (mkN "tanár" "tanárt") ; lin teacher_N = mkN "tanár" "tanárt" ;
lin television_N = mkN "tévé" "tévét" ; --also "televízió" but not used lin television_N = mkN "tévé" "tévét" ; --also "televízió" but not used
lin thick_A = mkA "vastag" ; lin thick_A = mkA "vastag" ;
lin thin_A = mkA "vekony" ; lin thin_A = mkA "vekony" ;
@@ -401,14 +401,14 @@ lin water_N = mkN "víz" "vizet" ;
lin wet_A = mkA "nedves" ; lin wet_A = mkA "nedves" ;
lin white_A = mkA "fehér" ; lin white_A = mkA "fehér" ;
lin wide_A = mkA "széles" ; lin wide_A = mkA "széles" ;
lin wife_N = humanN (mkN "feleség" "feleséget") ; lin wife_N = mkN "feleség" "feleséget" ;
-- lin win_V2 = mkV2 "" ; -- lin win_V2 = mkV2 "" ;
lin wind_N = mkN "szél" "szelet" ; lin wind_N = mkN "szél" "szelet" ;
lin window_N = mkN "ablak" "ablakot" "ablakok" "ablaka" ; lin window_N = mkN "ablak" "ablakot" "ablakok" "ablaka" ;
lin wine_N = mkN "bor" "bort"; lin wine_N = mkN "bor" "bort";
lin wing_N = mkN "szárny" "szárnyat"; lin wing_N = mkN "szárny" "szárnyat";
-- lin wipe_V2 = mkV2 "" ; -- lin wipe_V2 = mkV2 "" ;
lin woman_N = humanN (mkN "nő" "nőt") ; lin woman_N = mkN "nő" "nőt" ;
-- lin wonder_VQ = mkVQ "" ; -- lin wonder_VQ = mkVQ "" ;
lin wood_N = mkN "fa" "fát"; --same as tree lin wood_N = mkN "fa" "fát"; --same as tree
lin worm_N = mkN "féreg" "férget"; --also "kukac" lin worm_N = mkN "féreg" "férget"; --also "kukac"

View File

@@ -1,30 +0,0 @@
concrete NamesHun of Names = CatHun ** open ResHun, Prelude in {
lin
GivenName gn = gn ** {g = Human ; objdef = Def} ;
MaleSurname sn = sn ** {g = Human ; objdef = Def} ;
FemaleSurname sn = sn ** {g = Human ; objdef = Def} ;
PlSurname sn = sn ** {g = Human ; objdef = Def ; agr = <P3,Pl>} ;
FullName gn sn = emptyNP ** {
s = \\p,c => gn.s ! p ! Nom ++ sn.s ! p ! c ;
agr = <P3,Sg> ;
objdef = Def ;
g = Human ;
postmod = [] ;
empty = []
} ;
UseLN ln = ln ** {objdef = Def} ;
PlainLN ln = ln ** {objdef = Def} ;
InLN ln = {
s = ln.s ! NoPoss ! Ine ;
isPre = False
} ;
AdjLN ap ln = ln ** {
s = \\p,c => ap.s ! Sg ! Nom ++ ln.s ! p ! c
} ;
}

View File

@@ -3,10 +3,6 @@ concrete NounHun of Noun = CatHun ** open
flags optimize=all_subs ; flags optimize=all_subs ;
oper
hunV : pattern Str = #("a"|"e"|"i"|"o"|"u"|"ö"|"ü"|
"á"|"é"|"í"|"ó"|"ú"|"ő"|"ű") ;
lin lin
--2 Noun phrases --2 Noun phrases
@@ -69,7 +65,7 @@ concrete NounHun of Noun = CatHun ** open
-- : NP -> RS -> NP ; -- Paris, which is here -- : NP -> RS -> NP ; -- Paris, which is here
RelNP np rs = np ** { RelNP np rs = np ** {
s = \\p,c => np.s ! p ! c ++ bindComma ++ rs.s ! np.g ! np.agr.p2 ! c ; s = \\p,c => np.s ! p ! c ++ bindComma ++ rs.s ! np.agr.p2 ! c ;
} ; } ;
-- Determiners can form noun phrases directly. -- Determiners can form noun phrases directly.
@@ -148,24 +144,22 @@ concrete NounHun of Noun = CatHun ** open
-- : Numeral -> Card ; -- : Numeral -> Card ;
NumNumeral num = num ; NumNumeral num = num ;
{-
-- : AdN -> Card -> Card ; -- : AdN -> Card -> Card ;
AdNum adn card = card ** { s = \\p => adn.s ++ card.s ! p } ; AdNum adn card = card ** { s = adn.s ++ card.s } ;
-- : Digits -> Ord ; -- : Digits -> Ord ;
OrdDigits digs = { OrdDigits digs = digs ** { s = digs.s ! NOrd } ;
s = \\_,_ => digs.s ! NOrd ;
n = Sg
} ;
-- : Numeral -> Ord ; -- : Numeral -> Ord ;
OrdNumeral num = { OrdNumeral num = num ** {
s = \\_,_ => num.s ! Attrib ; s = \\_ => num.ord
n = Sg
} ; } ;
-}
-- : A -> Ord ; -- : A -> Ord ;
OrdSuperl a = { OrdSuperl a = {
s = \\n,c => s = \\n,c =>
let adj : Noun = (a ** {s = a.s ! Superl; g=NonHuman}) in let adj : Noun = (a ** {s = a.s ! Superl}) in
caseFromStem glue adj c n ; caseFromStem glue adj c n ;
n = Sg -- ?? is this meaningful? n = Sg -- ?? is this meaningful?
} ; } ;
@@ -178,7 +172,7 @@ concrete NounHun of Noun = CatHun ** open
-- : Quant -- : Quant
DefArt = mkQuant "a" "a" ** { DefArt = mkQuant "a" "a" ** {
s, s,
sp = \\_,_ => pre {"a" ; "az" / hunV } ; sp = \\_,_ => pre {"a" ; "az" / v } ;
dt = DefDet ; dt = DefDet ;
} ; } ;
@@ -191,10 +185,7 @@ concrete NounHun of Noun = CatHun ** open
-- : Pron -> Quant -- : Pron -> Quant
PossPron pron = pron ** { PossPron pron = pron ** {
s,sp = \\_,_ => case pron.agr of { s,sp = \\_ => pron.s ;
<P3,_> => "az" ++ pron.s ! Nom ;
_ => pre {"a" ; "az" / hunV} ++ pron.s ! Nom
} ;
dt = DetPoss (agr2pstem pron.agr) ; dt = DetPoss (agr2pstem pron.agr) ;
caseagr = False ; caseagr = False ;
} ; } ;
@@ -209,9 +200,7 @@ concrete NounHun of Noun = CatHun ** open
} ; } ;
-- : N2 -> NP -> CN ; -- : N2 -> NP -> CN ;
ComplN2 n2 np = (UseN n2) ** { -- ComplN2 n2 np =
compl = \\n,c => np.s ! NoPoss ! Dat ++ np.postmod
} ;
-- : N3 -> NP -> N2 ; -- distance from this city (to Paris) -- : N3 -> NP -> N2 ; -- distance from this city (to Paris)
-- ComplN3 n3 np = -- ComplN3 n3 np =
@@ -231,7 +220,7 @@ concrete NounHun of Noun = CatHun ** open
-- : CN -> RS -> CN ; -- : CN -> RS -> CN ;
RelCN cn rs = cn ** { RelCN cn rs = cn ** {
compl = \\n,c => cn.compl ! n ! c ++ rs.s ! cn.g ! n ! c compl = \\n,c => cn.compl ! n ! c ++ rs.s ! n ! c
} ; } ;
-- : CN -> Adv -> CN ; -- : CN -> Adv -> CN ;
@@ -245,9 +234,7 @@ concrete NounHun of Noun = CatHun ** open
-- to decide. Sentential complements are defined in VerbHun. -- to decide. Sentential complements are defined in VerbHun.
-- : CN -> SC -> CN ; -- question where she sleeps -- : CN -> SC -> CN ; -- question where she sleeps
SentCN cn sc = cn ** { -- SentCN cn sc = cn ** { } ;
compl = \\n,c => cn.compl ! n ! c ++ sc.s
} ;
--2 Apposition --2 Apposition
@@ -261,37 +248,29 @@ concrete NounHun of Noun = CatHun ** open
--2 Possessive and partitive constructs --2 Possessive and partitive constructs
-- : PossNP : CN -> NP -> CN ; -- : PossNP : CN -> NP -> CN ;
PossNP cn np = cn ** { -- PossNP cn np = cn ** {
compl = \\n,c => cn.compl ! n ! c ++ np.s ! NoPoss ! Dat ++ np.postmod -- compl = \\n,c => cn.compl ! n ! c ++ np.s ! Poss P3 n ! c -- TODO check
} ; -- } ;
-- : CN -> NP -> CN ; -- glass of wine / two kilos of red apples -- : CN -> NP -> CN ; -- glass of wine / two kilos of red apples
PartNP cn np = cn ** { -- PartNP cn np = cn ** {
compl = \\n,c => cn.compl ! n ! c ++ np.s ! NoPoss ! Nom ++ np.postmod -- } ;
} ;
-- : Det -> NP -> NP ; -- three of them, some of the boys {-
CountNP det np = emptyNP ** det ** {
s = \\_,c => det.sp ! c ++ np.s ! NoPoss ! Ela ++ np.postmod ;
agr = <P3,det.n> ;
objdef = dt2objdef det.dt
} ;
-- : Decimal -> MU -> NP ; -- This is different from the partitive, as shown by many languages.
QuantityNP dec mu = indeclNP
(case mu.isPre of { -- : Det -> NP -> NP ;
True => mu.s ++ dec.s ! NCard ; CountNP det np = np **
False => dec.s ! NCard ++ mu.s { } ; -- Nonsense for DefArt or IndefArt
}) ** {
objdef = Def
} ;
--3 Conjoinable determiners and ones with adjectives --3 Conjoinable determiners and ones with adjectives
-- : DAP -> AP -> DAP ; -- the large (one) -- : DAP -> AP -> DAP ; -- the large (one)
AdjDAP dap ap = dap ; AdjDAP dap ap = dap ** { } ;
-- : Det -> DAP ; -- this (or that) -- : Det -> DAP ; -- this (or that)
DetDAP det = det ; DetDAP det = det ;
-}
} }

View File

@@ -1,7 +1,7 @@
resource NounMorphoHun = ParamHun ** open Prelude, Predef in { resource NounMorphoHun = ParamHun ** open Prelude, Predef in {
oper oper
Noun = {s : NumCaseStem => Str ; h : Harm ; g : Gender} ; Noun = {s : NumCaseStem => Str ; h : Harm} ;
-- Paradigm functions -- Paradigm functions
-- http://www.cse.chalmers.se/~aarne/articles/smart-preprint.pdf -- http://www.cse.chalmers.se/~aarne/articles/smart-preprint.pdf
@@ -275,7 +275,6 @@ oper
PossdSg_PossrSg1P2 => init possdSg_PossrSg1P2 ; PossdSg_PossrSg1P2 => init possdSg_PossrSg1P2 ;
PossdPl => possdPl } ; PossdPl => possdPl } ;
h = h ; h = h ;
g = NonHuman
} ; } ;
@@ -572,7 +571,7 @@ oper
<_,_ + #v> => endCaseVow ; <_,_ + #v> => endCaseVow ;
<_,_ + #v + ("sz"|"z"|"s"|"zs"|"j"|"ly"|"l"|"r"|"n"|"ny"|"ssz" <_,_ + #v + ("sz"|"z"|"s"|"zs"|"j"|"ly"|"l"|"r"|"n"|"ny"|"ssz"
|"zz"|"ss"|"ll"|"rr"|"nn"|"ns"|"nsz"|"nz")> => endCaseConsAcc ; |"zz"|"ss"|"ll"|"rr"|"nn"|"ns"|"nsz"|"nz")> => endCaseConsAcc ;
<True,_> => endCaseCons ; <True,_> => endCaseConsAccAt ;
_ => endCaseCons } ; _ => endCaseCons } ;
-- Last consonant doubles before instrumental and translative -- Last consonant doubles before instrumental and translative
@@ -594,7 +593,7 @@ oper
-- All other singular forms and stems -- All other singular forms and stems
c => w + endCaseSg c ! h } ; c => w + endCaseSg c ! h } ;
g = NonHuman
} ; } ;

View File

@@ -27,77 +27,59 @@ lin
n9 = mkNum3 "kilenc" "kilencven" "kilencedik" ; n9 = mkNum3 "kilenc" "kilencven" "kilencedik" ;
-- : Sub10 ; -- 1 -- : Sub10 ; -- 1
pot01 = mkNum3 "egy" "tíz" "első" ; pot01 = mkNum3 "egy" "tíz" "első" ** {n=Sg} ;
-- : Digit -> Sub10 ; -- d * 1 -- : Digit -> Sub10 ; -- d * 1
pot0 d = d ; pot0 d = d ;
-- : Sub100 ; -- 10 -- : Sub100 ; -- 10
pot110 = {s = table {p => "tíz"}} ; pot110 = {s = table {p => "tíz"} ; n = numNumber ; numtype = IsNum} ;
-- : Sub100 ; -- 11 -- : Sub100 ; -- 11
pot111 = {s = table {p => "tizenegy"}} ; pot111 = {s = table {p => "tizenegy"} ; n = numNumber ; numtype = IsNum} ;
-- : Digit -> Sub100 ; -- 10 + d -- : Digit -> Sub100 ; -- 10 + d
pot1to19 d = pot1to19 d =
{s = table {p => "tizen" ++ d.s ! <Unit,p>}} ; {s = table {p => "tizen" ++ d.s ! <Unit,p>} ;
n = numNumber ; numtype = IsNum} ;
-- : Sub10 -> Sub100 ; -- coercion of 1..9 -- : Sub10 -> Sub100 ; -- coercion of 1..9
pot0as1 n = pot0as1 n =
{s = table {p => n.s ! <Unit,p>}} ; {s = table {p => n.s ! <Unit,p>} ;
n = numNumber ; numtype = IsNum} ;
-- : Digit -> Sub100 ; -- d * 10 -- : Digit -> Sub100 ; -- d * 10
pot1 d = pot1 d =
{s = table {p => d.s ! <Ten,p>}} ; {s = table {p => d.s ! <Ten,p>} ;
n = numNumber ; numtype = IsNum} ;
-- : Digit -> Sub10 -> Sub100 ; -- d * 10 + n -- : Digit -> Sub10 -> Sub100 ; -- d * 10 + n
pot1plus d e = pot1plus d e =
{s = table {p => (d.s ! <Ten,Attrib>) ++ e.s ! <Unit,p>}} ; {s = table {p => (d.s ! <Ten,Attrib>) ++ e.s ! <Unit,p>} ;
n = numNumber ; numtype = IsNum} ;
-- : Sub100 -> Sub1000 ; -- coercion of 1..99 -- : Sub100 -> Sub1000 ; -- coercion of 1..99
pot1as2 n = n ; pot1as2 n = n ;
-- : Sub1000 ; -- a hundred
pot21 =
{s = table {p => "száz"}} ;
-- : Sub10 -> Sub1000 ; -- m * 100 -- : Sub10 -> Sub1000 ; -- m * 100
pot2 d = pot2 d =
{s = table {p => (d.s ! <Unit,Attrib>) ++ "száz"}} ; {s = table {p => (d.s ! <Unit,Attrib>) ++ "száz"} ;
n = numNumber ; numtype = IsNum} ;
-- : Sub10 -> Sub100 -> Sub1000 ; -- m * 100 + n -- : Sub10 -> Sub100 -> Sub1000 ; -- m * 100 + n
pot2plus d e = pot2plus d e =
{s = table {p => (d.s ! <Unit,Attrib>) ++ "száz" ++ e.s ! p}} ; {s = table {p => (d.s ! <Unit,Attrib>) ++ "száz" ++ e.s ! p} ;
n = numNumber ; numtype = IsNum} ;
-- : Sub1000 -> Sub1000000 ; -- coercion of 1..999 -- : Sub1000 -> Sub1000000 ; -- coercion of 1..999
pot2as3 n = n ; pot2as3 n = n ;
-- : Sub1000000 ; -- a thousand
pot31 =
{s = table {p => "ezer"}} ;
-- : Sub1000 -> Sub1000000 ; -- m * 1000 -- : Sub1000 -> Sub1000000 ; -- m * 1000
pot3 n = pot3 n =
{s = table {p => n.s ! Attrib ++ "ezer"}} ; {s = table {p => n.s ! Attrib ++ "ezer"} ;
n = numNumber ; numtype = IsNum} ;
-- : Sub1000 -> Sub1000 -> Sub1000000 ; -- m * 1000 + n -- : Sub1000 -> Sub1000 -> Sub1000000 ; -- m * 1000 + n
pot3plus n m = pot3plus n m =
{s = table {p => n.s ! Attrib ++ "ezer" ++ m.s ! p}} ; {s = table {p => n.s ! Attrib ++ "ezer" ++ m.s ! p} ;
pot3decimal d = n = numNumber ; numtype = IsNum} ;
{s = table {p => d.s ! NCard ++ "ezer"}} ;
pot3as4 n = n ; pot3as4 n = n ;
pot41 =
{s = table {p => "egymillió"}} ;
pot4 n =
{s = table {p => n.s ! Attrib ++ "millió"}} ;
pot4plus n m =
{s = table {p => n.s ! Attrib ++ "millió" ++ m.s ! p}} ;
pot4as5 n = n ; pot4as5 n = n ;
pot4decimal d =
{s = table {p => d.s ! NCard ++ "millió"}} ;
pot51 =
{s = table {p => "egymilliárd"}} ;
pot5 n =
{s = table {p => n.s ! Attrib ++ "milliárd"}} ;
pot5plus n m =
{s = table {p => n.s ! Attrib ++ "milliárd" ++ m.s ! p}} ;
pot5decimal d =
{s = table {p => d.s ! NCard ++ "milliárd"}} ;
oper oper
LinDigit : Type = {s : DForm*Place => Str} ; LinDigit : Type = {s : DForm*Place => Str ; n : Number} ;
mkNum3 : (x1,_,x3 : Str) -> LinDigit = \három,harminc,harmadik -> mkNum3 : (x1,_,x3 : Str) -> LinDigit = \három,harminc,harmadik ->
mkNum5 három harminc három harminc harmadik ; mkNum5 három harminc három harminc harmadik ;
@@ -107,8 +89,13 @@ oper
<Ten,Indep> => ti ; <Ten,Indep> => ti ;
<Unit,Attrib> => ua ; <Unit,Attrib> => ua ;
<Ten, Attrib> => ta } ; <Ten, Attrib> => ta } ;
-- ord = ord ; -- TODO figure out where to use ordinal
n = numNumber ;
numType = IsNum ;
} ; } ;
numNumber = Sg ;
-- numerals as sequences of digits -- numerals as sequences of digits
lincat lincat
Dig = TDigit ; Dig = TDigit ;
@@ -119,7 +106,8 @@ oper
-- : Dig -> Digits -> Digits ; -- 876 -- : Dig -> Digits -> Digits ; -- 876
IIDig d i = { IIDig d i = {
s = \\x => d.s ++ BIND ++ i.s ! x s = \\x => d.s ++ BIND ++ i.s ! x ;
n = numNumber
} ; } ;
D_0 = mkDig "0" ; D_0 = mkDig "0" ;
@@ -134,26 +122,21 @@ oper
D_9 = mkDig "9" ; D_9 = mkDig "9" ;
PosDecimal d = d ** {hasDot=False} ; PosDecimal d = d ** {hasDot=False} ;
NegDecimal d = { NegDecinal d = {
s = \\x => "-" ++ BIND ++ d.s ! x ; s = \\x => "-" ++ BIND ++ d.s ! x ;
n = numNumber ;
hasDot=False hasDot=False
} ; } ;
IFrac d i = {
s = \\x => d.s ! x ++
case d.hasDot of {
True => BIND ;
False => BIND ++ "." ++ BIND
} ++ i.s ;
hasDot=True
} ;
oper oper
mkDig : Str -> TDigit = \s -> { mkDig : Str -> TDigit = \s -> {
s = s ; s = s ;
n = numNumber
} ; } ;
TDigit = { TDigit = {
s : Str ; -- TODO add ordinals s : Str ; -- TODO add ordinals
n : Number
} ; } ;
} }

View File

@@ -25,8 +25,6 @@ oper
mkN : (unoka : Str) -> (testvér : N) -> N ; -- Compound noun. Use: `mkN "unoka" (mkN "testvér")` (would give wrong harmony with `mkN "unokatestvér"`) mkN : (unoka : Str) -> (testvér : N) -> N ; -- Compound noun. Use: `mkN "unoka" (mkN "testvér")` (would give wrong harmony with `mkN "unokatestvér"`)
} ; } ;
humanN : N -> N = \n -> n ** {g = Human} ;
mkPN : overload { mkPN : overload {
mkPN : Str -> PN ; -- Singular PN out of a string mkPN : Str -> PN ; -- Singular PN out of a string
mkPN : Str -> Number -> PN -- PN with a given number mkPN : Str -> Number -> PN -- PN with a given number
@@ -60,7 +58,6 @@ oper
-- Verbs -- Verbs
mkV : overload { mkV : overload {
mkV : (sg3 : Str) -> V ; -- Predictable verb. Takes singular P3 form in present tense. mkV : (sg3 : Str) -> V ; -- Predictable verb. Takes singular P3 form in present tense.
mkV : (x1,_,_,_,_,_,_,_,_,_,_,_,x13 : Str) -> V ; -- Full present, past, and infinitive forms.
-- mkV : (nore : Str) -> (hada : V) -> V ; -- Add a prefix to an existing verb, e.g. 노래+하다 -- mkV : (nore : Str) -> (hada : V) -> V ; -- Add a prefix to an existing verb, e.g. 노래+하다
} ; } ;
@@ -230,12 +227,7 @@ oper
-- mkV : (nore : Str) -> (hada : V) -> V = \nore,hada -> hada ** { -- mkV : (nore : Str) -> (hada : V) -> V = \nore,hada -> hada ** {
-- s = \\vf => nore + hada.s ! vf} ; -- s = \\vf => nore + hada.s ! vf} ;
mkV : (x1,_,_,_,_,_,x7 : Str) -> V = \sg1,sg2,sg3,pl1,pl2,pl3,inf -> mkV : (x1,_,_,_,_,_,x7 : Str) -> V = \sg1,sg2,sg3,pl1,pl2,pl3,inf ->
lin V (mkVerbPres sg1 sg2 sg3 pl1 pl2 pl3 inf) ; lin V (mkVerbFull sg1 sg2 sg3 pl1 pl2 pl3 inf) ;
mkV : (x1,_,_,_,_,_,_,_,_,_,_,_,_,_,x15 : Str) -> V =
\sg1,sg2,sg3,pl1,pl2,pl3,pastSg1,pastSg2,pastSg3,pastPl1,pastPl2,pastPl3,inf,ppart,apart ->
lin V (mkVerbFull sg1 sg2 sg3 pl1 pl2 pl3
pastSg1 pastSg2 pastSg3 pastPl1 pastPl2 pastPl3
inf ppart apart) ;
} ; } ;
copula = lin V ResHun.copula ; copula = lin V ResHun.copula ;
@@ -287,7 +279,6 @@ oper
mkV3 = overload { mkV3 = overload {
mkV3 : (plain : Str) -> V3 = \v3 -> lin V3 (mkVerb3 v3) ; mkV3 : (plain : Str) -> V3 = \v3 -> lin V3 (mkVerb3 v3) ;
mkV3 : V -> V3 = \v -> lin V3 (v2tov3 (vtov2 v)) ;
} ; } ;
mkPrep = overload { mkPrep = overload {
@@ -301,7 +292,6 @@ oper
= \c -> lin Prep (ResHun.caseAdp c) ; = \c -> lin Prep (ResHun.caseAdp c) ;
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} ;
} }

View File

@@ -56,7 +56,6 @@ oper
-- Nouns -- Nouns
param param
Gender = Human | NonHuman ;
NumCaseStem = NumCaseStem =
SgNom | SgAccStem | SgSup -- These may use 2-3 different stems SgNom | SgAccStem | SgSup -- These may use 2-3 different stems
@@ -74,16 +73,16 @@ param
Case = Case =
Nom | Acc | Dat Nom | Acc | Dat
| Ill -- Locatives -- | Ill -- Locatives
| Ine | Ine
| Ela | Ela
| All | All
| Ade | Ade
| Abl | Abl
| Sub -- | Sub
| Sup | Sup
| Del -- | Del
| Cau -- Causal-final 'for the purpose of, for the reason that' -- | Cau -- Causal-final 'for the purpose of, for the reason that'
| Ins -- Instrumental | Ins -- Instrumental
| Tra -- Translative | Tra -- Translative
-- | Ess | Ter | For -- | Ess | Ter | For
@@ -199,10 +198,14 @@ param
VForm = VForm =
VInf VInf
| VPres Person Number | VPres Person Number ;
| VPast Person Number
| VPresPart oper
| VAdvPart ;
agr2vf : Person*Number -> VForm = \pn ->
case <pn.p1,pn.p2> of {
<p,n> => VPres p n
} ;
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
-- Clauses -- Clauses

View File

@@ -6,11 +6,11 @@ concrete PhraseHun of Phrase = CatHun ** open Prelude, ResHun in {
UttS s = s ; UttS s = s ;
UttQS qs = qs ; UttQS qs = qs ;
UttIAdv iadv = iadv ; UttIAdv iadv = iadv ;
{-
UttImpSg pol imp = UttImpSg pol imp =
{s = pol.s ++ imp.s ! Sg ! pol.p} ;
UttImpPl pol imp = UttImpPl pol imp =
{s = pol.s ++ imp.s ! Pl ! pol.p} ; UttImpPol = UttImpSg ;
UttImpPol = UttImpPl ; -}
UttIP, UttIP,
UttNP = \np -> {s = linNP np} ; UttNP = \np -> {s = linNP np} ;
UttVP vp = {s = vp.obj ++ vp.adv ++ vp.s ! VInf} ; UttVP vp = {s = vp.obj ++ vp.adv ++ vp.s ! VInf} ;
@@ -24,6 +24,6 @@ concrete PhraseHun of Phrase = CatHun ** open Prelude, ResHun in {
-- PConjConj conj = {s = conj.s1 ++ conj.s2 ! …} ; -- PConjConj conj = {s = conj.s1 ++ conj.s2 ! …} ;
NoVoc = {s = []} ; NoVoc = {s = []} ;
VocNP np = {s = bindComma ++ linNP np} ; -- VocNP np = { s = "," ++ np.s ! … } ; -}
} }

View File

@@ -1,49 +1,40 @@
concrete QuestionHun of Question = CatHun ** open concrete QuestionHun of Question = CatHun ** open
Prelude, ResHun, ParadigmsHun, (NH=NounHun), (VH=VerbHun) in { Prelude, ResHun, ParadigmsHun, (NH=NounHun) in {
-- A question can be formed from a clause ('yes-no question') or -- A question can be formed from a clause ('yes-no question') or
-- with an interrogative. -- with an interrogative.
lincat {-
QVP = VerbPhrase ;
lin lin
-- : Cl -> QCl ; -- : Cl -> QCl ;
QuestCl cl = cl ; QuestCl =
-- : IP -> VP -> QCl ; -- : IP -> VP -> QCl ;
QuestVP ip vp = predVP ip vp ; QuestVP ip vp =
-- : IP -> ClSlash -> QCl ; -- whom does John love -- : IP -> ClSlash -> QCl ; -- whom does John love
QuestSlash ip cls = { QuestSlash ip cls =
s = \\t,a,p => ip.s ! NoPoss ! cls.c2 ++ cls.s ! t ! a ! p
} ;
-- : IAdv -> Cl -> QCl ; -- why does John walk -- : IAdv -> Cl -> QCl ; -- why does John walk
QuestIAdv iadv cls = { QuestIAdv iadv cls =
s = \\t,a,p => iadv.s ++ cls.s ! t ! a ! p
} ;
-- : IComp -> NP -> QCl ; -- where is John? -- : IComp -> NP -> QCl ; -- where is John?
QuestIComp icomp np = { QuestIComp icomp np =
s = \\_,_,p =>
icomp.s ++ if_then_Pol p [] "nem" ++ linNP np
} ;
-- Interrogative pronouns can be formed with interrogative -- Interrogative pronouns can be formed with interrogative
-- determiners, with or without a noun. -- determiners, with or without a noun.
-- : IDet -> CN -> IP ; -- which five songs -- : IDet -> CN -> IP ; -- which five songs
IdetCN idet cn = NH.DetCN idet cn ; IdetCN idet cn = {…} ** NH.DetCN idet cn ;
-- : IDet -> IP ; -- which five -- : IDet -> IP ; -- which five
IdetIP idet = NH.DetNP idet ; IdetIP idet = {…} ** NH.DetNP idet ;
-- They can be modified with adverbs. -- They can be modified with adverbs.
-- : IP -> Adv -> IP ; -- who in Paris -- : IP -> Adv -> IP ; -- who in Paris
AdvIP = NH.AdvNP ; --AdvIP = NH.AdvNP ;
-- Interrogative quantifiers have number forms and can take number modifiers. -- Interrogative quantifiers have number forms and can take number modifiers.
@@ -52,14 +43,12 @@ concrete QuestionHun of Question = CatHun ** open
-- Interrogative adverbs can be formed prepositionally. -- Interrogative adverbs can be formed prepositionally.
-- : Prep -> IP -> IAdv ; -- with whom -- : Prep -> IP -> IAdv ; -- with whom
PrepIP prep ip = {s = applyAdp prep ip} ; PrepIP prep ip = ;
-- They can be modified with other adverbs. -- They can be modified with other adverbs.
-- : IAdv -> Adv -> IAdv ; -- where in Paris -- : IAdv -> Adv -> IAdv ; -- where in Paris
AdvIAdv iadv adv = { -- AdvIAdv iadv adv =
s = iadv.s ++ adv.s
} ;
-- Interrogative complements to copulas can be both adverbs and -- Interrogative complements to copulas can be both adverbs and
-- pronouns. -- pronouns.
@@ -68,16 +57,21 @@ concrete QuestionHun of Question = CatHun ** open
CompIAdv iadv = iadv ; -- where (is it) CompIAdv iadv = iadv ; -- where (is it)
-- : IP -> IComp ; -- : IP -> IComp ;
CompIP ip = {s = ip.s ! NoPoss ! Nom} ; -- who (is it) CompIP ip = {s = ip.s ! Abs} ; -- who (is it)
-- More $IP$, $IDet$, and $IAdv$ are defined in $Structural$. -- More $IP$, $IDet$, and $IAdv$ are defined in $Structural$.
-- Wh questions with two or more question words require a new, special category. -- Wh questions with two or more question words require a new, special category.
ComplSlashIP vps ip = VH.insertObj vps ip ; cat
AdvQVP vp iadv = vp ** {adv = vp.adv ++ iadv.s} ; QVP ; -- buy what where
AddAdvQVP qvp iadv = qvp ** {adv = qvp.adv ++ iadv.s} ; fun
QuestQVP ip qvp = predVP ip qvp ; ComplSlashIP : VPSlash -> IP -> QVP ; -- buys what
AdvQVP : VP -> IAdv -> QVP ; -- lives where
AddAdvQVP : QVP -> IAdv -> QVP ; -- buys what where
QuestQVP : IP -> QVP -> QCl ; -- who buys what where
-}
} }

View File

@@ -13,19 +13,6 @@ lin
-- : RP ; -- : RP ;
IdRP = {s = IdRP = {s =
table {
Human =>
table {Sg => caseTable "aki" "akit" "akinek" -- nom, acc, dat
"akibe" "akiben" "akiből" -- ill, ine, ela
"akihez" "akinél" "akitől" -- all, ade, abl
"akire" "akin" "akiről" -- sub, sup, del
"akiért" "akivel" "akivé" ; -- cau, ins, tra
Pl => caseTable "akik" "akiket" "akiknek" -- nom, acc, dat
"akikbe" "akikben" "akikből" -- ill, ine, ela
"akikhez" "akiknél" "akiktől" -- all, ade, abl
"akikre" "akiken" "akikről" -- sub, sup, del
"akikért" "akikkel" "akikké"} ; -- cau, ins, tra
NonHuman =>
table {Sg => caseTable "ami" "amit" "aminek" -- nom, acc, dat table {Sg => caseTable "ami" "amit" "aminek" -- nom, acc, dat
"amibe" "amiben" "amiből" -- ill, ine, ela "amibe" "amiben" "amiből" -- ill, ine, ela
"amihez" "aminél" "amitől" -- all, ade, abl "amihez" "aminél" "amitől" -- all, ade, abl
@@ -35,8 +22,7 @@ lin
"amikbe" "amikben" "amikből" -- ill, ine, ela "amikbe" "amikben" "amikből" -- ill, ine, ela
"amikhez" "amiknél" "amiktől" -- all, ade, abl "amikhez" "amiknél" "amiktől" -- all, ade, abl
"amikre" "amiken" "amikről" -- sub, sup, del "amikre" "amiken" "amikről" -- sub, sup, del
"amikért" "amikkel" "amikké"} -- cau, ins, tra "amikért" "amikkel" "amikké"}; -- cau, ins, tra
} ;
} ; } ;
-- : Prep -> NP -> RP -> RP ; -- the mother of whom -- : Prep -> NP -> RP -> RP ; -- the mother of whom

View File

@@ -15,7 +15,7 @@ resource ResHun = NounMorphoHun ** open Prelude, Predef in {
oper oper
CNoun : Type = Noun ** { CNoun : Type = Noun ** {
compl : Number => Case => Str ; compl : Number => Case => Str ;
postmod : Str postmod : Str ;
} ; } ;
mkCaseNoun : Str -> Number => Case => Str = \s -> mkCaseNoun : Str -> Number => Case => Str = \s ->
@@ -75,7 +75,6 @@ oper
agr : Person*Number ; agr : Person*Number ;
objdef : ObjDef ; objdef : ObjDef ;
empty : Str ; -- standard trick for pro-drop empty : Str ; -- standard trick for pro-drop
g : Gender ;
} ; } ;
NounPhrase : Type = BaseNP ** { NounPhrase : Type = BaseNP ** {
@@ -87,7 +86,6 @@ oper
s = \\_,_ => [] ; s = \\_,_ => [] ;
agr = <P3,Sg> ; agr = <P3,Sg> ;
objdef = Indef ; objdef = Indef ;
g = NonHuman ;
postmod, empty = [] ; postmod, empty = [] ;
} ; } ;
@@ -397,24 +395,6 @@ oper
<P3,Pl> => harm "nak" "nek" -- TODO allomorphs -anak, -enek <P3,Pl> => harm "nak" "nek" -- TODO allomorphs -anak, -enek
} ; } ;
endingsPastIndef : VerbEndings = table {
<P1,Sg> => harm3 "tam" "tem" "tem" ;
<P2,Sg> => harm "tál" "tél" ;
<P3,Sg> => harm1 "t" ;
<P1,Pl> => harm "tunk" "tünk" ;
<P2,Pl> => harm3 "tatok" "tetek" "tötök" ;
<P3,Pl> => harm "tak" "tek"
} ;
endingsPastDef : VerbEndings = table {
<P1,Sg> => harm3 "tam" "tem" "tem" ;
<P2,Sg> => harm "tad" "ted" ;
<P3,Sg> => harm "ta" "te" ;
<P1,Pl> => harm "tuk" "tük" ;
<P2,Pl> => harm "tátok" "tétek" ;
<P3,Pl> => harm "ták" "ték"
} ;
BaseVerb : Type = { BaseVerb : Type = {
sc : SubjCase ; -- subject case sc : SubjCase ; -- subject case
} ; } ;
@@ -426,7 +406,7 @@ oper
c2 : Case -- object case c2 : Case -- object case
} ; } ;
Verb3 : Type = Verb2 ** { Verb3 : Type = Verb2 ** {
c3 : Case -- indirect object case -- c3 : Case -- indirect object case
} ; } ;
datV2 : Verb -> Verb2 = \v -> { datV2 : Verb -> Verb2 = \v -> {
@@ -438,44 +418,18 @@ oper
mkVerb2 : Str -> Verb2 = \sg3 -> vtov2 (mkVerb sg3) ; mkVerb2 : Str -> Verb2 = \sg3 -> vtov2 (mkVerb sg3) ;
mkVerb3 : Str -> Verb3 = \sg3 -> v2tov3 (mkVerb2 sg3) ; mkVerb3 : Str -> Verb3 = \sg3 -> v2tov3 (mkVerb2 sg3) ;
futureAux : ObjDef -> Person -> Number -> Str = \od,p,n ->
case <od,p,n> of {
<Indef,P1,Sg> => "fogok" ;
<Indef,P2,Sg> => "fogsz" ;
<Indef,P3,Sg> => "fog" ;
<Indef,P1,Pl> => "fogunk" ;
<Indef,P2,Pl> => "fogtok" ;
<Indef,P3,Pl> => "fognak" ;
<Def,P1,Sg> => "fogom" ;
<Def,P2,Sg> => "fogod" ;
<Def,P3,Sg> => "fogja" ;
<Def,P1,Pl> => "fogjuk" ;
<Def,P2,Pl> => "fogjátok" ;
<Def,P3,Pl> => "fogják"
} ;
vtov2 : Verb -> Verb2 = \v -> v ** { vtov2 : Verb -> Verb2 = \v -> v ** {
s = table { s = table {
Def => let vDef : Verb = mkVerbRegPast endingsDef endingsPastDef Def => let vDef : Verb = mkVerbReg endingsDef (v.s ! VInf) (v.s ! VPres P3 Sg)
(v.s ! VInf) (v.s ! VPres P3 Sg)
in vDef.s ; in vDef.s ;
Indef => v.s } ; Indef => v.s } ;
c2 = Acc c2 = Acc
} ; } ;
v2tov3 : Verb2 -> Verb3 = \v -> v ** {c3 = Dat} ; v2tov3 : Verb2 -> Verb3 = \v -> v ** {c3 = Dat} ;
mkVerb : (sg3 : Str) -> Verb = \sg3 -> mkVerb : (sg3 : Str) -> Verb = mkVerbReg endingsIndef "TODO:infinitive" ; -- TODO
let inf : Str
= case sg3 of {
_ + ("ít" | (#c + #c)) => sg3 + harm3 "ani" "eni" "eni" ! getHarm sg3 ;
_ => sg3 + "ni"
}
in mkVerbReg endingsIndef inf sg3 ;
mkVerbReg : VerbEndings -> (inf, stem : Str) -> Verb = mkVerbReg : VerbEndings -> (inf, stem : Str) -> Verb = \hf,inf,stem ->
\hf,inf,stem -> mkVerbRegPast hf endingsPastIndef inf stem ;
mkVerbRegPast : VerbEndings -> VerbEndings -> (inf, stem : Str) -> Verb = \hf,pastHf,inf,stem ->
let h : Harm = getHarm stem ; let h : Harm = getHarm stem ;
sg1 : Str = stem + hf ! <P1,Sg> ! h ; sg1 : Str = stem + hf ! <P1,Sg> ! h ;
sg2 : Str = stem + hf ! <P2,Sg> ! h ; sg2 : Str = stem + hf ! <P2,Sg> ! h ;
@@ -483,43 +437,10 @@ oper
pl1 : Str = stem + hf ! <P1,Pl> ! h ; pl1 : Str = stem + hf ! <P1,Pl> ! h ;
pl2 : Str = stem + hf ! <P2,Pl> ! h ; pl2 : Str = stem + hf ! <P2,Pl> ! h ;
pl3 : Str = stem + hf ! <P3,Pl> ! h ; pl3 : Str = stem + hf ! <P3,Pl> ! h ;
pastSg1 : Str = stem + pastHf ! <P1,Sg> ! h ; in mkVerbFull sg1 sg2 sg3 pl1 pl2 pl3 inf ;
pastSg2 : Str = stem + pastHf ! <P2,Sg> ! h ;
pastSg3 : Str = stem + pastHf ! <P3,Sg> ! h ;
pastPl1 : Str = stem + pastHf ! <P1,Pl> ! h ;
pastPl2 : Str = stem + pastHf ! <P2,Pl> ! h ;
pastPl3 : Str = stem + pastHf ! <P3,Pl> ! h ;
ppart : Str = case sg3 of {
x + "o" + y@("g"|"l") => x+y+"ó" ;
_ + ("ér"|"éz"|"ít") => sg3 + "ő" ;
_ => sg3 + "ó"
} ;
apart : Str = sg3 + harm "va" "ve" ! h
in mkVerbFull sg1 sg2 sg3 pl1 pl2 pl3
pastSg1 pastSg2 pastSg3 pastPl1 pastPl2 pastPl3
inf ppart apart ;
mkVerbPres : (x1,_,_,_,_,_,x7 : Str) -> Verb = mkVerbFull : (x1,_,_,_,_,_,x7 : Str) -> Verb =
\sg1,sg2,sg3,pl1,pl2,pl3,inf -> \sg1,sg2,sg3,pl1,pl2,pl3,inf -> {
let h : Harm = getHarm sg3 ;
pastSg1 : Str = sg3 + endingsPastIndef ! <P1,Sg> ! h ;
pastSg2 : Str = sg3 + endingsPastIndef ! <P2,Sg> ! h ;
pastSg3 : Str = sg3 + endingsPastIndef ! <P3,Sg> ! h ;
pastPl1 : Str = sg3 + endingsPastIndef ! <P1,Pl> ! h ;
pastPl2 : Str = sg3 + endingsPastIndef ! <P2,Pl> ! h ;
pastPl3 : Str = sg3 + endingsPastIndef ! <P3,Pl> ! h ;
ppart : Str = case sg3 of {
x + "o" + y@("g"|"l") => x+y+"ó" ;
_ + ("ér"|"éz"|"ít") => sg3 + "ő" ;
_ => sg3 + "ó"
} ;
apart : Str = sg3 + harm "va" "ve" ! h
in mkVerbFull sg1 sg2 sg3 pl1 pl2 pl3
pastSg1 pastSg2 pastSg3 pastPl1 pastPl2 pastPl3
inf ppart apart ;
mkVerbFull : (x1,_,_,_,_,_,_,_,_,_,_,_,_,_,x15 : Str) -> Verb =
\sg1,sg2,sg3,pl1,pl2,pl3,pastSg1,pastSg2,pastSg3,pastPl1,pastPl2,pastPl3,inf,ppart,apart -> {
s = table { s = table {
VInf => inf ; VInf => inf ;
VPres P1 Sg => sg1 ; VPres P1 Sg => sg1 ;
@@ -527,15 +448,7 @@ oper
VPres P3 Sg => sg3 ; VPres P3 Sg => sg3 ;
VPres P1 Pl => pl1 ; VPres P1 Pl => pl1 ;
VPres P2 Pl => pl2 ; VPres P2 Pl => pl2 ;
VPres P3 Pl => pl3 ; VPres P3 Pl => pl3
VPast P1 Sg => pastSg1 ;
VPast P2 Sg => pastSg2 ;
VPast P3 Sg => pastSg3 ;
VPast P1 Pl => pastPl1 ;
VPast P2 Pl => pastPl2 ;
VPast P3 Pl => pastPl3 ;
VPresPart => ppart ;
VAdvPart => apart
} ; } ;
sc = SCNom sc = SCNom
} ; } ;
@@ -547,15 +460,7 @@ oper
"vagyunk" "vagyunk"
"vagytok" "vagytok"
"vannak" "vannak"
"voltam" "lenni" ;
"voltál"
"volt"
"voltunk"
"voltatok"
"voltak"
"lenni"
"levő"
"léve" ;
megvan : Verb = copula ** { megvan : Verb = copula ** {
s = \\vf => "meg" + copula.s ! vf ; s = \\vf => "meg" + copula.s ! vf ;
@@ -584,22 +489,8 @@ oper
adv = [] ; adv = [] ;
} ; } ;
insertAdv : VerbPhrase -> SS -> VerbPhrase = \vp,adv -> vp ** {adv = vp.adv ++ adv.s} ; insertAdv : VerbPhrase -> SS -> VerbPhrase = \vp,adv -> vp ** {adv = adv.s} ;
insertAdvSlash : VPSlash -> SS -> VPSlash = \vps,adv -> vps ** {adv = vps.adv ++ adv.s} ; insertAdvSlash : VPSlash -> SS -> VPSlash = \vps,adv -> vps ** {adv = adv.s} ;
infVP : VerbPhrase -> Str = \vp ->
vp.obj ++ vp.adv ++ vp.s ! VInf ;
infVPSlash : VPSlash -> Str = \vps ->
vps.adv ++ vps.s ! Indef ! VInf ;
verbStemFromInf : Str -> Str = \inf ->
case inf of {
stem + "ani" => stem ;
stem + "eni" => stem ;
stem + "ni" => stem ;
_ => inf
} ;
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
-- Cl, S -- Cl, S
@@ -624,11 +515,7 @@ oper
SCDat => Dat } SCDat => Dat }
in linNP' NoPoss subjcase np in linNP' NoPoss subjcase np
++ if_then_Pol p [] "nem" ++ if_then_Pol p [] "nem"
++ case <t,np.agr.p1,np.agr.p2> of { ++ vp.s ! agr2vf np.agr
<Past,p,n> => vp.s ! VPast p n ;
<Fut,p,n> => futureAux Indef p n ++ vp.s ! VInf ;
<_,p,n> => vp.s ! VPres p n
}
++ vp.obj -- ! np.agr ++ vp.obj -- ! np.agr
++ vp.adv ++ vp.adv
++ np.empty -- standard trick for prodrop+metavariable problem ++ np.empty -- standard trick for prodrop+metavariable problem
@@ -636,32 +523,27 @@ oper
-- Relative -- Relative
RP : Type = {s : Gender => Number => Case => Str} ; RP : Type = {s : Number => Case => Str} ;
RClause : Type = {s : Tense => Anteriority => Polarity => Gender => Number => Case => Str} ; RClause : Type = {s : Tense => Anteriority => Polarity => Number => Case => Str} ;
relVP : RP -> VerbPhrase -> RClause = \rp -> relVP' (rp ** {agr=<P3,Sg>}) ; relVP : RP -> VerbPhrase -> RClause = \rp -> relVP' (rp ** {agr=<P3,Sg>}) ;
relVP' : RP ** {agr : Person*Number} -> VerbPhrase -> RClause = \rp,vp -> { relVP' : RP ** {agr : Person*Number} -> VerbPhrase -> RClause = \rp,vp -> {
s = \\t,a,p,g,n,c => let subjcase : Case = case vp.sc of { s = \\t,a,p,n,c => let subjcase : Case = case vp.sc of {
SCNom => Nom ; SCNom => Nom ;
SCDat => Dat } SCDat => Dat }
in rp.s ! g ! n ! subjcase in rp.s ! n ! subjcase
++ if_then_Pol p [] "nem" ++ if_then_Pol p [] "nem"
++ vp.obj -- ! <rp.agr.p1,n> ++ vp.obj -- ! <rp.agr.p1,n>
++ vp.adv ++ vp.adv
++ case <t,rp.agr.p1,n> of { ++ vp.s ! VPres rp.agr.p1 n -- variable by number
<Past,p,n> => vp.s ! VPast p n ;
<Fut,p,n> => futureAux Indef p n ++ vp.s ! VInf ;
<_,p,n> => vp.s ! VPres p n
} -- variable by number
} ; } ;
relSlash : RP -> ClSlash -> RClause = \rp,cls -> { relSlash : RP -> ClSlash -> RClause = \rp,cls -> {
s = \\t,a,p,g,n,c => let objcase : Case = case cls.c2 of { s = \\t,a,p,n,c => let objcase : Case = case cls.c2 of {
Acc => c ; Acc => c ;
_ => cls.c2 _ => cls.c2 }
} in rp.s ! n ! objcase
in rp.s ! g ! n ! objcase
++ cls.s ! t ! a ! p ++ cls.s ! t ! a ! p
} ; } ;
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------

View File

@@ -11,24 +11,16 @@ lin
PredVP = predVP ; PredVP = predVP ;
-- : SC -> VP -> Cl ; -- that she goes is good (Saeed p. 94) -- : SC -> VP -> Cl ; -- that she goes is good (Saeed p. 94)
PredSCVP sc vp = predVP (indeclNP sc.s) vp ; --PredSCVP sc vp = ;
--2 Clauses missing object noun phrases --2 Clauses missing object noun phrases
-- : NP -> VPSlash -> ClSlash ; -- : NP -> VPSlash -> ClSlash ;
SlashVP np vps = predVP np (vps ** {s = vps.s ! Indef ; obj = []}) ; SlashVP np vps = predVP np (vps ** {s = vps.s ! Indef ; obj = []}) ;
-- : ClSlash -> Adv -> ClSlash ; -- (whom) he sees today
AdvSlash cls adv = cls ** {
s = \\t,a,p => cls.s ! t ! a ! p ++ adv.s
} ;
-- : Cl -> Prep -> ClSlash ; -- (with whom) he walks
SlashPrep cl prep = cl ** {
c2 = prep.c ;
s = \\t,a,p => cl.s ! t ! a ! p ++ prep.s
} ;
{- {-
-- : ClSlash -> Adv -> ClSlash ; -- (whom) he sees today
AdvSlash cls adv = cls ** insertAdv adv cls ;
-- SlashPrep : Cl -> Prep -> ClSlash ; -- (with whom) he walks
-- : NP -> VS -> SSlash -> ClSlash ; -- (whom) she says that he loves -- : NP -> VS -> SSlash -> ClSlash ; -- (whom) she says that he loves
-- SlashVS np vs ss = {} ; -- SlashVS np vs ss = {} ;
@@ -39,27 +31,21 @@ lin
} ; } ;
--2 Imperatives --2 Imperatives
-}
-- : VP -> Imp ; -- : VP -> Imp ;
ImpVP vp = { ImpVP vp = {s = \\num,pol => linVP (VImp num pol) Statement vp} ;
s = \\num,pol =>
if_then_Pol pol [] "ne"
++ vp.s ! VPres P2 num
++ vp.obj
++ vp.adv
} ;
-- : Adv -> Imp -> Imp ; --2 Embedded sentences
AdvImp adv imp = {
s = \\num,pol => adv.s ++ imp.s ! num ! pol
} ;
--2 Sentences
-- : S -> SC ; -- : S -> SC ;
EmbedS s = {s = s.s} ; EmbedS s = {s = s.s ! True} ; -- choose subordinate
-- : QS -> SC ; -- : QS -> SC ;
EmbedQS qs = {s = qs.s} ; -- EmbedQS qs = { } ;
-- : VP -> SC ;
EmbedVP vp = {s = infVP vp} ;
-}
--2 Sentences
-- : Temp -> Pol -> Cl -> S ; -- : Temp -> Pol -> Cl -> S ;
UseCl t p cl = { UseCl t p cl = {
@@ -70,7 +56,7 @@ lin
UseQCl t p cl = {s = t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p} ; UseQCl t p cl = {s = t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p} ;
-- : Temp -> Pol -> RCl -> RS ; -- : Temp -> Pol -> RCl -> RS ;
UseRCl t p cl = {s = \\g,n,c => t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p ! g ! n ! c} ; UseRCl t p cl = {s = \\n,c => t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p ! n ! c} ;
-- AdvS : Adv -> S -> S ; -- then I will go home -- AdvS : Adv -> S -> S ; -- then I will go home
AdvS = advS "" ; AdvS = advS "" ;
@@ -79,9 +65,7 @@ lin
ExtAdvS = advS (SOFT_BIND ++ ","); ExtAdvS = advS (SOFT_BIND ++ ",");
-- : S -> Subj -> S -> S ; -- : S -> Subj -> S -> S ;
SSubjS s1 subj s2 = { -- SSubjS s1 subj s2 = AdvS (AK.SubjS subj s2) s1 ;
s = s1.s ++ bindComma ++ subj.s ++ s2.s
} ;
-- : S -> RS -> S ; -- she sleeps, which is good -- : S -> RS -> S ; -- she sleeps, which is good
-- RelS sent rs = advS {s = rs.s ! Sg3 Masc ++ SOFT_BIND ++ ","} sent ; -- RelS sent rs = advS {s = rs.s ! Sg3 Masc ++ SOFT_BIND ++ ","} sent ;

View File

@@ -121,54 +121,21 @@ lin under_Prep = nomAdp "alatt" ;
-- Pron -- Pron
-- Pronouns are closed class, no constructor in ParadigmsHun. -- Pronouns are closed class, no constructor in ParadigmsHun.
i_Pron = pronTable ! <P1,Sg> ** {g = Human} ; i_Pron = pronTable ! <P1,Sg> ;
youPol_Pron, youPol_Pron,
youSg_Pron = pronTable ! <P2,Sg> ** {g = Human} ; youSg_Pron = pronTable ! <P2,Sg> ;
he_Pron, he_Pron,
she_Pron = pronTable ! <P3,Sg> ** {g = Human} ; she_Pron,
it_Pron = pronTable ! <P3,Sg> ; it_Pron = pronTable ! <P3,Sg> ;
we_Pron = pronTable ! <P1,Pl> ** {g = Human} ; we_Pron = pronTable ! <P1,Pl> ;
youPl_Pron = pronTable ! <P2,Pl> ** {g = Human} ; youPl_Pron = pronTable ! <P2,Pl> ;
they_Pron = pronTable ! <P3,Pl> ** {g = Human} ; they_Pron = pronTable ! <P3,Pl> ;
--lin whatPl_IP = ;
--lin whatSg_IP = :
--lin whoPl_IP = ;
--lin whoSg_IP = ;
lin whatPl_IP = emptyNP ** {
s = \\_ => caseTable "mi" "mit" "minek"
"mibe" "miben" "miből"
"mihez" "minél" "mitől"
"mire" "min" "miről"
"miért" "mivel" "mivé" ;
agr = <P3,Pl> ;
objdef = Def
} ;
lin whatSg_IP = emptyNP ** {
s = \\_ => caseTable "mi" "mit" "minek"
"mibe" "miben" "miből"
"mihez" "minél" "mitől"
"mire" "min" "miről"
"miért" "mivel" "mivé" ;
agr = <P3,Sg> ;
objdef = Def
} ;
lin whoPl_IP = emptyNP ** {
s = \\_ => caseTable "ki" "kit" "kinek"
"kibe" "kiben" "kiből"
"kihez" "kinél" "kitől"
"kire" "kin" "kiről"
"kiért" "kivel" "kivé" ;
agr = <P3,Pl> ;
objdef = Def ;
g = Human
} ;
lin whoSg_IP = emptyNP ** {
s = \\_ => caseTable "ki" "kit" "kinek"
"kibe" "kiben" "kiből"
"kihez" "kinél" "kitől"
"kire" "kin" "kiről"
"kiért" "kivel" "kivé" ;
agr = <P3,Pl> ;
objdef = Def ;
g = Human
} ;
------- -------
-- Subj -- Subj

View File

@@ -21,59 +21,48 @@ lin
-- } ; -- } ;
-- : VS -> S -> VP ; -- : VS -> S -> VP ;
ComplVS vs s = useV vs ** { -- ComplVS vs s =
adv = "hogy" ++ s.s -- let vps = useV vs ;
} ; -- subord = SubjS {s=""} s ;
-- in vps ** {} ;
{-
-- : VQ -> QS -> VP ; -- : VQ -> QS -> VP ;
ComplVQ vq qs = useV vq ** { ComplVQ vq qs = ;
adv = qs.s
} ;
-- : VA -> AP -> VP ; -- they become red -- : VA -> AP -> VP ; -- they become red
ComplVA va ap = useV va ** { ComplVA va ap = ResHun.insertObj (CompAP ap).s (useV va) ;
adv = ap.s ! Sg ! Nom ++ ap.compl ! Sg
} ;
-------- --------
-- Slash -- Slash
-}
-- : V2 -> VPSlash -- : V2 -> VPSlash
SlashV2a = ResHun.useVc ; SlashV2a = ResHun.useVc ;
{-
-- : V3 -> NP -> VPSlash ; -- give it (to her) -- : V3 -> NP -> VPSlash ; -- give it (to her)
Slash2V3 v3 np = v3 ** {
adv = np.s ! NoPoss ! v3.c2 ++ np.postmod ;
c2 = v3.c3
} ;
-- : V3 -> NP -> VPSlash ; -- give (it) to her -- : V3 -> NP -> VPSlash ; -- give (it) to her
Slash3V3 v3 np = v3 ** { Slash2V3,
adv = np.s ! NoPoss ! v3.c3 ++ np.postmod ; Slash3V3 = \v3 -> insertObj (useVc3 v3) ;
c2 = v3.c2
} ;
-- : V2S -> S -> VPSlash ; -- answer (to him) that it is good -- : V2S -> S -> VPSlash ; -- answer (to him) that it is good
SlashV2S v2s s = useVc v2s ** { SlashV2S v2s s =
adv = "hogy" ++ s.s let vps = useVc v2s ;
} ; subord = SubjS {s=""} s ;
in vps ** {obj = } ;
-- : V2V -> VP -> VPSlash ; -- beg (her) to go -- : V2V -> VP -> VPSlash ; -- beg (her) to go
SlashV2V v2v vp = useVc v2v ** { SlashV2V v2v vp = ;
adv = infVP vp
} ;
-- : V2Q -> QS -> VPSlash ; -- ask (him) who came -- : V2Q -> QS -> VPSlash ; -- ask (him) who came
SlashV2Q v2q qs = useVc v2q ** { SlashV2Q v2q qs = ;
adv = qs.s
} ;
-- : V2A -> AP -> VPSlash ; -- paint (it) red -- : V2A -> AP -> VPSlash ; -- paint (it) red
SlashV2A v2a ap = useVc v2a ** { SlashV2A v2a ap = useVc v2a ** {
adv = ap.s ! Sg ! Nom ++ ap.compl ! Sg aComp = \\_ => (CompAP ap).aComp ! Sg3 Masc
} ; } ;
-}
-- : VPSlash -> NP -> VP -- : VPSlash -> NP -> VP
ComplSlash = insertObj ; ComplSlash = insertObj ;
{- {-
@@ -100,27 +89,19 @@ lin
-- : VPSlash -> Adv -> VPSlash ; -- use (it) here -- : VPSlash -> Adv -> VPSlash ; -- use (it) here
AdvVPSlash = insertAdvSlash ; AdvVPSlash = insertAdvSlash ;
{-
-- : VP -> Adv -> VP ; -- sleep , even though ... -- : VP -> Adv -> VP ; -- sleep , even though ...
ExtAdvVP vp adv = vp ** { ExtAdvVP vp adv = vp ** { } ;
adv = vp.adv ++ bindComma ++ adv.s
} ;
-- : AdV -> VP -> VP ; -- always sleep -- : AdV -> VP -> VP ; -- always sleep
AdVVP adv vp = vp ** { AdVVP adv vp = vp ** { } ;
s = \\vf => adv.s ++ vp.s ! vf
} ;
-- : AdV -> VPSlash -> VPSlash ; -- always use (it) -- : AdV -> VPSlash -> VPSlash ; -- always use (it)
AdVVPSlash adv vps = vps ** { AdVVPSlash adv vps = vps ** { } ;
s = \\o,vf => adv.s ++ vps.s ! o ! vf
} ;
-- : VP -> Prep -> VPSlash ; -- live in (it) -- : VP -> Prep -> VPSlash ; -- live in (it)
VPSlashPrep vp prep = vp ** { VPSlashPrep vp prep =
s = \\_ => vp.s ; -}
adv = vp.obj ++ vp.adv ++ prep.s ;
c2 = prep.c
} ;
--2 Complements to copula --2 Complements to copula
@@ -131,9 +112,7 @@ lin
s = \\vf => case vf of { s = \\vf => case vf of {
VPres P3 n => ap.s ! n ! Nom ++ ap.compl ! n ; VPres P3 n => ap.s ! n ! Nom ++ ap.compl ! n ;
VPres _ n => ap.s ! n ! Nom ++ copula.s ! vf ++ ap.compl ! n ; VPres _ n => ap.s ! n ! Nom ++ copula.s ! vf ++ ap.compl ! n ;
VPast _ n => ap.s ! n ! Nom ++ copula.s ! vf ++ ap.compl ! n ; _ => ap.s ! Sg ! Nom ++ copula.s ! vf ++ ap.compl ! Sg } ;
_ => ap.s ! Sg ! Nom ++ copula.s ! vf ++ ap.compl ! Sg
} ;
} ; } ;
-- : CN -> Comp ; -- : CN -> Comp ;
@@ -185,13 +164,9 @@ insertObj : ResHun.VPSlash -> NounPhrase -> VerbPhrase = \vps,np -> vps ** {
<SCDat,Nom> => <SCDat,Nom> =>
let agr : Person*Number = case vf of { let agr : Person*Number = case vf of {
VPres p n => <p,n> ; VPres p n => <p,n> ;
VPast p n => <p,n> ;
_ => <P3,Sg> } ; _ => <P3,Sg> } ;
objvf : VForm = case vf of {
VPast _ _ => VPast np.agr.p1 np.agr.p2 ;
_ => VPres np.agr.p1 np.agr.p2 } ;
in np.s ! Poss agr.p1 agr.p2 ! vps.c2 in np.s ! Poss agr.p1 agr.p2 ! vps.c2
++ vps.s ! np.objdef ! objvf ; ++ vps.s ! np.objdef ! agr2vf np.agr ;
-- Default case: Verb agrees in person and number with subject -- Default case: Verb agrees in person and number with subject
_ => vps.s ! np.objdef ! vf } ; _ => vps.s ! np.objdef ! vf } ;

View File

@@ -1,69 +1,13 @@
concrete CatKaz of Cat = CommonX ** open Prelude,ResKaz in { concrete CatKaz of Cat = CommonX ** open ResKaz in {
lincat A = {s : Str} ;
lincat A2 = A ** {c2 : Compl} ; lincat N = Noun ;
lincat ACard = {s : Str} ; lincat N2 = Noun ** {c2 : Compl} ;
lincat AP = {s : Str} ; lincat N3 = Noun ** {c2,c3 : Compl} ;
lincat CN = {s : Case => Str} ; lincat V, VA, VV, VS, VQ = Verb ;
lincat Card = {s : Str} ; lincat V2, V2S, V2Q = Verb ** {c2 : Compl} ;
lincat Cl = {infinitive : Case => Str} ; lincat V3, V2A, V2V = Verb ** {c2,c3 : Compl} ;
lincat ClSlash = {s : Str} ; lincat A = {s : Str} ;
lincat Comp = {s : Str} ; lincat A2 = A ** {c2 : Compl} ;
lincat Conj = {s : Str} ; lincat Prep = Compl ;
lincat DAP = {s : Str} ;
lincat Decimal = {s : Str} ;
lincat Det = {s : Str; n : Number} ;
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 = {s : Case => Number => Str;
poss : Number => Person => Number => Str} ;
lincat N2 = {s : Case => Number => Str;
poss : Number => Person => Number => Str; c2 : {s : Str}} ;
lincat N3 = {s : Case => Number => Str;
poss : Number => Person => Number => Str; c2 : {s : Str};
c3 : {s : Str}} ;
lincat NP = {s : Case => Str} ;
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 ;
lincat Pron = {s : Str} ;
lincat QCl = {s : Str} ;
lincat QS = {s : Str} ;
lincat Quant = {s : Str} ;
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 = {infinitive : Case => Str;
indicative : {fut : Case => Str;
pres : {progressive : Polarity => Case => Str;
noAspect : Polarity => Case => Str};
past : {perfect : Polarity => Case => Str;
progressive : Polarity => Case => Str;
noAspect : Polarity => Case => Str}};
subjunctive : Person => Case => Str} ;
lincat VPSlash = {infinitive : Str;
indicative : {fut : Str;
pres : {progressive : Polarity => Person => Number => Str;
noAspect : Polarity => Person => Number => Str};
past : {perfect : Polarity => Person => Number => Str;
progressive : Polarity => Person => Number => Str;
noAspect : Polarity => Person => Number => Str}};
imperative : Polarity => Formality => Number => Str;
subjunctive : Person => Number => Str} ;
} }

View File

@@ -34,118 +34,118 @@ lin InflectionV, InflectionV2, InflectionV3, InflectionV2V, InflectionV2S,
InflectionVQ, InflectionVA = \x -> { InflectionVQ, InflectionVA = \x -> {
t="v" ; t="v" ;
s1="" ; s1="" ;
s2=heading2 "Infinitive" ++ paragraph (x.infinitive) ++ s2=heading2 "Infinitive" ++ paragraph (x.Infinitive) ++
-- tr (th "Indicative" ++ th "Fut" ++ td (x.indicative.Fut)) ++ -- tr (th "Indicative" ++ th "Fut" ++ td (x.Indicative.Fut)) ++
heading2 "Present"++ heading2 "Present"++
frameTable ( frameTable (
tr (intagAttr "th" "rowspan=\"6\"" "Pos" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.indicative.pres.noAspect ! Pos ! P1 ! Sg)) ++ tr (intagAttr "th" "rowspan=\"6\"" "Pos" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.Indicative.Pres.noAspect ! Pos ! P1 ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.pres.noAspect ! Pos ! P1 ! Pl)) ++ tr (th "Pl" ++ td (x.Indicative.Pres.noAspect ! Pos ! P1 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.indicative.pres.noAspect ! Pos ! P2 Informal ! Sg)) ++ tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.Indicative.Pres.noAspect ! Pos ! P2 Informal ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.pres.noAspect ! Pos ! P2 Informal ! Pl)) ++ tr (th "Pl" ++ td (x.Indicative.Pres.noAspect ! Pos ! P2 Informal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.indicative.pres.noAspect ! Pos ! P2 Formal ! Sg)) ++ tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.Indicative.Pres.noAspect ! Pos ! P2 Formal ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.pres.noAspect ! Pos ! P2 Formal ! Pl)) ++ tr (th "Pl" ++ td (x.Indicative.Pres.noAspect ! Pos ! P2 Formal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.indicative.pres.noAspect ! Pos ! P3 ! Sg)) ++ tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.Indicative.Pres.noAspect ! Pos ! P3 ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.pres.noAspect ! Pos ! P3 ! Pl)) ++ tr (th "Pl" ++ td (x.Indicative.Pres.noAspect ! Pos ! P3 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"6\"" "Neg" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.indicative.pres.noAspect ! Neg ! P1 ! Sg)) ++ tr (intagAttr "th" "rowspan=\"6\"" "Neg" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.Indicative.Pres.noAspect ! Neg ! P1 ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.pres.noAspect ! Neg ! P1 ! Pl)) ++ tr (th "Pl" ++ td (x.Indicative.Pres.noAspect ! Neg ! P1 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.indicative.pres.noAspect ! Neg ! P2 Informal ! Sg)) ++ tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.Indicative.Pres.noAspect ! Neg ! P2 Informal ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.pres.noAspect ! Neg ! P2 Formal ! Pl)) ++ tr (th "Pl" ++ td (x.Indicative.Pres.noAspect ! Neg ! P2 Formal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.indicative.pres.noAspect ! Neg ! P2 Formal ! Sg)) ++ tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.Indicative.Pres.noAspect ! Neg ! P2 Formal ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.pres.noAspect ! Neg ! P2 Formal ! Pl)) ++ tr (th "Pl" ++ td (x.Indicative.Pres.noAspect ! Neg ! P2 Formal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.indicative.pres.noAspect ! Neg ! P3 ! Sg)) ++ tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.Indicative.Pres.noAspect ! Neg ! P3 ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.pres.noAspect ! Neg ! P3 ! Pl))) ++ tr (th "Pl" ++ td (x.Indicative.Pres.noAspect ! Neg ! P3 ! Pl))) ++
heading2 "Present Progressive"++ heading2 "Present Progressive"++
frameTable ( frameTable (
tr (intagAttr "th" "rowspan=\"6\"" "Pos" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.indicative.pres.progressive ! Pos ! P1 ! Sg))++ tr (intagAttr "th" "rowspan=\"6\"" "Pos" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.Indicative.Pres.Progressive ! Pos ! P1 ! Sg))++
tr (th "Pl" ++ td (x.indicative.pres.progressive ! Pos ! P1 ! Pl)) ++ tr (th "Pl" ++ td (x.Indicative.Pres.Progressive ! Pos ! P1 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.indicative.pres.progressive ! Pos ! P2 Informal ! Sg)) ++ tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.Indicative.Pres.Progressive ! Pos ! P2 Informal ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.pres.progressive ! Pos ! P2 Informal ! Pl)) ++ tr (th "Pl" ++ td (x.Indicative.Pres.Progressive ! Pos ! P2 Informal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.indicative.pres.progressive ! Pos ! P2 Formal ! Sg)) ++ tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.Indicative.Pres.Progressive ! Pos ! P2 Formal ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.pres.progressive ! Pos ! P2 Formal ! Pl)) ++ tr (th "Pl" ++ td (x.Indicative.Pres.Progressive ! Pos ! P2 Formal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.indicative.pres.progressive ! Pos ! P3 ! Sg)) ++ tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.Indicative.Pres.Progressive ! Pos ! P3 ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.pres.progressive ! Pos ! P3 ! Pl)) ++ tr (th "Pl" ++ td (x.Indicative.Pres.Progressive ! Pos ! P3 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"6\"" "Neg" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.indicative.pres.progressive ! Neg ! P1 ! Sg)) ++ tr (intagAttr "th" "rowspan=\"6\"" "Neg" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.Indicative.Pres.Progressive ! Neg ! P1 ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.pres.progressive ! Neg ! P1 ! Pl)) ++ tr (th "Pl" ++ td (x.Indicative.Pres.Progressive ! Neg ! P1 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.indicative.pres.progressive ! Neg ! P2 Informal ! Sg)) ++ tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.Indicative.Pres.Progressive ! Neg ! P2 Informal ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.pres.progressive ! Neg ! P2 Informal ! Pl)) ++ tr (th "Pl" ++ td (x.Indicative.Pres.Progressive ! Neg ! P2 Informal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.indicative.pres.progressive ! Neg ! P2 Formal ! Sg)) ++ tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.Indicative.Pres.Progressive ! Neg ! P2 Formal ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.pres.progressive ! Neg ! P2 Formal ! Pl)) ++ tr (th "Pl" ++ td (x.Indicative.Pres.Progressive ! Neg ! P2 Formal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.indicative.pres.progressive ! Neg ! P3 ! Sg)) ++ tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.Indicative.Pres.Progressive ! Neg ! P3 ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.pres.progressive ! Neg ! P3 ! Pl))) ++ tr (th "Pl" ++ td (x.Indicative.Pres.Progressive ! Neg ! P3 ! Pl))) ++
heading2 "Past" ++ heading2 "Past" ++
frameTable ( frameTable (
tr (intagAttr "th" "rowspan=\"6\"" "Pos" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.indicative.past.noAspect ! Pos ! P1 ! Sg)) ++ tr (intagAttr "th" "rowspan=\"6\"" "Pos" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.Indicative.Past.noAspect ! Pos ! P1 ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.noAspect ! Pos ! P1 ! Pl)) ++ tr (th "Pl" ++ td (x.Indicative.Past.noAspect ! Pos ! P1 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.indicative.past.noAspect ! Pos ! P2 Informal ! Sg)) ++ tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.Indicative.Past.noAspect ! Pos ! P2 Informal ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.noAspect ! Pos ! P2 Informal ! Pl)) ++ tr (th "Pl" ++ td (x.Indicative.Past.noAspect ! Pos ! P2 Informal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.indicative.past.noAspect ! Pos ! P2 Formal ! Sg)) ++ tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.Indicative.Past.noAspect ! Pos ! P2 Formal ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.noAspect ! Pos ! P2 Formal ! Pl)) ++ tr (th "Pl" ++ td (x.Indicative.Past.noAspect ! Pos ! P2 Formal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.indicative.past.noAspect ! Pos ! P3 ! Sg)) ++ tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.Indicative.Past.noAspect ! Pos ! P3 ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.noAspect ! Pos ! P3 ! Pl)) ++ tr (th "Pl" ++ td (x.Indicative.Past.noAspect ! Pos ! P3 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"6\"" "Neg" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.indicative.past.noAspect ! Neg ! P1 ! Sg)) ++ tr (intagAttr "th" "rowspan=\"6\"" "Neg" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.Indicative.Past.noAspect ! Neg ! P1 ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.noAspect ! Neg ! P1 ! Pl)) ++ tr (th "Pl" ++ td (x.Indicative.Past.noAspect ! Neg ! P1 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.indicative.past.noAspect ! Neg ! P2 Informal ! Sg)) ++ tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.Indicative.Past.noAspect ! Neg ! P2 Informal ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.noAspect ! Neg ! P2 Informal ! Pl)) ++ tr (th "Pl" ++ td (x.Indicative.Past.noAspect ! Neg ! P2 Informal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.indicative.past.noAspect ! Neg ! P2 Formal ! Sg)) ++ tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.Indicative.Past.noAspect ! Neg ! P2 Formal ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.noAspect ! Neg ! P2 Formal ! Pl)) ++ tr (th "Pl" ++ td (x.Indicative.Past.noAspect ! Neg ! P2 Formal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.indicative.past.noAspect ! Neg ! P3 ! Sg)) ++ tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.Indicative.Past.noAspect ! Neg ! P3 ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.noAspect ! Neg ! P3 ! Pl))) ++ tr (th "Pl" ++ td (x.Indicative.Past.noAspect ! Neg ! P3 ! Pl))) ++
heading2 "Past Perfect" ++ heading2 "Past Perfect" ++
frameTable ( frameTable (
tr (intagAttr "th" "rowspan=\"6\"" "Pos" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.indicative.past.perfect ! Pos ! P1 ! Sg)) ++ tr (intagAttr "th" "rowspan=\"6\"" "Pos" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.Indicative.Past.Perfect ! Pos ! P1 ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.perfect ! Pos ! P1 ! Pl)) ++ tr (th "Pl" ++ td (x.Indicative.Past.Perfect ! Pos ! P1 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.indicative.past.perfect ! Pos ! P2 Informal ! Sg)) ++ tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.Indicative.Past.Perfect ! Pos ! P2 Informal ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.perfect ! Pos ! P2 Informal ! Pl)) ++ tr (th "Pl" ++ td (x.Indicative.Past.Perfect ! Pos ! P2 Informal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.indicative.past.perfect ! Pos ! P2 Formal ! Sg)) ++ tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.Indicative.Past.Perfect ! Pos ! P2 Formal ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.perfect ! Pos ! P2 Formal ! Pl)) ++ tr (th "Pl" ++ td (x.Indicative.Past.Perfect ! Pos ! P2 Formal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.indicative.past.perfect ! Pos ! P3 ! Sg)) ++ tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.Indicative.Past.Perfect ! Pos ! P3 ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.perfect ! Pos ! P3 ! Pl)) ++ tr (th "Pl" ++ td (x.Indicative.Past.Perfect ! Pos ! P3 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"6\"" "Neg" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.indicative.past.perfect ! Neg ! P1 ! Sg)) ++ tr (intagAttr "th" "rowspan=\"6\"" "Neg" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.Indicative.Past.Perfect ! Neg ! P1 ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.perfect ! Neg ! P1 ! Pl)) ++ tr (th "Pl" ++ td (x.Indicative.Past.Perfect ! Neg ! P1 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.indicative.past.perfect ! Neg ! P2 Informal ! Sg)) ++ tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.Indicative.Past.Perfect ! Neg ! P2 Informal ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.perfect ! Neg ! P2 Informal ! Pl)) ++ tr (th "Pl" ++ td (x.Indicative.Past.Perfect ! Neg ! P2 Informal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.indicative.past.perfect ! Neg ! P2 Formal ! Sg)) ++ tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.Indicative.Past.Perfect ! Neg ! P2 Formal ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.perfect ! Neg ! P2 Formal ! Pl)) ++ tr (th "Pl" ++ td (x.Indicative.Past.Perfect ! Neg ! P2 Formal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.indicative.past.perfect ! Neg ! P3 ! Sg)) ++ tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.Indicative.Past.Perfect ! Neg ! P3 ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.perfect ! Neg ! P3 ! Pl))) ++ tr (th "Pl" ++ td (x.Indicative.Past.Perfect ! Neg ! P3 ! Pl))) ++
heading2 "Past Progressive" ++ heading2 "Past Progressive" ++
frameTable ( frameTable (
tr (intagAttr "th" "rowspan=\"6\"" "Pos" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.indicative.past.progressive ! Pos ! P1 ! Sg)) ++ tr (intagAttr "th" "rowspan=\"6\"" "Pos" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.Indicative.Past.Progressive ! Pos ! P1 ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.progressive ! Pos ! P1 ! Pl)) ++ tr (th "Pl" ++ td (x.Indicative.Past.Progressive ! Pos ! P1 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.indicative.past.progressive ! Pos ! P2 Informal ! Sg)) ++ tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.Indicative.Past.Progressive ! Pos ! P2 Informal ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.progressive ! Pos ! P2 Informal ! Pl)) ++ tr (th "Pl" ++ td (x.Indicative.Past.Progressive ! Pos ! P2 Informal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.indicative.past.progressive ! Pos ! P2 Formal ! Sg)) ++ tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.Indicative.Past.Progressive ! Pos ! P2 Formal ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.progressive ! Pos ! P2 Formal ! Pl)) ++ tr (th "Pl" ++ td (x.Indicative.Past.Progressive ! Pos ! P2 Formal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.indicative.past.progressive ! Pos ! P3 ! Sg)) ++ tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.Indicative.Past.Progressive ! Pos ! P3 ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.progressive ! Pos ! P3 ! Pl)) ++ tr (th "Pl" ++ td (x.Indicative.Past.Progressive ! Pos ! P3 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"6\"" "Neg" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.indicative.past.progressive ! Neg ! P1 ! Sg)) ++ tr (intagAttr "th" "rowspan=\"6\"" "Neg" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.Indicative.Past.Progressive ! Neg ! P1 ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.progressive ! Neg ! P1 ! Pl)) ++ tr (th "Pl" ++ td (x.Indicative.Past.Progressive ! Neg ! P1 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.indicative.past.progressive ! Neg ! P2 Informal ! Sg)) ++ tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.Indicative.Past.Progressive ! Neg ! P2 Informal ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.progressive ! Neg ! P2 Informal ! Pl)) ++ tr (th "Pl" ++ td (x.Indicative.Past.Progressive ! Neg ! P2 Informal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.indicative.past.progressive ! Neg ! P2 Formal ! Sg)) ++ tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.Indicative.Past.Progressive ! Neg ! P2 Formal ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.progressive ! Neg ! P2 Formal ! Pl)) ++ tr (th "Pl" ++ td (x.Indicative.Past.Progressive ! Neg ! P2 Formal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.indicative.past.progressive ! Neg ! P3 ! Sg)) ++ tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.Indicative.Past.Progressive ! Neg ! P3 ! Sg)) ++
tr (th "Pl" ++ td (x.indicative.past.progressive ! Neg ! P3 ! Pl))) ++ tr (th "Pl" ++ td (x.Indicative.Past.Progressive ! Neg ! P3 ! Pl))) ++
heading2 "Imperative" ++ heading2 "Imperative" ++
frameTable ( frameTable (
tr (intagAttr "th" "rowspan=\"4\"" "Pos" ++ intagAttr "th" "rowspan=\"2\"" "Informal" ++ th "Sg" ++ td (x.imperative ! Pos ! Informal ! Sg)) ++ tr (intagAttr "th" "rowspan=\"4\"" "Pos" ++ intagAttr "th" "rowspan=\"2\"" "Informal" ++ th "Sg" ++ td (x.Imperative_Jussive ! Pos ! Informal ! Sg)) ++
tr (th "Pl" ++ td (x.imperative ! Pos ! Informal ! Pl)) ++ tr (th "Pl" ++ td (x.Imperative_Jussive ! Pos ! Informal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "Formal" ++ th "Sg" ++ td (x.imperative ! Pos ! Formal ! Sg)) ++ tr (intagAttr "th" "rowspan=\"2\"" "Formal" ++ th "Sg" ++ td (x.Imperative_Jussive ! Pos ! Formal ! Sg)) ++
tr (th "Pl" ++ td (x.imperative ! Pos ! Formal ! Pl)) ++ tr (th "Pl" ++ td (x.Imperative_Jussive ! Pos ! Formal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"4\"" "Neg" ++ intagAttr "th" "rowspan=\"2\"" "Informal" ++ th "Sg" ++ td (x.imperative ! Neg ! Informal ! Sg)) ++ tr (intagAttr "th" "rowspan=\"4\"" "Neg" ++ intagAttr "th" "rowspan=\"2\"" "Informal" ++ th "Sg" ++ td (x.Imperative_Jussive ! Neg ! Informal ! Sg)) ++
tr (th "Pl" ++ td (x.imperative ! Neg ! Informal ! Pl)) ++ tr (th "Pl" ++ td (x.Imperative_Jussive ! Neg ! Informal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "Formal" ++ th "Sg" ++ td (x.imperative ! Neg ! Formal ! Sg)) ++ tr (intagAttr "th" "rowspan=\"2\"" "Formal" ++ th "Sg" ++ td (x.Imperative_Jussive ! Neg ! Formal ! Sg)) ++
tr (th "Pl" ++ td (x.imperative ! Neg ! Formal ! Pl))) ++ tr (th "Pl" ++ td (x.Imperative_Jussive ! Neg ! Formal ! Pl))) ++
heading2 "Subjunctive" ++ heading2 "Subjunctive" ++
frameTable ( frameTable (
tr (intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.subjunctive ! P1 ! Sg)) ++ tr (intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.Subjunctive ! P1 ! Sg)) ++
tr (th "Pl" ++ td (x.subjunctive ! P1 ! Pl)) ++ tr (th "Pl" ++ td (x.Subjunctive ! P1 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.subjunctive ! P2 Informal ! Sg)) ++ tr (intagAttr "th" "rowspan=\"2\"" "P2 Informal" ++ th "Sg" ++ td (x.Subjunctive ! P2 Informal ! Sg)) ++
tr (th "Pl" ++ td (x.subjunctive ! P2 Informal ! Pl)) ++ tr (th "Pl" ++ td (x.Subjunctive ! P2 Informal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.subjunctive ! P2 Formal ! Sg)) ++ tr (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.Subjunctive ! P2 Formal ! Sg)) ++
tr (th "Pl" ++ td (x.subjunctive ! P2 Formal ! Pl)) ++ tr (th "Pl" ++ td (x.Subjunctive ! P2 Formal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.subjunctive ! P3 ! Sg)) ++ tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.Subjunctive ! P3 ! Sg)) ++
tr (th "Pl" ++ td (x.subjunctive ! P3 ! Pl))) ; tr (th "Pl" ++ td (x.Subjunctive ! P3 ! Pl))) ;
s3=[] s3=[]
} ; } ;

File diff suppressed because it is too large Load Diff

View File

@@ -81,12 +81,12 @@ oper mkNoun : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str
param Polarity = Pos | Neg ; param Polarity = Pos | Neg ;
oper Verb = {infinitive: Str; indicative: {fut: Str; pres: {progressive: Polarity => Person => Number => Str; noAspect: Polarity => Person => Number => Str}; past: {perfect: Polarity => Person => Number => Str; progressive: Polarity => Person => Number => Str; noAspect: Polarity => Person => Number => Str}}; imperative: Polarity => Formality => Number => Str; subjunctive: Person => Number => Str} ; -- 113 oper Verb = {Infinitive: Str; Indicative: {Fut: Str; Pres: {Progressive: Polarity => Person => Number => Str; noAspect: Polarity => Person => Number => Str}; Past: {Perfect: Polarity => Person => Number => Str; Progressive: Polarity => Person => Number => Str; noAspect: Polarity => Person => Number => Str}}; Imperative_Jussive: Polarity => Formality => Number => Str; Subjunctive: Person => Number => Str} ; -- 113
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,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f62,f63,f64,f65,f66,f67,f68,f69,f70,f71,f72,f73,f74,f75,f76,f77,f78,f79,f80,f81,f82,f83,f84,f85,f86,f87,f88,f89,f90,f91,f92,f93,f94,f95,f96,f97,f98 -> \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,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f62,f63,f64,f65,f66,f67,f68,f69,f70,f71,f72,f73,f74,f75,f76,f77,f78,f79,f80,f81,f82,f83,f84,f85,f86,f87,f88,f89,f90,f91,f92,f93,f94,f95,f96,f97,f98 ->
{ infinitive = f1 ; { Infinitive = f1 ;
indicative = { fut = f2 ; Indicative = { Fut = f2 ;
pres = { progressive = table { Pres = { Progressive = table {
Pos => table { Pos => table {
P1 => table { P1 => table {
Sg => f3 ; Sg => f3 ;
@@ -163,7 +163,7 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_
} }
} }
} ; } ;
past = { perfect = table { Past = { Perfect = table {
Pos => table { Pos => table {
P1 => table { P1 => table {
Sg => f35 ; Sg => f35 ;
@@ -201,7 +201,7 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_
} }
} }
} ; } ;
progressive = table { Progressive = table {
Pos => table { Pos => table {
P1 => table { P1 => table {
Sg => f51 ; Sg => f51 ;
@@ -279,7 +279,7 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_
} }
} }
} ; } ;
imperative = table { Imperative_Jussive = table {
Pos => table { Pos => table {
Informal => table { Informal => table {
Sg => f83 ; Sg => f83 ;
@@ -301,7 +301,7 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_
} }
} }
} ; } ;
subjunctive = table { Subjunctive = table {
P1 => table { P1 => table {
Sg => f91 ; Sg => f91 ;
Pl => f92 Pl => f92

View File

@@ -1,6 +1,6 @@
--# -path=.:abstract:common:prelude --# -path=.:abstract:common:prelude
concrete CatLav of Cat = CommonX - [Adv, CAdv, Voc] ** open ResLav, Prelude in { concrete CatLav of Cat = CommonX - [Adv, CAdv] ** open ResLav, Prelude in {
flags flags
@@ -110,17 +110,6 @@ lincat
N3 = Noun ** {prep1, prep2 : Preposition ; isPre1, isPre2 : Bool} ; N3 = Noun ** {prep1, prep2 : Preposition ; isPre1, isPre2 : Bool} ;
-- TODO Make most proper nouns more similar to nouns:
-- (1) given names GN should have both numbers (to fit with Tēzaurs and to be
-- able to express that there are multiple people in the room with the
-- same name)
-- (2) family names SN being inflected on gender doesn't fit neither with
-- Tēzaurs, nor with the fact that for some masc surnames there are
-- multiple legaly valid fem variants
-- (3) if PN is meant to be generic proper noun, it might also be inflected
-- in number
-- In general Latvian tends to make every noun inflectable in all cases/numbers,
-- the plural-only placenames like "Cēsis" is the one very stable exception.
PN,LN = ProperNoun ; PN,LN = ProperNoun ;
GN = {s : Case => Str ; gend : Gender} ; GN = {s : Case => Str ; gend : Gender} ;
SN = {s : Gender => Case => Str; pl : Case => Str} ; SN = {s : Gender => Case => Str; pl : Case => Str} ;

View File

@@ -80,8 +80,7 @@ oper
mkNounByDeclPal : Str -> Declension -> Bool -> Noun = \lemma,decl,pal -> mkNounByDeclPal : Str -> Declension -> Bool -> Noun = \lemma,decl,pal ->
case decl of { case decl of {
D0|D1|D2|D3 => mkNounByGendDeclPal lemma Masc decl pal ; D0|D1|D2|D3 => mkNounByGendDeclPal lemma Masc decl pal ;
D4|D5|D6|DR => mkNounByGendDeclPal lemma Fem decl pal ; D4|D5|D6|DR => mkNounByGendDeclPal lemma Fem decl pal
DG => mkNounByGendDeclPal nonExist Fem decl pal -- FIX ME REMAKE
} ; } ;
-- Specified gender and declension; default palatalization -- Specified gender and declension; default palatalization
@@ -98,8 +97,7 @@ oper
D4 => mkNoun_D4 lemma gend ; D4 => mkNoun_D4 lemma gend ;
D5 => mkNoun_D5 lemma gend pal ; D5 => mkNoun_D5 lemma gend pal ;
D6 => mkNoun_D6 lemma gend pal ; D6 => mkNoun_D6 lemma gend pal ;
DR => mkNoun_DR lemma ; DR => mkNoun_DR lemma
DG => mkNoun_DR nonExist -- FIX ME REMAKE
} ; } ;
-- Indeclinable noun -- Indeclinable noun

View File

@@ -43,15 +43,13 @@ oper
mkRegVerb : Str -> Conjugation -> Verb_TMP = \lemma,conj -> mkRegVerb : Str -> Conjugation -> Verb_TMP = \lemma,conj ->
case conj of { case conj of {
C2 => mkVerb_C2 lemma ; C2 => mkVerb_C2 lemma ;
C3 => mkVerb_C3 lemma ; C3 => mkVerb_C3 lemma
C1|CI => mkVerb_C3 nonExist -- FIX ME REMAKE
} ; } ;
mkReflVerb : Str -> Conjugation -> Verb_TMP = \lemma,conj -> mkReflVerb : Str -> Conjugation -> Verb_TMP = \lemma,conj ->
case conj of { case conj of {
C2 => mkVerb_C2_Refl lemma ; C2 => mkVerb_C2_Refl lemma ;
C3 => mkVerb_C3_Refl lemma ; C3 => mkVerb_C3_Refl lemma
C1|CI => mkVerb_C3_Refl nonExist -- FIX ME REMAKE
} ; } ;
filter_Neg : Verb_TMP -> Verb_TMP = \full -> { filter_Neg : Verb_TMP -> Verb_TMP = \full -> {

View File

@@ -1,574 +0,0 @@
--# -path=.:abstract:common:prelude
-- Contents of this file are automatically ported paradigms from
-- https://github.com/LUMII-AILab/Morphology/blob/master/src/main/resources/Lexicon_v2.xml
-- NB: Do NOT edit this without consulting lauma@ailab.lv or normundsg@ailab.lv
-- Otherwise your changes might get accidentally revoked!
resource PortedMorphoParadigmsLav = open PortedMorphoStemchangesLav, ResLav in {
flags coding = utf8 ;
oper
noun_1a_fromStems : Str -> Noun = \stem ->
{
s = table {
Pl => table {
Acc => stem + "us" ;
Dat => stem + "iem" ;
Loc => stem + "os" ;
Nom => stem + "i" ;
Voc => stem + "i" ;
Gen => stem + "u"
} ;
Sg => table {
Acc => stem + "u" ;
Dat => stem + "am" ;
Loc => stem + "ā" ;
Nom => stem + "s" ;
Voc => variants { stem + "s" ; stem + "" } ;
Gen => stem + "a"
}
} ;
gend = Masc
} ;
noun_1a_fromLemma : Str -> Noun = \lemma ->
case lemma of {
stem + "s" => noun_1a_fromStems stem ;
_ => Predef.error ("noun_1a_fromLemma is only applicable for words that end in -s, tried to apply to" ++ lemma)
} ;
noun_1a_fromNomPl : Str -> Noun = \lemma ->
case lemma of {
stem + "i" => noun_1a_fromStems stem ;
_ => Predef.error ("noun_1a_fromNomPl is only applicable for words that end in -i, tried to apply to" ++ lemma)
} ;
noun_1b_fromStems : Str -> Noun = \stem ->
{
s = table {
Pl => table {
Acc => stem + "us" ;
Dat => stem + "iem" ;
Loc => stem + "os" ;
Nom => stem + "i" ;
Voc => stem + "i" ;
Gen => stem + "u"
} ;
Sg => table {
Acc => stem + "u" ;
Dat => stem + "am" ;
Loc => stem + "ā" ;
Nom => stem + "š" ;
Voc => variants { stem + "š" ; stem + "" } ;
Gen => stem + "a"
}
} ;
gend = Masc
} ;
noun_1b_fromLemma : Str -> Noun = \lemma ->
case lemma of {
stem + "š" => noun_1b_fromStems stem ;
_ => Predef.error ("noun_1b_fromLemma is only applicable for words that end in -š, tried to apply to" ++ lemma)
} ;
noun_1b_fromNomPl : Str -> Noun = \lemma ->
case lemma of {
stem + "i" => noun_1b_fromStems stem ;
_ => Predef.error ("noun_1b_fromNomPl is only applicable for words that end in -i, tried to apply to" ++ lemma)
} ;
noun_2a_fromStems : Str -> Noun = \stem ->
{
s = table {
Pl => table {
Acc => stemchangeSimple 1 stem + "us" ;
Dat => stemchangeSimple 1 stem + "iem" ;
Loc => stemchangeSimple 1 stem + "os" ;
Nom => stemchangeSimple 1 stem + "i" ;
Voc => stemchangeSimple 1 stem + "i" ;
Gen => stemchangeSimple 1 stem + "u"
} ;
Sg => table {
Acc => stem + "i" ;
Dat => stem + "im" ;
Loc => stem + "ī" ;
Nom => stem + "is" ;
Voc => stem + "i" ;
Gen => stemchangeSimple 1 stem + "a"
}
} ;
gend = Masc
} ;
noun_2a_fromLemma : Str -> Noun = \lemma ->
case lemma of {
stem + "is" => noun_2a_fromStems stem ;
_ => Predef.error ("noun_2a_fromLemma is only applicable for words that end in -is, tried to apply to" ++ lemma)
} ;
noun_2a_fromNomPl : Str -> Noun = \lemma ->
case lemma of {
stem + "i" => noun_2a_fromStems stem ;
_ => Predef.error ("noun_2a_fromNomPl is only applicable for words that end in -i, tried to apply to" ++ lemma)
} ;
noun_2c_fromStems : Str -> Noun = \stem ->
{
s = table {
Pl => table {
Acc => stemchangeSimple 1 stem + "us" ;
Dat => stemchangeSimple 1 stem + "iem" ;
Loc => stemchangeSimple 1 stem + "os" ;
Nom => stemchangeSimple 1 stem + "i" ;
Voc => stemchangeSimple 1 stem + "i" ;
Gen => stemchangeSimple 1 stem + "u"
} ;
Sg => table {
Acc => stem + "i" ;
Dat => stem + "im" ;
Loc => stem + "ī" ;
Nom => stem + "s" ;
Voc => variants { stem + "" ; stem + "s" } ;
Gen => stem + "s"
}
} ;
gend = Masc
} ;
noun_2c_fromLemma : Str -> Noun = \lemma ->
case lemma of {
stem + "s" => noun_2c_fromStems stem ;
_ => Predef.error ("noun_2c_fromLemma is only applicable for words that end in -s, tried to apply to" ++ lemma)
} ;
noun_2c_fromNomPl : Str -> Noun = \lemma ->
case lemma of {
stem + "i" => noun_2c_fromStems stem ;
_ => Predef.error ("noun_2c_fromNomPl is only applicable for words that end in -i, tried to apply to" ++ lemma)
} ;
noun_2d_fromStems : Str -> Noun = \stem ->
{
s = table {
Pl => table {
Acc => stemchangeSimple 1 stem + "us" ;
Dat => stemchangeSimple 1 stem + "iem" ;
Loc => stemchangeSimple 1 stem + "os" ;
Nom => stemchangeSimple 1 stem + "i" ;
Voc => stemchangeSimple 1 stem + "i" ;
Gen => stemchangeSimple 1 stem + "u"
} ;
Sg => table {
Acc => stem + "i" ;
Dat => stem + "im" ;
Loc => stem + "ī" ;
Nom => stem + "s" ;
Voc => stem + "i" ;
Gen => stemchangeSimple 1 stem + "a"
}
} ;
gend = Masc
} ;
noun_2d_fromLemma : Str -> Noun = \lemma ->
case lemma of {
stem + "s" => noun_2d_fromStems stem ;
_ => Predef.error ("noun_2d_fromLemma is only applicable for words that end in -s, tried to apply to" ++ lemma)
} ;
noun_2d_fromNomPl : Str -> Noun = \lemma ->
case lemma of {
stem + "i" => noun_2d_fromStems stem ;
_ => Predef.error ("noun_2d_fromNomPl is only applicable for words that end in -i, tried to apply to" ++ lemma)
} ;
noun_3m_fromStems : Str -> Noun = \stem ->
{
s = table {
Pl => table {
Acc => stem + "us" ;
Dat => stem + "iem" ;
Loc => stem + "os" ;
Nom => stem + "i" ;
Voc => stem + "i" ;
Gen => stem + "u"
} ;
Sg => table {
Acc => stem + "u" ;
Dat => stem + "um" ;
Loc => stem + "ū" ;
Nom => stem + "us" ;
Voc => variants { stem + "us" ; stem + "u" } ;
Gen => stem + "us"
}
} ;
gend = Masc
} ;
noun_3m_fromLemma : Str -> Noun = \lemma ->
case lemma of {
stem + "us" => noun_3m_fromStems stem ;
_ => Predef.error ("noun_3m_fromLemma is only applicable for words that end in -us, tried to apply to" ++ lemma)
} ;
noun_3m_fromNomPl : Str -> Noun = \lemma ->
case lemma of {
stem + "i" => noun_3m_fromStems stem ;
_ => Predef.error ("noun_3m_fromNomPl is only applicable for words that end in -i, tried to apply to" ++ lemma)
} ;
noun_4f_fromStems : Str -> Noun = \stem ->
{
s = table {
Pl => table {
Acc => stem + "as" ;
Dat => stem + "ām" ;
Loc => stem + "ās" ;
Nom => stem + "as" ;
Voc => stem + "as" ;
Gen => stem + "u"
} ;
Sg => table {
Acc => stem + "u" ;
Dat => stem + "ai" ;
Loc => stem + "ā" ;
Nom => stem + "a" ;
Voc => variants { stem + "a" ; stemchangeSimple 17 stem + "" } ;
Gen => stem + "as"
}
} ;
gend = Fem
} ;
noun_4f_fromLemma : Str -> Noun = \lemma ->
case lemma of {
stem + "a" => noun_4f_fromStems stem ;
_ => Predef.error ("noun_4f_fromLemma is only applicable for words that end in -a, tried to apply to" ++ lemma)
} ;
noun_4f_fromNomPl : Str -> Noun = \lemma ->
case lemma of {
stem + "as" => noun_4f_fromStems stem ;
_ => Predef.error ("noun_4f_fromNomPl is only applicable for words that end in -as, tried to apply to" ++ lemma)
} ;
noun_4m_fromStems : Str -> Noun = \stem ->
{
s = table {
Pl => table {
Acc => stem + "as" ;
Dat => stem + "ām" ;
Loc => stem + "ās" ;
Nom => stem + "as" ;
Voc => stem + "as" ;
Gen => stem + "u"
} ;
Sg => table {
Acc => stem + "u" ;
Dat => stem + "am" ;
Loc => stem + "ā" ;
Nom => stem + "a" ;
Voc => stem + "a" ;
Gen => stem + "as"
}
} ;
gend = Masc
} ;
noun_4m_fromLemma : Str -> Noun = \lemma ->
case lemma of {
stem + "a" => noun_4m_fromStems stem ;
_ => Predef.error ("noun_4m_fromLemma is only applicable for words that end in -a, tried to apply to" ++ lemma)
} ;
noun_4m_fromNomPl : Str -> Noun = \lemma ->
case lemma of {
stem + "as" => noun_4m_fromStems stem ;
_ => Predef.error ("noun_4m_fromNomPl is only applicable for words that end in -as, tried to apply to" ++ lemma)
} ;
noun_5fa_fromStems : Str -> Noun = \stem ->
{
s = table {
Pl => table {
Acc => stem + "es" ;
Dat => stem + "ēm" ;
Loc => stem + "ēs" ;
Nom => stem + "es" ;
Voc => stem + "es" ;
Gen => stemchangeSimple 1 stem + "u"
} ;
Sg => table {
Acc => stem + "i" ;
Dat => stem + "ei" ;
Loc => stem + "ē" ;
Nom => stem + "e" ;
Voc => variants { stem + "e" ; stemchangeSimple 17 stem + "" } ;
Gen => stem + "es"
}
} ;
gend = Fem
} ;
noun_5fa_fromLemma : Str -> Noun = \lemma ->
case lemma of {
stem + "e" => noun_5fa_fromStems stem ;
_ => Predef.error ("noun_5fa_fromLemma is only applicable for words that end in -e, tried to apply to" ++ lemma)
} ;
noun_5fa_fromNomPl : Str -> Noun = \lemma ->
case lemma of {
stem + "es" => noun_5fa_fromStems stem ;
_ => Predef.error ("noun_5fa_fromNomPl is only applicable for words that end in -es, tried to apply to" ++ lemma)
} ;
noun_5ma_fromStems : Str -> Noun = \stem ->
{
s = table {
Pl => table {
Acc => stem + "es" ;
Dat => stem + "ēm" ;
Loc => stem + "ēs" ;
Nom => stem + "es" ;
Voc => stem + "es" ;
Gen => stemchangeSimple 1 stem + "u"
} ;
Sg => table {
Acc => stem + "i" ;
Dat => stem + "em" ;
Loc => stem + "ē" ;
Nom => stem + "e" ;
Voc => stem + "e" ;
Gen => stem + "es"
}
} ;
gend = Masc
} ;
noun_5ma_fromLemma : Str -> Noun = \lemma ->
case lemma of {
stem + "e" => noun_5ma_fromStems stem ;
_ => Predef.error ("noun_5ma_fromLemma is only applicable for words that end in -e, tried to apply to" ++ lemma)
} ;
noun_5ma_fromNomPl : Str -> Noun = \lemma ->
case lemma of {
stem + "es" => noun_5ma_fromStems stem ;
_ => Predef.error ("noun_5ma_fromNomPl is only applicable for words that end in -es, tried to apply to" ++ lemma)
} ;
noun_6a_fromStems : Str -> Noun = \stem ->
{
s = table {
Pl => table {
Acc => stem + "is" ;
Dat => stem + "īm" ;
Loc => stem + "īs" ;
Nom => stem + "is" ;
Voc => stem + "is" ;
Gen => stemchangeSimple 1 stem + "u"
} ;
Sg => table {
Acc => stem + "i" ;
Dat => stem + "ij" ;
Loc => stem + "ī" ;
Nom => stem + "s" ;
Voc => stem + "s" ;
Gen => stem + "s"
}
} ;
gend = Fem
} ;
noun_6a_fromLemma : Str -> Noun = \lemma ->
case lemma of {
stem + "s" => noun_6a_fromStems stem ;
_ => Predef.error ("noun_6a_fromLemma is only applicable for words that end in -s, tried to apply to" ++ lemma)
} ;
noun_6a_fromNomPl : Str -> Noun = \lemma ->
case lemma of {
stem + "is" => noun_6a_fromStems stem ;
_ => Predef.error ("noun_6a_fromNomPl is only applicable for words that end in -is, tried to apply to" ++ lemma)
} ;
noun_3f_fromStems : Str -> Noun = \stem ->
{
s = table {
Pl => table {
Acc => stem + "us" ;
Dat => stem + "ūm" ;
Loc => stem + "ūs" ;
Nom => stem + "us" ;
Voc => stem + "us" ;
Gen => stem + "u"
} ;
Sg => table {
Acc => stem + "u" ;
Dat => stem + "ui" ;
Loc => stem + "ū" ;
Nom => stem + "us" ;
Voc => variants { stem + "us" ; stem + "u" } ;
Gen => stem + "us"
}
} ;
gend = Fem
} ;
noun_3f_fromLemma : Str -> Noun = \lemma ->
case lemma of {
stem + "us" => noun_3f_fromStems stem ;
_ => Predef.error ("noun_3f_fromLemma is only applicable for words that end in -us, tried to apply to" ++ lemma)
} ;
noun_3f_fromNomPl : Str -> Noun = \lemma ->
case lemma of {
stem + "us" => noun_3f_fromStems stem ;
_ => Predef.error ("noun_3f_fromNomPl is only applicable for words that end in -us, tried to apply to" ++ lemma)
} ;
noun_6b_fromStems : Str -> Noun = \stem ->
{
s = table {
Pl => table {
Acc => stem + "is" ;
Dat => stem + "īm" ;
Loc => stem + "īs" ;
Nom => stem + "is" ;
Voc => stem + "is" ;
Gen => stem + "u"
} ;
Sg => table {
Acc => stem + "i" ;
Dat => stem + "ij" ;
Loc => stem + "ī" ;
Nom => stem + "s" ;
Voc => stem + "s" ;
Gen => stem + "s"
}
} ;
gend = Fem
} ;
noun_6b_fromLemma : Str -> Noun = \lemma ->
case lemma of {
stem + "s" => noun_6b_fromStems stem ;
_ => Predef.error ("noun_6b_fromLemma is only applicable for words that end in -s, tried to apply to" ++ lemma)
} ;
noun_6b_fromNomPl : Str -> Noun = \lemma ->
case lemma of {
stem + "is" => noun_6b_fromStems stem ;
_ => Predef.error ("noun_6b_fromNomPl is only applicable for words that end in -is, tried to apply to" ++ lemma)
} ;
noun_5fb_fromStems : Str -> Noun = \stem ->
{
s = table {
Pl => table {
Acc => stem + "es" ;
Dat => stem + "ēm" ;
Loc => stem + "ēs" ;
Nom => stem + "es" ;
Voc => stem + "es" ;
Gen => stem + "u"
} ;
Sg => table {
Acc => stem + "i" ;
Dat => stem + "ei" ;
Loc => stem + "ē" ;
Nom => stem + "e" ;
Voc => variants { stem + "e" ; stemchangeSimple 17 stem + "" } ;
Gen => stem + "es"
}
} ;
gend = Fem
} ;
noun_5fb_fromLemma : Str -> Noun = \lemma ->
case lemma of {
stem + "e" => noun_5fb_fromStems stem ;
_ => Predef.error ("noun_5fb_fromLemma is only applicable for words that end in -e, tried to apply to" ++ lemma)
} ;
noun_5fb_fromNomPl : Str -> Noun = \lemma ->
case lemma of {
stem + "es" => noun_5fb_fromStems stem ;
_ => Predef.error ("noun_5fb_fromNomPl is only applicable for words that end in -es, tried to apply to" ++ lemma)
} ;
noun_5mb_fromStems : Str -> Noun = \stem ->
{
s = table {
Pl => table {
Acc => stem + "es" ;
Dat => stem + "ēm" ;
Loc => stem + "ēs" ;
Nom => stem + "es" ;
Voc => stem + "es" ;
Gen => stem + "u"
} ;
Sg => table {
Acc => stem + "i" ;
Dat => stem + "em" ;
Loc => stem + "ē" ;
Nom => stem + "e" ;
Voc => stem + "e" ;
Gen => stem + "es"
}
} ;
gend = Masc
} ;
noun_5mb_fromLemma : Str -> Noun = \lemma ->
case lemma of {
stem + "e" => noun_5mb_fromStems stem ;
_ => Predef.error ("noun_5mb_fromLemma is only applicable for words that end in -e, tried to apply to" ++ lemma)
} ;
noun_5mb_fromNomPl : Str -> Noun = \lemma ->
case lemma of {
stem + "es" => noun_5mb_fromStems stem ;
_ => Predef.error ("noun_5mb_fromNomPl is only applicable for words that end in -es, tried to apply to" ++ lemma)
} ;
noun_2b_fromStems : Str -> Noun = \stem ->
{
s = table {
Pl => table {
Acc => stem + "us" ;
Dat => stem + "iem" ;
Loc => stem + "os" ;
Nom => stem + "i" ;
Voc => stem + "i" ;
Gen => stem + "u"
} ;
Sg => table {
Acc => stem + "i" ;
Dat => stem + "im" ;
Loc => stem + "ī" ;
Nom => stem + "is" ;
Voc => stem + "i" ;
Gen => variants { stem + "a" ; stemchangeSimple 1 stem + "a" }
}
} ;
gend = Masc
} ;
noun_2b_fromLemma : Str -> Noun = \lemma ->
case lemma of {
stem + "is" => noun_2b_fromStems stem ;
_ => Predef.error ("noun_2b_fromLemma is only applicable for words that end in -is, tried to apply to" ++ lemma)
} ;
noun_2b_fromNomPl : Str -> Noun = \lemma ->
case lemma of {
stem + "i" => noun_2b_fromStems stem ;
_ => Predef.error ("noun_2b_fromNomPl is only applicable for words that end in -i, tried to apply to" ++ lemma)
} ;
}

View File

@@ -1,105 +0,0 @@
--# -path=.:abstract:common:prelude
-- Here goes manually ported stemchanges from
-- https://github.com/LUMII-AILab/Morphology/blob/master/src/main/java/lv/semti/morphology/analyzer/Mijas.java
resource PortedMorphoStemchangesLav = open Prelude, Predef, ResLav in {
flags coding = utf8 ;
oper
stemchangeSimple : Int -> Str -> Str = \parId,stem ->
case parId of {
0 => stem ;
-- For nouns we need changes 0, 1, 17
1 => case stem of { -- nouns
s + ("kst") => s + "kš" ;
s + ("nst") => s + "nš" ;
s + ("ll") => s + "ļļ" ;
s + ("sl") => s + "šļ" ;
s + ("zl") => s + "žļ" ;
s + ("ln") => s + "ļņ" ;
s + ("nn") => s + "ņņ" ;
s + ("sn") => s + "šņ" ;
s + ("zn") => s + "žņ" ;
s + ("īt") => s + "īš" ;
s + ("d") => s + "ž" ;
s + ("t") => s + "š" ;
s + ("n") => s + "ņ" ;
s + ("s") => s + "š" ;
s + ("z") => s + "ž" ;
s + ("b"|"f"|"m"|"p"|"v") => stem + "j" ;
_ => stem
} ;
17 => case <stem, countSyllables stem > of { -- shortened vocative for fem nouns
<s + ("īt"|"iņ"), _ > => stem ;
--<_, 0|1> => variants {} ;
<_, 0|1> => nonExist ; -- Exception
<_, _> => stem
} ;
-- For full adjectives we need changes 0, 3, 34, 13
_ => error ("Unsupported stemchange")
};
stemchangeForAdjAdv : Int -> Str -> Definiteness -> Degree -> Str = \parId,stem,defi,deg ->
case parId of {
3 => case stem of {
s + "āk" => case deg of {
Posit => stem ;
_ => nonExist -- TODO what should go there for nonexisting forms?
};
_ => case deg of {
Posit => stem ;
Compar => stem + "āk" ;
Superl => case defi of {
Def => "vis" + stem + "āk" ;
Indef => nonExist
}
}
} ;
34 => case deg of { -- pēdēj-ais -> pēdē-jam, zaļ-š -> zaļa-jam
Posit => case stem of {
s + "ēj" => s + "ē" ;
_ => stem + "a"
} ;
Compar => stem + "āka" ;
Superl => case defi of {
Def => "vis" + stem + "āka" ;
Indef => nonExist
}
} ;
_ => case deg of { _ => stemchangeSimple parId stem }
} ;
-- Inari's trick for counting syllables https://inariksit.github.io/gf/2018/08/28/gf-gotchas.html#cute-way-to-count-syllables
-- pattern macro for vowels
v : pattern Str = #("a"|"ā"|"e"|"ē"|"i"|"ī"|"o"|"u"|"ū") ;
-- type alias for the helper function
SylCnt : Type = Bool -> Str -> Ints 10 ;
countSyllables : Str -> Ints 10 = go count False
where { -- synonym of let
go : SylCnt -> SylCnt = \f,wasVowel,word -> -- These three arguments come from the fact that SylCnt is the abovedefined 3rd order function.
case <word,wasVowel> of {
<#v + s, False> => Predef.plus (f True s) 1 ;
<#v + s, True> => f True s ;
<? + s, _> => f False s ;
_ => 0
} ;
-- end of recursion
scBase : SylCnt = \_,_ -> 0 ;
-- the function given to countSyllables
count : SylCnt = go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go (go scBase)))))))))))))))))))))))))))))))))))))))
} ;
}

View File

@@ -1,53 +0,0 @@
--# -path=.:abstract:common:prelude
-- Here goes manually made utils used for automaticaly exported Tēzaurs lexicon.
resource PortedMorphoUtilsLav = open Prelude, Predef, ResLav in {
flags coding = utf8 ;
oper
changeNounForm : Number -> Case -> Str -> Noun -> Noun =
\N,C,form,noun -> noun ** {
s = \\n,c => case <n,N,c,C> of {
<Sg, Sg, Nom, Nom> |
<Sg, Sg, Gen, Gen> |
<Sg, Sg, Dat, Dat> |
<Sg, Sg, Voc, Voc> |
<Pl, Pl, Nom, Nom> |
<Pl, Pl, Gen, Gen> |
<Pl, Pl, Dat, Dat> |
<Pl, Pl, Voc, Voc> => form ;
_ => noun.s ! n ! c }
} ;
addNounForm : Number -> Case -> Str -> Noun -> Noun =
\N,C,form,noun -> noun ** {
s = \\n,c => case <n,N,c,C> of {
<Sg, Sg, Nom, Nom> |
<Sg, Sg, Gen, Gen> |
<Sg, Sg, Dat, Dat> |
<Sg, Sg, Voc, Voc> |
<Pl, Pl, Nom, Nom> |
<Pl, Pl, Gen, Gen> |
<Pl, Pl, Dat, Dat> |
<Pl, Pl, Voc, Voc> => variants {form ; noun.s ! n ! c} ;
_ => noun.s ! n ! c }
} ;
{- A note about GF restrictions as of 2025-08-27:
Following thing does not work, compiler asumes that N an C are free variables.
changeForm_ideal : Number -> Case -> Str -> Noun -> Noun ;
changeForm_ideal N C str noun = noun ** {NF N C => str} ;
Meanwhile this should work
changeForm_fixed : Str -> Noun -> Noun ;
changeForm_fixed str noun = noun ** {NF Sg Nom => str} ;
Related: https://github.com/GrammaticalFramework/gf-core/issues/198
Also Inari suggested to avoid using a function and write this thing inline:
Noun : Type = {s : NForm => Str} ;
myRegularNoun = {- … some noun …- } ;
mySpecialNoun = {s = myRegularNoun.s ** {NF Sg Acc => "special form"}} ;
-}
}

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