1
0
forked from GitHub/gf-rgl

55 Commits

Author SHA1 Message Date
Inari Listenmaa
ba879527ab (Som) Add full forms of the pronoun into the s field in UsePron…
…The clitic forms used in VPs and Cls are syncategorematic, so those constructions did not break.
2026-04-22 17:20:09 +02:00
Krasimir Angelov
4ab63d2d66 Neutr -> Neuter 2026-04-22 15:15:35 +02:00
Krasimir Angelov
41e3b8280b added gender to nouns 2026-04-22 13:25:04 +02:00
Krasimir Angelov
4a3e30a1cd Merge branch 'master' of github.com:GrammaticalFramework/gf-rgl 2026-04-21 20:28:15 +02:00
Krasimir Angelov
9458f96f0b remove duplicated definitions 2026-04-21 20:27:57 +02:00
Inari Listenmaa
922f664f74 imperative as linref for lexical verb categories 2026-04-20 09:12:27 +02:00
Krasimir Angelov
3943089d3d cosmetic changes in the tables 2026-04-20 08:17:18 +02:00
Krasimir Angelov
6a6788c24e Merge branch 'master' of github.com:GrammaticalFramework/gf-rgl 2026-04-17 20:08:55 +02:00
Krasimir Angelov
e7e7f12ad8 added documentation 2026-04-17 20:08:42 +02:00
Abdirahman Ahmed
90d8897bf9 Fix AdjCN to include comparative NP (ComparA)
AdjCN currently ignores the 'compar' field from AP, causing the NP in
comparative constructions (ComparA) to be dropped.

Example:
- Expected: "guri ka weyn baabuur"
- Actual:   "guri ka weyn"

This change appends ap.compar in AdjCN, preserving the comparison NP.

A corresponding test has been added to src/somali/unittest/ap.gftest.
2026-04-17 13:07:26 +02:00
Krasimir Angelov
be0fb1f7c1 indefinite article and MassNP 2026-04-16 19:15:34 +02:00
Krasimir Angelov
7d73dd8195 added UseV 2026-04-16 17:38:53 +02:00
Krasimir Angelov
48ec088faa more syntax 2026-04-16 16:20:18 +02:00
Krasimir Angelov
8a84ca1a45 added QuantityNP 2026-04-16 08:50:21 +02:00
Krasimir Angelov
34f5e625e3 added QuantityNP 2026-04-16 08:43:22 +02:00
Krasimir Angelov
27c2d7cbb3 medial verbs 2026-04-15 07:47:42 +02:00
Krasimir Angelov
26abc63953 fix ordinals 2026-04-15 07:37:33 +02:00
Krasimir Angelov
15df5ed37e fix PossNP 2026-04-15 07:24:17 +02:00
Krasimir Angelov
43f19f283e fix AdVVP, AdVVPSlash 2026-04-15 06:45:39 +02:00
Krasimir Angelov
9b6b94ec1d fix lincat AP 2026-04-14 11:34:12 +02:00
Krasimir Angelov
8b462bdbfb added feminine pronouns 2026-04-14 09:30:18 +02:00
Krasimir Angelov
14c7db6427 нито -> ниту 2026-04-14 09:07:16 +02:00
Krasimir Angelov
2c613bfc83 added dummy ExtendMlt 2026-04-14 09:06:11 +02:00
Krasimir Angelov
8a8c1c6b42 added copula 2026-04-14 08:59:01 +02:00
Krasimir Angelov
76b27152f9 ResMkd->ResHye 2026-04-14 07:23:19 +02:00
Krasimir Angelov
36bc768f26 forgot Structural 2026-04-14 07:16:06 +02:00
Krasimir Angelov
b7275a2bac added conjuncts 2026-04-13 20:54:46 +02:00
Krasimir Angelov
7e8e6dbf34 added conjunctions 2026-04-13 20:46:06 +02:00
Krasimir Angelov
27ff3935c5 added mkDet 2026-04-13 19:34:44 +02:00
Krasimir Angelov
4cd3d3158e added pronouns 2026-04-13 16:27:30 +02:00
Krasimir Angelov
e3b27613fd elements of syntax for nouns phrases 2026-04-13 16:05:39 +02:00
Krasimir Angelov
5f6a8b2905 fix compilation 2026-04-13 11:04:31 +02:00
Krasimir Angelov
6203aee170 fix EmbedVP 2026-04-13 10:29:37 +02:00
Krasimir Angelov
ffb77daf31 fix UttVP 2026-04-13 10:17:17 +02:00
Krasimir Angelov
494c91f9dd whatSg_IP/whatPl_IP 2026-04-13 09:51:15 +02:00
Krasimir Angelov
6f6405b90e make it compile again 2026-04-13 09:35:08 +02:00
Krasimir Angelov
da0e273d3d improved several functions 2026-04-13 09:13:38 +02:00
Krasimir Angelov
263b668249 more fixes 2026-04-11 18:04:50 +02:00
Krasimir Angelov
019a347246 fixes 2026-04-11 17:21:09 +02:00
Krasimir Angelov
6aeda22ed6 fix imperatives 2026-04-11 16:28:55 +02:00
Krasimir Angelov
ae9b7d4d45 added pidgin rules 2026-04-11 15:33:05 +02:00
Krasimir Angelov
323e4b4cdf more structural words 2026-04-11 15:03:44 +02:00
Krasimir Angelov
e42c5f53e2 added this_Quant, that_Quant 2026-04-11 14:09:44 +02:00
Krasimir Angelov
fea01dd313 added questions and relative clauses 2026-04-11 12:01:59 +02:00
Krasimir Angelov
9e402cb608 prepare for numerals with countable forms 2026-04-11 08:58:08 +02:00
Krasimir Angelov
401ac1f954 added missing files 2026-04-11 08:45:52 +02:00
Krasimir Angelov
6a2cb9ec77 Merge branch 'master' of github.com:GrammaticalFramework/gf-rgl 2026-04-10 19:58:56 +02:00
Krasimir Angelov
b339f7c2fc started with tenses 2026-04-10 19:58:11 +02:00
EkaterinaVoloshina
d6f3cae141 fixed names of fields 2026-04-10 15:57:46 +02:00
EkaterinaVoloshina
44acdbd350 fixed fields in armenian 2026-04-10 15:49:30 +02:00
EkaterinaVoloshina
f630f6ef29 Merge branch 'master' of https://github.com/GrammaticalFramework/gf-rgl 2026-04-10 15:14:39 +02:00
EkaterinaVoloshina
8808ce108b changed fields 2026-04-10 15:12:02 +02:00
Krasimir Angelov
1c3bb0f6eb added relative pronoun 2026-04-09 14:25:26 +02:00
Krasimir Angelov
5cc990d259 added CompoundN 2026-04-09 14:03:06 +02:00
Krasimir Angelov
621cfd8b43 support for medial verbs 2026-04-05 11:39:43 +02:00
103 changed files with 3349 additions and 5221 deletions

1
.envrc
View File

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

12
.gitignore vendored
View File

@@ -5,15 +5,3 @@ dist/
*.pgf
*.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
View File

@@ -1,62 +0,0 @@
{
"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
}

View File

@@ -1,55 +0,0 @@
{
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
];
};
});
};
}

View File

@@ -1,23 +0,0 @@
{ 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,12 +52,6 @@ apiModules = ["Try","Symbolic","Syntax","Constructors","Combinators"]
clone :: [String] -> String -> String -> String -> String -> (String, String) -> IO ()
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")
writeAndReportFile (todir ++ "/" ++ absname ++ to ++ absfx ++ ".gf") (commentIf options (replaceLang from to s))

View File

@@ -1,25 +1,61 @@
concrete CatSqi of Cat = CommonX ** open ParamX, Prelude, ResSqi in {
lincat N = Noun ;
lincat N2 = Noun ** {c2 : Compl} ;
lincat N3 = Noun ** {c2,c3 : Compl} ;
lincat A = Adj ;
lincat A2 = Adj ** {c2 : Compl} ;
lincat V, VA, VV, VS, VQ = Verb ;
lincat V2, V2S, V2Q = Verb ** {c2 : Compl} ;
lincat V3, V2A, V2V = Verb ** {c2,c3 : Compl} ;
lincat Prep = Compl ;
lincat Numeral = {s : Str} ;
lincat Digits = {s : Str; n : Number; tail : DTail} ;
lincat Decimal = {s : Str; n : Number; hasDot : Bool} ;
lincat AP = {s: Species => Case => Gender => Number => Str} ;
lincat CN = Noun ;
lincat Num = {s : Str; n : Number} ;
lincat Quant = {s : Case => Gender => Number => Str; spec : Species} ;
lincat Det = {s : Case => Gender => Str; spec : Species; n : Number} ;
lincat NP = {s: Case => Str; a : Agr} ;
lincat Pron = {s: Case => Str; acc_clit, dat_clit : Str; a : Agr} ;
concrete CatSqi of Cat = CommonX ** open ParamX,Prelude,ResSqi in {
lincat A = Adj ;
lincat A2 = Adj ** {c2 : Compl} ;
lincat V, VA, VV, VS, VQ = Verb ;
lincat V2, V2S, V2Q = Verb ** {c2 : Compl} ;
lincat V3, V2A, V2V = Verb ** {c2,c3 : Compl} ;
lincat Prep = Compl ;
lincat ACard = {s : Str} ;
lincat AP = {s : Species => Case => Gender => Number => Str} ;
lincat CN = Noun ;
lincat Card = {s : Str} ;
lincat Cl = {s : Str} ;
lincat ClSlash = {s : Str} ;
lincat Comp = {s : Str} ;
lincat Conj = {s : Str} ;
lincat DAP = {s : Str} ;
lincat Decimal = {s : Str; n : Number; hasDot : Bool} ;
lincat Det = {s : Case => Gender => Str; spec : Species; n : Number} ;
lincat Digits = {s : Str; n : Number; tail : DTail} ;
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 = {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; spec : 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" ;
s1=heading1 "Folje" ;
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 (th "P2" ++ td (x.Indicative ! Pres ! Sg ! P2)) ++
tr (th "P3" ++ td (x.Indicative ! Pres ! Sg ! P3)) ++
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 "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 (th "P2" ++ td (x.Indicative ! Past ! Sg ! P2)) ++
tr (th "P3" ++ td (x.Indicative ! Past ! Sg ! P3)) ++
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 "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 (th "P2" ++ td (x.Indicative ! Aorist ! Sg ! P2)) ++
tr (th "P3" ++ td (x.Indicative ! Aorist ! Sg ! P3)) ++
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 "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 (th "P2" ++ td (x.Indicative ! Imperfect ! Sg ! P2)) ++
tr (th "P3" ++ td (x.Indicative ! Imperfect ! Sg ! P3)) ++
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 "P3" ++ td (x.Indicative ! Imperfect ! Pl ! P3)) ++
tr (intagAttr "th" "rowspan=\"2\"" "Imperative" ++ th "Sg" ++ td (x.Imperative ! Sg)) ++
tr (th "Pl" ++ td (x.Imperative ! Pl)) ++
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 "P3" ++ td (x.indicative ! Pres ! Sg ! P3)) ++
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 "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 (th "P2" ++ td (x.indicative ! Past ! Sg ! P2)) ++
tr (th "P3" ++ td (x.indicative ! Past ! Sg ! P3)) ++
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 "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 (th "P2" ++ td (x.indicative ! Aorist ! Sg ! P2)) ++
tr (th "P3" ++ td (x.indicative ! Aorist ! Sg ! P3)) ++
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 "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 (th "P2" ++ td (x.indicative ! Imperfect ! Sg ! P2)) ++
tr (th "P3" ++ td (x.indicative ! Imperfect ! Sg ! P3)) ++
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 "P3" ++ td (x.indicative ! Imperfect ! Pl ! P3)) ++
tr (intagAttr "th" "rowspan=\"2\"" "Imperative" ++ th "Sg" ++ td (x.imperative ! Sg)) ++
tr (th "Pl" ++ td (x.imperative ! Pl)) ++
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 (th "P2" ++ td (x.pres_optative ! Sg ! P2)) ++

File diff suppressed because it is too large Load Diff

View File

@@ -8,7 +8,7 @@ concrete NounSqi of Noun = CatSqi ** open MorphoSqi, ResSqi in {
a = agrgP3 cn.g det.n
} ;
UsePron p = p ;
-- UsePron p = p ;
DetQuant quant num = {
s = \\c,g => quant.s ! c ! g ! num.n ++ num.s ;
@@ -30,7 +30,6 @@ concrete NounSqi of Noun = CatSqi ** open MorphoSqi, ResSqi in {
} ;
UseN n = n ;
UseN2 n = n ;
AdjCN ap cn = {
s = \\spec,c,n => cn.s ! spec ! c ! n ++ ap.s ! spec ! c ! cn.g ! n ;

View File

@@ -104,10 +104,10 @@ oper mkAdj : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Bool -> Adj =
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 =
\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 {
Sg => table {
P1 => f1 ;
@@ -157,7 +157,7 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_
}
}
} ;
Imperative = table {
imperative = table {
Sg => f25 ;
Pl => f26
} ;

View File

@@ -128,10 +128,8 @@ C1eC2aC3 = {C1 ="" ; C1C2="'"; C2C3 ="!"; C3="#"};
peC1aC2C3 = { C1 = "ä" ; C1C2="'"; C2C3 ="'"; C3=""};
penC1aC2C3e = { C1 = "än" ; C1C2="'"; C2C3 ="'"; C3=""};
pteC1aC2C3 = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3=""};
pteC1aC2C3 = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3=""};-- 3
pteC1aC2C3u = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3="&"};
pyeC1aC2C3 = { C1 = "y" ; C1C2="'"; C2C3 ="'"; C3=""};
pteC1aC2C3 = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3=""};
pyeC1aC2C3u = { C1 = "y" ; C1C2="'"; C2C3 ="'"; C3="&"};
--Passive Jus_Imperat mkV3gdl
@@ -343,7 +341,6 @@ leC1AC2aC3 = {C1 ="l" ; C1C2="!"; C2C3 ="'"; C3=""};
enC1AC2aC3 = { C1 = "(n" ; C1C2="!"; C2C3 ="'"; C3=""};
C1AC2aC3 = { C1 = "" ; C1C2="!"; C2C3 ="'"; C3=""};
C1AC2aC3i = { C1 = "" ; C1C2="!"; C2C3 ="'"; C3="#"};
C1AC2aC3u = { C1 = "" ; C1C2="!"; C2C3 ="'"; C3="&"};
yC1AC2aC3 = { C1 = "y" ; C1C2="!"; C2C3 ="'"; C3=""};
tC1AC2aC3 = { C1 = "t" ; C1C2="!"; C2C3 ="'"; C3=""};
yC1AC2aC3u = { C1 = "y" ; C1C2="!"; C2C3 ="'"; C3="&"};
@@ -661,7 +658,7 @@ C1AC2n = { C1 = "" ; C1C2="!"; C2 ="n"};
C1AC2k = { C1 = "" ; C1C2="!"; C2 ="k"};
C1AC2sh = { C1 = "" ; C1C2="!"; C2 ="x"};
C1AC2achehu = { C1 = "" ; C1C2 ="!"; C2 ="!ch&"};
C1AC2a = { C1 = "" ; C1C2="!"; C2 ="'"};
C1AC2a = { C1 = "" ; C1C2="!"; C2 ="'"};
C1AC2ach = { C1 = "" ; C1C2="!"; C2 ="'c"};
C1AC2u = { C1 = "" ; C1C2="!"; C2 ="&"};
-- Imper -- mkV2yz
@@ -701,7 +698,6 @@ 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
@@ -721,81 +717,12 @@ meC1aC2= {C1 ="m'" ; C1C2="!"; C2 =""};
--Infinitve mkV2yz
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
--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 ="&"};
@@ -858,87 +785,12 @@ meC1oC2= {C1 ="m'" ; C1C2="/"; 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
--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"};
@@ -992,74 +844,6 @@ C1aC2tewal = { C1 = "" ; C1C2="!"; C2="t'w!l"};
meC1aC2et= {C1 ="m'" ; C1C2="!"; C2 ="'t"};
--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---
--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!!
@@ -1109,63 +893,8 @@ tC1eC2 = { C1 = "t" ; C1C2=""; C2 =""};
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
--Starting with type Tri-Radical Roots
-- Eg. dbdb - fight
-- qzqz - freeze
@@ -1238,152 +967,4 @@ meC1aC2C3aC4 = {C1 ="m'" ; C1C2="'"; C2C3 =""; C3C4="'"; C4= "" };
--Participle mkV4dbdb
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,12 +22,9 @@ concrete PhraseAmh of Phrase = CatAmh ** open
UttIP ip = ip ; --- Acc also
UttVP vp = {s = vp.obj.s ++ vp.inf} ;
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};
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 ---
UttQS qs = {s = qs.s } ; -- TO DO
{-
PConjConj conj = {s = conj.s2} ; ---

View File

@@ -1,4 +1,19 @@
concrete AdjectiveHye of Adjective = CatHye ** {
concrete AdjectiveHye of Adjective = CatHye ** open ResHye, Prelude in {
lin
PositA a = a ;
AdAP ada ap = {
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

@@ -0,0 +1,6 @@
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,16 +1,63 @@
concrete CatHye of Cat = CommonX ** open ResHye in {
lincat V = Verb ;
lincat VV,VS,VQ,VA = Verb ;
lincat V2 = Verb ** {c2 : Compl} ;
lincat V3,V2A,V2S,V2Q,V2V = Verb ** {c2,c3 : Compl} ;
lincat N = Noun ;
lincat N2 = Noun ** {c2 : Compl} ;
lincat N3 = Noun ** {c2,c3 : Compl} ;
lincat CN = Noun ;
lincat A = Adj ;
lincat A2 = Adj ** {c2 : Compl} ;
lincat AP = Adj ;
lincat Prep = Compl ;
concrete CatHye of Cat = CommonX ** open Prelude,ResHye in {
lincat A = Adj ;
lincat A2 = Adj ** {c2 : Compl} ;
lincat ACard = {s : Str} ;
lincat AP = {s : Species => Case => Number => Str; isPre : Bool} ;
lincat CN = {s : Species => Case => Number => Str} ;
lincat Card = {s : Str} ;
lincat Cl = {s : Str;
conditional : Aspect => Number => Str;
converb : {imperfective : Str; futCon1 : Str;
futCon2 : Str; negative : Str;
perfective : Str; simultaneous : Str};
passive : Str; past : Person => Number => Str;
participle : PartType => Str;
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) ++
heading1 "Converb" ++
frameTable (
tr (th "Imperfective" ++ td (x.Converb.Imperfective)) ++
tr (th "Simultaneous" ++ td (x.Converb.Simultaneous)) ++
tr (th "Perfective" ++ td (x.Converb.Perfective)) ++
tr (th "Futute I" ++ td (x.Converb.FutCon1)) ++
tr (th "Futute II" ++ td (x.Converb.FutCon2)) ++
tr (th "Connegative" ++ td (x.Converb.Negative))) ++
tr (th "Imperfective" ++ td (x.converb.imperfective)) ++
tr (th "Simultaneous" ++ td (x.converb.simultaneous)) ++
tr (th "Perfective" ++ td (x.converb.perfective)) ++
tr (th "Futute I" ++ td (x.converb.futCon1)) ++
tr (th "Futute II" ++ td (x.converb.futCon2)) ++
tr (th "Connegative" ++ td (x.converb.negative))) ++
heading1 "Passive" ++
paragraph x.Passive ++
paragraph x.passive ++
heading1 "Participle" ++
frameTable (
tr (th "Resultative" ++ td (x.Participle ! Resultative)) ++
tr (th "Subject" ++ td (x.Participle ! Subject))) ++
tr (th "Resultative" ++ td (x.participle ! Resultative)) ++
tr (th "Subject" ++ td (x.participle ! Subject))) ++
heading1 "Past" ++
frameTable (
tr (th "" ++ th "Sg" ++ th "Pl") ++
tr (th "P1" ++ td (x.Past ! P1 ! Sg) ++ td (x.Past ! P1 ! Pl)) ++
tr (th "P2" ++ td (x.Past ! P2 ! Sg) ++ td (x.Past ! P2 ! Pl)) ++
tr (th "P3" ++ td (x.Past ! P3 ! Sg) ++ td (x.Past ! P3 ! Pl))) ++
tr (th "P1" ++ td (x.past ! P1 ! Sg) ++ td (x.past ! P1 ! Pl)) ++
tr (th "P2" ++ td (x.past ! P2 ! Sg) ++ td (x.past ! P2 ! Pl)) ++
tr (th "P3" ++ td (x.past ! P3 ! Sg) ++ td (x.past ! P3 ! Pl))) ++
heading1 "Subjunctive" ++
frameTable (
tr (intagAttr "th" "colspan=\"2\"" "" ++ th "Sg" ++ th "Pl") ++
tr (intagAttr "th" "rowspan=\"3\"" "Perfect" ++
th "P1" ++ td (x.Subjunctive ! Perfect ! P1 ! Sg) ++ td (x.Subjunctive ! Perfect ! P1 ! Pl)) ++
tr (th "P2" ++ td (x.Subjunctive ! Perfect ! P2 ! Sg) ++ td (x.Subjunctive ! Perfect ! P2 ! Pl)) ++
tr (th "P3" ++ td (x.Subjunctive ! Perfect ! P3 ! Sg) ++ td (x.Subjunctive ! Perfect ! P3 ! Pl)) ++
th "P1" ++ td (x.subjunctive ! Perfect ! P1 ! Sg) ++ td (x.subjunctive ! Perfect ! P1 ! Pl)) ++
tr (th "P2" ++ td (x.subjunctive ! Perfect ! P2 ! Sg) ++ td (x.subjunctive ! Perfect ! P2 ! Pl)) ++
tr (th "P3" ++ td (x.subjunctive ! Perfect ! P3 ! Sg) ++ td (x.subjunctive ! Perfect ! P3 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"3\"" "Non_Past" ++
th "P1" ++ td (x.Subjunctive ! Non_Past ! P1 ! Sg) ++ td (x.Subjunctive ! Non_Past ! P1 ! Pl)) ++
tr (th "P2" ++ td (x.Subjunctive ! Non_Past ! P2 ! Sg) ++ td (x.Subjunctive ! Non_Past ! P2 ! Pl)) ++
tr (th "P3" ++ td (x.Subjunctive ! Non_Past ! P3 ! Sg) ++ td (x.Subjunctive ! Non_Past ! P3 ! Pl))) ++
th "P1" ++ td (x.subjunctive ! Non_Past ! P1 ! Sg) ++ td (x.subjunctive ! Non_Past ! P1 ! Pl)) ++
tr (th "P2" ++ td (x.subjunctive ! Non_Past ! P2 ! Sg) ++ td (x.subjunctive ! Non_Past ! P2 ! Pl)) ++
tr (th "P3" ++ td (x.subjunctive ! Non_Past ! P3 ! Sg) ++ td (x.subjunctive ! Non_Past ! P3 ! Pl))) ++
heading1 "Conditional" ++
frameTable (
tr (intagAttr "th" "colspan=\"2\"" "" ++ th "Sg" ++ th "Pl") ++
tr (intagAttr "th" "rowspan=\"3\"" "Perfect" ++
th "P1" ++ td (x.Conditional ! Perfect ! P1 ! Sg) ++ td (x.Conditional ! Perfect ! P1 ! Pl)) ++
tr (th "P2" ++ td (x.Conditional ! Perfect ! P2 ! Sg) ++ td (x.Conditional ! Perfect ! P2 ! Pl)) ++
tr (th "P3" ++ td (x.Conditional ! Perfect ! P3 ! Sg) ++ td (x.Conditional ! Perfect ! P3 ! Pl)) ++
th "P1" ++ td (x.conditional ! Perfect ! P1 ! Sg) ++ td (x.conditional ! Perfect ! P1 ! Pl)) ++
tr (th "P2" ++ td (x.conditional ! Perfect ! P2 ! Sg) ++ td (x.conditional ! Perfect ! P2 ! Pl)) ++
tr (th "P3" ++ td (x.conditional ! Perfect ! P3 ! Sg) ++ td (x.conditional ! Perfect ! P3 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"4\"" "Non_Past" ++
th "P1" ++ td (x.Conditional ! Non_Past ! P1 ! Sg) ++ td (x.Conditional ! Non_Past ! P1 ! Pl)) ++
tr (th "P2" ++ td (x.Conditional ! Non_Past ! P2 ! Sg) ++ td (x.Conditional ! Non_Past ! P2 ! Pl)) ++
tr (th "P3" ++ td (x.Conditional ! Non_Past ! P3 ! Sg) ++ td (x.Conditional ! Non_Past ! P3 ! Pl))) ++
th "P1" ++ td (x.conditional ! Non_Past ! P1 ! Sg) ++ td (x.conditional ! Non_Past ! P1 ! Pl)) ++
tr (th "P2" ++ td (x.conditional ! Non_Past ! P2 ! Sg) ++ td (x.conditional ! Non_Past ! P2 ! Pl)) ++
tr (th "P3" ++ td (x.conditional ! Non_Past ! P3 ! Sg) ++ td (x.conditional ! Non_Past ! P3 ! Pl))) ++
heading1 "Imperative" ++
frameTable (
tr (th "Sg" ++ th "Pl") ++
tr (td (x.Imperative_Jussive ! Sg) ++ td (x.Imperative_Jussive ! Pl))) ;
tr (td (x.imperative ! Sg) ++ td (x.imperative ! Pl))) ;
s3=[]
} ;
lin

View File

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

View File

@@ -1,2 +1,5 @@
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,4 +1,35 @@
concrete NounHye of Noun = CatHye ** {
lin
UseN n = n ;
concrete NounHye of Noun = CatHye ** open ResHye in {
lin AdjCN ap cn = {
s = \\sp,c,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,16 +468,19 @@ oper
mkInterj : Str -> Interj = \s -> lin Interj {s=s} ;
mkMU : Str -> MU = \s -> lin MU {s=s; isPre=False} ;
mkPrep : Str -> Prep = \s -> lin Prep {s=s; c=Dat} ;
mkPrep : Str -> Prep = \s -> lin Prep {s=s; c=Dat; isPre=False} ;
singular : Number = Sg ;
plural : Number = Pl ;
mkIAdv : Str -> IAdv = \s -> lin IAdv {s=s} ;
mkIP : Str -> IP = \s -> lin IP {s=s} ;
mkIQuant : Str -> IQuant = \s -> lin IQuant {s=s} ;
mkIDet : Str -> IDet = \s -> lin IDet {s=s} ;
mkSubj : Str -> Subj = \s -> lin Subj {s=s} ;
mkQuant : Str -> Quant = \s -> lin Quant {s=s} ;
mkQuant : Str -> Quant = \s -> lin Quant {s=s; sp=Indef} ;
mkDet : Str -> Number -> Det = \s,n -> lin Det {s=s; n=n; sp=Indef} ;
mkPredet : Str -> Predet = \s -> lin Predet {s=s} ;
mkDet : Str -> Det = \s -> lin Det {s=s} ;
mkCard : Str -> Card = \s -> lin Card {s=s} ;
mkConj : Str -> Conj = \s -> lin Conj {s=s} ;
mkPConj : Str -> PConj = \s -> lin PConj {s=s} ;
@@ -488,4 +491,10 @@ oper
mkSN : Str -> SN = \s -> lin SN {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,16 +1,14 @@
resource ResHye = {
resource ResHye = ParamX ** {
param Aspect = Non_Past | Perfect ;
param Person = P1 | P3 | P2 ;
param Number = Sg | Pl ;
param Case = Nom | Dat | Ablat | Instr | Loc ;
param PartType = Resultative | Subject ;
oper Verb = {s: Str; Causative: Str; Conditional: Aspect => Person => Number => Str; Converb: {Imperfective: Str; FutCon1: Str; FutCon2: Str; Negative: Str; Perfective: Str; Simultaneous: Str}; Imperative_Jussive: Number => Str; Passive: Str; Past: Person => Number => Str; Participle: PartType => Str; Subjunctive: Aspect => Person => Number => Str} ; -- 898
oper 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 mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Verb =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24,f25,f26,f27,f28,f29,f30,f31,f32,f33,f34,f35,f36,f37,f38,f39,f40,f41,f42,f43 ->
{ s = f1 ;
Causative = f2 ;
Conditional = table {
causative = f2 ;
conditional = table {
Perfect => table {
P1 => table {
Sg => f3 ;
@@ -40,19 +38,19 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_
}
}
} ;
Converb = { Imperfective = f15 ;
FutCon1 = f16 ;
FutCon2 = f17 ;
Negative = f18 ;
Perfective = f19 ;
Simultaneous = f20
converb = { imperfective = f15 ;
futCon1 = f16 ;
futCon2 = f17 ;
negative = f18 ;
perfective = f19 ;
simultaneous = f20
} ;
Imperative_Jussive = table {
imperative = table {
Sg => f21 ;
Pl => f22
} ;
Passive = f23 ;
Past = table {
passive = f23 ;
past = table {
P1 => table {
Sg => f24 ;
Pl => f25
@@ -66,11 +64,11 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_
Pl => f29
}
} ;
Participle = table {
participle = table {
Resultative => f30 ;
Subject => f31
} ;
Subjunctive = table {
subjunctive = table {
Perfect => table {
P1 => table {
Sg => f32 ;
@@ -102,7 +100,8 @@ 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 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 ->

View File

@@ -0,0 +1,14 @@
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

@@ -0,0 +1,8 @@
concrete StructuralHye of Structural = CatHye ** open ResHye, ParadigmsHye in {
lin i_Pron = mkPron "ես" Sg P1 ;
lin youSg_Pron = mkPron "դու" Sg P2 ;
lin he_Pron, she_Pron, it_Pron = mkPron "նա" Sg P3 ;
lin we_Pron = mkPron "մեք" Pl P1 ;
lin youPl_Pron = mkPron "դուք" Pl P2 ;
lin they_Pron = mkPron "նոքա" Pl P3 ;
}

35
src/armenian/VerbHye.gf Normal file
View File

@@ -0,0 +1,35 @@
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

@@ -139,9 +139,6 @@ lin
SubjunctRelCN cn rs = RelCN cn rs ; -- no difference from indicative
lincat
X = {s : Str} ;
lin
UseComp_estar = UseComp ;
UseComp_ser = UseComp ;

View File

@@ -39,9 +39,9 @@ concrete NounEng of Noun = CatEng ** open MorphoEng, ResEng, Prelude in {
DetQuant quant num = {
s = quant.s ! num.hasCard ! num.n ++ num.s ! quant.isDef ! Nom;
sp = \\g,hasAdj,c => case <num.hasCard,num.n> of {
<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
sp = \\g,hasAdj,c => case num.hasCard of {
False => quant.sp ! g ! hasAdj ! num.n ! c ++ num.s ! quant.isDef ! Nom ;
_ => quant.s ! True ! num.n ++ num.sp ! quant.isDef ! npcase2case c
} ;
n = num.n ;
hasNum = num.hasCard

View File

@@ -10,7 +10,11 @@ lincat
lin
InflectionN,InflectionN2,InflectionN3 = \x -> {
t="n" ;
s1="" ;
s1 = heading1 ("Noun" ++ case x.g of {
Neuter=> "(neuter)";
Masc => "(masc)";
Fem => "(fem)"
}) ;
s2=frameTable (
tr (intagAttr "th" "colspan=\"2\"" "" ++ th "Indef" ++ th "Def") ++
tr (intagAttr "th" "rowspan=\"4\"" "Sg" ++
@@ -30,17 +34,17 @@ lin
t="a" ;
s1="" ;
s2=frameTable (
tr (intagAttr "th" "colspan=\"2\"" "" ++ th "Masc" ++ th "Fem" ++ th "Neutr") ++
tr (intagAttr "th" "colspan=\"2\"" "" ++ th "Masc" ++ th "Fem" ++ th "Neuter") ++
tr (intagAttr "th" "rowspan=\"4\"" "Sg" ++
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 ! Neutr ! Sg ! Acc)) ++
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 ! Neutr ! Sg ! Gen)) ++
th "Nom" ++ td (x.s ! Masc ! Sg ! Nom) ++ td (x.s ! Fem ! Sg ! Nom) ++ td (x.s ! Neuter ! 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 "Dat" ++ td (x.s ! Masc ! Sg ! Dat) ++ td (x.s ! Fem ! Sg ! Dat) ++ td (x.s ! Neuter ! Sg ! Dat)) ++
tr (th "Gen" ++ td (x.s ! Masc ! Sg ! Gen) ++ td (x.s ! Fem ! Sg ! Gen) ++ td (x.s ! Neuter ! Sg ! Gen)) ++
tr (intagAttr "th" "rowspan=\"4\"" "Pl" ++
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 ! Neutr ! Pl ! Acc)) ++
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 ! Neutr ! Pl ! Gen))) ;
th "Nom" ++ td (x.s ! Masc ! Pl ! Nom) ++ td (x.s ! Fem ! Pl ! Nom) ++ td (x.s ! Neuter ! 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 "Dat" ++ td (x.s ! Masc ! Pl ! Dat) ++ td (x.s ! Fem ! Pl ! Dat) ++ td (x.s ! Neuter ! Pl ! Dat)) ++
tr (th "Gen" ++ td (x.s ! Masc ! Pl ! Gen) ++ td (x.s ! Fem ! Pl ! Gen) ++ td (x.s ! Neuter ! Pl ! Gen))) ;
s3=[]
} ;
lin

File diff suppressed because it is too large Load Diff

View File

@@ -3,10 +3,10 @@ resource ResFao = {
param Species = Indef | Def ;
param Number = Sg | Pl ;
param Case = Nom | Acc | Dat | Gen ;
param Gender = Neutr | Fem | Masc ;
oper Noun = {s: Species => Number => Case => Str} ; -- 2135
oper mkNoun : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Noun =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16 ->
param Gender = Masc | Fem | Neuter ;
oper Noun = {s: Species => Number => Case => Str; g : Gender} ; -- 2135
oper mkNoun : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Gender -> Noun =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,g ->
{ s = table {
Indef => table {
Sg => table {
@@ -36,7 +36,8 @@ oper mkNoun : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Noun =
Gen => f16
}
}
}
} ;
g = g
} ;
@@ -72,7 +73,7 @@ oper mkAdj : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Adj =
Gen => f16
}
} ;
Neutr => table {
Neuter=> table {
Sg => table {
Nom => f17 ;
Acc => f18 ;

View File

@@ -670,31 +670,6 @@ resource ResGre = ParamX ** open Prelude in {
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 (φως, γεγονός, ημίφως) --------------
mkNoun_fws: (s1,_ : Str) -> Gender -> Noun =
\fws, fwtos, g ->

View File

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

View File

@@ -1,13 +1,69 @@
concrete CatKaz of Cat = CommonX ** open ResKaz in {
lincat N = Noun ;
lincat N2 = Noun ** {c2 : Compl} ;
lincat N3 = Noun ** {c2,c3 : Compl} ;
lincat V, VA, VV, VS, VQ = Verb ;
lincat V2, V2S, V2Q = Verb ** {c2 : Compl} ;
lincat V3, V2A, V2V = Verb ** {c2,c3 : Compl} ;
lincat A = {s : Str} ;
lincat A2 = A ** {c2 : Compl} ;
lincat Prep = Compl ;
concrete CatKaz of Cat = CommonX ** open Prelude,ResKaz in {
lincat A = {s : Str} ;
lincat A2 = A ** {c2 : Compl} ;
lincat ACard = {s : Str} ;
lincat AP = {s : Str} ;
lincat CN = {s : Case => Str} ;
lincat Card = {s : Str} ;
lincat Cl = {infinitive : Case => 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} ;
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 -> {
t="v" ;
s1="" ;
s2=heading2 "Infinitive" ++ paragraph (x.Infinitive) ++
-- tr (th "Indicative" ++ th "Fut" ++ td (x.Indicative.Fut)) ++
s2=heading2 "Infinitive" ++ paragraph (x.infinitive) ++
-- tr (th "Indicative" ++ th "Fut" ++ td (x.indicative.Fut)) ++
heading2 "Present"++
frameTable (
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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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))) ++
heading2 "Present Progressive"++
frameTable (
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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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))) ++
heading2 "Past" ++
frameTable (
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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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))) ++
heading2 "Past Perfect" ++
frameTable (
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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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))) ++
heading2 "Past Progressive" ++
frameTable (
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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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))) ++
heading2 "Imperative" ++
frameTable (
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_Jussive ! Pos ! Informal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "Formal" ++ th "Sg" ++ td (x.Imperative_Jussive ! Pos ! Formal ! Sg)) ++
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_Jussive ! Neg ! Informal ! Sg)) ++
tr (th "Pl" ++ td (x.Imperative_Jussive ! Neg ! Informal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "Formal" ++ th "Sg" ++ td (x.Imperative_Jussive ! Neg ! Formal ! Sg)) ++
tr (th "Pl" ++ td (x.Imperative_Jussive ! Neg ! Formal ! Pl))) ++
tr (intagAttr "th" "rowspan=\"4\"" "Pos" ++ intagAttr "th" "rowspan=\"2\"" "Informal" ++ th "Sg" ++ td (x.imperative ! Pos ! Informal ! Sg)) ++
tr (th "Pl" ++ td (x.imperative ! Pos ! Informal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "Formal" ++ th "Sg" ++ td (x.imperative ! Pos ! Formal ! Sg)) ++
tr (th "Pl" ++ td (x.imperative ! Pos ! Formal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"4\"" "Neg" ++ intagAttr "th" "rowspan=\"2\"" "Informal" ++ th "Sg" ++ td (x.imperative ! Neg ! Informal ! Sg)) ++
tr (th "Pl" ++ td (x.imperative ! Neg ! Informal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "Formal" ++ th "Sg" ++ td (x.imperative ! Neg ! Formal ! Sg)) ++
tr (th "Pl" ++ td (x.imperative ! Neg ! Formal ! Pl))) ++
heading2 "Subjunctive" ++
frameTable (
tr (intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.Subjunctive ! P1 ! Sg)) ++
tr (th "Pl" ++ td (x.Subjunctive ! P1 ! Pl)) ++
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 (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.Subjunctive ! P2 Formal ! Sg)) ++
tr (th "Pl" ++ td (x.Subjunctive ! P2 Formal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.Subjunctive ! P3 ! Sg)) ++
tr (th "Pl" ++ td (x.Subjunctive ! P3 ! Pl))) ;
tr (intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td (x.subjunctive ! P1 ! Sg)) ++
tr (th "Pl" ++ td (x.subjunctive ! P1 ! Pl)) ++
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 (intagAttr "th" "rowspan=\"2\"" "P2 Formal" ++ th "Sg" ++ td (x.subjunctive ! P2 Formal ! Sg)) ++
tr (th "Pl" ++ td (x.subjunctive ! P2 Formal ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td (x.subjunctive ! P3 ! Sg)) ++
tr (th "Pl" ++ td (x.subjunctive ! P3 ! Pl))) ;
s3=[]
} ;

File diff suppressed because it is too large Load Diff

View File

@@ -81,12 +81,12 @@ oper mkNoun : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str
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_Jussive: 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: Polarity => Formality => Number => Str; subjunctive: Person => Number => Str} ; -- 113
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 ->
{ Infinitive = f1 ;
Indicative = { Fut = f2 ;
Pres = { Progressive = table {
{ infinitive = f1 ;
indicative = { fut = f2 ;
pres = { progressive = table {
Pos => table {
P1 => table {
Sg => f3 ;
@@ -163,7 +163,7 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_
}
}
} ;
Past = { Perfect = table {
past = { perfect = table {
Pos => table {
P1 => table {
Sg => f35 ;
@@ -201,7 +201,7 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_
}
}
} ;
Progressive = table {
progressive = table {
Pos => table {
P1 => table {
Sg => f51 ;
@@ -279,7 +279,7 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_
}
}
} ;
Imperative_Jussive = table {
imperative = table {
Pos => table {
Informal => table {
Sg => f83 ;
@@ -301,7 +301,7 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_
}
}
} ;
Subjunctive = table {
subjunctive = table {
P1 => table {
Sg => f91 ;
Pl => f92

View File

@@ -1,4 +1,23 @@
concrete AdjectiveMkd of Adjective = CatMkd ** open Prelude,ResMkd in {
lin AdAP a ap = {s = \\s,g => a.s ++ ap.s ! s ! g;
isPre = ap.isPre} ;
lin AdjOrd o = {s = o.s; isPre = False} ;
lin AdvAP ap adv = {
s = \\s,g => ap.s ! s ! g ++ adv.s;
isPre = False
} ;
lin CAdvAP c ap np = {s = \\s,g => c.s
++ ap.s ! s ! g ++ np.s ! RSubj;
isPre = ap.isPre} ;
lin ComparA a np = {s = \\s,g => "по" ++ BIND ++ a.s ! s ! g ++ "од" ++ np.s ! RPrep;
isPre = False} ;
lin ComplA2 a2 np = {s = \\s,g => a2.s ! s ! g ++ a2.c2.s ++ np.s ! RObj a2.c2.c;
isPre = False} ;
lin PositA a = a ** {isPre = True} ;
lin ReflA2 a2 = {s = \\s,g => a2.s ! s ! g; isPre = False} ;
lin SentAP ap sc = {s = \\s,g => ap.s ! s ! g ++ sc.s;
isPre = ap.isPre} ;
lin UseA2 a2 = {s = a2.s; isPre = True} ;
lin UseComparA a = {s = \\s,g => "по" ++ BIND ++ a.s ! s ! g; isPre = True} ;
}

View File

@@ -1,3 +1,12 @@
concrete AdverbMkd of Adverb = CatMkd ** open Prelude,ResMkd in {
lin AdAdv a a2 = {s = a.s ++ a2.s} ;
lin AdnCAdv c = {s = c.s} ;
lin ComparAdvAdj c a np = {s = c.s
++ a.s ! Indef ! np.a.g ++ np.s ! RSubj} ;
lin ComparAdvAdjS c a s = {s = c.s
++ a.s ! Indef ! GSg Masc ++ s.s} ;
lin PositAdAAdj a = {s = a.s ! Indef ! GSg Masc} ;
lin PositAdvAdj a = {s = a.s ! Indef ! GSg Masc} ;
lin PrepNP p np = {s = p.s ++ np.s ! RPrep} ;
lin SubjS s s2 = {s = s.s ++ s2.s} ;
}

View File

@@ -1,7 +1,8 @@
--# -path=.:../abstract:../common:../prelude:../api
concrete AllMkd of AllMkdAbs =
LangMkd
LangMkd,
ExtendMkd
** {
} ;

View File

@@ -1,7 +1,8 @@
--# -path=.:../abstract:../common:prelude
abstract AllMkdAbs =
Lang
Lang,
Extend
** {
} ;

View File

@@ -1,4 +1,8 @@
concrete CatMkd of Cat = CommonX ** open ResMkd, Prelude in {
concrete CatMkd of Cat = CommonX - [Temp,Tense] ** open ParamX, ResMkd, Prelude, Predef in {
lincat
Temp = {s : Str ; t : ResMkd.Tense ; a : Anteriority} ;
Tense = {s : Str ; t : ResMkd.Tense} ;
lincat N = Noun ;
lincat N2 = Noun ** {c2 : Compl} ;
@@ -9,7 +13,7 @@ lincat V2, V2S, V2Q = Verb ** {c2 : Compl} ;
lincat V3, V2A, V2V = Verb ** {c2,c3 : Compl} ;
lincat A = Adj ;
lincat A2 = Adj ** {c2 : Compl} ;
lincat Pron = Pron ;
lincat Pron = Pronoun ;
lincat Prep = Compl ;
lincat Decimal = {s : Str; n : Number; hasDot : Bool} ;
lincat Digits = {s : Str; n : Number; tail : DTail} ;
@@ -17,35 +21,35 @@ lincat Digits = {s : Str; n : Number; tail : DTail} ;
linref N,N2,N3 = \n -> n.s ! Indef ! Sg ;
linref V, VA, VV, VS, VQ, V2, V2S, V2Q, V3, V2A, V2V =
\v -> v.present ! Imperfective ! Sg ! P3 ++
case v.isRefl of {
True => "се" ;
False => []
case v.vtype of {
VNormal => [] ;
VMedial Acc => "се" ;
VMedial Dat => "си"
} ;
linref A, A2 = \a -> a.s ! Indef ! GSg Masc ;
lincat AP = {s : Species => GenNum => Str; isPre : Bool} ;
lincat NP = {s : Role => Str; vocative: Str; g : GenNum; p : Person} ;
lincat Num = {s : Str; n : Number} ;
lincat Quant = {s : Str; sp : Species} ;
lincat Det = {s : Str; n : Number; sp : Species} ;
lincat NP = {s : Role => Str; vocative: Str; a : Agr} ;
lincat Num = {s : Str; n : NNumber} ;
lincat Quant = {s : GenNum => Str; sp : Species} ;
lincat Ord = {s : Species => GenNum => Str} ;
lincat Det, DAP = {s : Gender => Str; n : NNumber; sp : Species} ;
lincat VP = {present : Aspect => Number => Person => Str;
aorist : Number => Person => Str;
imperfect : Aspect => Number => Person => Str;
imperative : Aspect => Number => Str;
participle : {aorist : Aspect => GenNum => Str; perfect : Aspect => Str}} ;
lincat VPSlash = {present : Aspect => Number => Person => Str;
aorist : Number => Person => Str;
imperfect : Aspect => Number => Person => Str;
imperative : Aspect => Number => Str;
participle : {aorist : Aspect => GenNum => Str;
imperfect : GenNum => Str; perfect : Aspect => Str;
adjectival : Aspect => Str; adverbial : Str};
noun_from_verb : Str; isRefl : Bool; c2 : Compl} ;
lincat Cl = {present : Aspect => Str;
aorist : Str;
participle : {aorist : Aspect => Str; perfect : Aspect => Str}} ;
lincat IP = {s : Str} ;
lincat VP = Verb ** {compl : Agr => Str} ;
lincat VPSlash = Verb ** {compl : Agr => Str; c2 : Compl} ;
lincat S,QS = {s : Str} ;
lincat RS = {s : GenNum => Str} ;
lincat Cl = {s : Order => ResMkd.Tense => Anteriority => Polarity => Str} ;
lincat QCl = {s : ResMkd.Tense => Anteriority => Polarity => Str} ;
lincat RCl = {s : GenNum => ResMkd.Tense => Anteriority => Polarity => Str} ;
lincat RP = {s : GenNum => Str} ;
lincat IP = {s : Str; g : GenNum} ;
lincat IQuant = {s : GenNum => Str} ;
lincat IDet = {s : Gender => Str; n : Number} ;
lincat Subj = {s : Str} ;
lincat Imp = {s : Polarity => GenNum => Str} ;
lincat Comp = {s : GenNum => Str} ;
lincat Conj = {s : Str; sep : Ints 3; n : Number} ;
}

View File

@@ -0,0 +1,104 @@
--# -coding=utf8
concrete ConjunctionMkd of Conjunction =
CatMkd ** open ResMkd, Coordination, Prelude, Predef in {
lin
ConjS conj ss = {
s = linCoord []!conj.sep ++ ss.s!conj.sep ++ conj.s ++ ss.s!4;
} ;
ConjAdv conj ss = {
s = linCoord []!conj.sep ++ ss.s!conj.sep ++ conj.s ++ ss.s!4;
} ;
ConjAdV conj ss = {
s = linCoord []!conj.sep ++ ss.s!conj.sep ++ conj.s ++ ss.s!4;
} ;
ConjIAdv conj ss = {
s = linCoord []!conj.sep ++ ss.s!conj.sep ++ conj.s ++ ss.s!4;
} ;
ConjNP conj ss = {
s = \\role => linCoord []!conj.sep ++ ss.s!role!conj.sep ++ conj.s ++ ss.s!role!4;
vocative = linCoord []!conj.sep ++ ss.vocative!conj.sep ++ conj.s ++ ss.vocative!4;
a = {g = conjGenNum (genNum Masc conj.n) ss.gn; p = ss.p}
} ;
ConjAP conj ss = {
s = \\sp,gn => linCoord []!conj.sep ++ ss.s!sp!gn!conj.sep ++ conj.s ++ ss.s!sp!gn!4;
isPre = ss.isPre
} ;
ConjRS conj ss = {
s = \\gn => linCoord []!conj.sep ++ ss.s!gn!conj.sep ++ conj.s ++ ss.s!gn!4;
} ;
ConjCN conj ss = {
s = \\sp,n => linCoord []!conj.sep ++ ss.s!sp!n!conj.sep ++ conj.s ++ ss.s!sp!n!4;
count_form = linCoord []!conj.sep ++ ss.count_form!conj.sep ++ conj.s ++ ss.s!Indef!Pl!4;
vocative = \\n => linCoord []!conj.sep ++ ss.vocative!n!conj.sep ++ conj.s ++ ss.vocative!n!4;
g = ss.g
} ;
-- These fun's are generated from the list cat's.
BaseS x y = {s = table {4 => y.s; _ => x.s}} ;
ConsS x xs = {s = table {4 => xs.s!4; t => x.s++linCoord bindComma!t++xs.s!t}} ;
BaseAdv x y = {s = table {4 => y.s; _ => x.s}} ;
ConsAdv x xs = {s = table {4 => xs.s!4; t => x.s++linCoord bindComma!t++xs.s!t}} ;
BaseAdV x y = {s = table {4 => y.s; _ => x.s}} ;
ConsAdV x xs = {s = table {4 => xs.s!4; t => x.s++linCoord bindComma!t++xs.s!t}} ;
BaseIAdv x y = {s = table {4 => y.s; _ => x.s}} ;
ConsIAdv x xs = {s = table {4 => xs.s!4; t => x.s++linCoord bindComma!t++xs.s!t}} ;
BaseNP x y =
{s = \\role=>table {4 => y.s!role; _ => x.s!role};
vocative = table {4 => y.vocative; _ => x.vocative};
gn = conjGenNum x.a.g y.a.g;
p = x.a.p} ;
ConsNP x xs =
{s = \\role=>table {4 => xs.s!role!4; t => x.s!role++linCoord bindComma!t++xs.s!role!t};
vocative = table {4 => xs.vocative!4; t => x.vocative++linCoord bindComma!t++xs.vocative!t};
gn = conjGenNum xs.gn x.a.g;
p = x.a.p} ;
BaseAP x y =
{s = \\sp,gn => table {4 => y.s!sp!gn; _ => x.s!sp!gn} ;
isPre = andB x.isPre y.isPre} ;
ConsAP x xs =
{s = \\sp,gn => table {4 => xs.s!sp!gn!4; t => x.s!sp!gn++linCoord bindComma!t++xs.s!sp!gn!t};
isPre = andB x.isPre xs.isPre} ;
BaseRS x y =
{s = \\gn=>table {4 => y.s!gn; _ => x.s!gn}} ;
ConsRS x xs =
{s = \\gn=>table {4 => xs.s!gn!4; t => x.s!gn++linCoord bindComma!t++xs.s!gn!t}} ;
BaseCN x y =
{s = \\sp,n=>table {4 => y.s!sp!n; _ => x.s!sp!n};
count_form = table {4 => y.count_form; t => x.count_form};
vocative = \\n=>table {4 => y.vocative!n; t => x.vocative!n};
g = x.g} ;
ConsCN x xs =
{s = \\sp,n=>table {4 => xs.s!sp!n!4; t => x.s!sp!n++linCoord bindComma!t++xs.s!sp!n!t};
count_form = table {4 => xs.count_form!4; t => x.count_form++linCoord bindComma!t++xs.count_form!t};
vocative = \\n=>table {4 => xs.vocative!n!4; t => x.vocative!n++linCoord bindComma!t++xs.vocative!n!t};
g = x.g} ;
lincat
[S] = {s : Ints 4 => Str} ;
[Adv] = {s : Ints 4 => Str} ;
[AdV] = {s : Ints 4 => Str} ;
[IAdv] = {s : Ints 4 => Str} ;
[NP] = {s : Role => Ints 4 => Str; vocative : Ints 4 => Str; gn : GenNum; p : Person} ;
[AP] = {s : Species => GenNum => Ints 4 => Str; isPre : Bool} ;
[RS] = {s : GenNum => Ints 4 => Str} ;
[CN] = {s : Species => Number => Ints 4 => Str ;
count_form : Ints 4 => Str ;
vocative : Number => Ints 4 => Str ;
g : Gender} ;
}

View File

@@ -121,7 +121,7 @@ lin
heading3 ("Партицип") ++
adjForms (v.participle.aorist ! Imperfective) ++
tag "br" ++
adjForms v.participle.imperfect ++
adjForms (v.participle.imperfect ! Imperfective) ++
heading2 ("Свършен вид") ++
heading3 ("Изявително наклонение") ++
heading4 ("Сегашно време") ++
@@ -134,6 +134,8 @@ lin
imperative (v.imperative ! Perfective) ++
heading3 ("Партицип") ++
adjForms (v.participle.aorist ! Perfective) ++
tag "br" ++
adjForms (v.participle.imperfect ! Perfective) ++
heading1 ("Именка") ++
v.noun_from_verb ;
s3= ""

View File

@@ -0,0 +1,38 @@
--# -path=.:../abstract:../common:prelude
concrete ExtendMkd of Extend = CatMkd ** open ResMkd, ParadigmsMkd, StructuralMkd in {
lin
CompoundN n1 n2 =
let comp : Species => Number => Str
= \\sp,n => case n1.relType of {
Pref => n1.rel ! sp ! genNum n2.g n ++ n2.s ! sp ! n ;
AdjMod => n1.rel ! sp ! genNum n2.g n ++ n2.s ! Indef ! n ;
AdvMod => n2.s ! sp ! n ++ n1.rel ! sp ! genNum n2.g n
} ;
voc : Number => Str
= \\n => case n1.relType of {
Pref => n1.rel ! Indef ! genNum n2.g n ++ n2.vocative ! n ;
AdjMod => n1.rel ! Indef ! genNum n2.g n ++ n2.vocative ! n ;
AdvMod => n2.vocative ! n ++ n1.rel ! Indef ! genNum n2.g n
}
in {
s = comp ;
count_form = comp ! Indef ! Pl ;
vocative = voc ;
rel = \\sp,n => "на" ++ comp ! sp ! Sg ; relType = AdvMod ;
g = n2.g
} ;
iFem_Pron = mkPron "јас" "мене" "ме" "мене" "ми" "мене" "мој" "мојот" "моја" "мојата" "мое" "моето" "мои" "моите" "ми" (GSg Fem) P1 ;
youFem_Pron = mkPron "ти" "тебе" "те" "тебе" "ти" "тебе" "твој" "твојот" "твоја" "твојата" "твое" "твоето" "твои" "твоите" "ти" (GSg Fem) P2 ;
weFem_Pron = we_Pron ;
youPlFem_Pron = youPl_Pron ;
theyFem_Pron = they_Pron ;
youPolFem_Pron = mkPron "вие" "вас" "ве" "вам" "ви" "вас" "ваш" "вашиот" "ваша" "вашата" "ваше" "вашето" "ваши" "вашите" "ви" (GSg Fem) P2 ;
youPolPl_Pron = youPol_Pron ;
youPolPlFem_Pron = youPol_Pron ;
lin TPastSimple = {s = []} ** {t = VPastSimple} ; --# notpresent
}

View File

@@ -1,2 +1,2 @@
concrete GrammarMkd of Grammar = VerbMkd,SentenceMkd,NounMkd,AdverbMkd,AdjectiveMkd,NumeralMkd,PhraseMkd,TextX,StructuralMkd,TenseX ** {
concrete GrammarMkd of Grammar = NamesMkd,VerbMkd,SentenceMkd,QuestionMkd,NounMkd,AdverbMkd,AdjectiveMkd,IdiomMkd,NumeralMkd,PhraseMkd,RelativeMkd,TextMkd,StructuralMkd,TenseMkd,ConjunctionMkd ** {
}

View File

@@ -0,0 +1,52 @@
concrete IdiomMkd of Idiom = CatMkd ** open Prelude,ResMkd in {
lin CleftAdv a s = {s = \\t,a2,p,o => a.s ++ s.s} ;
lin CleftNP np rs = {s = \\t,a,p,o => np.s ! RSubj
++ rs.s ! np.a.g} ;
lin ExistIP ip = {s = \\t,a,p => ip.s} ;
lin ExistIPAdv ip a = {s = \\t,a2,p => ip.s ++ a.s} ;
lin ExistNP np = {s = \\t,a,p,o => np.s ! RSubj} ;
lin ExistNPAdv np a = {s = \\t,a2,p,o => np.s ! RSubj ++ a.s} ;
lin GenericCl vp = {s = \\t,a,p,o => vp.present ! Imperfective ! Sg
! P1} ;
lin ImpP3 np vp = {s = np.s ! RSubj
++ vp.present ! Imperfective ! Sg ! np.a.p} ;
lin ImpPl1 vp = {s = vp.present ! Imperfective ! Sg ! P1} ;
lin ImpersCl vp = {s = \\t,a,p,o => vp.present ! Imperfective ! Sg
! P1} ;
lin ProgrVP vp = vp ** {
present = \\a,n,p => vp.present ! Imperfective ! n ! p ;
imperfect = \\a,n,p => vp.imperfect ! Imperfective ! n ! p ;
imperative = \\a,n => vp.imperative ! Imperfective ! n ;
participle = {aorist = \\a,gn => vp.participle.aorist ! Imperfective ! gn ;
perfect = \\a => vp.participle.perfect ! Imperfective ;
imperfect = \\a => vp.participle.imperfect ! Imperfective ;
adjectival = vp.participle.adjectival ;
adverbial = vp.participle.adverbial}
} ;
lin SelfAdVVP vp = {present = \\a,n,p => vp.present ! a ! n ! p;
aorist = \\n,p => vp.aorist ! n ! p;
imperfect = \\a,n,p => vp.imperfect ! a ! n ! p;
imperative = \\a,n => vp.imperative ! a ! n;
participle = {aorist = \\a,g => vp.participle.aorist ! a ! g;
imperfect = \\a,g => vp.participle.imperfect ! a ! g;
perfect = \\a => vp.participle.perfect ! a;
adjectival = \\a => vp.participle.adjectival ! a;
adverbial = vp.participle.adverbial};
noun_from_verb = vp.noun_from_verb; vtype = vp.vtype;
compl = \\v => vp.compl ! {g = GSg Masc; p = P1}} ;
lin SelfAdvVP vp = {present = \\a,n,p => vp.present ! a ! n ! p;
aorist = \\n,p => vp.aorist ! n ! p;
imperfect = \\a,n,p => vp.imperfect ! a ! n ! p;
imperative = \\a,n => vp.imperative ! a ! n;
participle = {aorist = \\a,g => vp.participle.aorist ! a ! g;
imperfect = \\a,g => vp.participle.imperfect ! a ! g;
perfect = \\a => vp.participle.perfect ! a;
adjectival = \\a => vp.participle.adjectival ! a;
adverbial = vp.participle.adverbial};
noun_from_verb = vp.noun_from_verb; vtype = vp.vtype;
compl = \\v => vp.compl ! {g = GSg Masc; p = P1}} ;
lin SelfNP np = {s = \\r => np.s ! r; vocative = np.vocative;
a = {g = np.a.g; p = np.a.p}} ;
}

View File

@@ -5,7 +5,14 @@ lin
airplane_N = mkN001 "авион" ;
apple_N = mkN012 "јаболко" ;
bad_A = mkA004 "лош" ;
good_A = mkA021 "добар" ;
close_V2 = mkV2 (dualV (mkV "затвара") (mkV "затвори")) ;
die_V = dualV (mkV002 "умира") (mkV021 "умре") ;
door_N = mkN008 "врата" ;
factory_N = mkN008 "фабрика" ;
fish_N = mkN "риба" ;
good_A = mkA021 "добар" ;
play_V = mkV001 "игра" ;
man_N = mkN001 "маж" ;
woman_N = mkN "жена" ;
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,18 @@
concrete NamesMkd of Names = CatMkd ** open Prelude,ResMkd in {
lin AdjLN ap ln = {s = ap.s ! Indef ! GSg Masc ++ ln.s} ;
lin FemaleSurname sn = {s = \\r => sn.s; vocative = sn.s;
a = {g = GSg Masc; p = P1}} ;
lin FullName gn sn = {s = \\r => gn.s ++ sn.s;
vocative = gn.s ++ sn.s; a = {g = GSg Masc; p = P1}} ;
lin GivenName gn = {s = \\r => gn.s; vocative = gn.s;
a = {g = GSg Masc; p = P1}} ;
lin InLN ln = {s = ln.s} ;
lin MaleSurname sn = {s = \\r => sn.s; vocative = sn.s;
a = {g = GSg Masc; p = P1}} ;
lin PlSurname sn = {s = \\r => sn.s; vocative = sn.s;
a = {g = GSg Masc; p = P1}} ;
lin PlainLN ln = {s = \\r => ln.s; vocative = ln.s;
a = {g = GSg Masc; p = P1}} ;
lin UseLN ln = {s = \\r => ln.s; vocative = ln.s;
a = {g = GSg Masc; p = P1}} ;
}

View File

@@ -1,4 +1,5 @@
concrete NounMkd of Noun = CatMkd ** open Prelude,ResMkd in {
lin AdNum a c = {s = a.s ++ c.s} ;
lin AdjCN ap cn = {
s = case ap.isPre of {
True => \\s,n => ap.s ! s
@@ -21,27 +22,133 @@ concrete NounMkd of Noun = CatMkd ** open Prelude,ResMkd in {
} ++
cn.vocative ! n;
count_form = ap.s ! Indef ! GPl ++ cn.count_form; g = cn.g} ;
lin AdjDAP d ap = {
s = \\g => d.s ! g ++ ap.s ! Indef ! genNum g (nnum2num d.n) ;
n = d.n ;
sp = d.sp
} ;
lin AdvCN cn adv = {
s = \\s,n => cn.s ! s ! n ++ adv.s;
count_form = cn.count_form ++ adv.s;
vocative = \\n => cn.vocative ! n ++ adv.s;
g = cn.g
} ;
lin DefArt = {s = []; sp = Def Unspecified} ;
lin AdvNP np a = {s = \\r => np.s ! r ++ a.s;
vocative = np.vocative ++ a.s; a = np.a} ;
lin ApposCN cn np = {s = \\s,n => cn.s ! s ! n ++ np.s ! RSubj;
count_form = cn.count_form ++ np.s ! RSubj;
vocative = \\n => cn.vocative ! n ++ np.vocative; g = cn.g} ;
lin ComplN2 n2 np = {s = \\s,n => n2.s ! s ! n ++ n2.c2.s ++ np.s ! RObj n2.c2.c;
count_form = n2.count_form ++ n2.c2.s ++ np.s ! RObj n2.c2.c;
vocative = \\n => n2.vocative ! n ++ n2.c2.s ++ np.s ! RObj n2.c2.c;
g = n2.g} ;
lin ComplN3 n3 np = {s = \\s,n => n3.s ! s ! n ++ n3.c2.s ++ np.s ! RObj n3.c2.c;
count_form = n3.count_form ++ n3.c2.s ++ np.s ! RObj n3.c2.c;
vocative = \\n => n3.vocative ! n ++ n3.c2.s ++ np.s ! RObj n3.c2.c;
rel = \\s,g => n3.s ! s ! genNum2num g ++ n3.c2.s ++ np.s ! RObj n3.c2.c;
relType = AdvMod;
g = n3.g;
c2 = n3.c3} ;
lin CountNP d np = {s = \\r => d.s ! Masc ++ np.s ! r;
vocative = d.s ! Masc ++ np.vocative;
a = np.a} ;
lin DefArt = {s = \\_=>[]; sp = Def Unspecified} ;
lin DetCN det cn = {
s = \\r => det.s ++ cn.s ! det.sp ! det.n;
vocative = det.s ++ cn.vocative ! det.n;
g = case det.n of {
Sg => GSg cn.g;
Pl => GPl
} ;
p = P3;
s = \\r => case det.n of {
NNum n => det.s ! cn.g ++ cn.s ! det.sp ! n;
NCountable => det.s ! cn.g ++ cn.count_form
} ;
vocative = det.s ! cn.g ++ cn.vocative ! nnum2num det.n ;
a = {g = genNum cn.g (nnum2num det.n) ;
p = P3};
} ;
lin DetQuant det num = {s = det.s ++ num.s; n = num.n;
sp = det.sp} ;
lin IndefArt = {s = []; sp = Indef} ;
lin NumPl = {s = []; n = Pl} ;
lin NumSg = {s = []; n = Sg} ;
lin DetDAP d = d ;
lin DetNP d = {s = \\r => d.s ! Masc; vocative = d.s ! Masc;
a = {g = GSg Masc; p = P1}} ;
lin DetQuant q num = {s = \\g => q.s ! genNum g (nnum2num num.n) ++ num.s;
n = num.n;
sp = q.sp} ;
lin DetQuantOrd q n o = {
s = \\g => q.s ! GSg Masc ++ n.s ++ o.s ! q.sp ! genNum g (nnum2num n.n);
n = n.n;
sp = Indef
} ;
lin ExtAdvNP np a = {
s = \\r => np.s ! r ++ SOFT_BIND++"," ++ a.s;
vocative = np.vocative ++ SOFT_BIND++"," ++ a.s;
a = np.a
} ;
lin IndefArt = {s = \\_=>[]; sp = Indef} ;
lin MassNP cn = {s = \\r => cn.s ! Indef ! Sg;
vocative = cn.vocative ! Sg;
a = {g = GSg cn.g; p = P3}} ;
lin NumCard c = {s = c.s; n = NNum Sg} ;
lin NumDecimal d = {s = d.s} ;
lin NumDigits d = {s = d.s} ;
lin NumNumeral n = {s = n.s} ;
lin NumPl = {s = []; n = NNum Pl} ;
lin NumSg = {s = []; n = NNum Sg} ;
lin UseN s = s ;
lin UsePron p = p ** {vocative=p.s ! RSubj} ;
lin RelNP np rs = {
s = \\r => np.s ! r ++ rs.s ! np.a.g ;
vocative = np.vocative ++ rs.s ! np.a.g ;
a = np.a;
} ;
lin OrdDigits d = {s = \\s,gn => d.s} ;
lin OrdNumeral n = {s = \\s,gn => n.s} ;
lin OrdNumeralSuperl n a = {s = \\s,gn => n.s ++ "нај" ++ BIND ++ a.s ! s ! gn} ;
lin OrdSuperl a = {s = \\s,gn => "нај" ++ BIND ++ a.s ! s ! gn} ;
lin PPartNP np v2 = {s = \\r => np.s ! r
++ v2.present ! Imperfective ! Sg ! np.a.p;
vocative = np.vocative ++ v2.present ! Imperfective ! Sg ! np.a.p;
a = {g = np.a.g; p = np.a.p}} ;
lin PartNP cn np = {s = \\s,n => cn.s ! s ! n ++ np.s ! RSubj;
count_form = cn.count_form ++ np.s ! RSubj;
vocative = \\n => cn.vocative ! n ++ np.vocative; g = cn.g} ;
lin PossNP cn np = {
s = \\s,n => cn.s ! s ! n ++ "на" ++ np.s ! RObj Acc;
count_form = cn.count_form ++ "на" ++ np.s ! RObj Acc;
vocative = \\n => cn.vocative ! n ++ "на" ++ np.s ! RObj Acc;
g = cn.g
} ;
lin PossPron p = {s = p.poss ! Def Unspecified; sp = Indef} ;
lin PredetNP p np = {
s = \\r => p.s ++ np.s ! r;
vocative = p.s ++ np.vocative;
a = np.a
} ;
lin QuantityNP d mu =
let s = case mu.isPre of {
True => mu.s ++ d.s ;
False => d.s ++ mu.s
}
in { s = \\r => s;
vocative = s;
a = {g = GSg Masc; p = P3}
} ;
lin RelCN cn rs = {
s = \\sp,n => cn.s ! sp ! n ++ rs.s ! genNum cn.g n ;
count_form = cn.count_form ++ rs.s ! GPl ;
vocative = \\n => cn.vocative ! n ++ rs.s ! genNum cn.g n ;
g = cn.g;
} ;
lin SentCN cn sc = {s = \\s,n => cn.s ! s ! n ++ sc.s;
count_form = cn.count_form ++ sc.s;
vocative = \\n => cn.vocative ! n ++ sc.s; g = cn.g} ;
lin Use2N3 n3 = {s = \\s,n => n3.s ! s ! n;
count_form = n3.count_form; vocative = \\n => n3.vocative ! n;
rel = \\s,g => n3.rel ! s ! g; relType = n3.relType; g = n3.g;
c2 = {s = n3.c2.s; c = n3.c2.c}} ;
lin Use3N3 n3 = {s = \\s,n => n3.s ! s ! n;
count_form = n3.count_form; vocative = \\n => n3.vocative ! n;
rel = \\s,g => n3.rel ! s ! g; relType = n3.relType; g = n3.g;
c2 = {s = n3.c2.s; c = n3.c2.c}} ;
lin UseN2 n2 = n2 ;
lin UsePN pn = {
s = \\r => pn.s;
vocative = pn.s;
a = {g = GSg Masc; p = P3}
} ;
}

View File

@@ -1051,7 +1051,9 @@ mkV = overload {
mkV : Str -> Str -> Str -> V = reg3V -- present;Sg;P3 participle;adverbial participle;adjectival
} ;
reflV : V -> V = \v -> v ** {isRefl=True} ;
accusative : Case = Acc ;
dative : Case = Dat ;
medialV : V -> Case -> V = \v,c -> v ** {vtype=VMedial c} ;
dualV : V -> V -> V = \impf,perf -> lin V
{ present = table {
@@ -1071,7 +1073,10 @@ dualV : V -> V -> V = \impf,perf -> lin V
Imperfective => impf.participle.aorist ! Imperfective ;
Perfective => perf.participle.aorist ! Perfective
} ;
imperfect = impf.participle.imperfect ;
imperfect = table {
Imperfective => impf.participle.imperfect ! Imperfective ;
Perfective => perf.participle.imperfect ! Perfective
} ;
perfect = table {
Imperfective => impf.participle.perfect ! Imperfective ;
Perfective => perf.participle.perfect ! Perfective
@@ -1083,7 +1088,7 @@ dualV : V -> V -> V = \impf,perf -> lin V
adverbial = impf.participle.adverbial
} ;
noun_from_verb = impf.noun_from_verb ;
isRefl = impf.isRefl
vtype = impf.vtype
} ;
compoundV = overload {
@@ -1093,13 +1098,13 @@ compoundV = overload {
imperfect = \\a,n,p => v.imperfect ! a ! n ! p ++ s ;
imperative = \\a,n => v.imperative ! a ! n ++ s ;
participle = { aorist = \\a,gn => v.participle.aorist ! a ! gn ++ s ;
imperfect = \\gn => v.participle.imperfect ! gn ++ s ;
imperfect = \\a,gn => v.participle.imperfect ! a ! gn ++ s ;
perfect = \\a => v.participle.perfect ! a ++ s ;
adjectival = \\a => v.participle.adjectival ! a ++ s ;
adverbial = v.participle.adverbial
} ;
noun_from_verb = v.noun_from_verb ++ s ;
isRefl = v.isRefl
vtype = v.vtype
}
} ;
@@ -1119,13 +1124,13 @@ mkV2V = overload {
} ;
mkV2S = overload {
mkV2S : V -> V2S = \v -> lin V2S v ** {c2,c3=noPrep} ;
mkV2S : V -> Prep -> Prep -> V2S = \v,p2,p3 -> lin V2S v ** {c2=p2; c3=p3} ;
mkV2S : V -> V2S = \v -> lin V2S v ** {c2=noPrep} ;
mkV2S : V -> Prep -> V2S = \v,p2 -> lin V2S v ** {c2=p2} ;
} ;
mkV2Q = overload {
mkV2Q : V -> V2Q = \v -> lin V2Q v ** {c2,c3=noPrep} ;
mkV2Q : V -> Prep -> Prep -> V2Q = \v,p2,p3 -> lin V2Q v ** {c2=p2; c3=p3} ;
mkV2Q : V -> V2Q = \v -> lin V2Q v ** {c2=noPrep} ;
mkV2Q : V -> Prep -> V2Q = \v,p2 -> lin V2Q v ** {c2=p2} ;
} ;
mkV2A = overload {
@@ -1156,18 +1161,66 @@ mkInterj : Str -> Interj = \s -> lin Interj {s=s} ;
mkVoc : Str -> Voc = \s -> lin Voc {s=s} ;
mkPrep : Str -> Prep = \s -> lin Prep {s=s} ;
noPrep : Prep = lin Prep {s=""} ;
mkPrep : Str -> Prep = \s -> lin Prep {s=s; c=Acc} ;
noPrep : Prep = lin Prep {s=""; c=Acc} ;
mkIP : Str -> IP = \s -> lin IP {s=s} ;
mkIP : Str -> GenNum -> IP = \s,g -> lin IP {s=s; g=g} ;
mkIAdv : Str -> IAdv = \s -> lin IAdv {s=s} ;
mkIQuant : Str -> IQuant = \s -> lin IQuant {s=s} ;
mkIDet : Str -> IDet = \s -> lin IDet {s=s} ;
mkIQuant : Str -> Str -> Str -> Str -> IQuant = \m,f,n,pl ->
lin IQuant {
s=table {
GSg Masc => m;
GSg Fem => f;
GSg Neuter => n;
GPl => pl
}
} ;
mkIDet = overload {
mkIDet : Str -> IDet = \s -> lin IDet {s=\\_=>s; n=Pl} ;
mkIDet : Str -> Str -> Str -> IDet = \m,f,n ->
lin IDet {
s=table {
Masc => m ;
Fem => f ;
Neuter => n
} ;
n=Sg;
} ;
} ;
mkMU : Str -> MU = \s -> lin MU {s=s; isPre = False} ;
mkSubj : Str -> Subj = \s -> lin Subj {s=s} ;
mkQuant : Str -> Quant = \s -> lin Quant {s=s; sp=Indef} ;
mkDet : Str -> Det = \s -> lin Det {s=s; n=Sg; sp=Indef} ;
mkConj : Str -> Conj = \s -> lin Conj {s=s} ;
mkQuant : Str -> Str -> Str -> Str -> Quant = \m,f,n,pl ->
lin Quant {
s=table {
GSg Masc => m;
GSg Fem => f;
GSg Neuter => n;
GPl => pl
} ;
sp=Indef
} ;
mkDet = overload {
mkDet : Str -> Det = \s -> lin Det {s=\\_=>s; n=NNum Pl; sp=Indef} ;
mkDet : Str -> Str -> Str -> Det = \m,f,n ->
lin Det {
s=table {
Masc => m ;
Fem => f ;
Neuter => n
} ;
n=NNum Sg;
sp=Indef
} ;
} ;
mkConj : Str -> Number -> Conj =
\s,n -> lin Conj {s = s; sep = 3; n = n} ;
mkPConj : Str -> PConj = \s -> lin PConj {s=s} ;
mkPredet : Str -> Predet = \s -> lin Predet {s=s} ;
mkCAdv : Str -> CAdv = \s -> lin CAdv {s=s; p=""} ;

View File

@@ -1,14 +1,21 @@
concrete PhraseMkd of Phrase = CatMkd ** open Prelude, ResMkd in {
lin
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
UttS s = s ;
UttInterj i = i ;
NoPConj = {s = []} ;
NoVoc = {s = []} ;
VocNP np = {s = SOFT_BIND++"," ++ np.vocative} ;
lin NoPConj = {s : Str = []} ;
lin NoVoc = {s : Str = []} ;
lin PConjConj c = {s = c.s} ;
lin PhrUtt pconj utt voc = {s : Str = pconj.s ++ utt.s ++ voc.s} ;
lin UttAP ap = {s = ap.s ! Indef ! GSg Masc} ;
lin UttAdv a = {s = a.s} ;
lin UttCN cn = {s = cn.s ! Indef ! Sg} ;
lin UttCard c = {s = c.s} ;
lin UttIAdv i = {s = i.s} ;
lin UttIP ip = {s = ip.s} ;
lin UttImpPl p i = {s = p.s ++ i.s ! p.p ! GPl} ;
lin UttImpPol p i = {s = p.s ++ i.s ! p.p ! GPl} ;
lin UttImpSg p i = {s = p.s ++ i.s ! p.p ! GSg Masc} ;
lin UttInterj i = i ;
lin UttNP np = {s = np.s ! RSubj} ;
lin UttQS s = s ;
lin UttS s = s ;
lin UttVP vp = {s = "да" ++ vp.present ! Perfective ! Sg ! P3 ++ vp.compl ! {g=GSg Masc; p=P3}} ;
lin VocNP np = {s : Str = SOFT_BIND ++ "," ++ np.vocative} ;
}

View File

@@ -0,0 +1,22 @@
concrete QuestionMkd of Question = CatMkd ** open Prelude,ResMkd in {
lin AdvIAdv i a = {s = i.s ++ a.s} ;
lin AdvIP ip a = {s = ip.s ++ a.s; g = ip.g} ;
lin CompIAdv i = {s = i.s} ;
lin CompIP ip = {s = ip.s} ;
lin IdetCN idet cn = {
s = idet.s ! cn.g ++ cn.s ! Indef ! idet.n;
g = genNum cn.g idet.n
} ;
lin IdetIP idet = {s = idet.s ! Masc; g = genNum Masc idet.n} ;
lin IdetQuant i n = {
s = \\g => i.s ! GSg Masc ++ n.s;
n = Sg
} ;
lin PrepIP p ip = {s : Str = p.s ++ ip.s} ;
lincat QVP = {s : Str} ;
lin QuestCl cl = {s = cl.s ! Quest} ;
lin QuestIAdv i cl = {s = \\t,a,p => i.s ++ cl.s ! Main ! t ! a ! p} ;
lin QuestIComp i np = {s = \\t,a,p => i.s ++ np.s ! RSubj} ;
lin QuestSlash ip c = {s = \\t,a,p => ip.s ++ c.s} ;
lin QuestVP ip vp = {s = mkClause ip.s {g=ip.g; p=P3} vp ! Main} ;
}

View File

@@ -0,0 +1,15 @@
concrete RelativeMkd of Relative = CatMkd ** open Prelude,ResMkd in {
lin FunRP p np rp = {s = \\g => p.s ++ np.s ! RSubj ++ rp.s ! g} ;
lin IdRP = {s = table {
GSg Masc => "кој" ;
GSg Fem => "која" ;
GSg Neuter => "кое" ;
GPl => "кои"
}
} ;
lin RelCl cl = {s = \\g => cl.s ! Main} ;
lin RelSlash rp c = {s = \\g,t,a,p => rp.s ! g ++ c.s} ;
lin RelVP rp vp = {
s = \\gn => mkClause (rp.s ! gn) {g=gn; p=P3} vp ! Main
} ;
}

View File

@@ -1,12 +1,16 @@
resource ResMkd = ParamX [DTail,T1,T2,T3,inc] ** open Prelude in {
resource ResMkd = ParamX - [Tense] ** open Prelude, Predef in {
oper Compl = {s : Str} ;
oper Compl = {s : Str; c : Case} ;
param Species = Indef | Def Distance ;
param Distance = Unspecified | Distal | Proximal ;
param Number = Sg | Pl ;
param NRelType = Pref | AdjMod | AdvMod ;
NNumber =
NNum Number
| NCountable
;
param Gender = Masc | Fem | Neuter ;
oper Agr = {g : GenNum; p : Person} ;
oper Noun = {s: Species => Number => Str; count_form: Str; vocative: Number => Str; rel: Species => GenNum => Str; relType : NRelType; g: Gender} ; -- 24855
oper mkNoun : (_,_,_,_,_,_,_,_,_,_,_ : Str) -> Gender -> Noun =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,g ->
@@ -40,9 +44,18 @@ oper mkNoun : (_,_,_,_,_,_,_,_,_,_,_ : Str) -> Gender -> Noun =
param Aspect = Imperfective | Perfective ;
param Person = P1 | P3 | P2 ;
param GenNum = GSg Gender | GPl ;
oper Verb = {present: Aspect => Number => Person => Str; aorist: Number => Person => Str; imperfect: Aspect => Number => Person => Str; imperative: Aspect => Number => Str; participle: {aorist: Aspect => GenNum => Str; imperfect: GenNum => Str; perfect: Aspect => Str; adjectival: Aspect => Str; adverbial: Str}; noun_from_verb: Str; isRefl: Bool} ; -- 8174
param VType = VNormal | VMedial Case ;
Tense = VPresent
| VPastSimple --# notpresent
| VPastImperfect --# notpresent
| VFut --# notpresent
| VCond --# notpresent
;
Order = Main | Quest ;
oper Verb = {present: Aspect => Number => Person => Str; aorist: Number => Person => Str; imperfect: Aspect => Number => Person => Str; imperative: Aspect => Number => Str; participle: {aorist: Aspect => GenNum => Str; imperfect: Aspect => GenNum => Str; perfect: Aspect => Str; adjectival: Aspect => Str; adverbial: Str}; noun_from_verb: Str; vtype: VType} ; -- 8174
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 ->
{ present = \\_ =>
@@ -95,7 +108,8 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ :
GSg Neuter => f23 ;
GPl => f24
} ;
imperfect = table {
imperfect = \\_ =>
table {
GSg Masc => f25 ;
GSg Fem => f26 ;
GSg Neuter => f27 ;
@@ -106,7 +120,7 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ :
adverbial = f31
} ;
noun_from_verb = f32 ;
isRefl = False
vtype = VNormal
} ;
@@ -153,12 +167,175 @@ oper mkAdv : Str -> Adv =
param Case = Acc | Dat ;
param Role = RSubj | RObj Case | RPrep ;
oper Pron = {s : Role => Str; clitic : Case => Str; g : GenNum; p : Person} ;
oper Pronoun = {
s : Role => Str;
clitic : Case => Str;
poss : Species => GenNum => Str ;
poss_clitic : Str ;
a : {g : GenNum; p : Person}
} ;
conjGenNum : GenNum -> GenNum -> GenNum = \a,b ->
case <a,b> of {
<GSg _,GSg g> => GSg g ;
_ => GPl
} ;
genNum : Gender -> Number -> GenNum = \g,n ->
case n of {
Sg => GSg g ;
Pl => GPl
} ;
nnum2num : NNumber -> Number = \n ->
case n of {
NNum n => n ;
NCountable => Pl
} ;
genNum2num : GenNum -> Number = \gn ->
case gn of {
GSg _ => Sg ;
GPl => Pl
} ;
auxBe = {
present : Number => Person => Str
= table {
Sg => table {
P1 => "сум" ;
P2 => "си" ;
P3 => "е"
} ;
Pl => table {
P1 => "сме" ;
P2 => "сте" ;
P3 => "се"
}
} ;
imperfect : Number => Person => Str
= table {
Sg => table {
P1 => "бев" ;
P2 => "беше" ;
P3 => "беше"
} ;
Pl => table {
P1 => "бевме" ;
P2 => "бевте" ;
P3 => "беа"
}
} ;
imperative : Number => Str =
table {
Sg => "биди" ;
Pl => "бидете"
} ;
participle = {
aorist : GenNum => Str
= table {
GSg Masc => "бил" ;
GSg Fem => "била" ;
GSg Neuter => "било" ;
GPl => "биле"
} ;
imperfect : GenNum => Str
= table {
GSg Masc => "бидел" ;
GSg Fem => "бидела" ;
GSg Neuter => "бидело" ;
GPl => "биделе"
}
}
} ;
auxHave = {
present : Number => Person => Str
= table {
Sg => table {
P1 => "имам" ;
P2 => "имаш" ;
P3 => "има"
} ;
Pl => table {
P1 => "имаме" ;
P2 => "имате" ;
P3 => "имаат"
}
} ;
imperfect : Number => Person => Str
= table {
Sg => table {
P1 => "имав" ;
P2 => "имаше" ;
P3 => "имаше"
} ;
Pl => table {
P1 => "имавме" ;
P2 => "имавте" ;
P3 => "имаа"
}
} ;
imperative : Number => Str =
table {
Sg => "имај" ;
Pl => "имајте"
} ;
participle = {
imperfect : GenNum => Str
= table {
GSg Masc => "имал" ;
GSg Fem => "имала" ;
GSg Neuter => "имало" ;
GPl => "имале"
}
}
} ;
mkClause : Str -> Agr -> Verb ** {compl : Agr => Str} -> Order => Tense => Anteriority => Polarity => Str
= \subj,agr,vp ->
let n = case agr.g of {
GSg _ => Sg ;
GPl => Pl
}
in \\o,t,a,p =>
case <t,a> of {
<VPresent,Simul> => subj ++ neg ++ se ++ vp.present ! Imperfective ! n ! agr.p ++ li ++ vp.compl ! agr ;
<VPresent,Anter> => case o of {
Main => subj ++ neg ++ auxBe.present ! n ! agr.p ++ se ++ vp.participle.imperfect ! Perfective ! agr.g ++ vp.compl ! agr ;
Quest => subj ++ neg ++ se ++ vp.participle.imperfect ! Perfective ! agr.g ++ li ++ auxBe.present ! n ! agr.p ++ vp.compl ! agr
} ;
<VPastSimple,Simul> => subj ++ neg ++ se ++ vp.aorist ! n ! agr.p ++ li ++ vp.compl ! agr ;
<VPastSimple,Anter> => subj ++ neg ++ se ++ auxBe.imperfect ! n ! agr.p ++ li ++ vp.participle.imperfect ! Perfective ! agr.g ++ vp.compl ! agr ;
<VPastImperfect,Simul> => subj ++ neg ++ se ++ vp.imperfect ! Perfective ! n ! agr.p ++ li ++ vp.compl ! agr ;
<VPastImperfect,Anter> => subj ++ neg ++ se ++ auxBe.imperfect ! n ! agr.p ++ li ++ vp.participle.imperfect ! Perfective ! agr.g ++ vp.compl ! agr ;
<VFut, Simul> => subj ++ fut.p1 ++ se ++ vp.present ! Perfective ! n ! agr.p ++ fut.p2 ++ vp.compl ! agr ;
<VFut, Anter> => subj ++ fut.p1 ++ se ++ auxHave.present ! n ! agr.p ++ fut.p2 ++ vp.participle.perfect ! Perfective ++ vp.compl ! agr ;
<VCond,Simul> => subj ++ neg ++ "би" ++ li ++ se ++ vp.participle.imperfect ! Perfective ! agr.g ++ vp.compl ! agr ;
<VCond,Anter> => subj ++ neg ++ "би" ++ li ++ auxHave.participle.imperfect ! agr.g ++ se ++ vp.participle.perfect ! Perfective ++ vp.compl ! agr
} where {
neg = case p of {
Pos => "" ;
Neg => "не"
} ;
fut = case <p,o> of {
<Pos,Main> => <"ке",[]> ;
<Neg,Main> => <"нема да",[]> ;
<Pos,Quest> => <"ке","ли"> ;
<Neg,Quest> => <"нема ли да",[]>
} ;
li = case o of {
Main => "" ;
Quest => "ли"
} ;
se = case vp.vtype of {
VNormal => "" ;
VMedial Acc => "се" ;
VMedial Dat => "си"
}
} ;
linCoord : Str -> Ints 4 => Str ;
linCoord comma = table {0 => "и"; 1=>"или"; 2=>"ниту"; 3=>comma; 4=>[]} ;
}

View File

@@ -1,13 +1,31 @@
concrete SentenceMkd of Sentence = CatMkd ** open Prelude,ResMkd in {
lin PredVP np vp =
let n = case np.g of {
GSg _ => Sg ;
GPl => Pl
}
in {present = \\a => np.s ! RSubj ++ vp.present ! a ! n ! np.p ;
aorist = np.s ! RSubj ++ vp.aorist ! n ! np.p ;
participle = {aorist = \\a => np.s ! RSubj ++ vp.participle.aorist ! a ! np.g;
perfect = \\a => np.s ! RSubj ++ vp.participle.perfect ! a}} ;
lin AdvImp a i = {s = \\p,gn => a.s ++ i.s ! p ! gn} ;
lin AdvS a s = {s = a.s ++ s.s} ;
lin AdvSlash c a = {s = c.s ++ a.s} ;
lin EmbedQS qs = {s = qs.s} ;
lin EmbedS s = {s = s.s} ;
lin EmbedVP vp = {s = "да" ++ vp.present ! Perfective ! Sg ! P3 ++ vp.compl ! {g=GSg Masc; p=P3}} ;
lin ExtAdvS a s = {s = a.s ++ s.s} ;
lin ImpVP vp = {
s = \\p,gn=>case p of {
Pos => vp.imperative ! Perfective ! genNum2num gn ;
Neg => "не" ++ vp.imperative ! Imperfective ! genNum2num gn
} ++
vp.compl ! {g=gn; p=P2}
} ;
lin PredSCVP sc vp = {s = \\t,a,p,o => sc.s
++ vp.present ! Imperfective ! Sg ! P1} ;
lin PredVP np vp = {s = mkClause (np.s ! RSubj) np.a vp} ;
lin RelS s rs = {s = s.s ++ rs.s ! GSg Masc} ;
lin SSubjS s s2 s3 = {s = s.s ++ s2.s ++ s3.s} ;
lin SlashPrep cl p = {s = cl.s ! Main ! VPresent ! Simul ! Pos
++ p.s} ;
lin SlashVP np v = {s = np.s ! RSubj
++ v.present ! Imperfective ! Sg ! np.a.p} ;
lin SlashVS np vs s = {s = np.s ! RSubj
++ vs.present ! Imperfective ! Sg ! np.a.p ++ s.s} ;
lin UseCl t p cl = {s = t.s ++ p.s ++ cl.s ! Main ! t.t ! t.a ! p.p} ;
lin UseQCl t p cl = {s = t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p} ;
lin UseRCl t p cl = {s = \\gn => t.s ++ p.s ++ cl.s ! gn ! t.t ! t.a ! p.p} ;
lin UseSlash t p c = {s = t.s ++ p.s ++ c.s} ;
}

View File

@@ -1,13 +1,29 @@
concrete StructuralMkd of Structural = CatMkd ** open ResMkd,MorphoMkd in {
concrete StructuralMkd of Structural = CatMkd ** open ResMkd,MorphoMkd,ParadigmsMkd in {
lin i_Pron = mkPron "јас" "мене" "ме" "мене" "ми" "мене" "мој" "мојот" "моја" "мојата" "мое" "моето" "мои" "моите" "ми" (GSg Masc) P1 ;
lin youSg_Pron = mkPron "ти" "тебе" "те" "тебе" "ти" "тебе" "твој" "твојот" "твоја" "твојата" "твое" "твоето" "твои" "твоите" "ти" (GSg Masc) P2 ;
lin he_Pron = mkPron "тој" "него" "го" "нему" "му" "него" "негов" "неговиот" "негова" "неговата" "негово" "неговото" "негови" "неговите" "му" (GSg Masc) P3 ;
lin she_Pron = mkPron "таа" "неа" "ја" "нејзе" "ѝ" "неа" "нејзин" "нејзиниот" "нејзина" "нејзината" "нејзино" "нејзиното" "нејзини" "нејзините" "ѝ" (GSg Masc) P3 ;
lin it_Pron = mkPron "тоа" "него" "го" "нему" "му" "него" "негов" "неговиот" "негова" "неговата" "негово" "неговото" "негови" "неговите" "му" (GSg Masc) P3 ;
lin she_Pron = mkPron "таа" "неа" "ја" "нејзе" "ѝ" "неа" "нејзин" "нејзиниот" "нејзина" "нејзината" "нејзино" "нејзиното" "нејзини" "нејзините" "ѝ" (GSg Fem) P3 ;
lin it_Pron = mkPron "тоа" "него" "го" "нему" "му" "него" "негов" "неговиот" "негова" "неговата" "негово" "неговото" "негови" "неговите" "му" (GSg Neuter) P3 ;
lin we_Pron = mkPron "ние" "нас" "нѐ" "нам" "ни" "нас" "наш" "нашиот" "наша" "нашата" "наше" "нашето" "наши" "нашите" "ни" GPl P1 ;
lin youPl_Pron = mkPron "вие" "вас" "ве" "вам" "ви" "вас" "ваш" "вашиот" "ваша" "вашата" "ваше" "вашето" "ваши" "вашите" "ви" GPl P2 ;
lin youPol_Pron = mkPron "вие" "вас" "ве" "вам" "ви" "вас" "ваш" "вашиот" "ваша" "вашата" "ваше" "вашето" "ваши" "вашите" "ви" (GSg Masc) P2 ;
lin they_Pron = mkPron "тие" "нив" "ги" "ним" "им" "нив" "нивен" "нивниот" "нивна" "нивната" "нивно" "нивното" "нивни" "нивните" "им" GPl P3 ;
lin this_Quant = mkQuant "овој" "оваа" "ова" "овие" ;
lin that_Quant = mkQuant "тој" "таа" "тоа" "тие" ;
lin how_IAdv = mkIAdv "как" ;
lin how8many_IDet = mkIDet "колку" ;
lin how8much_IAdv = mkIAdv "колку" ;
lin whatSg_IP = mkIP "што" (GSg Masc) ;
lin whatPl_IP = mkIP "што" GPl ;
lin when_IAdv = mkIAdv "кога" ;
lin where_IAdv = mkIAdv "каде" ;
lin which_IQuant = mkIQuant "кој" "која" "кое" "кои" ;
lin whoSg_IP = mkIP "кој" (GSg Masc) ;
lin whoPl_IP = mkIP "кои" GPl ;
lin and_Conj = mkConj "и" Pl ;
lin or_Conj = mkConj "или" Sg ;
lin both7and_DConj = mkConj "и" Pl ** {sep=0} ;
lin either7or_DConj = mkConj "или" Sg ** {sep=1} ;
}

View File

@@ -0,0 +1,10 @@
concrete TenseMkd of Tense = CatMkd[Tense,Temp], TenseX - [Tense,Temp,TTAnt,TPres,TPast,TFut,TCond] ** open ResMkd in {
lin
TTAnt t a = {s = a.s ++ t.s ; a = a.a ; t = t.t} ;
TPres = {s = []} ** {t = VPresent} ;
TPast = {s = []} ** {t = VPastImperfect} ; --# notpresent
TFut = {s = []} ** {t = VFut} ; --# notpresent
TCond = {s = []} ** {t = VCond} ; --# notpresent
}

View File

@@ -0,0 +1,7 @@
concrete TextMkd of Text = open Prelude in {
lin
TEmpty = {s = []} ;
TFullStop x xs = {s = x.s ++ SOFT_BIND ++ "." ++ xs.s} ;
TQuestMark x xs = {s = x.s ++ SOFT_BIND ++ "?" ++ xs.s} ;
TExclMark x xs = {s = x.s ++ SOFT_BIND ++ "!" ++ xs.s} ;
}

View File

@@ -1,13 +1,132 @@
concrete VerbMkd of Verb = CatMkd ** open Prelude,ResMkd in {
lin ComplSlash vps np = {present = \\a,n,p => vps.present ! a ! n
! p
++ np.s ! RObj Acc ;
aorist = \\n,p => vps.aorist ! n ! p ++ np.s ! RObj Acc;
imperfect = \\a,n,p => vps.imperfect ! a ! n ! p ++ np.s ! RObj Acc;
imperative = \\a,n => vps.imperative ! a ! n ++ np.s ! RObj Acc;
participle = {aorist = \\a,gn => vps.participle.aorist ! a ! gn ++ np.s ! RObj Acc;
perfect = \\a => vps.participle.perfect ! a ++ np.s ! RObj Acc}} ;
lin SlashV2a v = v ;
lin AdVVP a vp = {present = \\a2,n,p => a.s
++ vp.present ! a2 ! n ! p;
aorist = \\n,p => a.s ++ vp.aorist ! n ! p;
imperfect = \\a2,n,p => a.s ++ vp.imperfect ! a2 ! n ! p;
imperative = \\a2,n => a.s ++ vp.imperative ! a2 ! n;
participle = {aorist = \\a2,g => a.s
++ vp.participle.aorist ! a2 ! g;
imperfect = \\a2,g => a.s ++ vp.participle.imperfect ! a2 ! g;
perfect = \\a2 => a.s ++ vp.participle.perfect ! a2;
adjectival = \\a2 => a.s ++ vp.participle.adjectival ! a2;
adverbial = a.s ++ vp.participle.adverbial};
noun_from_verb = a.s ++ vp.noun_from_verb;
vtype = vp.vtype;
compl = vp.compl} ;
lin AdVVPSlash a v = {present = \\a2,n,p => a.s
++ v.present ! a2 ! n ! p;
aorist = \\n,p => a.s ++ v.aorist ! n ! p;
imperfect = \\a2,n,p => a.s ++ v.imperfect ! a2 ! n ! p;
imperative = \\a2,n => a.s ++ v.imperative ! a2 ! n;
participle = {aorist = \\a2,g => a.s
++ v.participle.aorist ! a2 ! g;
imperfect = \\a2,g => a.s ++ v.participle.imperfect ! a2 ! g;
perfect = \\a2 => a.s ++ v.participle.perfect ! a2;
adjectival = \\a2 => a.s ++ v.participle.adjectival ! a2;
adverbial = a.s ++ v.participle.adverbial};
noun_from_verb = a.s ++ v.noun_from_verb;
vtype = v.vtype;
compl = v.compl;
c2 = v.c2} ;
lin AdvVP vp adv = vp ** {compl = \\a => vp.compl ! a ++ adv.s} ;
lin AdvVPSlash vps adv = vps ** {compl = \\a => vps.compl ! a ++ adv.s} ;
lin CompAP ap = {s = \\gn => ap.s ! Indef ! gn} ;
lin CompAdv a = {s = \\_ => a.s} ;
lin CompCN cn = {s = \\_ => cn.s ! Indef ! Sg} ;
lin CompNP np = {s = \\_ => np.s ! RSubj} ;
lin ComplSlash vp np = vp ** {compl = \\a => vp.compl ! a ++ vp.c2.s ++ np.s ! RObj vp.c2.c} ;
lin ComplVA va ap = va ** {compl = \\agr => ap.s ! Indef ! agr.g} ;
lin ComplVQ vq qs = vq ** {compl = \\_ => qs.s} ;
lin ComplVS vs s = vs ** {compl = \\_ => s.s} ;
lin ComplVV vv vp = vv ** {compl = \\agr => "да" ++ vp.present ! Perfective ! genNum2num agr.g ! agr.p ++ vp.compl ! agr} ;
lin ExtAdvVP vp a = vp ** {compl = \\agr => vp.compl ! agr ++ SOFT_BIND++"," ++ a.s} ;
lin Slash2V3 v3 np = {present = \\a,n,p => v3.present ! a ! n ! p
++ np.s ! RSubj;
aorist = \\n,p => v3.aorist ! n ! p ++ np.s ! RSubj;
imperfect = \\a,n,p => v3.imperfect ! a ! n ! p ++ np.s ! RSubj;
imperative = \\a,n => v3.imperative ! a ! n ++ np.s ! RSubj;
participle = {aorist = \\a,g => v3.participle.aorist ! a ! g
++ np.s ! RSubj;
imperfect = \\a,g => v3.participle.imperfect ! a ! g
++ np.s ! RSubj;
perfect = \\a => v3.participle.perfect ! a ++ np.s ! RSubj;
adjectival = \\a => v3.participle.adjectival ! a
++ np.s ! RSubj;
adverbial = v3.participle.adverbial ++ np.s ! RSubj};
noun_from_verb = v3.noun_from_verb ++ np.s ! RSubj;
vtype = v3.vtype;
compl = \\v => v3.present ! Imperfective ! Sg ! v.p
++ np.s ! RSubj;
c2 = {s = v3.c2.s ++ np.s ! RSubj; c = v3.c2.c}} ;
lin Slash3V3 v3 np = {present = \\a,n,p => v3.present ! a ! n ! p
++ np.s ! RSubj;
aorist = \\n,p => v3.aorist ! n ! p ++ np.s ! RSubj;
imperfect = \\a,n,p => v3.imperfect ! a ! n ! p ++ np.s ! RSubj;
imperative = \\a,n => v3.imperative ! a ! n ++ np.s ! RSubj;
participle = {aorist = \\a,g => v3.participle.aorist ! a ! g
++ np.s ! RSubj;
imperfect = \\a,g => v3.participle.imperfect ! a ! g
++ np.s ! RSubj;
perfect = \\a => v3.participle.perfect ! a ++ np.s ! RSubj;
adjectival = \\a => v3.participle.adjectival ! a
++ np.s ! RSubj;
adverbial = v3.participle.adverbial ++ np.s ! RSubj};
noun_from_verb = v3.noun_from_verb ++ np.s ! RSubj;
vtype = v3.vtype;
compl = \\v => v3.present ! Imperfective ! Sg ! v.p
++ np.s ! RSubj;
c2 = {s = v3.c2.s ++ np.s ! RSubj; c = v3.c2.c}} ;
lin SlashV2A v ap = v ** {compl = \\agr => ap.s ! Indef ! agr.g} ;
lin SlashV2Q v qs = v ** {compl = \\_ => qs.s} ;
lin SlashV2S v s = v ** {compl = \\_ => s.s} ;
lin SlashV2V v vp = v ** {compl = \\agr => "да" ++ vp.present ! Perfective ! genNum2num agr.g ! agr.p ++ vp.compl ! agr};
lin SlashV2a v = v ** {compl = \\_ => []} ;
lin UseComp comp = {
present = \\_=>auxBe.present ;
aorist = auxBe.imperfect ;
imperfect = \\_=>auxBe.imperfect ;
imperative = \\_=>auxBe.imperative ;
participle = {aorist = \\_=>auxBe.participle.aorist ;
imperfect = \\_=>auxBe.participle.imperfect ;
perfect = \\_=>nonExist ;
adjectival = \\_=>nonExist ;
adverbial = nonExist} ;
noun_from_verb = nonExist ;
compl = \\agr=>comp.s ! agr.g ;
vtype=VNormal
} ;
lin UseCopula = {
present = \\_=>auxBe.present ;
aorist = auxBe.imperfect ;
imperfect = \\_=>auxBe.imperfect ;
imperative = \\_=>auxBe.imperative ;
participle = {aorist = \\_=>auxBe.participle.aorist ;
imperfect = \\_=>auxBe.participle.imperfect ;
perfect = \\_=>nonExist ;
adjectival = \\_=>nonExist ;
adverbial = nonExist} ;
noun_from_verb = nonExist ;
compl = \\_=>[] ;
vtype=VNormal
} ;
lin UseV v = v ** {compl = \\_ => []} ;
lin VPSlashPrep vp p = {present = \\a,n,p2 => vp.present ! a ! n
! p2
++ p.s;
aorist = \\n,p2 => vp.aorist ! n ! p2 ++ p.s;
imperfect = \\a,n,p2 => vp.imperfect ! a ! n ! p2 ++ p.s;
imperative = \\a,n => vp.imperative ! a ! n ++ p.s;
participle = {aorist = \\a,g => vp.participle.aorist ! a ! g
++ p.s;
imperfect = \\a,g => vp.participle.imperfect ! a ! g ++ p.s;
perfect = \\a => vp.participle.perfect ! a ++ p.s;
adjectival = \\a => vp.participle.adjectival ! a ++ p.s;
adverbial = vp.participle.adverbial ++ p.s};
noun_from_verb = vp.noun_from_verb ++ p.s; vtype = vp.vtype;
compl = \\v => vp.compl ! {g = GSg Masc; p = P1} ++ p.s;
c2 = {s = vp.present ! Imperfective ! Sg ! P1 ++ p.s; c = p.c}} ;
}

View File

@@ -10,7 +10,7 @@ concrete AllMlt of AllMltAbs =
LangMlt,
DictMlt,
IrregMlt,
ExtraMlt
** {
ExtendMlt
** open ExtraMlt in {
} ;

View File

@@ -10,5 +10,5 @@ abstract AllMltAbs =
Lang,
DictMltAbs,
IrregMltAbs,
ExtraMltAbs
Extend
** {} ;

17
src/maltese/ExtendMlt.gf Normal file
View File

@@ -0,0 +1,17 @@
concrete ExtendMlt of Extend =
CatMlt ** ExtendFunctor - [
ComplDirectVS,
ComplDirectVQ,
iFem_Pron, youFem_Pron, weFem_Pron, youPlFem_Pron,
theyFem_Pron, youPolFem_Pron
]
with (Grammar = GrammarMlt) ** open ParadigmsMlt, MorphoMlt, ResMlt in {
lin iFem_Pron = mkPron "jien" "i" singular P1 feminine ; --- also JIENA
youFem_Pron = mkPron "int" "ek" singular P2 feminine ; --- also INTI
weFem_Pron = mkPron "aħna" "na" plural P1 feminine ;
youPlFem_Pron = mkPron "intom" "kom" plural P2 feminine ;
theyFem_Pron = mkPron "huma" "hom" plural P3 feminine ;
youPolFem_Pron = mkPron "int" "ek" singular P2 feminine ; --- also INTI
}

View File

@@ -310,6 +310,13 @@ concrete NounMlt of Noun = CatMlt ** open ResMlt, Prelude, Maybe in {
isDefn = np.isDefn ;
} ;
QuantityNP n m = { -- quessed
s = \\c => preOrPost m.isPre m.s (n.s ! NumNom) ;
a = agrP3 (numform2num n.n) Masc ;
isPron = False ;
isDefn = False ;
} ;
oper
-- Overwrite the s field in an NP
overwriteNPs : NounPhrase -> (NPCase => Str) -> NounPhrase = \np,tbl -> {

View File

@@ -742,10 +742,8 @@ met_CAdv = lin CAdv {s = " мэт" ; c2 = noPrep Nom} ;
meterhueue_CAdv = lin CAdv {s = " мэтэрхүү" ; c2 = noPrep Nom} ;
net_CAdv = lin CAdv {s = " нэт" ; c2 = noPrep Nom} ;
shig_CAdv = lin CAdv {s = " шиг" ; c2 = noPrep Nom} ;
shig_CAdv = lin CAdv {s = " шиг" ; c2 = noPrep Nom} ;
atlaa_Conj = mkConj "атлаа" ;
ba_Conj = mkConj "ба" ;
ba_Conj = mkConj "ба" ;
bas_Conj = mkConj "бас" ;
boegoeoed_Conj = mkConj "бөгөөд" ;
boegoeoetoel_Conj = mkConj "бөгөөтөл" ;

View File

@@ -86,7 +86,6 @@ oper
hlaar4 : Suffix = \\vt => "хл" + aa4!vt + "р" ;
haar4 : Suffix = \\vt => "х" + aa4!vt + "р" ;
tal4 : Suffix = \\vt => "т" + a4!vt + "л" ;
saar4 : Suffix = \\vt => "с" + aa4!vt + "р" ;
nguut2 : Suffix = table {MascA | MascO => "нгуут" ; FemE | FemOE => "нгүүт"} ;
ngaa4 : Suffix = \\vt => "нг" + aa4!vt ;
aad4 : Suffix = \\vt => aa4!vt + "д" ;

View File

@@ -16,10 +16,8 @@ oper 'إِرْهابِي_N' = wmkN { g = masc ; sg = "إِرْهابِي" } ;
oper 'عَاصِمَة_N' = wmkN { g = fem ; pl = "عَوَاصِم" ; root = "عصم" ; sg = "عَاصِمَة" } ;
oper 'رِعايَة_N' = wmkN { g = fem ; root = "رعي" ; sg = "رِعايَة" } ;
oper 'طِفْل_N' = wmkN { g = masc ; pl = "أَطْفَال" ; root = "طفل" ; sg = "طِفْل" } ;
oper 'طِفْل_N' = wmkN { g = masc ; pl = "أَطْفَال" ; root = "طفل" ; sg = "طِفْل" } ;
oper 'مَدِينَة_N' = wmkN { g = fem ; pl = "مُدُن" ; root = "مدن" ; sg = "مَدِينَة" } ;
oper 'دَوْلَة_N' = wmkN { g = fem ; pl = "دُوَل" ; sg = "دَوْلَة" } ;
oper 'دَوْلَة_N' = wmkN { g = fem ; pl = "دُوَل" ; sg = "دَوْلَة" } ;
oper 'ثَقَافَة_N' = wmkN { g = fem ; pl = "ثَقَافَات" ; root = "ثقف" ; sg = "ثَقَافَة" } ;
oper 'اِنْخِفَاض_N' = wmkN { g = masc ; pl = "اِنْخِفَاضَات" ; sg = "اِنْخِفَاض" } ;
oper 'تَوْزِيع_N' = wmkN { g = masc ; sg = "تَوْزِيع" } ;
@@ -65,15 +63,11 @@ oper 'فُنْدُق_N' = wmkN { g = masc ; pl = "فَنَادِق" ; sg = "فُ
oper 'فِهْرِس_N' = wmkN { g = masc ; pl = "فَهَارِس" ; sg = "فِهْرِس" } ;
oper 'تَضَخُّم_N' = wmkN { g = masc ; root = "ضخم" ; sg = "تَضَخُّم" } ;
oper 'مَوْضِع_N' = wmkN { g = masc ; pl = "مَوَاضِع" ; root = "وضع" ; sg = "مَوْضِع" } ;
oper 'رَئِيس_N' = wmkN { g = masc ; pl = "رُؤَسَاء" ; root = "رءس" ; sg = "رَئِيس" } ;
oper 'رَئِيس_N' = wmkN { g = masc ; pl = "رُؤَسَاء" ; root = "رءس" ; sg = "رَئِيس" } ;
oper 'مُنْتَج_N' = wmkN { g = masc ; pl = "مُنْتَجَات" ; sg = "مُنْتَج" } ;
oper 'مَلِكَة_N' = wmkN { g = fem ; pl = "مَلِكَات" ; sg = "مَلِكَة" } ;
oper 'مُعَدَّل_N' = wmkN { g = masc ; root = "عدل" ; sg = "مُعَدَّل" } ;
oper 'مُعَدَّل_N' = wmkN { g = masc ; root = "عدل" ; sg = "مُعَدَّل" } ;
oper 'مَاء_N' = wmkN { g = masc ; pl = "مِيَاه" ; root = "موه" ; sg = "مَاء" } ;
oper 'عَالَم_N' = wmkN { g = masc ; pl = "عَالَمُون" ; sg = "عَالَم" } ;
oper 'عَالَم_N' = wmkN { g = masc ; pl = "عَالَمُون" ; sg = "عَالَم" } ;
oper 'مَنْطِقَة_N' = wmkN { g = fem ; pl = "مَنْطِقَات" ; root = "نطق" ; sg = "مَنْطِقَة" } ;
oper 'كِتَاب_N' = wmkN { g = masc ; pl = "كُتُب" ; sg = "كِتَاب" } ;
oper 'عُمْلَة_N' = wmkN { g = fem ; pl = "عُمْلَات" ; root = "عمل" ; sg = "عُمْلَة" } ;
@@ -82,7 +76,6 @@ oper 'شَرْق_N' = wmkN { g = masc ; sg = "شَرْق" } ;
oper 'رَأْس_N' = wmkN { g = masc ; pl = "رُؤُوس" ; sg = "رَأْس" } ;
oper 'سُكّان_N' = wmkN { g = fem ; sg = "سُكّان" } ;
oper 'مَلَكِيَّة_N' = wmkN { g = fem ; pl = "مَلَكِيَّات" ; root = "ملك" ; sg = "مَلَكِيَّة" } ;
oper 'سُكّان_N' = wmkN { g = fem ; sg = "سُكّان" } ;
oper 'جُمْهُورِيَّة_N' = wmkN { g = fem ; pl = "جُمْهُورِيَّات" ; sg = "جُمْهُورِيَّة" } ;
oper 'رُوسِيَّة_N' = wmkN { g = fem ; pl = "رُوسِيَّات" ; sg = "رُوسِيَّة" } ;
oper 'جَنُوب_N' = wmkN { g = masc ; root = "جنب" ; sg = "جَنُوب" } ;
@@ -126,7 +119,6 @@ oper 'عَرَبِي_A' = wmkA { fem_pl = "عَرَبِيَّات" ; fem_sg = "
oper 'حُر_A' = wmkA { fem_pl = "حُرَّات" ; fem_sg = "حُرَّة" ; masc_pl = "أَحْرَار" ; masc_sg = "حُر" ; root = "حرر" } ;
oper 'هَجِين_A' = wmkA { fem_pl = "هَجَائِن" ; fem_sg = "هَجِين" ; masc_pl = "هِجَان" ; masc_sg = "هَجِين" ; root = "هجن" } ;
oper 'رَسْمِي_A' = wmkA { fem_pl = "رَسْمِيَّات" ; fem_sg = "رَسْمِيَّة" ; masc_pl = "رَسْمِيُّون" ; masc_sg = "رَسْمِي" } ;
oper 'رَسْمِي_A' = wmkA { fem_pl = "رَسْمِيَّات" ; fem_sg = "رَسْمِيَّة" ; masc_pl = "رَسْمِيُّون" ; masc_sg = "رَسْمِي" } ;
oper 'أُرْثُوذُكْسِيَّة_A' = wmkA { fem_sg = "nan" ; masc_sg = "nan" } ;
oper 'مُرَبَّع_A' = wmkA { fem_pl = "مُرَبَّعَات" ; fem_sg = "مُرَبَّعَة" ; masc_pl = "مُرَبَّعُون" ; masc_sg = "مُرَبَّع" } ;
oper 'مُسْلِم_A' = wmkA { fem_pl = "مُسْلِمَات" ; fem_sg = "مُسْلِمَة" ; masc_pl = "مُسْلِمُون" ; masc_sg = "مُسْلِم" ; root = "سلم" } ;

View File

@@ -107,8 +107,6 @@ concrete CatPol of Cat = CommonX - [CAdv] ** open ResPol, Prelude, (R = ParamX)
VP = VerbPhrase;
Comp = { s: GenNum => Str };
Ord = { s : AForm => Str };
A = Adj;
A2 = Adj ** { c : Complement };

View File

@@ -30,8 +30,6 @@ lin
}
};
UttImpPol = UttImpPl;
--UttAdv : Adv -> Utt ; -- here
UttAdv adv = {s= adv.s};
-- better but can be improved upon
UttVP vp = case <vp.isCompApStem,vp.containsAdv, vp.containsAdV,vp.containsComp, vp.containsComp2> of {

View File

@@ -393,8 +393,6 @@ oper
= \word, g, anim, zi, rel, p -> lin N2 (mkFun (noMinorCases (Z.makeNoun word g anim rel AdjType (Z.parseIndex zi))) p) ;
} ;
nullPrep : Prep = lin Prep {s=[] ; c=Gen ; neggen=False ; hasPrep=False} ;
mkN3 = overload {
mkN3 : N -> Prep -> Prep -> N3
= \n, p2, p3 -> lin N3 (mkFun2 n p2 p3) ;

View File

@@ -125,6 +125,7 @@ concrete CatSom of Cat = CommonX - [Adv,IAdv] ** open ResSom, Prelude in {
linref
-- Cl = linCl ;
V, VS, VQ, VA, VV, V2A, V2V, V2S, V2Q, V2, V3 = \v -> v.s ! VImp Sg Pos ;
VP = infVP ;
CN = linCN ;
Prep = \prep -> prep.s ! ZeroObj ++ prep.sii ++ prep.dhex ++ prep.hoostiisa ! Sg3 Masc ;

View File

@@ -0,0 +1,154 @@
concrete DocumentationSom of Documentation = CatSom ** open ResSom,Prelude,HTML in {
lincat Definition = {s : Str} ;
lincat Document = {s : Str} ;
lincat Inflection = {t : Str; s1 : Str; s2 : Str} ;
lincat Tag = {s : Str} ;
lin InflectionA, InflectionA2 = \adj -> {
t = "a";
s1 = heading1 "Adjective";
s2 = frameTable (tr (td "" ++ th "Sg" ++ th "Pl") ++
tr (th "Nom" ++ td (adj.s ! AF Sg Nom) ++ td (adj.s ! AF Pl Nom)) ++
tr (th "Abs" ++ td (adj.s ! AF Sg Abs) ++ td (adj.s ! AF Pl Abs)))
} ;
lin InflectionAdA, InflectionAdN, InflectionAdV = \adv -> {
t = "adv";
s1 = heading1 "Adverb";
s2 = paragraph adv.s
} ;
lin InflectionAdv adv = {t = "adv"; s1 = heading1 "Adverb";
s2 = frameTable (tr (th "sii" ++ td adv.sii)
++ tr (th "dhex" ++ td adv.dhex)
++ tr (th "berri" ++ td adv.berri)
++ tr (th "miscAdv" ++ td adv.miscAdv)
++ tr (th "np" ++ td adv.np.s))} ;
lin InflectionGN pn = {t = "pn"; s1 = heading1 "Name";
s2 = frameTable (tr (th "" ++ td pn.s))} ;
lin InflectionLN pn = {t = "pn"; s1 = heading1 "Name";
s2 = frameTable (tr (th "" ++ td pn.s))} ;
lin InflectionN,InflectionN2,InflectionN3 = \noun -> {
t = "n";
s1 = heading1 "Noun";
s2 = frameTable (tr (td "" ++ th "Sg" ++ th "Pl") ++
tr (th "Def" ++ td (noun.s ! Def Sg) ++ td (noun.s ! Def Pl)) ++
tr (th "Indef" ++ td (noun.s ! Indef Sg) ++ td (noun.s ! Indef Pl)) ++
tr (th "Nom" ++ td (noun.s ! NomSg) ++ td []) ++
tr (th "Numerative" ++ intagAttr "td" "colspan=2" (noun.s ! Numerative)))
} ;
lin InflectionPN pn = {t = "pn"; s1 = heading1 "Name";
s2 = frameTable (tr (th "" ++ td pn.s))} ;
lin InflectionPrep prep = {t = "prep"; s1 = heading1 "Preposition";
s2 = frameTable (tr (th "Sg1Obj" ++ td (prep.s ! Sg1Obj))
++ tr (th "Sg2Obj" ++ td (prep.s ! Sg2Obj))
++ tr (th "(Pl1Obj Excl)"
++ td (prep.s ! Pl1Obj Excl))
++ tr (th "(Pl1Obj Incl)"
++ td (prep.s ! Pl1Obj Incl))
++ tr (th "Pl2Obj"
++ td (prep.s ! Pl2Obj))
++ tr (th "ReflexiveObj"
++ td (prep.s
! ReflexiveObj))
++ tr (th "ZeroObj"
++ td (prep.s
! ZeroObj))
++ tr (th "berri"
++ td prep.berri)
++ tr (th "sii"
++ td prep.sii)
++ tr (th "dhex"
++ td prep.dhex)
++ tr (th "hoostiisa Sg1"
++ td (prep.hoostiisa
! Sg1))
++ tr (th "hoostiisa Sg2"
++ td (prep.hoostiisa
! Sg2))
++ tr (th "hoostiisa (Sg3 Masc)"
++ td (prep.hoostiisa
! Sg3 Masc))
++ tr (th "hoostiisa (Sg3 Fem)"
++ td (prep.hoostiisa
! Sg3 Fem))
++ tr (th "hoostiisa (Pl1 Excl)"
++ td (prep.hoostiisa
! Pl1 Excl))
++ tr (th "hoostiisa (Pl1 Incl)"
++ td (prep.hoostiisa
! Pl1 Incl))
++ tr (th "hoostiisa Pl2"
++ td (prep.hoostiisa
! Pl2))
++ tr (th "hoostiisa Pl3"
++ td (prep.hoostiisa
! Pl3))
++ tr (th "hoostiisa Impers"
++ td (prep.hoostiisa
! Impers)))} ;
lin InflectionSN pn = {t = "pn"; s1 = heading1 "Name";
s2 = frameTable (tr (th "" ++ td pn.s))} ;
lin InflectionV v = {t = "v"; s1 = heading1 "Verb"; s2 = inflectV v} ;
lin InflectionV2 v = {t = "v"; s1 = heading1 "Verb"; s2 = inflectV v} ;
lin InflectionV2A v = {t = "v"; s1 = heading1 "Verb"; s2 = inflectV v} ;
lin InflectionV2Q v = {t = "v"; s1 = heading1 "Verb"; s2 = inflectV v} ;
lin InflectionV2S v = {t = "v"; s1 = heading1 "Verb"; s2 = inflectV v} ;
lin InflectionV2V v = {t = "v"; s1 = heading1 "Verb"; s2 = inflectV v} ;
lin InflectionV3 v = {t = "v"; s1 = heading1 "Verb"; s2 = inflectV v} ;
lin InflectionVA v = {t = "v"; s1 = heading1 "Verb"; s2 = inflectV v} ;
lin InflectionVQ v = {t = "v"; s1 = heading1 "Verb"; s2 = inflectV v} ;
lin InflectionVS v = {t = "v"; s1 = heading1 "Verb"; s2 = inflectV v} ;
lin InflectionVV v = {t = "v"; s1 = heading1 "Verb"; s2 = inflectV v} ;
lin MkDefinition t d = {s = "<p><b>Definition:</b>"
++ t.s ++ d.s ++ "</p>"} ;
lin MkDefinitionEx t d e = {s = "<p><b>Definition:</b>"
++ t.s ++ d.s ++ "<p><b>Example:</b>" ++ t.s ++ "</p>"} ;
lin MkDocument d i e = {s = i.s1 ++ i.s2} ;
lin MkTag i = {s = i.t} ;
lin NoDefinition t = t ;
oper inflectV : Verb -> Str = \v ->
heading2 "Infinitive" ++
paragraph (v.s ! VInf) ++
heading2 "Present" ++
heading3 "Simple" ++
frameTable (tr (td "" ++ th "Pos" ++ th "Neg") ++
tr (th "Sg1_Sg3Masc" ++ td (v.s ! VPres Simple Sg1_Sg3Masc Pos) ++ td (v.s ! VPres Simple Sg1_Sg3Masc Neg)) ++
tr (th "Sg2_Sg3Fem" ++ td (v.s ! VPres Simple Sg2_Sg3Fem Pos) ++ td (v.s ! VPres Simple Sg2_Sg3Fem Neg)) ++
tr (th "Pl1" ++ td (v.s ! VPres Simple Pl1_ Pos) ++ td (v.s ! VPres Simple Pl1_ Neg)) ++
tr (th "Pl2" ++ td (v.s ! VPres Simple Pl2_ Pos) ++ td (v.s ! VPres Simple Pl2_ Neg)) ++
tr (th "Pl3" ++ td (v.s ! VPres Simple Pl3_ Pos) ++ td (v.s ! VPres Simple Pl3_ Neg))) ++
heading3 "Progressive" ++
frameTable (tr (td "" ++ th "Pos" ++ th "Neg") ++
tr (th "Sg1_Sg3Masc" ++ td (v.s ! VPres Progressive Sg1_Sg3Masc Pos) ++ td (v.s ! VPres Progressive Sg1_Sg3Masc Neg)) ++
tr (th "Sg2_Sg3Fem" ++ td (v.s ! VPres Progressive Sg2_Sg3Fem Pos) ++ td (v.s ! VPres Progressive Sg2_Sg3Fem Neg)) ++
tr (th "Pl1" ++ td (v.s ! VPres Progressive Pl1_ Pos) ++ td (v.s ! VPres Progressive Pl1_ Neg)) ++
tr (th "Pl2" ++ td (v.s ! VPres Progressive Pl2_ Pos) ++ td (v.s ! VPres Progressive Pl2_ Neg)) ++
tr (th "Pl3" ++ td (v.s ! VPres Progressive Pl3_ Pos) ++ td (v.s ! VPres Progressive Pl3_ Neg))) ++
heading2 "Past" ++
heading3 "Simple" ++
frameTable (tr (td "" ++ th "Pos" ++ th "Neg") ++
tr (th "Sg1_Sg3Masc" ++ td (v.s ! VPast Simple Sg1_Sg3Masc) ++ intagAttr "td" "rowspan=5" (v.s ! VNegPast Simple)) ++
tr (th "Sg2_Sg3Fem" ++ td (v.s ! VPast Simple Sg2_Sg3Fem)) ++
tr (th "Pl1" ++ td (v.s ! VPast Simple Pl1_)) ++
tr (th "Pl2" ++ td (v.s ! VPast Simple Pl2_)) ++
tr (th "Pl3" ++ td (v.s ! VPast Simple Pl3_))) ++
heading3 "Progressive" ++
frameTable (tr (td "" ++ th "Pos" ++ th "Neg") ++
tr (th "Sg1_Sg3Masc" ++ td (v.s ! VPast Progressive Sg1_Sg3Masc) ++ intagAttr "td" "rowspan=5" (v.s ! VNegPast Progressive)) ++
tr (th "Sg2_Sg3Fem" ++ td (v.s ! VPast Progressive Sg2_Sg3Fem)) ++
tr (th "Pl1" ++ td (v.s ! VPast Progressive Pl1_)) ++
tr (th "Pl2" ++ td (v.s ! VPast Progressive Pl2_)) ++
tr (th "Pl3" ++ td (v.s ! VPast Progressive Pl3_))) ++
heading2 "Imperative" ++
frameTable (tr (td "" ++ th "Pos" ++ th "Neg") ++
tr (th "Sg" ++ td (v.s ! VImp Sg Pos) ++ td (v.s ! VImp Sg Neg)) ++
tr (th "Pl" ++ td (v.s ! VImp Pl Pos) ++ td (v.s ! VImp Pl Neg))) ++
heading2 "Relative" ++
frameTable (tr (td "" ++ th "Pos" ++ th "Neg") ++
tr (th "SgMasc" ++ td (v.s ! VRel SgMasc) ++ intagAttr "td" "rowspan=3" (v.s ! VRelNeg)) ++
tr (th "SgFem" ++ td (v.s ! VRel SgFem)) ++
tr (th "PlInv" ++ td (v.s ! VRel PlInv))) ++
heading2 "Negative Conditional" ++
frameTable (tr (th "SgMasc" ++ td (v.s ! VNegCond SgMasc)) ++
tr (th "SgFem" ++ td (v.s ! VNegCond SgFem)) ++
tr (th "PlInv" ++ td (v.s ! VNegCond PlInv))) ;
}

View File

@@ -1,4 +1,5 @@
concrete LangSom of Lang =
GrammarSom,
LexiconSom,
ConstructionSom ;
ConstructionSom,
DocumentationSom ;

View File

@@ -64,7 +64,10 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in {
} ;
-- : Pron -> NP ;
UsePron pron = pron ** {st = Definite} ;
UsePron pron = pron ** {
s = pron.sp ;
st = Definite
} ;
-- : Predet -> NP -> NP ; -- only the man
PredetNP predet np =
@@ -250,7 +253,7 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in {
mod = \\st,n,c =>
cn.mod ! st ! n ! Abs -- If there was something before, it is now in Abs
++ andConj st cn.modtype -- If the sentence is already modified, any new modifier needs to be introduced with conjunction
++ ap.s ! AF n c ;
++ ap.s ! AF n c ++ " " ++ ap.compar ;
modtype = AMod
} ;

View File

@@ -23,6 +23,18 @@ Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (DetCN (DetQ
LangSom: bisad BIND daasi bisad BIND dan waa ka weyn tahay
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (DetCN (DetQuant that_Quant NumSg) (UseN cat_N)) (UseComp (CompAP (ComparA big_A (DetCN (DetQuant this_Quant NumSg) (UseN cat_N)))))))) NoVoc
-- LangEng: house bigger than car
LangSom: guri ka weyn baabuur
Lang: PhrUtt NoPConj (UttCN (AdjCN (ComparA big_A (MassNP (UseN car_N))) (UseN house_N))) NoVoc
-- LangEng: house bigger than he
Lang> l PhrUtt NoPConj (UttCN (AdjCN (ComparA big_A (UsePron he_Pron)) (UseN house_N))) NoVoc
guri ka weyn isaga
-- LangEng: house bigger than I
Lang> l PhrUtt NoPConj (UttCN (AdjCN (ComparA big_A (UsePron i_Pron)) (UseN house_N))) NoVoc
guri ka weyn aniga
-- LangEng: that cat is biggest
LangSom: bisad BIND daasi waa ugu weyn tahay
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (DetCN (DetQuant that_Quant NumSg) (UseN cat_N)) (UseComp (CompAP (AdjOrd (OrdSuperl big_A))))))) NoVoc

View File

@@ -125,10 +125,4 @@ oper
comp = \\a => vps.comp ! a ++ (let agr = complAgr a in vps.s.s ! VPart agr.g agr.n) ++ agent ;
} ;
lin ExistsNP np =
mkClause [] True False np.a
(insertComplement (\\_ => (np.s ! Nom).ton)
(predV (mkV "existir"))) ;
} ;

View File

@@ -1,64 +0,0 @@
concrete AdjectiveTok of Adjective = CatTok ** open ResTok, Prelude in {
flags optimize=all_subs ;
lin
-- : AP -> Adv -> AP ; -- warm by nature
AdvAP ap adv = ap ** {
s = ap.s ++ adv.s ;
} ;
-- : A -> AP ;
PositA a = a ;
-- : A -> NP -> AP ;
ComparA a np = a ; -- Not straightforward for Toki Pona.
-- : A2 -> NP -> AP ; -- married to her
-- ComplA2 a2 np = a2 ** { } ;
-- : A2 -> AP ; -- married to itself
-- ReflA2 a2 = a2 ** { } ;
-- : A2 -> AP ; -- married
UseA2 = PositA ;
-- : A -> AP ; -- warmer
-- UseComparA a = a ** {
-- s = \\af => "???" ++ a.s ! af ;
-- compar = []
-- } ;
-- : CAdv -> AP -> NP -> AP ; -- as cool as John
-- CAdvAP adv ap np = ap ** { } ;
-- The superlative use is covered in $Ord$.
-- : Ord -> AP ; -- warmest
-- AdjOrd ord = ord ** {
-- compar = []
-- } ;
-- AdjOrd : Ord -> AP =
AdjOrd ord = ord ;
-- Sentence and question complements defined for all adjectival
-- phrases, although the semantics is only clear for some adjectives.
-- : AP -> SC -> AP ; -- good that she is here
-- SentAP ap sc = ap ** {
-- s = \\af => ap.s ! af ++ sc.s
-- } ;
-- An adjectival phrase can be modified by an *adadjective*, such as "very".
-- : AdA -> AP -> AP ;
-- AdAP ada ap = ap ** { } ;
-- It can also be postmodified by an adverb, typically a prepositional phrase.
}

View File

@@ -1,38 +0,0 @@
concrete AdverbTok of Adverb = CatTok ** open ResTok, ParadigmsTok, Prelude in {
lin
-- : A -> Adv ;
PositAdvAdj adj = {s=adj.s;} ;
-- : CAdv -> A -> NP -> Adv ; -- more warmly than John
-- ComparAdvAdj cadv a np =
-- : CAdv -> A -> S -> Adv ; -- more warmly than he runs
-- ComparAdvAdjS cadv a s =
-- : Prep -> NP -> Adv ;
PrepNP prep np = {
s = prep.s ++ np.s ;
} ;
-- Adverbs can be modified by 'adadjectives', just like adjectives.
-- : AdA -> Adv -> Adv ; -- very quickly
-- AdAdv ada adv = adv **
-- Like adverbs, adadjectives can be produced by adjectives.
-- : A -> AdA ; -- extremely
-- PositAdAAdj a =
-- Subordinate clauses can function as adverbs.
-- : Subj -> S -> Adv ;
-- SubjS subj s = {s = subj.s ++ s.s} ;
-- Comparison adverbs also work as numeral adverbs.
-- : CAdv -> AdN ; -- less (than five)
-- AdnCAdv cadv = ;
}

View File

@@ -1,6 +0,0 @@
--# -path=.:../abstract:../common:../prelude
concrete AllTok of AllTokAbs =
LangTok,
ExtendTok
;

View File

@@ -1,5 +0,0 @@
--# -path=.:../abstract:../common:prelude
abstract AllTokAbs =
Lang,
Extend ;

View File

@@ -1,120 +0,0 @@
--# -path=.:../abstract:../common:../prelude
concrete CatTok of Cat = CommonX ** open ResTok, Coordination, Prelude in {
flags optimize=all_subs ;
lincat
--2 Sentences and clauses
-- Constructed in SentenceTok, and also in IdiomTok
S = SS ;
QS = SS ;
RS = SS ;
-- relative sentence. Tense and polarity fixed,
-- but agreement may depend on the CN/NP it modifies.
Cl = ResTok.LinCl ;
ClSlash = SS ;
SSlash = SS ; -- sentence missing NP; e.g. "she has looked at"
Imp = SS ; -- imperative e.g. "look at this"
--2 Questions and interrogatives
-- Constructed in QuestionTok.
QCl = SS ;
IComp = SS ; -- interrogative complement of copula e.g. "where"
IDet = SS ; -- interrogative determiner e.g. "how many"
IQuant = SS ; -- interrogative quantifier e.g. "which"
IP = SS ; -- interrogative pronoun e.g. "who"
--2 Subord clauses and pronouns
RCl = SS ;
RP = SS ;
--2 Verb phrases
-- Constructed in VerbTok.
VP,VPSlash = ResTok.LinVP ;
Comp = SS ;
--2 Adjectival phrases
-- Constructed in AdjectiveTok.
AP = SS ;
--2 Nouns and noun phrases
-- Constructed in NounTok.
-- Many atomic noun phrases e.g. "everybody"
-- are constructed in StructuralTok.
CN = ResTok.LinCN ;
NP = ResTok.LinNP ;
-- NB. Pronouns need enough info to become NP or Quant.
Pron = ResTok.LinPron ;
Det = ResTok.LinDet ; -- s : Str , n : Number
Predet = SS ;
Quant = ResTok.LinQuant ; -- s : Number => Str
Num = ResTok.LinDet ;
Card = ResTok.LinDet ;
ACard = SS ;
Ord = SS ;
DAP = SS ;
--2 Numerals
-- Constructed in NumeralTok.
Numeral = ResTok.LinNumeral ;
Digits = ResTok.LinNumeral ;
Decimal = SS ;
--2 Structural words
-- Constructed in StructuralTok.
Conj = Coordination.ConjunctionDistr ;
Subj = SS ;
Prep = SS ;
--2 Words of open classes
-- These are constructed in LexiconTok and in
-- additional lexicon modules.
-- TODO: eventually different lincats
VS, -- sentence-complement verb e.g. "claim"
VQ, -- question-complement verb e.g. "wonder"
VA, -- adjective-complement verb e.g. "look"
V = ResTok.LinV ;
VV -- verb-phrase-complement verb e.g. "want"
= ResTok.Preverb ;
V2A, -- verb with NP and AP complement e.g. "paint"
V2V, -- verb with NP and V complement e.g. "cause"
V2S, -- verb with NP and S complement e.g. "tell"
V2Q, -- verb with NP and Q complement e.g. "ask"
V2 = SS ;
V3 = SS ;
A = SS ;
A2 = SS ;
N = ResTok.LinN ;
N2 = ResTok.LinN ;
N3 = ResTok.LinN ;
PN = ResTok.LinPN ;
-- From the Names module, not in the official API as of 2023-08
GN = SS ; -- Given name, e.g. "George"
SN = SS ; -- Second name, e.g. "Washington"
LN = SS ; -- Location name, e.g. "Sweden"
-- linref
-- Cl = linCl ;
}

View File

@@ -1,147 +0,0 @@
concrete ConjunctionTok of Conjunction =
CatTok ** open ResTok, Coordination, Prelude in {
flags optimize=all_subs ;
{- Conjunction for category X needs four things:
lincat [X]
lin BaseX
lin ConsX
lin ConjX
For example, if X is defined as
lincat X = {s : Number => Str ; g : Gender} ;
then [X] will split its s field into two, and retain its other fields as is:
lincat [X] = {s1,s2 : Number => Str ; g : Gender} ;
Let us look at a simple case: Adv is of type {s : Str}
Then [Adv] is {s1,s2 : Str}.
BaseAdv, ConsAdv and ConjAdv can all use functions defined in prelude/Coordination:
BaseAdv = twoSS ;
ConsAdv = consrSS comma ;
ConjAdv = conjunctSS ;
--}
-----------------------------------------------------------------------------
-- Adverb and other simple {s : Str} types.
lincat
[Adv],[AdV],[IAdv] = {s1,s2 : Str} ;
lin
BaseAdv, BaseAdV, BaseIAdv = twoSS ;
ConsAdv, ConsAdV, ConsIAdv = consrSS comma ;
ConjAdv, ConjAdV, ConjIAdv = conjunctDistrSS ;
{-
-----------------------------------------------------------------------------
-- S is sometimes already {s : Str}, sometimes open for mood or word order.
-- Simply take the lincat of S, and split the s field into s1 and s2.
-- Then make sure that all of the other fields are retained.
lincat
[S] = {s1, s2 : …} ;
lin
-- : S -> S -> ListS ; -- John walks, Mary runs
BaseS x y =
-- : S -> ListS -> ListS ; -- John walks, Mary runs, Bill swims
ConsS x xs =
-- : Conj -> ListS -> S ; -- he walks and she runs
ConjS conj xs =
-----------------------------------------------------------------------------
-- RS is variable on … and has inherent …
-- RS can modify CNs, which are open for …, and have inherent …
lincat
[RS] = {s1,s2 : … => Str} ;
lin
-- : RS -> RS -> ListRS ; -- who walks, whom I know
BaseRS x y =
-- : RS -> ListRS -> ListRS ; -- who wals, whom I know, who is here
ConsRS x xs =
-- : Conj -> ListRS -> RS ; -- who walks and whose mother runs
ConjRS conj xs =
-----------------------------------------------------------------------------
-- NP is variable on … and has inherent …
lincat
[NP] = {s1, s2 : …} ;
lin
-- : NP -> NP -> ListNP ; -- John, Mary
BaseNP x y =
-- : NP -> ListNP -> ListNP ; -- John, Mary, Bill
ConsNP x xs =
-- : Conj -> ListNP -> NP ; -- she or we
ConjNP conj xs =
-----------------------------------------------------------------------------
-- AP is variable on … and has an inherent …
lincat
[AP] = {s1, s2 : …} ;
lin
-- : AP -> AP -> ListAP ; -- red, white
BaseAP x y =
-- : AP -> ListAP -> ListAP ; -- red, white, blue
ConsAP x xs =
-- : Conj -> ListAP -> AP ; -- cold and warm
ConjAP conj xs =
-----------------------------------------------------------------------------
-- CN is variable on …
-- CN conjunction is not in the API, so this can be lower prio
lincat
[CN] = {s1, s2 : …} ;
lin
-- : CN -> CN -> ListCN ; -- man, woman
BaseCN x y =
-- : CN -> ListCN -> ListCN ; -- man, woman, child
ConsCN x xs =
-- : Conj -> ListCN -> CN ; -- man and woman
ConjCN conj xs =
-----------------------------------------------------------------------------
-- Det and DAP
-- Note that there is no [Det], the way to coordinate Dets is to make them
-- into DAP first, using Noun.DetDAP : Det -> DAP ;
-- DAP ("three small") isn't used in any API functions, so lower prio.
lincat
[DAP] = {s1, s2 : …} ;
lin
-- : DAP -> DAP -> ListDAP ;
BaseDAP x y =
-- : DAP -> ListDAP -> ListDAP ;
ConsDAP xs x =
-- : Conj -> ListDAP -> Det ; -- his or her
ConjDet conj xs =
-}
}

View File

@@ -1,117 +0,0 @@
concrete ConstructionTok of Construction = CatTok ** open ParadigmsTok in {
lincat
Timeunit = N ;
Weekday = N ;
Monthday = NP ;
Month = N ;
Year = NP ;
{-
lin
timeunitAdv n time =
let n_card : Card = n ;
n_hours_NP : NP = mkNP n_card time ;
in SyntaxTok.mkAdv for_Prep n_hours_NP | mkAdv (n_hours_NP.s ! R.npNom) ;
weekdayPunctualAdv w = ; -- on Sunday
weekdayHabitualAdv w = ; -- on Sundays
weekdayNextAdv w = -- next Sunday
weekdayLastAdv w = -- last Sunday
monthAdv m = mkAdv in_Prep (mkNP m) ;
yearAdv y = mkAdv in_Prep y ;
dayMonthAdv d m = ; -- on 17 Tok
monthYearAdv m y = ; -- in Tok 2012
dayMonthYearAdv d m y = ; -- on 17 Tok 2013
intYear = symb ;
intMonthday = symb ;
lincat Language = N ;
lin InLanguage l = mkAdv ???_Prep (mkNP l) ;
lin
weekdayN w = w ;
monthN m = m ;
weekdayPN w = mkPN w ;
monthPN m = mkPN m ;
languageCN l = mkCN l ;
languageNP l = mkNP l ;
oper mkLanguage : Str -> N = \s -> mkN s ;
----------------------------------------------
---- lexicon of special names
lin second_Timeunit = mkN "second" ;
lin minute_Timeunit = mkN "minute" ;
lin hour_Timeunit = mkN "hour" ;
lin day_Timeunit = mkN "day" ;
lin week_Timeunit = mkN "week" ;
lin month_Timeunit = mkN "month" ;
lin year_Timeunit = mkN "year" ;
lin monday_Weekday = mkN "Monday" ;
lin tuesday_Weekday = mkN "Tuesday" ;
lin wednesday_Weekday = mkN "Wednesday" ;
lin thursday_Weekday = mkN "Thursday" ;
lin friday_Weekday = mkN "Friday" ;
lin saturday_Weekday = mkN "Saturday" ;
lin sunday_Weekday = mkN "Sunday" ;
lin january_Month = mkN "January" ;
lin february_Month = mkN "February" ;
lin march_Month = mkN "March" ;
lin april_Month = mkN "April" ;
lin may_Month = mkN "May" ;
lin june_Month = mkN "June" ;
lin july_Month = mkN "July" ;
lin august_Month = mkN "August" ;
lin september_Month = mkN "September" ;
lin october_Month = mkN "October" ;
lin november_Month = mkN "November" ;
lin december_Month = mkN "December" ;
lin afrikaans_Language = mkLanguage "Afrikaans" ;
lin amharic_Language = mkLanguage "Amharic" ;
lin arabic_Language = mkLanguage "Arabic" ;
lin bulgarian_Language = mkLanguage "Bulgarian" ;
lin catalan_Language = mkLanguage "Catalan" ;
lin chinese_Language = mkLanguage "Chinese" ;
lin danish_Language = mkLanguage "Danish" ;
lin dutch_Language = mkLanguage "Dutch" ;
lin english_Language = mkLanguage "Euslish" ;
lin estonian_Language = mkLanguage "Estonian" ;
lin finnish_Language = mkLanguage "Finnish" ;
lin french_Language = mkLanguage "French" ;
lin german_Language = mkLanguage "German" ;
lin greek_Language = mkLanguage "Greek" ;
lin hebrew_Language = mkLanguage "Hebrew" ;
lin hindi_Language = mkLanguage "Hindi" ;
lin japanese_Language = mkLanguage "Japanese" ;
lin italian_Language = mkLanguage "Italian" ;
lin latin_Language = mkLanguage "Latin" ;
lin latvian_Language = mkLanguage "Latvian" ;
lin maltese_Language = mkLanguage "Maltese" ;
lin nepali_Language = mkLanguage "Nepali" ;
lin norwegian_Language = mkLanguage "Norwegian" ;
lin persian_Language = mkLanguage "Persian" ;
lin polish_Language = mkLanguage "Polish" ;
lin punjabi_Language = mkLanguage "Punjabi" ;
lin romanian_Language = mkLanguage "Romanian" ;
lin russian_Language = mkLanguage "Russian" ;
lin sindhi_Language = mkLanguage "Sindhi" ;
lin spanish_Language = mkLanguage "Spanish" ;
lin swahili_Language = mkLanguage "Swahili" ;
lin swedish_Language = mkLanguage "Swedish" ;
lin thai_Language = mkLanguage "Thai" ;
lin turkish_Language = mkLanguage "Turkish" ;
lin urdu_Language = mkLanguage "Urdu" ;
-}
}

View File

@@ -1,35 +0,0 @@
--# -path=.:../common:../abstract
concrete ExtendTok of Extend = CatTok
** ExtendFunctor - [
VPS -- finite VP's with tense and polarity
, ListVPS
, VPI
, ListVPI -- infinitive VP's (TODO: with anteriority and polarity)
, MkVPS
, PredVPS
-- excluded because RGL funs needed for them not implemented yet
, SlashBareV2S
, PredAPVP
, ComplBareVS
, AdvIsNP, AdvIsNPAP
, CompBareCN
, CompIQuant
, ComplSlashPartLast
, ComplDirectVQ
, ComplDirectVS
, DetNPFem, DetNPMasc
, ExistCN, ExistMassCN, ExistPluralCN, ExistsNP
, ExistIPQS, ExistNPQS, ExistS
, PredIAdvVP
, PrepCN
, ReflPossPron
, UttVP, UttVPShort, UttAccNP, UttDatNP, UttAccIP, UttDatIP
, EmptyRelSlash, StrandQuestSlash, StrandRelSlash
, SubjRelNP
, UseComp_ser, UseComp_estar
, iFem_Pron, weFem_Pron, youFem_Pron, youPlFem_Pron, youPolFem_Pron, youPolPlFem_Pron, youPolPl_Pron, theyFem_Pron, theyNeutr_Pron
, GenModNP
] with (Grammar=GrammarTok) ;

View File

@@ -1,17 +0,0 @@
concrete GrammarTok of Grammar =
NounTok
, VerbTok
, AdjectiveTok
, AdverbTok
, NumeralTok
, SentenceTok
, QuestionTok
, RelativeTok
, ConjunctionTok
, PhraseTok
, TextX
, StructuralTok
, IdiomTok
, TenseX
, NamesTok -- Not part of original Grammar, here to trigger compilation
;

View File

@@ -1,56 +0,0 @@
--1 Idiom: Idiomatic Expressions
concrete IdiomTok of Idiom = CatTok ** open Prelude, ResTok, VerbTok, QuestionTok, NounTok, StructuralTok in {
-- This module defines constructions that are formed in fixed ways,
-- often different even in closely related languages.
{-
lin
-- ImpersCl : VP -> Cl ; -- it is hot
ImpersCl vp = {
} ;
-- : NP -> Cl ; -- there is a house
ExistNP np =
-- ExistIP : IP -> QCl ; -- which houses are there
ExistIP ip =
-- GenericCl : VP -> Cl ; -- one sleeps
GenericCl vp =
CleftNP : NP -> RS -> Cl ; -- it is I who did it
CleftAdv : Adv -> S -> Cl ; -- it is here she slept
-- : NP -> Cl ; -- there is a house
ExistNP np =
ExistIP : IP -> QCl ; -- which houses are there
-- 7/12/2012 generalizations of these
ExistNPAdv : NP -> Adv -> Cl ; -- there is a house in Paris
ExistIPAdv : IP -> Adv -> QCl ; -- which houses are there in Paris
-- : VP -> VP ;
ProgrVP vp = vp ** {
} ;
-- : VP -> Utt ; -- let's go
ImpPl1 vp = { } ;
ImpP3 : NP -> VP -> Utt ; -- let John walk
-- 3/12/2013 non-reflexive uses of "self"
SelfAdvVP : VP -> VP ; -- is at home himself
SelfAdVVP : VP -> VP ; -- is himself at home
SelfNP : NP -> NP ; -- the president himself (is at home)
-}
}

View File

@@ -1,5 +0,0 @@
--# -path=.:../abstract:../common:../prelude:../api
concrete LangTok of Lang =
GrammarTok,
LexiconTok,
ConstructionTok ;

View File

@@ -1,420 +0,0 @@
concrete LexiconTok of Lexicon = CatTok **
open ParadigmsTok, ResTok in {
----
-- A
-- lin add_V3 = mkV3 (mkV "") ;
-- lin airplane_N = mkN "" ;
-- lin alas_Interj = mkInterj "" ;
-- lin already_Adv = mkA "" ;
lin animal_N = mkN "soweli" ;
-- lin answer_V2S = mkV2S (mkV "") ;
lin apartment_N = mkN "tomo" ;
lin apple_N = mkN "kili" ;
-- lin art_N = mkN "" ;
-- lin ashes_N = mkN "" ;
-- lin ask_V2Q = mkV2Q (mkV "") ;
----
-- B
-- lin baby_N = mkN "" ;
-- lin back_N = mkN "" ;
-- lin bad_A = mkA "" ;
lin bank_N = mkN "tomo mani" ;
-- lin bark_N = mkN "" ;
-- lin beautiful_A = mkA "" ;
-- lin become_VA = mkVA (mkV "") ;
lin beer_N = mkN "telo nasa" ;
-- lin beg_V2V = mkV2V (mkV "") ;
-- lin belly_N = mkN "" ;
lin big_A = mkA "suli" ;
-- lin bike_N = mkN "" ;
lin bird_N = mkN "waso" ;
-- lin bite_V2 = mkV2 "" ;
-- lin black_A = mkA "" ;
-- lin blood_N = mkN "blood" ;
-- lin blow_V = mkV "" ;
-- lin blue_A = mkA "" ;
-- lin boat_N = mkN "" ;
-- lin bone_N = mkN "" ;
-- lin boot_N = mkN "" ;
-- lin boss_N = mkN "" ;
lin book_N = mkN "lipu" ;
lin boy_N = mkN "mije" ;
-- lin bread_N = mkN "" ;
lin break_V2 = mkV2 "pakala" ;
-- lin breast_N = mkN "" ;
-- lin breathe_V = mkV "" ;
-- lin broad_A = mkA "" ;
-- lin brother_N2 = mkN "" ;
-- lin brown_A = mkA "" ;
lin burn_V = mkV "seli" ;
-- lin butter_N = mkN "" ;
lin buy_V2 = mkV2 "esun" ;
----
-- C
-- lin camera_N = mkN "" ;
-- lin cap_N = mkN "" ;
-- lin car_N = mkN "" ;
-- lin carpet_N = mkN "" ;
-- lin cat_N = mkN "" ;
-- lin ceiling_N = mkN "" ;
-- lin chair_N = mkN "" ;
-- lin cheese_N = mkN "" ;
-- lin child_N = mkN "" ;
-- lin church_N = mkN "" ;
-- lin city_N = mkN "" ;
-- lin clean_A = mkA "" ;
-- lin clever_A = mkA "" ;
-- lin close_V2 = mkV2 "" ;
-- lin cloud_N = mkN "" ;
-- lin coat_N = mkN "" ;
-- lin cold_A = mkA "" ;
lin come_V = mkV "kama" ;
-- lin computer_N = mkN "" ;
-- lin correct_A = mkA "" ;
-- lin count_V2 = mkV2 "" ;
-- lin country_N = mkN "" ;
-- lin cousin_N = mkN "" ;
-- lin cow_N = mkN "" ;
-- lin cut_V2 = mkV2 "" ;
----
-- D
-- lin day_N = mkN "" ;
lin die_V = mkV "moli" ;
-- lin dig_V = mkV "" ;
-- lin dirty_A = mkA "" ;
-- lin distance_N3 = mkN3 (mkN "") ;
-- lin do_V2 = mkV2 "" ;
-- lin doctor_N = mkN "" ;
lin dog_N = mkN "soweli" ;
-- lin door_N = mkN "" ;
-- lin drink_V2 = mkV2 "" ;
-- lin dry_A = mkA "" ;
-- lin dull_A = mkA "" ;
-- lin dust_N = mkN "" ;
----
-- E
lin ear_N = mkN "kute" ;
lin earth_N = mkN "ma" ;
lin eat_V2 = mkV "moku" ;
-- lin egg_N = mkN "" ;
-- lin empty_A = mkA "" ;
-- lin enemy_N = mkN "" ;
lin eye_N = mkN "lukin" ;
----
-- F
-- lin factory_N = mkN "" ;
-- lin fall_V = mkV "" ;
-- lin far_Adv = mkA "" ;
-- lin fat_N = mkN "" ;
-- lin father_N2 = mkN2 (mkN "") ;
-- lin fear_V2 = mkV2 "" ;
-- lin fear_VS = mkVS (mkV "") ;
-- lin feather_N = mkN "" ;
-- lin fight_V2 = mkV2 "" ;
-- lin find_V2 = mkV2 "" ;
-- lin fingernail_N = mkN "" ;
-- lin fire_N = mkN "" ;
lin fish_N = mkN "kala" ;
-- lin float_V = mkV "" ;
-- lin floor_N = mkN "" ;
-- lin flow_V = mkV "" ;
-- lin flower_N = mkN "" ;
-- lin fly_V = mkV "" ;
-- lin fog_N = mkN "" ;
-- lin foot_N = mkN "" ;
-- lin forest_N = mkN "" ;
-- lin forget_V2 = mkV2 "" ;
-- lin freeze_V = mkV "" ;
-- lin fridge_N = mkN "" ;
lin friend_N = mkN "jan pona" ;
lin fruit_N = mkN "kili" ;
-- lin full_A = mkA "" ;
-- --lin fun_AV
----
-- G
-- lin garden_N = mkN "" ;
-- lin girl_N = mkN "" ;
-- lin give_V3 = mkV3 (mkV "") ;
-- lin glove_N = mkN "" ;
lin go_V = mkV "tawa" ;
-- lin gold_N = mkN "" ;
lin good_A = mkA "pona" ;
-- lin grammar_N = mkN "" ;
-- lin grass_N = mkN "" ;
-- lin green_A = mkA "" ;
----
-- H
-- lin hair_N = mkN "" ;
lin hand_N = mkN "luka" ;
-- lin harbour_N = mkN "" ;
lin hat_N = mkN "len lawa" ;
-- lin hate_V2 = mkV2 "" ;
lin head_N = mkN "lawa" ;
-- lin hear_V2 = mkV2 "" ;
-- lin heart_N = mkN "" ;
-- lin heavy_A = mkA "" ;
-- lin hill_N = mkN "" ;
-- lin hit_V2 = mkV2 "" ;
-- lin hold_V2 = mkV2 "" ;
-- lin hope_VS = mkV "" ;
-- lin horn_N = mkN "" ;
-- lin horse_N = mkN "" ;
-- lin hot_A = mkA "" ;
lin house_N = mkN "tomo" ;
-- lin hunt_V2 = mkV2 "" ;
-- lin husband_N = mkN "" ;
--------
-- I - K
-- lin ice_N = mkN "" ;
-- lin industry_N = mkN "" ;
-- lin iron_N = mkN "" ;
lin john_PN = mkPN "jan" "Jon" ;
-- lin jump_V = mkV "" ;
-- lin kill_V2 = mkV2 "" ;
-- lin king_N = mkN "" ;
-- lin knee_N = mkN "" ;
lin know_V2 = mkV2 "sona" ;
-- lin know_VQ = mkVQ (mkV "") ;
-- lin know_VS = mkV "" ;
----
-- L
-- lin lake_N = mkN "" ;
-- lin lamp_N = mkN "" ;
lin language_N = mkN "toki" ;
-- lin laugh_V = mkV "" ;
-- lin leaf_N = mkN "" ;
-- lin learn_V2 = mkV2 "" ;
-- lin leather_N = mkN "" ;
-- lin leave_V2 = mkV2 "" ;
-- lin leg_N = mkN "" ;
-- lin lie_V = mkV "" ;
-- lin like_V2 = mkV2 "" ;
-- lin listen_V2 = mkV2 "" ;
-- lin live_V = mkV "";
-- lin liver_N = mkN "" ;
-- lin long_A = mkA "" ;
-- lin lose_V2 = mkV2 "" ;
-- lin louse_N = mkN "" ;
lin love_N = mkN "olin" ;
lin love_V2 = mkV2 "olin" ;
----
-- M
-- lin man_N = mkN "" ;
-- lin married_A2 = mkA2 (mkA "") ;
-- lin meat_N = mkN "" ;
-- lin milk_N = mkN "" ;
lin moon_N = mkN "mun" ;
-- lin mother_N2 = mkN2 (mkN "") ;
-- lin mountain_N = mkN "" ;
-- lin mouth_N = mkN "" ;
-- lin music_N = mkN "" ;
----
-- N
lin name_N = mkN "nimi" ;
-- lin narrow_A = mkA "" ;
-- lin near_A = mkA "" ;
-- lin neck_N = mkN "" ;
-- lin new_A = mkA "" ;
-- lin newspaper_N = mkN "" ;
-- lin night_N = mkN "" ;
-- lin nose_N = mkN "" ;
-- lin now_Adv = mkAdv "" ;
-- lin number_N = mkN "" ;
--------
-- O - P
-- lin oil_N = mkN "" ;
-- lin old_A = mkA "" ;
-- lin open_V2 = mkV2 "" ;
-- lin paint_V2A = mkV2A (mkV "") ;
-- lin paper_N = mkN "" ;
lin paris_PN = mkPN "ma tomo" "Paki" ;
-- lin peace_N = mkN "" ;
-- lin pen_N = mkN "" ;
lin person_N = mkN "jan" ;
-- lin planet_N = mkN "" ;
-- lin plastic_N = mkN "" ;
lin play_V = mkV "musi" ;
-- lin policeman_N = mkN "" ;
-- lin priest_N = mkN "" ;
-- lin pull_V2 = mkV2 "" ;
-- lin push_V2 = mkV2 "" ;
-- lin put_V2 = mkV2 "" ;
--------
-- Q - R
-- lin queen_N = mkN "" ;
-- lin question_N = mkN "" ;
-- lin radio_N = mkN "" ;
-- lin rain_N = mkN "" ;
-- lin rain_V0 = mkV "" ;
-- lin read_V2 = mkV2 "" ;
-- lin ready_A = mkA "" ;
-- lin reason_N = mkN "" ;
lin red_A = mkA "loje" ;
-- lin religion_N = mkN "" ;
-- lin restaurant_N = mkN "" ;
-- lin river_N = mkN "" ;
-- lin road_N = mkN "" ;
-- lin rock_N = mkN "" ;
-- lin roof_N = mkN "" ;
-- lin root_N = mkN "" ;
-- lin rope_N = mkN "" ;
-- lin rotten_A = mkA "" ;
-- lin round_A = mkA "" ;
-- lin rub_V2 = mkV2 "" ;
-- lin rubber_N = mkN "" ;
-- lin rule_N = mkN "" ;
-- lin run_V = mkV "" ;
----
-- S
-- lin salt_N = mkN "" ;
-- lin sand_N = mkN "" ;
-- lin say_VS = mkVS (mkV "") ;
-- lin school_N = mkN "" ;
-- lin science_N = mkN "" ;
-- lin scratch_V2 = mkV2 "" ;
-- lin sea_N = mkN "" ;
-- lin see_V2 = mkV2 "" ;
-- lin seed_N = mkN "" ;
-- lin seek_V2 = mkV2 "" ;
-- lin sell_V3 = mkV3 (mkV "" Meng) emptyPrep emptyPrep ; -- TODO
-- lin send_V3 = mkV3 (mkV "") ;
-- lin sew_V = mkV "" ;
-- lin sharp_A = mkA "" ;
-- lin sheep_N = mkN "" fem ;
-- lin ship_N = mkN "" ;
-- lin shirt_N = mkN "" ;
-- lin shoe_N = mkN "" ;
-- lin shop_N = mkN "" ;
-- lin short_A = mkA "" ;
-- lin silver_N = mkN "" ;
-- lin sing_V = mkV "" ;
-- lin sister_N = mkN "" ;
-- lin sit_V = mkV "" ;
-- lin skin_N = mkN "" ;
-- lin sky_N = mkN "" ;
lin sleep_V = mkV "lape" ;
lin small_A = mkA "lili" ;
-- lin smell_V = mkV "" ;
-- lin smoke_N = mkN "" ;
-- lin smooth_A = mkA "" ;
-- lin snake_N = mkN "" ;
-- lin snow_N = mkN "" ;
-- lin sock_N = mkN "" ;
-- lin song_N = mkN "" ;
-- lin speak_V2 = mkV2 "toki" ;
-- lin spit_V = mkV "" ;
-- lin split_V2 = mkV2 "" ;
-- lin squeeze_V2 = mkV2 "" ;
-- lin stab_V2 = mkV2 "" ;
-- lin stand_V = mkV "" ;
-- lin star_N = mkN "" ;
-- lin steel_N = mkN "" ;
-- lin stick_N = mkN "" ;
-- lin stone_N = mkN "" ;
lin stop_V = mkV "pini" ;
-- lin stove_N = mkN "" ;
-- lin straight_A = mkA "" ;
-- lin student_N = mkN "" ;
-- lin stupid_A = mkA "" ;
-- lin suck_V2 = mkV2 "" ;
-- lin sun_N = mkN "" ;
-- lin swell_V = mkV "" ;
-- lin swim_V = mkV "" ;
----
-- T
-- lin table_N = mkN "" ;
-- lin tail_N = mkN "" ;
-- lin talk_V3 = mkV3 (mkV "" Ber) (mkPrep "") (mkPrep "") ;
-- lin teach_V2 = mkV2 "" ;
-- lin teacher_N = mkN "" ;
-- lin television_N = mkN "" ;
-- lin thick_A = mkA "" ;
-- lin thin_A = mkA "" ;
-- lin think_V = mkV "" ;
-- lin throw_V2 = mkV2 "" ;
-- lin tie_V2 = mkV2 "" ;
-- lin today_Adv = mkA "" ;
-- lin tongue_N = mkN "" ;
-- lin tooth_N = mkN "" ;
-- lin train_N = mkN "" ;
-- lin travel_V = mkV "" ;
-- lin tree_N = mkN "" ;
-- lin turn_V = mkV "" ;
--------
-- U - V
-- lin ugly_A = mkA "" ;
-- lin uncertain_A = mkA "" ;
-- lin understand_V2 = mkV2 "" ;
-- lin university_N = mkN "" ;
-- lin village_N = mkN "" ;
-- lin vomit_V = mkV2 "" ;
--------
-- W - Y
-- lin wait_V2 = mkV2 "" ;
-- lin walk_V = mkV "" ;
-- lin war_N = mkN "" ;
-- lin warm_A = mkA "" ;
-- lin wash_V2 = mkV2 "" ;
-- lin watch_V2 = mkV2 "" ;
lin water_N = mkN "telo" ;
-- lin wet_A = mkA "" ;
-- lin white_A = mkA "" ;
-- lin wide_A = mkA "" ;
-- lin wife_N = mkN "" ;
-- lin win_V2 = mkV2 "" ;
-- lin wind_N = mkN "" ;
-- lin window_N = mkN "" ;
-- lin wine_N = mkN "" ;
-- lin wing_N = mkN "" ;
-- lin wipe_V2 = mkV2 "" ;
-- lin woman_N = mkN "" ;
-- lin wonder_VQ = mkVQ (mkV "") ;
-- lin wood_N = mkN "" ;
-- lin worm_N = mkN "" ;
-- lin write_V2 = mkV2 "" ;
-- lin year_N = mkN "" ;
-- lin yellow_A = mkA "" ;
-- lin young_A = mkA "" ;
}

View File

@@ -1,313 +0,0 @@
resource MissingTok = open GrammarTok, Prelude in {
-- temporary definitions to enable the compilation of RGL API
oper AdAP : AdA -> AP -> AP = notYet "AdAP" ;
oper AdAdv : AdA -> Adv -> Adv = notYet "AdAdv" ;
oper AdNum : AdN -> Card -> Card = notYet "AdNum" ;
oper AdVVP : AdV -> VP -> VP = notYet "AdVVP" ;
oper AdVVPSlash : AdV -> VPSlash -> VPSlash = notYet "AdVVPSlash" ;
oper AddAdvQVP : QVP -> IAdv -> QVP = notYet "AddAdvQVP" ;
oper AdjCN : AP -> CN -> CN = notYet "AdjCN" ;
oper AdjDAP : DAP -> AP -> DAP = notYet "AdjDAP" ;
oper AdjOrd : Ord -> AP = notYet "AdjOrd" ;
oper AdnCAdv : CAdv -> AdN = notYet "AdnCAdv" ;
oper AdvAP : AP -> Adv -> AP = notYet "AdvAP" ;
oper AdvCN : CN -> Adv -> CN = notYet "AdvCN" ;
oper AdvIAdv : IAdv -> Adv -> IAdv = notYet "AdvIAdv" ;
oper AdvIP : IP -> Adv -> IP = notYet "AdvIP" ;
oper AdvImp : Adv -> Imp -> Imp = notYet "AdvImp" ;
oper AdvNP : NP -> Adv -> NP = notYet "AdvNP" ;
oper AdvQVP : VP -> IAdv -> QVP = notYet "AdvQVP" ;
oper AdvS : Adv -> S -> S = notYet "AdvS" ;
oper AdvSlash : ClSlash -> Adv -> ClSlash = notYet "AdvSlash" ;
oper AdvVP : VP -> Adv -> VP = notYet "AdvVP" ;
oper AdvVPSlash : VPSlash -> Adv -> VPSlash = notYet "AdvVPSlash" ;
oper ApposCN : CN -> NP -> CN = notYet "ApposCN" ;
oper BaseAP : AP -> AP -> ListAP = notYet "BaseAP" ;
oper BaseAdV : AdV -> AdV -> ListAdV = notYet "BaseAdV" ;
oper BaseAdv : Adv -> Adv -> ListAdv = notYet "BaseAdv" ;
oper BaseCN : CN -> CN -> ListCN = notYet "BaseCN" ;
oper BaseIAdv : IAdv -> IAdv -> ListIAdv = notYet "BaseIAdv" ;
oper BaseNP : NP -> NP -> ListNP = notYet "BaseNP" ;
oper BaseRS : RS -> RS -> ListRS = notYet "BaseRS" ;
oper BaseS : S -> S -> ListS = notYet "BaseS" ;
oper CAdvAP : CAdv -> AP -> NP -> AP = notYet "CAdvAP" ;
oper CleftAdv : Adv -> S -> Cl = notYet "CleftAdv" ;
oper CleftNP : NP -> RS -> Cl = notYet "CleftNP" ;
oper CompAP : AP -> Comp = notYet "CompAP" ;
oper CompAdv : Adv -> Comp = notYet "CompAdv" ;
oper CompCN : CN -> Comp = notYet "CompCN" ;
oper CompIAdv : IAdv -> IComp = notYet "CompIAdv" ;
oper CompIP : IP -> IComp = notYet "CompIP" ;
oper CompNP : NP -> Comp = notYet "CompNP" ;
oper ComparA : A -> NP -> AP = notYet "ComparA" ;
oper ComparAdvAdj : CAdv -> A -> NP -> Adv = notYet "ComparAdvAdj" ;
oper ComparAdvAdjS : CAdv -> A -> S -> Adv = notYet "ComparAdvAdjS" ;
oper ComplA2 : A2 -> NP -> AP = notYet "ComplA2" ;
oper ComplN2 : N2 -> NP -> CN = notYet "ComplN2" ;
oper ComplN3 : N3 -> NP -> N2 = notYet "ComplN3" ;
oper ComplSlash : VPSlash -> NP -> VP = notYet "ComplSlash" ;
oper ComplSlashIP : VPSlash -> IP -> QVP = notYet "ComplSlashIP" ;
oper ComplVA : VA -> AP -> VP = notYet "ComplVA" ;
oper ComplVQ : VQ -> QS -> VP = notYet "ComplVQ" ;
oper ComplVS : VS -> S -> VP = notYet "ComplVS" ;
oper ComplVV : VV -> VP -> VP = notYet "ComplVV" ;
oper ConjAP : Conj -> ListAP -> AP = notYet "ConjAP" ;
oper ConjAdV : Conj -> ListAdV -> AdV = notYet "ConjAdV" ;
oper ConjAdv : Conj -> ListAdv -> Adv = notYet "ConjAdv" ;
oper ConjCN : Conj -> ListCN -> CN = notYet "ConjCN" ;
oper ConjDet : Conj -> ListDAP -> Det = notYet "ConjDet" ;
oper ConjIAdv : Conj -> ListIAdv -> IAdv = notYet "ConjIAdv" ;
oper ConjNP : Conj -> ListNP -> NP = notYet "ConjNP" ;
oper ConjRS : Conj -> ListRS -> RS = notYet "ConjRS" ;
oper ConjS : Conj -> ListS -> S = notYet "ConjS" ;
oper ConsAP : AP -> ListAP -> ListAP = notYet "ConsAP" ;
oper ConsAdV : AdV -> ListAdV -> ListAdV = notYet "ConsAdV" ;
oper ConsAdv : Adv -> ListAdv -> ListAdv = notYet "ConsAdv" ;
oper ConsCN : CN -> ListCN -> ListCN = notYet "ConsCN" ;
oper ConsIAdv : IAdv -> ListIAdv -> ListIAdv = notYet "ConsIAdv" ;
oper ConsNP : NP -> ListNP -> ListNP = notYet "ConsNP" ;
oper ConsRS : RS -> ListRS -> ListRS = notYet "ConsRS" ;
oper ConsS : S -> ListS -> ListS = notYet "ConsS" ;
oper CountNP : Det -> NP -> NP = notYet "CountNP" ;
oper DetCN : Det -> CN -> NP = notYet "DetCN" ;
oper DetDAP : Det -> DAP = notYet "DetDAP" ;
oper DetNP : Det -> NP = notYet "DetNP" ;
oper DetQuantOrd : Quant -> Num -> Ord -> Det = notYet "DetQuantOrd" ;
oper EmbedQS : QS -> SC = notYet "EmbedQS" ;
oper EmbedS : S -> SC = notYet "EmbedS" ;
oper EmbedVP : VP -> SC = notYet "EmbedVP" ;
oper ExistIP : IP -> QCl = notYet "ExistIP" ;
oper ExistIPAdv : IP -> Adv -> QCl = notYet "ExistIPAdv" ;
oper ExistNP : NP -> Cl = notYet "ExistNP" ;
oper ExistNPAdv : NP -> Adv -> Cl = notYet "ExistNPAdv" ;
oper ExtAdvS : Adv -> S -> S = notYet "ExtAdvS" ;
oper ExtAdvVP : VP -> Adv -> VP = notYet "ExtAdvVP" ;
oper FunRP : Prep -> NP -> RP -> RP = notYet "FunRP" ;
oper GenericCl : VP -> Cl = notYet "GenericCl" ;
oper IdRP : RP = notYet "IdRP" ;
oper IdetCN : IDet -> CN -> IP = notYet "IdetCN" ;
oper IdetIP : IDet -> IP = notYet "IdetIP" ;
oper IdetQuant : IQuant -> Num -> IDet = notYet "IdetQuant" ;
oper ImpP3 : NP -> VP -> Utt = notYet "ImpP3" ;
oper ImpPl1 : VP -> Utt = notYet "ImpPl1" ;
oper ImpVP : VP -> Imp = notYet "ImpVP" ;
oper ImpersCl : VP -> Cl = notYet "ImpersCl" ;
oper MassNP : CN -> NP = notYet "MassNP" ;
oper NumCard : Card -> Num = notYet "NumCard" ;
oper NumDigits : Digits -> Card = notYet "NumDigits" ;
oper NumNumeral : Numeral -> Card = notYet "NumNumeral" ;
oper OrdDigits : Digits -> Ord = notYet "OrdDigits" ;
oper OrdNumeral : Numeral -> Ord = notYet "OrdNumeral" ;
oper OrdNumeralSuperl : Numeral -> A -> Ord = notYet "OrdNumeralSuperl" ;
oper OrdSuperl : A -> Ord = notYet "OrdSuperl" ;
oper PConjConj : Conj -> PConj = notYet "PConjConj" ;
oper PPartNP : NP -> V2 -> NP = notYet "PPartNP" ;
oper PartNP : CN -> NP -> CN = notYet "PartNP" ;
oper PassV2 : V2 -> VP = notYet "PassV2" ;
oper PhrUtt : PConj -> Utt -> Voc -> Phr = notYet "PhrUtt" ;
oper PositA : A -> AP = notYet "PositA" ;
oper PositAdAAdj : A -> AdA = notYet "PositAdAAdj" ;
oper PositAdvAdj : A -> Adv = notYet "PositAdvAdj" ;
oper PossNP : CN -> NP -> CN = notYet "PossNP" ;
oper PossPron : Pron -> Quant = notYet "PossPron" ;
oper PredSCVP : SC -> VP -> Cl = notYet "PredSCVP" ;
oper PredVP : NP -> VP -> Cl = notYet "PredVP" ;
oper PredetNP : Predet -> NP -> NP = notYet "PredetNP" ;
oper PrepIP : Prep -> IP -> IAdv = notYet "PrepIP" ;
oper PrepNP : Prep -> NP -> Adv = notYet "PrepNP" ;
oper ProgrVP : VP -> VP = notYet "ProgrVP" ;
oper QuestCl : Cl -> QCl = notYet "QuestCl" ;
oper QuestIAdv : IAdv -> Cl -> QCl = notYet "QuestIAdv" ;
oper QuestIComp : IComp -> NP -> QCl = notYet "QuestIComp" ;
oper QuestQVP : IP -> QVP -> QCl = notYet "QuestQVP" ;
oper QuestSlash : IP -> ClSlash -> QCl = notYet "QuestSlash" ;
oper QuestVP : IP -> VP -> QCl = notYet "QuestVP" ;
oper ReflA2 : A2 -> AP = notYet "ReflA2" ;
oper ReflVP : VPSlash -> VP = notYet "ReflVP" ;
oper RelCN : CN -> RS -> CN = notYet "RelCN" ;
oper RelCl : Cl -> RCl = notYet "RelCl" ;
oper RelNP : NP -> RS -> NP = notYet "RelNP" ;
oper RelS : S -> RS -> S = notYet "RelS" ;
oper RelSlash : RP -> ClSlash -> RCl = notYet "RelSlash" ;
oper RelVP : RP -> VP -> RCl = notYet "RelVP" ;
oper SSubjS : S -> Subj -> S -> S = notYet "SSubjS" ;
oper SelfAdVVP : VP -> VP = notYet "SelfAdVVP" ;
oper SelfAdvVP : VP -> VP = notYet "SelfAdvVP" ;
oper SelfNP : NP -> NP = notYet "SelfNP" ;
oper SentAP : AP -> SC -> AP = notYet "SentAP" ;
oper SentCN : CN -> SC -> CN = notYet "SentCN" ;
oper Slash2V3 : V3 -> NP -> VPSlash = notYet "Slash2V3" ;
oper Slash3V3 : V3 -> NP -> VPSlash = notYet "Slash3V3" ;
oper SlashPrep : Cl -> Prep -> ClSlash = notYet "SlashPrep" ;
oper SlashV2A : V2A -> AP -> VPSlash = notYet "SlashV2A" ;
oper SlashV2Q : V2Q -> QS -> VPSlash = notYet "SlashV2Q" ;
oper SlashV2S : V2S -> S -> VPSlash = notYet "SlashV2S" ;
oper SlashV2V : V2V -> VP -> VPSlash = notYet "SlashV2V" ;
oper SlashV2VNP : V2V -> NP -> VPSlash -> VPSlash = notYet "SlashV2VNP" ;
oper SlashV2a : V2 -> VPSlash = notYet "SlashV2a" ;
oper SlashVP : NP -> VPSlash -> ClSlash = notYet "SlashVP" ;
oper SlashVS : NP -> VS -> SSlash -> ClSlash = notYet "SlashVS" ;
oper SlashVV : VV -> VPSlash -> VPSlash = notYet "SlashVV" ;
oper SubjS : Subj -> S -> Adv = notYet "SubjS" ;
oper TFullStop : Phr -> Text -> Text = notYet "TFullStop" ;
oper Use2N3 : N3 -> N2 = notYet "Use2N3" ;
oper Use3N3 : N3 -> N2 = notYet "Use3N3" ;
oper UseA2 : A2 -> AP = notYet "UseA2" ;
oper UseCl : Temp -> Pol -> Cl -> S = notYet "UseCl" ;
oper UseComp : Comp -> VP = notYet "UseComp" ;
oper UseComparA : A -> AP = notYet "UseComparA" ;
oper UseCopula : VP = notYet "UseCopula" ;
oper UseN : N -> CN = notYet "UseN" ;
oper UseN2 : N2 -> CN = notYet "UseN2" ;
oper UsePN : PN -> NP = notYet "UsePN" ;
oper UsePron : Pron -> NP = notYet "UsePron" ;
oper UseQCl : Temp -> Pol -> QCl -> QS = notYet "UseQCl" ;
oper UseRCl : Temp -> Pol -> RCl -> RS = notYet "UseRCl" ;
oper UseSlash : Temp -> Pol -> ClSlash -> SSlash = notYet "UseSlash" ;
oper UseV : V -> VP = notYet "UseV" ;
oper UttAP : AP -> Utt = notYet "UttAP" ;
oper UttAdv : Adv -> Utt = notYet "UttAdv" ;
oper UttCN : CN -> Utt = notYet "UttCN" ;
oper UttCard : Card -> Utt = notYet "UttCard" ;
oper UttIAdv : IAdv -> Utt = notYet "UttIAdv" ;
oper UttIP : IP -> Utt = notYet "UttIP" ;
oper UttImpPl : Pol -> Imp -> Utt = notYet "UttImpPl" ;
oper UttImpPol : Pol -> Imp -> Utt = notYet "UttImpPol" ;
oper UttImpSg : Pol -> Imp -> Utt = notYet "UttImpSg" ;
oper UttInterj : Interj -> Utt = notYet "UttInterj" ;
oper UttNP : NP -> Utt = notYet "UttNP" ;
oper UttQS : QS -> Utt = notYet "UttQS" ;
oper UttS : S -> Utt = notYet "UttS" ;
oper UttVP : VP -> Utt = notYet "UttVP" ;
oper VPSlashPrep : VP -> Prep -> VPSlash = notYet "VPSlashPrep" ;
oper VocNP : NP -> Voc = notYet "VocNP" ;
oper above_Prep : Prep = notYet "above_Prep" ;
oper active2passive : Cl -> Cl = notYet "active2passive" ;
oper after_Prep : Prep = notYet "after_Prep" ;
oper alas_Interj : Interj = notYet "alas_Interj" ;
oper all_Predet : Predet = notYet "all_Predet" ;
oper almost_AdA : AdA = notYet "almost_AdA" ;
oper almost_AdN : AdN = notYet "almost_AdN" ;
oper already_Adv : Adv = notYet "already_Adv" ;
oper although_Subj : Subj = notYet "although_Subj" ;
oper always_AdV : AdV = notYet "always_AdV" ;
oper as_CAdv : CAdv = notYet "as_CAdv" ;
oper at_least_AdN : AdN = notYet "at_least_AdN" ;
oper at_most_AdN : AdN = notYet "at_most_AdN" ;
oper because_Subj : Subj = notYet "because_Subj" ;
oper before_Prep : Prep = notYet "before_Prep" ;
oper behind_Prep : Prep = notYet "behind_Prep" ;
oper between_Prep : Prep = notYet "between_Prep" ;
oper both7and_DConj : Conj = notYet "both7and_DConj" ;
oper but_PConj : PConj = notYet "but_PConj" ;
oper by8agent_Prep : Prep = notYet "by8agent_Prep" ;
oper by8means_Prep : Prep = notYet "by8means_Prep" ;
oper dconcat : Digits -> Digits -> Digits = notYet "dconcat" ;
oper digits2num : Digits -> Numeral = notYet "digits2num" ;
oper digits2numeral : Card -> Card = notYet "digits2numeral" ;
oper dn : Dig -> Digit = notYet "dn" ;
oper dn10 : Dig -> Sub10 = notYet "dn10" ;
oper dn100 : Dig -> Dig -> Sub100 = notYet "dn100" ;
oper dn1000 : Dig -> Dig -> Dig -> Sub1000 = notYet "dn1000" ;
oper dn1000000a : Dig -> Dig -> Dig -> Dig -> Sub1000000 = notYet "dn1000000a" ;
oper dn1000000b : Dig -> Dig -> Dig -> Dig -> Dig -> Sub1000000 = notYet "dn1000000b" ;
oper dn1000000c : Dig -> Dig -> Dig -> Dig -> Dig -> Dig -> Sub1000000 = notYet "dn1000000c" ;
oper during_Prep : Prep = notYet "during_Prep" ;
oper either7or_DConj : Conj = notYet "either7or_DConj" ;
oper every_Det : Det = notYet "every_Det" ;
oper everybody_NP : NP = notYet "everybody_NP" ;
oper everything_NP : NP = notYet "everything_NP" ;
oper everywhere_Adv : Adv = notYet "everywhere_Adv" ;
oper except_Prep : Prep = notYet "except_Prep" ;
oper few_Det : Det = notYet "few_Det" ;
oper for_Prep : Prep = notYet "for_Prep" ;
oper from_Prep : Prep = notYet "from_Prep" ;
oper he_Pron : Pron = notYet "he_Pron" ;
oper here7from_Adv : Adv = notYet "here7from_Adv" ;
oper here7to_Adv : Adv = notYet "here7to_Adv" ;
oper here_Adv : Adv = notYet "here_Adv" ;
oper how8many_IDet : IDet = notYet "how8many_IDet" ;
oper how8much_IAdv : IAdv = notYet "how8much_IAdv" ;
oper how_IAdv : IAdv = notYet "how_IAdv" ;
oper i_Pron : Pron = notYet "i_Pron" ;
oper if_Subj : Subj = notYet "if_Subj" ;
oper if_then_Conj : Conj = notYet "if_then_Conj" ;
oper in8front_Prep : Prep = notYet "in8front_Prep" ;
oper in_Prep : Prep = notYet "in_Prep" ;
oper it_Pron : Pron = notYet "it_Pron" ;
oper john_PN : PN = notYet "john_PN" ;
oper language_title_Utt : Utt = notYet "language_title_Utt" ;
oper left_Ord : Ord = notYet "left_Ord" ;
oper less_CAdv : CAdv = notYet "less_CAdv" ;
oper many_Det : Det = notYet "many_Det" ;
oper more_CAdv : CAdv = notYet "more_CAdv" ;
oper most_Predet : Predet = notYet "most_Predet" ;
oper much_Det : Det = notYet "much_Det" ;
oper nd : Digit -> Dig = notYet "nd" ;
oper nd10 : Sub10 -> Digits = notYet "nd10" ;
oper nd100 : Sub100 -> Digits = notYet "nd100" ;
oper nd1000 : Sub1000 -> Digits = notYet "nd1000" ;
oper nd1000000 : Sub1000000 -> Digits = notYet "nd1000000" ;
oper no_Quant : Quant = notYet "no_Quant" ;
oper no_Utt : Utt = notYet "no_Utt" ;
oper nobody_NP : NP = notYet "nobody_NP" ;
oper not_Predet : Predet = notYet "not_Predet" ;
oper nothing_NP : NP = notYet "nothing_NP" ;
oper num : Sub1000000 -> Numeral = notYet "num" ;
oper num2digits : Numeral -> Digits = notYet "num2digits" ;
oper on_Prep : Prep = notYet "on_Prep" ;
oper only_Predet : Predet = notYet "only_Predet" ;
oper or_Conj : Conj = notYet "or_Conj" ;
oper otherwise_PConj : PConj = notYet "otherwise_PConj" ;
oper part_Prep : Prep = notYet "part_Prep" ;
oper please_Voc : Voc = notYet "please_Voc" ;
oper possess_Prep : Prep = notYet "possess_Prep" ;
oper pot01 : Sub10 = notYet "pot01" ;
oper pot1 : Digit -> Sub100 = notYet "pot1" ;
oper pot110 : Sub100 = notYet "pot110" ;
oper pot111 : Sub100 = notYet "pot111" ;
oper pot1plus : Digit -> Sub10 -> Sub100 = notYet "pot1plus" ;
oper pot1to19 : Digit -> Sub100 = notYet "pot1to19" ;
oper pot2 : Sub10 -> Sub1000 = notYet "pot2" ;
oper pot2plus : Sub10 -> Sub100 -> Sub1000 = notYet "pot2plus" ;
oper pot3 : Sub1000 -> Sub1000000 = notYet "pot3" ;
oper pot3plus : Sub1000 -> Sub1000 -> Sub1000000 = notYet "pot3plus" ;
oper quite_Adv : AdA = notYet "quite_Adv" ;
oper right_Ord : Ord = notYet "right_Ord" ;
oper she_Pron : Pron = notYet "she_Pron" ;
oper so_AdA : AdA = notYet "so_AdA" ;
oper somePl_Det : Det = notYet "somePl_Det" ;
oper someSg_Det : Det = notYet "someSg_Det" ;
oper somebody_NP : NP = notYet "somebody_NP" ;
oper something_NP : NP = notYet "something_NP" ;
oper somewhere_Adv : Adv = notYet "somewhere_Adv" ;
oper that_Quant : Quant = notYet "that_Quant" ;
oper that_Subj : Subj = notYet "that_Subj" ;
oper there7from_Adv : Adv = notYet "there7from_Adv" ;
oper there7to_Adv : Adv = notYet "there7to_Adv" ;
oper there_Adv : Adv = notYet "there_Adv" ;
oper therefore_PConj : PConj = notYet "therefore_PConj" ;
oper they_Pron : Pron = notYet "they_Pron" ;
oper this_Quant : Quant = notYet "this_Quant" ;
oper through_Prep : Prep = notYet "through_Prep" ;
oper to_Prep : Prep = notYet "to_Prep" ;
oper too_AdA : AdA = notYet "too_AdA" ;
oper under_Prep : Prep = notYet "under_Prep" ;
oper very_AdA : AdA = notYet "very_AdA" ;
oper we_Pron : Pron = notYet "we_Pron" ;
oper whatPl_IP : IP = notYet "whatPl_IP" ;
oper whatSg_IP : IP = notYet "whatSg_IP" ;
oper when_IAdv : IAdv = notYet "when_IAdv" ;
oper when_Subj : Subj = notYet "when_Subj" ;
oper where_IAdv : IAdv = notYet "where_IAdv" ;
oper which_IQuant : IQuant = notYet "which_IQuant" ;
oper whoPl_IP : IP = notYet "whoPl_IP" ;
oper whoSg_IP : IP = notYet "whoSg_IP" ;
oper why_IAdv : IAdv = notYet "why_IAdv" ;
oper with_Prep : Prep = notYet "with_Prep" ;
oper without_Prep : Prep = notYet "without_Prep" ;
oper yes_Utt : Utt = notYet "yes_Utt" ;
oper youPl_Pron : Pron = notYet "youPl_Pron" ;
oper youPol_Pron : Pron = notYet "youPol_Pron" ;
oper youSg_Pron : Pron = notYet "youSg_Pron" ;
}

View File

@@ -1,36 +0,0 @@
concrete NamesTok of Names = CatTok ** open Prelude in {
-- An API layer to deal with names
-- Not part of the RGL API, but used in the AW project
-- So depends on your goals whether this is high or low priority to implement.
{-
lin
-- : GN -> NP ;
GivenName gn =
-- : SN -> NP ;
MaleSurname sn =
-- : SN -> NP ;
FemaleSurname sn =
-- : SN -> NP ;
PlSurname sn =
-- : GN -> SN -> NP ;
FullName gn sn =
lin
-- : LN -> NP ;
UseLN ln =
-- : LN -> NP ;
PlainLN ln =
-- : LN -> Adv ;
InLN ln =
-- : AP -> LN -> LN ;
AdjLN ap ln =
-}
}

View File

@@ -1,211 +0,0 @@
--# -path=.:../abstract:../common:../prelude
concrete NounTok of Noun = CatTok ** open ResTok, Prelude in {
flags optimize=all_subs ;
lin
--2 Noun phrases
-- : Det -> CN -> NP
DetCN det cn = emptyNP ** {
s = cn.s ++ det.s
} ;
-- : PN -> NP ;
-- Assuming that lincat PN = lincat NP
UsePN pn = {
s = pn.head ++ pn.tail ;
p = P3 ;
li = NotMiSina ;
} ;
-- : Pron -> NP ;
-- Assuming that lincat Pron = lincat NP
UsePron pron = pron ;
-- : Predet -> NP -> NP ; -- only the man
-- PredetNP predet np =
-- A noun phrase can also be postmodified by the past participle of a
-- verb, by an adverb, or by a relative clause
-- low prio
-- : NP -> V2 -> NP ; -- the man seen
-- PPartNP np v2 = np ** {
-- s =
-- } ;
-- : NP -> Adv -> NP ; -- Paris today
-- AdvNP np adv = np ** {
-- s = np.s ++ "," ++ adv.s
-- } ;
-- : NP -> Adv -> NP ; -- boys, such as ..
-- ExtAdvNP np adv = AdvNP np {s = "," ++ adv.s} ;
-- : NP -> RS -> NP ; -- Paris, which is here
-- RelNP np rs = np ** {
-- } ;
-- Determiners can form noun phrases directly.
-- : Det -> NP ;
DetNP det = emptyNP ** {
s = det.s
} ;
-- MassNP : CN -> NP ;
MassNP cn = emptyNP ** {
s = linCN cn
} ;
--2 Determiners
-- The determiner has a fine-grained structure, in which a 'nucleus'
-- quantifier and an optional numeral can be discerned.
-- : Quant -> Num -> Det ;
DetQuant quant num = quant ** {
s = quant.s ++ num.s
} ;
-- : Quant -> Num -> Ord -> Det ;
-- DetQuantOrd quant num ord = quant ** {
-- } ;
NumSg,NumPl = ss [] ;
-- Whether the resulting determiner is singular or plural depends on the
-- cardinal.
-- All parts of the determiner can be empty, except $Quant$, which is
-- the "kernel" of a determiner. It is, however, the $Num$ that determines
-- the inherent number.
-- : Card -> Num ; -- two
NumCard card = card ;
{-
-- : Digits -> Card ;
NumDigits dig = -- probably like OrdDigits, but choose the NCard form
-- : Numeral -> Card ;
NumNumeral num = {
s = num.s ! NCard ;
n = num.n -- inherits grammatical number (Sg, Pl, …) from the Numeral
} ;
-- : AdN -> Card -> Card ;
AdNum adn card = card ** { s = adn.s ++ card.s } ;
-- : Digits -> Ord ;
OrdDigits digs = digs ** { s = digs.s ! NOrd } ;
-- : Numeral -> Ord ;
OrdNumeral num = {
s = num.s ! NOrd
} ;
-- : A -> Ord ;
OrdSuperl a = {
s = "most" ++ a.s ! Superl
} ;
-- One can combine a numeral and a superlative.
-- : Numeral -> A -> Ord ; -- third largest
OrdNumeralSuperl num a = {
s = num.s ! NOrd ++ a.s ! Superl
} ;
-}
-- : Quant
DefArt = mkQuant [] ;
-- : Quant
IndefArt = mkQuant [] ;
-- : Pron -> Quant -- my
PossPron pron = mkQuant pron.s ;
--2 Common nouns
-- : N -> CN
UseN n = n ;
{-
-- : N2 -> CN ;
UseN2 n2 =
-- : N2 -> NP -> CN ;
ComplN2 n2 np =
-- : N3 -> NP -> N2 ; -- distance from this city (to Paris)
ComplN3 n3 np =
-- : N3 -> N2 ; -- distance (from this city)
Use2N3 n3 = lin N2 n3 ** { c2 = n3.c3 } ;
-- : N3 -> N2 ; -- distance (to Paris)
Use3N3 n3 = lin N2 n3 ;
-- : AP -> CN -> CN
AdjCN ap cn =
-- : CN -> RS -> CN ;
RelCN cn rs =
-- : CN -> Adv -> CN ;
AdvCN cn adv =
-- Nouns can also be modified by embedded sentences and questions.
-- For some nouns this makes little sense, but we leave this for applications
-- to decide. Sentential complements are defined in VerbTok.
-- : CN -> SC -> CN ; -- question where she sleeps
SentCN cn sc =
--2 Apposition
-- This is certainly overgenerating.
-- : CN -> NP -> CN ; -- city Paris (, numbers x and y)
ApposCN cn np = cn ** {
s =
} ;
--2 Possessive and partitive constructs
-- NB. Below this, the functions are not in the API, so lower prio to implement
-- : PossNP : CN -> NP -> CN ;
-- in English: book of someone; point is that we can add a determiner to the CN,
-- so it can become "a book of someone" or "the book of someone"
PossNP cn np =
-- : Det -> NP -> NP ; -- three of them, some of the boys
CountNP det np = -- Nonsense for DefArt or IndefArt, but don't worry about that! RGL can contain weird sentences, as long as it contains the non-weird stuff we want
-- : CN -> NP -> CN ; -- glass of wine / two kilos of red apples
PartNP cn np =
--3 Conjoinable determiners and ones with adjectives
-- : DAP -> AP -> DAP ; -- the large (one)
AdjDAP dap ap = dap ** {
} ;
-- : Det -> DAP ; -- this (or that)
DetDAP det = det ;
-}
-- : AP -> CN -> CN
AdjCN = \ap,cn -> { s = cn.s ++ ap.s ;};
}

View File

@@ -1,113 +0,0 @@
concrete NumeralTok of Numeral = CatTok [Numeral,Digits] **
open Prelude, ResTok in {
lincat
Digit = LinNumeral ; -- 2..9
Sub10, -- 1..9
Sub100, -- 1..99
Sub1000, -- 1..999
Sub1000000, -- 1..999999
Sub1000000000, -- 1..999999999
Sub1000000000000 -- 1..999999999999
= LinNumeral ;
-- param CardOrd defined in ResTok
-- type LinNumeral -""-
lin
-- : Sub1000000 -> Numeral ; -- 123456 [coercion to top category]
num x = x ;
-- : Digit ;
n2 = mkNumeral "two" ;
n3 = mkNumeral "three" ;
n4 = mkNumeral "four" ;
n5 = mkNumeral "five" ;
n6 = mkNumeral "six" ;
n7 = mkNumeral "seven" ;
n8 = mkNumeral "eight" ;
n9 = mkNumeral "nine" ;
-- : Sub10 ; -- 1
-- pot01 =
-- : Digit -> Sub10 ; -- d * 1
pot0 d = d ;
-- : Sub100 ; -- 10
-- pot110 = mkNum "ten" ;
-- : Sub100 ; -- 11
-- pot111 = mkNum "eleven" ;
-- : Digit -> Sub100 ; -- 10 + d
-- pot1to19 d =
-- : Sub10 -> Sub100 ; -- coercion of 1..9
pot0as1 n = n ;
-- : Digit -> Sub100 ; -- d * 10
-- pot1 d =
-- : Digit -> Sub10 -> Sub100 ; -- d * 10 + n
-- pot1plus d e =
-- : Sub100 -> Sub1000 ; -- coercion of 1..99
pot1as2 n = n ;
-- : Sub10 -> Sub1000 ; -- m * 100
-- pot2 d =
-- : Sub10 -> Sub100 -> Sub1000 ; -- m * 100 + n
-- pot2plus d e =
-- : Sub1000 -> Sub1000000 ; -- coercion of 1..999
pot2as3 n = n ;
-- : Sub1000 -> Sub1000000 ; -- m * 1000
-- pot3 d =
-- : Sub1000 -> Sub1000 -> Sub1000000 ; -- m * 1000 + n
-- pot3plus d e =
--------------------------------------------------------------------------------
-- Numerals as sequences of digits have a separate, simpler grammar
--
lincat
Dig = LinDig ; -- single digit 0..9
lin
-- : Dig -> Digits ; -- 8
IDig d = d ;
-- : Dig -> Digits -> Digits ; -- 876
IIDig d e = {
s = table {
NCard => glue (d.s ! NCard) (e.s ! NCard) ;
NOrd => glue (d.s ! NCard) (e.s ! NOrd)
} ;
} ;
-- : Dig ;
D_0 = mkDig "0" ;
D_1 = mkDig "1" ;
D_2 = mkDig "2" ;
D_3 = mkDig "3" ;
D_4 = mkDig "4" ;
D_5 = mkDig "5" ;
D_6 = mkDig "6" ;
D_7 = mkDig "7" ;
D_8 = mkDig "8" ;
D_9 = mkDig "9" ;
oper
LinDig : Type = {s : CardOrd => Str } ;
mkDig : Str -> LinDig = \s -> {
s = table {
NCard => s ;
NOrd => s + "th"
} ;
} ;
}

View File

@@ -1,213 +0,0 @@
resource ParadigmsTok = open CatTok, ResTok, NounTok, Prelude in {
oper
--2 Parameters
--
-- To abstract over number, valency and (some) case names,
-- we define the following identifiers. The application programmer
-- should always use these constants instead of the constructors
-- defined in $ResSom$.
Prep : Type ;
noPrep : Prep ;
-- Add more overload instances if needed for all categories!
--2 Nouns
mkN : overload {
mkN : Str -> N ; -- Predictable nouns
} ;
mkPN : overload {
mkPN : Str -> Str -> PN ; -- Proper nouns
} ;
--2 Adjectives
mkA : overload {
mkA : Str -> A ; -- Predictable adjective
} ;
mkA2 : overload {
mkA2 : Str -> A2 ; -- Predictable A2, no preposition
mkA2 : A -> Prep -> A2 ; -- A2 made from A and Prep
} ;
--2 Verbs
-- Verbs
mkV : overload {
mkV : Str -> V ; -- Predictable verb
} ;
mkV2 : overload {
mkV2 : Str -> V2 ; -- Predictable transitive verb
mkV2 : V -> Prep -> V2 ; -- V2 made from V and Prep
} ;
mkV3 : overload {
mkV3 : V -> V3 ; -- No prepositions
mkV3 : V -> Prep -> Prep -> V3 ; -- Prepositions for direct and indirect objects given
} ;
mkVV : overload {
mkVV : V -> VV ;
} ;
mkVA : overload {
mkVA : V -> VA ;
} ;
mkVQ : overload {
mkVQ : V -> VQ ;
} ;
mkVS : overload {
mkV : V -> VS ;
} ;
-- Etc. do the same for other V subcats (V2A, V2V, V2S, …)
-----
--2 Structural categories
-- If prepositions take case, add that as argument to mkPrep
mkPrep : overload {
mkPrep : Str -> Prep ;
} ;
mkConj : overload {
mkConj : (and : Str) -> Conj ; -- (coffee) and (tea)
mkConj : (either : Str) -> (or : Str) -> Conj ; -- either (coffee) or (tea)
} ;
mkSubj : overload {
mkSubj : Str -> Subj ;
} ;
mkAdv : overload {
mkAdv : Str -> Adv ;
} ;
mkAdV : overload {
mkAdV : Str -> AdV ;
} ;
mkAdA : overload {
mkAdA : Str -> AdA ;
} ;
--.
-------------------------------------------------------------------------------
-- The definitions should not bother the user of the API. So they are
-- hidden from the document.
Prep = CatTok.Prep ;
noPrep = mkPrep [] ;
-- Add more overload instances if needed for all categories!
-- For explanation of `lin N`, see
-- https://inariksit.github.io/gf/2018/05/25/subtyping-gf.html#lock-fields
mkN = overload {
mkN : Str -> N = \s -> lin N (ResTok.mkNoun s) ;
-- TODO: more overload instances
} ;
mkPN = overload {
mkPN : Str -> Str -> PN = \head,tail -> lin PN {
head = head; tail = tail
}
} ;
--2 Adjectives
mkA = overload {
mkA : Str -> A = \s -> ss s
} ;
{-
mkA2 = overload {
mkA2 : Str -> A2 = \s -> …
mkA2 : A -> Prep -> A2 = \s -> …
} ;
--2 Verbs
-}
-- Verbs
mkV = overload {
mkV : Str -> V = \s -> lin V (mkVerb s) ;
} ;
mkV2 = overload {
mkV2 : Str -> V2 = \s -> ss s
-- mkV2 : V -> Prep -> V2 = \s -> …
} ;
{-
mkV3 = overload {
mkV3 : V -> V3 = \s -> …
mkV3 : V -> Prep -> Prep -> V3 = \s -> …
} ;
mkVV = overload {
mkVV : V -> VV = \s -> …
} ;
mkVA = overload {
mkVA : V -> VA = \s -> …
} ;
mkVQ = overload {
mkVQ : V -> VQ = \s -> …
} ;
mkVS = overload {
mkV : V -> VS = \s -> …
} ;
-- Etc. do the same for other V subcats (V2A, V2V, V2S, …)
-----
-}
-- If prepositions take case, add that as argument to mkPrep
mkPrep = overload {
mkPrep : Str -> Prep = \s -> lin Prep {s = s} ;
} ;
{-
mkConj = overload {
mkConj : (and : Str) -> Conj = \s -> …
mkConj : (either : Str) -> (or : Str) -> Conj = \s -> …
} ;
mkSubj = overload {
mkSubj : Str -> Subj = \s -> …
} ;
mkAdv = overload {
mkAdv : Str -> Adv = \s -> …
} ;
mkAdV = overload {
mkAdV : Str -> AdV = \s -> …
} ;
mkAdA = overload {
mkAdA : Str -> AdA = \s -> …
} ;
-}
--------------------------------------------------------------------------------
}

View File

@@ -1,27 +0,0 @@
concrete PhraseTok of Phrase = CatTok ** open Prelude, ResTok in {
lin
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
UttS s = s ;
{-
UttQS qs = qs ;
UttIAdv iadv = iadv ;
UttNP np =
UttIP ip =
UttImpSg pol imp = { s = pol.s ++ imp.s ! Sg ! pol.p } ;
UttImpPl pol imp =
UttImpPol pol imp = {s = pol.s ++ imp.s ! Sg ! pol.p} ;
UttVP vp = {s = linVP vp} ;
UttAP ap = { s = ap.s } ;
UttAdv adv = {s = } ;
UttCN n = {s = } ;
UttCard n = {s = } ;
UttInterj i = i ; -}
NoPConj = {s = []} ;
-- PConjConj conj = {s = conj.s1 ++ conj.s2 ! …} ;
NoVoc = {s = []} ;
-- VocNP np = { s = "," ++ np.s ! … } ;
}

View File

@@ -1,105 +0,0 @@
concrete QuestionTok of Question = CatTok ** open
Prelude, ResTok, ParadigmsTok, (V=VerbTok), (Noun=NounTok), (S=StructuralTok) in {
-- A question can be formed from a clause ('yes-no question') or
-- with an interrogative.
-- Interrogative pronouns can be formed with interrogative
-- determiners, with or without a noun.
{-
lin
-- : IDet -> CN -> IP ; -- which five songs
IdetCN idet cn = Noun.DetCN idet cn ** {
} ;
-- : IDet -> IP ; -- which five
IdetIP idet = Noun.DetNP idet ** {sp = idet.sp};
-- : IQuant -> Num -> IDet ; -- which (five)
IdetQuant iquant num = iquant ** {
} ;
-- : IP -> ClSlash -> QCl ; -- whom does John love
QuestSlash ip cls = cls ** {
} ;
-- : Cl -> QCl ;
QuestCl cl = cl ** {
};
-- : IP -> VP -> QCl ;
QuestVP ip cl = cl ** {
} ;
-- : IAdv -> Cl -> QCl ; -- why does John walk
QuestIAdv iadv cls = {
} ;
-- : IP -> IComp ;
CompIP ip = {s = ip.s ! } ; -- who (is it)
-- : IComp -> NP -> QCl ; -- where is John?
QuestIComp icomp np = {
} ;
-- Interrogative pronouns can be formed with interrogative
-- determiners, with or without a noun.
-- : IDet -> CN -> IP ; -- which five songs
IdetCN idet cn =
-- : IDet -> IP ; -- which five
IdetIP idet =
-- They can be modified with adverbs.
-- : IP -> Adv -> IP ; -- who in Paris
AdvIP = Noun.AdvNP ;
-- Interrogative quantifiers have number forms and can take number modifiers.
-- : IQuant -> Num -> IDet ; -- which (five)
IdetQuant = Noun.DetQuant ;
-- Interrogative adverbs can be formed prepositionally.
-- : Prep -> IP -> IAdv ; -- with whom
PrepIP prep ip =
-- They can be modified with other adverbs.
-- : IAdv -> Adv -> IAdv ; -- where in Paris
AdvIAdv iadv adv =
-- Interrogative complements to copulas can be both adverbs and
-- pronouns.
-- : IAdv -> IComp ;
CompIAdv iadv = iadv ; -- where (is it)
-- More $IP$, $IDet$, and $IAdv$ are defined in $Structural$.
-- Wh questions with two or more question words require a new, special category.
lincat
-- buy what where
QVP =
lin
-- : VPSlash -> IP -> QVP ; -- buys what
ComplSlashIP vps ip =
-- : VP -> IAdv -> QVP ; -- lives where
AdvQVP vp iadv =
-- : QVP -> IAdv -> QVP ; -- buys what where
AddAdvQVP qvp iadv =
-- : IP -> QVP -> QCl ; -- who buys what where
QuestQVP ip qvp =
-}
}

View File

@@ -1,24 +0,0 @@
concrete RelativeTok of Relative = CatTok ** open
ResTok, Prelude in {
{-
lin
-- : Cl -> RCl ; -- such that John loves her
RelCl cl = cl ** {
} ;
-- : RP -> VP -> RCl ;
RelVP rp vp = {
} ;
-- : RP -> ClSlash -> RCl ; -- who I went with
RelSlash rp cls = {
} ;
-- : RP ;
IdRP = {s = "that"} ;
-- : Prep -> NP -> RP -> RP ; -- the mother of whom
FunRP prep np rp =
-}
}

View File

@@ -1,262 +0,0 @@
--# -path=.:../abstract:../common:../prelude
resource ResTok = open Prelude, Predef, ParamX in {
--------------------------------------------------------------------------------
-- General notes
-- ** Naming **
{-
I'm using the naming scheme for lincats and opers as explained here:
https://inariksit.github.io/gf/2018/08/28/gf-gotchas.html#my-naming-scheme-for-lincats-and-opers
-}
-- ** File structure **
-- The rest of this module is organised as follows:
-----------------------------
-- Grammatical categor(y|ies)
{-
General comments on the cat(s)
params related to the cat(s)
opers related to the cat(s)
-}
--------------------------------------------------------------------------------
-- Nouns
{-The param Number comes from common/ParamX, and has the values Sg and Pl.
* If your language doesn't have number, remove Number from all records.
* If your language has number with more than 2 values, define your own number in this module
(e.g. uncomment line 56) and use that Number instead of Number.
The param Gender is defined here, and has the values Gender1 and Gender2.
Currently it's only as a suggestion to be an inherent field in LinN.
* If your language doesn't have gender, remove Gender from all records.
* If your language has genders/noun classes, replace the placeholder Gender1 and Gender1
with the actual values of your language (there can be more than 2!), and uncomment
the g : Gender field from the definition of LinN.
If your nouns inflect in more things, like case, you can do one of the following
* Replace the placeholder cases on line 53 and make the table 2-dimensional, like this:
oper LinN : Type = {s : Number => Case => Str ; …} ;
* Make your own parameter that combines all the relevant features, like this:
param NForm = Whatever | You | Need | For | Noun | Inflection ;
oper LinN : Type = {s : NForm => Str ; …} ;
This can be a good idea, if your inflection table has some gaps, i.e. not all combinations are in use
See https://gist.github.com/inariksit/708ab9df2498e88bc63aedf5fc7be2f3#file-tables-gf-L48-L122 for explanation
-}
param
Person = P1 | P2 | P3 ;
LiSubject = MiSina | NotMiSina ;
oper
LinN : Type = {s : Str ;} ;
-- Most often, the lincat for CN is the same as N, with possibly some additional fields.
-- However, sometimes you need more fields than just the s field, e.g. to keep word order flexible, or to add clitics and make sure they attach to the head, not modifiers.
-- If you don't know what the previous line means, you can get started with just a single s field.
-- You'll notice later whether you need such a field or not.
LinCN : Type = LinN
-- ** {postmod/premod/… : Str} -- if needed
;
LinPN : Type = {
head : Str ;
tail : Str
} ;
-- For inflection paradigms, see http://www.grammaticalframework.org/doc/tutorial/gf-tutorial.html#toc56
mkNoun : Str -> LinN = \s -> {s = s ;} ;
linCN : LinCN -> Str = \cn -> cn.s ;
---------------------------------------------
-- Numeral
-- Used in NumeralTok
param
CardOrd = NCard | NOrd ;
oper
LinNumeral : Type = {s : CardOrd => Str } ;
mkNumeral : Str -> LinNumeral = \s -> {
s = table {
NCard => s ;
NOrd => s + "th"
} ;
} ;
---------------------------------------------
-- Pronoun
{-The param Person comes from common/ParamX, and has the values P1, P2 and P3.
* If your language doesn't inflect in person, you may be able to remove Person from all records.
- However, consider if it's really never present? How about e.g. reflexive ("myself", "yourself" etc?)
* If your language is more fine-grained than {P1,P2,P3} x {Sg,Pl} (for instance gender and familiarity),
you can define your own param. We provide an example called Agr to take inspiration from—remove if
not needed, or use and refine if needed.
-}
param
-- These params are just for inspiration, not used anywhere currently.
Agr = SgP1 -- I
| SgP2 Politeness -- e.g. tū, tum, āp (Hindi) — note that the verb really inflects differently for all three!
| SgP3 -- e.g. he, she (verb inflects the same, but distinction in reflexive: himself / herself)
| FillInTheRestYourself ;
Politeness = Intimate | Familiar | Polite ;
oper
LinPron : Type = {
s : Str ;
p : Person ;
li : LiSubject ;
-- Alternative to the `n` and `p` fields:
-- a : Agr -- sketched above, lines 97-103
} ;
mkPron : (_ : Str) -> Person -> LinPron = \str,per -> {
s = str ;
p = per ;
li = case str of {
"mi"|"sina" => MiSina ;
_ => NotMiSina
} ;
} ;
mi_Pron : LinPron = mkPron "mi" P1 ;
sina_Pron : LinPron = mkPron "sina" P2 ;
ona_Pron : LinPron = mkPron "ona" P3 ;
---------------------------------------------
-- NP
{-
In the RGL, a NP may come from a common noun, proper noun or pronoun.
Pronouns are the only ones that have an inherent person (nouns are almost always 3rd person! please give me counterexamples if you can think of any.)
So we can often say that NP's lincat is the same as Prons.
NB. for later, when you want to make Pron into possessives, you may need more fields in LinPron than in LinNP.
That's why I'm copying over the definition below, instead of the neater `LinNP : Type = LinPron`.
-}
LinNP : Type = {
s : Str ;
p : Person ;
li : LiSubject ;
-- Alternative to the `n` and `p` fields:
-- a : Agr -- sketched on lines 97-101
} ;
linNP : LinNP -> Str = \np -> np.s ; -- Change when you change LinNP
emptyNP : LinNP = { -- Change when you change LinNP
s = [] ;
p = P3 ;
li = NotMiSina
} ;
--------------------------------------------------------------------------------
-- Det, Quant, Card, Ord
LinQuant : Type = {
s : Str -- quantifier in a context, e.g. 'this (cat) (is nice)'
-- sp -- quantifier as standalone, e.g. 'this (is nice)'
-- : Str ;
} ;
LinDet : Type = {
s : Str ;
} ;
-- Can you reuse your mkNoun? Do nouns and quantifiers inflect the same way?
mkQuant : Str -> LinQuant = \s -> {s=s;};
mkDet : Str -> LinDet = \str -> {
s = str
} ;
--------------------------------------------------------------------------------
-- Adpositions
{- The main use of Prep is in the fun
PrepNP : Prep -> NP -> Adv
Despite the name of the RGL category, a 'Prep' can be a preposition, postposition,
or just an instruction to choose a particular case from the NP.
A language may use one, two or all these strategies.
-}
oper
LinPrep : Type = {
s : Str ;
} ;
--------------------------------------------------------------------------------
-- Adjectives
LinA : Type = SS ;
LinA2 : Type = LinA ;
mkAdj : Str -> LinA = \str -> {s = str} ;
AdjPhrase : Type = LinA ; -- ** {compar : Str} ;
--------------------------------------------------------------------------------
-- Verbs
oper
LinV : Type = {
s : Str
} ;
LinV2 : Type = LinV ** {
c2 : LinPrep ;
} ;
mkVerb : Str -> LinV = \s -> {s = s} ;
copula : LinV = {s = "TODO: copula"} ; -- often useful
------------------
-- VP
LinVP : Type = {
s : Polarity => Str ;
} ;
LinVPSlash : Type = LinVP ** {
c2 : LinPrep ;
} ;
-- linVP : LinVP -> Str = \vp -> vp.s ;
--------------------------------------------------------------------------------
-- Cl, S
-- Operations for clauses, sentences
LinCl : Type = {
subj : Str ;
pred : Polarity => Str ; -- TODO: depend on Temp and Pol
} ;
-- linCl : LinCl -> Str = \cl -> case cl.subj of {
-- "mi"|"sina" => cl.subj ++ cl.pred ;
-- _ => cl.subj ++ "li" ++ cl.pred
-- } ;
-- linCl : LinCl -> Str = \cl -> cl.subj ++ cl.pred ;
-- Preverb, VV
Preverb = SS ;
}

View File

@@ -1,72 +0,0 @@
concrete SentenceTok of Sentence = CatTok ** open
TenseX, ResTok, (AM=AdverbTok), Prelude in {
flags optimize=all_subs ;
lin
--2 Clauses
-- : NP -> VP -> Cl
PredVP np vp = {
subj = np.s ; -- ! Nom, if there are cases
pred = \\pol => case np.li of {
MiSina => vp.s ! pol ;
NotMiSina => "li" ++ vp.s ! pol
} ;
} ;
-- : SC -> VP -> Cl ; -- that she goes is good
-- PredSCVP sc vp = ;
--2 Clauses missing object noun phrases
-- : NP -> VPSlash -> ClSlash ;
-- SlashVP = \np,vps -> ss ()
-- : ClSlash -> Adv -> ClSlash ; -- (whom) he sees today
-- AdvSlash cls adv =
-- : Cl -> Prep -> ClSlash ; -- (with whom) he walks
-- SlashPrep cl prep = cl ** {c2 = prep} ;
-- Imperatives
-- : VP -> Imp ;
-- ImpVP vp =
--2 Embedded sentences
-- : S -> SC ;
-- EmbedS s =
-- : QS -> SC ;
-- EmbedQS qs =
-- : VP -> SC ;
-- EmbedVP vp =
--2 Sentences
-- : Temp -> Pol -> Cl -> S ;
UseCl t p cl = {
s = cl.subj ++ t.s ++ p.s ++ cl.pred ! p.p
} ;
-- : Temp -> Pol -> QCl -> QS ;
-- UseQCl t p cl =
-- : Temp -> Pol -> RCl -> RS ;
-- UseRCl t p cl =
-- AdvS : Adv -> S -> S ; -- then I will go home
-- AdvS adv s =
-- ExtAdvS : Adv -> S -> S ; -- next week, I will go home
-- ExtAdvS adv s =
-- : S -> Subj -> S -> S ;
-- SSubjS s1 subj s2 =
-- : S -> RS -> S ; -- she sleeps, which is good
-- RelS sent rs =
}

View File

@@ -1,171 +0,0 @@
concrete StructuralTok of Structural = CatTok **
open Prelude, ResTok, (Noun=NounTok), ParadigmsTok in {
-------
-- Ad*
-- lin almost_AdA =
-- lin almost_AdN =
-- lin at_least_AdN =
-- lin at_most_AdN =
-- lin so_AdA =
-- lin too_AdA =
-- lin very_AdA =
-- lin as_CAdv =
-- lin less_CAdv =
-- lin more_CAdv =
-- lin how8much_IAdv =
-- lin when_IAdv =
-- lin how_IAdv =
-- lin where_IAdv =
-- lin why_IAdv =
-- lin always_AdV = ss "" ;
-- lin everywhere_Adv = ss "" ;
-- lin here7from_Adv = ss "" ;
-- lin here7to_Adv = ss "" ;
-- lin here_Adv = ss "" ;
-- lin quite_Adv = ss "" ;
-- lin somewhere_Adv = ss "" ;
-- lin there7from_Adv = ss "" ;
-- lin there7to_Adv = ss "" ;
-- lin there_Adv = ss "" ;
-------
-- Conj
-- The lincat of Conj is Coordination.ConjunctionDistr ** {n:Number}
-- which means that there are two fields for the strings, and
-- n:Number which specifies the number of the resulting NP.
-- lin and_Conj = {s1 = [] ; s2 = "and" } ;
-- lin or_Conj =
-- lin if_then_Conj =
-- lin both7and_DConj = {s1 = "both" ; s2 = "and" } ;
-- lin either7or_DConj =
-- lin but_PConj =
-- lin otherwise_PConj =
-- lin therefore_PConj =
-----------------
-- *Det and Quant
-- lin how8many_IDet =
-- lin every_Det =
-- lin all_Predet = {s = ""} ;
-- lin not_Predet = { s = "" } ;
-- lin only_Predet = { s = "" } ;
-- lin most_Predet = {s = ""} ;
-- lin few_Det = R.indefDet "" pl ;
lin many_Det = ss "mute" ;
lin much_Det = ss "mute" ;
-- lin somePl_Det =
-- lin someSg_Det =
lin no_Quant = mkQuant "ala" ;
-- lin that_Quant = mkQuant "" ;
lin this_Quant = mkQuant "ni" ;
-- lin which_IQuant = mkQuant "seme" ;
-----
-- NP
-- lin somebody_NP =
-- lin everybody_NP =
-- lin everything_NP =
-- lin nobody_NP =
-- lin nothing_NP =
-- lin somebody_NP =
-- lin something_NP =
-------
-- Prep
-- lin above_Prep = mkPrep "" ;
-- lin after_Prep = mkPrep "" ;
-- lin before_Prep = mkPrep "" ;
-- lin behind_Prep = mkPrep "" ;
-- lin between_Prep = = mkPrep "" ;
-- lin by8agent_Prep = mkPrep "" ;
-- lin by8means_Prep = mkPrep "" ;
-- lin during_Prep = mkPrep "" ;
-- lin except_Prep = mkPrep "" ;
lin for_Prep = mkPrep "tawa" ;
lin from_Prep = mkPrep "tan" ;
-- lin in8front_Prep = mkPrep "" ;
lin in_Prep = mkPrep "lon" ;
-- lin on_Prep = mkPrep "" ;
-- lin part_Prep = mkPrep ;
-- lin possess_Prep = mkPrep "" ;
-- lin through_Prep = mkPrep "" ;
lin to_Prep = mkPrep "tawa" ;
-- lin under_Prep = mkPrep "" ;
-- lin with_Prep = mkPrep "" ;
-- lin without_Prep = mkPrep "" ;
-------
-- Pron
-- Pronouns are closed class, no constructor in ParadigmsTok.
lin it_Pron = ona_Pron ;
lin i_Pron = mi_Pron ;
lin youPol_Pron = sina_Pron ;
lin youSg_Pron = sina_Pron ;
lin he_Pron = ona_Pron ;
lin she_Pron = ona_Pron ;
lin we_Pron = ona_Pron ;
lin youPl_Pron = sina_Pron ;
lin they_Pron = ona_Pron ;
-- lin whatPl_IP =
-- lin whatSg_IP =
-- lin whoPl_IP =
-- lin whoSg_IP =
-------
-- Subj
-- lin although_Subj =
-- lin because_Subj =
-- lin if_Subj =
-- lin that_Subj =
-- lin when_Subj =
------
-- Utt
lin language_title_Utt = ss "toki pona" ;
-- lin no_Utt = ss "" ;
-- lin yes_Utt = ss "" ;
-------
-- Verb
lin have_V2 = mkV "jo" ;
lin can8know_VV = ss "ken" ;
lin can_VV = ss "ken" ;
-- lin must_VV =
lin want_VV = ss "wile" ;
------
-- Voc
-- lin please_Voc = ss "" ;
}

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