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
443 changed files with 20528 additions and 167969 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
];
};
});
};
}
+3 -3
View File
@@ -1,5 +1,5 @@
Code,Name,Directory,Functor,Unlexer,Present,All,Try,Symbolic,Compatibility,Synopsis,MorphoDict Code,Name,Directory,Functor,Unlexer,Present,All,Try,Symbolic,Compatibility,Synopsis,MorphoDict
Afr,Afrikaans,afrikaans,,,,,,y,,y,n Afr,Afrikaans,afrikaans,,,,,,n,,y,n
Amh,Amharic,amharic,,,,,n,n,,n,n Amh,Amharic,amharic,,,,,n,n,,n,n
Ara,Arabic,arabic,,,,,,y,,y,y Ara,Arabic,arabic,,,,,,y,,y,y
Bel,Belarusian,belarusian,,,,y,n,n,n,y,n Bel,Belarusian,belarusian,,,,y,n,n,n,y,n
@@ -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
2 Afr Afrikaans afrikaans y n y n
3 Amh Amharic amharic n n n n
4 Ara Arabic arabic y y y
5 Bel Belarusian belarusian y n n n y n
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
** {} ** {}
+23 -82
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 A = Adj ;
linref A = \a -> case a.clit of {True=>"i"; False=>[]} ++ a.s ! Nom ! Masc ! Sg ; lincat N = Noun ;
lincat A2 = Adj ** {c2 : Compl} ; lincat N2 = Noun ** {c2 : Compl} ;
linref A2 = \a -> case a.clit of {True=>"i"; False=>[]} ++ a.s ! Nom ! Masc ! Sg ++ a.c2.s ; lincat N3 = Noun ** {c2,c3 : Compl} ;
lincat V, VA, VV, VS, VQ = Verb ; lincat A = Adj ;
lincat V2 = Verb ** {c2 : Compl} ; lincat A2 = Adj ** {c2 : Compl} ;
lincat V2S, V2Q, V3, V2A, V2V = Verb ** {c2,c3 : Compl} ; lincat V, VA, VV, VS, VQ = Verb ;
lincat Prep = Compl ; lincat V2, V2S, V2Q = Verb ** {c2 : Compl} ;
lincat ACard = {s : Str} ; lincat V3, V2A, V2V = Verb ** {c2,c3 : Compl} ;
lincat AP = {s : Species => Case => Gender => Number => Str} ; lincat Prep = Compl ;
lincat CN = Noun ;
lincat Card = {s : Str} ; lincat Numeral = {s : Str} ;
lincat Cl = {s : ParamX.Tense => Anteriority => Polarity => Str} ; lincat Digits = {s : Str; n : Number; tail : DTail} ;
lincat ClSlash = {s : ParamX.Tense => Anteriority => Polarity => Str; c2 : Compl} ; lincat Decimal = {s : Str; n : Number; hasDot : Bool} ;
lincat Comp = {s : Agr => Str} ;
lincat Conj = {s : Str} ; lincat AP = {s: Species => Case => Gender => Number => Str} ;
lincat DAP = {s : Str; n : Number} ; lincat CN = Noun ;
lincat Decimal = {s : Str; n : Number; hasDot : Bool} ; lincat Num = {s : Str; n : Number} ;
lincat Det = { lincat Quant = {s : Case => Gender => Number => Str; spec : Species} ;
s : Case => Gender => Str; lincat Det = {s : Case => Gender => Str; spec : Species; n : Number} ;
post : Species => Case => Gender => Str; lincat NP = {s: Case => Str; a : Agr} ;
sp : Species; lincat Pron = {s: Case => Str; acc_clit, dat_clit : Str; a : Agr} ;
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 Numeral = {s : Str} ;
lincat Ord = {s : Case => Gender => Number => Str} ;
lincat PN = {s : Str} ;
lincat Predet = {s : Str} ;
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} ;
+13 -87
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 {
mkDet : Str -> Number -> Det = \s,n -> lin Det {
s = \\_,_ => s ;
post = \\_,_,_ => [] ;
sp = Indef ;
n = n
} ; } ;
mkDet : (_,_,_,_,_,_,_,_ : Str) -> Number -> Det =
oper 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,7 @@ C1C2ek = { C1 = "" ; C1C2=""; C2 ="'k"};
C1C2esh = { C1 = "" ; C1C2=""; C2 ="'x"}; C1C2esh = { C1 = "" ; C1C2=""; C2 ="'x"};
C1C2achehu = { C1 = "" ; C1C2=""; C2 ="!ch&"}; C1C2achehu = { C1 = "" ; C1C2=""; C2 ="!ch&"};
C1C2o = { C1 = "" ; C1C2=""; C2 ="/"}; C1C2o = { C1 = "" ; C1C2=""; C2 ="/"};
C1C2a = { C1 = "" ; C1C2=""; C2="!"};
C1C2ew = { C1 = "" ; C1C2=""; C2="'w"}; C1C2ew = { C1 = "" ; C1C2=""; C2="'w"};
--CompPer mkV2yz y!l'h& !l !l !l cX7l 7l l'c !l --CompPer mkV2yz y!l'h& !l !l !l cX7l 7l l'c !l
@@ -717,12 +721,81 @@ meC1aC2= {C1 ="m'" ; C1C2="!"; C2 =""};
--Infinitve mkV2yz --Infinitve mkV2yz
C1aC2ii= {C1 ="" ; C1C2="!"; C2 ="#"}; C1aC2ii= {C1 ="" ; C1C2="!"; C2 ="#"};
--mkV2yz -- yz -- catch
--Perf --
C1AC2hu = {C1 ="" ; C1C2="!"; C2 ="h&"};
C1AC2n = { C1 = "" ; C1C2="!"; C2 ="n"};
C1AC2k = { C1 = "" ; C1C2="!"; C2 ="k"};
C1AC2sh = { C1 = "" ; C1C2="!"; C2 ="x"};
C1AC2achehu = { C1 = "" ; C1C2 ="!"; C2 ="!ch&"};
C1AC2a = { C1 = "" ; C1C2="!"; C2 ="'"};
C1AC2ach = { C1 = "" ; C1C2="!"; C2 ="'c"};
C1AC2u = { C1 = "" ; C1C2="!"; C2 ="&"};
-- Imper -- mkV2yz
eC1C2alehu = { C1 = "ä" ; C1C2=""; C2 ="!l'h&"};
enC1C2alen = { C1 = "än" ; C1C2=""; C2 ="!l'n"};
teC1C2yaleh = { C1 = "t" ; C1C2=""; C2 ="!l'h"};
teC1C2aleh = { C1 = "t" ; C1C2=""; C2 ="y!l'x"};
teC1C2alachehu = { C1 = "t" ; C1C2=""; C2 ="!l!ch&"};
yeC1C2al = { C1 = "y" ; C1C2=""; C2 ="!l"};
teC1C2alech = { C1 = "t" ; C1C2=""; C2 ="!l'c"};
yeC1C2alu = { C1 = "y" ; C1C2=""; C2 ="!l&"};
-- Cont -- mkV2yz
eC1C2 = { C1 = "ä" ; C1C2=""; C2 =""};
enC1C2 = { C1 = "än" ; C1C2=""; C2 =""};
teC1C2 = { C1 = "t" ; C1C2=""; C2 =""};
--teC1C2 = { C1 = "t" ; C1C2=""; C2 =""};3
teC1C2u = { C1 = "t" ; C1C2=""; C2 ="&"};
yeC1C2 = { C1 = "y" ; C1C2=""; C2 =""};
--teC1C2 = { C1 = "t" ; C1C2=""; C2 =""};
yeC1C2u = { C1 = "y" ; C1C2=""; C2 ="&"};
--Jus_Imperat mkV2yz
leC1aC2a = {C1 ="l" ; C1C2="!"; C2 =""};
enC1aC2a = { C1 = "än" ; C1C2="!"; C2 =""};
C1aC2 = { C1 = "" ; C1C2="!"; C2 =""};
C1aC2i = { C1 = "" ; C1C2="!"; C2 ="#"};
C1eC2u = { C1 = "" ; C1C2="!"; C2 ="&"};
yC1aC2a = { C1 = "y" ; C1C2="!"; C2 =""};
tC1aC2a = { C1 = "t" ; C1C2="!"; C2 =""};
yC1aC2u = { C1 = "y" ; C1C2="!"; C2 ="&"};
--Gerund mkV2yz
C1C2ie = {C1 ="" ; C1C2=""; C2 ="%"};
C1C2en = { C1 = "" ; C1C2=""; C2 ="'n"};
C1C2ek = { C1 = "" ; C1C2=""; C2 ="'k"};
C1C2esh = { C1 = "" ; C1C2=""; C2 ="'x"};
C1C2achehu = { C1 = "" ; C1C2=""; C2 ="!ch&"};
C1C2o = { C1 = "" ; C1C2=""; C2 ="/"};
C1C2a = { C1 = "" ; C1C2=""; C2="!"};
C1C2ew = { C1 = "" ; C1C2=""; C2="'w"};
--CompPer mkV2yz y!l'h& !l !l !l cX7l 7l l'c !l
C1C2iealehu = {C1 ="" ; C1C2=""; C2 ="%y!l'h&"};
C1C2enal = { C1 = "" ; C1C2=""; C2 ="'n!l"};
C1C2ekal = { C1 = "" ; C1C2=""; C2 ="'k!l"};
C1C2eshal = { C1 = "" ; C1C2=""; C2 ="'x!l"};
C1C2achehual = { C1 = "" ; C1C2=""; C2 ="!cX7l"};
C1C2oal = { C1 = "" ; C1C2=""; C2 ="7l"};
C1C2alech = { C1 = "" ; C1C2=""; C2="!l'c"};
C1C2ewal = { C1 = "" ; C1C2=""; C2="'w!l"};
--Infinitve mkV2yz
meC1aC2= {C1 ="m'" ; C1C2="!"; C2 =""};
--Infinitve mkV2yz
C1aC2ii= {C1 ="" ; C1C2="!"; C2 ="#"};
--nore -- nr -- live --nore -- nr -- live
--Perf -- --Perf --
C1oC2hu = {C1 ="" ; C1C2="/"; C2 ="h&"}; C1oC2hu = {C1 ="" ; C1C2="/"; C2 ="h&"};
C1oC2n = { C1 = "" ; C1C2="/"; C2 ="n"}; C1oC2n = { C1 = "" ; C1C2="/"; C2 ="n"};
C1oC2k = { C1 = "" ; C1C2="/"; C2 ="k"}; C1oC2k = { C1 = "" ; C1C2="/"; C2 ="k"};
C1oC2sh = { C1 = "" ; C1C2="/"; C2 ="x"}; C1oC2sh = { C1 = "" ; C1C2="/"; C2 ="x"};
C1oC2achehu = { C1 = "" ; C1C2 ="/"; C2 ="!ch&"};
C1oC2a = { C1 = "" ; C1C2="/"; C2 ="'"}; C1oC2a = { C1 = "" ; C1C2="/"; C2 ="'"};
C1oC2ach = { C1 = "" ; C1C2="/"; C2 ="'c"}; C1oC2ach = { C1 = "" ; C1C2="/"; C2 ="'c"};
C1oC2u = { C1 = "" ; C1C2="/"; C2 ="&"}; C1oC2u = { C1 = "" ; C1C2="/"; C2 ="&"};
@@ -785,12 +858,87 @@ meC1oC2= {C1 ="m'" ; C1C2="/"; C2 =""};
C1uaC2i= {C1 ="" ; C1C2="7"; C2 ="#"}; C1uaC2i= {C1 ="" ; C1C2="7"; C2 ="#"};
--nore -- nr -- live
--Perf --
C1oC2hu = {C1 ="" ; C1C2="/"; C2 ="h&"};
C1oC2n = { C1 = "" ; C1C2="/"; C2 ="n"};
C1oC2k = { C1 = "" ; C1C2="/"; C2 ="k"};
C1oC2sh = { C1 = "" ; C1C2="/"; C2 ="x"};
C1oC2achehu = { C1 = "" ; C1C2 ="/"; C2 ="!ch&"};
C1oC2a = { C1 = "" ; C1C2="/"; C2 ="'"};
C1oC2ach = { C1 = "" ; C1C2="/"; C2 ="'c"};
C1oC2u = { C1 = "" ; C1C2="/"; C2 ="&"};
-- Imper -- mkV2nr
eC1oC2alehu = { C1 = "ä" ; C1C2="/"; C2 ="!l'h&"};
enC1oC2alen = { C1 = "än" ; C1C2="/"; C2 ="!l'n"};
teC1oC2yaleh = { C1 = "t" ; C1C2="/"; C2 ="!l'h"};
teC1oC2alesh = { C1 = "t" ; C1C2="/"; C2 ="y!l'x"};
teC1oC2alachehu = { C1 = "t" ; C1C2="/"; C2 ="!l!ch&"};
yeC1oC2al = { C1 = "y" ; C1C2="/"; C2 ="!l"};
teC1oC2alech = { C1 = "t" ; C1C2="/"; C2 ="!l'c"};
yeC1oC2alu = { C1 = "y" ; C1C2="/"; C2 ="!l&"};
-- Imper -- mkV2nr
eC1oC2 = { C1 = "ä" ; C1C2="/"; C2 =""};
enC1oC2 = { C1 = "än" ; C1C2="/"; C2 =""};
teC1oC2 = { C1 = "t" ; C1C2="/"; C2 =""};
teC1oC2i = { C1 = "t" ; C1C2="/"; C2 ="#"};
teC1oC2u = { C1 = "t" ; C1C2="/"; C2 ="&"};
yeC1oC2 = { C1 = "y" ; C1C2="/"; C2 =""};
--teC1oC2 = { C1 = "t" ; C1C2="/"; C2 ="!l'c"};
yeC1oC2u = { C1 = "y" ; C1C2="/"; C2 ="&"};
--Jus_Imperat mkV2nr
leC1uC2 = {C1 ="l" ; C1C2="&"; C2 =""};
enC1uC2 = { C1 = "än" ; C1C2="&"; C2 =""};
C1uC2 = { C1 = "" ; C1C2="&"; C2 =""};
C1uC2i = { C1 = "" ; C1C2="&"; C2 ="#"};
C1uC2u = { C1 = "" ; C1C2="&"; C2 ="&"};
yC1uC2 = { C1 = "y" ; C1C2="&"; C2 =""};
tC1uC2 = { C1 = "t" ; C1C2="&"; C2 =""};
yC1uC2u = { C1 = "y" ; C1C2="&"; C2 ="&"};
--Gerund mkV2nr
C1oC2ie = {C1 ="" ; C1C2="/"; C2 ="%"};
C1oC2en = { C1 = "" ; C1C2="/"; C2 ="'n"};
C1oC2ek = { C1 = "" ; C1C2="/"; C2 ="'k"};
C1oC2esh = { C1 = "" ; C1C2="/"; C2 ="'x"};
C1oC2achehu = { C1 = "" ; C1C2="/"; C2 ="!ch&"};
C1oC2o = { C1 = "" ; C1C2="/"; C2 ="/"};
C1oC2A = { C1 = "" ; C1C2="/"; C2="!"};
C1oC2ew = { C1 = "" ; C1C2="/"; C2="'w"};
--CompPer mkV2nr y!l'h& !l !l !l cX7l 7l l'c !l
C1oC2iealehu = {C1 ="" ; C1C2="/"; C2 ="%y!l'h& "};
C1oC2enal = { C1 = "" ; C1C2="/"; C2 ="'n!l"};
C1oC2ekal = { C1 = "" ; C1C2="/"; C2 ="'k!l"};
C1oC2eshal = { C1 = "" ; C1C2="/"; C2 ="'x!l"};
C1oC2achehual = { C1 = "" ; C1C2="/"; C2 ="!cX7l"};
C1oC2oal = { C1 = "" ; C1C2="/"; C2 ="7l"};
C1oC2Alech = { C1 = "" ; C1C2="/"; C2="!l'c"};
C1oC2ewal = { C1 = "" ; C1C2="/"; C2="'w!l"};
--Infinitve mkV2nr
meC1oC2= {C1 ="m'" ; C1C2="/"; C2 =""};
--Participle mkV2nr
C1uaC2i= {C1 ="" ; C1C2="7"; C2 ="#"};
--mkV2wN -- wN -- swim --- Eg lie, see, say --mkV2wN -- wN -- swim --- Eg lie, see, say
--Perf -- --Perf --
C1AC2ehu = {C1 ="" ; C1C2="!"; C2 ="'h&"}; C1AC2ehu = {C1 ="" ; C1C2="!"; C2 ="'h&"};
C1AC2en = { C1 = "" ; C1C2="!"; C2 ="'n"}; C1AC2en = { C1 = "" ; C1C2="!"; C2 ="'n"};
C1AC2ek = { C1 = "" ; C1C2="!"; C2 ="'k"}; C1AC2ek = { C1 = "" ; C1C2="!"; C2 ="'k"};
C1AC2esh = { C1 = "" ; C1C2="!"; C2 ="'x"}; C1AC2esh = { C1 = "" ; C1C2="!"; C2 ="'x"};
--C1AC2achehu = { C1 = "" ; C1C2 ="!"; C2 ="!ch&"};
--C1AC2a = { C1 = "" ; C1C2="!"; C2 ="'"};
--C1AC2ach = { C1 = "" ; C1C2="!"; C2 ="'c"};
--C1AC2u = { C1 = "" ; C1C2="!"; C2 ="&"};
-- Imper -- mkV2wN -- Imper -- mkV2wN
eC1aC2alehu = { C1 = "ä" ; C1C2="!"; C2 ="!l'h&"}; eC1aC2alehu = { C1 = "ä" ; C1C2="!"; C2 ="!l'h&"};
enC1aC2alen = { C1 = "än" ; C1C2="!"; C2 ="!l'n"}; enC1aC2alen = { C1 = "än" ; C1C2="!"; C2 ="!l'n"};
@@ -844,6 +992,74 @@ C1aC2tewal = { C1 = "" ; C1C2="!"; C2="t'w!l"};
meC1aC2et= {C1 ="m'" ; C1C2="!"; C2 ="'t"}; meC1aC2et= {C1 ="m'" ; C1C2="!"; C2 ="'t"};
--nore -- nr -- live --nore -- nr -- live
--mkV2wN -- wN -- swim --- Eg lie, see, say
--Perf --
C1AC2ehu = {C1 ="" ; C1C2="!"; C2 ="'h&"};
C1AC2en = { C1 = "" ; C1C2="!"; C2 ="'n"};
C1AC2ek = { C1 = "" ; C1C2="!"; C2 ="'k"};
C1AC2esh = { C1 = "" ; C1C2="!"; C2 ="'x"};
--C1AC2achehu = { C1 = "" ; C1C2 ="!"; C2 ="!ch&"};
--C1AC2a = { C1 = "" ; C1C2="!"; C2 ="'"};
--C1AC2ach = { C1 = "" ; C1C2="!"; C2 ="'c"};
--C1AC2u = { C1 = "" ; C1C2="!"; C2 ="&"};
-- Imper -- mkV2wN
eC1aC2alehu = { C1 = "ä" ; C1C2="!"; C2 ="!l'h&"};
enC1aC2alen = { C1 = "än" ; C1C2="!"; C2 ="!l'n"};
teC1aC2yaleh = { C1 = "t" ; C1C2="!"; C2 ="!l'h"};
teC1aC2alesh = { C1 = "t" ; C1C2="!"; C2 ="y!l'x"};
teC1aC2alachehu = { C1 = "t" ; C1C2="!"; C2 ="!l!ch&"};
yeC1aC2al = { C1 = "y" ; C1C2="!"; C2 ="!l"};
teC1aC2alech = { C1 = "t" ; C1C2="!"; C2 ="!l'c"};
yeC1aC2alu = { C1 = "y" ; C1C2="!"; C2 ="!l&"};
-- Cont -- mkV2wN
eC1aC2 = { C1 = "ä" ; C1C2="!"; C2 =""};
enC1aC2 = { C1 = "än" ; C1C2="!"; C2 =""};
teC1aC2 = { C1 = "t" ; C1C2="!"; C2 =""};
--teC1aC2 = { C1 = "t" ; C1C2="!"; C2 =""};
teC1aC2u = { C1 = "t" ; C1C2="!"; C2 ="&"};
yeC1aC2 = { C1 = "y" ; C1C2="!"; C2 =""};
--teC1aC2 = { C1 = "t" ; C1C2="!"; C2 =""};
yeC1aC2u = { C1 = "y" ; C1C2="!"; C2 ="&"};
--Jus_Imperat mkV2wN
--leC1aC2a = {C1 ="l" ; C1C2="!"; C2 =""};
--enC1aC2a = { C1 = "än" ; C1C2="!"; C2 =""};
--C1aC2 = { C1 = "" ; C1C2="!"; C2 =""};
--C1aC2i = { C1 = "" ; C1C2="!"; C2 ="#"};
--C1eC2u = { C1 = "" ; C1C2="!"; C2 ="&"};
--yC1aC2a = { C1 = "y" ; C1C2="!"; C2 =""};
--tC1aC2a = { C1 = "t" ; C1C2="!"; C2 =""};
--yC1aC2u = { C1 = "y" ; C1C2="!"; C2 ="&"};
--Gerund mkV2wN
C1aC2cie = {C1 ="" ; C1C2="!"; C2 ="c%"};
C1aC2ten = { C1 = "" ; C1C2="!"; C2 ="t'n"};
C1aC2tek = { C1 = "" ; C1C2="!"; C2 ="t'k"};
C1aC2tesh = { C1 = "" ; C1C2="!"; C2 ="t'x"};
C1aC2tachehu = { C1 = "" ; C1C2="!"; C2 ="t!ch&"};
C1aC2to = { C1 = "" ; C1C2="!"; C2 ="t/"};
C1aC2ta = { C1 = "" ; C1C2="!"; C2="t!"};
C1aC2tew = { C1 = "" ; C1C2="!"; C2="t'w"};
--ComPer mkV2wN y!l'h& !l !l !l cX7l 7l l'c !l
C1aC2ciealehu = {C1 ="" ; C1C2="!"; C2 ="c%y!l'h&"};
C1aC2tenal = { C1 = "" ; C1C2="!"; C2 ="t'n!l"};
C1aC2tekal = { C1 = "" ; C1C2="!"; C2 ="t'k!l"};
C1aC2teshal = { C1 = "" ; C1C2="!"; C2 ="t'x!l"};
C1aC2tachehual = { C1 = "" ; C1C2="!"; C2 ="t!cX7l"};
C1aC2toal = { C1 = "" ; C1C2="!"; C2 ="t7l"};
C1aC2talech = { C1 = "" ; C1C2="!"; C2="t!l'c"};
C1aC2tewal = { C1 = "" ; C1C2="!"; C2="t'w!l"};
--Infinitve mkV2wN
meC1aC2et= {C1 ="m'" ; C1C2="!"; C2 ="'t"};
--nore -- nr -- live
----------- This much is enough for the duo-radicals--- ----------- This much is enough for the duo-radicals---
--There are few verbs still remaining like the case of shete, hede , --washe, aye, ale , all need unique froms for them selves. I will get --back here later!! --There are few verbs still remaining like the case of shete, hede , --washe, aye, ale , all need unique froms for them selves. I will get --back here later!!
@@ -893,8 +1109,63 @@ tC1eC2 = { C1 = "t" ; C1C2=""; C2 =""};
meC1C2et= {C1 ="m'" ; C1C2=""; C2 ="'t"}; meC1C2et= {C1 ="m'" ; C1C2=""; C2 ="'t"};
----------- This much is enough for the duo-radicals---
--There are few verbs still remaining like the case of shete, hede , --washe, aye, ale , all need unique froms for them selves. I will get --back here later!!
--seTe -- st -- give
--Perf --
C1eC2hu = {C1 ="" ; C1C2="'"; C2 ="'h&"};
C1eC2n = { C1 = "" ; C1C2="'"; C2 ="'n"};
C1eC2k = { C1 = "" ; C1C2="'"; C2 ="'k"};
C1eC2sh = { C1 = "" ; C1C2="'"; C2 ="'x"};
C1eC2achehu = { C1 = "" ; C1C2 ="'"; C2 ="'ch&"};
C1eC2a = { C1 = "" ; C1C2="'"; C2 ="'"};
C1eC2ach = { C1 = "" ; C1C2="'"; C2 ="'c"};
--C1eC2u = { C1 = "" ; C1C2="'"; C2 ="&"}; same as C1aC2u (bela)
-- Imper -- mkV2sT
--eC1eC2alehu = { C1 = "ä" ; C1C2="'"; C2 ="!l'h&"}; eC1aC2alehu
--enC1eC2alen = { C1 = "än" ; C1C2="'"; C2 ="!l'n"};enC1aC2alen
--teC1eC2yaleh = { C1 = "t" ; C1C2="'"; C2 ="!l'h"};teC1aC2yaleh
--teC1eC2aleh = { C1 = "t" ; C1C2="'"; C2 ="y!l'x"};teC1aC2aleh
--teC1eC2alachehu = { C1 = "t" ; C1C2="'"; C2 ="!l!ch&"};teC1aC2alachehu
--yeC1eC2al = { C1 = "y" ; C1C2="'"; C2 ="!l"};yeC1aC2al
--teC1eC2alech = { C1 = "t" ; C1C2="'"; C2 ="!l'c"};teC1aC2alech
--yeC1eC2alu = { C1 = "y" ; C1C2="'"; C2 ="!l&"};yeC1aC2alu
--Jus_Imperat mkV2sT
leC1eC2 = {C1 ="l" ; C1C2=""; C2 =""};
enC1eC2 = { C1 = "än" ; C1C2=""; C2 =""};
C1C2 = { C1 = "" ; C1C2=""; C2 =""};
C1eC2i = { C1 = "" ; C1C2=""; C2 ="#"};
--C1eC2u = { C1 = "" ; C1C2=""; C2 ="&"}; C1C2u
yC1eC2 = { C1 = "y" ; C1C2=""; C2 =""};
tC1eC2 = { C1 = "t" ; C1C2=""; C2 =""};
--yC1eC2u = { C1 = "y" ; C1C2=""; C2 ="&"};yC1C2u
--Gerund mkV2sT
--C1eC2ie = {C1 ="" ; C1C2="'"; C2 ="c%"}; C1aC2cie
--C1eC2en = { C1 = "" ; C1C2="'"; C2 ="'n"};C1aC2ten
--C1eC2ek = { C1 = "" ; C1C2="'"; C2 ="'k"}; C1aC2tek
--C1eC2esh = { C1 = "" ; C1C2="'"; C2 ="'x"}; C1aC2tesh
--C1eC2achehu = { C1 = "" ; C1C2="'"; C2 ="!ch&"};C1aC2tachehu
--C1eC2o = { C1 = "" ; C1C2="'"; C2 ="/"};C1aC2to
--C1eC2A = { C1 = "" ; C1C2="'"; C2="!"};C1aC2ta
--C1eC2ew = { C1 = "" ; C1C2="'"; C2="'w"}; C1aC2tew
--Infinitve mkV2sT
meC1C2et= {C1 ="m'" ; C1C2=""; C2 ="'t"};
---- Quadro_Radical ---- Quadro_Radical
--Starting with type Tri-Radical Roots --Starting with type Tri-Radical Roots
-- Eg. dbdb - fight -- Eg. dbdb - fight
-- qzqz - freeze -- qzqz - freeze
@@ -967,4 +1238,152 @@ meC1aC2C3aC4 = {C1 ="m'" ; C1C2="'"; C2C3 =""; C3C4="'"; C4= "" };
--Participle mkV4dbdb --Participle mkV4dbdb
C1eC2C3aC4i = {C1 ="" ; C1C2="'"; C2C3 =""; C3C4="!"; C4= "#" }; C1eC2C3aC4i = {C1 ="" ; C1C2="'"; C2C3 =""; C3C4="!"; C4= "#" };
---- Quadro_Radical
--Starting with type Tri-Radical Roots
-- Eg. dbdb - fight
-- qzqz - freeze
-- wrwr - throw
-- tnfs - breath
--Perf --
C1aC2aC3aC4hu = {C1 ="" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "h&" };
C1aC2aC3aC4n = { C1 = "" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "n" };
C1aC2aC3aC4k = { C1 = "" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "k" };
C1aC2aC3aC4sh = { C1 = "" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "x" };
C1aC2aC3aC4achehu = { C1 = "" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "!ch&" };
C1aC2aC3aC4a = { C1 = "" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "'" };
C1aC2aC3aC4ech = { C1 = "" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "'c" };
C1aC2aC3aC4u = { C1 = "" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "&" };
--Imper --mkV4dbdb
eC1aC2aC3C4alehu = { C1 = "ä" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "!l'h&" };
enC1aC2aC3C4alen = { C1 = "än" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "!l'n" };
teC1aC2aC3C4yaleh = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "!l'h" };
teC1aC2aC3C4aleh = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "y!l'x" };
teC1aC2aC3C4alachehu = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "!l!ch&" };
yeC1aC2aC3C4al = { C1 = "y" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "!l" };
teC1aC2aC3C4alech = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "!l'c" };
yeC1aC2aC3C4alu = { C1 = "y" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "!l&" };
--Cont --mkV4dbdb
eC1aC2aC3C4 = { C1 = "ä" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "" };
enC1aC2aC3C4 = { C1 = "än" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "" };
teC1aC2aC3C4 = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "" };
teC1aC2aC3C4i = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "#" };
teC1aC2aC3C4u = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "&" };
yeC1aC2aC3C4 = { C1 = "y" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "" };
--teC1aC2aC3C4 = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "" };
yeC1aC2aC3C4u = { C1 = "y" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "&" };
--Jus_Imperat mkV4dbdb
leC1aC2C3C4 = {C1 ="l" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "" };
enC1aC2C3C4 = { C1 = "än" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "" };
C1aC2C3C4 = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "" };
C1aC2C3C4i = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "#" };
C1aC2C3C4u = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "&" };
yC1aC2C3C4 = { C1 = "y" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "" };
tC1aC2C3C4 = { C1 = "t" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "" };
yC1aC2C3C4u = { C1 = "y" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "&" };
--Gerund mkV4dbdb
C1aC2C3C4ie = {C1 ="" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "%" };
C1aC2C3C4en = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'n" };
C1aC2C3C4ek = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'k" };
C1aC2C3C4esh = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'x" };
C1aC2C3C4achehu = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "!ch&" };
C1aC2C3C4o = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "/" };
C1aC2C3C4a = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "!" };
C1aC2C3C4ew = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'w" };
--CompPerf mkV4dbdb y!l'h& !l !l !l cX7l 7l l'c !l
C1aC2C3C4iealehu = {C1 ="" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "%y!l'h&" };
C1aC2C3C4enal = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'n!l" };
C1aC2C3C4ekal = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'k!l" };
C1aC2C3C4eshal = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'x!l" };
C1aC2C3C4achehual = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "!cX7l" };
C1aC2C3C4oal = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "7l" };
C1aC2C3C4alech = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "!l'c" };
C1aC2C3C4ewal = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'w!l" };
--Infinitve mkV4dbdb
meC1aC2C3aC4 = {C1 ="m'" ; C1C2="'"; C2C3 =""; C3C4="'"; C4= "" };
--Participle mkV4dbdb
C1eC2C3aC4i = {C1 ="" ; C1C2="'"; C2C3 =""; C3C4="!"; C4= "#" };
} }
{-
resource PatternsAmh = {
flags coding=utf8 ;
oper
--perf
C1aC2aC3ku = {C1 ="" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="ኩ"};
C1aC2aC3n = { C1 = "" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="ን"};
C1aC2aC3k = { C1 = "" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="ክ"};
C1aC2aC3sh = { C1 = "" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="ሽ"};
C1aC2aC3achehu = { C1 = "" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="አችሁ"};
C1aC2aC3e = { C1 = "" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="ኧ"};
C1aC2aC3ech = { C1 = "" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="ኧች"};
C1aC2aC3u = { C1 = "" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="ኡ"};
--imper
eC1aC2C3alehu = { C1 = "እ" ; C1C2="ኧ"; C2C3 =""; C3="አለሁ"};
enC1aC2C3alen = { C1 = "እን" ; C1C2="ኧ"; C2C3 =""; C3="አለን"};
teC1aC2C3yaleh = { C1 = "ት" ; C1C2="ኧ"; C2C3 =""; C3="አለህ"};
teC1aC2C3aleh = { C1 = "ት" ; C1C2="ኧ"; C2C3 =""; C3="ያለሽ"};
teC1aC2C3alachehu = { C1 = "ት" ; C1C2="ኧ"; C2C3 =""; C3="አላችሁ"};
yeC1aC2C3al = { C1 = "ይ" ; C1C2="ኧ"; C2C3 =""; C3="አል"};
teC1aC2C3alech = { C1 = "ት" ; C1C2="ኧ"; C2C3 =""; C3="አለች"};
yeC1aC2C3alu = { C1 = "ይ" ; C1C2="ኧ"; C2C3 =""; C3="አሉ"};
}
-}
+3
View File
@@ -22,9 +22,12 @@ concrete PhraseAmh of Phrase = CatAmh ** open
UttIP ip = ip ; --- Acc also UttIP ip = ip ; --- Acc also
UttVP vp = {s = vp.obj.s ++ vp.inf} ; UttVP vp = {s = vp.obj.s ++ vp.inf} ;
UttIAdv iadv = iadv ; UttIAdv iadv = iadv ;
UttCN n = {s = n.s ! Sg ! Indef!Nom} ;
UttCard n = {s = n.s ! Masc!Sg!Indef!Nom} ;
UttImpSg pol imp = {s = pol.s ++ imp.s!pol.p!Masc!Sg}; UttImpSg pol imp = {s = pol.s ++ imp.s!pol.p!Masc!Sg};
UttImpPl pol imp = {s = pol.s ++ imp.s ! pol.p! Masc! Pl} ; --- TO DO UttImpPl pol imp = {s = pol.s ++ imp.s ! pol.p! Masc! Pl} ; --- TO DO
UttImpPol pol imp = {s = pol.s ++ imp.s ! pol.p ! Masc!Pl} ; -- TO DO --- UttImpPol pol imp = {s = pol.s ++ imp.s ! pol.p ! Masc!Pl} ; -- TO DO ---
UttQS qs = {s = qs.s } ; -- TO DO
{- {-
PConjConj conj = {s = conj.s2} ; --- PConjConj conj = {s = conj.s2} ; ---
-5
View File
@@ -1,5 +0,0 @@
--# -path=.:../afrikaans:../common:../abstract:../prelude
resource SymbolicAfr = Symbolic with
(Symbol = SymbolAfr),
(Grammar = GrammarAfr) ;
+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 {
} }
+5 -9
View File
@@ -1,16 +1,12 @@
--# -path=.:../persian:../common:../abstract:../prelude --# -path=.:../persian:../common:../abstract:../prelude
resource TryPes = SyntaxPes-[mkAdN], LexiconPes, ParadigmsPes -[mkDet,mkQuant,mkAdv,mkAdN,mkOrd,mkQuant,mkVoc]** resource TryPes = SyntaxPes, LexiconPes, ParadigmsPes -[mkDet,mkQuant,mkAdv]**
open (P = ParadigmsPes) in { open (P = ParadigmsPes) in {
oper -- oper
mkAdv = overload SyntaxPes {
mkAdv : Str -> Adv = P.mkAdv ;
} ;
mkAdN = overload { -- mkAdv = overload SyntaxPes {
mkAdN : CAdv -> AdN = SyntaxPes.mkAdN ; -- mkAdv : Str -> Adv = P.mkAdv ;
mkAdN : Str -> AdN = P.mkAdN ; -- } ;
} ;
} }
-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 -33
View File
@@ -1,35 +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
} ;
UseA2 a = PositA a ;
ComplA2 a np = {
s = \\sp,c,n => (case a.c2.isPre of {
True => a.c2.s ++ np.s ! a.c2.c;
False => np.s ! a.c2.c ++ a.c2.s
}) ++ a.s ! c ! n;
isPre = False
} ;
AdvAP ap adv = {s = \\sp,c,n => ap.s ! sp ! c ! n ++ adv.s; isPre = ap.isPre} ;
SentAP ap sc = {s = \\sp,c,n => ap.s ! sp ! c ! n ++ sc.s; isPre = ap.isPre} ;
ComparA a np = {
s = \\sp,c,n => a.s ! c ! n ++ "քան" ++ np.s ! Nom; isPre = False
} ;
UseComparA a = {
s = \\sp,c,n => "ավելի" ++ (a.s ! c ! n); isPre = True
} ;
} }
-10
View File
@@ -1,10 +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
}} ;
lin PositAdvAdj a = {s = a.s ! Instr ! Sg} ;
lin PositAdAAdj a = {s = a.s ! Instr ! Sg} ;
lin AdAdv ada adv = {s = ada.s ++ adv.s} ;
lin SubjS subj s = {s = subj.s ++ s.s} ;
}
+1 -2
View File
@@ -1,5 +1,4 @@
concrete AllHye of AllHyeAbs = concrete AllHye of AllHyeAbs =
LangHye, LangHye
ExtendHye
** **
{} ; {} ;
+1 -2
View File
@@ -1,4 +1,3 @@
abstract AllHyeAbs = abstract AllHyeAbs =
Lang, Lang
Extend
** {} ** {}
+15 -63
View File
@@ -1,64 +1,16 @@
concrete CatHye of Cat = CommonX ** open Prelude,ResHye in { concrete CatHye of Cat = CommonX ** open ResHye in {
lincat A = Adj ;
lincat A2 = Adj ** {c2 : Compl} ; lincat V = Verb ;
lincat ACard = {s : Str} ; lincat VV,VS,VQ,VA = Verb ;
lincat AP = {s : Species => Case => Number => Str; isPre : Bool} ; lincat V2 = Verb ** {c2 : Compl} ;
lincat CN = {s : Species => Case => Number => Str} ; lincat V3,V2A,V2S,V2Q,V2V = Verb ** {c2,c3 : Compl} ;
lincat Card = {s : Str} ; lincat N = Noun ;
lincat Cl = {s : Str; lincat N2 = Noun ** {c2 : Compl} ;
negative : Tense => Str; lincat N3 = Noun ** {c2,c3 : Compl} ;
conditional : Aspect => Number => Str; lincat CN = Noun ;
converb : {imperfective : Str; futCon1 : Str; lincat A = Adj ;
futCon2 : Str; negative : Str; lincat A2 = Adj ** {c2 : Compl} ;
perfective : Str; simultaneous : Str}; lincat AP = Adj ;
passive : Str; past : Person => Number => Str; lincat Prep = Compl ;
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 : CardOrd => Str; n : Number; hasDot : Bool} ;
lincat Det = {s : Str; n : Number; sp : Species} ;
lincat Digits = {s : CardOrd => Str; n : Number; tail : DTail} ;
lincat GN = {s : Str} ;
lincat IComp = {s : Str} ;
lincat IDet = {s : Str} ;
lincat IP = {s : Str} ;
lincat IQuant = {s : Str} ;
lincat Imp = {s : Str} ;
lincat LN = {s : Str} ;
lincat N = Noun ;
lincat N2 = 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 : CardOrd => Str; n : Number} ;
lincat Ord = {s : Str} ;
lincat PN = {s : Str} ;
lincat Predet = {s : Str} ;
lincat Prep = Compl ;
lincat Pron = {s : Case => Str; empty : Str; a : Agr} ;
lincat QCl = {s : Str} ;
lincat QS = {s : Str} ;
lincat Quant = {s : Str; sp : Species} ;
lincat RCl = {s : Str} ;
lincat RP = {s : Str} ;
lincat RS = {s : Str} ;
lincat S = {s : Str} ;
lincat SN = {s : Str} ;
lincat SSlash = {s : Str} ;
lincat Subj = {s : Str} ;
lincat V = Verb ;
lincat VV,VS,VQ,VA = Verb ;
lincat V2 = Verb ** {c2 : Compl} ;
lincat V3,V2A,V2S,V2Q,V2V = Verb ** {c2,c3 : Compl} ;
lincat VP = {s : Str;
conditional : Aspect => Person => Number => Str;
converb : {imperfective : Str; futCon1 : Str; futCon2 : Str;
negative : Str; perfective : Str; simultaneous : Str};
imperative : Number => Str; passive : Str;
past : Person => Number => Str; participle : PartType => Str;
subjunctive : Aspect => Person => Number => Str} ;
lincat VPSlash = Verb ** {c2 : Compl} ;
} }
-22
View File
@@ -1,22 +0,0 @@
concrete ConjunctionHye of Conjunction = CatHye ** open Prelude, ResHye in {
lincat
[S] = {s1,s2 : Str} ; [RS] = {s1,s2 : Str} ; [Adv] = {s1,s2 : Str} ;
[AdV] = {s1,s2 : Str} ; [NP] = {s1,s2 : Str} ; [AP] = {s1,s2 : Str} ;
[IAdv] = {s1,s2 : Str} ; [CN] = {s1,s2 : Str} ; [DAP] = {s1,s2 : Str} ;
lin
BaseS x y = {s1=x.s;s2=y.s}; ConsS x xs = {s1=x.s;s2=xs.s1 ++ "," ++ xs.s2}; ConjS c xs = {s=xs.s1 ++ c.s ++ xs.s2};
BaseRS x y = {s1=x.s;s2=y.s}; ConsRS x xs = {s1=x.s;s2=xs.s1 ++ "," ++ xs.s2}; ConjRS c xs = {s=xs.s1 ++ c.s ++ xs.s2};
BaseAdv x y = {s1=x.s;s2=y.s}; ConsAdv x xs = {s1=x.s;s2=xs.s1 ++ "," ++ xs.s2}; ConjAdv c xs = {s=xs.s1 ++ c.s ++ xs.s2};
BaseAdV x y = {s1=x.s;s2=y.s}; ConsAdV x xs = {s1=x.s;s2=xs.s1 ++ "," ++ xs.s2}; ConjAdV c xs = {s=xs.s1 ++ c.s ++ xs.s2};
BaseIAdv x y = {s1=x.s;s2=y.s}; ConsIAdv x xs = {s1=x.s;s2=xs.s1 ++ "," ++ xs.s2}; ConjIAdv c xs = {s=xs.s1 ++ c.s ++ xs.s2};
BaseNP x y = {s1=x.s ! Nom;s2=y.s ! Nom}; ConsNP x xs = {s1=x.s ! Nom;s2=xs.s1 ++ "," ++ xs.s2};
ConjNP c xs = {s=\\_ => xs.s1 ++ c.s ++ xs.s2; a={n=Pl;p=P3}};
BaseAP x y = {s1=x.s ! Indef ! Nom ! Sg;s2=y.s ! Indef ! Nom ! Sg};
ConsAP x xs = {s1=x.s ! Indef ! Nom ! Sg;s2=xs.s1 ++ "," ++ xs.s2};
ConjAP c xs = {s=\\_,_,_ => xs.s1 ++ c.s ++ xs.s2;isPre=True};
BaseCN x y = {s1=x.s ! Indef ! Nom ! Sg;s2=y.s ! Indef ! Nom ! Sg};
ConsCN x xs = {s1=x.s ! Indef ! Nom ! Sg;s2=xs.s1 ++ "," ++ xs.s2};
ConjCN c xs = {s=\\_,_,_ => xs.s1 ++ c.s ++ xs.s2};
BaseDAP x y = {s1=x.s;s2=y.s}; ConsDAP x xs = {s1=x.s;s2=xs.s1 ++ "," ++ xs.s2};
ConjDet c xs = {s=xs.s1 ++ c.s ++ xs.s2;n=Pl;sp=Indef};
}
-59
View File
@@ -1,59 +0,0 @@
concrete ConstructionHye of Construction = CatHye ** open ResHye, ParadigmsHye, Prelude in {
lincat Timeunit, Hour, Weekday, Month, Monthday, Year, Language = {s:Str} ;
oper
stateVP : Str -> VP = \s -> lin VP (invarVerb s) ;
constCN : Str -> CN = \s -> lin CN {s=\\_,_,_=>s} ;
lin
hungry_VP=stateVP "սոված";thirsty_VP=stateVP "ծարավ";tired_VP=stateVP "հոգնած";
scared_VP=stateVP "վախեցած";ill_VP=stateVP "հիվանդ";ready_VP=stateVP "պատրաստ";
has_age_VP c=stateVP (c.s++"տարեկան");
have_name_Cl np name=lin Cl {s=np.s!Nom++name.s!Nom;negative=table {_=>np.s!Nom++"չի"++name.s!Nom};conditional=\\_,_=>np.s!Nom++name.s!Nom;
converb={imperfective=np.s!Nom++name.s!Nom;futCon1=np.s!Nom++name.s!Nom;futCon2=np.s!Nom++name.s!Nom;
negative=np.s!Nom++name.s!Nom;perfective=np.s!Nom++name.s!Nom;simultaneous=np.s!Nom++name.s!Nom};
passive=np.s!Nom++name.s!Nom;past=\\_,_=>np.s!Nom++name.s!Nom;participle=\\_=>np.s!Nom++name.s!Nom;
subjunctive=\\_,_=>np.s!Nom++name.s!Nom};
married_Cl x y=have_name_Cl x y;
what_name_QCl np={s="ինչ է"++np.s!Nom++"անունը"};how_old_QCl np={s=np.s!Nom++"քանի տարեկան է"};
how_far_QCl np={s=np.s!Nom++"որքան հեռու է"};weather_adjCl ap=have_name_Cl {s=\\_=>[];a={n=Sg;p=P3}} {s=\\_=>ap.s!Indef!Nom!Sg;a={n=Sg;p=P3}};
is_right_VP=stateVP "ճիշտ";is_wrong_VP=stateVP "սխալ";
n_units_AP card cn a={s=\\sp,c,n=>card.s++cn.s!Indef!Nom!Pl++a.s!c!n;isPre=True};
n_units_of_NP card cn np={s=\\c=>card.s++cn.s!Indef!Nom!Pl++np.s!c;a=np.a};
n_unit_CN card unit cn={s=\\sp,c,n=>card.s++unit.s!Indef!Nom!Sg++cn.s!sp!c!n};
bottle_of_CN np=constCN ("շիշ"++np.s!Dat);cup_of_CN np=constCN ("բաժակ"++np.s!Dat);
glass_of_CN np=constCN ("բաժակ"++np.s!Dat);
few_X_short_of_Y np x y={s=np.s!Dat++x.s!Indef!Nom!Pl++y.s!Indef!Nom!Sg++"չի բավականացնում"};
timeunitAdv c u={s=c.s++u.s};timeunitRange a b u={s=a.s++b.s++u.s};
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=lin N (invarNoun d.s);monthN m=lin N (invarNoun m.s);weekdayPN d={s=d.s};monthPN m={s=m.s};
languageNP l={s=\\_=>l.s;a={n=Sg;p=P3}};languageCN l=constCN l.s;
oneHour={s="մեկ"};twoHour={s="երկու"};threeHour={s="երեք"};fourHour={s="չորս"};fiveHour={s="հինգ"};
sixHour={s="վեց"};sevenHour={s="յոթ"};eightHour={s="ութ"};nineHour={s="ինը"};tenHour={s="տասը"};
elevenHour={s="տասնմեկ"};twelveHour={s="տասներկու"};
thirteenHour={s="տասներեք"};fourteenHour={s="տասնչորս"};fifteenHour={s="տասնհինգ"};
sixteenHour={s="տասնվեց"};seventeenHour={s="տասնյոթ"};eighteenHour={s="տասնութ"};
nineteenHour={s="տասնինը"};twentyHour={s="քսան"};twentyOneHour={s="քսանմեկ"};
twentyTwoHour={s="քսաներկու"};twentyThreeHour={s="քսաներեք"};twentyFourHour={s="քսանչորս"};
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="հինդի"};italian_Language={s="իտալերեն"};japanese_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="ուրդու"};
}
+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
-116
View File
@@ -1,116 +0,0 @@
--# -path=.:../abstract:../common:prelude
concrete ExtendHye of Extend =
CatHye ** ExtendFunctor - [
VPS, ListVPS, VPI, ListVPI,
ListComp, ListImp,
RNP, RNPList,
GenModNP, EmptyRelSlash,
MkVPS, BaseVPS, ConsVPS, ConjVPS, PredVPS, SQuestVPS, QuestVPS, RelVPS,
ExistS, ExistNPQS, ExistIPQS,
MkVPI, BaseVPI, ConsVPI, ConjVPI, ComplVPIVV,
PresPartAP, EmbedPresPart, PastPartAP, PastPartAgentAP,
PassVPSlash, PassAgentVPSlash, ProgrVPSlash, ComplBareVS,
ReflPron, ReflPoss, PredetRNP, AdvRNP, AdvRVP, AdvRAP, PossPronRNP,
Base_rr_RNP, Base_nr_RNP, Base_rn_RNP, Cons_rr_RNP, Cons_nr_RNP, ConjRNP,
CompoundN, CompoundAP, GerundCN, GerundNP, GerundAdv, ByVP, ApposNP,
PositAdVAdj, UttVPShort, ComplSlashPartLast,
UseDAPMasc, UseDAPFem, UseDAP,
DetNPMasc, DetNPFem, PredAPVP, SubjRelNP,
BaseComp, ConsComp, ConjComp, BaseImp, ConsImp, ConjImp,
TPastSimple
] with (Grammar = GrammarHye) **
open Prelude, ResHye, ParadigmsHye, (R = ParamX) in {
lincat
VPS = {s : Str} ; [VPS] = {s1,s2 : Str} ;
VPI = {s : Str} ; [VPI] = {s1,s2 : Str} ;
[Comp] = {s1,s2 : Str} ; [Imp] = {s1,s2 : Str} ;
RNP = {s : Case => Str} ; RNPList = {s : Case => Str} ;
oper
extToVP : Verb -> VP = \v -> lin VP {s=v.s;conditional=v.conditional;converb=v.converb;
imperative=v.imperative;passive=v.passive;past=v.past;participle=v.participle;
subjunctive=v.subjunctive} ;
extAddVP : VP -> Str -> VP = \v,x -> lin VP {s=v.s ++ x;
conditional=\\a,p,n=>v.conditional!a!p!n ++ x;
converb={imperfective=v.converb.imperfective++x;futCon1=v.converb.futCon1++x;
futCon2=v.converb.futCon2++x;negative=v.converb.negative++x;
perfective=v.converb.perfective++x;simultaneous=v.converb.simultaneous++x};
imperative=\\n=>v.imperative!n++x;passive=v.passive++x;
past=\\p,n=>v.past!p!n++x;participle=\\p=>v.participle!p++x;
subjunctive=\\a,p,n=>v.subjunctive!a!p!n++x} ;
refl : RNP = lin RNP {s=\\_=>"իրեն"} ;
lin
GenModNP num np cn = {s=\\c=>np.s!Dat ++ cn.s!Indef!c!num.n;a={n=num.n;p=P3}} ;
EmptyRelSlash slash = {s="որը" ++ slash.s} ;
MkVPS temp pol vp = {s=pol.s ++ vp.s} ;
BaseVPS x y = {s1=x.s;s2=y.s} ;
ConsVPS x xs = {s1=x.s;s2=xs.s1++","++xs.s2} ;
ConjVPS c xs = {s=xs.s1++c.s++xs.s2} ;
PredVPS np vps = {s=np.s!Nom++vps.s} ;
SQuestVPS np vps = {s=np.s!Nom++vps.s++"՞"} ;
QuestVPS ip vps = {s=ip.s++vps.s++"՞"} ;
RelVPS rp vps = {s=rp.s++vps.s} ;
ExistS t p np = {s=np.s!Nom++"կա"} ;
ExistNPQS t p np = {s=np.s!Nom++"կա՞"} ;
ExistIPQS t p ip = {s=ip.s++"կա՞"} ;
MkVPI vp = {s=vp.s} ;
BaseVPI x y = {s1=x.s;s2=y.s} ;
ConsVPI x xs = {s1=x.s;s2=xs.s1++","++xs.s2} ;
ConjVPI c xs = {s=xs.s1++c.s++xs.s2} ;
ComplVPIVV vv vpi = extAddVP (extToVP vv) vpi.s ;
PresPartAP vp = {s=\\_,_,_=>vp.participle!Subject;isPre=True} ;
EmbedPresPart vp = {s=vp.participle!Subject} ;
PastPartAP slash = {s=\\_,_,_=>slash.participle!Resultative;isPre=True} ;
PastPartAgentAP slash np = {s=\\_,_,_=>slash.participle!Resultative++np.s!Instr;isPre=True} ;
PassVPSlash slash = extAddVP (extToVP (mkV "լինել")) (slash.participle!Resultative) ;
PassAgentVPSlash slash np = extAddVP (extToVP (mkV "լինել")) (slash.participle!Resultative++np.s!Instr) ;
ProgrVPSlash slash = slash ;
ComplBareVS vs s = extAddVP (extToVP vs) s.s ;
ReflPron = refl ;
ReflPoss num cn = {s=\\c=>"իր"++cn.s!Indef!c!num.n} ;
PredetRNP pred r = {s=\\c=>pred.s++r.s!c} ;
AdvRNP np prep r = {s=\\c=>np.s!c++prep.s++r.s!prep.c} ;
AdvRVP vp prep r = extAddVP vp (prep.s++r.s!prep.c) ;
AdvRAP ap prep r = {s=\\sp,c,n=>ap.s!sp!c!n++prep.s++r.s!prep.c;isPre=ap.isPre} ;
PossPronRNP pron num cn r = {s=\\c=>pron.empty++cn.s!Indef!c!num.n++r.s!Dat;a={n=num.n;p=P3}} ;
Base_rr_RNP x y = {s=\\c=>x.s!c++y.s!c} ;
Base_nr_RNP x y = {s=\\c=>x.s!c++y.s!c} ;
Base_rn_RNP x y = {s=\\c=>x.s!c++y.s!c} ;
Cons_rr_RNP x xs = {s=\\c=>x.s!c++xs.s!c} ;
Cons_nr_RNP x xs = {s=\\c=>x.s!c++xs.s!c} ;
ConjRNP conj xs = {s=\\c=>conj.s++xs.s!c} ;
CompoundN n1 n2 = lin N {s=\\c,n=>n1.s!Nom!Sg++n2.s!c!n;def_dat=\\n=>n1.s!Nom!Sg++n2.def_dat!n;
def_nom=\\n=>n1.s!Nom!Sg++n2.def_nom!n;poss1=\\c,n=>n1.s!Nom!Sg++n2.poss1!c!n;poss2=\\c,n=>n1.s!Nom!Sg++n2.poss2!c!n} ;
CompoundAP n a = {s=\\sp,c,num=>n.s!Nom!Sg++a.s!c!num;isPre=True} ;
GerundCN vp = {s=\\_,_,_=>vp.s} ;
GerundNP vp = {s=\\_=>vp.s;a={n=Sg;p=P3}} ;
GerundAdv vp = {s=vp.s} ;
ByVP vp = {s=vp.s} ;
ApposNP np app = {s=\\c=>np.s!c++","++app.s!Nom;a=np.a} ;
PositAdVAdj a = {s=a.s!Instr!Sg} ;
UttVPShort vp = {s=vp.s} ;
ComplSlashPartLast slash np = extAddVP (extToVP slash) (slash.c2.s++np.s!slash.c2.c) ;
UseDAPMasc dap = {s=\\_=>dap.s;a={n=Sg;p=P3}} ;
UseDAPFem dap = {s=\\_=>dap.s;a={n=Sg;p=P3}} ;
UseDAP dap = {s=\\_=>dap.s;a={n=Sg;p=P3}} ;
DetNPMasc = variants {} ;
DetNPFem = variants {} ;
PredAPVP = variants {} ;
SubjRelNP = variants {} ;
BaseComp x y = {s1=x.s;s2=y.s} ;
ConsComp x xs = {s1=x.s;s2=xs.s1++","++xs.s2} ;
ConjComp c xs = {s=xs.s1++c.s++xs.s2} ;
BaseImp x y = {s1=x.s;s2=y.s} ;
ConsImp x xs = {s1=x.s;s2=xs.s1++","++xs.s2} ;
ConjImp c xs = {s=xs.s1++c.s++xs.s2} ;
TPastSimple = {s=[];t=R.Past} ;
}
+3 -13
View File
@@ -1,16 +1,6 @@
concrete GrammarHye of Grammar = concrete GrammarHye of Grammar =
NounHye,
VerbHye,
AdjectiveHye,
AdverbHye,
NumeralHye,
SentenceHye,
QuestionHye,
RelativeHye,
ConjunctionHye,
PhraseHye,
StructuralHye,
IdiomHye,
TenseX, TenseX,
NamesHye ** { PhraseHye,
NounHye,
AdjectiveHye ** {
} }
-21
View File
@@ -1,21 +0,0 @@
concrete IdiomHye of Idiom = CatHye ** open ResHye in {
oper
bareCl : Str -> Cl = \s -> lin Cl {
s=s; negative=table {_ => "չ" ++ s}; conditional=\\_,_ => s;
converb={imperfective=s;futCon1=s;futCon2=s;negative=s;perfective=s;simultaneous=s};
passive=s;past=\\_,_ => s;participle=\\_ => s;subjunctive=\\_,_ => s
} ;
lin
ImpersCl vp = bareCl vp.s ;
GenericCl vp = bareCl ("մարդ" ++ vp.s) ;
CleftNP np rs = bareCl (np.s ! Nom ++ rs.s) ;
CleftAdv adv s = bareCl (adv.s ++ s.s) ;
ExistNP np = bareCl (np.s ! Nom ++ "կա") ;
ExistIP ip = {s=ip.s ++ "կա՞"} ;
ExistNPAdv np adv = bareCl (adv.s ++ np.s ! Nom ++ "կա") ;
ExistIPAdv ip adv = {s=adv.s ++ ip.s ++ "կա՞"} ;
ProgrVP vp = vp ;
ImpPl1 vp = {s="եկեք" ++ vp.s} ;
ImpP3 np vp = {s="թող" ++ np.s ! Nom ++ vp.s} ;
SelfAdvVP vp = vp ; SelfAdVVP vp = vp ; SelfNP np = np ;
}
-1
View File
@@ -2,7 +2,6 @@
concrete LangHye of Lang = concrete LangHye of Lang =
GrammarHye, GrammarHye,
LexiconHye LexiconHye
,ConstructionHye
,DocumentationHye --# notpresent ,DocumentationHye --# notpresent
** { ** {
-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 "կին" ;
} }
+1039 -999
View File
File diff suppressed because it is too large Load Diff
-12
View File
@@ -1,12 +0,0 @@
concrete NamesHye of Names = CatHye ** open Prelude, ResHye in {
lin
GivenName n = {s=\\_=>n.s;a={n=Sg;p=P3}} ;
MaleSurname n = {s=\\_=>n.s;a={n=Sg;p=P3}} ;
FemaleSurname n = {s=\\_=>n.s;a={n=Sg;p=P3}} ;
PlSurname n = {s=\\_=>n.s;a={n=Pl;p=P3}} ;
FullName n s = {s=\\_=>n.s++s.s;a={n=Sg;p=P3}} ;
UseLN n = {s=\\_=>n.s;a={n=Sg;p=P3}} ;
PlainLN n = {s=\\_=>n.s;a={n=Sg;p=P3}} ;
InLN n = {s=n.s++BIND++"-ում"} ;
AdjLN a n = {s=a.s!Indef!Nom!Sg++n.s} ;
}
+3 -87
View File
@@ -1,88 +1,4 @@
concrete NounHye of Noun = CatHye ** open Prelude, 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 AdvNP np adv = {s = \\c => np.s ! c ++ adv.s; a = np.a} ;
lin ExtAdvNP np adv = {s = \\c => np.s ! c ++ "," ++ adv.s; a = np.a} ;
lin PredetNP pred np = {s = \\c => pred.s ++ np.s ! c; a = np.a} ;
lin UsePN pn = {s = \\_ => pn.s; a = {n = Sg; p = P3}} ;
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 DetQuantOrd quant num ord = {
s = quant.s ++ num.s ++ ord.s; n = num.n; sp = quant.sp
} ;
lin IndefArt = {s = []; sp = Indef} ;
lin NumPl = {s = []; n = Pl} ;
lin NumSg = {s = []; n = Sg} ;
lin NumCard card = {s = card.s; n = Pl} ;
lin NumDigits digits = {s = digits.s ! NCard} ;
lin NumDecimal decimal = {s = decimal.s ! NCard} ;
lin NumNumeral numeral = {s = numeral.s ! NCard} ;
lin AdNum adn card = {s = adn.s ++ card.s} ;
lin OrdDigits digits = {s = digits.s ! NOrd} ;
lin OrdNumeral numeral = {s = numeral.s ! NOrd} ;
lin OrdSuperl a = {s = "ամենա" ++ a.s ! Nom ! Sg} ;
lin OrdNumeralSuperl numeral a = {s = numeral.s ! NOrd ++ "ամենա" ++ a.s ! Nom ! Sg} ;
lin MassNP cn = {
s = \\c => cn.s ! Indef ! c ! Sg;
a = {n=Sg; p=P3}
} ;
lin ComplN2 n np = {
s = \\sp,c,num => (case n.c2.isPre of {
True => n.c2.s ++ np.s ! n.c2.c;
False => np.s ! n.c2.c ++ n.c2.s
}) ++
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 ComplN3 n np = n ** {c2 = n.c3} ;
lin Use2N3 n = lin N2 {s=n.s;def_dat=n.def_dat;def_nom=n.def_nom;
poss1=n.poss1;poss2=n.poss2;c2=n.c2} ;
lin Use3N3 n = lin N2 {s=n.s;def_dat=n.def_dat;def_nom=n.def_nom;
poss1=n.poss1;poss2=n.poss2;c2=n.c3} ;
lin PossNP cn np = {
s = \\sp,c,num => np.s ! Dat ++ cn.s ! sp ! c ! num
} ;
lin PartNP cn np = {
s = \\sp,c,num => cn.s ! sp ! c ! num ++ np.s ! Ablat
} ;
lin SentCN cn sc = {s = \\sp,c,n => cn.s ! sp ! c ! n ++ sc.s} ;
lin ApposCN cn np = {s = \\sp,c,n => cn.s ! sp ! c ! n ++ np.s ! Nom} ;
lin RelCN cn rs = {s = \\sp,c,n => cn.s ! sp ! c ! n ++ rs.s} ;
lin CountNP det np = {s = \\c => det.s ++ np.s ! c; a = {n=det.n;p=P3}} ;
lin DetDAP det = {s = det.s} ;
lin AdjDAP dap ap = {s = dap.s ++ ap.s ! Indef ! Nom ! Sg} ;
lin QuantityNP decimal mu = {
s = \\_ => case mu.isPre of {
True => mu.s ++ decimal.s ! NCard;
False => decimal.s ! NCard ++ mu.s
};
a = {n=Pl;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 = pron.s; a=pron.a} ;
} }
-181
View File
@@ -1,181 +0,0 @@
--# -path=.:../abstract:../common:../prelude
concrete NumeralHye of Numeral = CatHye [Numeral,Digits,Decimal] **
open Prelude, ResHye in {
flags coding = utf8 ;
param DForm = Unit | Teen | Ten ;
lincat
Digit = {s : DForm => CardOrd => Str; compoundOrd : DForm => Str} ;
Sub10 = {s : DForm => CardOrd => Str; compoundOrd : DForm => Str; n : Number} ;
Sub100, Sub1000, Sub1000000, Sub1000000000, Sub1000000000000 = LinNum ;
lin
num n = {s = n.s; n = n.n} ;
n2 = mkDigit "երկու" "տասներկու" "քսան" "երկրորդ" ;
n3 = mkDigit "երեք" "տասներեք" "երեսուն" "երրորդ" ;
n4 = mkDigit "չորս" "տասնչորս" "քառասուն" "չորրորդ" ;
n5 = mkDigit "հինգ" "տասնհինգ" "հիսուն" "հինգերորդ" ;
n6 = mkDigit "վեց" "տասնվեց" "վաթսուն" "վեցերորդ" ;
n7 = mkDigit "յոթ" "տասնյոթ" "յոթանասուն" "յոթերորդ" ;
n8 = mkDigit "ութ" "տասնութ" "ութսուն" "ութերորդ" ;
n9 = mkDigit "ինը" "տասնինը" "իննսուն" "իններորդ" ;
pot01 = mkDigit "մեկ" "տասնմեկ" "տասը" "առաջին" ** {
compoundOrd = table {
Unit => "մեկերորդ" ;
Teen => "տասնմեկերորդ" ;
Ten => "տասներորդ"
} ;
n = Sg
} ;
pot0 d = d ** {n = Pl} ;
pot110 = mkNum "տասը" "տասներորդ" Pl ** {attr = "տաս"} ;
pot111 = regNum "տասնմեկ" Pl ;
pot1to19 d = {
s = d.s ! Teen ;
compoundOrd = d.compoundOrd ! Teen ;
attr = d.s ! Teen ! NCard ;
n = Pl
} ;
pot0as1 n = {
s = n.s ! Unit ;
compoundOrd = n.compoundOrd ! Unit ;
attr = n.s ! Unit ! NCard ;
n = n.n
} ;
pot1 d = {
s = d.s ! Ten ;
compoundOrd = d.compoundOrd ! Ten ;
attr = d.s ! Ten ! NCard ;
n = Pl
} ;
pot1plus d e = regNum
(d.s ! Ten ! NCard ++ BIND ++ e.s ! Unit ! NCard) Pl ;
pot1as2 n = n ;
pot21 = mkNum "հարյուր" "հարյուրերորդ" Pl ;
pot2 d = scaleNum (d.s ! Unit ! NCard) "հարյուր" Pl ;
pot2plus d e = plusNum
(d.s ! Unit ! NCard ++ "հարյուր") e Pl ;
pot2as3 n = n ;
pot31 = mkNum "հազար" "հազարերորդ" Pl ;
pot3 n = scaleNum n.attr "հազար" Pl ;
pot3plus n m = plusNum (n.attr ++ "հազար") m Pl ;
pot3as4 n = n ;
pot3decimal n = decimalScale n "հազար" ;
pot41 = mkNum "միլիոն" "միլիոներորդ" Pl ;
pot4 n = scaleNum n.attr "միլիոն" Pl ;
pot4plus n m = plusNum (n.attr ++ "միլիոն") m Pl ;
pot4as5 n = n ;
pot4decimal n = decimalScale n "միլիոն" ;
pot51 = mkNum "միլիարդ" "միլիարդերորդ" Pl ;
pot5 n = scaleNum n.attr "միլիարդ" Pl ;
pot5plus n m = plusNum (n.attr ++ "միլիարդ") m Pl ;
pot5decimal n = decimalScale n "միլիարդ" ;
lincat Dig = {s : CardOrd => Str; n : Number} ;
lin
IDig d = d ** {tail = T1} ;
IIDig d ds = {
s = table {
NCard => glue (d.s ! NCard) (ds.s ! NCard) ;
NOrd => glue (glue (d.s ! NCard) (ds.s ! NCard)) "-րդ"
} ;
n = Pl ;
tail = inc ds.tail
} ;
D_0 = mkDig "0" ;
D_1 = mkDig1 ;
D_2 = mkDig "2" ;
D_3 = mkDig "3" ;
D_4 = mkDig "4" ;
D_5 = mkDig "5" ;
D_6 = mkDig "6" ;
D_7 = mkDig "7" ;
D_8 = mkDig "8" ;
D_9 = mkDig "9" ;
PosDecimal d = d ** {hasDot = False} ;
NegDecimal d = {
s = \\o => "-" ++ BIND ++ d.s ! o ;
n = Pl ;
hasDot = False
} ;
IFrac d i = {
s = \\o => d.s ! NCard ++
if_then_Str d.hasDot BIND (BIND ++ "." ++ BIND) ++
i.s ! o ;
n = Pl ;
hasDot = True
} ;
oper
LinNum : Type = {
s : CardOrd => Str ;
compoundOrd : Str ;
attr : Str ;
n : Number
} ;
mkNum : Str -> Str -> Number -> LinNum = \card,ord,n -> {
s = table {NCard => card; NOrd => ord} ;
compoundOrd = ord ;
attr = card ;
n = n
} ;
regNum : Str -> Number -> LinNum = \card,n ->
mkNum card (glue card "երորդ") n ;
mkDigit : Str -> Str -> Str -> Str ->
{s : DForm => CardOrd => Str; compoundOrd : DForm => Str} =
\unit,teen,ten,unitOrd -> {
s = table {
Unit => table {NCard => unit; NOrd => unitOrd} ;
Teen => table {NCard => teen; NOrd => glue teen "երորդ"} ;
Ten => table {NCard => ten; NOrd => glue ten "երորդ"}
} ;
compoundOrd = table {
Unit => unitOrd ;
Teen => glue teen "երորդ" ;
Ten => glue ten "երորդ"
}
} ;
scaleNum : Str -> Str -> Number -> LinNum = \prefix,scale,n ->
mkNum (prefix ++ scale) (prefix ++ glue scale "երորդ") n ;
plusNum : Str -> LinNum -> Number -> LinNum = \prefix,last,n -> {
s = table {
NCard => prefix ++ last.s ! NCard ;
NOrd => prefix ++ last.compoundOrd
} ;
compoundOrd = prefix ++ last.compoundOrd ;
attr = prefix ++ last.s ! NCard ;
n = n
} ;
decimalScale : Decimal -> Str -> LinNum = \decimal,scale ->
mkNum (decimal.s ! NCard ++ scale)
(decimal.s ! NCard ++ glue scale "երորդ") Pl ;
mkDig : Str -> {s : CardOrd => Str; n : Number} = \d -> {
s = table {NCard => d; NOrd => glue d "-րդ"} ;
n = Pl
} ;
mkDig1 : {s : CardOrd => Str; n : Number} = {
s = table {NCard => "1"; NOrd => "1-ին"} ;
n = Sg
} ;
}
+7 -24
View File
@@ -23,7 +23,7 @@ oper
_ + "չալ" => mkV002 form; _ + "չալ" => mkV002 form;
_ + "նալ" => mkV004 form; _ + "նալ" => mkV004 form;
_ + "ել" => mkV001 form; _ + "ել" => mkV001 form;
_ => lin V (invarVerb form) _ => error "Cannot find an inflection rule"
} ; } ;
reg2V : Str -> Str -> V -- s Imperative_Jussive;Pl reg2V : Str -> Str -> V -- s Imperative_Jussive;Pl
@@ -212,7 +212,7 @@ oper
_ + "ի" => mkN003 form; _ + "ի" => mkN003 form;
_ + "ե" => mkN006 form; _ + "ե" => mkN006 form;
_ + "է" => mkN006 form; _ + "է" => mkN006 form;
_ => mkN007 form _ => error "Cannot find an inflection rule"
} ; } ;
reg2N : Str -> Str -> N -- s;Nom;Sg s;Dat;Sg reg2N : Str -> Str -> N -- s;Nom;Sg s;Dat;Sg
@@ -313,7 +313,7 @@ oper
_ + "ղմ" => mkA005 form; _ + "ղմ" => mkA005 form;
_ + "տք" => mkA005 form; _ + "տք" => mkA005 form;
_ + "իղ" => mkA006 form; _ + "իղ" => mkA006 form;
_ + "ունչ"=>mkA008 form; _ + "նչ" => mkA008 form;
_ + "ոխ" => mkA005 form; _ + "ոխ" => mkA005 form;
_ + "ղխ" => mkA005 form; _ + "ղխ" => mkA005 form;
_ + "ղթ" => mkA005 form; _ + "ղթ" => mkA005 form;
@@ -368,7 +368,7 @@ oper
_ + "ի" => mkA002 form; _ + "ի" => mkA002 form;
_ + "ա" => mkA004 form; _ + "ա" => mkA004 form;
_ + "ո" => mkA004 form; _ + "ո" => mkA004 form;
_ => mkA001 form _ => error "Cannot find an inflection rule"
} ; } ;
reg2A : Str -> Str -> A -- s;Nom;Sg s;Nom;Pl reg2A : Str -> Str -> A -- s;Nom;Sg s;Nom;Pl
@@ -440,14 +440,6 @@ oper
mkN : Str -> Str -> N = reg2N -- s;Nom;Sg s;Dat;Sg mkN : Str -> Str -> N = reg2N -- s;Nom;Sg s;Dat;Sg
} ; } ;
compoundN : A -> N -> N = \a,n -> lin N {
s = \\c,num => a.s ! Nom ! Sg ++ n.s ! c ! num ;
def_dat = \\num => a.s ! Dat ! num ++ n.def_dat ! num ;
def_nom = \\num => a.s ! Nom ! Sg ++ n.def_nom ! num ;
poss1 = \\c,num => a.s ! Nom ! Sg ++ n.poss1 ! c ! num ;
poss2 = \\c,num => a.s ! Nom ! Sg ++ n.poss2 ! c ! num
} ;
mkN2 = overload { mkN2 = overload {
mkN2 : N -> N2 = \n -> lin N2 (n ** {c2 = noPrep}) ; mkN2 : N -> N2 = \n -> lin N2 (n ** {c2 = noPrep}) ;
mkN2 : N -> Prep -> N2 = \n,p -> lin N2 (n ** {c2 = p}) ; mkN2 : N -> Prep -> N2 = \n,p -> lin N2 (n ** {c2 = p}) ;
@@ -476,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} ;
@@ -499,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}
} ;
} }
+1 -13
View File
@@ -1,21 +1,9 @@
concrete PhraseHye of Phrase = CatHye ** open ResHye in { concrete PhraseHye of Phrase = CatHye ** {
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 ;
UttInterj i = i ; UttInterj i = i ;
UttNP np = {s = np.s ! Nom} ;
UttAdv adv = adv ;
UttCN cn = {s = cn.s ! Indef ! Nom ! Sg} ;
UttCard card = card ;
UttIAdv adv = adv ;
UttIP ip = ip ;
UttQS qs = qs ;
UttImpSg pol imp = {s = case pol.p of {Pos => imp.s; Neg => "մի" ++ imp.s}} ;
UttImpPl pol imp = {s = case pol.p of {Pos => imp.s; Neg => "մի" ++ imp.s}} ;
UttImpPol pol imp = {s = case pol.p of {Pos => imp.s; Neg => "մի" ++ imp.s}} ;
VocNP np = {s = np.s ! Nom} ;
PConjConj conj = conj ;
NoPConj = {s = []} ; NoPConj = {s = []} ;
-21
View File
@@ -1,21 +0,0 @@
concrete QuestionHye of Question = CatHye ** open ResHye in {
lincat QVP = {s : Str} ;
lin
QuestCl cl = {s = cl.s ++ "՞"} ;
QuestVP ip vp = {s = ip.s ++ vp.s ++ "՞"} ;
QuestSlash ip slash = {s = ip.s ++ slash.s ++ "՞"} ;
QuestIAdv adv cl = {s = adv.s ++ cl.s ++ "՞"} ;
QuestIComp comp np = {s = comp.s ++ np.s ! Nom ++ "՞"} ;
IdetCN det cn = {s = det.s ++ cn.s ! Indef ! Nom ! Sg} ;
IdetIP det = {s = det.s} ;
AdvIP ip adv = {s = ip.s ++ adv.s} ;
IdetQuant quant num = {s = quant.s ++ num.s} ;
PrepIP prep ip = {s = case prep.isPre of {True=>prep.s++ip.s;False=>ip.s++prep.s}} ;
AdvIAdv iadv adv = {s = iadv.s ++ adv.s} ;
CompIAdv adv = adv ;
CompIP ip = ip ;
ComplSlashIP slash ip = {s = slash.s ++ ip.s} ;
AdvQVP vp adv = {s = vp.s ++ adv.s} ;
AddAdvQVP qvp adv = {s = qvp.s ++ adv.s} ;
QuestQVP ip qvp = {s = ip.s ++ qvp.s ++ "՞"} ;
}
-11
View File
@@ -1,11 +0,0 @@
concrete RelativeHye of Relative = CatHye ** open ResHye in {
lin
RelCl cl = {s = "որը" ++ cl.s} ;
RelVP rp vp = {s = rp.s ++ vp.s} ;
RelSlash rp slash = {s = rp.s ++ slash.s} ;
IdRP = {s = "որը"} ;
FunRP prep np rp = {s = case prep.isPre of {
True=>prep.s++np.s!prep.c++rp.s;
False=>np.s!prep.c++prep.s++rp.s
}} ;
}
+20 -34
View File
@@ -1,24 +1,16 @@
resource ResHye = ParamX ** open Prelude in { resource ResHye = {
param CardOrd = NCard | NOrd ;
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 invarVerb : Str -> Verb = \s -> {
s=s; causative=s;
conditional=table {_ => table {_ => table {_ => s}}};
converb={imperfective=s;futCon1=s;futCon2=s;negative=s;perfective=s;simultaneous=s};
imperative=table {_ => s}; passive=s;
past=table {_ => table {_ => s}};
participle=table {_ => s};
subjunctive=table {_ => table {_ => table {_ => s}}}
} ;
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 ;
@@ -48,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
@@ -74,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 ;
@@ -110,14 +102,8 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_
} }
} ; } ;
param Species = Indef | Def | Poss Person ;
oper Agr = {n : Number; p : Person} ;
oper Noun = {s: Case => Number => Str; def_dat: Number => Str; def_nom: Number => Str; poss1: Case => Number => Str; poss2: Case => Number => Str} ; -- 4880 oper Noun = {s: Case => Number => Str; def_dat: Number => Str; def_nom: Number => Str; poss1: Case => Number => Str; poss2: Case => Number => Str} ; -- 4880
oper invarNoun : Str -> Noun = \s -> {
s=table {_ => table {_ => s}};
def_dat=table {_ => s}; def_nom=table {_ => s};
poss1=table {_ => table {_ => s}}; poss2=table {_ => table {_ => s}}
} ;
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 ->
{ s = table { { s = table {
@@ -277,7 +263,7 @@ oper mkAdj : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,
} ; } ;
oper Compl = {s : Str; c : Case; isPre : Bool} ; oper Compl = {s : Str; c : Case} ;
oper noPrep : Compl = {s=""; c=Nom; isPre=False} ; oper noPrep : Compl = {s=""; c=Dat} ;
} }
-65
View File
@@ -1,65 +0,0 @@
concrete SentenceHye of Sentence = CatHye ** open Prelude,ResHye in {
oper negAux : Agr -> Str = \a -> case <a.p,a.n> of {
<P1,Sg> => "չեմ"; <P2,Sg> => "չես"; <P3,Sg> => "չի";
<P1,Pl> => "չենք"; <P2,Pl> => "չեք"; <P3,Pl> => "չեն"
} ;
lin PredVP np vp = {s = np.s ! Nom ++ vp.converb.imperfective ++
case <np.a.p,np.a.n> of {
<P1,Sg> => "եմ"; <P2,Sg> => "ես"; <P3,Sg> => "է";
<P1,Pl> => "ենք"; <P2,Pl> => "եք"; <P3,Pl> => "են"
};
negative = table {
Pres => np.s ! Nom ++ negAux np.a ++ vp.converb.imperfective;
Past => np.s ! Nom ++ "չ" ++ BIND ++ vp.past ! np.a.p ! np.a.n;
Fut => np.s ! Nom ++ negAux np.a ++ vp.converb.futCon1;
Cond => np.s ! Nom ++ "չ" ++ BIND ++ vp.conditional ! Non_Past ! np.a.p ! np.a.n
};
conditional = \\a,_ => np.s ! Nom ++ vp.conditional ! a ! np.a.p ! np.a.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 = \\_,_ => np.s ! Nom ++ vp.past ! np.a.p ! np.a.n;
participle = \\p => np.s ! Nom ++ vp.participle ! p;
subjunctive = \\a,_ => np.s ! Nom ++ vp.subjunctive ! a ! np.a.p ! np.a.n} ;
lin PredSCVP sc vp = {s = sc.s ++ vp.s;
negative=table {_ => sc.s ++ "չ" ++ BIND ++ vp.s};
conditional=\\a,n => sc.s ++ vp.conditional ! a ! P3 ! n;
converb={imperfective=sc.s ++ vp.converb.imperfective; futCon1=sc.s ++ vp.converb.futCon1;
futCon2=sc.s ++ vp.converb.futCon2; negative=sc.s ++ vp.converb.negative;
perfective=sc.s ++ vp.converb.perfective; simultaneous=sc.s ++ vp.converb.simultaneous};
passive=sc.s ++ vp.passive; past=\\p,n => sc.s ++ vp.past ! p ! n;
participle=\\p => sc.s ++ vp.participle ! p;
subjunctive=\\a,n => sc.s ++ vp.subjunctive ! a ! P3 ! n} ;
lin UseCl temp pol cl = {s = case pol.p of {
Neg => cl.negative ! temp.t;
Pos => case <temp.t,temp.a> of {
<Pres,Simul> => cl.s;
<Pres,Anter> => cl.converb.perfective;
<Past,Simul> => cl.past ! P3 ! Sg;
<Past,Anter> => cl.converb.perfective;
<Fut,Simul> => cl.conditional ! Non_Past ! Sg;
<Fut,Anter> => cl.conditional ! Perfect ! Sg;
<Cond,Simul> => cl.conditional ! Non_Past ! Sg;
<Cond,Anter> => cl.conditional ! Perfect ! Sg
}
}} ;
lin UseQCl temp pol qcl = {s = case pol.p of {Pos => qcl.s; Neg => "չ" ++ qcl.s}} ;
lin UseRCl temp pol rcl = {s = case pol.p of {Pos => rcl.s; Neg => "չ" ++ rcl.s}} ;
lin UseSlash temp pol slash = {s = case pol.p of {Pos => slash.s; Neg => "չ" ++ slash.s}} ;
lin AdvS adv s = {s = adv.s ++ s.s} ;
lin ExtAdvS adv s = {s = adv.s ++ "," ++ s.s} ;
lin SSubjS s1 subj s2 = {s = s1.s ++ subj.s ++ s2.s} ;
lin RelS s rs = {s = s.s ++ "," ++ rs.s} ;
lin ImpVP vp = {s = vp.imperative ! Sg} ;
lin AdvImp adv imp = {s = adv.s ++ imp.s} ;
lin EmbedS s = s ;
lin EmbedQS qs = qs ;
lin SlashVP np vp = {s = np.s ! Nom ++ vp.s} ;
lin AdvSlash slash adv = {s = slash.s ++ adv.s} ;
lin SlashPrep cl prep = {s = cl.s ++ prep.s} ;
lin SlashVS np vs slash = {s = np.s ! Nom ++ vs.s ++ slash.s} ;
}
-102
View File
@@ -1,102 +0,0 @@
concrete StructuralHye of Structural = CatHye ** open Prelude, ResHye, ParadigmsHye in {
oper
postPrep : Str -> Case -> Prep = \s,c -> lin Prep {s=s;c=c;isPre=False} ;
simpleNP : Str -> Number -> Person -> NP = \s,n,p -> lin NP {s=\\_ => s;a={n=n;p=p}} ;
casePron : (nom,dat,ablat,instr,loc,poss : Str) -> Number -> Person -> Pron =
\nom,dat,ablat,instr,loc,poss,n,p -> lin Pron {
s=table {Nom=>nom;Dat=>dat;Ablat=>ablat;Instr=>instr;Loc=>loc};
empty=poss;a={n=n;p=p}
} ;
lin i_Pron = casePron "ես" "ինձ" "ինձնից" "ինձնով" "ինձ մոտ" "իմ" Sg P1 ;
lin youSg_Pron = casePron "դու" "քեզ" "քեզնից" "քեզնով" "քեզ մոտ" "քո" Sg P2 ;
lin he_Pron, she_Pron, it_Pron = casePron "նա" "նրան" "նրանից" "նրանով" "նրա մոտ" "նրա" Sg P3 ;
lin we_Pron = casePron "մենք" "մեզ" "մեզնից" "մեզնով" "մեզ մոտ" "մեր" Pl P1 ;
lin youPl_Pron = casePron "դուք" "ձեզ" "ձեզնից" "ձեզնով" "ձեզ մոտ" "ձեր" Pl P2 ;
lin youPol_Pron = casePron "Դուք" "Ձեզ" "Ձեզնից" "Ձեզնով" "Ձեզ մոտ" "Ձեր" Pl P2 ;
lin they_Pron = casePron "նրանք" "նրանց" "նրանցից" "նրանցով" "նրանց մոտ" "նրանց" Pl P3 ;
lin and_Conj = mkConj "և" ;
lin or_Conj = mkConj "կամ" ;
lin both7and_DConj = mkConj "և՛" ;
lin either7or_DConj = mkConj "կամ" ;
lin if_then_Conj = mkConj "ապա" ;
lin but_PConj = mkPConj "բայց" ;
lin therefore_PConj = mkPConj "հետևաբար" ;
lin otherwise_PConj = mkPConj "այլապես" ;
lin in_Prep = postPrep [] Loc ;
lin on_Prep = postPrep "վրա" Dat ;
lin to_Prep = postPrep [] Dat ;
lin from_Prep = postPrep [] Ablat ;
lin with_Prep = postPrep [] Instr ;
lin without_Prep = postPrep "առանց" Dat ;
lin for_Prep = postPrep "համար" Dat ;
lin during_Prep = postPrep "ընթացքում" Dat ;
lin after_Prep = postPrep "հետո" Ablat ;
lin before_Prep = postPrep "առաջ" Ablat ;
lin under_Prep = postPrep "տակ" Dat ;
lin above_Prep = postPrep "վերևում" Dat ;
lin behind_Prep = postPrep "հետևում" Dat ;
lin between_Prep = postPrep "միջև" Dat ;
lin through_Prep = postPrep "միջով" Dat ;
lin by8agent_Prep = postPrep "կողմից" Dat ;
lin by8means_Prep = postPrep [] Instr ;
lin possess_Prep = postPrep [] Dat ;
lin part_Prep = postPrep [] Ablat ;
lin except_Prep = postPrep "բացի" Ablat ;
lin this_Quant = mkQuant "այս" ;
lin that_Quant = mkQuant "այդ" ;
lin no_Quant = mkQuant "ոչ մի" ;
lin every_Det = mkDet "ամեն" Sg ;
lin few_Det = mkDet "քիչ" Pl ;
lin many_Det = mkDet "շատ" Pl ;
lin much_Det = mkDet "շատ" Sg ;
lin someSg_Det = mkDet "որոշ" Sg ;
lin somePl_Det = mkDet "որոշ" Pl ;
lin all_Predet = mkPredet "բոլոր" ;
lin only_Predet = mkPredet "միայն" ;
lin most_Predet = mkPredet "մեծ մասը" ;
lin not_Predet = mkPredet "ոչ" ;
lin very_AdA = mkAdA "շատ" ;
lin too_AdA = mkAdA "չափազանց" ;
lin almost_AdA = mkAdA "գրեթե" ;
lin almost_AdN = mkAdN "գրեթե" ;
lin at_least_AdN = mkAdN "առնվազն" ;
lin at_most_AdN = mkAdN "առավելագույնը" ;
lin here_Adv = mkAdv "այստեղ" ;
lin there_Adv = mkAdv "այնտեղ" ;
lin everywhere_Adv = mkAdv "ամենուր" ;
lin somewhere_Adv = mkAdv "ինչ-որ տեղ" ;
lin always_AdV = mkAdV "միշտ" ;
lin quite_Adv = mkAdv "բավականին" ;
lin when_Subj = mkSubj "երբ" ;
lin if_Subj = mkSubj "եթե" ;
lin because_Subj = mkSubj "որովհետև" ;
lin although_Subj = mkSubj "թեև" ;
lin that_Subj = mkSubj "որ" ;
lin whatSg_IP = mkIP "ինչ" ;
lin whatPl_IP = mkIP "ինչեր" ;
lin whoSg_IP = mkIP "ով" ;
lin whoPl_IP = mkIP "ովքեր" ;
lin which_IQuant = mkIQuant "որ" ;
lin how_IAdv = mkIAdv "ինչպես" ;
lin when_IAdv = mkIAdv "երբ" ;
lin where_IAdv = mkIAdv "որտեղ" ;
lin why_IAdv = mkIAdv "ինչու" ;
lin how8many_IDet = mkIDet "քանի" ;
lin how8much_IAdv = mkIAdv "որքան" ;
lin as_CAdv = mkCAdv "այնքան" ;
lin more_CAdv = mkCAdv "ավելի" ;
lin less_CAdv = mkCAdv "պակաս" ;
lin can_VV, can8know_VV = mkVV (mkV "կարողանալ") ;
lin must_VV = mkVV (mkV "պարտավորվել") ;
lin want_VV = mkVV (mkV "ցանկանալ") ;
lin have_V2 = mkV2 (mkV "ունենալ") ;
lin everybody_NP = simpleNP "բոլորը" Pl P3 ;
lin everything_NP = simpleNP "ամեն ինչ" Sg P3 ;
lin somebody_NP = simpleNP "ինչ-որ մեկը" Sg P3 ;
lin something_NP = simpleNP "ինչ-որ բան" Sg P3 ;
lin nobody_NP = simpleNP "ոչ ոք" Sg P3 ;
lin nothing_NP = simpleNP "ոչինչ" Sg P3 ;
lin please_Voc = mkVoc "խնդրում եմ" ;
lin yes_Utt = {s="այո"} ;
lin no_Utt = {s="ոչ"} ;
}
-91
View File
@@ -1,91 +0,0 @@
concrete VerbHye of Verb = CatHye ** open Prelude, ResHye, ParadigmsHye in {
oper
compl : Compl -> NP -> Str = \c,np -> case c.isPre of {
True => c.s ++ np.s ! c.c;
False => np.s ! c.c ++ c.s
} ;
toVP : Verb -> VP = \v -> lin VP {
s=v.s; conditional=v.conditional; converb=v.converb; imperative=v.imperative;
passive=v.passive; past=v.past; participle=v.participle; subjunctive=v.subjunctive
} ;
appendVP : VP -> Str -> VP = \v,x -> lin VP {
s=v.s ++ x;
conditional=\\a,p,n => v.conditional ! a ! p ! n ++ x;
converb={imperfective=v.converb.imperfective ++ x; futCon1=v.converb.futCon1 ++ x;
futCon2=v.converb.futCon2 ++ x; negative=v.converb.negative ++ x;
perfective=v.converb.perfective ++ x; simultaneous=v.converb.simultaneous ++ x};
imperative=\\n => v.imperative ! n ++ x; passive=v.passive ++ x;
past=\\p,n => v.past ! p ! n ++ x;
participle=\\p => v.participle ! p ++ x;
subjunctive=\\a,p,n => v.subjunctive ! a ! p ! n ++ x
} ;
prependVP : Str -> VP -> VP = \x,v -> lin VP {
s=x ++ v.s;
conditional=\\a,p,n => x ++ v.conditional ! a ! p ! n;
converb={imperfective=x ++ v.converb.imperfective; futCon1=x ++ v.converb.futCon1;
futCon2=x ++ v.converb.futCon2; negative=x ++ v.converb.negative;
perfective=x ++ v.converb.perfective; simultaneous=x ++ v.converb.simultaneous};
imperative=\\n => x ++ v.imperative ! n; passive=x ++ v.passive;
past=\\p,n => x ++ v.past ! p ! n;
participle=\\p => x ++ v.participle ! p;
subjunctive=\\a,p,n => x ++ v.subjunctive ! a ! p ! n
} ;
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 = compl vp.c2 np ++ vp.s;
conditional = \\a,p,n => compl vp.c2 np
++ vp.conditional ! a ! p ! n;
converb = {imperfective = compl vp.c2 np
++ vp.converb.imperfective;
futCon1 = compl vp.c2 np ++ vp.converb.futCon1;
futCon2 = compl vp.c2 np ++ vp.converb.futCon2;
negative = compl vp.c2 np ++ vp.converb.negative;
perfective = compl vp.c2 np
++ vp.converb.perfective;
simultaneous = compl vp.c2 np
++ vp.converb.simultaneous};
imperative = \\n => compl vp.c2 np ++ vp.imperative ! n;
passive = compl vp.c2 np ++ vp.passive;
past = \\p,n => compl vp.c2 np ++ vp.past ! p ! n;
participle = \\p => compl vp.c2 np ++ vp.participle ! p;
subjunctive = \\a,p,n => compl vp.c2 np
++ vp.subjunctive ! a ! p ! n} ;
lin SlashV2a v = v ;
lin UseV v = v ;
lin ComplVS v s = appendVP (toVP v) s.s ;
lin ComplVQ v qs = appendVP (toVP v) qs.s ;
lin ComplVA v ap = appendVP (toVP v) (ap.s ! Indef ! Nom ! Sg) ;
lin Slash2V3 v np = lin VPSlash (v ** {
s = compl v.c2 np ++ v.s; c2 = v.c3
}) ;
lin Slash3V3 v np = lin VPSlash (v ** {
s = compl v.c3 np ++ v.s; c2 = v.c2
}) ;
lin SlashV2S v s = lin VPSlash (v ** {s = v.s ++ s.s; c2=v.c2}) ;
lin SlashV2Q v qs = lin VPSlash (v ** {s = v.s ++ qs.s; c2=v.c2}) ;
lin SlashV2A v ap = lin VPSlash (v ** {
s = v.s ++ ap.s ! Indef ! Nom ! Sg; c2=v.c2
}) ;
lin UseComp comp = prependVP comp.s (toVP (mkV "լինել")) ;
lin UseCopula = toVP (mkV "լինել") ;
lin ExtAdvVP vp adv = appendVP vp ("," ++ adv.s) ;
lin AdVVP adv vp = prependVP adv.s vp ;
lin AdvVPSlash vp adv = lin VPSlash (vp ** {s = vp.s ++ adv.s}) ;
lin AdVVPSlash adv vp = lin VPSlash (vp ** {s = adv.s ++ vp.s}) ;
lin VPSlashPrep vp prep = lin VPSlash (vp ** {causative=vp.s;c2=prep}) ;
lin CompAP ap = {s = ap.s ! Indef ! Nom ! Sg} ;
lin CompNP np = {s = np.s ! Nom} ;
lin CompAdv adv = adv ;
lin CompCN cn = {s = cn.s ! Indef ! Nom ! Sg} ;
}
+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; adv = "больш" ++ a.adv ++ "за" ++ np.s ! Acc; post = a.post} ;
ComplA2 a np = {s = \\c,gn => a.s ! c ! gn ++ prepNP a.c2 np; adv = a.adv ++ prepNP a.c2 np; post = a.post} ;
ReflA2 a = {s = \\c,gn => a.s ! c ! gn ++ "да сябе"; adv = a.adv ++ "да сябе"; post = a.post} ;
UseA2 a = a ;
UseComparA a = {s = \\c,gn => "больш" ++ a.s ! c ! gn; adv = "больш" ++ a.adv; post = a.post} ;
CAdvAP cadv ap np = {s = \\c,gn => cadv.s ++ ap.s ! c ! gn ++ cadv.p ++ np.s ! Nom; adv = cadv.s ++ ap.adv ++ cadv.p ++ np.s ! Nom; post = ap.post} ;
AdjOrd ord = ord ;
SentAP ap sc = {s = \\c,gn => ap.s ! c ! gn ++ sc.s; adv = ap.adv ++ sc.s; post = ap.post} ;
AdAP ada ap = {s = \\c,gn => ada.s ++ ap.s ! c ! gn; adv = ada.s ++ ap.adv; post = ap.post} ;
AdvAP ap adv = {s = \\c,gn => ap.s ! c ! gn ++ adv.s; adv = ap.adv ++ adv.s; post = ap.post} ;
} }
-13
View File
@@ -1,13 +0,0 @@
concrete AdverbBel of Adverb = CatBel ** open ResBel in {
lin
PositAdvAdj a = {s = a.adv} ;
PrepNP prep np = {s = prepNP prep np} ;
ComparAdvAdj cadv a np = {s = cadv.s ++ a.adv ++ cadv.p ++ np.s ! Nom} ;
ComparAdvAdjS cadv a s = {s = cadv.s ++ a.adv ++ cadv.p ++ s.s} ;
AdAdv ada adv = {s = ada.s ++ adv.s} ;
PositAdAAdj a = {s = a.adv} ;
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; poss : Case => Gender => Number => 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; pa : Adj} ;
V3,V2A,V2S,V2Q,V2V = Verb ** {c2,c3 : Compl; pa : Adj} ;
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 ;
} }
-69
View File
@@ -1,69 +0,0 @@
concrete ConjunctionBel of Conjunction = CatBel ** open ResBel, Prelude 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;
adv = xs.adv1 ++ conj.s ++ xs.adv2;
post = False
} ;
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; adv1 = x.adv; adv2 = y.adv} ;
ConsAP x xs = {
s1 = \\c,gn => x.s ! c ! gn ++ "," ++ xs.s1 ! c ! gn;
s2 = xs.s2;
adv1 = x.adv ++ "," ++ xs.adv1;
adv2 = xs.adv2
} ;
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; adv1,adv2 : 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 = \\agr => "быць" ++ a.s ! Nom ! genNum agr.g agr.n ;
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; adv = card.s ++ cn.s ! Gen ! Pl ++ a.adv; post = a.post} ;
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)) ++
-260
View File
@@ -1,260 +0,0 @@
--# -path=.:../abstract:../common:prelude
concrete ExtendBel of Extend = CatBel ** open ResBel, (R = ParamX), ParadigmsBel, Prelude 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 => cn.s ! c ! num.n ++ np.s ! Gen ;
a = {g=cn.g; n=num.n; p=P3}
} ;
GenModIP num ip cn = {
s = \\c => cn.s ! c ! num.n ++ ip.s ! Gen ;
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 ! anteriorTense temp.t temp.a ! 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 ! defaultAgr} ;
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 ! anteriorTense temp.t temp.a ! 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 = {
s = \\_,gn => relativeNom gn ++ vp.s ! R.Pres ! R.Pos ! agrFromGenNum gn;
adv = vp.inf ! defaultAgr;
post = True
} ;
EmbedPresPart vp = {s = vp.inf ! defaultAgr} ;
PastPartAP vp = vp.pass ;
PastPartAgentAP vp np = {
s = \\c,gn => vp.pass.s ! c ! gn ++ prepNP (mkPrep instrumental) np ;
adv = vp.pass.adv ++ prepNP (mkPrep instrumental) np;
post = False
} ;
PassVPSlash vp = {
s = \\t,p,a => copula t p a ++ vp.pass.s ! Nom ! genNum a.g a.n ;
inf = \\a => "быць" ++ vp.pass.s ! Nom ! genNum a.g a.n ;
imp = \\p,_ => neg p ++ "будзь" ++ vp.pass.s ! Nom ! GSg Masc
} ;
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 ;
pass = a ;
post = [] ;
objPost = \\_ => []
} ;
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 ;
pass = adjFromStr (n.s ! Nom ! Sg) ;
post = [] ;
objPost = \\_ => []
} ;
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 ! defaultAgr} ;
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 ;
pass = v.pa ;
post = s.s ;
objPost = \\_ => 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 ! defaultAgr} ;
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 ! defaultAgr} ;
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 =>
(mkPossAdj "св").s ! (modifierCase c cn.g num.n) ! genNum cn.g num.n ++ 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; adv = ap.adv ++ prep.s ++ rnp.s ! prep.c; post = ap.post} ;
ReflA2RNP a rnp = {s = \\c,gn => a.s ! c ! gn ++ a.c2.s ++ rnp.s ! a.c2.c; adv = a.adv ++ a.c2.s ++ rnp.s ! a.c2.c; post = a.post} ;
PossPronRNP pron num cn rnp = {
s = \\c => pron.poss ! c ! cn.g ! num.n ++ 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 ! a ;
inf = \\a => vv.infinitive ++ neg pol.p ++ vp.inf ! a ;
imp = \\p,n => neg p ++ vv.imperative ! n ++ neg pol.p ++ vp.inf ! defaultAgr
} ;
CompoundN n1 n2 = {
s = \\c,n => n2.s ! c ! n ++ n1.s ! Gen ! Sg ;
voc = n2.voc ++ n1.s ! Gen ! Sg ;
g = n2.g
} ;
CompoundAP n a = {s = \\c,gn => n.s ! Nom ! Sg ++ a.s ! c ! gn; adv = n.s ! Nom ! Sg ++ a.adv; post = a.post} ;
GerundCN vp = nounFromStr (vp.inf ! defaultAgr) Neuter ;
GerundNP vp = mkSimpleNP (vp.inf ! defaultAgr) Neuter Sg P3 ;
GerundAdv vp = {s = vp.inf ! defaultAgr} ;
WithoutVP vp = {s = "без" ++ vp.inf ! defaultAgr} ;
ByVP vp = {s = "праз" ++ vp.inf ! defaultAgr} ;
InOrderToVP vp = {s = "каб" ++ vp.inf ! defaultAgr} ;
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.adv} ;
CompS s = {s = \\_ => s.s} ;
CompQS qs = {s = \\_ => qs.s} ;
CompVP ant pol vp = {s = \\_ => neg pol.p ++ vp.inf ! defaultAgr} ;
UncontractedNeg = {s = []; p = R.Neg} ;
UttVPShort vp = {s = vp.inf ! defaultAgr} ;
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 = \\a => "быць" ++ comp.s ! a ;
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 ! defaultAgr} ;
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} ;
}

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