Compare commits

..
11 Commits
Author SHA1 Message Date
msyds 0e5b224f5c oops 2026-04-05 18:26:40 -06:00
msyds 7a1d1412fb toki preps 2026-04-05 12:33:43 -06:00
msyds 19e35edf09 oops NumPl 2026-04-05 11:52:21 -06:00
msyds 43979ed054 fix detcn 2026-04-05 11:48:07 -06:00
msyds 786340192f toki transitives 2026-04-05 10:15:24 -06:00
msyds ecdc0a85f6 toki preverb 2026-04-05 09:33:58 -06:00
msyds 0bd3506e1b toki adjs 2026-04-05 09:18:03 -06:00
msyds fc2b2a0954 Pron 2026-04-05 08:34:35 -06:00
msyds eccbdcfb97 li in PredVP 2026-04-05 08:29:48 -06:00
msyds d2568cf869 toki params 2026-04-04 20:05:26 -06:00
msyds bcb16ae376 init toki pona 2026-04-04 20:05:26 -06:00
395 changed files with 19078 additions and 164609 deletions
+1
View File
@@ -0,0 +1 @@
use flake
+12
View File
@@ -5,3 +5,15 @@ dist/
*.pgf *.pgf
*.tmp *.tmp
*~ *~
.direnv
_grphp_*.dot
_grphp_*.png
_grpht_*.dot
_grpht_*.png
_gftmp
t.dot
t.dot.png
u.dot.png
t.dot.*.png
u.dot.*.png
u.dot
Generated
+62
View File
@@ -0,0 +1,62 @@
{
"nodes": {
"nixpkgs": {
"locked": {
"lastModified": 1775036866,
"narHash": "sha256-ZojAnPuCdy657PbTq5V0Y+AHKhZAIwSIT2cb8UgAz/U=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "6201e203d09599479a3b3450ed24fa81537ebc4e",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1750386251,
"narHash": "sha256-1ovgdmuDYVo5OUC5NzdF+V4zx2uT8RtsgZahxidBTyw=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "076e8c6678d8c54204abcb4b1b14c366835a58bb",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"nixpkgs": "nixpkgs",
"sydpkgs": "sydpkgs"
}
},
"sydpkgs": {
"inputs": {
"nixpkgs": "nixpkgs_2"
},
"locked": {
"lastModified": 1771299872,
"narHash": "sha256-+OPW1SKKHT7aqhyjs2O20gd1MXa7LyD+9/lwMUCVL7Y=",
"ref": "refs/heads/main",
"rev": "53bf019e26478666ab7f458f78e569b8b106cc1f",
"revCount": 36,
"type": "git",
"url": "https://git.deertopia.net/msyds/sydpkgs"
},
"original": {
"type": "git",
"url": "https://git.deertopia.net/msyds/sydpkgs"
}
}
},
"root": "root",
"version": 7
}
+55
View File
@@ -0,0 +1,55 @@
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
# gf.url = "github:anka-213/cclaw-nix-stuff/nix-flakes";
sydpkgs.url = "git+https://git.deertopia.net/msyds/sydpkgs";
};
outputs = { self, nixpkgs, sydpkgs, ... }@inputs:
let
supportedSystems = [
"aarch64-darwin"
"aarch64-linux"
"x86_64-darwin"
"x86_64-linux"
];
each-system = f: nixpkgs.lib.genAttrs supportedSystems (system: f rec {
pkgs = import nixpkgs {
inherit system;
overlays = [
# (final: prev: { inherit (gf.packages.${system}) gf-core; })
sydpkgs.overlays.default
];
};
inherit (pkgs) lib;
inherit system;
});
in {
# Exposed as a REPL convenience.
_pkgs = each-system ({ pkgs, ... }: pkgs);
packages = each-system ({ pkgs, ... }: {
default = pkgs.callPackage ./package.nix {};
});
devShells = each-system ({ pkgs, system, ... }:
let
gf-lsp = import
(pkgs.fetchzip {
url = "https://github.com/anka-213/gf-lsp/archive/refs/tags/1.0.6.0.tar.gz";
hash = "sha256-UAI2qUslzLOWYjTirZJ0y4DZbkPZnVXTY0XtFO8+Rks=";
}) {inherit system;};
in {
default = pkgs.mkShell {
inputsFrom = [ self.packages.${system}.default ];
packages = [
gf-lsp.gf-lsp
pkgs.gftest
pkgs.graphviz
pkgs.imagemagick
];
};
});
};
}
+2 -2
View File
@@ -7,7 +7,7 @@ Bul,Bulgarian,bulgarian,,,y,,,,,y,n
Cat,Catalan,catalan,Romance,,y,,,,y,y,n Cat,Catalan,catalan,Romance,,y,,,,y,y,n
Cgg,Rukiga,rukiga,,,y,y,n,n,y,y,n Cgg,Rukiga,rukiga,,,y,y,n,n,y,y,n
Chi,Chinese (simplified),chinese,,,,,,,,y,y Chi,Chinese (simplified),chinese,,,,,,,,y,y
Cze,Czech,czech,,,,,,y,,y,n Cze,Czech,czech,,,,,,n,,y,n
Dan,Danish,danish,Scand,,y,,,,,y,n Dan,Danish,danish,Scand,,y,,,,,y,n
Dut,Dutch,dutch,,,y,,,,,y,n Dut,Dutch,dutch,,,y,,,,,y,n
Eng,English,english,,,y,,,,y,y,y Eng,English,english,,,y,,,,y,y,y
@@ -55,7 +55,7 @@ Sco,Scots,scots,,,y,,,,,y,n
Swa,Swahili,swahili,Bantu,,,y,n,n,n,n,n Swa,Swahili,swahili,Bantu,,,y,n,n,n,n,n
Swe,Swedish,swedish,Scand,,y,,,,y,y,y Swe,Swedish,swedish,Scand,,y,,,,y,y,y
Tam,Tamil,tamil,n,n,n,n,n,n,n,n,n Tam,Tamil,tamil,n,n,n,n,n,n,n,n,n
Tel,Telugu,telugu,,,y,y,n,n,,n,n Tel,Telugu,telugu,,,y,n,n,n,,n,n
Tha,Thai,thai,,to_thai,,,,,,y,n Tha,Thai,thai,,to_thai,,,,,,y,n
Tur,Turkish,turkish,,,y,,,n,,n,n Tur,Turkish,turkish,,,y,,,n,,n,n
Ukr,Ukrainian,ukrainian,,,,y,n,n,n,y,n Ukr,Ukrainian,ukrainian,,,,y,n,n,n,y,n
1 Code Name Directory Functor Unlexer Present All Try Symbolic Compatibility Synopsis MorphoDict
7 Cat Catalan catalan Romance y y y n
8 Cgg Rukiga rukiga y y n n y y n
9 Chi Chinese (simplified) chinese y y
10 Cze Czech czech y n y n
11 Dan Danish danish Scand y y n
12 Dut Dutch dutch y y n
13 Eng English english y y y y
55 Swa Swahili swahili Bantu y n n n n n
56 Swe Swedish swedish Scand y y y y
57 Tam Tamil tamil n n n n n n n n n
58 Tel Telugu telugu y y n n n n n
59 Tha Thai thai to_thai y n
60 Tur Turkish turkish y n n n
61 Ukr Ukrainian ukrainian y n n n y n
+23
View File
@@ -0,0 +1,23 @@
{ stdenv
, ghc
, gf-core
}:
stdenv.mkDerivation {
name = "gf-rgl";
src = ./.;
buildInputs = [ ghc gf-core ];
# Keep references to source, so go to definition works
# postUnpack = ''
# rm -r source/src
# ln -s $src/src source/src
# '';
LC_ALL = "C.UTF-8";
buildPhase = ''
runghc Setup.hs build
'';
installPhase = ''
mkdir -p $out/share/gf/lib
runghc Setup.hs copy --dest=$out/share/gf/lib
'';
}
+6
View File
@@ -52,6 +52,12 @@ apiModules = ["Try","Symbolic","Syntax","Constructors","Combinators"]
clone :: [String] -> String -> String -> String -> String -> (String, String) -> IO () clone :: [String] -> String -> String -> String -> String -> (String, String) -> IO ()
clone options fromdir todir from to (absname,absfx) = do clone options fromdir todir from to (absname,absfx) = do
printf "clone options=%s\n\
\ fromdir=%s\n\
\ todir=%s\n\
\ from=%s\n\
\ to=%s\n" (show options) (show fromdir)
(show todir) (show from) (show to)
s <- readFile (fromdir ++ "/" ++ absname ++ from ++ absfx ++ ".gf") s <- readFile (fromdir ++ "/" ++ absname ++ from ++ absfx ++ ".gf")
writeAndReportFile (todir ++ "/" ++ absname ++ to ++ absfx ++ ".gf") (commentIf options (replaceLang from to s)) writeAndReportFile (todir ++ "/" ++ absname ++ to ++ absfx ++ ".gf") (commentIf options (replaceLang from to s))
-1
View File
@@ -35,7 +35,6 @@ fun
InflectionAdA : AdA -> Inflection ; InflectionAdA : AdA -> Inflection ;
InflectionAdN : AdN -> Inflection ; InflectionAdN : AdN -> Inflection ;
InflectionPrep : Prep -> Inflection ; InflectionPrep : Prep -> Inflection ;
InflectionCl : Cl -> Inflection ;
fun fun
NoDefinition : String -> Definition ; NoDefinition : String -> Definition ;
-5
View File
@@ -49,11 +49,6 @@ concrete AdjectiveAfr of Adjective = CatAfr ** open ResAfr, Prelude in
isPre = ap.isPre isPre = ap.isPre
} ; } ;
AdvAP ap adv = {
s = \\a => ap.s ! a ++ adv.s ;
isPre = False
} ;
UseA2 a = { UseA2 a = {
s = a.s ! Posit ; s = a.s ! Posit ;
isPre = True isPre = True
+1 -2
View File
@@ -47,7 +47,7 @@ concrete CatAfr of Cat =
NP = {s : NPCase => Str ; a : Agr ; isPron : Bool} ; NP = {s : NPCase => Str ; a : Agr ; isPron : Bool} ;
Pron = Pronoun ; Pron = Pronoun ;
Det,DAP = {s,sp : Gender => Str ; n : Number ; a : Adjf} ; Det = {s,sp : Gender => Str ; n : Number ; a : Adjf} ;
Quant = { Quant = {
s : Bool => Number => Gender => Str ; s : Bool => Number => Gender => Str ;
sp : Number => Gender => Str ; sp : Number => Gender => Str ;
@@ -56,7 +56,6 @@ concrete CatAfr of Cat =
Predet = {s : Number => Gender => Str} ; Predet = {s : Number => Gender => Str} ;
Num = {s : Str ; n : Number ; isNum : Bool} ; Num = {s : Str ; n : Number ; isNum : Bool} ;
Card = {s : Gender => Case => Str ; n : Number} ; Card = {s : Gender => Case => Str ; n : Number} ;
ACard = {s : Str} ;
Ord = {s : AForm => Str} ; Ord = {s : AForm => Str} ;
-- Numeral -- Numeral
-5
View File
@@ -19,8 +19,6 @@ concrete ConjunctionAfr of Conjunction =
ConjRS conj ss = conjunctDistrTable2 Gender Number conj ss ; ConjRS conj ss = conjunctDistrTable2 Gender Number conj ss ;
ConjCN conj ss = conjunctDistrTable2 Adjf NForm conj ss ** {g = Neutr} ;
-- These fun's are generated from the list cat's. -- These fun's are generated from the list cat's.
BaseS = twoTable Order ; BaseS = twoTable Order ;
@@ -33,8 +31,6 @@ concrete ConjunctionAfr of Conjunction =
ConsAP xs x = consrTable AForm comma xs x ** {isPre = andB xs.isPre x.isPre} ; ConsAP xs x = consrTable AForm comma xs x ** {isPre = andB xs.isPre x.isPre} ;
BaseRS x y = twoTable2 Gender Number x y ** {c = y.c} ; BaseRS x y = twoTable2 Gender Number x y ** {c = y.c} ;
ConsRS xs x = consrTable2 Gender Number comma xs x ; ConsRS xs x = consrTable2 Gender Number comma xs x ;
BaseCN x y = twoTable2 Adjf NForm x y ;
ConsCN xs x = consrTable2 Adjf NForm comma xs x ;
lincat lincat
[S] = {s1,s2 : Order => Str} ; [S] = {s1,s2 : Order => Str} ;
@@ -42,6 +38,5 @@ concrete ConjunctionAfr of Conjunction =
[NP] = {s1,s2 : NPCase => Str ; a : Agr} ; [NP] = {s1,s2 : NPCase => Str ; a : Agr} ;
[AP] = {s1,s2 : AForm => Str ; isPre : Bool} ; [AP] = {s1,s2 : AForm => Str ; isPre : Bool} ;
[RS] = {s1,s2 : Gender => Number => Str} ; [RS] = {s1,s2 : Gender => Number => Str} ;
[CN] = {s1,s2 : Adjf => NForm => Str} ;
} }
-60
View File
@@ -1,60 +0,0 @@
--# -path=.:../abstract:../common
concrete ConstructionAfr of Construction = CatAfr **
open GrammarAfr, ParadigmsAfr, Prelude in {
lin
ready_VP = UseComp (CompAP (PositA (mkA "gereed"))) ;
has_age_VP card =
UseComp (CompAP (AdAP (lin AdA (UttNP (DetCN (DetQuant IndefArt (NumCard card)) (UseN (mkN "jaar")))))
(PositA (mkA "oud")))) ;
n_units_AP card cn a =
AdAP (lin AdA (UttNP (DetCN (DetQuant IndefArt (NumCard card)) cn)))
(PositA a) ;
n_units_of_NP card cn np =
AdvNP (DetCN (DetQuant IndefArt (NumCard card)) cn)
(PrepNP (mkPrep "van") np) ;
cup_of_CN np = AdvCN (UseN (mkN "koppie"))
(PrepNP (mkPrep "van") np) ;
lincat
Weekday = N ;
Month = N ;
Year = {s : Str} ;
Monthday = {s : Str} ;
lin
weekdayPunctualAdv w = PrepNP (mkPrep "op") (MassNP (UseN w)) ;
weekdayHabitualAdv w = PrepNP (mkPrep "elke") (MassNP (UseN w)) ;
yearAdv y = {s = "in" ++ y.s} ;
intYear i = {s = i.s} ;
weekdayN w = w ;
monthN m = m ;
monday_Weekday = mkN "Maandag" ;
tuesday_Weekday = mkN "Dinsdag" ;
wednesday_Weekday = mkN "Woensdag" ;
thursday_Weekday = mkN "Donderdag" ;
friday_Weekday = mkN "Vrydag" ;
saturday_Weekday = mkN "Saterdag" ;
sunday_Weekday = mkN "Sondag" ;
january_Month = mkN "Januarie" ;
february_Month = mkN "Februarie" ;
march_Month = mkN "Maart" ;
april_Month = mkN "April" ;
may_Month = mkN "Mei" ;
june_Month = mkN "Junie" ;
july_Month = mkN "Julie" ;
august_Month = mkN "Augustus" ;
september_Month = mkN "September" ;
october_Month = mkN "Oktober" ;
november_Month = mkN "November" ;
december_Month = mkN "Desember" ;
}
+2 -160
View File
@@ -1,155 +1,10 @@
concrete ExtendAfr of Extend = concrete ExtendAfr of Extend =
CatAfr ** ExtendFunctor - [ CatAfr ** ExtendFunctor - [PassVPSlash,PassAgentVPSlash]
VPS, BaseVPS, ConsVPS, MkVPS, ConjVPS, PredVPS,
VPI, BaseVPI, ConsVPI, MkVPI, ConjVPI, ComplVPIVV,
PassVPSlash, PassAgentVPSlash,
PresPartAP, PastPartAP, PastPartAgentAP, ProgrVPSlash,
RNP, RNPList, ReflRNP, ReflPron, ReflPoss, PredetRNP,
AdvRNP, AdvRVP, AdvRAP, ReflA2RNP, PossPronRNP,
ConjRNP, Base_rr_RNP, Base_nr_RNP, Base_rn_RNP,
Cons_rr_RNP, Cons_nr_RNP,
GenModNP, ComplBareVS, CompoundN, CompoundAP,
GerundCN, GerundNP, GerundAdv, ByVP, InOrderToVP,
ApposNP, UttVPShort, ComplSlashPartLast,
PositAdVAdj,
UseDAP, UseDAPMasc, UseDAPFem,
BaseComp, ConsComp, ConjComp, BaseImp, ConsImp, ConjImp
]
with with
(Grammar = GrammarAfr) ** (Grammar = GrammarAfr) **
open open
ParadigmsAfr, ResAfr, Coordination, Prelude in { ParadigmsAfr, ResAfr in {
lincat
VPS = {s : Order => Agr => Str} ;
[VPS] = {s1,s2 : Order => Agr => Str} ;
VPI = {s : Agr => Str} ;
[VPI] = {s1,s2 : Agr => Str} ;
lin BaseVPS = twoTable2 Order Agr ;
ConsVPS = consrTable2 Order Agr comma ;
MkVPS tm pol vp = {
s = \\o,a => (mkClause [] a vp).s ! tm.t ! tm.a ! pol.p ! o
} ;
ConjVPS conj vps = conjunctDistrTable2 Order Agr conj vps ;
PredVPS np vps = {
s = \\o => case o of {
Main | Sub => np.s ! NPNom ++ vps.s ! o ! np.a ;
Inv => vps.s ! Inv ! np.a ++ np.s ! NPNom
}
} ;
BaseVPI = twoTable Agr ;
ConsVPI = consrTable Agr comma ;
MkVPI vp = {s = \\a => infVPString vp a} ;
ConjVPI conj vpis = conjunctDistrTable Agr conj vpis ;
ComplVPIVV vv vpi = insertInf (vpi.s ! agrP3 Sg) (predVGen vv.isAux vv) ;
lincat
RNP = {s : Agr => Str ; isPron : Bool} ;
RNPList = {s1,s2 : Agr => Str} ;
lin ReflRNP vps rnp = insertObjNP rnp.isPron (\\a => appPrep vps.c2 (\\_ => rnp.s ! a)) vps ;
ReflPron = {s = reflPron ; isPron = True} ;
ReflPoss num cn = {
s = \\a => reflPossDet a ++ num.s ++ cn.s ! Strong ! NF num.n Nom ;
isPron = False
} ;
PredetRNP pred rnp = {
s = \\a => pred.s ! a.n ! a.g ++ rnp.s ! a ;
isPron = False
} ;
AdvRNP np prep rnp = {
s = \\a => np.s ! NPAcc ++ prep.s ++ rnp.s ! a ;
isPron = False
} ;
AdvRVP vp prep rnp = insertObj (\\a => prep.s ++ rnp.s ! a) vp ;
AdvRAP ap prep rnp = {
s = \\af => ap.s ! af ++ prep.s ++ rnp.s ! agrP3 Sg ;
isPre = False
} ;
ReflA2RNP a rnp = {
s = \\af => a.s ! Posit ! af ++ a.c2 ++ rnp.s ! agrP3 Sg ;
isPre = False
} ;
PossPronRNP pron num cn rnp = heavyNP {
s = \\c => pron.unstressed.poss ++ num.s ++ cn.s ! Strong ! NF num.n Nom ++
"van" ++ rnp.s ! pron.a ;
a = agrP3 num.n
} ;
ConjRNP conj rnps = conjunctDistrTable Agr conj rnps ** {isPron = False} ;
Base_rr_RNP = twoTable Agr ;
Base_nr_RNP np rnp = twoTable Agr {s = \\_ => np.s ! NPAcc} rnp ;
Base_rn_RNP rnp np = twoTable Agr rnp {s = \\_ => np.s ! NPAcc} ;
Cons_rr_RNP = consrTable Agr comma ;
Cons_nr_RNP np rnps = consrTable Agr comma {s = \\_ => np.s ! NPAcc} rnps ;
lin GenModNP num np cn = heavyNP {
s = \\c => np.s ! NPNom ++ "se" ++ cn.s ! Strong ! NF num.n Nom ;
a = agrP3 num.n
} ;
ComplBareVS v s = insertExtrapos (s.s ! Sub) (predV v) ;
CompoundN n1 n2 = {
s = \\f => n1.s ! NF Sg Nom ++ BIND ++ n2.s ! f ;
g = n2.g
} ;
CompoundAP noun adj = {
s = \\af => noun.s ! NF Sg Nom ++ BIND ++ adj.s ! Posit ! af ;
isPre = True
} ;
PresPartAP vp = {
s = \\_ => "wat" ++ (mkClause [] (agrP3 Sg) vp).s ! Pres ! Simul ! Pos ! Sub ;
isPre = False
} ;
PastPartAP vp = {
s = \\_ => partVP vp (agrP3 Sg) ;
isPre = True
} ;
PastPartAgentAP vp np = {
s = \\_ => partVP vp (agrP3 Sg) ++ "door" ++ np.s ! NPAcc ;
isPre = False
} ;
ProgrVPSlash vp = vp ;
GerundCN vp = {
s = \\_,_ => infVPString vp (agrP3 Sg) ;
g = Neutr
} ;
GerundNP vp = heavyNP {
s = \\_ => infVPString vp (agrP3 Sg) ;
a = agrP3 Sg
} ;
GerundAdv vp = {s = "door" ++ infVPString vp (agrP3 Sg)} ;
ByVP vp = {s = "door" ++ infVPString vp (agrP3 Sg)} ;
InOrderToVP vp = {s = "om" ++ infVPString vp (agrP3 Sg)} ;
ApposNP np1 np2 = heavyNP {
s = \\c => np1.s ! c ++ "," ++ np2.s ! c ;
a = np1.a
} ;
PositAdVAdj a = {s = a.s ! Posit ! APred} ;
UttVPShort vp = {s = vp.s.s ! VInf ++ vp.n2 ! agrP3 Sg ++ vp.a2} ;
ComplSlashPartLast vps np = insertObjNP np.isPron
(\\_ => np.s ! NPAcc ++ vps.c2) (vps ** {c2 = []}) ;
UseDAP dap = heavyNP {
s = \\_ => dap.sp ! Neutr ;
a = agrP3 dap.n
} ;
UseDAPMasc = UseDAP ;
UseDAPFem = UseDAP ;
lincat [Comp] = {s1,s2 : Agr => Str} ;
lin BaseComp = twoTable Agr ;
ConsComp = consrTable Agr comma ;
ConjComp = conjunctDistrTable Agr ;
lincat [Imp] = {s1,s2 : Polarity => ImpForm => Str} ;
lin BaseImp = twoTable2 Polarity ImpForm ;
ConsImp = consrTable2 Polarity ImpForm comma ;
ConjImp = conjunctDistrTable2 Polarity ImpForm ;
-- KA: guessed from PassV2 in Afrikaans and the equivalents in Dutch -- KA: guessed from PassV2 in Afrikaans and the equivalents in Dutch
lin PassVPSlash vps = lin PassVPSlash vps =
@@ -157,17 +12,4 @@ lin PassVPSlash vps =
PassAgentVPSlash vps np = PassAgentVPSlash vps np =
insertAdv (appPrep "door" np.s) (insertInf (vps.s.s ! VPerf) (predV word_V)) ; insertAdv (appPrep "door" np.s) (insertInf (vps.s.s ! VPerf) (predV word_V)) ;
oper
infVPString : ResAfr.VP -> Agr -> Str = \vp,a ->
"om" ++ vp.n0 ! a ++ vp.n2 ! a ++ vp.a2 ++ "te" ++
vp.s.s ! VInf ++ vp.inf.p1 ++ vp.ext ;
partVP : ResAfr.VP -> Agr -> Str = \vp,a ->
vp.s.s ! VPerf ++ vp.n0 ! a ++ vp.n2 ! a ++ vp.a2 ++ vp.inf.p1 ++ vp.ext ;
reflPossDet : Agr -> Str = \a -> case <a.n,a.p> of {
<Sg,P1> => "my" ; <Sg,P2> => "jou" ; <Sg,P3> => "sy" ;
<Pl,P1> => "ons" ; <Pl,P2> => "julle" ; <Pl,P3> => "hulle"
} ;
} }
-22
View File
@@ -20,10 +20,6 @@ concrete IdiomAfr of Idiom = CatAfr **
(insertObj (\\_ => np.s ! NPNom) (insertObj (\\_ => np.s ! NPNom)
(predV zijn_V)) ; (predV zijn_V)) ;
ExistNPAdv np adv =
mkClause "daar" (agrP3 np.a.n)
(insertAdv adv.s (insertObj (\\_ => np.s ! NPNom) (predV zijn_V))) ;
ExistIP ip = { ExistIP ip = {
s = \\t,a,p => s = \\t,a,p =>
let let
@@ -36,24 +32,6 @@ concrete IdiomAfr of Idiom = CatAfr **
} }
} ; } ;
ExistIPAdv ip adv = {
s = \\t,a,p =>
let cls = (mkClause "daar" (agrP3 ip.n)
(insertAdv adv.s (predV zijn_V))).s ! t ! a ! p ;
who = ip.s ! NPNom
in table {
QDir => who ++ cls ! Inv ;
QIndir => who ++ cls ! Sub
}
} ;
SelfAdvVP vp = insertAdv (reflPron ! agrP3 Sg) vp ;
SelfAdVVP vp = insertAdV (reflPron ! agrP3 Sg) vp ;
SelfNP np = heavyNP {
s = \\c => np.s ! c ++ reflPron ! np.a ;
a = np.a
} ;
ProgrVP vp = insertAdv ("aan" ++ "die" ++ useInfVP True vp) (predV zijn_V) ; --afr ProgrVP vp = insertAdv ("aan" ++ "die" ++ useInfVP True vp) (predV zijn_V) ; --afr
ImpPl1 vp = ImpPl1 vp =
-1
View File
@@ -3,6 +3,5 @@
concrete LangAfr of Lang = concrete LangAfr of Lang =
GrammarAfr, GrammarAfr,
LexiconAfr LexiconAfr
,ConstructionAfr
,DocumentationAfr --# notpresent ,DocumentationAfr --# notpresent
; ;
-29
View File
@@ -39,11 +39,6 @@ concrete NounAfr of Noun = CatAfr ** open ResAfr, Prelude in {
a = np.a a = np.a
} ; } ;
ExtAdvNP np adv = heavyNP {
s = \\c => np.s ! c ++ "," ++ adv.s ++ "," ;
a = np.a
} ;
DetQuantOrd quant num ord = DetQuantOrd quant num ord =
let let
n = num.n ; n = num.n ;
@@ -178,30 +173,6 @@ concrete NounAfr of Noun = CatAfr ** open ResAfr, Prelude in {
g = cn.g g = cn.g
} ; } ;
PossNP cn np = {
s = \\a,nc => cn.s ! a ! nc ++ "van" ++ np.s ! NPNom ;
g = cn.g
} ;
PartNP cn np = {
s = \\a,nc => cn.s ! a ! nc ++ "van" ++ np.s ! NPAcc ;
g = cn.g
} ;
CountNP det np = heavyNP {
s = \\c => det.s ! Neutr ++ "van" ++ np.s ! c ;
a = agrP3 det.n
} ;
DetDAP det = det ;
AdjDAP dap ap = {
s = \\g => dap.s ! g ++ ap.s ! AAttr ;
sp = \\g => dap.sp ! g ++ ap.s ! AAttr ;
n = dap.n ;
a = dap.a
} ;
ApposCN cn np = let g = cn.g in { ApposCN cn np = let g = cn.g in {
s = \\a,nc => cn.s ! a ! nc ++ np.s ! NPNom ; s = \\a,nc => cn.s ! a ! nc ++ np.s ! NPNom ;
g = g ; g = g ;
-31
View File
@@ -40,49 +40,18 @@ lin
pot1plus d e = addAttr {s = \\g => pot1plus d e = addAttr {s = \\g =>
e.s ! DUnit ! invNum ++ BIND ++ e.en ++ BIND ++ d.s ! DTen ! g ; n = Pl} ; e.s ! DUnit ! invNum ++ BIND ++ e.en ++ BIND ++ d.s ! DTen ! g ; n = Pl} ;
pot1as2 n = n ; pot1as2 n = n ;
pot21 = addAttr {s = cardOrd "honderd" "honderdste" ; n = Pl} ;
pot2 d = pot2 d =
addAttr {s = \\g => d.attr ++ cardOrd "honderd" "honderdste" ! g ; n = Pl} ; addAttr {s = \\g => d.attr ++ cardOrd "honderd" "honderdste" ! g ; n = Pl} ;
pot2plus d e = pot2plus d e =
addAttr {s = \\g => d.attr ++ "honderd" ++ BIND ++ e.s ! g ; n = Pl} ; addAttr {s = \\g => d.attr ++ "honderd" ++ BIND ++ e.s ! g ; n = Pl} ;
pot2as3 n = n ; pot2as3 n = n ;
pot31 = addAttr {s = cardOrd "duisend" "duisendste" ; n = Pl} ;
pot3 n = pot3 n =
addAttr {s = \\g => n.attr ++ cardOrd "duisend" "duisendste" ! g ; n = Pl} ; addAttr {s = \\g => n.attr ++ cardOrd "duisend" "duisendste" ! g ; n = Pl} ;
pot3plus n m = pot3plus n m =
addAttr {s = \\g => n.attr ++ "duisend" ++ m.s ! g ; n = Pl} ; addAttr {s = \\g => n.attr ++ "duisend" ++ m.s ! g ; n = Pl} ;
pot3as4 n = n ; pot3as4 n = n ;
pot3decimal d = addAttr {s = d.s ; n = d.n} ;
pot41 = addAttr {s = cardOrd "een miljoen" "miljoenste" ; n = Pl} ;
pot4 n = addAttr {
s = \\g => n.s ! invNum ++ cardOrd "miljoen" "miljoenste" ! g ;
n = Pl
} ;
pot4plus n m = addAttr {
s = \\g => n.s ! invNum ++ "miljoen" ++ m.s ! g ;
n = Pl
} ;
pot4as5 n = n ; pot4as5 n = n ;
pot4decimal d = addAttr {
s = \\g => d.s ! invNum ++ cardOrd "miljoen" "miljoenste" ! g ;
n = Pl
} ;
pot51 = addAttr {s = cardOrd "een miljard" "miljardste" ; n = Pl} ;
pot5 n = addAttr {
s = \\g => n.s ! invNum ++ cardOrd "miljard" "miljardste" ! g ;
n = Pl
} ;
pot5plus n m = addAttr {
s = \\g => n.s ! invNum ++ "miljard" ++ m.s ! g ;
n = Pl
} ;
pot5decimal d = addAttr {
s = \\g => d.s ! invNum ++ cardOrd "miljard" "miljardste" ! g ;
n = Pl
} ;
lincat lincat
Dig = TDigit ; Dig = TDigit ;
-12
View File
@@ -275,18 +275,6 @@ oper
oper
mkAdV : Str -> AdV = \s -> lin AdV {s=s} ;
mkAdA : Str -> AdA = \s -> lin AdA {s=s} ;
mkAdN : Str -> AdN = \s -> lin AdN {s=s} ;
mkACard : Str -> ACard = \s -> lin ACard {s=s} ;
mkCard : Str -> Number -> Card = \s,n -> lin Card {s=\\_,_=>s; n=n} ;
mkConj : Str -> Number -> Conj = \s,n -> lin Conj {s1=[]; s2=s; n=n} ;
mkSubj : Str -> Subj = \s -> lin Subj {s=s} ;
mkIDet : Str -> Number -> IDet = \s,n -> lin IDet {s=\\_=>s; n=n} ;
mkIQuant : Str -> IQuant = \s -> lin IQuant {s=\\_,_=>s} ;
mkCAdv : Str -> CAdv = \s -> lin CAdv {s=s; p=[]} ;
mkIAdv : Str -> IAdv = \s -> lin IAdv {s=s} ;
----2 Definitions of paradigms ----2 Definitions of paradigms
-10
View File
@@ -62,16 +62,6 @@ concrete SentenceAfr of Sentence = CatAfr ** open ResAfr, Prelude in {
AdvS a s = {s = \\o => a.s ++ s.s ! Inv} ; AdvS a s = {s = \\o => a.s ++ s.s ! Inv} ;
ExtAdvS a s = {s = \\o => a.s ++ "," ++ s.s ! Inv} ;
SSubjS s1 subj s2 = {
s = \\o => s1.s ! o ++ "," ++ subj.s ++ s2.s ! Sub
} ;
AdvImp adv imp = {
s = \\p,i => adv.s ++ imp.s ! p ! i
} ;
RelS s r = {s = \\o => s.s ! o ++ "," ++ r.s ! Neutr ! Sg} ; RelS s r = {s = \\o => s.s ! o ++ "," ++ r.s ! Neutr ! Sg} ;
} }
-6
View File
@@ -78,14 +78,8 @@ concrete VerbAfr of Verb = CatAfr ** open Prelude, ResAfr in {
CompAdv a = {s = \\_ => a.s} ; CompAdv a = {s = \\_ => a.s} ;
AdvVP vp adv = insertAdv adv.s vp ; AdvVP vp adv = insertAdv adv.s vp ;
ExtAdvVP vp adv = insertAdv ("," ++ adv.s ++ ",") vp ;
AdVVP adv vp = insertAdV adv.s vp ; AdVVP adv vp = insertAdV adv.s vp ;
AdvVPSlash vp adv = vp ** {a2 = vp.a2 ++ adv.s} ;
AdVVPSlash adv vp = vp ** {a1 = \\a => adv.s ++ vp.a1 ! a} ;
VPSlashPrep vp prep = vp ** {c2 = prep.s} ;
ReflVP vp = insertObj (\\a => appPrep vp.c2 (\\_ => reflPron ! a )) vp ; ReflVP vp = insertObj (\\a => appPrep vp.c2 (\\_ => reflPron ! a )) vp ;
PassV2 v = insertInf (v.s ! VPerf) (predV word_V) ; PassV2 v = insertInf (v.s ! VPerf) (predV word_V) ;
+4 -19
View File
@@ -1,26 +1,11 @@
concrete AdjectiveSqi of Adjective = CatSqi ** open ResSqi, Prelude in { concrete AdjectiveSqi of Adjective = CatSqi ** open ResSqi, Prelude in {
oper
adjForm : A -> Species => Case => Gender => Number => Str = \a -> \\sp,c,g,n =>
case a.clit of {
True => link_clitic ! sp ! c ! g ! n ++ a.s ! c ! g ! n ;
False => a.s ! c ! g ! n
} ;
lin lin
PositA a = { PositA a = {
s = adjForm a s = \\spec,c,g,n => case a.clit of {
True => link_clitic ! spec ! c ! g ! n ++ a.s ! c ! g ! n ;
False => a.s ! c ! g ! n
}
} ; } ;
ComparA a np = {s=\\sp,c,g,n=>"më" ++ adjForm a ! sp ! c ! g ! n ++ "se" ++ np.s ! Ablat} ;
UseComparA a = {s=\\sp,c,g,n=>"më" ++ adjForm a ! sp ! c ! g ! n} ;
ComplA2 a np = {s=\\sp,c,g,n=>adjForm (lin A a) ! sp ! c ! g ! n ++ a.c2.s ++ np.s ! a.c2.c} ;
UseA2 a = PositA a ;
ReflA2 a = {s=\\sp,c,g,n=>adjForm (lin A a) ! sp ! c ! g ! n ++ a.c2.s ++ "vetveten"} ;
CAdvAP cadv ap np = {s=\\sp,c,g,n=>cadv.s ++ ap.s ! sp ! c ! g ! n ++ cadv.p ++ np.s ! Ablat} ;
AdjOrd ord = {s=\\_,c,g,n=>ord.s ! c ! g ! n} ;
SentAP ap sc = {s=\\sp,c,g,n=>ap.s ! sp ! c ! g ! n ++ "që" ++ sc.s} ;
AdAP ada ap = {s=\\sp,c,g,n=>ada.s ++ ap.s ! sp ! c ! g ! n} ;
AdvAP ap adv = {s=\\sp,c,g,n=>ap.s ! sp ! c ! g ! n ++ adv.s} ;
} }
-11
View File
@@ -1,11 +0,0 @@
concrete AdverbSqi of Adverb = CatSqi ** open Prelude, ResSqi in {
lin
PositAdvAdj a = {s=a.s ! Nom ! Masc ! Sg} ;
PrepNP p np = {s=p.s ++ np.s ! p.c} ;
ComparAdvAdj c a np = {s=c.s ++ a.s ! Nom ! Masc ! Sg ++ c.p ++ np.s ! Ablat} ;
ComparAdvAdjS c a s = {s=c.s ++ a.s ! Nom ! Masc ! Sg ++ c.p ++ s.s} ;
AdAdv a adv = {s=a.s ++ adv.s} ;
PositAdAAdj a = {s=a.s ! Nom ! Masc ! Sg} ;
SubjS subj s = {s=subj.s ++ s.s} ;
AdnCAdv c = {s=c.s ++ c.p} ;
}
+1 -3
View File
@@ -1,6 +1,4 @@
concrete AllSqi of AllSqiAbs = concrete AllSqi of AllSqiAbs =
LangSqi, LangSqi
ExtendSqi,
IrregSqi
** **
{} ; {} ;
+1 -3
View File
@@ -1,5 +1,3 @@
abstract AllSqiAbs = abstract AllSqiAbs =
Lang, Lang
Extend,
IrregSqiAbs
** {} ** {}
+15 -74
View File
@@ -1,84 +1,25 @@
concrete CatSqi of Cat = CommonX ** open ParamX, Prelude, ResSqi in { 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 A = Adj ;
linref A = \a -> case a.clit of {True=>"i"; False=>[]} ++ a.s ! Nom ! Masc ! Sg ;
lincat A2 = Adj ** {c2 : Compl} ; lincat A2 = Adj ** {c2 : Compl} ;
linref A2 = \a -> case a.clit of {True=>"i"; False=>[]} ++ a.s ! Nom ! Masc ! Sg ++ a.c2.s ;
lincat V, VA, VV, VS, VQ = Verb ; lincat V, VA, VV, VS, VQ = Verb ;
lincat V2 = Verb ** {c2 : Compl} ; lincat V2, V2S, V2Q = Verb ** {c2 : Compl} ;
lincat V2S, V2Q, V3, V2A, V2V = Verb ** {c2,c3 : Compl} ; lincat V3, V2A, V2V = Verb ** {c2,c3 : Compl} ;
lincat Prep = Compl ; lincat Prep = Compl ;
lincat ACard = {s : Str} ;
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 AP = {s: Species => Case => Gender => Number => Str} ;
lincat CN = Noun ; lincat CN = Noun ;
lincat Card = {s : Str} ;
lincat Cl = {s : ParamX.Tense => Anteriority => Polarity => Str} ;
lincat ClSlash = {s : ParamX.Tense => Anteriority => Polarity => Str; c2 : Compl} ;
lincat Comp = {s : Agr => Str} ;
lincat Conj = {s : Str} ;
lincat DAP = {s : Str; n : Number} ;
lincat Decimal = {s : Str; n : Number; hasDot : Bool} ;
lincat Det = {
s : Case => Gender => Str;
post : Species => Case => Gender => Str;
sp : Species;
n : Number
} ;
lincat Digits = {s : Str; n : Number; tail : DTail} ;
lincat GN = {s : Str} ;
lincat IComp = {s : Str} ;
lincat IDet = {s : Gender => Str; n : Number} ;
lincat IP = {s : Str; a : Agr} ;
lincat IQuant = {s : Gender => Str} ;
lincat Imp = {s : Polarity => Number => Str} ;
lincat LN = {s : Str} ;
lincat N = Noun ;
lincat N2 = {s : Species => Case => Number => Str; g : Gender;
c2 : Compl} ;
lincat N3 = {s : Species => Case => Number => Str; g : Gender;
c2 : Compl; c3 : Compl} ;
lincat NP = {s : Case => Str; a : Agr} ;
lincat Num = {s : Str; n : Number} ; lincat Num = {s : Str; n : Number} ;
lincat Numeral = {s : Str} ; lincat Quant = {s : Case => Gender => Number => Str; spec : Species} ;
lincat Ord = {s : Case => Gender => Number => Str} ; lincat Det = {s : Case => Gender => Str; spec : Species; n : Number} ;
lincat PN = {s : Str} ; lincat NP = {s: Case => Str; a : Agr} ;
lincat Predet = {s : Str} ; lincat Pron = {s: Case => Str; acc_clit, dat_clit : Str; a : Agr} ;
lincat Pron = {
s: Case => Str;
acc_clit, dat_clit : Str;
poss : Case => Gender => Number => Str;
a : Agr
} ;
lincat QCl = {s : ParamX.Tense => Anteriority => Polarity => Str} ;
lincat QS = {s : Str} ;
lincat Quant = {
s : Case => Gender => Number => Str;
sp : Species;
isPoss : Bool
} ;
lincat RCl = {s : Agr => ParamX.Tense => Anteriority => Polarity => Str} ;
lincat RP = {s : Case => GenNum => Str} ;
lincat RS = {s : Agr => Str} ;
lincat S = {s : Str} ;
lincat SN = {s : Str} ;
lincat SSlash = {s : Str; c2 : Compl} ;
lincat Subj = {s : Str} ;
lincat VP = {indicative : Tense => Number => Person => Gender => Case => Str;
subjunctive : Number => Person => Gender => Case => Str;
imperative : Number => Case => Str;
participle : Agr => 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;
vtype : VType} ;
lincat VPSlash = {indicative : Tense => Number => Person => Str;
subjunctive : 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;
vtype : VType;
c2 : Compl} ;
} }
-27
View File
@@ -1,27 +0,0 @@
concrete ConjunctionSqi of Conjunction = CatSqi ** open ResSqi, Prelude, ParamX in {
lincat
[S] = {first,last : Str} ;
[RS] = {first,last : Agr => Str} ;
[Adv] = {first,last : Str} ;
[AdV] = {first,last : Str} ;
[IAdv] = {first,last : Str} ;
[NP] = {first,last : Case => Str; a : Agr} ;
[AP] = {first,last : Species=>Case=>Gender=>Number=>Str} ;
[CN] = {first,last : Species=>Case=>Number=>Str; g:Gender} ;
[DAP] = {first,last : Str; n:Number} ;
lin
BaseS x y={first=x.s;last=y.s}; ConsS x xs={first=x.s++","++xs.first;last=xs.last}; ConjS c xs={s=xs.first++c.s++xs.last};
BaseAdv x y={first=x.s;last=y.s}; ConsAdv x xs={first=x.s++","++xs.first;last=xs.last}; ConjAdv c xs={s=xs.first++c.s++xs.last};
BaseAdV x y={first=x.s;last=y.s}; ConsAdV x xs={first=x.s++","++xs.first;last=xs.last}; ConjAdV c xs={s=xs.first++c.s++xs.last};
BaseIAdv x y={first=x.s;last=y.s}; ConsIAdv x xs={first=x.s++","++xs.first;last=xs.last}; ConjIAdv c xs={s=xs.first++c.s++xs.last};
BaseNP x y={first=x.s;last=y.s;a={gn=GPl;p=P3}};
ConsNP x xs={first=\\k=>x.s!k++","++xs.first!k;last=xs.last;a={gn=GPl;p=P3}};
ConjNP c xs={s=\\k=>xs.first!k++c.s++xs.last!k;a=xs.a};
BaseAP x y={first=x.s;last=y.s}; ConsAP x xs={first=\\sp,k,g,n=>x.s!sp!k!g!n++","++xs.first!sp!k!g!n;last=xs.last};
ConjAP c xs={s=\\sp,k,g,n=>xs.first!sp!k!g!n++c.s++xs.last!sp!k!g!n};
BaseRS x y={first=x.s;last=y.s}; ConsRS x xs={first=\\a=>x.s!a++","++xs.first!a;last=xs.last}; ConjRS c xs={s=\\a=>xs.first!a++c.s++xs.last!a};
BaseCN x y={first=x.s;last=y.s;g=x.g}; ConsCN x xs={first=\\sp,k,n=>x.s!sp!k!n++","++xs.first!sp!k!n;last=xs.last;g=xs.g};
ConjCN c xs={s=\\sp,k,n=>xs.first!sp!k!n++c.s++xs.last!sp!k!n;g=xs.g};
BaseDAP x y={first=x.s;last=y.s;n=Pl}; ConsDAP x xs={first=x.s++","++xs.first;last=xs.last;n=Pl};
ConjDet c xs={s=\\_,_=>xs.first++c.s++xs.last;post=\\_,_,_=>[];n=xs.n;sp=Def};
}
-64
View File
@@ -1,64 +0,0 @@
concrete ConstructionSqi of Construction = CatSqi **
open Prelude, ParamX, ResSqi, ParadigmsSqi, GrammarSqi in {
lincat
Timeunit = N ;
Hour = {s:Str} ;
Weekday = N ;
Month = N ;
Monthday = {s:Str} ;
Year = {s:Str} ;
Language = N ;
oper
adjVP : A -> VP = \a -> UseComp (CompAP (PositA a)) ;
appendVP : VP -> Str -> VP = \v,s -> v ** {
indicative=\\t,n,p,g,c=>v.indicative!t!n!p!g!c++s;
subjunctive=\\n,p,g,c=>v.subjunctive!n!p!g!c++s;
imperative=\\n,c=>v.imperative!n!c++s;
participle=\\a,c=>v.participle!a!c++s
} ;
hour : Str -> Hour = \s -> lin Hour {s=s} ;
lin
hungry_VP=adjVP (mkA "uritur"); thirsty_VP=adjVP (mkA "etur");
tired_VP=adjVP (mkA "lodhur"); scared_VP=adjVP (mkA "frikësuar");
ill_VP=adjVP (mkA "sëmurë"); ready_VP=adjVP (mkA "gatshëm");
has_age_VP c=appendVP (UseV (irregV "kam" "ke" "ka" "kemi" "keni" "kanë" "ki" "kini" "pasur")) (c.s++"vjeç");
n_units_AP c unit a={s=\\sp,k,g,n=>c.s++unit.s!Indef!Nom!Pl++(PositA a).s!sp!k!g!n};
n_units_of_NP c unit np={s=\\_=>c.s++unit.s!Indef!Nom!Pl++"nga"++np.s!Ablat;a={gn=GPl;p=P3}};
n_unit_CN c unit cn={s=\\sp,k,n=>c.s++unit.s!Indef!Nom!Sg++cn.s!sp!k!n;g=cn.g};
bottle_of_CN np={s=\\sp,k,n=>(mkN "shishe").s!sp!k!n++"me"++np.s!Acc;g=Fem};
cup_of_CN np={s=\\sp,k,n=>(mkN "filxhan").s!sp!k!n++"me"++np.s!Acc;g=Masc};
glass_of_CN np={s=\\sp,k,n=>(mkN "gotë").s!sp!k!n++"me"++np.s!Acc;g=Fem};
timeunitAdv c u={s="për"++c.s++u.s!Indef!Acc!Pl};
timeunitRange a b u={s="nga"++a.s++"deri në"++b.s++u.s!Indef!Acc!Pl};
oneHour=hour "1"; twoHour=hour "2"; threeHour=hour "3"; fourHour=hour "4";
fiveHour=hour "5"; sixHour=hour "6"; sevenHour=hour "7"; eightHour=hour "8";
nineHour=hour "9"; tenHour=hour "10"; elevenHour=hour "11"; twelveHour=hour "12";
thirteenHour=hour "13"; fourteenHour=hour "14"; fifteenHour=hour "15"; sixteenHour=hour "16";
seventeenHour=hour "17"; eighteenHour=hour "18"; nineteenHour=hour "19"; twentyHour=hour "20";
twentyOneHour=hour "21"; twentyTwoHour=hour "22"; twentyThreeHour=hour "23"; twentyFourHour=hour "24";
timeHour h={s="në orën"++h.s}; timeHourMinute h m={s="në orën"++h.s++SOFT_BIND++":"++SOFT_BIND++m.s};
weekdayPunctualAdv w={s="të"++w.s!Def!Acc!Sg};
weekdayHabitualAdv w={s="të"++w.s!Def!Acc!Pl};
weekdayLastAdv w={s="të"++w.s!Def!Acc!Sg++"e kaluar"};
weekdayNextAdv w={s="të"++w.s!Def!Acc!Sg++"e ardhshme"};
monthAdv m={s="në"++m.s!Indef!Acc!Sg}; yearAdv y={s="në"++y.s};
dayMonthAdv d m={s="më"++d.s++m.s!Indef!Acc!Sg};
monthYearAdv m y={s="në"++m.s!Indef!Acc!Sg++y.s};
dayMonthYearAdv d m y={s="më"++d.s++m.s!Indef!Acc!Sg++y.s};
intYear i={s=i.s}; intMonthday i={s=i.s};
weekdayN w=w; monthN m=m;
weekdayPN w=mkPN (w.s!Indef!Nom!Sg); monthPN m=mkPN (m.s!Indef!Nom!Sg);
second_Timeunit=mkN "sekondë"; minute_Timeunit=mkN "minutë"; hour_Timeunit=mkN "orë";
day_Timeunit=mkN "ditë"; week_Timeunit=mkN "javë"; month_Timeunit=mkN "muaj"; year_Timeunit=mkN "vit";
monday_Weekday=mkN "e hënë"; tuesday_Weekday=mkN "e martë"; wednesday_Weekday=mkN "e mërkurë";
thursday_Weekday=mkN "e enjte"; friday_Weekday=mkN "e premte"; saturday_Weekday=mkN "e shtunë"; sunday_Weekday=mkN "e diel";
january_Month=mkN "janar"; february_Month=mkN "shkurt"; march_Month=mkN "mars"; april_Month=mkN "prill";
may_Month=mkN "maj"; june_Month=mkN "qershor"; july_Month=mkN "korrik"; august_Month=mkN "gusht";
september_Month=mkN "shtator"; october_Month=mkN "tetor"; november_Month=mkN "nëntor"; december_Month=mkN "dhjetor";
}
+26 -26
View File
@@ -51,32 +51,32 @@ lin InflectionV = \x -> {
t="fl" ; t="fl" ;
s1=heading1 "Folje" ; s1=heading1 "Folje" ;
s2=frameTable ( s2=frameTable (
tr (intagAttr "th" "rowspan=\"24\"" "Indicative" ++ intagAttr "th" "rowspan=\"6\"" "Pres" ++ intagAttr "th" "rowspan=\"3\"" "Sg" ++ th "P1" ++ td (x.indicative ! Pres ! Sg ! P1)) ++ tr (intagAttr "th" "rowspan=\"24\"" "Indicative" ++ intagAttr "th" "rowspan=\"6\"" "Pres" ++ intagAttr "th" "rowspan=\"3\"" "Sg" ++ th "P1" ++ td (x.Indicative ! Pres ! Sg ! P1)) ++
tr (th "P2" ++ td (x.indicative ! Pres ! Sg ! P2)) ++ tr (th "P2" ++ td (x.Indicative ! Pres ! Sg ! P2)) ++
tr (th "P3" ++ td (x.indicative ! Pres ! Sg ! P3)) ++ tr (th "P3" ++ td (x.Indicative ! Pres ! Sg ! P3)) ++
tr (intagAttr "th" "rowspan=\"3\"" "Pl" ++ th "P1" ++ td (x.indicative ! Pres ! Pl ! P1)) ++ tr (intagAttr "th" "rowspan=\"3\"" "Pl" ++ th "P1" ++ td (x.Indicative ! Pres ! Pl ! P1)) ++
tr (th "P2" ++ td (x.indicative ! Pres ! Pl ! P2)) ++ tr (th "P2" ++ td (x.Indicative ! Pres ! Pl ! P2)) ++
tr (th "P3" ++ td (x.indicative ! Pres ! Pl ! P3)) ++ tr (th "P3" ++ td (x.Indicative ! Pres ! Pl ! P3)) ++
tr (intagAttr "th" "rowspan=\"6\"" "Past" ++ intagAttr "th" "rowspan=\"3\"" "Sg" ++ th "P1" ++ td (x.indicative ! Past ! Sg ! P1)) ++ tr (intagAttr "th" "rowspan=\"6\"" "Past" ++ intagAttr "th" "rowspan=\"3\"" "Sg" ++ th "P1" ++ td (x.Indicative ! Past ! Sg ! P1)) ++
tr (th "P2" ++ td (x.indicative ! Past ! Sg ! P2)) ++ tr (th "P2" ++ td (x.Indicative ! Past ! Sg ! P2)) ++
tr (th "P3" ++ td (x.indicative ! Past ! Sg ! P3)) ++ tr (th "P3" ++ td (x.Indicative ! Past ! Sg ! P3)) ++
tr (intagAttr "th" "rowspan=\"3\"" "Pl" ++ th "P1" ++ td (x.indicative ! Past ! Pl ! P1)) ++ tr (intagAttr "th" "rowspan=\"3\"" "Pl" ++ th "P1" ++ td (x.Indicative ! Past ! Pl ! P1)) ++
tr (th "P2" ++ td (x.indicative ! Past ! Pl ! P2)) ++ tr (th "P2" ++ td (x.Indicative ! Past ! Pl ! P2)) ++
tr (th "P3" ++ td (x.indicative ! Past ! Pl ! P3)) ++ tr (th "P3" ++ td (x.Indicative ! Past ! Pl ! P3)) ++
tr (intagAttr "th" "rowspan=\"6\"" "Aorist" ++ intagAttr "th" "rowspan=\"3\"" "Sg" ++ th "P1" ++ td (x.indicative ! Aorist ! Sg ! P1)) ++ tr (intagAttr "th" "rowspan=\"6\"" "Aorist" ++ intagAttr "th" "rowspan=\"3\"" "Sg" ++ th "P1" ++ td (x.Indicative ! Aorist ! Sg ! P1)) ++
tr (th "P2" ++ td (x.indicative ! Aorist ! Sg ! P2)) ++ tr (th "P2" ++ td (x.Indicative ! Aorist ! Sg ! P2)) ++
tr (th "P3" ++ td (x.indicative ! Aorist ! Sg ! P3)) ++ tr (th "P3" ++ td (x.Indicative ! Aorist ! Sg ! P3)) ++
tr (intagAttr "th" "rowspan=\"3\"" "Pl" ++ th "P1" ++ td (x.indicative ! Aorist ! Pl ! P1)) ++ tr (intagAttr "th" "rowspan=\"3\"" "Pl" ++ th "P1" ++ td (x.Indicative ! Aorist ! Pl ! P1)) ++
tr (th "P2" ++ td (x.indicative ! Aorist ! Pl ! P2)) ++ tr (th "P2" ++ td (x.Indicative ! Aorist ! Pl ! P2)) ++
tr (th "P3" ++ td (x.indicative ! Aorist ! Pl ! P3)) ++ tr (th "P3" ++ td (x.Indicative ! Aorist ! Pl ! P3)) ++
tr (intagAttr "th" "rowspan=\"6\"" "Imperfect" ++ intagAttr "th" "rowspan=\"3\"" "Sg" ++ th "P1" ++ td (x.indicative ! Imperfect ! Sg ! P1)) ++ tr (intagAttr "th" "rowspan=\"6\"" "Imperfect" ++ intagAttr "th" "rowspan=\"3\"" "Sg" ++ th "P1" ++ td (x.Indicative ! Imperfect ! Sg ! P1)) ++
tr (th "P2" ++ td (x.indicative ! Imperfect ! Sg ! P2)) ++ tr (th "P2" ++ td (x.Indicative ! Imperfect ! Sg ! P2)) ++
tr (th "P3" ++ td (x.indicative ! Imperfect ! Sg ! P3)) ++ tr (th "P3" ++ td (x.Indicative ! Imperfect ! Sg ! P3)) ++
tr (intagAttr "th" "rowspan=\"3\"" "Pl" ++ th "P1" ++ td (x.indicative ! Imperfect ! Pl ! P1)) ++ tr (intagAttr "th" "rowspan=\"3\"" "Pl" ++ th "P1" ++ td (x.Indicative ! Imperfect ! Pl ! P1)) ++
tr (th "P2" ++ td (x.indicative ! Imperfect ! Pl ! P2)) ++ tr (th "P2" ++ td (x.Indicative ! Imperfect ! Pl ! P2)) ++
tr (th "P3" ++ td (x.indicative ! Imperfect ! Pl ! P3)) ++ tr (th "P3" ++ td (x.Indicative ! Imperfect ! Pl ! P3)) ++
tr (intagAttr "th" "rowspan=\"2\"" "Imperative" ++ th "Sg" ++ td (x.imperative ! Sg)) ++ tr (intagAttr "th" "rowspan=\"2\"" "Imperative" ++ th "Sg" ++ td (x.Imperative ! Sg)) ++
tr (th "Pl" ++ td (x.imperative ! Pl)) ++ tr (th "Pl" ++ td (x.Imperative ! Pl)) ++
tr (th "participle" ++ td (x.participle)) ++ tr (th "participle" ++ td (x.participle)) ++
tr (intagAttr "th" "rowspan=\"6\"" "pres_optative" ++ intagAttr "th" "rowspan=\"3\"" "Sg" ++ th "P1" ++ td (x.pres_optative ! Sg ! P1)) ++ tr (intagAttr "th" "rowspan=\"6\"" "pres_optative" ++ intagAttr "th" "rowspan=\"3\"" "Sg" ++ th "P1" ++ td (x.pres_optative ! Sg ! P1)) ++
tr (th "P2" ++ td (x.pres_optative ! Sg ! P2)) ++ tr (th "P2" ++ td (x.pres_optative ! Sg ! P2)) ++
-135
View File
@@ -1,135 +0,0 @@
concrete ExtendSqi of Extend = CatSqi **
open Prelude, ParamX, ResSqi, GrammarSqi, (I=IrregSqi) in {
lincat
RNP = {s : Agr => Case => Str; isPron : Bool} ;
RNPList = {first,last : Agr => Case => Str} ;
VPS = {s : Agr => Str} ;
VPI = {s : Agr => Str} ;
[VPS] = {first,last : Agr => Str} ;
[VPI] = {first,last : Agr => Str} ;
[Comp] = {first,last : Agr => Str} ;
[Imp] = {first,last : Polarity => Number => Str} ;
oper
baseVP : Verb -> VP = \v -> lin VP {
indicative = \\t,n,p,_,_ => v.indicative ! t ! n ! p ;
subjunctive = \\n,p,_,_ => subjunctiveForm v.vtype
(v.indicative ! ResSqi.Pres ! Sg ! P1)
(v.indicative ! ResSqi.Pres ! n ! p) n p ;
imperative = \\n,_ => v.imperative ! n ;
participle = \\_,_ => v.participle ;
pres_optative = \\n,p,_ => v.pres_optative ! n ! p ;
perf_optative = \\n,p,_ => v.perf_optative ! n ! p ;
pres_admirative = \\n,p,_ => v.pres_admirative ! n ! p ;
imperf_admirative = \\n,p,_ => v.imperf_admirative ! n ! p ;
vtype = v.vtype
} ;
extAddVP : VP -> (Agr => Str) -> VP = \v,x -> v ** {
indicative = \\t,n,p,g,c => v.indicative ! t ! n ! p ! g ! c ++
x ! {gn=genNum g n; p=p} ;
subjunctive = \\n,p,g,c => v.subjunctive ! n ! p ! g ! c ++
x ! {gn=genNum g n; p=p} ;
imperative = \\n,c => v.imperative ! n ! c ++
x ! {gn=case n of {Sg=>GSg Masc; Pl=>GPl}; p=P2} ;
participle = \\a,c => v.participle ! a ! c ++ x ! a
} ;
baseSlashVP : VPSlash -> VP = \v -> lin VP {
indicative = \\t,n,p,_,_ => v.indicative ! t ! n ! p ;
subjunctive = \\n,p,_,_ => v.subjunctive ! n ! p ;
imperative = \\n,_ => v.imperative ! n ;
participle = \\_,_ => v.participle ;
pres_optative = \\n,p,_ => v.pres_optative ! n ! p ;
perf_optative = \\n,p,_ => v.perf_optative ! n ! p ;
pres_admirative = \\n,p,_ => v.pres_admirative ! n ! p ;
imperf_admirative = \\n,p,_ => v.imperf_admirative ! n ! p ;
vtype = v.vtype
} ;
lin
GenModNP n np cn = {
s = \\c => cn.s ! Def ! c ! n.n ++
link_clitic ! Def ! c ! cn.g ! n.n ++ np.s ! Ablat ;
a = agrgP3 cn.g n.n
} ;
EmptyRelSlash cl = {s=\\_,t,a,p=>"që"++cl.s!t!a!p++cl.c2.s} ;
ReflPron = {
s = \\a,c => case <agrNumber a,c> of {
<Sg,Acc> => "veten" ; <Pl,Acc> => "veten" ; _ => "vetes"
} ;
isPron = True
} ;
ReflPoss n cn = {s=\\_,c=>cn.s!Def!c!n.n; isPron=False} ;
PredetRNP p r = r ** {s=\\a,c=>p.s++r.s!a!c} ;
AdvRNP np p r = {s=\\a,c=>np.s!c++p.s++r.s!a!p.c; isPron=False} ;
AdvRVP vp p r = extAddVP vp (\\a=>p.s++r.s!a!p.c) ;
AdvRAP ap p r = {
s=\\sp,c,g,n=>ap.s!sp!c!g!n++p.s++r.s!(agrgP3 g n)!p.c
} ;
PossPronRNP p n cn r = {
s=\\c=>cn.s!Def!c!n.n++link_clitic!Def!c!cn.g!n.n++r.s!p.a!Ablat;
a=agrgP3 cn.g n.n
} ;
CompoundN a b = {
s=\\sp,c,n=>(UseN b).s!sp!c!n++(UseN a).s!Indef!Ablat!Sg;
g=b.g
} ;
CompoundAP n a = {
s=\\sp,c,g,num=>(UseN n).s!Indef!Nom!Sg++(PositA a).s!sp!c!g!num
} ;
GerundCN vp = {s=\\_,_,_=>vp.participle!{gn=GSg Masc;p=P3}!Nom; g=Masc} ;
GerundNP vp = {s=\\_=>vp.participle!{gn=GSg Masc;p=P3}!Nom; a={gn=GSg Masc;p=P3}} ;
GerundAdv vp = {s="duke"++vp.participle!{gn=GSg Masc;p=P3}!Nom} ;
WithoutVP vp = {s="pa"++vp.participle!{gn=GSg Masc;p=P3}!Nom} ;
ByVP vp = {s="duke"++vp.participle!{gn=GSg Masc;p=P3}!Nom} ;
ApposNP a b = a ** {s=\\c=>a.s!c++SOFT_BIND++","++b.s!c} ;
PositAdVAdj a = {s=a.s!Nom!Masc!Sg} ;
UttVPShort vp = {s=vp.imperative!Sg!Nom} ;
ComplSlashPartLast sl np = ComplSlash sl np ;
PresPartAP vp = {s=\\_,_,_,_=>"duke"++vp.participle!{gn=GSg Masc;p=P3}!Nom} ;
PastPartAP sl = {s=\\_,_,_,_=>sl.participle} ;
PastPartAgentAP sl np = {
s=\\_,_,_,_=>sl.participle++"nga"++np.s!Nom
} ;
PassVPSlash sl = extAddVP (baseVP I.jam_V) (\\_=>sl.participle) ;
PassAgentVPSlash sl np =
extAddVP (baseVP I.jam_V) (\\_=>sl.participle++"nga"++np.s!Nom) ;
ProgrVPSlash sl = sl ;
ComplBareVS v s = extAddVP (baseVP v) (\\_=>s.s) ;
MkVPS t p vp = {
s=\\a=>(PredVP {s=\\_=>[];a=a} vp).s!t.t!t.a!p.p
} ;
BaseVPS x y = {first=x.s; last=y.s} ;
ConsVPS x xs = {first=\\a=>x.s!a++","++xs.first!a; last=xs.last} ;
ConjVPS c xs = {s=\\a=>xs.first!a++c.s++xs.last!a} ;
PredVPS np v = {s=v.s!np.a} ;
MkVPI vp = {s=\\a=>"të"++vp.subjunctive ! agrNumber a ! a.p ! agrGender a ! Nom} ;
BaseVPI x y = {first=x.s; last=y.s} ;
ConsVPI x xs = {first=\\a=>x.s!a++","++xs.first!a; last=xs.last} ;
ConjVPI c xs = {s=\\a=>xs.first!a++c.s++xs.last!a} ;
ComplVPIVV v x = extAddVP (baseVP v) (\\a=>x.s!a) ;
BaseComp x y = {first=x.s; last=y.s} ;
ConsComp x xs = {first=\\a=>x.s!a++","++xs.first!a; last=xs.last} ;
ConjComp c xs = {s=\\a=>xs.first!a++c.s++xs.last!a} ;
BaseImp x y = {first=x.s; last=y.s} ;
ConsImp x xs = {
first=\\p,n=>x.s!p!n++","++xs.first!p!n;
last=xs.last
} ;
ConjImp c xs = {s=\\p,n=>xs.first!p!n++c.s++xs.last!p!n} ;
UseDAP d = {s=\\_=>d.s; a=agrgP3 Masc d.n} ;
UseDAPMasc = UseDAP ;
UseDAPFem d = {s=\\_=>d.s; a=agrgP3 Fem d.n} ;
TPastSimple = {s=[]; t=ParamX.Past} ;
}
-8
View File
@@ -1,16 +1,8 @@
concrete GrammarSqi of Grammar = concrete GrammarSqi of Grammar =
NounSqi, NounSqi,
VerbSqi,
AdjectiveSqi, AdjectiveSqi,
AdverbSqi,
SentenceSqi,
QuestionSqi,
RelativeSqi,
ConjunctionSqi,
NumeralSqi, NumeralSqi,
PhraseSqi, PhraseSqi,
IdiomSqi,
NamesSqi,
StructuralSqi StructuralSqi
** { ** {
-23
View File
@@ -1,23 +0,0 @@
concrete IdiomSqi of Idiom = CatSqi ** open Prelude, ParamX, ResSqi in {
lin
ImpersCl vp = {s=\\t,a,p=>negation p++futureParticle t++vp.indicative!sqiTense t!Sg!P3!Masc!Nom} ;
GenericCl vp = {s=\\t,a,p=>"njeriu"++negation p++futureParticle t++vp.indicative!sqiTense t!Sg!P3!Masc!Nom} ;
CleftNP np rs = {s=\\_,_,_=>np.s!Nom++rs.s!np.a} ;
CleftAdv adv s = {s=\\_,_,_=>adv.s++s.s} ;
ExistNP np = {s=\\t,_,p=>negation p++case t of {ParamX.Past=>"pati";_=>"ka"}++np.s!Acc} ;
ExistIP ip = {s=\\_,_,p=>negation p++"ka"++ip.s} ;
ExistNPAdv np adv = {s=\\t,a,p=>(ExistNP np).s!t!a!p++adv.s} ;
ExistIPAdv ip adv = {s=\\t,a,p=>(ExistIP ip).s!t!a!p++adv.s} ;
ProgrVP vp = vp ;
ImpPl1 vp = {s="le të"++vp.subjunctive!Pl!P1!Masc!Nom} ;
ImpP3 np vp = {s="le"++np.s!Nom++"të"++vp.subjunctive!agrNumber np.a!np.a.p!agrGender np.a!Nom} ;
SelfAdvVP vp = vp ** {
indicative=\\t,n,p,g,c=>vp.indicative!t!n!p!g!c++"vetë";
subjunctive=\\n,p,g,c=>vp.subjunctive!n!p!g!c++"vetë"
} ;
SelfAdVVP vp = vp ** {
indicative=\\t,n,p,g,c=>"vetë"++vp.indicative!t!n!p!g!c;
subjunctive=\\n,p,g,c=>"vetë"++vp.subjunctive!n!p!g!c
} ;
SelfNP np = np ** {s=\\c=>np.s!c++"vetë"} ;
}
-24
View File
@@ -1,24 +0,0 @@
concrete IrregSqi of IrregSqiAbs = CatSqi ** open ParadigmsSqi in {
lin
bej_V = irregV "bëj" "bën" "bën" "bëjmë" "bëni" "bëjnë" "bëj" "bëni" "bërë" ;
bie_V = irregV "bie" "bie" "bie" "biem" "bini" "bien" "bjer" "bini" "rënë" ;
dal_V = irregV "dal" "del" "del" "dalim" "dilni" "dalin" "dil" "dilni" "dalë" ;
dua_V = irregV "dua" "do" "do" "duam" "doni" "duan" "duaj" "doni" "dashur" ;
eci_V = irregV "eci" "ecën" "ecën" "ecim" "ecni" "ecin" "ec" "ecni" "ecur" ;
ha_V = irregV "ha" "ha" "ha" "hamë" "hani" "hanë" "ha" "hani" "ngrënë" ;
hyj_V = irregV "hyj" "hyn" "hyn" "hyjmë" "hyni" "hyjnë" "hyr" "hyni" "hyrë" ;
iki_V = irregV "iki" "ikën" "ikën" "ikim" "ikni" "ikin" "ik" "ikni" "ikur" ;
jam_V = irregV "jam" "je" "është" "jemi" "jeni" "janë" "ji" "jini" "qenë" ;
jap_V = irregV "jap" "jep" "jep" "japim" "jepni" "japin" "jep" "jepni" "dhënë" ;
kam_V = irregV "kam" "ke" "ka" "kemi" "keni" "kanë" "ki" "kini" "pasur" ;
ngre_V = irregV "ngre" "ngre" "ngre" "ngremë" "ngrini" "ngrenë" "ngre" "ngrini" "ngritur" ;
njoh_V = irregV "njoh" "njeh" "njeh" "njohim" "njihni" "njohin" "njih" "njihni" "njohur" ;
pi_V = irregV "pi" "pi" "pi" "pimë" "pini" "pinë" "pi" "pini" "pirë" ;
shoh_V = irregV "shoh" "sheh" "sheh" "shohim" "shihni" "shohin" "shih" "shihni" "parë" ;
them_V = irregV "them" "thua" "thotë" "themi" "thoni" "thonë" "thuaj" "thoni" "thënë" ;
urrej_V = irregV "urrej" "urren" "urren" "urrejmë" "urreni" "urrejnë" "urre" "urreni" "urryer" ;
ve_V = irregV "vë" "vë" "vë" "vëmë" "vini" "vënë" "vër" "vini" "vënë" ;
vij_V = irregV "vij" "vjen" "vjen" "vijmë" "vini" "vijnë" "eja" "ejani" "ardhur" ;
}
-24
View File
@@ -1,24 +0,0 @@
abstract IrregSqiAbs = Cat ** {
fun
bej_V : V ;
bie_V : V ;
dal_V : V ;
dua_V : V ;
eci_V : V ;
ha_V : V ;
hyj_V : V ;
iki_V : V ;
jam_V : V ;
jap_V : V ;
kam_V : V ;
ngre_V : V ;
njoh_V : V ;
pi_V : V ;
shoh_V : V ;
them_V : V ;
urrej_V : V ;
ve_V : V ;
vij_V : V ;
}
-1
View File
@@ -2,7 +2,6 @@
concrete LangSqi of Lang = concrete LangSqi of Lang =
GrammarSqi, GrammarSqi,
LexiconSqi LexiconSqi
,ConstructionSqi
,DocumentationSqi --# notpresent ,DocumentationSqi --# notpresent
** { ** {
+8393 -8417
View File
File diff suppressed because it is too large Load Diff
-12
View File
@@ -1,12 +0,0 @@
concrete NamesSqi of Names = CatSqi ** open ResSqi in {
lin
GivenName n = {s=\\_=>n.s; a={gn=GSg Masc;p=P3}} ;
MaleSurname n = {s=\\_=>n.s; a={gn=GSg Masc;p=P3}} ;
FemaleSurname n = {s=\\_=>n.s; a={gn=GSg Fem;p=P3}} ;
PlSurname n = {s=\\_=>n.s; a={gn=GPl;p=P3}} ;
FullName n s = {s=\\_=>n.s++s.s; a={gn=GSg Masc;p=P3}} ;
UseLN n = {s=\\_=>n.s; a={gn=GSg Masc;p=P3}} ;
PlainLN n = {s=\\_=>n.s; a={gn=GSg Masc;p=P3}} ;
InLN n = {s="në"++n.s} ;
AdjLN a n = {s=n.s++a.s!Def!Nom!Masc!Sg} ;
}
+11 -83
View File
@@ -1,111 +1,39 @@
concrete NounSqi of Noun = CatSqi ** open MorphoSqi, ResSqi, Prelude in { concrete NounSqi of Noun = CatSqi ** open MorphoSqi, ResSqi in {
flags optimize=all_subs ;
lin lin
DetCN det cn = { DetCN det cn = {
s = \\c => det.s ! c ! cn.g ++ cn.s ! det.sp ! c ! det.n ++ s = \\c => det.s ! c ! cn.g ++ cn.s ! det.spec ! c ! det.n ;
det.post ! det.sp ! c ! cn.g ;
a = agrgP3 cn.g det.n a = agrgP3 cn.g det.n
} ; } ;
UsePron p = {s=p.s; a=p.a} ; UsePron p = p ;
UsePN p = {s=\\_=>p.s; a={gn=GSg Masc;p=P3}} ;
PredetNP p np = np ** {s=\\c=>p.s ++ np.s ! c} ;
AdvNP np adv = np ** {s=\\c=>np.s ! c ++ adv.s} ;
ExtAdvNP np adv = np ** {s=\\c=>np.s ! c ++ SOFT_BIND ++ "," ++ adv.s} ;
MassNP cn = {s=\\c=>cn.s ! Indef ! c ! Sg; a=agrgP3 cn.g Sg} ;
DetQuant quant num = { DetQuant quant num = {
s = \\c,g => case quant.isPoss of { s = \\c,g => quant.s ! c ! g ! num.n ++ num.s ;
True => num.s;
False => quant.s ! c ! g ! num.n ++ num.s
} ;
post = \\_,c,g => case quant.isPoss of {
True => quant.s ! c ! g ! num.n;
False => []
} ;
n = num.n ; n = num.n ;
sp = quant.sp spec = quant.spec
} ;
DetQuantOrd quant num ord = {
s = \\c,g => case quant.isPoss of {
True => num.s;
False => quant.s ! c ! g ! num.n ++ num.s
} ;
post = \\_,c,g => case quant.isPoss of {
True => quant.s ! c ! g ! num.n ++ ord.s ! c ! g ! num.n;
False => ord.s ! c ! g ! num.n
} ;
n=num.n; sp=quant.sp
} ; } ;
NumSg = {s = []; n = Sg} ; NumSg = {s = []; n = Sg} ;
NumPl = {s = []; n = Pl} ; NumPl = {s = []; n = Pl} ;
NumCard c = {s=c.s; n=Pl} ;
NumNumeral n = n ;
NumDecimal n = {s=n.s} ;
AdNum a n = {s=a.s ++ n.s} ;
OrdNumeral n = {s=\\_,_,_=>n.s} ;
OrdDigits n = {s=\\_,_,_=>n.s} ;
OrdSuperl a = {s=\\c,g,n=>"më" ++
case a.clit of {
True => case <c,g,n> of {
<Nom,Masc,Sg> => "i" ++ a.s ! c ! g ! n;
<Nom,Fem,Sg> => "e" ++ a.s ! c ! g ! n;
_ => "të" ++ a.s ! c ! g ! n
};
False => a.s ! c ! g ! n
}} ;
OrdNumeralSuperl n a = {s=\\c,g,num=>n.s ++ a.s ! c ! g ! num} ;
DefArt = { DefArt = {
s = \\c,g,n => [] ; s = \\c,g,n => [] ;
sp = Def; spec = Def
isPoss = False
} ; } ;
IndefArt = { IndefArt = {
s = \\c,g => table Number ["një"; []] ; s = \\c,g => table Number ["një"; []] ;
sp = Indef; spec = Indef
isPoss = False
} ; } ;
UseN n = n ; UseN n = n ;
UseN2 n = n ;
ComplN2 n np = {
s=\\sp,c,num=>n.s ! sp ! c ! num ++ n.c2.s ++ np.s ! n.c2.c;
g=n.g
} ;
ComplN3 n np = n ** {s=\\sp,c,num=>n.s ! sp ! c ! num ++ n.c2.s ++ np.s ! n.c2.c; c2=n.c3} ;
Use2N3 n = n ** {c2=n.c2} ;
Use3N3 n = n ** {c2=n.c3} ;
RelCN cn rs = cn ** {s=\\sp,c,n=>cn.s ! sp ! c ! n ++ rs.s ! agrgP3 cn.g n} ;
AdvCN cn adv = cn ** {s=\\sp,c,n=>cn.s ! sp ! c ! n ++ adv.s} ;
SentCN cn sc = cn ** {s=\\sp,c,n=>cn.s ! sp ! c ! n ++ sc.s} ;
ApposCN cn np = cn ** {s=\\sp,c,n=>cn.s ! sp ! c ! n ++ np.s ! c} ;
PossNP cn np = cn ** {
s=\\sp,c,n=>cn.s ! sp ! c ! n ++
link_clitic ! sp ! c ! cn.g ! n ++ np.s ! Ablat
} ;
PartNP cn np = cn ** {s=\\sp,c,n=>cn.s ! sp ! c ! n ++ "me" ++ np.s ! Acc} ;
CountNP det np = {s=\\c=>det.s ! c ! Masc ++ "nga" ++ np.s ! Ablat; a=agrgP3 Masc det.n} ;
PossPron p = {
s=p.poss;
sp=Def;
isPoss=True
} ;
DetDAP det = {
s=det.s ! Nom ! Masc ++ det.post ! det.sp ! Nom ! Masc;
n=det.n
} ;
AdjDAP dap ap = {s=dap.s ++ ap.s ! Indef ! Nom ! Masc ! dap.n; n=dap.n} ;
QuantityNP dec mu = {s=\\_=>case mu.isPre of {True=>mu.s++dec.s; False=>dec.s++mu.s}; a=agrgP3 Masc Pl} ;
AdjCN ap cn = { AdjCN ap cn = {
s = \\sp,c,n => cn.s ! sp ! c ! n ++ ap.s ! sp ! c ! cn.g ! n ; s = \\spec,c,n => cn.s ! spec ! c ! n ++ ap.s ! spec ! c ! cn.g ! n ;
g = cn.g g = cn.g
} ; } ;
-15
View File
@@ -12,8 +12,6 @@ lincat Sub10 = LinDigit ;
lincat Sub100 = LinSub100 ; lincat Sub100 = LinSub100 ;
lincat Sub1000 = LinSub100 ; lincat Sub1000 = LinSub100 ;
lincat Sub1000000 = { s : Str } ; lincat Sub1000000 = { s : Str } ;
lincat Sub1000000000 = {s : Str} ;
lincat Sub1000000000000 = {s : Str} ;
oper mkNum : Str -> LinDigit = \tri -> oper mkNum : Str -> LinDigit = \tri ->
{ s = table {unit => tri ; teen => tri + "mbë" + "dhjetë" ; ten => tri + "dhjetë" }}; { s = table {unit => tri ; teen => tri + "mbë" + "dhjetë" ; ten => tri + "dhjetë" }};
@@ -41,23 +39,10 @@ lin pot1 d = mkR (d.s ! ten) ;
lin pot1plus d e = mkR ((d.s ! ten) ++ "e" ++ (e.s ! unit)) ; lin pot1plus d e = mkR ((d.s ! ten) ++ "e" ++ (e.s ! unit)) ;
lin pot1as2 n = n ; lin pot1as2 n = n ;
lin pot2 d = mkR (bind (d.s ! unit) "qind") ; lin pot2 d = mkR (bind (d.s ! unit) "qind") ;
lin pot21 = mkR "njëqind" ;
lin pot2plus d e = mkR ((bind (d.s ! unit) "qind") ++ "e" ++ e.s) ; lin pot2plus d e = mkR ((bind (d.s ! unit) "qind") ++ "e" ++ e.s) ;
lin pot2as3 n = {s = n.s }; lin pot2as3 n = {s = n.s };
lin pot3 n = {s = n.s ++ "mijë" } ; lin pot3 n = {s = n.s ++ "mijë" } ;
lin pot3plus n m = {s = n.s ++ "mijë" ++ m.s} ; lin pot3plus n m = {s = n.s ++ "mijë" ++ m.s} ;
lin pot31 = {s="një mijë"} ;
lin pot3as4 n=n ;
lin pot3decimal n={s=n.s++"mijë"} ;
lin pot41={s="një milion"} ;
lin pot4 n={s=n.s++"milionë"} ;
lin pot4plus n m={s=n.s++"milionë"++m.s} ;
lin pot4decimal n={s=n.s++"milionë"} ;
lin pot4as5 n=n ;
lin pot51={s="një miliard"} ;
lin pot5 n={s=n.s++"miliardë"} ;
lin pot5plus n m={s=n.s++"miliardë"++m.s} ;
lin pot5decimal n={s=n.s++"miliardë"} ;
lincat Dig = {s : Str; n : Number} ; lincat Dig = {s : Str; n : Number} ;
+11 -85
View File
@@ -4,11 +4,6 @@ oper
singular : Number = Sg ; singular : Number = Sg ;
plural : Number = Pl ; plural : Number = Pl ;
nominative : Case = Nom ;
accusative : Case = Acc ;
dative : Case = Dat ;
ablative : Case = Ablat ;
oper oper
regN : Str -> N -- s;Indef;Nom;Sg regN : Str -> N -- s;Indef;Nom;Sg
= \form -> case form of { = \form -> case form of {
@@ -1204,39 +1199,6 @@ oper
_ => regV form1 _ => regV form1
} ; } ;
irregV : (p1sg,p2sg,p3sg,p1pl,p2pl,p3pl,impSg,impPl,part : Str) -> V =
\p1sg,p2sg,p3sg,p1pl,p2pl,p3pl,impSg,impPl,part -> lin V {
indicative = table {
Pres => table {
Sg => table {P1 => p1sg ; P2 => p2sg ; P3 => p3sg} ;
Pl => table {P1 => p1pl ; P2 => p2pl ; P3 => p3pl}
} ;
_ => table {
Sg => table {P1 => p1sg ; P2 => p2sg ; P3 => p3sg} ;
Pl => table {P1 => p1pl ; P2 => p2pl ; P3 => p3pl}
}
} ;
imperative = table {Sg => impSg ; Pl => impPl} ;
participle = part ;
pres_optative = \\n,p => case <n,p> of {
<Sg,P1>=>p1sg; <Sg,P2>=>p2sg; <Sg,P3>=>p3sg;
<Pl,P1>=>p1pl; <Pl,P2>=>p2pl; <Pl,P3>=>p3pl
} ;
perf_optative = \\n,p => case <n,p> of {
<Sg,P1>=>p1sg; <Sg,P2>=>p2sg; <Sg,P3>=>p3sg;
<Pl,P1>=>p1pl; <Pl,P2>=>p2pl; <Pl,P3>=>p3pl
} ;
pres_admirative = \\n,p => case <n,p> of {
<Sg,P1>=>p1sg; <Sg,P2>=>p2sg; <Sg,P3>=>p3sg;
<Pl,P1>=>p1pl; <Pl,P2>=>p2pl; <Pl,P3>=>p3pl
} ;
imperf_admirative = \\n,p => case <n,p> of {
<Sg,P1>=>p1sg; <Sg,P2>=>p2sg; <Sg,P3>=>p3sg;
<Pl,P1>=>p1pl; <Pl,P2>=>p2pl; <Pl,P3>=>p3pl
} ;
vtype = VNormal
} ;
mkN = overload { mkN = overload {
mkN : Str -> N = regN; -- s;Indef;Nom;Sg mkN : Str -> N = regN; -- s;Indef;Nom;Sg
mkN : Str -> Str -> N = reg2N -- s;Indef;Nom;Sg s;Indef;Nom;Pl mkN : Str -> Str -> N = reg2N -- s;Indef;Nom;Sg s;Indef;Nom;Pl
@@ -1269,19 +1231,6 @@ mkV = overload {
mkV : Str -> Str -> V = reg2V -- Indicative;Pres;Sg;P1 participle mkV : Str -> Str -> V = reg2V -- Indicative;Pres;Sg;P1 participle
} ; } ;
compoundV : V -> Str -> V = \v,adv -> lin V {
indicative = \\t,n,p => v.indicative ! t ! n ! p ++ adv ;
imperative = \\n => v.imperative ! n ++ adv ;
participle = v.participle ++ adv ;
pres_optative = \\n,p => v.pres_optative ! n ! p ++ adv ;
perf_optative = \\n,p => v.perf_optative ! n ! p ++ adv ;
pres_admirative = \\n,p => v.pres_admirative ! n ! p ++ adv ;
imperf_admirative = \\n,p => v.imperf_admirative ! n ! p ++ adv ;
vtype = v.vtype
} ;
reflV : V -> V = \v -> v ** {vtype=VRefl} ;
mkV2 = overload { mkV2 = overload {
mkV2 : V -> V2 = \v -> lin V2 v ** {c2=noPrep} ; mkV2 : V -> V2 = \v -> lin V2 v ** {c2=noPrep} ;
mkV2 : V -> Prep -> V2 = \v,p -> lin V2 v ** {c2=p} ; mkV2 : V -> Prep -> V2 = \v,p -> lin V2 v ** {c2=p} ;
@@ -1324,9 +1273,9 @@ mkAdN : Str -> AdN = \s -> lin AdN {s=s} ;
mkCAdv : Str -> CAdv = \s -> lin CAdv {s=s; p=""} ; mkCAdv : Str -> CAdv = \s -> lin CAdv {s=s; p=""} ;
mkIAdv : Str -> IAdv = \s -> lin IAdv {s=s} ; mkIAdv : Str -> IAdv = \s -> lin IAdv {s=s} ;
mkIP : Str -> IP = \s -> lin IP {s=s; a={gn=GSg Masc; p=P3}} ; mkIP : Str -> IP = \s -> lin IP {s=s} ;
mkIQuant : Str -> IQuant = \s -> lin IQuant {s=\\_=>s} ; mkIQuant : Str -> IQuant = \s -> lin IQuant {s=s} ;
mkIDet : Str -> IDet = \s -> lin IDet {s=\\_=>s; n=Sg} ; mkIDet : Str -> IDet = \s -> lin IDet {s=s} ;
mkInterj : Str -> Interj = \s -> lin Interj {s=s} ; mkInterj : Str -> Interj = \s -> lin Interj {s=s} ;
@@ -1334,13 +1283,7 @@ mkVoc : Str -> Voc = \s -> lin Voc {s=s} ;
mkMU : Str -> MU = \s -> lin MU {s=s; isPre=False} ; mkMU : Str -> MU = \s -> lin MU {s=s; isPre=False} ;
mkSubj : Str -> Subj = \s -> lin Subj {s=s} ; mkSubj : Str -> Subj = \s -> lin Subj {s=s} ;
mkQuant = overload { oper mkQuant : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Quant =
mkQuant : Str -> Quant = \s -> lin Quant {
s = \\_,_,_ => s ;
sp = Indef ;
isPoss = False
} ;
mkQuant : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Quant =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16 -> lin Quant \f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16 -> lin Quant
{ s = table { { s = table {
Nom => table { Nom => table {
@@ -1384,19 +1327,10 @@ mkQuant = overload {
} }
} }
} ; } ;
sp = Indef ; spec = Indef
isPoss = False
}
} ; } ;
mkDet = overload { oper mkDet : (_,_,_,_,_,_,_,_ : Str) -> Number -> Det =
mkDet : Str -> Number -> Det = \s,n -> lin Det {
s = \\_,_ => s ;
post = \\_,_,_ => [] ;
sp = Indef ;
n = n
} ;
mkDet : (_,_,_,_,_,_,_,_ : Str) -> Number -> Det =
\f1,f2,f3,f4,f5,f6,f7,f8,n -> lin Det \f1,f2,f3,f4,f5,f6,f7,f8,n -> lin Det
{ s = table { { s = table {
Nom => table { Nom => table {
@@ -1416,23 +1350,18 @@ mkDet = overload {
Fem => f8 Fem => f8
} }
} ; } ;
post = \\_,_,_ => [] ; spec = Indef ;
sp = Indef ;
n = n n = n
}
} ; } ;
mkConj : Str -> Conj = \s -> lin Conj {s=s} ; mkConj : Str -> Conj = \s -> lin Conj {s=s} ;
mkPConj : Str -> PConj = \s -> lin PConj {s=s} ; mkPConj : Str -> PConj = \s -> lin PConj {s=s} ;
mkPron : (nom,acc,dat,ablat,acc_clit,dat_clit : Str) -> mkPron : (nom,acc,dat,ablat,acc_clit,dat_clit : Str) -> GenNum -> Person -> Pron =
(Case => Gender => Number => Str) -> \nom,acc,dat,ablat,acc_clit,dat_clit,gn,p -> lin Pron
GenNum -> Person -> Pron =
\nom,acc,dat,ablat,acc_clit,dat_clit,poss,gn,p -> lin Pron
{s = table Case [nom; acc; dat; ablat]; {s = table Case [nom; acc; dat; ablat];
acc_clit = acc_clit; acc_clit = acc_clit;
dat_clit = dat_clit; dat_clit = dat_clit;
poss = poss;
a = {gn=gn; p=p} a = {gn=gn; p=p}
} ; } ;
@@ -1440,10 +1369,7 @@ mkCard : Str -> Card = \s -> lin Card {s=s} ;
mkACard : Str -> ACard = \s -> lin ACard {s=s} ; mkACard : Str -> ACard = \s -> lin ACard {s=s} ;
mkPredet : Str -> Predet = \s -> lin Predet {s=s} ; mkPredet : Str -> Predet = \s -> lin Predet {s=s} ;
mkPrep : Str -> Case -> Prep = \s,c -> lin Prep { mkPrep : Str -> Prep = \s -> lin Prep {s=s} ;
s=s; noPrep : Prep = lin Prep {s=""} ;
c=c
} ;
noPrep : Prep = lin Prep {s=""; c=Acc} ;
} }
-13
View File
@@ -4,24 +4,11 @@ concrete PhraseSqi of Phrase = CatSqi ** open Prelude, ResSqi in {
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ; PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
UttS s = s ; UttS s = s ;
UttQS s = s ;
UttImpSg p i = {s=i.s ! p.p ! Sg} ;
UttImpPl p i = {s=i.s ! p.p ! Pl} ;
UttImpPol p i = {s=i.s ! p.p ! Pl} ;
UttIP ip = {s=ip.s} ;
UttIAdv a = a ;
UttNP np = {s = np.s ! Nom} ; UttNP np = {s = np.s ! Nom} ;
UttAdv a = a ;
UttVP vp = {s="të" ++ vp.subjunctive ! Sg ! P3 ! Masc ! Nom} ;
UttCN cn = {s=cn.s ! Indef ! Nom ! Sg} ;
UttCard c = c ;
UttAP ap = {s=ap.s ! Indef ! Nom ! Masc ! Sg} ;
UttInterj i = i ; UttInterj i = i ;
NoPConj = {s = []} ; NoPConj = {s = []} ;
PConjConj c = c ;
NoVoc = {s = []} ; NoVoc = {s = []} ;
VocNP np = {s=SOFT_BIND ++ "," ++ np.s ! Nom} ;
} }
-21
View File
@@ -1,21 +0,0 @@
concrete QuestionSqi of Question = CatSqi ** open Prelude, ParamX, ResSqi, (I=IrregSqi) in {
lincat QVP = {s : Str} ;
lin
QuestCl cl = cl ;
QuestVP ip vp = {s=\\t,a,p=>ip.s++negation p++futureParticle t++vp.indicative!sqiTense t!agrNumber ip.a!ip.a.p!agrGender ip.a!Nom} ;
QuestSlash ip cl = {s=\\t,a,p=>ip.s++cl.s!t!a!p++cl.c2.s} ;
QuestIAdv i cl = {s=\\t,a,p=>i.s++cl.s!t!a!p} ;
QuestIComp i np = {s=\\_,_,_=>i.s++(lin Verb I.jam_V).indicative!ResSqi.Pres!agrNumber np.a!np.a.p++np.s!Nom} ;
IdetCN d cn = {s=d.s!cn.g++cn.s!Indef!Nom!d.n; a=agrgP3 cn.g d.n} ;
IdetIP d = {s=d.s!Masc; a=agrgP3 Masc d.n} ;
AdvIP ip a = ip ** {s=ip.s++a.s} ;
IdetQuant q n = {s=\\g=>q.s!g++n.s; n=n.n} ;
PrepIP p ip = {s=p.s++ip.s} ;
AdvIAdv i a = {s=i.s++a.s} ;
CompIAdv i = i ;
CompIP ip = {s=ip.s} ;
ComplSlashIP sl ip = {s=sl.indicative!ResSqi.Pres!Sg!P3++sl.c2.s++ip.s} ;
AdvQVP vp i = {s=vp.indicative!ResSqi.Pres!Sg!P3!Masc!Nom++i.s} ;
AddAdvQVP q i = {s=q.s++i.s} ;
QuestQVP ip q = {s=\\_,_,_=>ip.s++q.s} ;
}
-8
View File
@@ -1,8 +0,0 @@
concrete RelativeSqi of Relative = CatSqi ** open ParamX, ResSqi in {
lin
RelCl cl = {s=\\_,t,a,p=>"që"++cl.s!t!a!p} ;
RelVP rp vp = {s=\\agr,t,a,p=>rp.s!Nom!agr.gn++negation p++futureParticle t++vp.indicative!sqiTense t!agrNumber agr!agr.p!agrGender agr!Nom} ;
RelSlash rp cl = {s=\\agr,t,a,p=>rp.s!cl.c2.c!agr.gn++cl.s!t!a!p++cl.c2.s} ;
IdRP = {s=\\_,_=>"që"} ;
FunRP prep np rp = {s=\\c,g=>prep.s++np.s!prep.c++rp.s!c!g} ;
}
+5 -64
View File
@@ -1,6 +1,6 @@
resource ResSqi = ParamX-[Tense,Past,Pres] ** open Prelude in { resource ResSqi = ParamX-[Tense,Past,Pres] ** open Prelude in {
oper Compl = {s : Str; c : Case} ; oper Compl = {s : Str} ;
param Species = Indef | Def ; param Species = Indef | Def ;
param Case = Nom | Acc | Dat | Ablat ; param Case = Nom | Acc | Dat | Ablat ;
@@ -9,16 +9,6 @@ param Gender = Masc | Fem ;
param GenNum = GSg Gender | GPl ; param GenNum = GSg Gender | GPl ;
oper Agr = {gn : GenNum; p : Person} ; oper Agr = {gn : GenNum; p : Person} ;
oper agrNumber : Agr -> Number = \a -> case a.gn of {
GSg _ => Sg ;
GPl => Pl
} ;
oper agrGender : Agr -> Gender = \a -> case a.gn of {
GSg g => g ;
GPl => Masc
} ;
oper Noun = {s: Species => Case => Number => Str; g: Gender} ; -- 3978 oper Noun = {s: Species => Case => Number => Str; g: Gender} ; -- 3978
oper mkNoun : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Gender -> Noun = oper mkNoun : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Gender -> Noun =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,g -> \f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,g ->
@@ -114,11 +104,10 @@ oper mkAdj : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Bool -> Adj =
param Tense = Pres | Past | Imperfect | Aorist ; param Tense = Pres | Past | Imperfect | Aorist ;
param VType = VNormal | VRefl | VJ ; 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; vtype : VType} ; -- 758
oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Verb = oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Verb =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24,f25,f26,f27,f28,f29,f30,f31,f32,f33,f34,f35,f36,f37,f38,f39,f40,f41,f42,f43,f44,f45,f46,f47,f48,f49,f50,f51 -> \f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24,f25,f26,f27,f28,f29,f30,f31,f32,f33,f34,f35,f36,f37,f38,f39,f40,f41,f42,f43,f44,f45,f46,f47,f48,f49,f50,f51 ->
{ indicative = table { { Indicative = table {
Pres => table { Pres => table {
Sg => table { Sg => table {
P1 => f1 ; P1 => f1 ;
@@ -168,7 +157,7 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_
} }
} }
} ; } ;
imperative = table { Imperative = table {
Sg => f25 ; Sg => f25 ;
Pl => f26 Pl => f26
} ; } ;
@@ -220,8 +209,7 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_
P2 => f50 ; P2 => f50 ;
P3 => f51 P3 => f51
} }
} ; }
vtype = VNormal
} ; } ;
oper link_clitic : Species => Case => Gender => Number => Str = oper link_clitic : Species => Case => Gender => Number => Str =
@@ -270,51 +258,4 @@ oper genNum : Gender -> Number -> GenNum = \g,n ->
agrgP3 : Gender -> Number -> Agr = agrgP3 : Gender -> Number -> Agr =
\g,n -> {gn=genNum g n; p=P3} ; \g,n -> {gn=genNum g n; p=P3} ;
oper sqiTense : ParamX.Tense -> Tense = \t -> case t of {
ParamX.Pres => Pres ;
ParamX.Past => Aorist ;
ParamX.Fut => Pres ;
ParamX.Cond => Imperfect
} ;
oper negation : Polarity -> Str = \p -> case p of {
Pos => [] ;
Neg => "nuk"
} ;
oper futureParticle : ParamX.Tense -> Str = \t -> case t of {
ParamX.Fut => "do" ++ "të" ;
ParamX.Cond => "do" ++ "të" ;
_ => []
} ;
oper subjunctiveForm : VType -> Str -> Str -> Number -> Person -> Str =
\vt,citation,fallback,n,p -> case vt of {
VJ => case <n,p> of {
<Sg,P1> => citation ;
<Sg,P3> => citation ++ BIND ++ "ë" ;
_ => fallback
} ;
_ => fallback
} ;
oper haveAux : ParamX.Tense => Number => Person => Str = table {
ParamX.Pres => table {
Sg => table {P1 => "kam"; P2 => "ke"; P3 => "ka"};
Pl => table {P1 => "kemi"; P2 => "keni"; P3 => "kanë"}
} ;
ParamX.Past => table {
Sg => table {P1 => "kisha"; P2 => "kishe"; P3 => "kishte"};
Pl => table {P1 => "kishim"; P2 => "kishit"; P3 => "kishin"}
} ;
ParamX.Fut => table {
Sg => table {P1 => "do të kem"; P2 => "do të kesh"; P3 => "do të ketë"};
Pl => table {P1 => "do të kemi"; P2 => "do të keni"; P3 => "do të kenë"}
} ;
ParamX.Cond => table {
Sg => table {P1 => "do të kisha"; P2 => "do të kishe"; P3 => "do të kishte"};
Pl => table {P1 => "do të kishim"; P2 => "do të kishit"; P3 => "do të kishin"}
}
} ;
} }
-46
View File
@@ -1,46 +0,0 @@
concrete SentenceSqi of Sentence = CatSqi ** open Prelude, ParamX, ResSqi in {
oper
mkClause : Str -> Agr -> VP -> ParamX.Tense -> Anteriority -> Polarity -> Str =
\subj,a,vp,t,ant,pol -> case <ant,t> of {
<Simul,ParamX.Past> => subj ++ negation pol ++
haveAux ! ParamX.Pres ! agrNumber a ! a.p ++ vp.participle ! a ! Nom ;
<Simul,_> => subj ++ negation pol ++ futureParticle t ++
vp.indicative ! sqiTense t ! agrNumber a ! a.p ! agrGender a ! Nom ;
<Anter,_> => subj ++ negation pol ++ haveAux ! t ! agrNumber a ! a.p ++
vp.participle ! a ! Nom
} ;
lin
PredVP np vp = {s = \\t,a,p => mkClause (np.s ! Nom) np.a vp t a p} ;
PredSCVP sc vp = {s = \\t,a,p => mkClause sc.s {gn=GSg Masc; p=P3} vp t a p} ;
SlashVP np sl = {
s = \\t,a,p => np.s ! Nom ++ negation p ++ futureParticle t ++
sl.indicative ! sqiTense t ! agrNumber np.a ! np.a.p ;
c2 = sl.c2
} ;
AdvSlash cl adv = cl ** {s = \\t,a,p => cl.s ! t ! a ! p ++ adv.s} ;
SlashPrep cl prep = {s = cl.s; c2 = prep} ;
SlashVS np vs ss = {
s = \\t,a,p => np.s ! Nom ++ negation p ++ vs.indicative ! sqiTense t ! agrNumber np.a ! np.a.p ++ "që" ++ ss.s ;
c2 = {s=[]; c=Acc}
} ;
ImpVP vp = {s = \\pol,n => case pol of {Pos => []; Neg => "mos"} ++ vp.imperative ! n ! Nom} ;
AdvImp adv imp = {s = \\p,n => adv.s ++ imp.s ! p ! n} ;
EmbedS s = {s = "që" ++ s.s} ;
EmbedQS q = {s = q.s} ;
EmbedVP vp = {s = "të" ++ vp.subjunctive ! Sg ! P3 ! Masc ! Nom} ;
UseCl t p cl = {s = cl.s ! t.t ! t.a ! p.p} ;
UseQCl t p cl = {s = cl.s ! t.t ! t.a ! p.p} ;
UseRCl t p cl = {s = \\a => cl.s ! a ! t.t ! t.a ! p.p} ;
UseSlash t p cl = {s = cl.s ! t.t ! t.a ! p.p; c2=cl.c2} ;
AdvS adv s = {s = adv.s ++ s.s} ;
ExtAdvS adv s = {s = adv.s ++ SOFT_BIND ++ "," ++ s.s} ;
SSubjS s1 subj s2 = {s = s1.s ++ subj.s ++ s2.s} ;
RelS s rs = {s = s.s ++ SOFT_BIND ++ "," ++ rs.s ! {gn=GSg Masc;p=P3}} ;
}
+8 -154
View File
@@ -1,56 +1,13 @@
concrete StructuralSqi of Structural = CatSqi ** open ResSqi, ParadigmsSqi in { concrete StructuralSqi of Structural = CatSqi ** open ResSqi, ParadigmsSqi in {
lin i_Pron = mkPron "unë" "mua" "mua" "meje" "më" "më" lin i_Pron = mkPron "unë" "mua" "mua" "meje" "më" "më" (GSg Masc) P1 ;
(\\c,g,n => case <c,g,n> of { lin youSg_Pron = mkPron "ti" "ty" "ty" "teje" "të" "të" (GSg Masc) P2 ;
<Nom,Masc,Sg> => "im"; lin he_Pron = mkPron "ai" "atë" "atij" "atij" "e" "i" (GSg Masc) P3 ;
<_ ,Masc,Sg> => "tim"; lin she_Pron = mkPron "ajo" "atë" "asaj" "asaj" "e" "i" (GSg Fem) P3 ;
<Nom,Fem, Sg> => "ime"; lin it_Pron = mkPron "ai" "atë" "atij" "atij" "e" "i" (GSg Masc) P3 ;
<Acc,Fem, Sg> => "time"; lin we_Pron = mkPron "ne" "ne" "neve" "nesh" "na" "na" GPl P1 ;
<_ ,Fem, Sg> => "sime"; lin youPl_Pron = mkPron "ju" "ju" "juve" "jush" "ju" "ju" GPl P2 ;
<_ ,Masc,Pl> => link_clitic!Def!c!g!n++"mi"; lin they_Pron = mkPron "ata" "ata" "atyre" "atyre" "i" "u" GPl P3 ;
<_ ,Fem, Pl> => link_clitic!Def!c!g!n++"mia"
})
(GSg Masc) P1 ;
lin youSg_Pron = mkPron "ti" "ty" "ty" "teje" "të" "të"
(\\c,g,n => case <c,g,n> of {
<Nom,Masc,Sg> => "yt";
<_ ,Masc,Sg> => "tënd";
<Nom,Fem, Sg> => "jote";
<Acc,Fem, Sg> => "tënde";
<_ ,Fem, Sg> => "sate";
<_ ,Masc,Pl> => link_clitic!Def!c!g!n++"tu";
<_ ,Fem, Pl> => link_clitic!Def!c!g!n++"tua"
})
(GSg Masc) P2 ;
lin he_Pron = mkPron "ai" "atë" "atij" "atij" "e" "i"
(\\c,g,n => link_clitic!Def!c!g!n++"tij")
(GSg Masc) P3 ;
lin she_Pron = mkPron "ajo" "atë" "asaj" "asaj" "e" "i"
(\\c,g,n => link_clitic!Def!c!g!n++"saj")
(GSg Fem) P3 ;
lin it_Pron = mkPron "ai" "atë" "atij" "atij" "e" "i"
(\\c,g,n => link_clitic!Def!c!g!n++"tij")
(GSg Masc) P3 ;
lin we_Pron = mkPron "ne" "ne" "neve" "nesh" "na" "na"
(\\c,g,n => case <c,g,n> of {
<Nom,Masc,Sg> => "ynë";
<_ ,Masc,Sg> => "tonë";
<Nom,Fem, Sg> => "jonë";
<Acc,Fem, Sg> => "tonë";
<_ ,Fem, Sg> => "sonë";
<_ ,Masc,Pl> => "tanë";
<_ ,Fem ,Pl> => "tona"
})
GPl P1 ;
lin youPl_Pron = mkPron "ju" "ju" "juve" "jush" "ju" "ju"
(\\c,g,n => case <c,n> of {
<Nom,Sg> => "juaj";
_ => "tuaj"
})
GPl P2 ;
lin they_Pron = mkPron "ata" "ata" "atyre" "atyre" "i" "u"
(\\c,g,n => link_clitic!Def!c!g!n++"tyre")
GPl P3 ;
lin this_Quant = mkQuant "ky" "këta" "kjo" "këto" lin this_Quant = mkQuant "ky" "këta" "kjo" "këto"
"këtë" "këtyre" "këtë" "këtyre" "këtë" "këtyre" "këtë" "këtyre"
"këtij" "këtyre" "kësaj" "këtyre" "këtij" "këtyre" "kësaj" "këtyre"
@@ -59,107 +16,4 @@ lin that_Quant = mkQuant "ai" "ata" "ajo" "ato"
"atë" "ata" "atë" "ato" "atë" "ata" "atë" "ato"
"atij" "atyre" "asaj" "atyre" "atij" "atyre" "asaj" "atyre"
"atij" "atyre" "asaj" "atyre" ; "atij" "atyre" "asaj" "atyre" ;
lin
youPol_Pron = youPl_Pron ;
and_Conj = mkConj "dhe" ;
or_Conj = mkConj "ose" ;
if_then_Conj = mkConj "nëse" ;
above_Prep = mkPrep "mbi" accusative ;
after_Prep = mkPrep "pas" ablative ;
before_Prep = mkPrep "para" ablative ;
behind_Prep = mkPrep "prapa" ablative ;
between_Prep = mkPrep "midis" ablative ;
by8agent_Prep = mkPrep "nga" nominative ;
by8means_Prep = mkPrep "me" accusative ;
during_Prep = mkPrep "gjatë" ablative ;
except_Prep = mkPrep "përveç" ablative ;
for_Prep = mkPrep "për" accusative ;
from_Prep = mkPrep "nga" nominative ;
in8front_Prep = mkPrep "përpara" accusative ;
in_Prep = mkPrep "në" accusative ;
on_Prep = mkPrep "mbi" accusative ;
part_Prep = mkPrep "nga" nominative ;
possess_Prep = mkPrep "i" accusative ;
through_Prep = mkPrep "përmes" accusative ;
to_Prep = mkPrep "te" accusative ;
under_Prep = mkPrep "nën" accusative ;
with_Prep = mkPrep "me" accusative ;
without_Prep = mkPrep "pa" accusative ;
although_Subj = mkSubj "megjithëse" ;
because_Subj = mkSubj "sepse" ;
if_Subj = mkSubj "nëse" ;
that_Subj = mkSubj "që" ;
when_Subj = mkSubj "kur" ;
always_AdV = mkAdV "gjithmonë" ;
almost_AdA = mkAdA "pothuajse" ;
so_AdA = mkAdA "kaq" ;
too_AdA = mkAdA "tepër" ;
very_AdA = mkAdA "shumë" ;
almost_AdN = mkAdN "pothuajse" ;
at_least_AdN = mkAdN "të paktën" ;
at_most_AdN = mkAdN "më së shumti" ;
more_CAdv = {s="më";p="se"} ;
less_CAdv = {s="më pak";p="se"} ;
as_CAdv = {s="po aq";p="sa"} ;
here_Adv = mkAdv "këtu" ;
there_Adv = mkAdv "atje" ;
everywhere_Adv = mkAdv "kudo" ;
somewhere_Adv = mkAdv "diku" ;
here7from_Adv = mkAdv "nga këtu" ;
here7to_Adv = mkAdv "deri këtu" ;
there7from_Adv = mkAdv "nga atje" ;
there7to_Adv = mkAdv "deri atje" ;
quite_Adv = mkAdv "mjaft" ;
how_IAdv = mkIAdv "si" ;
how8much_IAdv = mkIAdv "sa" ;
when_IAdv = mkIAdv "kur" ;
where_IAdv = mkIAdv "ku" ;
why_IAdv = mkIAdv "pse" ;
which_IQuant = {s=table {Masc=>"cili";Fem=>"cila"}} ;
how8many_IDet = {s=\\_=>"sa";n=Pl} ;
whatSg_IP = {s="çfarë";a={gn=GSg Masc;p=P3}} ;
whatPl_IP = {s="çfarë";a={gn=GPl;p=P3}} ;
whoSg_IP = {s="kush";a={gn=GSg Masc;p=P3}} ;
whoPl_IP = {s="cilët";a={gn=GPl;p=P3}} ;
all_Predet = {s="të gjithë"} ;
most_Predet = {s="shumica e"} ;
not_Predet = {s="jo"} ;
only_Predet = {s="vetëm"} ;
every_Det = {s=\\_,_=>"çdo";post=\\_,_,_=>[];sp=Indef;n=Sg} ;
few_Det = {s=\\_,_=>"pak";post=\\_,_,_=>[];sp=Indef;n=Pl} ;
many_Det = {s=\\_,_=>"shumë";post=\\_,_,_=>[];sp=Indef;n=Pl} ;
much_Det = {s=\\_,_=>"shumë";post=\\_,_,_=>[];sp=Indef;n=Sg} ;
someSg_Det = {s=\\_,_=>"një";post=\\_,_,_=>[];sp=Indef;n=Sg} ;
somePl_Det = {s=\\_,_=>"disa";post=\\_,_,_=>[];sp=Indef;n=Pl} ;
no_Quant = mkQuant "asnjë" ;
everybody_NP = {s=\\_=>"të gjithë";a={gn=GPl;p=P3}} ;
everything_NP = {s=\\_=>"gjithçka";a={gn=GSg Masc;p=P3}} ;
nobody_NP = {s=\\_=>"askush";a={gn=GSg Masc;p=P3}} ;
nothing_NP = {s=\\_=>"asgjë";a={gn=GSg Masc;p=P3}} ;
somebody_NP = {s=\\_=>"dikush";a={gn=GSg Masc;p=P3}} ;
something_NP = {s=\\_=>"diçka";a={gn=GSg Masc;p=P3}} ;
can_VV = mkVV (mkV "mund") ;
can8know_VV = mkVV (irregV "di" "di" "di" "dimë" "dini" "dinë" "di" "dini" "ditur") ;
must_VV = mkVV (mkV "duhet") ;
want_VV = mkVV (irregV "dua" "do" "do" "duam" "doni" "duan" "duaj" "doni" "dashur") ;
have_V2 = mkV2 (irregV "kam" "ke" "ka" "kemi" "keni" "kanë" "ki" "kini" "pasur") ;
but_PConj = {s="por"} ;
otherwise_PConj = {s="përndryshe"} ;
therefore_PConj = {s="prandaj"} ;
please_Voc = {s="ju lutem"} ;
yes_Utt = {s="po"} ;
no_Utt = {s="jo"} ;
language_title_Utt = {s="shqip"} ;
} }
-150
View File
@@ -1,150 +0,0 @@
concrete VerbSqi of Verb = CatSqi ** open Prelude, ParamX, ResSqi, (I=IrregSqi) in {
oper
verbVP : Verb -> VP = \v -> lin VP {
indicative = \\t,n,p,_,_ => v.indicative ! t ! n ! p ;
subjunctive = \\n,p,_,_ => subjunctiveForm v.vtype
(v.indicative ! ResSqi.Pres ! Sg ! P1)
(v.indicative ! ResSqi.Pres ! n ! p) n p ;
imperative = \\n,_ => v.imperative ! n ;
participle = \\_,c => v.participle ;
pres_optative = \\n,p,c => v.pres_optative ! n ! p ;
perf_optative = \\n,p,c => v.perf_optative ! n ! p ;
pres_admirative = \\n,p,c => v.pres_admirative ! n ! p ;
imperf_admirative = \\n,p,c => v.imperf_admirative ! n ! p ;
vtype = v.vtype
} ;
addVP : VP -> (Agr => Case => Str) -> VP = \vp,x -> vp ** {
indicative = \\t,n,p,g,c => vp.indicative ! t ! n ! p ! g ! c ++
x ! {gn=genNum g n; p=p} ! c ;
subjunctive = \\n,p,g,c => vp.subjunctive ! n ! p ! g ! c ++
x ! {gn=genNum g n; p=p} ! c ;
imperative = \\n,c => vp.imperative ! n ! c ++
x ! {gn=genNum Masc n; p=P2} ! c ;
participle = \\a,c => vp.participle ! a ! c ++ x ! a ! c ;
pres_optative = \\n,p,c => vp.pres_optative ! n ! p ! c ++
x ! {gn=genNum Masc n; p=p} ! c ;
perf_optative = \\n,p,c => vp.perf_optative ! n ! p ! c ++
x ! {gn=genNum Masc n; p=p} ! c ;
pres_admirative = \\n,p,c => vp.pres_admirative ! n ! p ! c ++
x ! {gn=genNum Masc n; p=p} ! c ;
imperf_admirative = \\n,p,c => vp.imperf_admirative ! n ! p ! c ++
x ! {gn=genNum Masc n; p=p} ! c
} ;
slashVP : Verb -> Compl -> VPSlash = \v,c -> lin VPSlash {
indicative=\\t,n,p=>v.indicative!t!n!p;
subjunctive=\\n,p=>subjunctiveForm v.vtype
(v.indicative!ResSqi.Pres!Sg!P1)
(v.indicative!ResSqi.Pres!n!p) n p;
imperative=\\n=>v.imperative!n;
participle=v.participle;
pres_optative=v.pres_optative;
perf_optative=v.perf_optative;
pres_admirative=v.pres_admirative;
imperf_admirative=v.imperf_admirative;
c2=c;
vtype=v.vtype
} ;
addSlash : VPSlash -> Str -> VPSlash = \sl,x -> sl ** {
indicative = \\t,n,p => sl.indicative ! t ! n ! p ++ x ;
subjunctive = \\n,p => sl.subjunctive ! n ! p ++ x ;
imperative = \\n => sl.imperative ! n ++ x ;
participle = sl.participle ++ x ;
pres_optative = \\n,p => sl.pres_optative ! n ! p ++ x ;
perf_optative = \\n,p => sl.perf_optative ! n ! p ++ x ;
pres_admirative = \\n,p => sl.pres_admirative ! n ! p ++ x ;
imperf_admirative = \\n,p => sl.imperf_admirative ! n ! p ++ x
} ;
slashToVP : VPSlash -> VP = \v -> lin VP {
indicative = \\t,n,p,g,c => v.indicative ! t ! n ! p ;
subjunctive = \\n,p,_,_ => v.subjunctive ! n ! p ;
imperative = \\n,c => v.imperative ! n ;
participle = \\_,c => v.participle ;
pres_optative = \\n,p,c => v.pres_optative ! n ! p ;
perf_optative = \\n,p,c => v.perf_optative ! n ! p ;
pres_admirative = \\n,p,c => v.pres_admirative ! n ! p ;
imperf_admirative = \\n,p,c => v.imperf_admirative ! n ! p ;
vtype = v.vtype
} ;
lin
UseV v = verbVP v ;
SlashV2a v = slashVP v v.c2 ;
ComplSlash v np = addVP (slashToVP v) (\\_,_ => v.c2.s ++ np.s ! v.c2.c) ;
ComplVS v s = addVP (verbVP v) (\\_,_ => "që" ++ s.s) ;
ComplVQ v q = addVP (verbVP v) (\\_,_ => q.s) ;
ComplVA v ap = addVP (verbVP v) (\\a,c =>
ap.s ! Indef ! c ! agrGender a ! agrNumber a) ;
ComplVV v vp = addVP (verbVP v) (\\a,_ =>
"të" ++ vp.subjunctive ! agrNumber a ! a.p ! agrGender a ! Nom) ;
Slash2V3 v np = addSlash (slashVP (lin Verb v) v.c3)
(v.c2.s ++ np.s ! v.c2.c) ;
Slash3V3 v np = addSlash (slashVP (lin Verb v) v.c2)
(v.c3.s ++ np.s ! v.c3.c) ;
SlashV2S v s = addSlash (slashVP (lin Verb v) v.c2) ("që" ++ s.s) ;
SlashV2Q v q = addSlash (slashVP (lin Verb v) v.c2) q.s ;
SlashV2A v ap = addSlash (slashVP (lin Verb v) v.c2)
(ap.s ! Indef ! Nom ! Masc ! Sg) ;
SlashV2V v vp = addSlash (slashVP (lin Verb v) v.c2)
("të" ++ vp.subjunctive ! Sg ! P3 ! Masc ! Nom) ;
SlashVV v sl = sl ** {
indicative = \\t,n,p => v.indicative ! t ! n ! p ++ "të" ++ sl.subjunctive ! Sg ! P3 ;
subjunctive = \\n,p => subjunctiveForm v.vtype
(v.indicative!ResSqi.Pres!Sg!P1)
(v.indicative!ResSqi.Pres!n!p) n p ++ "të" ++ sl.subjunctive ! Sg ! P3
} ;
SlashV2VNP v np sl = sl ** {
indicative = \\t,n,p => v.indicative ! t ! n ! p ++ v.c2.s ++ np.s ! v.c2.c ++ "të" ++ sl.subjunctive ! Sg ! P3 ;
subjunctive = \\n,p => subjunctiveForm v.vtype
(v.indicative!ResSqi.Pres!Sg!P1)
(v.indicative!ResSqi.Pres!n!p) n p ++ v.c2.s ++ np.s ! v.c2.c ++ "të" ++ sl.subjunctive ! Sg ! P3
} ;
ReflVP sl = addVP (slashToVP sl) (\\_,_ => "veten") ;
UseComp comp = addVP (verbVP (lin Verb I.jam_V)) (\\a,_ => comp.s ! a) ;
UseCopula = verbVP (lin Verb I.jam_V) ;
PassV2 v = addVP (verbVP (lin Verb I.jam_V)) (\\_,_ => v.participle) ;
AdvVP vp adv = addVP vp (\\_,_ => adv.s) ;
ExtAdvVP vp adv = addVP vp (\\_,_ => SOFT_BIND ++ "," ++ adv.s) ;
AdVVP adv vp = vp ** {
indicative = \\t,n,p,g,c => adv.s ++ vp.indicative ! t ! n ! p ! g ! c ;
subjunctive = \\n,p,g,c => adv.s ++ vp.subjunctive ! n ! p ! g ! c ;
imperative = \\n,c => adv.s ++ vp.imperative ! n ! c
} ;
AdvVPSlash sl adv = sl ** {
indicative = \\t,n,p => sl.indicative ! t ! n ! p ++ adv.s ;
subjunctive = \\n,p => sl.subjunctive ! n ! p ++ adv.s ;
imperative = \\n => sl.imperative ! n ++ adv.s ;
participle = sl.participle ++ adv.s
} ;
AdVVPSlash adv sl = sl ** {
indicative = \\t,n,p => adv.s ++ sl.indicative ! t ! n ! p ;
subjunctive = \\n,p => adv.s ++ sl.subjunctive ! n ! p ;
imperative = \\n => adv.s ++ sl.imperative ! n
} ;
VPSlashPrep vp prep = lin VPSlash {
indicative = \\t,n,p => vp.indicative ! t ! n ! p ! Masc ! Nom ;
subjunctive = \\n,p => vp.subjunctive ! n ! p ! Masc ! Nom ;
imperative = \\n => vp.imperative ! n ! Nom ;
participle = vp.participle ! {gn=GSg Masc;p=P3} ! Nom ;
pres_optative = \\n,p => vp.pres_optative ! n ! p ! Nom ;
perf_optative = \\n,p => vp.perf_optative ! n ! p ! Nom ;
pres_admirative = \\n,p => vp.pres_admirative ! n ! p ! Nom ;
imperf_admirative = \\n,p => vp.imperf_admirative ! n ! p ! Nom ;
vtype = vp.vtype ;
c2 = prep
} ;
CompAP ap = {s = \\a => ap.s ! Indef ! Nom ! agrGender a ! agrNumber a} ;
CompNP np = {s = \\_ => np.s ! Nom} ;
CompAdv adv = {s = \\_ => adv.s} ;
CompCN cn = {s = \\_ => cn.s ! Indef ! Nom ! Sg} ;
}
+419
View File
@@ -128,8 +128,10 @@ C1eC2aC3 = {C1 ="" ; C1C2="'"; C2C3 ="!"; C3="#"};
peC1aC2C3 = { C1 = "ä" ; C1C2="'"; C2C3 ="'"; C3=""}; peC1aC2C3 = { C1 = "ä" ; C1C2="'"; C2C3 ="'"; C3=""};
penC1aC2C3e = { C1 = "än" ; C1C2="'"; C2C3 ="'"; C3=""}; penC1aC2C3e = { C1 = "än" ; C1C2="'"; C2C3 ="'"; C3=""};
pteC1aC2C3 = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3=""}; pteC1aC2C3 = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3=""};
pteC1aC2C3 = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3=""};-- 3
pteC1aC2C3u = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3="&"}; pteC1aC2C3u = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3="&"};
pyeC1aC2C3 = { C1 = "y" ; C1C2="'"; C2C3 ="'"; C3=""}; pyeC1aC2C3 = { C1 = "y" ; C1C2="'"; C2C3 ="'"; C3=""};
pteC1aC2C3 = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3=""};
pyeC1aC2C3u = { C1 = "y" ; C1C2="'"; C2C3 ="'"; C3="&"}; pyeC1aC2C3u = { C1 = "y" ; C1C2="'"; C2C3 ="'"; C3="&"};
--Passive Jus_Imperat mkV3gdl --Passive Jus_Imperat mkV3gdl
@@ -341,6 +343,7 @@ leC1AC2aC3 = {C1 ="l" ; C1C2="!"; C2C3 ="'"; C3=""};
enC1AC2aC3 = { C1 = "(n" ; C1C2="!"; C2C3 ="'"; C3=""}; enC1AC2aC3 = { C1 = "(n" ; C1C2="!"; C2C3 ="'"; C3=""};
C1AC2aC3 = { C1 = "" ; C1C2="!"; C2C3 ="'"; C3=""}; C1AC2aC3 = { C1 = "" ; C1C2="!"; C2C3 ="'"; C3=""};
C1AC2aC3i = { C1 = "" ; C1C2="!"; C2C3 ="'"; C3="#"}; C1AC2aC3i = { C1 = "" ; C1C2="!"; C2C3 ="'"; C3="#"};
C1AC2aC3u = { C1 = "" ; C1C2="!"; C2C3 ="'"; C3="&"};
yC1AC2aC3 = { C1 = "y" ; C1C2="!"; C2C3 ="'"; C3=""}; yC1AC2aC3 = { C1 = "y" ; C1C2="!"; C2C3 ="'"; C3=""};
tC1AC2aC3 = { C1 = "t" ; C1C2="!"; C2C3 ="'"; C3=""}; tC1AC2aC3 = { C1 = "t" ; C1C2="!"; C2C3 ="'"; C3=""};
yC1AC2aC3u = { C1 = "y" ; C1C2="!"; C2C3 ="'"; C3="&"}; yC1AC2aC3u = { C1 = "y" ; C1C2="!"; C2C3 ="'"; C3="&"};
@@ -698,6 +701,75 @@ C1C2ek = { C1 = "" ; C1C2=""; C2 ="'k"};
C1C2esh = { C1 = "" ; C1C2=""; C2 ="'x"}; C1C2esh = { C1 = "" ; C1C2=""; C2 ="'x"};
C1C2achehu = { C1 = "" ; C1C2=""; C2 ="!ch&"}; C1C2achehu = { C1 = "" ; C1C2=""; C2 ="!ch&"};
C1C2o = { C1 = "" ; C1C2=""; C2 ="/"}; C1C2o = { C1 = "" ; C1C2=""; C2 ="/"};
C1C2a = { C1 = "" ; C1C2=""; C2="!"};
C1C2ew = { C1 = "" ; C1C2=""; C2="'w"};
--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 ="#"};
--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"}; C1C2ew = { C1 = "" ; C1C2=""; C2="'w"};
--CompPer mkV2yz y!l'h& !l !l !l cX7l 7l l'c !l --CompPer mkV2yz y!l'h& !l !l !l cX7l 7l l'c !l
@@ -723,6 +795,78 @@ C1oC2hu = {C1 ="" ; C1C2="/"; C2 ="h&"};
C1oC2n = { C1 = "" ; C1C2="/"; C2 ="n"}; C1oC2n = { C1 = "" ; C1C2="/"; C2 ="n"};
C1oC2k = { C1 = "" ; C1C2="/"; C2 ="k"}; C1oC2k = { C1 = "" ; C1C2="/"; C2 ="k"};
C1oC2sh = { C1 = "" ; C1C2="/"; C2 ="x"}; C1oC2sh = { C1 = "" ; C1C2="/"; C2 ="x"};
C1oC2achehu = { C1 = "" ; C1C2 ="/"; C2 ="!ch&"};
C1oC2a = { C1 = "" ; C1C2="/"; C2 ="'"};
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 ="#"};
--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 ="'"}; C1oC2a = { C1 = "" ; C1C2="/"; C2 ="'"};
C1oC2ach = { C1 = "" ; C1C2="/"; C2 ="'c"}; C1oC2ach = { C1 = "" ; C1C2="/"; C2 ="'c"};
C1oC2u = { C1 = "" ; C1C2="/"; C2 ="&"}; C1oC2u = { C1 = "" ; C1C2="/"; C2 ="&"};
@@ -791,6 +935,10 @@ C1AC2ehu = {C1 ="" ; C1C2="!"; C2 ="'h&"};
C1AC2en = { C1 = "" ; C1C2="!"; C2 ="'n"}; C1AC2en = { C1 = "" ; C1C2="!"; C2 ="'n"};
C1AC2ek = { C1 = "" ; C1C2="!"; C2 ="'k"}; C1AC2ek = { C1 = "" ; C1C2="!"; C2 ="'k"};
C1AC2esh = { C1 = "" ; C1C2="!"; C2 ="'x"}; C1AC2esh = { C1 = "" ; C1C2="!"; C2 ="'x"};
--C1AC2achehu = { C1 = "" ; C1C2 ="!"; C2 ="!ch&"};
--C1AC2a = { C1 = "" ; C1C2="!"; C2 ="'"};
--C1AC2ach = { C1 = "" ; C1C2="!"; C2 ="'c"};
--C1AC2u = { C1 = "" ; C1C2="!"; C2 ="&"};
-- Imper -- mkV2wN -- Imper -- mkV2wN
eC1aC2alehu = { C1 = "ä" ; C1C2="!"; C2 ="!l'h&"}; eC1aC2alehu = { C1 = "ä" ; C1C2="!"; C2 ="!l'h&"};
enC1aC2alen = { C1 = "än" ; C1C2="!"; C2 ="!l'n"}; enC1aC2alen = { C1 = "än" ; C1C2="!"; C2 ="!l'n"};
@@ -844,6 +992,74 @@ C1aC2tewal = { C1 = "" ; C1C2="!"; C2="t'w!l"};
meC1aC2et= {C1 ="m'" ; C1C2="!"; C2 ="'t"}; meC1aC2et= {C1 ="m'" ; C1C2="!"; C2 ="'t"};
--nore -- nr -- live --nore -- nr -- live
--mkV2wN -- wN -- swim --- Eg lie, see, say
--Perf --
C1AC2ehu = {C1 ="" ; C1C2="!"; C2 ="'h&"};
C1AC2en = { C1 = "" ; C1C2="!"; C2 ="'n"};
C1AC2ek = { C1 = "" ; C1C2="!"; C2 ="'k"};
C1AC2esh = { C1 = "" ; C1C2="!"; C2 ="'x"};
--C1AC2achehu = { C1 = "" ; C1C2 ="!"; C2 ="!ch&"};
--C1AC2a = { C1 = "" ; C1C2="!"; C2 ="'"};
--C1AC2ach = { C1 = "" ; C1C2="!"; C2 ="'c"};
--C1AC2u = { C1 = "" ; C1C2="!"; C2 ="&"};
-- Imper -- mkV2wN
eC1aC2alehu = { C1 = "ä" ; C1C2="!"; C2 ="!l'h&"};
enC1aC2alen = { C1 = "än" ; C1C2="!"; C2 ="!l'n"};
teC1aC2yaleh = { C1 = "t" ; C1C2="!"; C2 ="!l'h"};
teC1aC2alesh = { C1 = "t" ; C1C2="!"; C2 ="y!l'x"};
teC1aC2alachehu = { C1 = "t" ; C1C2="!"; C2 ="!l!ch&"};
yeC1aC2al = { C1 = "y" ; C1C2="!"; C2 ="!l"};
teC1aC2alech = { C1 = "t" ; C1C2="!"; C2 ="!l'c"};
yeC1aC2alu = { C1 = "y" ; C1C2="!"; C2 ="!l&"};
-- Cont -- mkV2wN
eC1aC2 = { C1 = "ä" ; C1C2="!"; C2 =""};
enC1aC2 = { C1 = "än" ; C1C2="!"; C2 =""};
teC1aC2 = { C1 = "t" ; C1C2="!"; C2 =""};
--teC1aC2 = { C1 = "t" ; C1C2="!"; C2 =""};
teC1aC2u = { C1 = "t" ; C1C2="!"; C2 ="&"};
yeC1aC2 = { C1 = "y" ; C1C2="!"; C2 =""};
--teC1aC2 = { C1 = "t" ; C1C2="!"; C2 =""};
yeC1aC2u = { C1 = "y" ; C1C2="!"; C2 ="&"};
--Jus_Imperat mkV2wN
--leC1aC2a = {C1 ="l" ; C1C2="!"; C2 =""};
--enC1aC2a = { C1 = "än" ; C1C2="!"; C2 =""};
--C1aC2 = { C1 = "" ; C1C2="!"; C2 =""};
--C1aC2i = { C1 = "" ; C1C2="!"; C2 ="#"};
--C1eC2u = { C1 = "" ; C1C2="!"; C2 ="&"};
--yC1aC2a = { C1 = "y" ; C1C2="!"; C2 =""};
--tC1aC2a = { C1 = "t" ; C1C2="!"; C2 =""};
--yC1aC2u = { C1 = "y" ; C1C2="!"; C2 ="&"};
--Gerund mkV2wN
C1aC2cie = {C1 ="" ; C1C2="!"; C2 ="c%"};
C1aC2ten = { C1 = "" ; C1C2="!"; C2 ="t'n"};
C1aC2tek = { C1 = "" ; C1C2="!"; C2 ="t'k"};
C1aC2tesh = { C1 = "" ; C1C2="!"; C2 ="t'x"};
C1aC2tachehu = { C1 = "" ; C1C2="!"; C2 ="t!ch&"};
C1aC2to = { C1 = "" ; C1C2="!"; C2 ="t/"};
C1aC2ta = { C1 = "" ; C1C2="!"; C2="t!"};
C1aC2tew = { C1 = "" ; C1C2="!"; C2="t'w"};
--ComPer mkV2wN y!l'h& !l !l !l cX7l 7l l'c !l
C1aC2ciealehu = {C1 ="" ; C1C2="!"; C2 ="c%y!l'h&"};
C1aC2tenal = { C1 = "" ; C1C2="!"; C2 ="t'n!l"};
C1aC2tekal = { C1 = "" ; C1C2="!"; C2 ="t'k!l"};
C1aC2teshal = { C1 = "" ; C1C2="!"; C2 ="t'x!l"};
C1aC2tachehual = { C1 = "" ; C1C2="!"; C2 ="t!cX7l"};
C1aC2toal = { C1 = "" ; C1C2="!"; C2 ="t7l"};
C1aC2talech = { C1 = "" ; C1C2="!"; C2="t!l'c"};
C1aC2tewal = { C1 = "" ; C1C2="!"; C2="t'w!l"};
--Infinitve mkV2wN
meC1aC2et= {C1 ="m'" ; C1C2="!"; C2 ="'t"};
--nore -- nr -- live
----------- This much is enough for the duo-radicals--- ----------- This much is enough for the duo-radicals---
--There are few verbs still remaining like the case of shete, hede , --washe, aye, ale , all need unique froms for them selves. I will get --back here later!! --There are few verbs still remaining like the case of shete, hede , --washe, aye, ale , all need unique froms for them selves. I will get --back here later!!
@@ -893,8 +1109,63 @@ tC1eC2 = { C1 = "t" ; C1C2=""; C2 =""};
meC1C2et= {C1 ="m'" ; C1C2=""; C2 ="'t"}; meC1C2et= {C1 ="m'" ; C1C2=""; C2 ="'t"};
----------- This much is enough for the duo-radicals---
--There are few verbs still remaining like the case of shete, hede , --washe, aye, ale , all need unique froms for them selves. I will get --back here later!!
--seTe -- st -- give
--Perf --
C1eC2hu = {C1 ="" ; C1C2="'"; C2 ="'h&"};
C1eC2n = { C1 = "" ; C1C2="'"; C2 ="'n"};
C1eC2k = { C1 = "" ; C1C2="'"; C2 ="'k"};
C1eC2sh = { C1 = "" ; C1C2="'"; C2 ="'x"};
C1eC2achehu = { C1 = "" ; C1C2 ="'"; C2 ="'ch&"};
C1eC2a = { C1 = "" ; C1C2="'"; C2 ="'"};
C1eC2ach = { C1 = "" ; C1C2="'"; C2 ="'c"};
--C1eC2u = { C1 = "" ; C1C2="'"; C2 ="&"}; same as C1aC2u (bela)
-- Imper -- mkV2sT
--eC1eC2alehu = { C1 = "ä" ; C1C2="'"; C2 ="!l'h&"}; eC1aC2alehu
--enC1eC2alen = { C1 = "än" ; C1C2="'"; C2 ="!l'n"};enC1aC2alen
--teC1eC2yaleh = { C1 = "t" ; C1C2="'"; C2 ="!l'h"};teC1aC2yaleh
--teC1eC2aleh = { C1 = "t" ; C1C2="'"; C2 ="y!l'x"};teC1aC2aleh
--teC1eC2alachehu = { C1 = "t" ; C1C2="'"; C2 ="!l!ch&"};teC1aC2alachehu
--yeC1eC2al = { C1 = "y" ; C1C2="'"; C2 ="!l"};yeC1aC2al
--teC1eC2alech = { C1 = "t" ; C1C2="'"; C2 ="!l'c"};teC1aC2alech
--yeC1eC2alu = { C1 = "y" ; C1C2="'"; C2 ="!l&"};yeC1aC2alu
--Jus_Imperat mkV2sT
leC1eC2 = {C1 ="l" ; C1C2=""; C2 =""};
enC1eC2 = { C1 = "än" ; C1C2=""; C2 =""};
C1C2 = { C1 = "" ; C1C2=""; C2 =""};
C1eC2i = { C1 = "" ; C1C2=""; C2 ="#"};
--C1eC2u = { C1 = "" ; C1C2=""; C2 ="&"}; C1C2u
yC1eC2 = { C1 = "y" ; C1C2=""; C2 =""};
tC1eC2 = { C1 = "t" ; C1C2=""; C2 =""};
--yC1eC2u = { C1 = "y" ; C1C2=""; C2 ="&"};yC1C2u
--Gerund mkV2sT
--C1eC2ie = {C1 ="" ; C1C2="'"; C2 ="c%"}; C1aC2cie
--C1eC2en = { C1 = "" ; C1C2="'"; C2 ="'n"};C1aC2ten
--C1eC2ek = { C1 = "" ; C1C2="'"; C2 ="'k"}; C1aC2tek
--C1eC2esh = { C1 = "" ; C1C2="'"; C2 ="'x"}; C1aC2tesh
--C1eC2achehu = { C1 = "" ; C1C2="'"; C2 ="!ch&"};C1aC2tachehu
--C1eC2o = { C1 = "" ; C1C2="'"; C2 ="/"};C1aC2to
--C1eC2A = { C1 = "" ; C1C2="'"; C2="!"};C1aC2ta
--C1eC2ew = { C1 = "" ; C1C2="'"; C2="'w"}; C1aC2tew
--Infinitve mkV2sT
meC1C2et= {C1 ="m'" ; C1C2=""; C2 ="'t"};
---- Quadro_Radical ---- Quadro_Radical
--Starting with type Tri-Radical Roots --Starting with type Tri-Radical Roots
-- Eg. dbdb - fight -- Eg. dbdb - fight
-- qzqz - freeze -- qzqz - freeze
@@ -967,4 +1238,152 @@ meC1aC2C3aC4 = {C1 ="m'" ; C1C2="'"; C2C3 =""; C3C4="'"; C4= "" };
--Participle mkV4dbdb --Participle mkV4dbdb
C1eC2C3aC4i = {C1 ="" ; C1C2="'"; C2C3 =""; C3C4="!"; C4= "#" }; C1eC2C3aC4i = {C1 ="" ; C1C2="'"; C2C3 =""; C3C4="!"; C4= "#" };
---- Quadro_Radical
--Starting with type Tri-Radical Roots
-- Eg. dbdb - fight
-- qzqz - freeze
-- wrwr - throw
-- tnfs - breath
--Perf --
C1aC2aC3aC4hu = {C1 ="" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "h&" };
C1aC2aC3aC4n = { C1 = "" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "n" };
C1aC2aC3aC4k = { C1 = "" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "k" };
C1aC2aC3aC4sh = { C1 = "" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "x" };
C1aC2aC3aC4achehu = { C1 = "" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "!ch&" };
C1aC2aC3aC4a = { C1 = "" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "'" };
C1aC2aC3aC4ech = { C1 = "" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "'c" };
C1aC2aC3aC4u = { C1 = "" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "&" };
--Imper --mkV4dbdb
eC1aC2aC3C4alehu = { C1 = "ä" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "!l'h&" };
enC1aC2aC3C4alen = { C1 = "än" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "!l'n" };
teC1aC2aC3C4yaleh = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "!l'h" };
teC1aC2aC3C4aleh = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "y!l'x" };
teC1aC2aC3C4alachehu = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "!l!ch&" };
yeC1aC2aC3C4al = { C1 = "y" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "!l" };
teC1aC2aC3C4alech = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "!l'c" };
yeC1aC2aC3C4alu = { C1 = "y" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "!l&" };
--Cont --mkV4dbdb
eC1aC2aC3C4 = { C1 = "ä" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "" };
enC1aC2aC3C4 = { C1 = "än" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "" };
teC1aC2aC3C4 = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "" };
teC1aC2aC3C4i = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "#" };
teC1aC2aC3C4u = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "&" };
yeC1aC2aC3C4 = { C1 = "y" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "" };
--teC1aC2aC3C4 = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "" };
yeC1aC2aC3C4u = { C1 = "y" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "&" };
--Jus_Imperat mkV4dbdb
leC1aC2C3C4 = {C1 ="l" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "" };
enC1aC2C3C4 = { C1 = "än" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "" };
C1aC2C3C4 = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "" };
C1aC2C3C4i = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "#" };
C1aC2C3C4u = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "&" };
yC1aC2C3C4 = { C1 = "y" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "" };
tC1aC2C3C4 = { C1 = "t" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "" };
yC1aC2C3C4u = { C1 = "y" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "&" };
--Gerund mkV4dbdb
C1aC2C3C4ie = {C1 ="" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "%" };
C1aC2C3C4en = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'n" };
C1aC2C3C4ek = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'k" };
C1aC2C3C4esh = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'x" };
C1aC2C3C4achehu = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "!ch&" };
C1aC2C3C4o = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "/" };
C1aC2C3C4a = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "!" };
C1aC2C3C4ew = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'w" };
--CompPerf mkV4dbdb y!l'h& !l !l !l cX7l 7l l'c !l
C1aC2C3C4iealehu = {C1 ="" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "%y!l'h&" };
C1aC2C3C4enal = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'n!l" };
C1aC2C3C4ekal = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'k!l" };
C1aC2C3C4eshal = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'x!l" };
C1aC2C3C4achehual = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "!cX7l" };
C1aC2C3C4oal = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "7l" };
C1aC2C3C4alech = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "!l'c" };
C1aC2C3C4ewal = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'w!l" };
--Infinitve mkV4dbdb
meC1aC2C3aC4 = {C1 ="m'" ; C1C2="'"; C2C3 =""; C3C4="'"; C4= "" };
--Participle mkV4dbdb
C1eC2C3aC4i = {C1 ="" ; C1C2="'"; C2C3 =""; C3C4="!"; C4= "#" };
} }
{-
resource PatternsAmh = {
flags coding=utf8 ;
oper
--perf
C1aC2aC3ku = {C1 ="" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="ኩ"};
C1aC2aC3n = { C1 = "" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="ን"};
C1aC2aC3k = { C1 = "" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="ክ"};
C1aC2aC3sh = { C1 = "" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="ሽ"};
C1aC2aC3achehu = { C1 = "" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="አችሁ"};
C1aC2aC3e = { C1 = "" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="ኧ"};
C1aC2aC3ech = { C1 = "" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="ኧች"};
C1aC2aC3u = { C1 = "" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="ኡ"};
--imper
eC1aC2C3alehu = { C1 = "እ" ; C1C2="ኧ"; C2C3 =""; C3="አለሁ"};
enC1aC2C3alen = { C1 = "እን" ; C1C2="ኧ"; C2C3 =""; C3="አለን"};
teC1aC2C3yaleh = { C1 = "ት" ; C1C2="ኧ"; C2C3 =""; C3="አለህ"};
teC1aC2C3aleh = { C1 = "ት" ; C1C2="ኧ"; C2C3 =""; C3="ያለሽ"};
teC1aC2C3alachehu = { C1 = "ት" ; C1C2="ኧ"; C2C3 =""; C3="አላችሁ"};
yeC1aC2C3al = { C1 = "ይ" ; C1C2="ኧ"; C2C3 =""; C3="አል"};
teC1aC2C3alech = { C1 = "ት" ; C1C2="ኧ"; C2C3 =""; C3="አለች"};
yeC1aC2C3alu = { C1 = "ይ" ; C1C2="ኧ"; C2C3 =""; C3="አሉ"};
}
-}
+3
View File
@@ -22,9 +22,12 @@ concrete PhraseAmh of Phrase = CatAmh ** open
UttIP ip = ip ; --- Acc also UttIP ip = ip ; --- Acc also
UttVP vp = {s = vp.obj.s ++ vp.inf} ; UttVP vp = {s = vp.obj.s ++ vp.inf} ;
UttIAdv iadv = iadv ; UttIAdv iadv = iadv ;
UttCN n = {s = n.s ! Sg ! Indef!Nom} ;
UttCard n = {s = n.s ! Masc!Sg!Indef!Nom} ;
UttImpSg pol imp = {s = pol.s ++ imp.s!pol.p!Masc!Sg}; UttImpSg pol imp = {s = pol.s ++ imp.s!pol.p!Masc!Sg};
UttImpPl pol imp = {s = pol.s ++ imp.s ! pol.p! Masc! Pl} ; --- TO DO UttImpPl pol imp = {s = pol.s ++ imp.s ! pol.p! Masc! Pl} ; --- TO DO
UttImpPol pol imp = {s = pol.s ++ imp.s ! pol.p ! Masc!Pl} ; -- TO DO --- UttImpPol pol imp = {s = pol.s ++ imp.s ! pol.p ! Masc!Pl} ; -- TO DO ---
UttQS qs = {s = qs.s } ; -- TO DO
{- {-
PConjConj conj = {s = conj.s2} ; --- PConjConj conj = {s = conj.s2} ; ---
+1 -1
View File
@@ -1,3 +1,3 @@
--# -path=.:../afrikaans:../common:../abstract:../prelude --# -path=.:../afrikaans:../common:../abstract:../prelude
resource TryAfr = SyntaxAfr, LexiconAfr, ParadigmsAfr - [mkAdv,mkAdN,mkCard,mkOrd,mkIAdv,mkIDet] ; resource TryAfr = SyntaxAfr, LexiconAfr, ParadigmsAfr - [mkAdv,mkOrd] ;
+1 -1
View File
@@ -1,6 +1,6 @@
--# -path=.:../maltese:../common:../abstract:../prelude --# -path=.:../maltese:../common:../abstract:../prelude
resource TryMlt = SyntaxMlt, LexiconMlt, ParadigmsMlt - [mkAdN, mkAdv,mkCard,mkDet,mkIAdv,mkIDet,mkOrd,mkPConj,mkQuant,mkVoc] ** resource TryMlt = SyntaxMlt, LexiconMlt, ParadigmsMlt - [mkAdN, mkAdv,mkOrd,mkQuant] **
open (P = ParadigmsMlt) in { open (P = ParadigmsMlt) in {
} }
-1
View File
@@ -4,7 +4,6 @@ concrete AdverbAra of Adverb = CatAra ** open ResAra, Prelude in {
lin lin
PositAdvAdj a = {s = a.s ! APosit Masc Sg Indef Acc} ; PositAdvAdj a = {s = a.s ! APosit Masc Sg Indef Acc} ;
PositAdAAdj a = {s = a.s ! APosit Masc Sg Indef Acc} ;
-- ComparAdvAdj cadv a np = { -- ComparAdvAdj cadv a np = {
-- s = cadv.s ++ a.s ! AAdv ++ "مِنْ" ++ np.s ! Gen -- s = cadv.s ++ a.s ! AAdv ++ "مِنْ" ++ np.s ! Gen
-- } ; -- } ;
-10
View File
@@ -17,16 +17,6 @@ lincat
lin lin
ready_VP = mkVP (mascA "مُسْتَعِدّ") ;
has_age_VP card = mkVP (mkNP card (mkN "سَنَة" "سَنَوَات" fem nohum)) ;
cup_of_CN np = mkCN (mkN "كُوب" "أَكْوَاب" masc nohum)
(SyntaxAra.mkAdv possess_Prep np) ;
n_units_of_NP card cn np =
mkNP card (mkCN cn (SyntaxAra.mkAdv possess_Prep np)) ;
timeunitAdv n time = timeunitAdv n time =
let n_card : Card = n ; let n_card : Card = n ;
n_hours_NP : NP = mkNP n_card time ; n_hours_NP : NP = mkNP n_card time ;
+4 -119
View File
@@ -4,23 +4,16 @@ concrete ExtendAra of Extend =
CatAra ** ExtendFunctor - [ CatAra ** ExtendFunctor - [
GenNP, ApposNP, ICompAP, DetNPMasc, DetNPFem, GenNP, ApposNP, ICompAP, DetNPMasc, DetNPFem,
EmptyRelSlash, PredAPVP, EmptyRelSlash, PredAPVP,
ComplDirectVS, ComplDirectVQ, UttAdV, -- because of Utt ComplDirectVS, ComplDirectVQ, -- because of Utt
VPS, MkVPS, PredVPS, BaseVPS, ConsVPS, ConjVPS, VPS, MkVPS, PredVPS, BaseVPS, ConsVPS, ConjVPS,
VPI, MkVPI, BaseVPI, ConsVPI, ConjVPI, ComplVPIVV,
BaseComp, ConsComp, ConjComp,
BaseImp, ConsImp, ConjImp,
EmbedSSlash, AdjAsNP, GerundNP, EmbedSSlash, AdjAsNP, GerundNP,
PassVPSlash, ---- bogus implementation, see below PassVPSlash, ---- bogus implementation, see below
PassAgentVPSlash, PresPartAP, PastPartAP, PastPartAgentAP, ProgrVPSlash,
ReflPron, ReflPoss, AdvRNP, AdvRVP, AdvRAP, PossPronRNP,
CompoundAP, GerundCN, GerundAdv, ByVP, PositAdVAdj,
CompoundN, UseDAP, UseDAPMasc, UseDAPFem CompoundN, UseDAP, UseDAPMasc, UseDAPFem
] ]
with (Grammar=GrammarAra) with (Grammar=GrammarAra)
** open ** open
ResAra, ResAra,
(P=ParamX),
Prelude, Prelude,
ParadigmsAra, ParadigmsAra,
RelativeAra, RelativeAra,
@@ -38,8 +31,6 @@ lin
-- : NP -> NP -> NP -- : NP -> NP -> NP
ApposNP np1 np2 = np2 ** {s = \\c => np1.s ! c ++ np2.s ! c} ; ApposNP np1 np2 = np2 ** {s = \\c => np1.s ! c ++ np2.s ! c} ;
UttAdV adv = {s = \\_ => adv.s} ;
-- : AP -> IComp ; -- "how old" -- : AP -> IComp ; -- "how old"
ICompAP ap = {s = \\gn => "كَمْ" ++ ap.s ! NoHum ! gn.g ! gn.n ! Indef ! Acc} ; ICompAP ap = {s = \\gn => "كَمْ" ++ ap.s ! NoHum ! gn.g ! gn.n ! Indef ! Acc} ;
@@ -78,10 +69,6 @@ lin
lincat lincat
VPS = {s : PerGenNum => Str} ; -- finite VP's with tense and polarity VPS = {s : PerGenNum => Str} ; -- finite VP's with tense and polarity
[VPS] = {s1,s2 : PerGenNum => Str} ; [VPS] = {s1,s2 : PerGenNum => Str} ;
VPI = {s : Str} ;
[VPI] = {s1,s2 : Str} ;
[Comp] = {s1,s2 : AAgr => ResAra.Case => Str} ;
[Imp] = {s1,s2 : P.Polarity => ResAra.Gender => ResAra.Number => Str} ;
lin lin
-- : Temp -> Pol -> VP -> VPS ; -- hasn't slept -- : Temp -> Pol -> VP -> VPS ; -- hasn't slept
MkVPS t p vp = { MkVPS t p vp = {
@@ -106,70 +93,11 @@ lin
s = \\_ => np.s ! Nom ++ vps.s ! np.a.pgn -- first quick version with order always Nominal. s = \\_ => np.s ! Nom ++ vps.s ! np.a.pgn -- first quick version with order always Nominal.
} ; -- if necessary, change VPS into {s : PerGenNum => Order => {before,after : Str}} } ; -- if necessary, change VPS into {s : PerGenNum => Order => {before,after : Str}}
MkVPI vp = {s = uttVP VPGer vp ! Masc} ;
BaseVPI x y = {s1 = x.s ; s2 = y.s} ;
ConsVPI x xs = {s1 = x.s ++ SOFT_BIND ++ "," ++ xs.s1 ; s2 = xs.s2} ;
ConjVPI conj xs = {s = xs.s1 ++ conj.s2 ++ xs.s2} ;
ComplVPIVV vv vpi = insertStr (vv.s2 ++ vpi.s) (predV vv) ;
BaseComp x y = {
s1 = \\agr,cas => x.s ! agr ! cas ++ x.obj.s ;
s2 = \\agr,cas => y.s ! agr ! cas ++ y.obj.s
} ;
ConsComp x xs = {
s1 = \\agr,cas => x.s ! agr ! cas ++ x.obj.s ++ SOFT_BIND ++ "," ++ xs.s1 ! agr ! cas ;
s2 = xs.s2
} ;
ConjComp conj xs = {
s = \\agr,cas => xs.s1 ! agr ! cas ++ conj.s2 ++ xs.s2 ! agr ! cas ;
obj = emptyObj ;
isNP = False
} ;
BaseImp x y = {s1 = x.s ; s2 = y.s} ;
ConsImp x xs = {
s1 = \\p,g,n => x.s ! p ! g ! n ++ SOFT_BIND ++ "," ++ xs.s1 ! p ! g ! n ;
s2 = xs.s2
} ;
ConjImp conj xs = {
s = \\p,g,n => xs.s1 ! p ! g ! n ++ conj.s2 ++ xs.s2 ! p ! g ! n
} ;
-- AR 24-02-08 -- AR 24-02-08
PassVPSlash vpslash = vpslash ** { PassVPSlash vpslash = vpslash ** {s = \\pgn, vpf => vpslash.s ! pgn ! vpf} ;
s = \\pgn,vpf => case vpf of { ---- vpf does not have passive forms left,
VPPerf => vpslash.s ! pgn ! VPPassPerf ; ---- so this function is not possible with the current lincat of VP and VPSlash
VPImpf m => vpslash.s ! pgn ! VPPassImpf m ;
_ => vpslash.s ! pgn ! vpf
} ;
obj = emptyObj ;
c2 = accPrep ;
agrObj = \\_ => []
} ;
PassAgentVPSlash vpslash agent =
insertStr ("مِنْ قِبَلِ" ++ agent.s ! Gen) (PassVPSlash vpslash) ;
PresPartAP vp = {
s = \\h,g,n,_,_ => presentRelative ! h ! g ! n
++ vp.s ! Per3 g n ! VPImpf Ind
++ vp.obj.s ++ vp.pred.s ! {g = g ; n = n} ! Acc ++ vp.s2
} ;
PastPartAP vpslash = {
s = \\_,_,_,_,_ =>
vpslash.s ! Per3 Masc ResAra.Sg ! VPPPart
++ vpslash.obj.s ++ vpslash.s2
} ;
PastPartAgentAP vpslash agent =
let ap = PastPartAP vpslash in ap ** {
s = \\h,g,n,d,c => ap.s ! h ! g ! n ! d ! c
++ "مِنْ قِبَلِ" ++ agent.s ! Gen
} ;
ProgrVPSlash vpslash = vpslash ;
---- very unsure about this as well ---- very unsure about this as well
CompoundN a b = b ** { CompoundN a b = b ** {
@@ -204,47 +132,4 @@ lin UseDAPFem dap = case dap.isEmpty of {
} ; } ;
False => emptyNP ** {s = dap.s ! NoHum ! Fem} } ; False => emptyNP ** {s = dap.s ! NoHum ! Fem} } ;
lin ReflPoss num cn =
DetCN (DetQuant (PossPron he_Pron) num) cn ;
ReflPron = lin NP (indeclNP "نَفْسِهِ" ResAra.Sg) ;
AdvRNP np prep rnp = AdvNP np (PrepNP prep rnp) ;
AdvRVP vp prep rnp = AdvVP vp (PrepNP prep rnp) ;
AdvRAP ap prep rnp = AdvAP ap (PrepNP prep rnp) ;
PossPronRNP pron num cn rnp =
DetCN (DetQuant (PossPron pron) num)
(PossNP cn rnp) ;
GerundCN vp = useN {
s = \\_,_,_ => uttVP VPGer vp ! Masc ;
s2 = emptyNTable ;
g = Masc ;
h = NoHum ;
isDual = False
} ;
GerundAdv vp = {s = uttVP VPGer vp ! Masc} ;
ByVP vp = {s = "بِـ" ++ uttVP VPGer vp ! Masc} ;
CompoundAP n a =
let ap = Grammar.PositA a in ap ** {
s = \\h,g,num,d,c => ap.s ! h ! g ! num ! d ! c
++ n.s ! ResAra.Sg ! Const ! Gen
} ;
PositAdVAdj a = {s = a.s ! APosit Masc ResAra.Sg Indef Acc} ;
oper presentRelative : ResAra.Species => ResAra.Gender => ResAra.Number => Str = table {
NoHum => \\_,_ => "الَّتِي" ;
Hum => table {
Masc => table {
ResAra.Sg => "الَّذِي" ; Dl => "اللَّذَانِ" ; ResAra.Pl => "الَّذِينَ"
} ;
Fem => table {
ResAra.Sg => "الَّتِي" ; Dl => "اللَّتَانِ" ; ResAra.Pl => "اللَّاتِي"
}
}
} ;
} }
+2 -10
View File
@@ -44,17 +44,9 @@ concrete IdiomAra of Idiom = CatAra ** open
-- ExistIPAdv : IP -> Adv -> QCl ; -- which houses are there in Paris -- ExistIPAdv : IP -> Adv -> QCl ; -- which houses are there in Paris
-- Arabic normally expresses the unmarked progressive with the -- ProgrVP : VP -> VP ; -- be sleeping
-- imperfect, so no extra auxiliary is required here.
ProgrVP vp = vp ;
-- The first-person plural jussive prefixed by لِ is the usual -- ImpPl1 : VP -> Utt ; -- let's go
-- hortative construction: لِنَذْهَبْ "let us go".
ImpPl1 vp = {s = \\_ => "لِ" ++ BIND
++ vp.s ! Per1 Plur ! VPImpf Jus
++ vp.obj.s
++ vp.pred.s ! {g = Masc ; n = Pl} ! Acc
++ vp.s2} ;
-- ImpP3 : NP -> VP -> Utt ; -- let John walk -- ImpP3 : NP -> VP -> Utt ; -- let John walk
-6
View File
@@ -11,12 +11,6 @@ lin FullName gn sn = emptyNP ** {
lin UseLN ln = ln ; lin UseLN ln = ln ;
lin AdjLN ap ln = ln ** {
s = \\c => ln.s ! c
++ ap.s ! NoHum ! (pgn2gn ln.a.pgn).g
! (pgn2gn ln.a.pgn).n ! Def ! c
} ;
lin PlainLN ln = ln ; lin PlainLN ln = ln ;
lin InLN n = A.PrepNP S.in_Prep n ; ---- TODO: alternative prepositions lin InLN n = A.PrepNP S.in_Prep n ; ---- TODO: alternative prepositions
-18
View File
@@ -75,24 +75,6 @@ lin
}; };
-} -}
PartNP cn np = cn ** {
np = \\c => cn.np ! c ++ "مِنْ" ++ np.s ! Gen ;
isHeavy = True
} ;
CountNP det np = emptyNP ** {
s = \\c => det.s ! NoHum ! Masc ! c ++ "مِنْ" ++ np.s ! Gen ;
a = {pgn = agrP3 NoHum Masc (sizeToNumber det.n) ; isPron = False} ;
isHeavy = True
} ;
AdjDAP dap ap = dap ** {
s = \\h,g,c => dap.s ! h ! g ! c
++ ap.s ! h ! g ! (sizeToNumber dap.n) ! dap.d ! c
} ;
ExtAdvNP np adv = AdvNP np adv ;
AdvNP np adv = np ** { AdvNP np adv = np ** {
s = \\c => np.s ! c ++ adv.s ; s = \\c => np.s ! c ++ adv.s ;
isHeavy = True ; isHeavy = True ;
-40
View File
@@ -105,46 +105,6 @@ lincat
-- s = \\c => n.s ! NCard ++ "تهُْسَند" ++ m.s ! c ; n = Pl} ; -- s = \\c => n.s ! NCard ++ "تهُْسَند" ++ m.s ! c ; n = Pl} ;
lin pot3as4 n = n ; lin pot3as4 n = n ;
-- Arabic treats the scale nouns as ordinary masculine count nouns: the
-- numeral therefore has feminine polarity with 3--10 (ثلاثة ملايين), while
-- one million is conventionally written without an overt "one".
lin pot41 = {
s = \\co,_,d,c => case co of {
NCard => defArt d c "مِلْيُون" ;
NOrd => defArt d c "مِلْيُونِيّ"
} ;
n = One
} ;
lin pot4 m = {
s = \\co,_,d,c => case m.n of {
One => defArt d c "مِلْيُون" ;
Two => m.s ! co ! Fem ! d ! c ++ "مِلْيُون" ;
ThreeTen => m.s ! co ! Fem ! d ! c ++ "مَلَايِين" ;
_ => m.s ! co ! Fem ! d ! c ++ "مِلْيُون"
} ;
n = m.n
} ;
lin pot51 = {
s = \\co,_,d,c => case co of {
NCard => defArt d c "مِلْيَار" ;
NOrd => defArt d c "مِلْيَارِيّ"
} ;
n = One
} ;
lin pot5 m = {
s = \\co,_,d,c => case m.n of {
One => defArt d c "مِلْيَار" ;
Two => m.s ! co ! Fem ! d ! c ++ "مِلْيَار" ;
ThreeTen => m.s ! co ! Fem ! d ! c ++ "مِلْيَارَات" ;
_ => m.s ! co ! Fem ! d ! c ++ "مِلْيَار"
} ;
n = m.n
} ;
lin pot4as5 n = n ; lin pot4as5 n = n ;
-- numerals as sequences of digits -- numerals as sequences of digits
+4 -7
View File
@@ -907,6 +907,10 @@ param VerbForm =
FormI | FormII | FormIII | FormIV | FormV | FormVI | FormVII | FormVIII | FormX | FormXI ; FormI | FormII | FormIII | FormIV | FormV | FormVI | FormVII | FormVIII | FormX | FormXI ;
-- paradigms for Wiktionary extraction
---- TODO: better usage of information in Wiktionary
oper oper
wmkN = overload { wmkN = overload {
wmkN : {sg, pl : Str ; g : Gender} -> N wmkN : {sg, pl : Str ; g : Gender} -> N
@@ -997,11 +1001,4 @@ oper
= \r -> variants {} ; ---- mkV r.imperfect ; -- expects cls I = \r -> variants {} ; ---- mkV r.imperfect ; -- expects cls I
} ; } ;
invarCard : Str -> Size -> NumOrdCard = \s,n -> {
s = \\_,_,_ => s ; n = n ; isNum = False
} ;
invarQuant : Str -> State -> Quant = \s,d -> lin Quant baseQuant ** {
s = \\_,_,_,_ => s ; d = d
} ;
} ; } ;
-2
View File
@@ -22,8 +22,6 @@ concrete PhraseAra of Phrase = CatAra ** open
UttS s = {s = \\_ => s.s ! Verbal} ; UttS s = {s = \\_ => s.s ! Verbal} ;
UttAdv, UttAdv,
UttIAdv = \s -> {s = \\_ => s.s} ; ---- OK? AR UttIAdv = \s -> {s = \\_ => s.s} ; ---- OK? AR
VocNP np = {s = "يَا" ++ np.s ! Nom} ;
-- --
NoPConj = {s = []} ; NoPConj = {s = []} ;
-- PConjConj conj = conj ; -- PConjConj conj = conj ;
+2 -8
View File
@@ -465,11 +465,8 @@ oper
param param
VPForm = VPPerf VPForm = VPPerf
| VPPassPerf
| VPImpf Mood | VPImpf Mood
| VPPassImpf Mood
| VPImp | VPImp
| VPPPart
| VPGer ; | VPGer ;
VType = -- indicates if there is a predicate (xabar): VType = -- indicates if there is a predicate (xabar):
@@ -503,11 +500,8 @@ oper
let gn = pgn2gn pgn in let gn = pgn2gn pgn in
case vf of { case vf of {
VPPerf => v.s ! VPerf Act pgn ; VPPerf => v.s ! VPerf Act pgn ;
VPPassPerf => v.s ! VPerf Pas pgn ;
VPImpf m => v.s ! VImpf m Act pgn ; VPImpf m => v.s ! VImpf m Act pgn ;
VPPassImpf m => v.s ! VImpf m Pas pgn ;
VPImp => v.s ! VImp gn.g gn.n ; VPImp => v.s ! VImp gn.g gn.n ;
VPPPart => v.s ! VPPart ;
VPGer => v.s ! Masdar VPGer => v.s ! Masdar
}; };
sc = noPrep ; sc = noPrep ;
@@ -521,8 +515,8 @@ oper
let actVP = predV v in actVP ** { let actVP = predV v in actVP ** {
s = \\pgn,vf => s = \\pgn,vf =>
case vf of { case vf of {
VPPerf => actVP.s ! pgn ! VPPassPerf ; VPPerf => v.s ! VPerf Pas pgn ;
VPImpf m => actVP.s ! pgn ! VPPassImpf m ; VPImpf m => v.s ! VImpf m Pas pgn ;
_ => actVP.s ! pgn ! vf _ => actVP.s ! pgn ! vf
} }
}; };
+1 -14
View File
@@ -15,8 +15,6 @@ concrete SentenceAra of Sentence = CatAra ** open
PredVP = predVP ; PredVP = predVP ;
PredSCVP sc vp = predVP (indeclNP sc.s ResAra.Sg) vp ;
ImpVP vp = { ImpVP vp = {
s = \\p,g,n => s = \\p,g,n =>
case p of { case p of {
@@ -39,15 +37,8 @@ concrete SentenceAra of Sentence = CatAra ** open
SlashVP = predVPSlash ; SlashVP = predVPSlash ;
AdvSlash slash adv = slash ** { s2 = slash.s2 ++ adv.s } ; AdvSlash slash adv = slash ** { s2 = slash.s2 ++ adv.s } ;
AdvImp adv imp = {s = \\p,g,n => adv.s ++ imp.s ! p ! g ! n} ;
-- : Cl -> Prep -> ClSlash -- : Cl -> Prep -> ClSlash
SlashPrep cl prep = (predV copula) ** { -- SlashPrep cl prep = TODO
s = \\_,_ => cl.s ! Pres ! Pos ! Verbal ;
c2 = prep ;
agrObj = \\_ => [] ;
subj = np2subj emptyNP
} ;
-- SlashVS np vs sslash = TODO -- SlashVS np vs sslash = TODO
@@ -81,8 +72,4 @@ concrete SentenceAra of Sentence = CatAra ** open
AdvS adv s = s ** {s = \\o => adv.s ++ s.s ! o} ; AdvS adv s = s ** {s = \\o => adv.s ++ s.s ! o} ;
ExtAdvS adv s = s ** {s = \\o => adv.s ++ s.s ! o} ; ExtAdvS adv s = s ** {s = \\o => adv.s ++ s.s ! o} ;
SSubjS s1 subj s2 = {
s = \\o => s1.s ! o ++ SOFT_BIND ++ "," ++ subj.s ++ s2.s ! subj.o
} ;
} }
-8
View File
@@ -43,10 +43,6 @@ concrete VerbAra of Verb = CatAra ** open Prelude, ResAra, ParamX in {
} ; } ;
SlashV2a = slashV2 ; SlashV2a = slashV2 ;
-- The adjective is a secondary predicate of the missing object.
-- Keeping it in `pred` lets ComplSlash supply the agreement features.
SlashV2A v ap = slashV2 v ** {pred = CompAP ap} ;
Slash2V3 v np = insertObj np (slashV2 v) ** {c2 = v.c3 ; agrObj = \\_ => []}; Slash2V3 v np = insertObj np (slashV2 v) ** {c2 = v.c3 ; agrObj = \\_ => []};
Slash3V3 v np = Slash3V3 v np =
@@ -112,10 +108,6 @@ concrete VerbAra of Verb = CatAra ** open Prelude, ResAra, ParamX in {
AdVVP adv = insertStr adv.s ; AdVVP adv = insertStr adv.s ;
AdVVPSlash adv vps = vps ** insertStr adv.s vps ; AdVVPSlash adv vps = vps ** insertStr adv.s vps ;
AdvVPSlash vps adv = vps ** insertStr adv.s vps ;
ExtAdvVP vp adv = insertStr adv.s vp ;
-- : VPSlash -> VP ; -- love himself -- : VPSlash -> VP ; -- love himself
ReflVP vps = vps ** { ReflVP vps = vps ** {
s = \\pgn,vf => vps.s ! pgn ! vf s = \\pgn,vf => vps.s ! pgn ! vf
+2 -17
View File
@@ -1,19 +1,4 @@
concrete AdjectiveHye of Adjective = CatHye ** open ResHye, Prelude in { concrete AdjectiveHye of Adjective = CatHye ** {
lin lin
AdAP ada ap = { PositA a = a ;
s = \\sp,c,num => ada.s ++ ap.s ! sp ! c ! num;
isPre = ap.isPre
} ;
PositA a = {
s = \\sp,c,num =>
case <sp,c> of {
<Def,Nom> => a.def_nom ! num ;
<Def,Dat> => a.def_dat ! num ;
<Poss P1,_> => a.poss1 ! c ! num ;
<Poss P2,_> => a.poss2 ! c ! num ;
_ => a.s ! c ! num
} ;
isPre = True
} ;
} }
-6
View File
@@ -1,6 +0,0 @@
concrete AdverbHye of Adverb = CatHye ** open Prelude,ResHye in {
lin PrepNP p np = {s = case p.isPre of {
False => np.s ! p.c ++ p.s;
True => p.s ++ np.s ! p.c
}} ;
}
+11 -58
View File
@@ -1,63 +1,16 @@
concrete CatHye of Cat = CommonX ** open Prelude,ResHye in { concrete CatHye of Cat = CommonX ** open ResHye in {
lincat A = Adj ;
lincat A2 = Adj ** {c2 : Compl} ;
lincat 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 V = Verb ;
lincat VV,VS,VQ,VA = Verb ; lincat VV,VS,VQ,VA = Verb ;
lincat V2 = Verb ** {c2 : Compl} ; lincat V2 = Verb ** {c2 : Compl} ;
lincat V3,V2A,V2S,V2Q,V2V = Verb ** {c2,c3 : Compl} ; lincat V3,V2A,V2S,V2Q,V2V = Verb ** {c2,c3 : Compl} ;
lincat VP = {s : Str; lincat N = Noun ;
conditional : Aspect => Person => Number => Str; lincat N2 = Noun ** {c2 : Compl} ;
converb : {imperfective : Str; futCon1 : Str; futCon2 : Str; lincat N3 = Noun ** {c2,c3 : Compl} ;
negative : Str; perfective : Str; simultaneous : Str}; lincat CN = Noun ;
imperative : Number => Str; passive : Str; lincat A = Adj ;
past : Person => Number => Str; participle : PartType => Str; lincat A2 = Adj ** {c2 : Compl} ;
subjunctive : Aspect => Person => Number => Str} ; lincat AP = Adj ;
lincat VPSlash = Verb ** {c2 : Compl} ; lincat Prep = Compl ;
} }
+25 -25
View File
@@ -15,50 +15,50 @@ lin
paragraph (x.s) ++ paragraph (x.s) ++
heading1 "Converb" ++ heading1 "Converb" ++
frameTable ( frameTable (
tr (th "Imperfective" ++ td (x.converb.imperfective)) ++ tr (th "Imperfective" ++ td (x.Converb.Imperfective)) ++
tr (th "Simultaneous" ++ td (x.converb.simultaneous)) ++ tr (th "Simultaneous" ++ td (x.Converb.Simultaneous)) ++
tr (th "Perfective" ++ td (x.converb.perfective)) ++ tr (th "Perfective" ++ td (x.Converb.Perfective)) ++
tr (th "Futute I" ++ td (x.converb.futCon1)) ++ tr (th "Futute I" ++ td (x.Converb.FutCon1)) ++
tr (th "Futute II" ++ td (x.converb.futCon2)) ++ tr (th "Futute II" ++ td (x.Converb.FutCon2)) ++
tr (th "Connegative" ++ td (x.converb.negative))) ++ tr (th "Connegative" ++ td (x.Converb.Negative))) ++
heading1 "Passive" ++ heading1 "Passive" ++
paragraph x.passive ++ paragraph x.Passive ++
heading1 "Participle" ++ heading1 "Participle" ++
frameTable ( frameTable (
tr (th "Resultative" ++ td (x.participle ! Resultative)) ++ tr (th "Resultative" ++ td (x.Participle ! Resultative)) ++
tr (th "Subject" ++ td (x.participle ! Subject))) ++ tr (th "Subject" ++ td (x.Participle ! Subject))) ++
heading1 "Past" ++ heading1 "Past" ++
frameTable ( frameTable (
tr (th "" ++ th "Sg" ++ th "Pl") ++ tr (th "" ++ th "Sg" ++ th "Pl") ++
tr (th "P1" ++ td (x.past ! P1 ! Sg) ++ td (x.past ! P1 ! Pl)) ++ tr (th "P1" ++ td (x.Past ! P1 ! Sg) ++ td (x.Past ! P1 ! Pl)) ++
tr (th "P2" ++ td (x.past ! P2 ! Sg) ++ td (x.past ! P2 ! Pl)) ++ tr (th "P2" ++ td (x.Past ! P2 ! Sg) ++ td (x.Past ! P2 ! Pl)) ++
tr (th "P3" ++ td (x.past ! P3 ! Sg) ++ td (x.past ! P3 ! Pl))) ++ tr (th "P3" ++ td (x.Past ! P3 ! Sg) ++ td (x.Past ! P3 ! Pl))) ++
heading1 "Subjunctive" ++ heading1 "Subjunctive" ++
frameTable ( frameTable (
tr (intagAttr "th" "colspan=\"2\"" "" ++ th "Sg" ++ th "Pl") ++ tr (intagAttr "th" "colspan=\"2\"" "" ++ th "Sg" ++ th "Pl") ++
tr (intagAttr "th" "rowspan=\"3\"" "Perfect" ++ tr (intagAttr "th" "rowspan=\"3\"" "Perfect" ++
th "P1" ++ td (x.subjunctive ! Perfect ! P1 ! Sg) ++ td (x.subjunctive ! Perfect ! P1 ! Pl)) ++ th "P1" ++ td (x.Subjunctive ! Perfect ! P1 ! Sg) ++ td (x.Subjunctive ! Perfect ! P1 ! Pl)) ++
tr (th "P2" ++ td (x.subjunctive ! Perfect ! P2 ! Sg) ++ td (x.subjunctive ! Perfect ! P2 ! Pl)) ++ tr (th "P2" ++ td (x.Subjunctive ! Perfect ! P2 ! Sg) ++ td (x.Subjunctive ! Perfect ! P2 ! Pl)) ++
tr (th "P3" ++ td (x.subjunctive ! Perfect ! P3 ! Sg) ++ td (x.subjunctive ! Perfect ! P3 ! Pl)) ++ tr (th "P3" ++ td (x.Subjunctive ! Perfect ! P3 ! Sg) ++ td (x.Subjunctive ! Perfect ! P3 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"3\"" "Non_Past" ++ tr (intagAttr "th" "rowspan=\"3\"" "Non_Past" ++
th "P1" ++ td (x.subjunctive ! Non_Past ! P1 ! Sg) ++ td (x.subjunctive ! Non_Past ! P1 ! Pl)) ++ th "P1" ++ td (x.Subjunctive ! Non_Past ! P1 ! Sg) ++ td (x.Subjunctive ! Non_Past ! P1 ! Pl)) ++
tr (th "P2" ++ td (x.subjunctive ! Non_Past ! P2 ! Sg) ++ td (x.subjunctive ! Non_Past ! P2 ! Pl)) ++ tr (th "P2" ++ td (x.Subjunctive ! Non_Past ! P2 ! Sg) ++ td (x.Subjunctive ! Non_Past ! P2 ! Pl)) ++
tr (th "P3" ++ td (x.subjunctive ! Non_Past ! P3 ! Sg) ++ td (x.subjunctive ! Non_Past ! P3 ! Pl))) ++ tr (th "P3" ++ td (x.Subjunctive ! Non_Past ! P3 ! Sg) ++ td (x.Subjunctive ! Non_Past ! P3 ! Pl))) ++
heading1 "Conditional" ++ heading1 "Conditional" ++
frameTable ( frameTable (
tr (intagAttr "th" "colspan=\"2\"" "" ++ th "Sg" ++ th "Pl") ++ tr (intagAttr "th" "colspan=\"2\"" "" ++ th "Sg" ++ th "Pl") ++
tr (intagAttr "th" "rowspan=\"3\"" "Perfect" ++ tr (intagAttr "th" "rowspan=\"3\"" "Perfect" ++
th "P1" ++ td (x.conditional ! Perfect ! P1 ! Sg) ++ td (x.conditional ! Perfect ! P1 ! Pl)) ++ th "P1" ++ td (x.Conditional ! Perfect ! P1 ! Sg) ++ td (x.Conditional ! Perfect ! P1 ! Pl)) ++
tr (th "P2" ++ td (x.conditional ! Perfect ! P2 ! Sg) ++ td (x.conditional ! Perfect ! P2 ! Pl)) ++ tr (th "P2" ++ td (x.Conditional ! Perfect ! P2 ! Sg) ++ td (x.Conditional ! Perfect ! P2 ! Pl)) ++
tr (th "P3" ++ td (x.conditional ! Perfect ! P3 ! Sg) ++ td (x.conditional ! Perfect ! P3 ! Pl)) ++ tr (th "P3" ++ td (x.Conditional ! Perfect ! P3 ! Sg) ++ td (x.Conditional ! Perfect ! P3 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"4\"" "Non_Past" ++ tr (intagAttr "th" "rowspan=\"4\"" "Non_Past" ++
th "P1" ++ td (x.conditional ! Non_Past ! P1 ! Sg) ++ td (x.conditional ! Non_Past ! P1 ! Pl)) ++ th "P1" ++ td (x.Conditional ! Non_Past ! P1 ! Sg) ++ td (x.Conditional ! Non_Past ! P1 ! Pl)) ++
tr (th "P2" ++ td (x.conditional ! Non_Past ! P2 ! Sg) ++ td (x.conditional ! Non_Past ! P2 ! Pl)) ++ tr (th "P2" ++ td (x.Conditional ! Non_Past ! P2 ! Sg) ++ td (x.Conditional ! Non_Past ! P2 ! Pl)) ++
tr (th "P3" ++ td (x.conditional ! Non_Past ! P3 ! Sg) ++ td (x.conditional ! Non_Past ! P3 ! Pl))) ++ tr (th "P3" ++ td (x.Conditional ! Non_Past ! P3 ! Sg) ++ td (x.Conditional ! Non_Past ! P3 ! Pl))) ++
heading1 "Imperative" ++ heading1 "Imperative" ++
frameTable ( frameTable (
tr (th "Sg" ++ th "Pl") ++ tr (th "Sg" ++ th "Pl") ++
tr (td (x.imperative ! Sg) ++ td (x.imperative ! Pl))) ; tr (td (x.Imperative_Jussive ! Sg) ++ td (x.Imperative_Jussive ! Pl))) ;
s3=[] s3=[]
} ; } ;
lin lin
+1 -5
View File
@@ -2,9 +2,5 @@ concrete GrammarHye of Grammar =
TenseX, TenseX,
PhraseHye, PhraseHye,
NounHye, NounHye,
VerbHye, AdjectiveHye ** {
AdjectiveHye,
AdverbHye,
SentenceHye,
StructuralHye ** {
} }
-3
View File
@@ -1,5 +1,2 @@
concrete LexiconHye of Lexicon = CatHye ** open ParadigmsHye in { concrete LexiconHye of Lexicon = CatHye ** open ParadigmsHye in {
lin apple_N = mkN001 "խնձոր" ;
lin man_N = mkN047 "տղամարդ" ;
lin woman_N = mkN034 "կին" ;
} }
+375 -375
View File
File diff suppressed because it is too large Load Diff
+3 -34
View File
@@ -1,35 +1,4 @@
concrete NounHye of Noun = CatHye ** open ResHye in { concrete NounHye of Noun = CatHye ** {
lin AdjCN ap cn = { lin
s = \\sp,c,n => UseN n = n ;
case ap.isPre of {
True => ap.s ! Indef ! Nom ! Sg ++ cn.s ! sp ! c ! n;
False => cn.s ! sp ! c ! n ++ ap.s ! Indef ! Nom ! Sg
}
} ;
lin AdvCN cn adv = {
s = \\sp,c,num => adv.s ++ cn.s ! sp ! c ! num
} ;
lin DefArt = {s = []; sp = Def} ;
lin DetCN det cn = {s = \\c => det.s ++ cn.s ! det.sp ! c ! det.n;
a = {n=det.n; p=P3}} ;
lin DetQuant quant num = {s = quant.s ++ num.s; n = num.n; sp=quant.sp} ;
lin IndefArt = {s = "մի"; sp = Indef} ;
lin NumPl = {s = []; n = Pl} ;
lin NumSg = {s = []; n = Sg} ;
lin MassNP cn = {
s = \\c => cn.s ! Indef ! c ! Sg;
a = {n=Sg; p=P3}
} ;
lin PossPron pron = {s = pron.empty; sp = Poss pron.a.p} ;
lin UseN n = {
s = \\sp,c,num =>
case <sp,c> of {
<Def,Nom> => n.def_nom ! num ;
<Def,Dat> => n.def_dat ! num ;
<Poss P1,_> => n.poss1 ! c ! num ;
<Poss P2,_> => n.poss2 ! c ! num ;
_ => n.s ! c ! num
}
} ;
lin UsePron pron = {s = \\c => pron.s; a=pron.a} ;
} }
+3 -12
View File
@@ -468,19 +468,16 @@ oper
mkInterj : Str -> Interj = \s -> lin Interj {s=s} ; mkInterj : Str -> Interj = \s -> lin Interj {s=s} ;
mkMU : Str -> MU = \s -> lin MU {s=s; isPre=False} ; mkMU : Str -> MU = \s -> lin MU {s=s; isPre=False} ;
mkPrep : Str -> Prep = \s -> lin Prep {s=s; c=Dat; isPre=False} ; mkPrep : Str -> Prep = \s -> lin Prep {s=s; c=Dat} ;
singular : Number = Sg ;
plural : Number = Pl ;
mkIAdv : Str -> IAdv = \s -> lin IAdv {s=s} ; mkIAdv : Str -> IAdv = \s -> lin IAdv {s=s} ;
mkIP : Str -> IP = \s -> lin IP {s=s} ; mkIP : Str -> IP = \s -> lin IP {s=s} ;
mkIQuant : Str -> IQuant = \s -> lin IQuant {s=s} ; mkIQuant : Str -> IQuant = \s -> lin IQuant {s=s} ;
mkIDet : Str -> IDet = \s -> lin IDet {s=s} ; mkIDet : Str -> IDet = \s -> lin IDet {s=s} ;
mkSubj : Str -> Subj = \s -> lin Subj {s=s} ; mkSubj : Str -> Subj = \s -> lin Subj {s=s} ;
mkQuant : Str -> Quant = \s -> lin Quant {s=s; sp=Indef} ; mkQuant : Str -> Quant = \s -> lin Quant {s=s} ;
mkDet : Str -> Number -> Det = \s,n -> lin Det {s=s; n=n; sp=Indef} ;
mkPredet : Str -> Predet = \s -> lin Predet {s=s} ; mkPredet : Str -> Predet = \s -> lin Predet {s=s} ;
mkDet : Str -> Det = \s -> lin Det {s=s} ;
mkCard : Str -> Card = \s -> lin Card {s=s} ; mkCard : Str -> Card = \s -> lin Card {s=s} ;
mkConj : Str -> Conj = \s -> lin Conj {s=s} ; mkConj : Str -> Conj = \s -> lin Conj {s=s} ;
mkPConj : Str -> PConj = \s -> lin PConj {s=s} ; mkPConj : Str -> PConj = \s -> lin PConj {s=s} ;
@@ -491,10 +488,4 @@ oper
mkSN : Str -> SN = \s -> lin SN {s=s} ; mkSN : Str -> SN = \s -> lin SN {s=s} ;
mkPN : Str -> PN = \s -> lin PN {s=s} ; mkPN : Str -> PN = \s -> lin PN {s=s} ;
mkPron : Str -> Number -> Person -> Pron = \s,n,p ->
lin Pron {
s = s ;
empty = [] ;
a = {n = n; p = p}
} ;
} }
+18 -17
View File
@@ -1,14 +1,16 @@
resource ResHye = ParamX ** { resource ResHye = {
param Aspect = Non_Past | Perfect ; param Aspect = Non_Past | Perfect ;
param Person = P1 | P3 | P2 ;
param Number = Sg | Pl ;
param Case = Nom | Dat | Ablat | Instr | Loc ; param Case = Nom | Dat | Ablat | Instr | Loc ;
param PartType = Resultative | Subject ; param PartType = Resultative | Subject ;
oper Verb = {s: Str; causative: Str; conditional: Aspect => Person => Number => Str; converb: {imperfective: Str; futCon1: Str; futCon2: Str; negative: Str; perfective: Str; simultaneous: Str}; imperative: Number => Str; passive: Str; past: Person => Number => Str; participle: PartType => Str; subjunctive: Aspect => Person => Number => Str} ; -- 898 oper Verb = {s: Str; Causative: Str; Conditional: Aspect => Person => Number => Str; Converb: {Imperfective: Str; FutCon1: Str; FutCon2: Str; Negative: Str; Perfective: Str; Simultaneous: Str}; Imperative_Jussive: Number => Str; Passive: Str; Past: Person => Number => Str; Participle: PartType => Str; Subjunctive: Aspect => Person => Number => Str} ; -- 898
oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Verb = oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Verb =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24,f25,f26,f27,f28,f29,f30,f31,f32,f33,f34,f35,f36,f37,f38,f39,f40,f41,f42,f43 -> \f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24,f25,f26,f27,f28,f29,f30,f31,f32,f33,f34,f35,f36,f37,f38,f39,f40,f41,f42,f43 ->
{ s = f1 ; { s = f1 ;
causative = f2 ; Causative = f2 ;
conditional = table { Conditional = table {
Perfect => table { Perfect => table {
P1 => table { P1 => table {
Sg => f3 ; Sg => f3 ;
@@ -38,19 +40,19 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_
} }
} }
} ; } ;
converb = { imperfective = f15 ; Converb = { Imperfective = f15 ;
futCon1 = f16 ; FutCon1 = f16 ;
futCon2 = f17 ; FutCon2 = f17 ;
negative = f18 ; Negative = f18 ;
perfective = f19 ; Perfective = f19 ;
simultaneous = f20 Simultaneous = f20
} ; } ;
imperative = table { Imperative_Jussive = table {
Sg => f21 ; Sg => f21 ;
Pl => f22 Pl => f22
} ; } ;
passive = f23 ; Passive = f23 ;
past = table { Past = table {
P1 => table { P1 => table {
Sg => f24 ; Sg => f24 ;
Pl => f25 Pl => f25
@@ -64,11 +66,11 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_
Pl => f29 Pl => f29
} }
} ; } ;
participle = table { Participle = table {
Resultative => f30 ; Resultative => f30 ;
Subject => f31 Subject => f31
} ; } ;
subjunctive = table { Subjunctive = table {
Perfect => table { Perfect => table {
P1 => table { P1 => table {
Sg => f32 ; Sg => f32 ;
@@ -100,8 +102,7 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_
} }
} ; } ;
param Species = Indef | Def | Poss Person ;
oper Agr = {n : Number; p : Person} ;
oper Noun = {s: Case => Number => Str; def_dat: Number => Str; def_nom: Number => Str; poss1: Case => Number => Str; poss2: Case => Number => Str} ; -- 4880 oper Noun = {s: Case => Number => Str; def_dat: Number => Str; def_nom: Number => Str; poss1: Case => Number => Str; poss2: Case => Number => Str} ; -- 4880
oper mkNoun : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Noun = oper mkNoun : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Noun =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24,f25,f26,f27,f28,f29,f30,f31,f32,f33,f34 -> \f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24,f25,f26,f27,f28,f29,f30,f31,f32,f33,f34 ->
-14
View File
@@ -1,14 +0,0 @@
concrete SentenceHye of Sentence = CatHye ** open Prelude,ResHye in {
lin PredVP np vp = {s = np.s ! Nom ++ vp.s;
conditional = \\a,n => np.s ! Nom ++ vp.conditional ! a ! P3 ! n;
converb = {imperfective = np.s ! Nom ++ vp.converb.imperfective;
futCon1 = np.s ! Nom ++ vp.converb.futCon1;
futCon2 = np.s ! Nom ++ vp.converb.futCon2;
negative = np.s ! Nom ++ vp.converb.negative;
perfective = np.s ! Nom ++ vp.converb.perfective;
simultaneous = np.s ! Nom ++ vp.converb.simultaneous};
passive = np.s ! Nom ++ vp.passive;
past = \\_,n => np.s ! Nom ++ vp.past ! P3 ! n;
participle = \\p => np.s ! Nom ++ vp.participle ! p;
subjunctive = \\a,n => np.s ! Nom ++ vp.subjunctive ! a ! P3 ! n} ;
}
-8
View File
@@ -1,8 +0,0 @@
concrete StructuralHye of Structural = CatHye ** open ResHye, ParadigmsHye in {
lin i_Pron = mkPron "ես" Sg P1 ;
lin youSg_Pron = mkPron "դու" Sg P2 ;
lin he_Pron, she_Pron, it_Pron = mkPron "նա" Sg P3 ;
lin we_Pron = mkPron "մեք" Pl P1 ;
lin youPl_Pron = mkPron "դուք" Pl P2 ;
lin they_Pron = mkPron "նոքա" Pl P3 ;
}
-35
View File
@@ -1,35 +0,0 @@
concrete VerbHye of Verb = CatHye ** open Prelude,ResHye in {
lin AdvVP vp adv = {s = adv.s ++ vp.s;
conditional = \\a,p,n => adv.s ++ vp.conditional ! a ! p ! n;
converb = {imperfective = adv.s ++ vp.converb.imperfective;
futCon1 = adv.s ++ vp.converb.futCon1;
futCon2 = adv.s ++ vp.converb.futCon2;
negative = adv.s ++ vp.converb.negative;
perfective = adv.s ++ vp.converb.perfective;
simultaneous = adv.s ++ vp.converb.simultaneous};
imperative = \\n => vp.imperative ! n ++ adv.s;
passive = adv.s ++ vp.passive;
past = \\p,n => adv.s ++ vp.past ! p ! n;
participle = \\p => adv.s ++ vp.participle ! p;
subjunctive = \\a,p,n => adv.s ++ vp.subjunctive ! a ! p ! n} ;
lin ComplSlash vp np = {s = vp.s ++ vp.c2.s ++ np.s ! vp.c2.c;
conditional = \\a,p,n => vp.conditional ! a ! p ! n
++ vp.c2.s ++ np.s ! vp.c2.c;
converb = {imperfective = vp.converb.imperfective
++ vp.c2.s ++ np.s ! vp.c2.c;
futCon1 = vp.converb.futCon1 ++ vp.c2.s ++ np.s ! vp.c2.c;
futCon2 = vp.converb.futCon2 ++ vp.c2.s ++ np.s ! vp.c2.c;
negative = vp.converb.negative ++ vp.c2.s ++ np.s ! vp.c2.c;
perfective = vp.converb.perfective
++ vp.c2.s ++ np.s ! vp.c2.c;
simultaneous = vp.converb.simultaneous
++ vp.c2.s ++ np.s ! vp.c2.c};
imperative = \\n => vp.imperative ! n ++ vp.c2.s ++ np.s ! Nom;
passive = vp.passive ++ vp.c2.s ++ np.s ! vp.c2.c;
past = \\p,n => vp.past ! p ! n ++ vp.c2.s ++ np.s ! vp.c2.c;
participle = \\p => vp.participle ! p ++ vp.c2.s ++ np.s ! vp.c2.c;
subjunctive = \\a,p,n => vp.subjunctive ! a ! p ! n
++ vp.c2.s ++ np.s ! vp.c2.c} ;
lin SlashV2a v = v ;
lin UseV v = v ;
}
+1 -11
View File
@@ -1,14 +1,4 @@
concrete AdjectiveBel of Adjective = CatBel ** open ResBel in { concrete AdjectiveBel of Adjective = CatBel ** {
lin lin
PositA a = a ; PositA a = a ;
ComparA a np = {s = \\c,gn => "больш" ++ a.s ! c ! gn ++ "за" ++ np.s ! Acc} ;
ComplA2 a np = {s = \\c,gn => a.s ! c ! gn ++ prepNP a.c2 np} ;
ReflA2 a = {s = \\c,gn => a.s ! c ! gn ++ "да сябе"} ;
UseA2 a = a ;
UseComparA a = {s = \\c,gn => "больш" ++ a.s ! c ! gn} ;
CAdvAP cadv ap np = {s = \\c,gn => cadv.s ++ ap.s ! c ! gn ++ cadv.p ++ np.s ! Nom} ;
AdjOrd ord = ord ;
SentAP ap sc = {s = \\c,gn => ap.s ! c ! gn ++ sc.s} ;
AdAP ada ap = {s = \\c,gn => ada.s ++ ap.s ! c ! gn} ;
AdvAP ap adv = {s = \\c,gn => ap.s ! c ! gn ++ adv.s} ;
} }
-13
View File
@@ -1,13 +0,0 @@
concrete AdverbBel of Adverb = CatBel ** open ResBel in {
lin
PositAdvAdj a = {s = a.s ! Nom ! GSg Neuter} ;
PrepNP prep np = {s = prepNP prep np} ;
ComparAdvAdj cadv a np = {s = cadv.s ++ a.s ! Nom ! GSg Neuter ++ cadv.p ++ np.s ! Nom} ;
ComparAdvAdjS cadv a s = {s = cadv.s ++ a.s ! Nom ! GSg Neuter ++ cadv.p ++ s.s} ;
AdAdv ada adv = {s = ada.s ++ adv.s} ;
PositAdAAdj a = {s = a.s ! Nom ! GSg Neuter} ;
SubjS subj s = {s = subj.s ++ s.s} ;
AdnCAdv cadv = {s = cadv.s} ;
}
+1 -2
View File
@@ -1,5 +1,4 @@
concrete AllBel of AllBelAbs = concrete AllBel of AllBelAbs =
LangBel, LangBel
ExtendBel
** **
{} ; {} ;
+1 -2
View File
@@ -1,4 +1,3 @@
abstract AllBelAbs = abstract AllBelAbs =
Lang, Lang
Extend
** {} ** {}
+16 -63
View File
@@ -1,68 +1,21 @@
concrete CatBel of Cat = CommonX ** open ResBel, (R = ParamX) in { concrete CatBel of Cat = CommonX ** open ResBel in {
lincat lincat N = Noun ;
S = {s : Str} ; lincat N2 = Noun ** {c2 : Compl} ;
QS = {s : Str} ; lincat N3 = Noun ** {c2,c3 : Compl} ;
RS = {s : Str} ; lincat V = V ;
Cl = {s : R.Tense => R.Polarity => Str} ; lincat VV,VS,VQ,VA = V ;
ClSlash = {s : R.Tense => R.Polarity => Str; c : Compl} ; lincat V2 = V ** {c2 : Compl} ;
SSlash = {s : Str; c : Compl} ; lincat V3,V2A,V2S,V2Q,V2V = V ** {c2,c3 : Compl} ;
Imp = {s : R.Polarity => Number => Str} ; lincat A = A ;
lincat A2 = A ** {c2 : Compl} ;
lincat Prep = Compl ;
lincat CN = CommonNoun ;
lincat AP = AdjPhrase ;
lincat S = {s : Str} ;
QCl = {s : R.Tense => R.Polarity => Str} ; lincat LN,SN,GN,PN = {s : Str} ;
IP = NPhrase ;
IComp = {s : Str} ;
IDet = {s : Case => Gender => Str; n : Number} ;
IQuant = {s : Case => Gender => Number => Str} ;
RCl = {s : R.Tense => R.Polarity => Str} ; linref V,VV,V2,V3,V2A,V2S,V2Q,V2V = \v -> v.infinitive ;
RP = {s : Str} ;
VP = VPhrase ;
Comp = {s : Agr => Str} ;
VPSlash = VSlash ;
N = Noun ;
N2 = Noun ** {c2 : Compl} ;
N3 = Noun ** {c2,c3 : Compl} ;
CN = CommonNoun ;
NP = NPhrase ;
Pron = {s: Case => Str; a: Agr} ;
Det = {s : Case => Gender => Str; n : Number} ;
Predet = {s : Case => Gender => Number => Str} ;
Quant = {s : Case => Gender => Number => Str} ;
Num = {s : Case => Gender => Str; n : Number} ;
Card = {s : Str; n : Number} ;
ACard = {s : Str; n : Number} ;
Ord = Adj ;
DAP = {s : Case => Gender => Str; n : Number} ;
Numeral = {s : Str} ;
Digits = {s : Str} ;
Decimal = {s : Str} ;
Conj = {s : Str; n : Number} ;
Subj = {s : Str} ;
Prep = Compl ;
V = Verb ;
VV,VS,VQ,VA = Verb ;
V2 = Verb ** {c2 : Compl} ;
V3,V2A,V2S,V2Q,V2V = Verb ** {c2,c3 : Compl} ;
A = Adj ;
A2 = Adj ** {c2 : Compl} ;
AP = AdjPhrase ;
LN = {s : Case => Str; g : Gender; n : Number} ;
PN = {s : Case => Str; g : Gender; n : Number} ;
GN = {s : Str; g : Gender} ;
SN = {s : Str} ;
linref
V,VV,V2,V3,V2A,V2S,V2Q,V2V = \v -> v.infinitive ;
N,N2,N3 = \n -> n.s ! Nom ! Sg ;
A,A2,AP,Ord = \a -> a.s ! Nom ! GSg Masc ;
NP,IP = \np -> np.s ! Nom ;
S,QS,RS = \s -> s.s ;
} }
-60
View File
@@ -1,60 +0,0 @@
concrete ConjunctionBel of Conjunction = CatBel ** open ResBel in {
lin
ConjS conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ;
ConjRS conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ;
ConjAP conj xs = {s = \\c,gn => xs.s1 ! c ! gn ++ conj.s ++ xs.s2 ! c ! gn} ;
ConjNP conj xs = {
s = \\c => xs.s1 ! c ++ conj.s ++ xs.s2 ! c ;
a = {g=Masc; n=conj.n; p=P3}
} ;
ConjAdv conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ;
ConjAdV conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ;
ConjIAdv conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ;
ConjCN conj xs = {
s = \\c,n => xs.s1 ! c ! n ++ conj.s ++ xs.s2 ! c ! n ;
voc = xs.voc ;
g = xs.g
} ;
ConjDet conj xs = {
s = \\c,g => xs.s1 ! c ! g ++ conj.s ++ xs.s2 ! c ! g ;
n = conj.n
} ;
BaseS x y = {s1 = x.s; s2 = y.s} ;
ConsS x xs = {s1 = x.s ++ "," ++ xs.s1; s2 = xs.s2} ;
BaseRS x y = {s1 = x.s; s2 = y.s} ;
ConsRS x xs = {s1 = x.s ++ "," ++ xs.s1; s2 = xs.s2} ;
BaseAdv x y = {s1 = x.s; s2 = y.s} ;
ConsAdv x xs = {s1 = x.s ++ "," ++ xs.s1; s2 = xs.s2} ;
BaseAdV x y = {s1 = x.s; s2 = y.s} ;
ConsAdV x xs = {s1 = x.s ++ "," ++ xs.s1; s2 = xs.s2} ;
BaseIAdv x y = {s1 = x.s; s2 = y.s} ;
ConsIAdv x xs = {s1 = x.s ++ "," ++ xs.s1; s2 = xs.s2} ;
BaseNP x y = {
s1 = x.s ;
s2 = y.s
} ;
ConsNP x xs = {
s1 = \\c => x.s ! c ++ "," ++ xs.s1 ! c ;
s2 = xs.s2
} ;
BaseAP x y = {s1 = x.s; s2 = y.s} ;
ConsAP x xs = {s1 = \\c,gn => x.s ! c ! gn ++ "," ++ xs.s1 ! c ! gn; s2 = xs.s2} ;
BaseCN x y = {s1 = x.s; s2 = y.s; voc = x.voc ++ "," ++ y.voc; g = x.g} ;
ConsCN x xs = {s1 = \\c,n => x.s ! c ! n ++ "," ++ xs.s1 ! c ! n; s2 = xs.s2; voc = x.voc ++ "," ++ xs.voc; g = xs.g} ;
BaseDAP x y = {s1 = x.s; s2 = y.s} ;
ConsDAP x xs = {s1 = \\c,g => x.s ! c ! g ++ "," ++ xs.s1 ! c ! g; s2 = xs.s2} ;
lincat
[S] = {s1,s2 : Str} ;
[RS] = {s1,s2 : Str} ;
[Adv] = {s1,s2 : Str} ;
[AdV] = {s1,s2 : Str} ;
[IAdv] = {s1,s2 : Str} ;
[NP] = {s1,s2 : Case => Str} ;
[AP] = {s1,s2 : Case => GenNum => Str} ;
[CN] = {s1,s2 : Case => Number => Str; voc : Str; g : Gender} ;
[DAP] = {s1,s2 : Case => Gender => Str} ;
}
-141
View File
@@ -1,141 +0,0 @@
concrete ConstructionBel of Construction = CatBel ** open ResBel, ParadigmsBel, (R = ParamX) in {
lincat
Timeunit, Hour, Weekday, Month, Monthday, Year, Language = {s : Str} ;
oper
adjVP : Adj -> VPhrase = \a -> {
s = \\t,p,agr => copula t p agr ++ a.s ! Nom ! genNum agr.g agr.n ;
inf = "быць" ++ a.s ! Nom ! GSg Masc ;
imp = \\p,_ => neg p ++ "будзь" ++ a.s ! Nom ! GSg Masc
} ;
lin
hungry_VP = adjVP (mkA "галодны") ;
thirsty_VP = adjVP (mkA "спрагнены") ;
tired_VP = adjVP (mkA "стомлены") ;
scared_VP = adjVP (mkA "спалоханы") ;
ill_VP = adjVP (mkA "хворы") ;
ready_VP = adjVP (mkA "гатовы") ;
has_age_VP card = {
s = \\t,p,a => copula t p a ++ card.s ++ "гадоў" ;
inf = card.s ++ "гадоў" ;
imp = \\p,_ => neg p ++ card.s ++ "гадоў"
} ;
have_name_Cl np name = {s = \\t,p => np.s ! Gen ++ "імя" ++ name.s ! Nom} ;
married_Cl np spouse = {s = \\t,p => np.s ! Nom ++ copula t p np.a ++ "жанаты" ++ "з" ++ spouse.s ! Instr} ;
what_name_QCl np = {s = \\t,p => "як" ++ "завуць" ++ np.s ! Acc} ;
how_old_QCl np = {s = \\t,p => "колькі гадоў" ++ np.s ! Dat} ;
how_far_QCl np = {s = \\t,p => "як далёка" ++ np.s ! Nom} ;
weather_adjCl ap = {s = \\t,p => copula t p defaultAgr ++ ap.s ! Nom ! GSg Neuter} ;
is_right_VP = adjVP (mkA "правы") ;
is_wrong_VP = adjVP (mkA "няправы") ;
n_units_AP card cn a = {s = \\c,gn => card.s ++ cn.s ! Gen ! Pl ++ a.s ! c ! gn} ;
n_units_of_NP card cn np = mkSimpleNP (card.s ++ cn.s ! Gen ! Pl ++ np.s ! Gen) Neuter Sg P3 ;
n_unit_CN card unit cn = nounFromStr (card.s ++ unit.s ! Nom ! Pl ++ cn.s ! Nom ! Sg) cn.g ;
bottle_of_CN np = nounFromStr ("бутэлька" ++ np.s ! Gen) Fem ;
cup_of_CN np = nounFromStr ("кубак" ++ np.s ! Gen) Masc ;
glass_of_CN np = nounFromStr ("шклянка" ++ np.s ! Gen) Fem ;
few_X_short_of_Y np x y = {s = np.s ! Nom ++ "бракуе" ++ x.s ! Gen ! Pl ++ "да" ++ y.s ! Gen ! Sg} ;
timeunitAdv card unit = {s = card.s ++ unit.s} ;
timeunitRange c1 c2 unit = {s = c1.s ++ "да" ++ c2.s ++ unit.s} ;
oneHour = {s = "1"} ; twoHour = {s = "2"} ; threeHour = {s = "3"} ; fourHour = {s = "4"} ;
fiveHour = {s = "5"} ; sixHour = {s = "6"} ; sevenHour = {s = "7"} ; eightHour = {s = "8"} ;
nineHour = {s = "9"} ; tenHour = {s = "10"} ; elevenHour = {s = "11"} ; twelveHour = {s = "12"} ;
thirteenHour = {s = "13"} ; fourteenHour = {s = "14"} ; fifteenHour = {s = "15"} ; sixteenHour = {s = "16"} ;
seventeenHour = {s = "17"} ; eighteenHour = {s = "18"} ; nineteenHour = {s = "19"} ; twentyHour = {s = "20"} ;
twentyOneHour = {s = "21"} ; twentyTwoHour = {s = "22"} ; twentyThreeHour = {s = "23"} ; twentyFourHour = {s = "24"} ;
timeHour h = {s = "а" ++ h.s} ;
timeHourMinute h m = {s = "а" ++ h.s ++ ":" ++ m.s} ;
weekdayPunctualAdv d = {s = "у" ++ d.s} ;
weekdayHabitualAdv d = {s = "па" ++ d.s} ;
weekdayLastAdv d = {s = "мінулай" ++ d.s} ;
weekdayNextAdv d = {s = "наступнай" ++ d.s} ;
monthAdv m = {s = "у" ++ m.s} ;
yearAdv y = {s = "у" ++ y.s} ;
dayMonthAdv d m = {s = d.s ++ m.s} ;
monthYearAdv m y = {s = m.s ++ y.s} ;
dayMonthYearAdv d m y = {s = d.s ++ m.s ++ y.s} ;
intYear i = {s = i.s} ;
intMonthday i = {s = i.s} ;
InLanguage l = {s = "па-" ++ l.s} ;
weekdayN d = nounFromStr d.s Masc ;
monthN m = nounFromStr m.s Masc ;
weekdayPN d = mkPN d.s ;
monthPN m = mkPN m.s ;
languageNP l = mkSimpleNP l.s Neuter Sg P3 ;
languageCN l = nounFromStr l.s Neuter ;
second_Timeunit = {s = "секунд"} ;
minute_Timeunit = {s = "хвілін"} ;
hour_Timeunit = {s = "гадзін"} ;
day_Timeunit = {s = "дзён"} ;
week_Timeunit = {s = "тыдняў"} ;
month_Timeunit = {s = "месяцаў"} ;
year_Timeunit = {s = "гадоў"} ;
monday_Weekday = {s = "панядзелак"} ;
tuesday_Weekday = {s = "аўторак"} ;
wednesday_Weekday = {s = "серада"} ;
thursday_Weekday = {s = "чацвер"} ;
friday_Weekday = {s = "пятніца"} ;
saturday_Weekday = {s = "субота"} ;
sunday_Weekday = {s = "нядзеля"} ;
january_Month = {s = "студзень"} ;
february_Month = {s = "люты"} ;
march_Month = {s = "сакавік"} ;
april_Month = {s = "красавік"} ;
may_Month = {s = "май"} ;
june_Month = {s = "чэрвень"} ;
july_Month = {s = "ліпень"} ;
august_Month = {s = "жнівень"} ;
september_Month = {s = "верасень"} ;
october_Month = {s = "кастрычнік"} ;
november_Month = {s = "лістапад"} ;
december_Month = {s = "снежань"} ;
afrikaans_Language = {s = "афрыкаанс"} ;
amharic_Language = {s = "амхарску"} ;
arabic_Language = {s = "арабску"} ;
bulgarian_Language = {s = "балгарску"} ;
catalan_Language = {s = "каталанску"} ;
chinese_Language = {s = "кітайску"} ;
danish_Language = {s = "дацку"} ;
dutch_Language = {s = "нідэрландску"} ;
english_Language = {s = "англійску"} ;
estonian_Language = {s = "эстонску"} ;
finnish_Language = {s = "фінску"} ;
french_Language = {s = "французску"} ;
german_Language = {s = "нямецку"} ;
greek_Language = {s = "грэцку"} ;
hebrew_Language = {s = "іўрыце"} ;
hindi_Language = {s = "хіндзі"} ;
japanese_Language = {s = "японску"} ;
italian_Language = {s = "італьянску"} ;
latin_Language = {s = "лацінску"} ;
latvian_Language = {s = "латышску"} ;
maltese_Language = {s = "мальтыйску"} ;
nepali_Language = {s = "непальску"} ;
norwegian_Language = {s = "нарвежску"} ;
persian_Language = {s = "персідску"} ;
polish_Language = {s = "польску"} ;
punjabi_Language = {s = "панджабі"} ;
romanian_Language = {s = "румынску"} ;
russian_Language = {s = "руску"} ;
sindhi_Language = {s = "сіндхі"} ;
spanish_Language = {s = "іспанску"} ;
swahili_Language = {s = "суахілі"} ;
swedish_Language = {s = "шведску"} ;
thai_Language = {s = "тайску"} ;
turkish_Language = {s = "турэцку"} ;
urdu_Language = {s = "урду"} ;
}
+6 -6
View File
@@ -29,12 +29,12 @@ lin
paragraph (x.infinitive) ++ paragraph (x.infinitive) ++
heading1 "Present" ++ heading1 "Present" ++
frameTable ( frameTable (
tr (intagAttr "th" "rowspan=\"6\"" "Pres" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td ((x.active ! Imperf).pres ! P1 ! Sg)) ++ tr (intagAttr "th" "rowspan=\"6\"" "Pres" ++ intagAttr "th" "rowspan=\"2\"" "P1" ++ th "Sg" ++ td ((x.active ! Imperf).Pres ! P1 ! Sg)) ++
tr (th "Pl" ++ td ((x.active ! Imperf).pres ! P1 ! Pl)) ++ tr (th "Pl" ++ td ((x.active ! Imperf).Pres ! P1 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P2" ++ th "Sg" ++ td ((x.active ! Imperf).pres ! P2 ! Sg)) ++ tr (intagAttr "th" "rowspan=\"2\"" "P2" ++ th "Sg" ++ td ((x.active ! Imperf).Pres ! P2 ! Sg)) ++
tr (th "Pl" ++ td ((x.active ! Imperf).pres ! P2 ! Pl)) ++ tr (th "Pl" ++ td ((x.active ! Imperf).Pres ! P2 ! Pl)) ++
tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td ((x.active ! Imperf).pres ! P3 ! Sg)) ++ tr (intagAttr "th" "rowspan=\"2\"" "P3" ++ th "Sg" ++ td ((x.active ! Imperf).Pres ! P3 ! Sg)) ++
tr (th "Pl" ++ td ((x.active ! Imperf).pres ! P3 ! Pl))) ++ tr (th "Pl" ++ td ((x.active ! Imperf).Pres ! P3 ! Pl))) ++
heading1 "Imperative" ++ heading1 "Imperative" ++
frameTable ( frameTable (
tr (th "Sg" ++ td (x.imperative ! Sg)) ++ tr (th "Sg" ++ td (x.imperative ! Sg)) ++
-244
View File
@@ -1,244 +0,0 @@
--# -path=.:../abstract:../common:prelude
concrete ExtendBel of Extend = CatBel ** open ResBel, (R = ParamX), ParadigmsBel in {
lincat
VPS = {s : Agr => Str} ;
[VPS] = {s1,s2 : Agr => Str} ;
VPI = {s : Str} ;
[VPI] = {s1,s2 : Str} ;
VPS2 = {s : Agr => Str; c : Compl; post : Str} ;
[VPS2] = {s1,s2 : Agr => Str; c : Compl; post : Str} ;
VPI2 = {s : Str; c : Compl; post : Str} ;
[VPI2] = {s1,s2 : Str; c : Compl; post : Str} ;
[Comp] = {s1,s2 : Agr => Str} ;
[Imp] = {s1,s2 : R.Polarity => Number => Str} ;
RNP = {s : Case => Str} ;
RNPList = {s1,s2 : Case => Str} ;
X = {s : Str} ;
lin
iFem_Pron = mkPron "я" "мяне" "мне" "мяне" "мне" "мной" Fem Sg P1 ;
youFem_Pron = mkPron "ты" "цябе" "табе" "цябе" "табе" "табой" Fem Sg P2 ;
weFem_Pron = mkPron "мы" "нас" "нам" "нас" "нас" "намі" Fem Pl P1 ;
youPlFem_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Fem Pl P2 ;
theyFem_Pron = mkPron "яны" "іх" "ім" "іх" "іх" "імі" Fem Pl P3 ;
theyNeutr_Pron = mkPron "яны" "іх" "ім" "іх" "іх" "імі" Neuter Pl P3 ;
youPolFem_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Fem Pl P2 ;
youPolPl_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Fem Pl P2 ;
youPolPlFem_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Fem Pl P2 ;
GenNP np = {s = \\_,_,_ => np.s ! Gen} ;
GenIP ip = {s = \\_,_,_ => ip.s ! Gen} ;
GenRP num cn = {s = cn.s ! Gen ! num.n ++ "якога"} ;
GenModNP num np cn = {
s = \\c => np.s ! Gen ++ cn.s ! c ! num.n ;
a = {g=cn.g; n=num.n; p=P3}
} ;
GenModIP num ip cn = {
s = \\c => ip.s ! Gen ++ cn.s ! c ! num.n ;
a = {g=cn.g; n=num.n; p=P3}
} ;
CompBareCN cn = {s = \\a => cn.s ! Nom ! a.n} ;
PiedPipingQuestSlash ip cl = {s = \\t,p => cl.c.s ++ ip.s ! cl.c.c ++ cl.s ! t ! p} ;
PiedPipingRelSlash rp cl = {s = \\t,p => rp.s ++ cl.s ! t ! p} ;
StrandQuestSlash ip cl = {s = \\t,p => cl.c.s ++ ip.s ! cl.c.c ++ cl.s ! t ! p} ;
StrandRelSlash rp cl = {s = \\t,p => rp.s ++ cl.s ! t ! p} ;
EmptyRelSlash cl = {s = \\t,p => "што" ++ cl.s ! t ! p} ;
MkVPS temp pol vp = {s = \\a => vp.s ! temp.t ! pol.p ! a} ;
ConjVPS conj xs = {s = \\a => xs.s1 ! a ++ conj.s ++ xs.s2 ! a} ;
PredVPS np vps = {s = np.s ! Nom ++ vps.s ! np.a} ;
SQuestVPS np vps = {s = np.s ! Nom ++ vps.s ! np.a} ;
QuestVPS ip vps = {s = ip.s ! Nom ++ vps.s ! ip.a} ;
RelVPS rp vps = {s = rp.s ++ vps.s ! defaultAgr} ;
BaseVPS x y = {s1 = x.s; s2 = y.s} ;
ConsVPS x xs = {s1 = \\a => x.s ! a ++ "," ++ xs.s1 ! a; s2 = xs.s2} ;
ExistS temp pol np = {s = copula temp.t pol.p np.a ++ np.s ! Nom} ;
ExistNPQS temp pol np = {s = copula temp.t pol.p np.a ++ np.s ! Nom} ;
ExistIPQS temp pol ip = {s = copula temp.t pol.p ip.a ++ ip.s ! Nom} ;
MkVPI vp = {s = vp.inf} ;
ConjVPI conj xs = {s = xs.s1 ++ conj.s ++ xs.s2} ;
ComplVPIVV vv vpi = {
s = \\t,p,a => finiteVerb vv t p a ++ vpi.s ;
inf = vv.infinitive ++ vpi.s ;
imp = \\p,n => neg p ++ vv.imperative ! n ++ vpi.s
} ;
BaseVPI x y = {s1 = x.s; s2 = y.s} ;
ConsVPI x xs = {s1 = x.s ++ "," ++ xs.s1; s2 = xs.s2} ;
MkVPS2 temp pol vp = {s = \\a => vp.s ! temp.t ! pol.p ! a; c = vp.c; post = vp.post} ;
ConjVPS2 conj xs = {s = \\a => xs.s1 ! a ++ conj.s ++ xs.s2 ! a; c = xs.c; post = xs.post} ;
ComplVPS2 vps np = {s = \\a => vps.s ! a ++ prepNP vps.c np ++ vps.post} ;
ReflVPS2 vps rnp = {s = \\a => vps.s ! a ++ rnp.s ! vps.c.c ++ vps.post} ;
BaseVPS2 x y = {s1 = x.s; s2 = y.s; c = x.c; post = x.post ++ y.post} ;
ConsVPS2 x xs = {s1 = \\a => x.s ! a ++ "," ++ xs.s1 ! a; s2 = xs.s2; c = xs.c; post = x.post ++ xs.post} ;
MkVPI2 vp = {s = vp.inf; c = vp.c; post = vp.post} ;
ConjVPI2 conj xs = {s = xs.s1 ++ conj.s ++ xs.s2; c = xs.c; post = xs.post} ;
ComplVPI2 vpi np = {s = vpi.s ++ prepNP vpi.c np ++ vpi.post} ;
BaseVPI2 x y = {s1 = x.s; s2 = y.s; c = x.c; post = x.post ++ y.post} ;
ConsVPI2 x xs = {s1 = x.s ++ "," ++ xs.s1; s2 = xs.s2; c = xs.c; post = x.post ++ xs.post} ;
ConjComp conj xs = {s = \\a => xs.s1 ! a ++ conj.s ++ xs.s2 ! a} ;
BaseComp x y = {s1 = x.s; s2 = y.s} ;
ConsComp x xs = {s1 = \\a => x.s ! a ++ "," ++ xs.s1 ! a; s2 = xs.s2} ;
ConjImp conj xs = {s = \\p,n => xs.s1 ! p ! n ++ conj.s ++ xs.s2 ! p ! n} ;
BaseImp x y = {s1 = x.s; s2 = y.s} ;
ConsImp x xs = {s1 = \\p,n => x.s ! p ! n ++ "," ++ xs.s1 ! p ! n; s2 = xs.s2} ;
ProDrop pron = pron ;
ICompAP ap = {s = ap.s ! Nom ! GSg Masc} ;
IAdvAdv adv = {s = adv.s} ;
CompIQuant iq = {s = iq.s ! Nom ! Masc ! Sg} ;
PrepCN prep cn = {s = prep.s ++ cn.s ! prep.c ! Sg} ;
FocusObj np ss = {s = np.s ! Acc ++ ss.s} ;
FocusAdv adv s = {s = adv.s ++ s.s} ;
FocusAdV adv s = {s = adv.s ++ s.s} ;
FocusAP ap np = {s = ap.s ! Nom ! genNum np.a.g np.a.n ++ np.s ! Nom} ;
PresPartAP vp = adjFromStr vp.inf ;
EmbedPresPart vp = {s = vp.inf} ;
PastPartAP vp = adjFromStr vp.inf ;
PastPartAgentAP vp np = adjFromStr (vp.inf ++ prepNP (mkPrep "кім" instrumental) np) ;
PassVPSlash vp = {
s = \\t,p,a => copula t p a ++ vp.inf ;
inf = "быць" ++ vp.inf ;
imp = \\p,_ => neg p ++ "будзь" ++ vp.inf
} ;
PassAgentVPSlash vp np = addAdvVP (PassVPSlash vp) (prepNP (mkPrep "кім" instrumental) np) ;
NominalizeVPSlashNP vp np = mkSimpleNP (vp.inf ++ prepNP vp.c np) Neuter Sg P3 ;
ProgrVPSlash vp = vp ;
A2VPSlash a = {
s = \\t,p,agr => copula t p agr ++ a.s ! Nom ! genNum agr.g agr.n ;
inf = a.s ! Nom ! GSg Masc ;
c = a.c2 ;
imp = \\p,_ => neg p ++ a.s ! Nom ! GSg Masc ;
post = []
} ;
N2VPSlash n = {
s = \\t,p,agr => copula t p agr ++ n.s ! Nom ! agr.n ;
inf = n.s ! Nom ! Sg ;
c = n.c2 ;
imp = \\p,_ => neg p ++ n.s ! Nom ! Sg ;
post = []
} ;
ExistsNP np = {s = \\t,p => copula t p np.a ++ np.s ! Nom} ;
ExistCN cn = {s = \\t,p => copula t p {g=cn.g; n=Sg; p=P3} ++ cn.s ! Nom ! Sg} ;
ExistMassCN cn = ExistCN cn ;
ExistPluralCN cn = {s = \\t,p => copula t p {g=cn.g; n=Pl; p=P3} ++ cn.s ! Nom ! Pl} ;
AdvIsNP adv np = {s = \\t,p => adv.s ++ copula t p np.a ++ np.s ! Nom} ;
AdvIsNPAP adv np ap = {s = \\t,p => adv.s ++ copula t p np.a ++ np.s ! Nom ++ ap.s ! Nom ! genNum np.a.g np.a.n} ;
PurposeVP vp = {s = "каб" ++ vp.inf} ;
ComplBareVS vs s = {
s = \\t,p,a => finiteVerb vs t p a ++ s.s ;
inf = vs.infinitive ++ s.s ;
imp = \\p,n => neg p ++ vs.imperative ! n ++ s.s
} ;
SlashBareV2S v s = {
s = \\t,p,a => finiteVerb v t p a ;
inf = v.infinitive ++ s.s ;
c = v.c2 ;
imp = \\p,n => neg p ++ v.imperative ! n ;
post = s.s
} ;
ComplDirectVS vs utt = {
s = \\t,p,a => finiteVerb vs t p a ++ utt.s ;
inf = vs.infinitive ++ utt.s ;
imp = \\p,n => neg p ++ vs.imperative ! n ++ utt.s
} ;
ComplDirectVQ vq utt = {
s = \\t,p,a => finiteVerb vq t p a ++ utt.s ;
inf = vq.infinitive ++ utt.s ;
imp = \\p,n => neg p ++ vq.imperative ! n ++ utt.s
} ;
FrontComplDirectVS np vs utt = {s = \\t,p => utt.s ++ np.s ! Nom ++ finiteVerb vs t p np.a} ;
FrontComplDirectVQ np vq utt = {s = \\t,p => utt.s ++ np.s ! Nom ++ finiteVerb vq t p np.a} ;
PredAPVP ap vp = {s = \\t,p => copula t p defaultAgr ++ ap.s ! Nom ! GSg Neuter ++ vp.inf} ;
AdjAsCN ap = nounFromStr (ap.s ! Nom ! GSg Masc) Masc ;
AdjAsNP ap = mkSimpleNP (ap.s ! Nom ! GSg Masc) Masc Sg P3 ;
PredIAdvVP iadv vp = {s = \\t,p => iadv.s ++ vp.inf} ;
EmbedSSlash ss = {s = ss.s} ;
ReflRNP vp rnp = {
s = \\t,p,a => vp.s ! t ! p ! a ++ rnp.s ! vp.c.c ++ vp.post ;
inf = vp.inf ++ rnp.s ! vp.c.c ;
imp = \\p,n => vp.imp ! p ! n ++ rnp.s ! vp.c.c ++ vp.post
} ;
ReflPron = {s = caseTable "сябе"} ;
ReflPoss num cn = {s = \\c => "свой" ++ cn.s ! c ! num.n} ;
PredetRNP pred rnp = {s = \\c => pred.s ! c ! Masc ! Sg ++ rnp.s ! c} ;
AdvRNP np prep rnp = {s = \\c => np.s ! c ++ prep.s ++ rnp.s ! prep.c} ;
AdvRVP vp prep rnp = addAdvVP vp (prep.s ++ rnp.s ! prep.c) ;
AdvRAP ap prep rnp = {s = \\c,gn => ap.s ! c ! gn ++ prep.s ++ rnp.s ! prep.c} ;
ReflA2RNP a rnp = {s = \\c,gn => a.s ! c ! gn ++ a.c2.s ++ rnp.s ! a.c2.c} ;
PossPronRNP pron num cn rnp = {
s = \\c => pron.s ! Gen ++ cn.s ! c ! num.n ++ rnp.s ! Gen ;
a = {g=cn.g; n=num.n; p=P3}
} ;
ConjRNP conj xs = {s = \\c => xs.s1 ! c ++ conj.s ++ xs.s2 ! c} ;
Base_rr_RNP x y = {s1 = x.s; s2 = y.s} ;
Base_nr_RNP x y = {s1 = x.s; s2 = y.s} ;
Base_rn_RNP x y = {s1 = x.s; s2 = y.s} ;
Cons_rr_RNP x xs = {s1 = \\c => x.s ! c ++ "," ++ xs.s1 ! c; s2 = xs.s2} ;
Cons_nr_RNP x xs = {s1 = \\c => x.s ! c ++ "," ++ xs.s1 ! c; s2 = xs.s2} ;
ReflPossPron = mkQuant "свой" ;
ComplGenVV vv ant pol vp = {
s = \\t,p,a => finiteVerb vv t p a ++ neg pol.p ++ vp.inf ;
inf = vv.infinitive ++ neg pol.p ++ vp.inf ;
imp = \\p,n => neg p ++ vv.imperative ! n ++ neg pol.p ++ vp.inf
} ;
CompoundN n1 n2 = {
s = \\c,n => n1.s ! Nom ! Sg ++ n2.s ! c ! n ;
voc = n1.voc ++ n2.voc ;
g = n2.g
} ;
CompoundAP n a = {s = \\c,gn => n.s ! Nom ! Sg ++ a.s ! c ! gn} ;
GerundCN vp = nounFromStr vp.inf Neuter ;
GerundNP vp = mkSimpleNP vp.inf Neuter Sg P3 ;
GerundAdv vp = {s = vp.inf} ;
WithoutVP vp = {s = "без" ++ vp.inf} ;
ByVP vp = {s = "праз" ++ vp.inf} ;
InOrderToVP vp = {s = "каб" ++ vp.inf} ;
ApposNP np app = {s = \\c => np.s ! c ++ app.s ! Nom; a = np.a} ;
AdAdV ada adv = {s = ada.s ++ adv.s} ;
UttAdV adv = {s = adv.s} ;
PositAdVAdj a = {s = a.s ! Nom ! GSg Neuter} ;
CompS s = {s = \\_ => s.s} ;
CompQS qs = {s = \\_ => qs.s} ;
CompVP ant pol vp = {s = \\_ => neg pol.p ++ vp.inf} ;
UncontractedNeg = {s = []; p = R.Neg} ;
UttVPShort vp = {s = vp.inf} ;
ComplSlashPartLast vp np = {
s = \\t,p,a => vp.s ! t ! p ! a ++ prepNP vp.c np ++ vp.post ;
inf = vp.inf ++ prepNP vp.c np ;
imp = \\p,n => vp.imp ! p ! n ++ prepNP vp.c np ++ vp.post
} ;
DetNPMasc det = {s = \\c => det.s ! c ! Masc; a = {g=Masc; n=det.n; p=P3}} ;
DetNPFem det = {s = \\c => det.s ! c ! Fem; a = {g=Fem; n=det.n; p=P3}} ;
UseComp_estar comp = UseComp_ser comp ;
UseComp_ser comp = {
s = \\t,p,a => copula t p a ++ comp.s ! a ;
inf = "быць" ++ comp.s ! defaultAgr ;
imp = \\p,_ => neg p ++ "будзь" ++ comp.s ! defaultAgr
} ;
SubjRelNP np rs = {s = \\c => np.s ! c ++ rs.s; a = np.a} ;
UttAccNP np = {s = np.s ! Acc} ;
UttDatNP np = {s = np.s ! Dat} ;
UttAccIP ip = {s = ip.s ! Acc} ;
UttDatIP ip = {s = ip.s ! Dat} ;
UseDAP dap = {s = \\c => dap.s ! c ! Masc; a = {g=Neuter; n=dap.n; p=P3}} ;
UseDAPMasc dap = {s = \\c => dap.s ! c ! Masc; a = {g=Masc; n=dap.n; p=P3}} ;
UseDAPFem dap = {s = \\c => dap.s ! c ! Fem; a = {g=Fem; n=dap.n; p=P3}} ;
CardCNCard card cn = {s = card.s ++ cn.s ! Gen ! Pl; n = Pl} ;
TPastSimple = {s = []; t = R.Past} ;
SubjunctRelCN cn rs = {
s = \\c,n => cn.s ! c ! n ++ rs.s ;
voc = cn.voc ;
g = cn.g
} ;
}
+1 -11
View File
@@ -2,15 +2,5 @@ concrete GrammarBel of Grammar =
TenseX, TenseX,
PhraseBel, PhraseBel,
NounBel, NounBel,
AdjectiveBel, AdjectiveBel ** {
AdverbBel,
VerbBel,
SentenceBel,
QuestionBel,
RelativeBel,
ConjunctionBel,
NumeralBel,
NamesBel,
StructuralBel,
IdiomBel ** {
} }
-22
View File
@@ -1,22 +0,0 @@
concrete IdiomBel of Idiom = CatBel ** open ResBel, (R = ParamX), ParadigmsBel in {
lin
ImpersCl vp = {s = \\t,p => vp.s ! t ! p ! defaultAgr} ;
GenericCl vp = {s = \\t,p => "нехта" ++ vp.s ! t ! p ! defaultAgr} ;
CleftNP np rs = {s = \\_,_ => "гэта" ++ np.s ! Nom ++ rs.s} ;
CleftAdv adv s = {s = \\_,_ => "гэта" ++ adv.s ++ s.s} ;
ExistNP np = {s = \\t,p => copula t p np.a ++ np.s ! Nom} ;
ExistIP ip = {s = \\t,p => copula t p ip.a ++ ip.s ! Nom} ;
ExistNPAdv np adv = {s = \\t,p => copula t p np.a ++ np.s ! Nom ++ adv.s} ;
ExistIPAdv ip adv = {s = \\t,p => copula t p ip.a ++ ip.s ! Nom ++ adv.s} ;
ProgrVP vp = vp ;
ImpPl1 vp = {s = "давайце" ++ vp.inf} ;
ImpP3 np vp = {s = "няхай" ++ np.s ! Nom ++ vp.s ! R.Pres ! R.Pos ! np.a} ;
SelfAdvVP vp = addAdvVP vp "сам" ;
SelfAdVVP vp = addAdVVP "сам" vp ;
SelfNP np = {s = \\c => np.s ! c ++ "сам"; a = np.a} ;
}
+1 -3
View File
@@ -1,12 +1,10 @@
--# -path=.:../abstract --# -path=.:../abstract
concrete LangBel of Lang = concrete LangBel of Lang =
GrammarBel, GrammarBel,
LexiconBel, LexiconBel
ConstructionBel
,DocumentationBel --# notpresent ,DocumentationBel --# notpresent
** { ** {
flags startcat = Phr ; flags startcat = Phr ;
} }
File diff suppressed because it is too large Load Diff
-19
View File
@@ -1,19 +0,0 @@
concrete NamesBel of Names = CatBel ** open ResBel, ParadigmsBel in {
lin
GivenName gn = mkSimpleNP gn.s gn.g Sg P3 ;
MaleSurname sn = mkSimpleNP sn.s Masc Sg P3 ;
FemaleSurname sn = mkSimpleNP sn.s Fem Sg P3 ;
PlSurname sn = mkSimpleNP sn.s Masc Pl P3 ;
FullName gn sn = mkSimpleNP (gn.s ++ sn.s) gn.g Sg P3 ;
UseLN ln = {s = ln.s; a = {g=ln.g; n=ln.n; p=P3}} ;
PlainLN ln = {s = ln.s; a = {g=ln.g; n=ln.n; p=P3}} ;
InLN ln = {s = "у" ++ ln.s ! Loc} ;
AdjLN ap ln = {
s = \\c => ap.s ! c ! genNum ln.g ln.n ++ ln.s ! c ;
g = ln.g ;
n = ln.n
} ;
}
+1 -123
View File
@@ -1,126 +1,4 @@
concrete NounBel of Noun = CatBel ** open ResBel, Prelude in { concrete NounBel of Noun = CatBel ** {
lin lin
UseN n = n ; UseN n = n ;
DetCN det cn = {
s = \\c => det.s ! c ! cn.g ++ cn.s ! c ! det.n ;
a = {g=cn.g; n=det.n; p=P3}
} ;
UsePN pn = {
s = pn.s ;
a = {g=pn.g; n=pn.n; p=P3}
} ;
UsePron p = p ;
PredetNP pred np = {
s = \\c => pred.s ! c ! np.a.g ! np.a.n ++ np.s ! c ;
a = np.a
} ;
PPartNP np v = {
s = \\c => np.s ! c ++ v.participle ! np.a.g ! np.a.n ;
a = np.a
} ;
AdvNP np adv = {
s = \\c => np.s ! c ++ adv.s ;
a = np.a
} ;
ExtAdvNP np adv = {
s = \\c => np.s ! c ++ adv.s ;
a = np.a
} ;
RelNP np rs = {
s = \\c => np.s ! c ++ rs.s ;
a = np.a
} ;
DetNP det = {
s = \\c => det.s ! c ! Masc ;
a = {g=Masc; n=det.n; p=P3}
} ;
DetQuant q n = {
s = \\c,g => q.s ! c ! g ! n.n ++ n.s ! c ! g ;
n = n.n
} ;
DetQuantOrd q n o = {
s = \\c,g => q.s ! c ! g ! n.n ++ n.s ! c ! g ++ o.s ! c ! genNum g n.n ;
n = n.n
} ;
NumSg = {s = \\_,_ => []; n = Sg} ;
NumPl = {s = \\_,_ => []; n = Pl} ;
NumCard card = {s = \\_,_ => card.s; n = card.n} ;
NumDigits digits = {s = digits.s; n = Pl} ;
NumDecimal dec = {s = dec.s; n = Pl} ;
NumNumeral numeral = {s = numeral.s; n = Pl} ;
AdNum adn card = {s = adn.s ++ card.s; n = card.n} ;
OrdDigits d = adjFromStr d.s ;
OrdNumeral n = adjFromStr n.s ;
OrdSuperl a = {s = \\c,gn => "най" ++ a.s ! c ! gn} ;
OrdNumeralSuperl n a = {s = \\c,gn => n.s ++ a.s ! c ! gn} ;
IndefArt = {s = \\_,_,_ => []} ;
DefArt = {s = \\_,_,_ => []} ;
MassNP cn = {
s = \\c => cn.s ! c ! Sg ;
a = {g=cn.g; n=Sg; p=P3}
} ;
PossPron p = {s = \\_,_,_ => p.s ! Gen} ;
ComplN2 n np = {
s = \\c,num => n.s ! c ! num ++ prepNP n.c2 np ;
voc = n.voc ;
g = n.g
} ;
ComplN3 n np = n ** {c2 = n.c3} ;
UseN2 n = n ;
Use2N3 n = n ** {c2 = n.c2} ;
Use3N3 n = n ** {c2 = n.c3} ;
AdjCN ap cn = {
s = \\c,num => ap.s ! c ! genNum cn.g num ++ cn.s ! c ! num ;
voc = cn.voc ;
g = cn.g
} ;
RelCN cn rs = {
s = \\c,num => cn.s ! c ! num ++ rs.s ;
voc = cn.voc ;
g = cn.g
} ;
AdvCN cn adv = {
s = \\c,num => cn.s ! c ! num ++ adv.s ;
voc = cn.voc ;
g = cn.g
} ;
SentCN cn sc = {
s = \\c,num => cn.s ! c ! num ++ sc.s ;
voc = cn.voc ;
g = cn.g
} ;
ApposCN cn np = {
s = \\c,num => cn.s ! c ! num ++ np.s ! Nom ;
voc = cn.voc ;
g = cn.g
} ;
PossNP cn np = {
s = \\c,num => cn.s ! c ! num ++ np.s ! Gen ;
voc = cn.voc ;
g = cn.g
} ;
PartNP cn np = {
s = \\c,num => cn.s ! c ! num ++ np.s ! Gen ;
voc = cn.voc ;
g = cn.g
} ;
CountNP det np = {
s = \\c => det.s ! c ! Masc ++ "з" ++ np.s ! Gen ;
a = {g=Masc; n=det.n; p=P3}
} ;
AdjDAP dap ap = {
s = \\c,g => dap.s ! c ! g ++ ap.s ! c ! genNum g dap.n ;
n = dap.n
} ;
DetDAP det = det ;
QuantityNP dec mu = mkSimpleNP (dec.s ++ mu.s) Neuter Sg P3 ;
} }
-65
View File
@@ -1,65 +0,0 @@
concrete NumeralBel of Numeral = CatBel ** {
lincat
Digit, Sub10, Sub100, Sub1000, Sub1000000, Sub1000000000, Sub1000000000000 = {s : Str} ;
Dig = {s : Str} ;
lin
num n = n ;
n2 = {s = "2"} ;
n3 = {s = "3"} ;
n4 = {s = "4"} ;
n5 = {s = "5"} ;
n6 = {s = "6"} ;
n7 = {s = "7"} ;
n8 = {s = "8"} ;
n9 = {s = "9"} ;
pot01 = {s = "1"} ;
pot0 d = d ;
pot0as1 n = n ;
pot110 = {s = "10"} ;
pot111 = {s = "11"} ;
pot1to19 d = {s = "1" ++ d.s} ;
pot1 d = {s = d.s ++ "0"} ;
pot1plus d n = {s = d.s ++ n.s} ;
pot1as2 n = n ;
pot21 = {s = "100"} ;
pot2 n = {s = n.s ++ "00"} ;
pot2plus n m = {s = n.s ++ "00" ++ m.s} ;
pot2as3 n = n ;
pot31 = {s = "1000"} ;
pot3 n = {s = n.s ++ "000"} ;
pot3plus n m = {s = n.s ++ "000" ++ m.s} ;
pot3as4 n = n ;
pot3decimal d = {s = d.s ++ "тысяч"} ;
pot41 = {s = "1000000"} ;
pot4 n = {s = n.s ++ "000000"} ;
pot4plus n m = {s = n.s ++ "000000" ++ m.s} ;
pot4as5 n = n ;
pot4decimal d = {s = d.s ++ "мільёна"} ;
pot51 = {s = "1000000000"} ;
pot5 n = {s = n.s ++ "000000000"} ;
pot5plus n m = {s = n.s ++ "000000000" ++ m.s} ;
pot5decimal d = {s = d.s ++ "мільярда"} ;
IDig d = d ;
IIDig d ds = {s = d.s ++ ds.s} ;
D_0 = {s = "0"} ;
D_1 = {s = "1"} ;
D_2 = {s = "2"} ;
D_3 = {s = "3"} ;
D_4 = {s = "4"} ;
D_5 = {s = "5"} ;
D_6 = {s = "6"} ;
D_7 = {s = "7"} ;
D_8 = {s = "8"} ;
D_9 = {s = "9"} ;
PosDecimal d = d ;
NegDecimal d = {s = "-" ++ d.s} ;
IFrac d dig = {s = d.s ++ "." ++ dig.s} ;
}
+11 -70
View File
@@ -636,42 +636,6 @@ oper
_ => regN form1 _ => regN form1
} ; } ;
compoundN = overload {
compoundN : A -> N -> N = \a,n -> lin N {
s = \\c,num => a.s ! c ! genNum n.g num ++ n.s ! c ! num ;
voc = a.s ! Nom ! genNum n.g Sg ++ n.voc ;
g = n.g
} ;
compoundN : N -> A -> N = \n,a -> lin N {
s = \\c,num => n.s ! c ! num ++ a.s ! c ! genNum n.g num ;
voc = n.voc ++ a.s ! Nom ! genNum n.g Sg ;
g = n.g
} ;
compoundN : N -> Str -> N = \n,adv -> lin N {
s = \\c,num => n.s ! c ! num ++ adv ;
voc = n.voc ++ adv ;
g = n.g
} ;
compoundN : Str -> N -> N = \adv,n -> lin N {
s = \\c,num => adv ++ n.s ! c ! num ;
voc = adv ++ n.voc ;
g = n.g
}
} ;
mkPron : (_,_,_,_,_,_ : Str) -> Gender -> Number -> Person -> Pron =
\nom,acc,dat,gen,loc,instr,g,n,p -> lin Pron {
s = table {
Nom => nom ;
Acc => acc ;
Dat => dat ;
Gen => gen ;
Loc => loc ;
Instr => instr
} ;
a = {g=g; n = n; p = p}
} ;
regV : Str -> V -- infinitive regV : Str -> V -- infinitive
= \form -> case form of { = \form -> case form of {
_ + "агчы" => mkV021 form; _ + "агчы" => mkV021 form;
@@ -753,16 +717,6 @@ oper
_ => regV form1 _ => regV form1
} ; } ;
compoundV : V -> Str -> V = \v,adv -> lin V {
active = \\a => {past=(v.active ! a).past ++ adv ;
pres=\\p,num=>(v.active ! a).pres ! p ! num ++ adv
} ;
imperative = \\num => v.imperative ! num ++ adv ;
infinitive = v.infinitive ++ adv ;
participle = \\g,num => v.participle ! g ! num ++ adv ;
passive = \\a,t => v.passive ! a ! t ++ adv
} ;
regA : Str -> A -- s;Nom;('GSg', Masc) regA : Str -> A -- s;Nom;('GSg', Masc)
= \form -> case form of { = \form -> case form of {
_ + "які" => mkA006 form; _ + "які" => mkA006 form;
@@ -865,37 +819,24 @@ oper
mkInterj : Str -> Interj = \s -> lin Interj {s=s} ; mkInterj : Str -> Interj = \s -> lin Interj {s=s} ;
mkMU : Str -> MU = \s -> lin MU {s=s; isPre=False} ; mkMU : Str -> MU = \s -> lin MU {s=s; isPre=False} ;
nominative : Case = Nom ;
accusative : Case = Acc ;
dative : Case = Dat ;
genitive : Case = Gen ;
locative : Case = Loc ;
instrumental : Case = Instr ;
mkPrep = overload {
mkPrep : Str -> Prep = \s -> lin Prep {s=s; c=Acc} ; mkPrep : Str -> Prep = \s -> lin Prep {s=s; c=Acc} ;
mkPrep : Case -> Prep = \c -> lin Prep {s=[]; c=c} ;
mkPrep : Str -> Case -> Prep = \s,c -> lin Prep {s=s; c=c}
} ;
mkIAdv : Str -> IAdv = \s -> lin IAdv {s=s} ; mkIAdv : Str -> IAdv = \s -> lin IAdv {s=s} ;
mkIP : Str -> IP = \s -> lin IP (mkSimpleNP s Masc Sg P3) ; mkIP : Str -> IP = \s -> lin IP {s=s} ;
mkIQuant : Str -> IQuant = \s -> lin IQuant {s=\\_,_,_ => s} ; mkIQuant : Str -> IQuant = \s -> lin IQuant {s=s} ;
mkIDet : Str -> IDet = \s -> lin IDet {s=\\_,_ => s; n=Sg} ; mkIDet : Str -> IDet = \s -> lin IDet {s=s} ;
mkSubj : Str -> Subj = \s -> lin Subj {s=s} ; mkSubj : Str -> Subj = \s -> lin Subj {s=s} ;
mkQuant : Str -> Quant = \s -> lin Quant {s=\\_,_,_ => s} ; mkQuant : Str -> Quant = \s -> lin Quant {s=s} ;
adjQuant : A -> Quant = \a -> lin Quant {s=\\c,g,n => a.s ! c ! genNum g n} ; mkPredet : Str -> Predet = \s -> lin Predet {s=s} ;
mkPredet : Str -> Predet = \s -> lin Predet {s=\\_,_,_ => s} ; mkDet : Str -> Det = \s -> lin Det {s=s} ;
mkDet : Str -> Det = \s -> lin Det {s=\\_,_ => s; n=Sg} ; mkCard : Str -> Card = \s -> lin Card {s=s} ;
mkCard : Str -> Card = \s -> lin Card {s=s; n=Pl} ; mkConj : Str -> Conj = \s -> lin Conj {s=s} ;
mkACard : Str -> ACard = \s -> lin ACard {s=s; n=Pl} ;
mkConj : Str -> Conj = \s -> lin Conj {s=s; n=Pl} ;
mkPConj : Str -> PConj = \s -> lin PConj {s=s} ; mkPConj : Str -> PConj = \s -> lin PConj {s=s} ;
mkVoc : Str -> Voc = \s -> lin Voc {s=s} ; mkVoc : Str -> Voc = \s -> lin Voc {s=s} ;
mkLN : Str -> LN = \s -> lin LN {s=caseTable s; g=Neuter; n=Sg} ; mkLN : Str -> LN = \s -> lin LN {s=s} ;
mkGN : Str -> GN = \s -> lin GN {s=s; g=Masc} ; mkGN : Str -> GN = \s -> lin GN {s=s} ;
mkSN : Str -> SN = \s -> lin SN {s=s} ; mkSN : Str -> SN = \s -> lin SN {s=s} ;
mkPN : Str -> PN = \s -> lin PN {s=caseTable s; g=Masc; n=Sg} ; mkPN : Str -> PN = \s -> lin PN {s=s} ;
} }
+1 -15
View File
@@ -1,25 +1,11 @@
concrete PhraseBel of Phrase = CatBel ** open ResBel in { concrete PhraseBel of Phrase = CatBel ** {
lin lin
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ; PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
UttS s = s ; UttS s = s ;
UttQS qs = qs ;
UttImpSg pol imp = {s = pol.s ++ imp.s ! pol.p ! Sg} ;
UttImpPl pol imp = {s = pol.s ++ imp.s ! pol.p ! Pl} ;
UttImpPol pol imp = {s = pol.s ++ imp.s ! pol.p ! Pl} ;
UttIP ip = {s = ip.s ! Nom} ;
UttIAdv iadv = iadv ;
UttNP np = {s = np.s ! Nom} ;
UttAdv adv = adv ;
UttVP vp = {s = vp.inf} ;
UttCN cn = {s = cn.s ! Nom ! Sg} ;
UttCard card = {s = card.s} ;
UttAP ap = {s = ap.s ! Nom ! GSg Masc} ;
UttInterj i = i ; UttInterj i = i ;
NoPConj = {s = []} ; NoPConj = {s = []} ;
PConjConj conj = {s = conj.s} ;
NoVoc = {s = []} ; NoVoc = {s = []} ;
VocNP np = {s = np.s ! Nom} ;
} }
-50
View File
@@ -1,50 +0,0 @@
concrete QuestionBel of Question = CatBel ** open ResBel, (R = ParamX) in {
lincat
QVP = {s : Str} ;
lin
QuestCl cl = cl ;
QuestVP ip vp = {
s = \\t,p => ip.s ! Nom ++ vp.s ! t ! p ! ip.a
} ;
QuestSlash ip cl = {
s = \\t,p => cl.c.s ++ ip.s ! cl.c.c ++ cl.s ! t ! p
} ;
QuestIAdv iadv cl = {
s = \\t,p => iadv.s ++ cl.s ! t ! p
} ;
QuestIComp icomp np = {
s = \\t,p => icomp.s ++ np.s ! Nom
} ;
IdetCN idet cn = {
s = \\c => idet.s ! c ! cn.g ++ cn.s ! c ! idet.n ;
a = {g=cn.g; n=idet.n; p=P3}
} ;
IdetIP idet = {
s = \\c => idet.s ! c ! Masc ;
a = {g=Masc; n=idet.n; p=P3}
} ;
AdvIP ip adv = {
s = \\c => ip.s ! c ++ adv.s ;
a = ip.a
} ;
IdetQuant iquant num = {
s = \\c,g => iquant.s ! c ! g ! num.n ++ num.s ! c ! g ;
n = num.n
} ;
PrepIP prep ip = {s = prepNP prep ip} ;
AdvIAdv iadv adv = {s = iadv.s ++ adv.s} ;
CompIAdv iadv = iadv ;
CompIP ip = {s = ip.s ! Nom} ;
ComplSlashIP vp ip = {s = vp.s ! R.Pres ! R.Pos ! defaultAgr ++ vp.c.s ++ ip.s ! vp.c.c ++ vp.post} ;
AdvQVP vp iadv = {s = vp.s ! R.Pres ! R.Pos ! defaultAgr ++ iadv.s} ;
AddAdvQVP qvp iadv = {s = qvp.s ++ iadv.s} ;
QuestQVP ip qvp = {
s = \\_,_ => ip.s ! Nom ++ qvp.s
} ;
}
-11
View File
@@ -1,11 +0,0 @@
concrete RelativeBel of Relative = CatBel ** open ResBel in {
lin
RelCl cl = {s = \\t,p => "што" ++ cl.s ! t ! p} ;
RelVP rp vp = {s = \\t,p => rp.s ++ vp.s ! t ! p ! defaultAgr} ;
RelSlash rp cl = {s = \\t,p => rp.s ++ cl.s ! t ! p} ;
IdRP = {s = "які"} ;
FunRP prep np rp = {s = prepNP prep np ++ rp.s} ;
}
+10 -133
View File
@@ -1,4 +1,4 @@
resource ResBel = open (R = ParamX), Prelude in { resource ResBel = {
param Case = Nom | Acc | Dat | Gen | Loc | Instr ; param Case = Nom | Acc | Dat | Gen | Loc | Instr ;
param Number = Sg | Pl ; param Number = Sg | Pl ;
@@ -40,12 +40,12 @@ oper mkNoun : (_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Gender -> Noun =
param Aspect = Imperf | Perf ; param Aspect = Imperf | Perf ;
param Person = P1 | P2 | P3 ; param Person = P1 | P2 | P3 ;
param Tense = Pres | Past ; param Tense = Pres | Past ;
oper Verb = {active: Aspect => {past: Str; pres: Person => Number => Str}; imperative: Number => Str; infinitive: Str; participle: Gender => Number => Str; passive: Aspect => Tense => Str} ; -- 703 oper V = {active: Aspect => {Past: Str; Pres: Person => Number => Str}; imperative: Number => Str; infinitive: Str; participle: Gender => Number => Str; passive: Aspect => Tense => Str} ; -- 703
oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Verb = oper mkV : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> V =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24,f25,f26,f27 -> \f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24,f25,f26,f27 ->
{ active = table { { active = table {
Imperf => { past = f1 ; Imperf => { Past = f1 ;
pres = table { Pres = table {
P1 => table { P1 => table {
Sg => f2 ; Sg => f2 ;
Pl => f3 Pl => f3
@@ -60,8 +60,8 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> V
} }
} }
} ; } ;
Perf => { past = f8 ; Perf => { Past = f8 ;
pres = table { Pres = table {
P1 => table { P1 => table {
Sg => f9 ; Sg => f9 ;
Pl => f10 Pl => f10
@@ -110,14 +110,8 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> V
param GenNum = GSg Gender | GPl ; param GenNum = GSg Gender | GPl ;
oper genNum : Gender -> Number -> GenNum = \g,n -> oper A = {s: Case => GenNum => Str} ; -- 704
case n of { oper mkA : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> A =
Sg => GSg g ;
Pl => GPl
} ;
oper Adj = {s: Case => GenNum => Str} ; -- 704
oper mkAdj : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Adj =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24 -> \f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24 ->
{ s = table { { s = table {
Nom => table { Nom => table {
@@ -164,123 +158,6 @@ oper Compl = {s : Str; c : Case} ;
oper noPrep : Compl = {s=""; c=Acc} ; oper noPrep : Compl = {s=""; c=Acc} ;
oper CommonNoun = Noun ; oper CommonNoun = Noun ;
oper AdjPhrase = Adj ; oper AdjPhrase = A ;
oper Agr = {g : Gender ; n : Number ; p : Person} ;
oper defaultAgr : Agr = {g=Masc; n=Sg; p=P3} ;
oper NPhrase : Type = {s : Case => Str; a : Agr} ;
oper mkNPhrase : (Case => Str) -> Agr -> NPhrase =
\s,a -> {s = s; a = a} ;
oper caseTable : Str -> Case => Str =
\s -> table {Nom => s; Acc => s; Dat => s; Gen => s; Loc => s; Instr => s} ;
oper mkSimpleNP : Str -> Gender -> Number -> Person -> NPhrase =
\s,g,n,p -> mkNPhrase (caseTable s) {g=g; n=n; p=p} ;
oper nounFromStr : Str -> Gender -> Noun =
\s,g -> {
s = \\_,_ => s ;
voc = s ;
g = g
} ;
oper adjFromStr : Str -> Adj =
\s -> {s = \\_,_ => s} ;
oper prepNP : Compl -> NPhrase -> Str =
\prep,np -> prep.s ++ np.s ! prep.c ;
oper neg : R.Polarity -> Str =
\p -> case p of {
R.Pos => [] ;
R.Neg => "не"
} ;
oper futureBe : Agr -> Str =
\a -> case <a.p,a.n> of {
<P1,Sg> => "буду" ;
<P2,Sg> => "будзеш" ;
<P3,Sg> => "будзе" ;
<P1,Pl> => "будзем" ;
<P2,Pl> => "будзеце" ;
<P3,Pl> => "будуць"
} ;
oper pastBe : Agr -> Str =
\a -> case <a.g,a.n> of {
<Masc,Sg> => "быў" ;
<Fem,Sg> => "была" ;
<Neuter,Sg> => "было" ;
<_,Pl> => "былі"
} ;
oper copula : R.Tense -> R.Polarity -> Agr -> Str =
\t,p,a -> case t of {
R.Pres => neg p ;
R.Past => neg p ++ pastBe a ;
R.Fut => neg p ++ futureBe a ;
R.Cond => neg p ++ pastBe a ++ "бы"
} ;
oper finiteVerb : Verb -> R.Tense -> R.Polarity -> Agr -> Str =
\v,t,p,a -> case t of {
R.Pres => neg p ++ (v.active ! Imperf).pres ! a.p ! a.n ;
R.Past => neg p ++ v.participle ! a.g ! a.n ;
R.Fut => neg p ++ futureBe a ++ v.infinitive ;
R.Cond => neg p ++ v.participle ! a.g ! a.n ++ "бы"
} ;
oper VPhrase : Type = {
s : R.Tense => R.Polarity => Agr => Str ;
inf : Str ;
imp : R.Polarity => Number => Str
} ;
oper mkVPhrase : Verb -> VPhrase =
\v -> {
s = \\t,p,a => finiteVerb v t p a ;
inf = v.infinitive ;
imp = \\p,n => neg p ++ v.imperative ! n
} ;
oper VSlash : Type = {
s : R.Tense => R.Polarity => Agr => Str ;
inf : Str ;
c : Compl ;
imp : R.Polarity => Number => Str ;
post : Str
} ;
oper mkVSlash : Verb -> Compl -> VSlash =
\v,c -> {
s = \\t,p,a => finiteVerb v t p a ;
inf = v.infinitive ;
c = c ;
imp = \\p,n => neg p ++ v.imperative ! n ;
post = []
} ;
oper addAdvVP : VPhrase -> Str -> VPhrase =
\vp,adv -> {
s = \\t,p,a => vp.s ! t ! p ! a ++ adv ;
inf = vp.inf ++ adv ;
imp = \\p,n => vp.imp ! p ! n ++ adv
} ;
oper addAdVVP : Str -> VPhrase -> VPhrase =
\adv,vp -> {
s = \\t,p,a => adv ++ vp.s ! t ! p ! a ;
inf = adv ++ vp.inf ;
imp = \\p,n => adv ++ vp.imp ! p ! n
} ;
oper addAdvSlash : VSlash -> Str -> VSlash =
\vp,adv -> {
s = \\t,p,a => vp.s ! t ! p ! a ;
inf = vp.inf ++ adv ;
c = vp.c ;
imp = \\p,n => vp.imp ! p ! n ;
post = vp.post ++ adv
} ;
} }
-45
View File
@@ -1,45 +0,0 @@
concrete SentenceBel of Sentence = CatBel ** open ResBel, (R = ParamX), Prelude in {
lin
PredVP np vp = {
s = \\t,p => np.s ! Nom ++ vp.s ! t ! p ! np.a
} ;
PredSCVP sc vp = {
s = \\t,p => sc.s ++ vp.s ! t ! p ! defaultAgr
} ;
SlashVP np vp = {
s = \\t,p => np.s ! Nom ++ vp.s ! t ! p ! np.a ++ vp.post ;
c = vp.c
} ;
AdvSlash cl adv = {
s = \\t,p => cl.s ! t ! p ++ adv.s ;
c = cl.c
} ;
SlashPrep cl prep = {
s = \\t,p => cl.s ! t ! p ++ prep.s ;
c = prep
} ;
SlashVS np vs ss = {
s = \\t,p => np.s ! Nom ++ finiteVerb vs t p np.a ++ ss.s ;
c = ss.c
} ;
ImpVP vp = {s = \\p,n => vp.imp ! p ! n} ;
AdvImp adv imp = {s = \\p,n => adv.s ++ imp.s ! p ! n} ;
EmbedS s = {s = "што" ++ s.s} ;
EmbedQS qs = {s = qs.s} ;
EmbedVP vp = {s = vp.inf} ;
UseCl temp pol cl = {s = temp.s ++ pol.s ++ cl.s ! temp.t ! pol.p} ;
UseQCl temp pol cl = {s = temp.s ++ pol.s ++ cl.s ! temp.t ! pol.p} ;
UseRCl temp pol cl = {s = cl.s ! temp.t ! pol.p} ;
UseSlash temp pol cl = {s = cl.s ! temp.t ! pol.p; c = cl.c} ;
AdvS adv s = {s = adv.s ++ s.s} ;
ExtAdvS adv s = {s = adv.s ++ s.s} ;
SSubjS s1 subj s2 = {s = s1.s ++ subj.s ++ s2.s} ;
RelS s rs = {s = s.s ++ rs.s} ;
}
-110
View File
@@ -1,110 +0,0 @@
concrete StructuralBel of Structural = CatBel ** open ResBel, ParadigmsBel in {
lin
above_Prep = mkPrep "над" instrumental ;
after_Prep = mkPrep "пасля" genitive ;
all_Predet = mkPredet "усе" ;
almost_AdA = mkAdA "амаль" ;
almost_AdN = mkAdN "амаль" ;
although_Subj = mkSubj "хоць" ;
always_AdV = mkAdV "заўсёды" ;
and_Conj = mkConj "і" ;
because_Subj = mkSubj "бо" ;
before_Prep = mkPrep "перад" instrumental ;
behind_Prep = mkPrep "за" instrumental ;
between_Prep = mkPrep "паміж" instrumental ;
both7and_DConj = mkConj "і" ;
but_PConj = mkPConj "але" ;
by8agent_Prep = mkPrep "кім" instrumental ;
by8means_Prep = mkPrep "праз" accusative ;
can8know_VV = mkVV (mkV021 "магчы") ;
can_VV = mkVV (mkV021 "магчы") ;
during_Prep = mkPrep "падчас" genitive ;
either7or_DConj = mkConj "або" ;
every_Det = {s = \\_,_ => "кожны"; n = Sg} ;
everybody_NP = mkSimpleNP "усе" Masc Pl P3 ;
everything_NP = mkSimpleNP "усё" Neuter Sg P3 ;
everywhere_Adv = mkAdv "усюды" ;
few_Det = {s = \\_,_ => "некалькі"; n = Pl} ;
for_Prep = mkPrep "для" genitive ;
from_Prep = mkPrep "ад" genitive ;
i_Pron = mkPron "я" "мяне" "мне" "мяне" "мне" "мной" Masc Sg P1 ;
youSg_Pron = mkPron "ты" "цябе" "табе" "цябе" "табе" "табой" Masc Sg P2 ;
he_Pron = mkPron "ён" "яго" "яму" "яго" "ім" "ім" Masc Sg P3 ;
she_Pron = mkPron "яна" "яе" "ёй" "яе" "ёй" "ёю" Fem Sg P3 ;
it_Pron = mkPron "яно" "яго" "яму" "яго" "ім" "ім" Neuter Sg P3 ;
we_Pron = mkPron "мы" "нас" "нам" "нас" "нас" "намі" Masc Pl P1 ;
youPl_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Masc Pl P2 ;
youPol_Pron = mkPron "вы" "вас" "вам" "вас" "вас" "вамі" Masc Pl P2 ;
they_Pron = mkPron "яны" "іх" "ім" "іх" "іх" "імі" Masc Pl P3 ;
here_Adv = mkAdv "тут" ;
here7to_Adv = mkAdv "сюды" ;
here7from_Adv = mkAdv "адсюль" ;
how_IAdv = mkIAdv "як" ;
how8many_IDet = mkIDet "колькі" ;
how8much_IAdv = mkIAdv "колькі" ;
if_Subj = mkSubj "калі" ;
in8front_Prep = mkPrep "перад" instrumental ;
in_Prep = mkPrep "у" locative ;
less_CAdv = {s = "менш"; p = "чым"} ;
many_Det = {s = \\_,_ => "шмат"; n = Pl} ;
more_CAdv = {s = "больш"; p = "чым"} ;
most_Predet = mkPredet "большасць" ;
much_Det = {s = \\_,_ => "шмат"; n = Sg} ;
must_VV = mkVV (mkV "мусіць") ;
no_Utt = {s = "не"} ;
on_Prep = mkPrep "на" locative ;
only_Predet = mkPredet "толькі" ;
or_Conj = mkConj "або" ;
otherwise_PConj = mkPConj "інакш" ;
part_Prep = mkPrep "з" genitive ;
please_Voc = mkVoc "калі ласка" ;
possess_Prep = mkPrep "у" genitive ;
quite_Adv = mkAdA "зусім" ;
so_AdA = mkAdA "так" ;
someSg_Det = {s = \\_,_ => "нейкі"; n = Sg} ;
somePl_Det = {s = \\_,_ => "некаторыя"; n = Pl} ;
somebody_NP = mkSimpleNP "нехта" Masc Sg P3 ;
something_NP = mkSimpleNP "нешта" Neuter Sg P3 ;
somewhere_Adv = mkAdv "недзе" ;
that_Quant = mkQuant "той" ;
that_Subj = mkSubj "што" ;
there_Adv = mkAdv "там" ;
there7to_Adv = mkAdv "туды" ;
there7from_Adv = mkAdv "адтуль" ;
therefore_PConj = mkPConj "таму" ;
this_Quant = mkQuant "гэты" ;
through_Prep = mkPrep "праз" accusative ;
to_Prep = mkPrep "да" genitive ;
too_AdA = mkAdA "занадта" ;
under_Prep = mkPrep "пад" instrumental ;
very_AdA = mkAdA "вельмі" ;
want_VV = mkVV (mkV009 "хацець") ;
whatPl_IP = mkSimpleNP "што" Neuter Pl P3 ;
whatSg_IP = mkSimpleNP "што" Neuter Sg P3 ;
when_IAdv = mkIAdv "калі" ;
when_Subj = mkSubj "калі" ;
where_IAdv = mkIAdv "дзе" ;
which_IQuant = mkIQuant "які" ;
whoPl_IP = mkSimpleNP "хто" Masc Pl P3 ;
whoSg_IP = mkSimpleNP "хто" Masc Sg P3 ;
why_IAdv = mkIAdv "чаму" ;
with_Prep = mkPrep "з" instrumental ;
without_Prep = mkPrep "без" genitive ;
yes_Utt = {s = "так"} ;
no_Quant = mkQuant "ніякі" ;
not_Predet = mkPredet "не" ;
if_then_Conj = mkConj "калі" ;
at_least_AdN = mkAdN "прынамсі" ;
at_most_AdN = mkAdN "найбольш" ;
nobody_NP = mkSimpleNP "ніхто" Masc Sg P3 ;
nothing_NP = mkSimpleNP "нішто" Neuter Sg P3 ;
except_Prep = mkPrep "акрамя" genitive ;
as_CAdv = {s = "так"; p = "як"} ;
have_V2 = mkV2 (mkV071 "мець") ;
language_title_Utt = {s = "беларуская"} ;
}
-138
View File
@@ -1,138 +0,0 @@
concrete VerbBel of Verb = CatBel ** open ResBel, (R = ParamX), Prelude in {
lin
UseV v = mkVPhrase v ;
ComplVV vv vp = {
s = \\t,p,a => finiteVerb vv t p a ++ vp.inf ;
inf = vv.infinitive ++ vp.inf ;
imp = \\p,n => neg p ++ vv.imperative ! n ++ vp.inf
} ;
ComplVS vs s = {
s = \\t,p,a => finiteVerb vs t p a ++ "што" ++ s.s ;
inf = vs.infinitive ++ "што" ++ s.s ;
imp = \\p,n => neg p ++ vs.imperative ! n ++ "што" ++ s.s
} ;
ComplVQ vq qs = {
s = \\t,p,a => finiteVerb vq t p a ++ qs.s ;
inf = vq.infinitive ++ qs.s ;
imp = \\p,n => neg p ++ vq.imperative ! n ++ qs.s
} ;
ComplVA va ap = {
s = \\t,p,a => finiteVerb va t p a ++ ap.s ! Nom ! genNum a.g a.n ;
inf = va.infinitive ++ ap.s ! Nom ! GSg Masc ;
imp = \\p,n => neg p ++ va.imperative ! n ++ ap.s ! Nom ! GPl
} ;
SlashV2a v = mkVSlash v v.c2 ;
Slash2V3 v np = {
s = \\t,p,a => finiteVerb v t p a ++ prepNP v.c2 np ;
inf = v.infinitive ++ prepNP v.c2 np ;
c = v.c3 ;
imp = \\p,n => neg p ++ v.imperative ! n ++ prepNP v.c2 np ;
post = []
} ;
Slash3V3 v np = {
s = \\t,p,a => finiteVerb v t p a ;
inf = v.infinitive ++ prepNP v.c3 np ;
c = v.c2 ;
imp = \\p,n => neg p ++ v.imperative ! n ;
post = prepNP v.c3 np
} ;
SlashV2V v vp = {
s = \\t,p,a => finiteVerb v t p a ;
inf = v.infinitive ++ vp.inf ;
c = v.c2 ;
imp = \\p,n => neg p ++ v.imperative ! n ;
post = vp.inf
} ;
SlashV2S v s = {
s = \\t,p,a => finiteVerb v t p a ;
inf = v.infinitive ++ "што" ++ s.s ;
c = v.c2 ;
imp = \\p,n => neg p ++ v.imperative ! n ;
post = "што" ++ s.s
} ;
SlashV2Q v qs = {
s = \\t,p,a => finiteVerb v t p a ;
inf = v.infinitive ++ qs.s ;
c = v.c2 ;
imp = \\p,n => neg p ++ v.imperative ! n ;
post = qs.s
} ;
SlashV2A v ap = {
s = \\t,p,a => finiteVerb v t p a ;
inf = v.infinitive ++ ap.s ! Nom ! GSg Masc ;
c = v.c2 ;
imp = \\p,n => neg p ++ v.imperative ! n ;
post = ap.s ! Nom ! GSg Masc
} ;
ComplSlash vp np = {
s = \\t,p,a => vp.s ! t ! p ! a ++ prepNP vp.c np ++ vp.post ;
inf = vp.inf ++ prepNP vp.c np ;
imp = \\p,n => vp.imp ! p ! n ++ prepNP vp.c np ++ vp.post
} ;
SlashVV vv vp = {
s = \\t,p,a => finiteVerb vv t p a ++ vp.s ! R.Pres ! R.Pos ! a ;
inf = vv.infinitive ++ vp.inf ;
c = vp.c ;
imp = \\p,n => neg p ++ vv.imperative ! n ++ vp.imp ! R.Pos ! n ;
post = vp.post
} ;
SlashV2VNP v np vp = {
s = \\t,p,a => finiteVerb v t p a ++ prepNP v.c2 np ++ vp.s ! R.Pres ! R.Pos ! a ;
inf = v.infinitive ++ prepNP v.c2 np ++ vp.inf ;
c = vp.c ;
imp = \\p,n => neg p ++ v.imperative ! n ++ prepNP v.c2 np ++ vp.imp ! R.Pos ! n ;
post = vp.post
} ;
ReflVP vp = {
s = \\t,p,a => vp.s ! t ! p ! a ++ "сябе" ++ vp.post ;
inf = vp.inf ++ "сябе" ;
imp = \\p,n => vp.imp ! p ! n ++ "сябе" ++ vp.post
} ;
UseComp comp = {
s = \\t,p,a => copula t p a ++ comp.s ! a ;
inf = "быць" ++ comp.s ! defaultAgr ;
imp = \\p,_ => neg p ++ "будзь" ++ comp.s ! defaultAgr
} ;
PassV2 v = {
s = \\t,p,a => copula t p a ++ v.participle ! a.g ! a.n ;
inf = "быць" ++ v.participle ! Masc ! Sg ;
imp = \\p,_ => neg p ++ "будзь" ++ v.participle ! Masc ! Sg
} ;
AdvVP vp adv = addAdvVP vp adv.s ;
ExtAdvVP vp adv = addAdvVP vp adv.s ;
AdVVP adv vp = addAdVVP adv.s vp ;
AdvVPSlash vp adv = addAdvSlash vp adv.s ;
AdVVPSlash adv vp = {
s = \\t,p,a => adv.s ++ vp.s ! t ! p ! a ;
inf = adv.s ++ vp.inf ;
c = vp.c ;
imp = \\p,n => adv.s ++ vp.imp ! p ! n ;
post = vp.post
} ;
VPSlashPrep vp prep = {
s = \\t,p,a => vp.s ! t ! p ! a ++ prep.s ;
inf = vp.inf ++ prep.s ;
c = prep ;
imp = \\p,n => vp.imp ! p ! n ++ prep.s ;
post = []
} ;
CompAP ap = {s = \\a => ap.s ! Nom ! genNum a.g a.n} ;
CompNP np = {s = \\_ => np.s ! Nom} ;
CompAdv adv = {s = \\_ => adv.s} ;
CompCN cn = {s = \\a => cn.s ! Nom ! a.n} ;
UseCopula = {
s = \\t,p,a => copula t p a ;
inf = "быць" ;
imp = \\p,_ => neg p ++ "будзь"
} ;
}
+3 -111
View File
@@ -1,5 +1,7 @@
--# -path=.:../abstract:../common
concrete DocumentationBul of Documentation = CatBul ** open concrete DocumentationBul of Documentation = CatBul ** open
ResBul, Prelude, ParamX, HTML in { ResBul, Prelude,
HTML in {
flags coding=utf8 ; flags coding=utf8 ;
lincat lincat
@@ -180,116 +182,6 @@ lin
s3= "" s3= ""
} ; } ;
{-
-} --# notpresent
InflectionCl = \cl -> {
t = "изр" ;
s1 = heading1 ("Изречение") ;
s2 =
heading2 "Изявително Наклонение" ++
frameTable (
tr (intagAttr "th" "colspan=\"3\"" "Акционни времена" ++
intagAttr "th" "colspan=\"3\"" "Резултативни времена") ++
tr (th "" ++ th "съобщително" ++ th "въпросително" ++
th "" ++ th "съобщително" ++ th "въпросително") ++
tr (intagAttr "th" "rowspan=\"2\"" "сегашно" ++
td (cl.s ! VPresent ! Simul ! Pos ! Main) ++
td (cl.s ! VPresent ! Simul ! Pos ! Quest) ++
intagAttr "th" "rowspan=\"2\"" "минало неопределено" ++
td (cl.s ! VPresent ! Anter ! Pos ! Main) ++
td (cl.s ! VPresent ! Anter ! Pos ! Quest)) ++
tr (td (cl.s ! VPresent ! Simul ! Neg ! Main) ++
td (cl.s ! VPresent ! Simul ! Neg ! Quest) ++
td (cl.s ! VPresent ! Anter ! Neg ! Main) ++
td (cl.s ! VPresent ! Anter ! Neg ! Quest)) ++
tr (intagAttr "th" "rowspan=\"2\"" "минало несвършено" ++
td (cl.s ! (VPastImperfect Indicative) ! Simul ! Pos ! Main) ++
td (cl.s ! (VPastImperfect Indicative) ! Simul ! Pos ! Quest) ++
intagAttr "th" "rowspan=\"2\"" "минало предварително" ++
td (cl.s ! (VPastImperfect Indicative) ! Anter ! Pos ! Main) ++
td (cl.s ! (VPastImperfect Indicative) ! Anter ! Pos ! Quest)) ++
tr (td (cl.s ! (VPastImperfect Indicative) ! Simul ! Neg ! Main) ++
td (cl.s ! (VPastImperfect Indicative) ! Simul ! Neg ! Quest) ++
td (cl.s ! (VPastImperfect Indicative) ! Anter ! Neg ! Main) ++
td (cl.s ! (VPastImperfect Indicative) ! Anter ! Neg ! Quest)) ++
tr (intagAttr "th" "rowspan=\"2\"" "минало свършено" ++
td (cl.s ! (VPastSimple Indicative) ! Simul ! Pos ! Main) ++
td (cl.s ! (VPastSimple Indicative) ! Simul ! Pos ! Quest) ++
intagAttr "th" "rowspan=\"2\" colspan=\"3\"" "") ++
tr (td (cl.s ! (VPastSimple Indicative) ! Simul ! Neg ! Main) ++
td (cl.s ! (VPastSimple Indicative) ! Simul ! Neg ! Quest)) ++
tr (intagAttr "th" "rowspan=\"2\"" "бъдеще" ++
td (cl.s ! (VFut Indicative) ! Simul ! Pos ! Main) ++
td (cl.s ! (VFut Indicative) ! Simul ! Pos ! Quest) ++
intagAttr "th" "rowspan=\"2\"" "бъдеще предварително" ++
td (cl.s ! (VFut Indicative) ! Anter ! Pos ! Main) ++
td (cl.s ! (VFut Indicative) ! Anter ! Pos ! Quest)) ++
tr (td (cl.s ! (VFut Indicative) ! Simul ! Neg ! Main) ++
td (cl.s ! (VFut Indicative) ! Simul ! Neg ! Quest) ++
td (cl.s ! (VFut Indicative) ! Anter ! Neg ! Main) ++
td (cl.s ! (VFut Indicative) ! Anter ! Neg ! Quest)) ++
tr (intagAttr "th" "rowspan=\"2\"" "бъдеще в миналото" ++
td (cl.s ! (VPastFut) ! Simul ! Pos ! Main) ++
td (cl.s ! (VPastFut) ! Simul ! Pos ! Quest) ++
intagAttr "th" "rowspan=\"2\"" "бъдеще предв. в миналото" ++
td (cl.s ! VPastFut ! Anter ! Pos ! Main) ++
td (cl.s ! VPastFut ! Anter ! Pos ! Quest)) ++
tr (td (cl.s ! VPastFut ! Simul ! Neg ! Main) ++
td (cl.s ! VPastFut ! Simul ! Neg ! Quest) ++
td (cl.s ! VPastFut ! Anter ! Neg ! Main) ++
td (cl.s ! VPastFut ! Anter ! Neg ! Quest))) ++
heading3 "Условно Наклонение" ++
frameTable (
tr (th "съобщително" ++ th "въпросително") ++
tr (td (cl.s ! (VCond Indicative) ! Simul ! Pos ! Main) ++
td (cl.s ! (VCond Indicative) ! Simul ! Pos ! Quest)) ++
tr (td (cl.s ! (VCond Indicative) ! Simul ! Neg ! Main) ++
td (cl.s ! (VCond Indicative) ! Simul ! Neg ! Quest))) ++
heading2 "Преизказни Форми" ++
frameTable (
tr (intagAttr "th" "colspan=\"3\"" "Акционни времена" ++
intagAttr "th" "colspan=\"3\"" "Резултативни времена") ++
tr (th "" ++ th "съобщително" ++ th "въпросително" ++
th "" ++ th "съобщително" ++ th "въпросително") ++
tr (intagAttr "th" "rowspan=\"2\"" "сегашно / минало несвършено" ++
td (cl.s ! (VPastImperfect Renarrative) ! Simul ! Pos ! Main) ++
td (cl.s ! (VPastImperfect Renarrative) ! Simul ! Pos ! Quest) ++
intagAttr "th" "rowspan=\"2\"" "минало неопределено/предварително" ++
td (cl.s ! (VPastImperfect Renarrative) ! Anter ! Pos ! Main) ++
td (cl.s ! (VPastImperfect Renarrative) ! Anter ! Pos ! Quest)) ++
tr (td (cl.s ! (VPastImperfect Renarrative) ! Simul ! Neg ! Main) ++
td (cl.s ! (VPastImperfect Renarrative) ! Simul ! Neg ! Quest) ++
td (cl.s ! (VPastImperfect Renarrative) ! Anter ! Neg ! Main) ++
td (cl.s ! (VPastImperfect Renarrative) ! Anter ! Neg ! Quest)) ++
tr (intagAttr "th" "rowspan=\"2\"" "минало свършено" ++
td (cl.s ! (VPastSimple Renarrative) ! Simul ! Pos ! Main) ++
td (cl.s ! (VPastSimple Renarrative) ! Simul ! Pos ! Quest) ++
intagAttr "th" "rowspan=\"2\" colspan=\"3\"" "") ++
tr (td (cl.s ! (VPastSimple Renarrative) ! Simul ! Neg ! Main) ++
td (cl.s ! (VPastSimple Renarrative) ! Simul ! Neg ! Quest)) ++
tr (intagAttr "th" "rowspan=\"2\"" "бъдеще / бъдеще в миналото" ++
td (cl.s ! (VFut Renarrative) ! Simul ! Pos ! Main) ++
td (cl.s ! (VFut Renarrative) ! Simul ! Pos ! Quest) ++
intagAttr "th" "rowspan=\"2\"" "бъдеще предв. / бъдеще предв. в миналото" ++
td (cl.s ! (VFut Renarrative) ! Anter ! Pos ! Main) ++
td (cl.s ! (VFut Renarrative) ! Anter ! Pos ! Quest)) ++
tr (td (cl.s ! (VFut Renarrative) ! Simul ! Neg ! Main) ++
td (cl.s ! (VFut Renarrative) ! Simul ! Neg ! Quest) ++
td (cl.s ! (VFut Renarrative) ! Anter ! Neg ! Main) ++
td (cl.s ! (VFut Renarrative) ! Anter ! Neg ! Quest))) ++
heading3 "Условно Наклонение" ++
frameTable (
tr (th "съобщително" ++ th "въпросително") ++
tr (td (cl.s ! (VCond Renarrative) ! Simul ! Pos ! Main) ++
td (cl.s ! (VCond Renarrative) ! Simul ! Pos ! Quest)) ++
tr (td (cl.s ! (VCond Renarrative) ! Simul ! Neg ! Main) ++
td (cl.s ! (VCond Renarrative) ! Simul ! Neg ! Quest))) ;
s3 = ""
} ;
{- --# notpresent
-}
InflectionV v = { InflectionV v = {
t = "гл" ; t = "гл" ;
s1= heading1 ("Глагол") ++ s1= heading1 ("Глагол") ++

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