Compare 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
559 changed files with 28369 additions and 176395 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
+2 -1
View File
@@ -4,7 +4,8 @@ concrete AllAfr of AllAfrAbs =
LangAfr, LangAfr,
IrregAfr, IrregAfr,
ExtendAfr ExtendAfr
** open ExtraAfr in { **
{
--{} ; --{} ;
} }
+1 -1
View File
@@ -3,7 +3,7 @@
abstract AllAfrAbs = abstract AllAfrAbs =
Lang, Lang,
IrregAfrAbs, IrregAfrAbs,
Extend ExtraAfrAbs
** **
{ {
--{} ; --{} ;
+2 -3
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
@@ -92,7 +91,7 @@ concrete CatAfr of Cat =
lindef lindef
VPSlash = \s -> { VPSlash = \s -> {
s = {s = \\_ => s; prefix = ""; hasPrefix = False; hasPast = False; aux = VHebben; vtype = VAct} ; s = {s = \\_ => s; prefix = ""; aux = VHebben; vtype = VAct} ;
a1 = \\_ => "" ; a1 = \\_ => "" ;
n0 = \\_ => "" ; n0 = \\_ => "" ;
n2 = \\_ => "" ; n2 = \\_ => "" ;
-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" ;
}
+3 -164
View File
@@ -1,176 +1,15 @@
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) ++ "deur" ++ 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 = "deur" ++ infVPBody vp (agrP3 Sg)} ;
ByVP vp = {s = "deur" ++ infVPBody vp (agrP3 Sg)} ;
InOrderToVP vp = {s = infVPString vp (agrP3 Sg)} ;
ApposNP np1 np2 = heavyNP {
s = \\c => np1.s ! c ++ bindComma ++ 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 =
insertInf (vps.s.s ! VPerf) (predV word_V) ; insertInf (vps.s.s ! VPerf) (predV word_V) ;
PassAgentVPSlash vps np = PassAgentVPSlash vps np =
insertAdv (appPrep "deur" 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" ++ infVPBody vp a ;
infVPBody : ResAfr.VP -> Agr -> Str = \vp,a ->
vp.n0 ! a ++ vp.n2 ! a ++ vp.a2 ++ vp.s.prefix ++ "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"
} ;
} }
+1 -24
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,26 +32,7 @@ concrete IdiomAfr of Idiom = CatAfr **
} }
} ; } ;
ExistIPAdv ip adv = { ProgrVP vp = insertAdv ("aan" ++ "die" ++ useInfVP True vp) (predV zijn_V) ; --afr
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 = insertExtrapos (useInfVP False vp)
(insertObj (\\_ => "besig") (predV zijn_V)) ;
ImpPl1 vp = ImpPl1 vp =
let let
-1
View File
@@ -3,6 +3,5 @@
concrete LangAfr of Lang = concrete LangAfr of Lang =
GrammarAfr, GrammarAfr,
LexiconAfr LexiconAfr
,ConstructionAfr
,DocumentationAfr --# notpresent ,DocumentationAfr --# notpresent
; ;
+1 -30
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 ++ embedInCommas adv.s ;
a = np.a
} ;
DetQuantOrd quant num ord = DetQuantOrd quant num ord =
let let
n = num.n ; n = num.n ;
@@ -163,7 +158,7 @@ concrete NounAfr of Noun = CatAfr ** open ResAfr, Prelude in {
} ; } ;
RelNP np rs = { RelNP np rs = {
s = \\c => np.s ! c ++ bindComma ++ rs.s ! np.a.g ! np.a.n ; s = \\c => np.s ! c ++ "," ++ rs.s ! np.a.g ! np.a.n ;
a = np.a ; a = np.a ;
isPron = False isPron = False
} ; } ;
@@ -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 ;
+2 -17
View File
@@ -243,14 +243,11 @@ oper
mkV : (breek,gebreek : Str) -> V = mkV : (breek,gebreek : Str) -> V =
\a,b -> lin V (v2vv (irregVerb a b)) ; \a,b -> lin V (v2vv (irregVerb a b)) ;
mkV : (wil,wou,gewil : Str) -> V = mkV : (wil,wou,gewil : Str) -> V =
\a,b,c -> lin V (v2vvPast (mkVerb a a b c)) ; \a,b,c -> lin V (v2vv (mkVerb a a b c)) ;
mkV : Str -> V -> V = \v,s ->lin V (prefixV v s) ; mkV : Str -> V -> V = \v,s ->lin V (prefixV v s) ;
} ; } ;
zijnV v = v ; -- lin V (v2vvAux v VZijn) ; zijnV v = v ; -- lin V (v2vvAux v VZijn) ;
reflV v = lin V { reflV v = lin V {s = v.s ; aux = v.aux ; prefix = v.prefix ; vtype = VRefl} ;
s = v.s ; aux = v.aux ; prefix = v.prefix ; hasPrefix = v.hasPrefix ;
hasPast = v.hasPast ; vtype = VRefl
} ;
zijn_V : V = lin V ResAfr.zijn_V ; zijn_V : V = lin V ResAfr.zijn_V ;
hebben_V : V = lin V ResAfr.hebben_V ; hebben_V : V = lin V ResAfr.hebben_V ;
@@ -278,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
+1 -1
View File
@@ -26,6 +26,6 @@ concrete PhraseAfr of Phrase = CatAfr ** open Prelude, ResAfr in
PConjConj conj = ss (conj.s2) ; PConjConj conj = ss (conj.s2) ;
NoVoc = {s = []} ; NoVoc = {s = []} ;
VocNP np = {s = bindComma ++ np.s ! NPNom} ; VocNP np = {s = "," ++ np.s ! NPNom} ;
} }
+29 -87
View File
@@ -58,9 +58,6 @@ resource ResAfr = ParamX ** open Prelude in {
b + v@("ei"|"eu"|"oe"|"ou"|"ie"|"y"|"ui") + "g" => mkNoun s (b + v + "e") Neutr ; --tuig, tuie --R13.1 b + v@("ei"|"eu"|"oe"|"ou"|"ie"|"y"|"ui") + "g" => mkNoun s (b + v + "e") Neutr ; --tuig, tuie --R13.1
_ + ("oir" | "ion" | "je") => mkNoun s (s + "s") Neutr ; --uit Nederlandse reël _ + ("oir" | "ion" | "je") => mkNoun s (s + "s") Neutr ; --uit Nederlandse reël
b + "heid" => mkNoun s (b + "hede") Neutr ;
_ + "teit" => mkNoun s (s + "e") Neutr ;
_ + ("rm" | "lm") => mkNoun s (s + "s") Neutr ; --R13.3 _ + ("rm" | "lm") => mkNoun s (s + "s") Neutr ; --R13.3
@@ -123,9 +120,8 @@ resource ResAfr = ParamX ** open Prelude in {
b + v@("aal"|"baar"|"eel"|"loos") => b + init (init v) + last v + "e" ; --p288 b + v@("aal"|"baar"|"eel"|"loos") => b + init (init v) + last v + "e" ; --p288
_ + ("agtig"|"ant"|"ent"|"êr"|"ies"|"ig"|"lik"|"matig"|"s") => s + "e" ; --p288 _ + ("agtig"|"ant"|"ent"|"êr"|"ies"|"ig"|"lik"|"matig"|"s") => s + "e" ; --p288
b + "ief" => b + "iewe" ; --p288 b + "ief" => b + "iewe" ; --p288
_ + "af" => s ; -- compounds such as kortaf
--b + ("ei"|"eu"|"oe"|"ou"|"ie"|"y"|"ui") + ? => endCons s + "e" ;
b + v@("ou"|"y") + "d" => b + v + "e" ; --koud, koue / wyd, wye b + v@("ou"|"y") + "d" => b + v + "e" ; --koud, koue / wyd, wye
--b + v@("oo"|"ee") + "d" => b + init v + "ë" ; --leeg, leë --b + v@("oo"|"ee") + "d" => b + init v + "ë" ; --leeg, leë
@@ -136,7 +132,6 @@ resource ResAfr = ParamX ** open Prelude in {
b + v@("aa"|"ee"|"oo"|"uu") + "r" => s ; --duur, duur b + v@("aa"|"ee"|"oo"|"uu") + "r" => s ; --duur, duur
b + v@("aa"|"ee"|"oo"|"uu") + c@#cons => b + shortVoc v c + "e" ; --gaaf, gawe b + v@("aa"|"ee"|"oo"|"uu") + c@#cons => b + shortVoc v c + "e" ; --gaaf, gawe
b + ("ei"|"eu"|"oe"|"ou"|"ie"|"y"|"ui") + ? => endCons s + "e" ;
b + v@("a"|"e"|"i"|"o"|"u" ) + "f" => b + v + "ww" + "e" ; --grof, growwe b + v@("a"|"e"|"i"|"o"|"u" ) + "f" => b + v + "ww" + "e" ; --grof, growwe
--b + v@("a"|"e"|"i"|"o"|"u" ) + c@? => b + v + c + c + "e" ; --stom, growwe --b + v@("a"|"e"|"i"|"o"|"u" ) + c@? => b + v + c + c + "e" ; --stom, growwe
_ + "d" => s + "e" ; --p286 _ + "d" => s + "e" ; --p286
@@ -180,19 +175,12 @@ resource ResAfr = ParamX ** open Prelude in {
s = table { s = table {
VInf => aaien; -- hij/zij/het/wij aaien VInf => aaien; -- hij/zij/het/wij aaien
VPres => aai; -- ik aai VPres => aai; -- ik aai
VPast => aaide; --# notpresent VPast => aai; -- ik aaide --# notpresent --!afr! lyk vir nou soos VPres
VPerf => geaaid -- ik heb geaaid VPerf => geaaid -- ik heb geaaid
} }
}; };
regVerb : Str -> Verb = \s -> regVerb : Str -> Verb = \s -> irregVerb s ("ge" + s) ;
let perf : Str = case s of {
("be" | "ge" | "her" | "er" | "ont" | "ver") + _ => s ;
"e" + r => "geë" + r ;
"i" + r => "geï" + r ;
_ => "ge" + s
}
in irregVerb s perf ;
irregVerb : (breek, gebreek : Str) -> Verb = \breek,gebreek -> irregVerb : (breek, gebreek : Str) -> Verb = \breek,gebreek ->
mkVerb breek breek breek gebreek ; mkVerb breek breek breek gebreek ;
@@ -207,12 +195,10 @@ resource ResAfr = ParamX ** open Prelude in {
if_then_Str b (ein + geb) geb ; if_then_Str b (ein + geb) geb ;
in in
{s = table { {s = table {
VPerf => ein + vs ! VPerf ; ---- TODO: eingegeven f@(VInf | VPerf) => ein + vs ! f ; ---- TODO: eingegeven
f => vs ! f f => vs ! f
} ; } ;
prefix = ein ; prefix = ein ;
hasPrefix = True ;
hasPast = verb.hasPast ;
aux = verb.aux ; aux = verb.aux ;
vtype = verb.vtype vtype = verb.vtype
} ; } ;
@@ -225,22 +211,18 @@ resource ResAfr = ParamX ** open Prelude in {
} ; } ;
aux = VZijn ; aux = VZijn ;
prefix = [] ; prefix = [] ;
hasPrefix = False ;
hasPast = True ;
vtype = VAct ; vtype = VAct ;
} ; } ;
hebben_V : VVerb = { hebben_V : VVerb = {
s = table { s = table {
VInf => "hê" ; VInf => "het" ;
VPres => "het" ; VPres => "het" ;
VPast => "het" ; --# notpresent VPast => "het" ; --# notpresent
VPerf => "gehad" VPerf => "gehad"
} ; } ;
aux = VHebben ; aux = VHebben ;
prefix = [] ; prefix = [] ;
hasPrefix = False ;
hasPast = False ;
vtype = VAct ; vtype = VAct ;
} ; } ;
@@ -259,8 +241,6 @@ resource ResAfr = ParamX ** open Prelude in {
} ; } ;
aux = VHebben ; aux = VHebben ;
prefix = [] ; prefix = [] ;
hasPrefix = False ;
hasPast = True ;
vtype = VAct ; vtype = VAct ;
} ; } ;
@@ -268,13 +248,11 @@ resource ResAfr = ParamX ** open Prelude in {
s = table { s = table {
VInf => "word" ; VInf => "word" ;
VPres => "word" ; VPres => "word" ;
VPast => "is" ; --# notpresent VPast => "word" ; --# notpresent
VPerf => [] VPerf => "geword"
} ; } ;
aux = VZijn ; aux = VHebben ;
prefix = [] ; prefix = [] ;
hasPrefix = False ;
hasPast = True ;
vtype = VAct ; vtype = VAct ;
} ; } ;
@@ -295,18 +273,15 @@ param
Adjf = Strong | Weak ; Adjf = Strong | Weak ;
oper VVerb = Verb ** { oper VVerb = Verb ** {prefix : Str ; aux : VAux ; vtype : VType} ;
prefix : Str ; hasPrefix : Bool ; hasPast : Bool ; aux : VAux ; vtype : VType
} ;
param VAux = VHebben | VZijn ; param VAux = VHebben | VZijn ;
param VType = VAct | VRefl ; param VType = VAct | VRefl ;
oper oper
v2vvAux : Verb -> VAux -> VVerb = \v,a -> v2vvAux : Verb -> VAux -> VVerb = \v,a ->
{s = v.s ; aux = a ; prefix = [] ; hasPrefix = False ; hasPast = False ; vtype = VAct} ; {s = v.s ; aux = a ; prefix = [] ; vtype = VAct} ;
v2vv : Verb -> VVerb = \v -> v2vvAux v VHebben ; v2vv : Verb -> VVerb = \v -> v2vvAux v VHebben ;
v2vvPast : Verb -> VVerb = \v -> (v2vvAux v VHebben) ** {hasPast = True} ;
@@ -350,10 +325,11 @@ param
-- Used in $NounAfr$. -- Used in $NounAfr$.
-- Afrikaans attributive agreement does not depend on the article in the agrAdj : Gender -> Adjf -> NForm -> AForm = \g,a,n ->
-- way Dutch/German strong and weak agreement does. The adjective's case <a,g,n> of {
-- lexical paradigm determines whether its attributive form has -e. <Strong,Neutr,NF Sg _> => APred ;
agrAdj : Gender -> Adjf -> NForm -> AForm = \_,_,_ -> AAttr ; _ => AAttr
} ;
oper VP : Type = { oper VP : Type = {
s : VVerb ; s : VVerb ;
@@ -464,47 +440,30 @@ param
auxv = (auxVerb vp.s.aux).s ; auxv = (auxVerb vp.s.aux).s ;
vperf = vp.s.s ! VPerf ; vperf = vp.s.s ! VPerf ;
verb : Str * Str = case <t,a> of { verb : Str * Str = case <t,a> of {
<Fut|Cond,Simul> => <sal_V.s ! vform, joinPrefix vp.s.hasPrefix vp.s.prefix (vp.s.s ! VInf)> ; --# notpresent <Fut|Cond,Simul> => <sal_V.s ! vform, vp.s.s ! VInf> ; --# notpresent
<Fut|Cond,Anter> => <sal_V.s ! vform, vperf ++ auxv ! VInf> ; --# notpresent <Fut|Cond,Anter> => <sal_V.s ! vform, vperf ++ auxv ! VInf> ; --# notpresent
<Past, Simul> => case vp.s.hasPast of {
True => <vp.s.s ! VPast, []> ;
False => <hebben_V.s ! VPast, vperf>
} ;
<_, Anter> => <auxv ! vform, vperf> ; --# notpresent <_, Anter> => <auxv ! vform, vperf> ; --# notpresent
<_, Simul> => <vp.s.s ! vform, []> <_, Simul> => <vp.s.s ! vform, []>
} ; } ;
fin = case <t,a,o,vp.s.hasPast> of { fin = verb.p1 ;
<Pres,Simul,Sub,_> => joinPrefix vp.s.hasPrefix vp.s.prefix verb.p1 ;
<Past,Simul,Sub,True> => joinPrefix vp.s.hasPrefix vp.s.prefix verb.p1 ;
_ => verb.p1
} ;
neg = vp.a1 ! b ; neg = vp.a1 ! b ;
tailNeg = case b of {Pos => [] ; Neg => "nie"} ;
obj0 = vp.n0 ! agr ; obj0 = vp.n0 ! agr ;
obj = vp.n2 ! agr ; obj = vp.n2 ! agr ;
pref = case <t,a,o,vp.s.hasPast> of { compl = obj0 ++ neg ++ obj ++ vp.a2 ++ vp.s.prefix ;
<Pres,Simul,Main|Inv,_> => vp.s.prefix ;
<Past,Simul,Main|Inv,True> => vp.s.prefix ;
_ => []
} ;
compl = obj0 ++ neg ++ obj ++ vp.a2 ++ pref ;
inf = inf =
case <vp.isAux, vp.inf.p2, a> of { --# notpresent case <vp.isAux, vp.inf.p2, a> of { --# notpresent
<True,True,Anter> => vp.s.s ! VInf ++ vp.inf.p1 ; --# notpresent <True,True,Anter> => vp.s.s ! VInf ++ vp.inf.p1 ; --# notpresent
_ => case <t,vp.s.aux,vp.inf.p2,vp.isAux> of { _ => --# notpresent
<Fut|Cond,VZijn,True,False> => vp.inf.p1 ++ verb.p2 ++ tailNeg ; vp.inf.p1 ++ verb.p2 ++ neg
_ => verb.p2 ++ vp.inf.p1 ++ tailNeg
}
} --# notpresent } --# notpresent
; ;
extra = vp.ext ; extra = vp.ext ;
inffin = inffin =
case <t,vp.isAux,vp.inf.p2,vp.s.hasPast> of { case <a,vp.isAux> of { --# notpresent
<Fut|Cond,_,_,_> => fin ++ inf ; <Anter,True> => fin ++ inf ; -- double inf --# notpresent
<_,True,_,_> => fin ++ inf ; _ => --# notpresent
<Pres,False,True,False> => fin ++ inf ; inf ++ fin --- or just auxiliary vp
_ => inf ++ fin } --# notpresent
}
in in
case o of { case o of {
Main => subj ++ fin ++ compl ++ inf ++ extra ; Main => subj ++ fin ++ compl ++ inf ++ extra ;
@@ -518,34 +477,17 @@ param
VZijn => zijn_V VZijn => zijn_V
} ; } ;
-- Separable prefixes are joined to the verb in subordinate clauses and
-- infinitives. An unconditional BIND is not safe here: with an empty
-- prefix it binds the preceding constituent to the verb (e.g. *hy salgaan).
joinPrefix : Bool -> Str -> Str -> Str = \has,p,v -> case has of {
False => v ;
True => p ++ BIND ++ v
} ;
infVP : Bool -> VP -> ((Agr => Str) * Str * Str) = \isAux, vp -> infVP : Bool -> VP -> ((Agr => Str) * Str * Str) = \isAux, vp ->
< <
\\agr => vp.n0 ! agr ++ vp.n2 ! agr ++ vp.a2, \\agr => vp.n0 ! agr ++ vp.n2 ! agr ++ vp.a2,
vp.a1 ! Pos ++ vp.a1 ! Pos ++
case isAux of { if_then_Str isAux [] "om" ++ "te" ++ vp.s.s ! VInf,
True => joinPrefix vp.s.hasPrefix vp.s.prefix (vp.s.s ! VInf) ;
False => "om" ++ vp.s.prefix ++ "te" ++ vp.s.s ! VInf
},
vp.inf.p1 ++ vp.ext vp.inf.p1 ++ vp.ext
> ; > ;
useInfVP : Bool -> VP -> Str = \isAux,vp -> useInfVP : Bool -> VP -> Str = \isAux,vp ->
let a = agrP3 Sg ; let vpi = infVP isAux vp in
obj = vp.n0 ! a ++ vp.n2 ! a ++ vp.a2 vpi.p1 ! agrP3 Sg ++ vpi.p3 ++ vpi.p2 ;
in case isAux of {
True => obj ++ joinPrefix vp.s.hasPrefix vp.s.prefix (vp.s.s ! VInf) ++
vp.inf.p1 ++ vp.ext ;
False => "om" ++ obj ++ vp.s.prefix ++ "te" ++ vp.s.s ! VInf ++
vp.inf.p1 ++ vp.ext
} ;
reflPron : Agr => Str = table { reflPron : Agr => Str = table {
{n = Sg ; p = P1} => "my" ; --afr {n = Sg ; p = P1} => "my" ; --afr
+3 -19
View File
@@ -21,7 +21,7 @@ concrete SentenceAfr of Sentence = CatAfr ** open ResAfr, Prelude in {
inf = vp.inf.p1 ; inf = vp.inf.p1 ;
in in
verb ++ ps.p2 ++ verb ++ ps.p2 ++
vp.n2 ! agr ++ vp.a1 ! pol ++ vp.a2 ++ vp.s.prefix ++ inf ++ vp.ext vp.n2 ! agr ++ vp.a1 ! pol ++ vp.a2 ++ inf ++ vp.ext
} ; } ;
SlashVP np vp = SlashVP np vp =
@@ -60,24 +60,8 @@ concrete SentenceAfr of Sentence = CatAfr ** open ResAfr, Prelude in {
c2 = cl.c2 c2 = cl.c2
} ; } ;
AdvS a s = {s = \\o => a.s ++ s.s ! case o of { AdvS a s = {s = \\o => a.s ++ s.s ! Inv} ;
Sub => Sub ;
_ => Inv
}} ;
ExtAdvS a s = {s = \\o => a.s ++ bindComma ++ s.s ! case o of { RelS s r = {s = \\o => s.s ! o ++ "," ++ r.s ! Neutr ! Sg} ;
Sub => Sub ;
_ => Inv
}} ;
SSubjS s1 subj s2 = {
s = \\o => s1.s ! o ++ bindComma ++ 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 ++ bindComma ++ r.s ! Neutr ! Sg} ;
} }
+2 -2
View File
@@ -23,11 +23,11 @@ concrete StructuralAfr of Structural = CatAfr, Prelude **
but_PConj = ss "maar" ; but_PConj = ss "maar" ;
by8agent_Prep = mkPrep "deur" ; by8agent_Prep = mkPrep "deur" ;
by8means_Prep = mkPrep "met" ; by8means_Prep = mkPrep "met" ;
can8know_VV, can_VV = auxVV (mkV "kan" "kon" "gekon") ; can8know_VV, can_VV = auxVV (mkV "kan" "kon") ;
during_Prep = mkPrep "tydens" ; during_Prep = mkPrep "tydens" ;
either7or_DConj = {s1 = "òf" ; s2 = "òf" ; n = Pl} ; either7or_DConj = {s1 = "òf" ; s2 = "òf" ; n = Pl} ;
everybody_NP = mkNP "almal" Neutr Pl ; ---- everybody_NP = mkNP "almal" Neutr Pl ; ----
every_Det = mkDet "elke" "elke" Sg ; every_Det = mkDet "elke" "elk" Sg ; ----
everything_NP = mkNP "alles" Neutr Sg ; ---- everything_NP = mkNP "alles" Neutr Sg ; ----
everywhere_Adv = ss "oral" ; everywhere_Adv = ss "oral" ;
few_Det = mkDet "min" "min" Pl ; few_Det = mkDet "min" "min" Pl ;
+1 -8
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 (embedInCommas 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) ;
@@ -93,7 +87,6 @@ concrete VerbAfr of Verb = CatAfr ** open Prelude, ResAfr in {
---- workaround for a subtyping bug ---- workaround for a subtyping bug
oper oper
v2v : VVerb -> VVerb = \v -> v2v : VVerb -> VVerb = \v ->
{s = v.s ; aux = v.aux ; prefix = v.prefix ; hasPrefix = v.hasPrefix ; {s = v.s ; aux = v.aux ; prefix = v.prefix ; vtype = v.vtype} ;
hasPast = v.hasPast ; vtype = v.vtype} ;
predVv : VVerb -> ResAfr.VP = \v -> predV (v2v v) ; predVv : VVerb -> ResAfr.VP = \v -> predV (v2v v) ;
} }
+5 -20
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 { oper mkDet : (_,_,_,_,_,_,_,_ : Str) -> Number -> Det =
mkDet : Str -> Number -> Det = \s,n -> lin Det {
s = \\_,_ => s ;
post = \\_,_,_ => [] ;
sp = Indef ;
n = n
} ;
mkDet : (_,_,_,_,_,_,_,_ : Str) -> Number -> Det =
\f1,f2,f3,f4,f5,f6,f7,f8,n -> lin Det \f1,f2,f3,f4,f5,f6,f7,f8,n -> lin Det
{ s = table { { s = table {
Nom => table { Nom => table {
@@ -1416,23 +1350,18 @@ mkDet = overload {
Fem => f8 Fem => f8
} }
} ; } ;
post = \\_,_,_ => [] ; spec = Indef ;
sp = Indef ;
n = n n = n
} } ;
} ;
mkConj : Str -> Conj = \s -> lin Conj {s=s} ; mkConj : Str -> Conj = \s -> lin Conj {s=s} ;
mkPConj : Str -> PConj = \s -> lin PConj {s=s} ; mkPConj : Str -> PConj = \s -> lin PConj {s=s} ;
mkPron : (nom,acc,dat,ablat,acc_clit,dat_clit : Str) -> mkPron : (nom,acc,dat,ablat,acc_clit,dat_clit : Str) -> GenNum -> Person -> Pron =
(Case => Gender => Number => Str) -> \nom,acc,dat,ablat,acc_clit,dat_clit,gn,p -> lin Pron
GenNum -> Person -> Pron =
\nom,acc,dat,ablat,acc_clit,dat_clit,poss,gn,p -> lin Pron
{s = table Case [nom; acc; dat; ablat]; {s = table Case [nom; acc; dat; ablat];
acc_clit = acc_clit; acc_clit = acc_clit;
dat_clit = dat_clit; dat_clit = dat_clit;
poss = poss;
a = {gn=gn; p=p} a = {gn=gn; p=p}
} ; } ;
@@ -1440,10 +1369,7 @@ mkCard : Str -> Card = \s -> lin Card {s=s} ;
mkACard : Str -> ACard = \s -> lin ACard {s=s} ; mkACard : Str -> ACard = \s -> lin ACard {s=s} ;
mkPredet : Str -> Predet = \s -> lin Predet {s=s} ; mkPredet : Str -> Predet = \s -> lin Predet {s=s} ;
mkPrep : Str -> Case -> Prep = \s,c -> lin Prep { mkPrep : Str -> Prep = \s -> lin Prep {s=s} ;
s=s; noPrep : Prep = lin Prep {s=""} ;
c=c
} ;
noPrep : Prep = lin Prep {s=""; c=Acc} ;
} }
-13
View File
@@ -4,24 +4,11 @@ concrete PhraseSqi of Phrase = CatSqi ** open Prelude, ResSqi in {
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ; PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
UttS s = s ; UttS s = s ;
UttQS s = s ;
UttImpSg p i = {s=i.s ! p.p ! Sg} ;
UttImpPl p i = {s=i.s ! p.p ! Pl} ;
UttImpPol p i = {s=i.s ! p.p ! Pl} ;
UttIP ip = {s=ip.s} ;
UttIAdv a = a ;
UttNP np = {s = np.s ! Nom} ; UttNP np = {s = np.s ! Nom} ;
UttAdv a = a ;
UttVP vp = {s="të" ++ vp.subjunctive ! Sg ! P3 ! Masc ! Nom} ;
UttCN cn = {s=cn.s ! Indef ! Nom ! Sg} ;
UttCard c = c ;
UttAP ap = {s=ap.s ! Indef ! Nom ! Masc ! Sg} ;
UttInterj i = i ; UttInterj i = i ;
NoPConj = {s = []} ; NoPConj = {s = []} ;
PConjConj c = c ;
NoVoc = {s = []} ; NoVoc = {s = []} ;
VocNP np = {s=SOFT_BIND ++ "," ++ np.s ! Nom} ;
} }
-21
View File
@@ -1,21 +0,0 @@
concrete QuestionSqi of Question = CatSqi ** open Prelude, ParamX, ResSqi, (I=IrregSqi) in {
lincat QVP = {s : Str} ;
lin
QuestCl cl = cl ;
QuestVP ip vp = {s=\\t,a,p=>ip.s++negation p++futureParticle t++vp.indicative!sqiTense t!agrNumber ip.a!ip.a.p!agrGender ip.a!Nom} ;
QuestSlash ip cl = {s=\\t,a,p=>ip.s++cl.s!t!a!p++cl.c2.s} ;
QuestIAdv i cl = {s=\\t,a,p=>i.s++cl.s!t!a!p} ;
QuestIComp i np = {s=\\_,_,_=>i.s++(lin Verb I.jam_V).indicative!ResSqi.Pres!agrNumber np.a!np.a.p++np.s!Nom} ;
IdetCN d cn = {s=d.s!cn.g++cn.s!Indef!Nom!d.n; a=agrgP3 cn.g d.n} ;
IdetIP d = {s=d.s!Masc; a=agrgP3 Masc d.n} ;
AdvIP ip a = ip ** {s=ip.s++a.s} ;
IdetQuant q n = {s=\\g=>q.s!g++n.s; n=n.n} ;
PrepIP p ip = {s=p.s++ip.s} ;
AdvIAdv i a = {s=i.s++a.s} ;
CompIAdv i = i ;
CompIP ip = {s=ip.s} ;
ComplSlashIP sl ip = {s=sl.indicative!ResSqi.Pres!Sg!P3++sl.c2.s++ip.s} ;
AdvQVP vp i = {s=vp.indicative!ResSqi.Pres!Sg!P3!Masc!Nom++i.s} ;
AddAdvQVP q i = {s=q.s++i.s} ;
QuestQVP ip q = {s=\\_,_,_=>ip.s++q.s} ;
}
-8
View File
@@ -1,8 +0,0 @@
concrete RelativeSqi of Relative = CatSqi ** open ParamX, ResSqi in {
lin
RelCl cl = {s=\\_,t,a,p=>"që"++cl.s!t!a!p} ;
RelVP rp vp = {s=\\agr,t,a,p=>rp.s!Nom!agr.gn++negation p++futureParticle t++vp.indicative!sqiTense t!agrNumber agr!agr.p!agrGender agr!Nom} ;
RelSlash rp cl = {s=\\agr,t,a,p=>rp.s!cl.c2.c!agr.gn++cl.s!t!a!p++cl.c2.s} ;
IdRP = {s=\\_,_=>"që"} ;
FunRP prep np rp = {s=\\c,g=>prep.s++np.s!prep.c++rp.s!c!g} ;
}
+5 -64
View File
@@ -1,6 +1,6 @@
resource ResSqi = ParamX-[Tense,Past,Pres] ** open Prelude in { resource ResSqi = ParamX-[Tense,Past,Pres] ** open Prelude in {
oper Compl = {s : Str; c : Case} ; oper Compl = {s : Str} ;
param Species = Indef | Def ; param Species = Indef | Def ;
param Case = Nom | Acc | Dat | Ablat ; param Case = Nom | Acc | Dat | Ablat ;
@@ -9,16 +9,6 @@ param Gender = Masc | Fem ;
param GenNum = GSg Gender | GPl ; param GenNum = GSg Gender | GPl ;
oper Agr = {gn : GenNum; p : Person} ; oper Agr = {gn : GenNum; p : Person} ;
oper agrNumber : Agr -> Number = \a -> case a.gn of {
GSg _ => Sg ;
GPl => Pl
} ;
oper agrGender : Agr -> Gender = \a -> case a.gn of {
GSg g => g ;
GPl => Masc
} ;
oper Noun = {s: Species => Case => Number => Str; g: Gender} ; -- 3978 oper Noun = {s: Species => Case => Number => Str; g: Gender} ; -- 3978
oper mkNoun : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Gender -> Noun = oper mkNoun : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Gender -> Noun =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,g -> \f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,g ->
@@ -114,11 +104,10 @@ oper mkAdj : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Bool -> Adj =
param Tense = Pres | Past | Imperfect | Aorist ; param Tense = Pres | Past | Imperfect | Aorist ;
param VType = VNormal | VRefl | VJ ; oper Verb = {Indicative: Tense => Number => Person => Str; Imperative: Number => Str; participle: Str; pres_optative: Number => Person => Str; perf_optative: Number => Person => Str; pres_admirative: Number => Person => Str; imperf_admirative: Number => Person => Str} ; -- 758
oper Verb = {indicative: Tense => Number => Person => Str; imperative: Number => Str; participle: Str; pres_optative: Number => Person => Str; perf_optative: Number => Person => Str; pres_admirative: Number => Person => Str; imperf_admirative: Number => Person => Str; vtype : VType} ; -- 758
oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Verb = oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Verb =
\f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24,f25,f26,f27,f28,f29,f30,f31,f32,f33,f34,f35,f36,f37,f38,f39,f40,f41,f42,f43,f44,f45,f46,f47,f48,f49,f50,f51 -> \f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24,f25,f26,f27,f28,f29,f30,f31,f32,f33,f34,f35,f36,f37,f38,f39,f40,f41,f42,f43,f44,f45,f46,f47,f48,f49,f50,f51 ->
{ indicative = table { { Indicative = table {
Pres => table { Pres => table {
Sg => table { Sg => table {
P1 => f1 ; P1 => f1 ;
@@ -168,7 +157,7 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_
} }
} }
} ; } ;
imperative = table { Imperative = table {
Sg => f25 ; Sg => f25 ;
Pl => f26 Pl => f26
} ; } ;
@@ -220,8 +209,7 @@ oper mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_,_
P2 => f50 ; P2 => f50 ;
P3 => f51 P3 => f51
} }
} ; }
vtype = VNormal
} ; } ;
oper link_clitic : Species => Case => Gender => Number => Str = oper link_clitic : Species => Case => Gender => Number => Str =
@@ -270,51 +258,4 @@ oper genNum : Gender -> Number -> GenNum = \g,n ->
agrgP3 : Gender -> Number -> Agr = agrgP3 : Gender -> Number -> Agr =
\g,n -> {gn=genNum g n; p=P3} ; \g,n -> {gn=genNum g n; p=P3} ;
oper sqiTense : ParamX.Tense -> Tense = \t -> case t of {
ParamX.Pres => Pres ;
ParamX.Past => Aorist ;
ParamX.Fut => Pres ;
ParamX.Cond => Imperfect
} ;
oper negation : Polarity -> Str = \p -> case p of {
Pos => [] ;
Neg => "nuk"
} ;
oper futureParticle : ParamX.Tense -> Str = \t -> case t of {
ParamX.Fut => "do" ++ "të" ;
ParamX.Cond => "do" ++ "të" ;
_ => []
} ;
oper subjunctiveForm : VType -> Str -> Str -> Number -> Person -> Str =
\vt,citation,fallback,n,p -> case vt of {
VJ => case <n,p> of {
<Sg,P1> => citation ;
<Sg,P3> => citation ++ BIND ++ "ë" ;
_ => fallback
} ;
_ => fallback
} ;
oper haveAux : ParamX.Tense => Number => Person => Str = table {
ParamX.Pres => table {
Sg => table {P1 => "kam"; P2 => "ke"; P3 => "ka"};
Pl => table {P1 => "kemi"; P2 => "keni"; P3 => "kanë"}
} ;
ParamX.Past => table {
Sg => table {P1 => "kisha"; P2 => "kishe"; P3 => "kishte"};
Pl => table {P1 => "kishim"; P2 => "kishit"; P3 => "kishin"}
} ;
ParamX.Fut => table {
Sg => table {P1 => "do të kem"; P2 => "do të kesh"; P3 => "do të ketë"};
Pl => table {P1 => "do të kemi"; P2 => "do të keni"; P3 => "do të kenë"}
} ;
ParamX.Cond => table {
Sg => table {P1 => "do të kisha"; P2 => "do të kishe"; P3 => "do të kishte"};
Pl => table {P1 => "do të kishim"; P2 => "do të kishit"; P3 => "do të kishin"}
}
} ;
} }
-46
View File
@@ -1,46 +0,0 @@
concrete SentenceSqi of Sentence = CatSqi ** open Prelude, ParamX, ResSqi in {
oper
mkClause : Str -> Agr -> VP -> ParamX.Tense -> Anteriority -> Polarity -> Str =
\subj,a,vp,t,ant,pol -> case <ant,t> of {
<Simul,ParamX.Past> => subj ++ negation pol ++
haveAux ! ParamX.Pres ! agrNumber a ! a.p ++ vp.participle ! a ! Nom ;
<Simul,_> => subj ++ negation pol ++ futureParticle t ++
vp.indicative ! sqiTense t ! agrNumber a ! a.p ! agrGender a ! Nom ;
<Anter,_> => subj ++ negation pol ++ haveAux ! t ! agrNumber a ! a.p ++
vp.participle ! a ! Nom
} ;
lin
PredVP np vp = {s = \\t,a,p => mkClause (np.s ! Nom) np.a vp t a p} ;
PredSCVP sc vp = {s = \\t,a,p => mkClause sc.s {gn=GSg Masc; p=P3} vp t a p} ;
SlashVP np sl = {
s = \\t,a,p => np.s ! Nom ++ negation p ++ futureParticle t ++
sl.indicative ! sqiTense t ! agrNumber np.a ! np.a.p ;
c2 = sl.c2
} ;
AdvSlash cl adv = cl ** {s = \\t,a,p => cl.s ! t ! a ! p ++ adv.s} ;
SlashPrep cl prep = {s = cl.s; c2 = prep} ;
SlashVS np vs ss = {
s = \\t,a,p => np.s ! Nom ++ negation p ++ vs.indicative ! sqiTense t ! agrNumber np.a ! np.a.p ++ "që" ++ ss.s ;
c2 = {s=[]; c=Acc}
} ;
ImpVP vp = {s = \\pol,n => case pol of {Pos => []; Neg => "mos"} ++ vp.imperative ! n ! Nom} ;
AdvImp adv imp = {s = \\p,n => adv.s ++ imp.s ! p ! n} ;
EmbedS s = {s = "që" ++ s.s} ;
EmbedQS q = {s = q.s} ;
EmbedVP vp = {s = "të" ++ vp.subjunctive ! Sg ! P3 ! Masc ! Nom} ;
UseCl t p cl = {s = cl.s ! t.t ! t.a ! p.p} ;
UseQCl t p cl = {s = cl.s ! t.t ! t.a ! p.p} ;
UseRCl t p cl = {s = \\a => cl.s ! a ! t.t ! t.a ! p.p} ;
UseSlash t p cl = {s = cl.s ! t.t ! t.a ! p.p; c2=cl.c2} ;
AdvS adv s = {s = adv.s ++ s.s} ;
ExtAdvS adv s = {s = adv.s ++ SOFT_BIND ++ "," ++ s.s} ;
SSubjS s1 subj s2 = {s = s1.s ++ subj.s ++ s2.s} ;
RelS s rs = {s = s.s ++ SOFT_BIND ++ "," ++ rs.s ! {gn=GSg Masc;p=P3}} ;
}
+8 -154
View File
@@ -1,56 +1,13 @@
concrete StructuralSqi of Structural = CatSqi ** open ResSqi, ParadigmsSqi in { concrete StructuralSqi of Structural = CatSqi ** open ResSqi, ParadigmsSqi in {
lin i_Pron = mkPron "unë" "mua" "mua" "meje" "më" "më" lin i_Pron = mkPron "unë" "mua" "mua" "meje" "më" "më" (GSg Masc) P1 ;
(\\c,g,n => case <c,g,n> of { lin youSg_Pron = mkPron "ti" "ty" "ty" "teje" "të" "të" (GSg Masc) P2 ;
<Nom,Masc,Sg> => "im"; lin he_Pron = mkPron "ai" "atë" "atij" "atij" "e" "i" (GSg Masc) P3 ;
<_ ,Masc,Sg> => "tim"; lin she_Pron = mkPron "ajo" "atë" "asaj" "asaj" "e" "i" (GSg Fem) P3 ;
<Nom,Fem, Sg> => "ime"; lin it_Pron = mkPron "ai" "atë" "atij" "atij" "e" "i" (GSg Masc) P3 ;
<Acc,Fem, Sg> => "time"; lin we_Pron = mkPron "ne" "ne" "neve" "nesh" "na" "na" GPl P1 ;
<_ ,Fem, Sg> => "sime"; lin youPl_Pron = mkPron "ju" "ju" "juve" "jush" "ju" "ju" GPl P2 ;
<_ ,Masc,Pl> => link_clitic!Def!c!g!n++"mi"; lin they_Pron = mkPron "ata" "ata" "atyre" "atyre" "i" "u" GPl P3 ;
<_ ,Fem, Pl> => link_clitic!Def!c!g!n++"mia"
})
(GSg Masc) P1 ;
lin youSg_Pron = mkPron "ti" "ty" "ty" "teje" "të" "të"
(\\c,g,n => case <c,g,n> of {
<Nom,Masc,Sg> => "yt";
<_ ,Masc,Sg> => "tënd";
<Nom,Fem, Sg> => "jote";
<Acc,Fem, Sg> => "tënde";
<_ ,Fem, Sg> => "sate";
<_ ,Masc,Pl> => link_clitic!Def!c!g!n++"tu";
<_ ,Fem, Pl> => link_clitic!Def!c!g!n++"tua"
})
(GSg Masc) P2 ;
lin he_Pron = mkPron "ai" "atë" "atij" "atij" "e" "i"
(\\c,g,n => link_clitic!Def!c!g!n++"tij")
(GSg Masc) P3 ;
lin she_Pron = mkPron "ajo" "atë" "asaj" "asaj" "e" "i"
(\\c,g,n => link_clitic!Def!c!g!n++"saj")
(GSg Fem) P3 ;
lin it_Pron = mkPron "ai" "atë" "atij" "atij" "e" "i"
(\\c,g,n => link_clitic!Def!c!g!n++"tij")
(GSg Masc) P3 ;
lin we_Pron = mkPron "ne" "ne" "neve" "nesh" "na" "na"
(\\c,g,n => case <c,g,n> of {
<Nom,Masc,Sg> => "ynë";
<_ ,Masc,Sg> => "tonë";
<Nom,Fem, Sg> => "jonë";
<Acc,Fem, Sg> => "tonë";
<_ ,Fem, Sg> => "sonë";
<_ ,Masc,Pl> => "tanë";
<_ ,Fem ,Pl> => "tona"
})
GPl P1 ;
lin youPl_Pron = mkPron "ju" "ju" "juve" "jush" "ju" "ju"
(\\c,g,n => case <c,n> of {
<Nom,Sg> => "juaj";
_ => "tuaj"
})
GPl P2 ;
lin they_Pron = mkPron "ata" "ata" "atyre" "atyre" "i" "u"
(\\c,g,n => link_clitic!Def!c!g!n++"tyre")
GPl P3 ;
lin this_Quant = mkQuant "ky" "këta" "kjo" "këto" lin this_Quant = mkQuant "ky" "këta" "kjo" "këto"
"këtë" "këtyre" "këtë" "këtyre" "këtë" "këtyre" "këtë" "këtyre"
"këtij" "këtyre" "kësaj" "këtyre" "këtij" "këtyre" "kësaj" "këtyre"
@@ -59,107 +16,4 @@ lin that_Quant = mkQuant "ai" "ata" "ajo" "ato"
"atë" "ata" "atë" "ato" "atë" "ata" "atë" "ato"
"atij" "atyre" "asaj" "atyre" "atij" "atyre" "asaj" "atyre"
"atij" "atyre" "asaj" "atyre" ; "atij" "atyre" "asaj" "atyre" ;
lin
youPol_Pron = youPl_Pron ;
and_Conj = mkConj "dhe" ;
or_Conj = mkConj "ose" ;
if_then_Conj = mkConj "nëse" ;
above_Prep = mkPrep "mbi" accusative ;
after_Prep = mkPrep "pas" ablative ;
before_Prep = mkPrep "para" ablative ;
behind_Prep = mkPrep "prapa" ablative ;
between_Prep = mkPrep "midis" ablative ;
by8agent_Prep = mkPrep "nga" nominative ;
by8means_Prep = mkPrep "me" accusative ;
during_Prep = mkPrep "gjatë" ablative ;
except_Prep = mkPrep "përveç" ablative ;
for_Prep = mkPrep "për" accusative ;
from_Prep = mkPrep "nga" nominative ;
in8front_Prep = mkPrep "përpara" accusative ;
in_Prep = mkPrep "në" accusative ;
on_Prep = mkPrep "mbi" accusative ;
part_Prep = mkPrep "nga" nominative ;
possess_Prep = mkPrep "i" accusative ;
through_Prep = mkPrep "përmes" accusative ;
to_Prep = mkPrep "te" accusative ;
under_Prep = mkPrep "nën" accusative ;
with_Prep = mkPrep "me" accusative ;
without_Prep = mkPrep "pa" accusative ;
although_Subj = mkSubj "megjithëse" ;
because_Subj = mkSubj "sepse" ;
if_Subj = mkSubj "nëse" ;
that_Subj = mkSubj "që" ;
when_Subj = mkSubj "kur" ;
always_AdV = mkAdV "gjithmonë" ;
almost_AdA = mkAdA "pothuajse" ;
so_AdA = mkAdA "kaq" ;
too_AdA = mkAdA "tepër" ;
very_AdA = mkAdA "shumë" ;
almost_AdN = mkAdN "pothuajse" ;
at_least_AdN = mkAdN "të paktën" ;
at_most_AdN = mkAdN "më së shumti" ;
more_CAdv = {s="më";p="se"} ;
less_CAdv = {s="më pak";p="se"} ;
as_CAdv = {s="po aq";p="sa"} ;
here_Adv = mkAdv "këtu" ;
there_Adv = mkAdv "atje" ;
everywhere_Adv = mkAdv "kudo" ;
somewhere_Adv = mkAdv "diku" ;
here7from_Adv = mkAdv "nga këtu" ;
here7to_Adv = mkAdv "deri këtu" ;
there7from_Adv = mkAdv "nga atje" ;
there7to_Adv = mkAdv "deri atje" ;
quite_Adv = mkAdv "mjaft" ;
how_IAdv = mkIAdv "si" ;
how8much_IAdv = mkIAdv "sa" ;
when_IAdv = mkIAdv "kur" ;
where_IAdv = mkIAdv "ku" ;
why_IAdv = mkIAdv "pse" ;
which_IQuant = {s=table {Masc=>"cili";Fem=>"cila"}} ;
how8many_IDet = {s=\\_=>"sa";n=Pl} ;
whatSg_IP = {s="çfarë";a={gn=GSg Masc;p=P3}} ;
whatPl_IP = {s="çfarë";a={gn=GPl;p=P3}} ;
whoSg_IP = {s="kush";a={gn=GSg Masc;p=P3}} ;
whoPl_IP = {s="cilët";a={gn=GPl;p=P3}} ;
all_Predet = {s="të gjithë"} ;
most_Predet = {s="shumica e"} ;
not_Predet = {s="jo"} ;
only_Predet = {s="vetëm"} ;
every_Det = {s=\\_,_=>"çdo";post=\\_,_,_=>[];sp=Indef;n=Sg} ;
few_Det = {s=\\_,_=>"pak";post=\\_,_,_=>[];sp=Indef;n=Pl} ;
many_Det = {s=\\_,_=>"shumë";post=\\_,_,_=>[];sp=Indef;n=Pl} ;
much_Det = {s=\\_,_=>"shumë";post=\\_,_,_=>[];sp=Indef;n=Sg} ;
someSg_Det = {s=\\_,_=>"një";post=\\_,_,_=>[];sp=Indef;n=Sg} ;
somePl_Det = {s=\\_,_=>"disa";post=\\_,_,_=>[];sp=Indef;n=Pl} ;
no_Quant = mkQuant "asnjë" ;
everybody_NP = {s=\\_=>"të gjithë";a={gn=GPl;p=P3}} ;
everything_NP = {s=\\_=>"gjithçka";a={gn=GSg Masc;p=P3}} ;
nobody_NP = {s=\\_=>"askush";a={gn=GSg Masc;p=P3}} ;
nothing_NP = {s=\\_=>"asgjë";a={gn=GSg Masc;p=P3}} ;
somebody_NP = {s=\\_=>"dikush";a={gn=GSg Masc;p=P3}} ;
something_NP = {s=\\_=>"diçka";a={gn=GSg Masc;p=P3}} ;
can_VV = mkVV (mkV "mund") ;
can8know_VV = mkVV (irregV "di" "di" "di" "dimë" "dini" "dinë" "di" "dini" "ditur") ;
must_VV = mkVV (mkV "duhet") ;
want_VV = mkVV (irregV "dua" "do" "do" "duam" "doni" "duan" "duaj" "doni" "dashur") ;
have_V2 = mkV2 (irregV "kam" "ke" "ka" "kemi" "keni" "kanë" "ki" "kini" "pasur") ;
but_PConj = {s="por"} ;
otherwise_PConj = {s="përndryshe"} ;
therefore_PConj = {s="prandaj"} ;
please_Voc = {s="ju lutem"} ;
yes_Utt = {s="po"} ;
no_Utt = {s="jo"} ;
language_title_Utt = {s="shqip"} ;
} }
-150
View File
@@ -1,150 +0,0 @@
concrete VerbSqi of Verb = CatSqi ** open Prelude, ParamX, ResSqi, (I=IrregSqi) in {
oper
verbVP : Verb -> VP = \v -> lin VP {
indicative = \\t,n,p,_,_ => v.indicative ! t ! n ! p ;
subjunctive = \\n,p,_,_ => subjunctiveForm v.vtype
(v.indicative ! ResSqi.Pres ! Sg ! P1)
(v.indicative ! ResSqi.Pres ! n ! p) n p ;
imperative = \\n,_ => v.imperative ! n ;
participle = \\_,c => v.participle ;
pres_optative = \\n,p,c => v.pres_optative ! n ! p ;
perf_optative = \\n,p,c => v.perf_optative ! n ! p ;
pres_admirative = \\n,p,c => v.pres_admirative ! n ! p ;
imperf_admirative = \\n,p,c => v.imperf_admirative ! n ! p ;
vtype = v.vtype
} ;
addVP : VP -> (Agr => Case => Str) -> VP = \vp,x -> vp ** {
indicative = \\t,n,p,g,c => vp.indicative ! t ! n ! p ! g ! c ++
x ! {gn=genNum g n; p=p} ! c ;
subjunctive = \\n,p,g,c => vp.subjunctive ! n ! p ! g ! c ++
x ! {gn=genNum g n; p=p} ! c ;
imperative = \\n,c => vp.imperative ! n ! c ++
x ! {gn=genNum Masc n; p=P2} ! c ;
participle = \\a,c => vp.participle ! a ! c ++ x ! a ! c ;
pres_optative = \\n,p,c => vp.pres_optative ! n ! p ! c ++
x ! {gn=genNum Masc n; p=p} ! c ;
perf_optative = \\n,p,c => vp.perf_optative ! n ! p ! c ++
x ! {gn=genNum Masc n; p=p} ! c ;
pres_admirative = \\n,p,c => vp.pres_admirative ! n ! p ! c ++
x ! {gn=genNum Masc n; p=p} ! c ;
imperf_admirative = \\n,p,c => vp.imperf_admirative ! n ! p ! c ++
x ! {gn=genNum Masc n; p=p} ! c
} ;
slashVP : Verb -> Compl -> VPSlash = \v,c -> lin VPSlash {
indicative=\\t,n,p=>v.indicative!t!n!p;
subjunctive=\\n,p=>subjunctiveForm v.vtype
(v.indicative!ResSqi.Pres!Sg!P1)
(v.indicative!ResSqi.Pres!n!p) n p;
imperative=\\n=>v.imperative!n;
participle=v.participle;
pres_optative=v.pres_optative;
perf_optative=v.perf_optative;
pres_admirative=v.pres_admirative;
imperf_admirative=v.imperf_admirative;
c2=c;
vtype=v.vtype
} ;
addSlash : VPSlash -> Str -> VPSlash = \sl,x -> sl ** {
indicative = \\t,n,p => sl.indicative ! t ! n ! p ++ x ;
subjunctive = \\n,p => sl.subjunctive ! n ! p ++ x ;
imperative = \\n => sl.imperative ! n ++ x ;
participle = sl.participle ++ x ;
pres_optative = \\n,p => sl.pres_optative ! n ! p ++ x ;
perf_optative = \\n,p => sl.perf_optative ! n ! p ++ x ;
pres_admirative = \\n,p => sl.pres_admirative ! n ! p ++ x ;
imperf_admirative = \\n,p => sl.imperf_admirative ! n ! p ++ x
} ;
slashToVP : VPSlash -> VP = \v -> lin VP {
indicative = \\t,n,p,g,c => v.indicative ! t ! n ! p ;
subjunctive = \\n,p,_,_ => v.subjunctive ! n ! p ;
imperative = \\n,c => v.imperative ! n ;
participle = \\_,c => v.participle ;
pres_optative = \\n,p,c => v.pres_optative ! n ! p ;
perf_optative = \\n,p,c => v.perf_optative ! n ! p ;
pres_admirative = \\n,p,c => v.pres_admirative ! n ! p ;
imperf_admirative = \\n,p,c => v.imperf_admirative ! n ! p ;
vtype = v.vtype
} ;
lin
UseV v = verbVP v ;
SlashV2a v = slashVP v v.c2 ;
ComplSlash v np = addVP (slashToVP v) (\\_,_ => v.c2.s ++ np.s ! v.c2.c) ;
ComplVS v s = addVP (verbVP v) (\\_,_ => "që" ++ s.s) ;
ComplVQ v q = addVP (verbVP v) (\\_,_ => q.s) ;
ComplVA v ap = addVP (verbVP v) (\\a,c =>
ap.s ! Indef ! c ! agrGender a ! agrNumber a) ;
ComplVV v vp = addVP (verbVP v) (\\a,_ =>
"të" ++ vp.subjunctive ! agrNumber a ! a.p ! agrGender a ! Nom) ;
Slash2V3 v np = addSlash (slashVP (lin Verb v) v.c3)
(v.c2.s ++ np.s ! v.c2.c) ;
Slash3V3 v np = addSlash (slashVP (lin Verb v) v.c2)
(v.c3.s ++ np.s ! v.c3.c) ;
SlashV2S v s = addSlash (slashVP (lin Verb v) v.c2) ("që" ++ s.s) ;
SlashV2Q v q = addSlash (slashVP (lin Verb v) v.c2) q.s ;
SlashV2A v ap = addSlash (slashVP (lin Verb v) v.c2)
(ap.s ! Indef ! Nom ! Masc ! Sg) ;
SlashV2V v vp = addSlash (slashVP (lin Verb v) v.c2)
("të" ++ vp.subjunctive ! Sg ! P3 ! Masc ! Nom) ;
SlashVV v sl = sl ** {
indicative = \\t,n,p => v.indicative ! t ! n ! p ++ "të" ++ sl.subjunctive ! Sg ! P3 ;
subjunctive = \\n,p => subjunctiveForm v.vtype
(v.indicative!ResSqi.Pres!Sg!P1)
(v.indicative!ResSqi.Pres!n!p) n p ++ "të" ++ sl.subjunctive ! Sg ! P3
} ;
SlashV2VNP v np sl = sl ** {
indicative = \\t,n,p => v.indicative ! t ! n ! p ++ v.c2.s ++ np.s ! v.c2.c ++ "të" ++ sl.subjunctive ! Sg ! P3 ;
subjunctive = \\n,p => subjunctiveForm v.vtype
(v.indicative!ResSqi.Pres!Sg!P1)
(v.indicative!ResSqi.Pres!n!p) n p ++ v.c2.s ++ np.s ! v.c2.c ++ "të" ++ sl.subjunctive ! Sg ! P3
} ;
ReflVP sl = addVP (slashToVP sl) (\\_,_ => "veten") ;
UseComp comp = addVP (verbVP (lin Verb I.jam_V)) (\\a,_ => comp.s ! a) ;
UseCopula = verbVP (lin Verb I.jam_V) ;
PassV2 v = addVP (verbVP (lin Verb I.jam_V)) (\\_,_ => v.participle) ;
AdvVP vp adv = addVP vp (\\_,_ => adv.s) ;
ExtAdvVP vp adv = addVP vp (\\_,_ => SOFT_BIND ++ "," ++ adv.s) ;
AdVVP adv vp = vp ** {
indicative = \\t,n,p,g,c => adv.s ++ vp.indicative ! t ! n ! p ! g ! c ;
subjunctive = \\n,p,g,c => adv.s ++ vp.subjunctive ! n ! p ! g ! c ;
imperative = \\n,c => adv.s ++ vp.imperative ! n ! c
} ;
AdvVPSlash sl adv = sl ** {
indicative = \\t,n,p => sl.indicative ! t ! n ! p ++ adv.s ;
subjunctive = \\n,p => sl.subjunctive ! n ! p ++ adv.s ;
imperative = \\n => sl.imperative ! n ++ adv.s ;
participle = sl.participle ++ adv.s
} ;
AdVVPSlash adv sl = sl ** {
indicative = \\t,n,p => adv.s ++ sl.indicative ! t ! n ! p ;
subjunctive = \\n,p => adv.s ++ sl.subjunctive ! n ! p ;
imperative = \\n => adv.s ++ sl.imperative ! n
} ;
VPSlashPrep vp prep = lin VPSlash {
indicative = \\t,n,p => vp.indicative ! t ! n ! p ! Masc ! Nom ;
subjunctive = \\n,p => vp.subjunctive ! n ! p ! Masc ! Nom ;
imperative = \\n => vp.imperative ! n ! Nom ;
participle = vp.participle ! {gn=GSg Masc;p=P3} ! Nom ;
pres_optative = \\n,p => vp.pres_optative ! n ! p ! Nom ;
perf_optative = \\n,p => vp.perf_optative ! n ! p ! Nom ;
pres_admirative = \\n,p => vp.pres_admirative ! n ! p ! Nom ;
imperf_admirative = \\n,p => vp.imperf_admirative ! n ! p ! Nom ;
vtype = vp.vtype ;
c2 = prep
} ;
CompAP ap = {s = \\a => ap.s ! Indef ! Nom ! agrGender a ! agrNumber a} ;
CompNP np = {s = \\_ => np.s ! Nom} ;
CompAdv adv = {s = \\_ => adv.s} ;
CompCN cn = {s = \\_ => cn.s ! Indef ! Nom ! Sg} ;
}
+420 -1
View File
@@ -128,8 +128,10 @@ C1eC2aC3 = {C1 ="" ; C1C2="'"; C2C3 ="!"; C3="#"};
peC1aC2C3 = { C1 = "ä" ; C1C2="'"; C2C3 ="'"; C3=""}; peC1aC2C3 = { C1 = "ä" ; C1C2="'"; C2C3 ="'"; C3=""};
penC1aC2C3e = { C1 = "än" ; C1C2="'"; C2C3 ="'"; C3=""}; penC1aC2C3e = { C1 = "än" ; C1C2="'"; C2C3 ="'"; C3=""};
pteC1aC2C3 = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3=""}; pteC1aC2C3 = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3=""};
pteC1aC2C3 = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3=""};-- 3
pteC1aC2C3u = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3="&"}; pteC1aC2C3u = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3="&"};
pyeC1aC2C3 = { C1 = "y" ; C1C2="'"; C2C3 ="'"; C3=""}; pyeC1aC2C3 = { C1 = "y" ; C1C2="'"; C2C3 ="'"; C3=""};
pteC1aC2C3 = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3=""};
pyeC1aC2C3u = { C1 = "y" ; C1C2="'"; C2C3 ="'"; C3="&"}; pyeC1aC2C3u = { C1 = "y" ; C1C2="'"; C2C3 ="'"; C3="&"};
--Passive Jus_Imperat mkV3gdl --Passive Jus_Imperat mkV3gdl
@@ -341,6 +343,7 @@ leC1AC2aC3 = {C1 ="l" ; C1C2="!"; C2C3 ="'"; C3=""};
enC1AC2aC3 = { C1 = "(n" ; C1C2="!"; C2C3 ="'"; C3=""}; enC1AC2aC3 = { C1 = "(n" ; C1C2="!"; C2C3 ="'"; C3=""};
C1AC2aC3 = { C1 = "" ; C1C2="!"; C2C3 ="'"; C3=""}; C1AC2aC3 = { C1 = "" ; C1C2="!"; C2C3 ="'"; C3=""};
C1AC2aC3i = { C1 = "" ; C1C2="!"; C2C3 ="'"; C3="#"}; C1AC2aC3i = { C1 = "" ; C1C2="!"; C2C3 ="'"; C3="#"};
C1AC2aC3u = { C1 = "" ; C1C2="!"; C2C3 ="'"; C3="&"};
yC1AC2aC3 = { C1 = "y" ; C1C2="!"; C2C3 ="'"; C3=""}; yC1AC2aC3 = { C1 = "y" ; C1C2="!"; C2C3 ="'"; C3=""};
tC1AC2aC3 = { C1 = "t" ; C1C2="!"; C2C3 ="'"; C3=""}; tC1AC2aC3 = { C1 = "t" ; C1C2="!"; C2C3 ="'"; C3=""};
yC1AC2aC3u = { C1 = "y" ; C1C2="!"; C2C3 ="'"; C3="&"}; yC1AC2aC3u = { C1 = "y" ; C1C2="!"; C2C3 ="'"; C3="&"};
@@ -658,7 +661,7 @@ C1AC2n = { C1 = "" ; C1C2="!"; C2 ="n"};
C1AC2k = { C1 = "" ; C1C2="!"; C2 ="k"}; C1AC2k = { C1 = "" ; C1C2="!"; C2 ="k"};
C1AC2sh = { C1 = "" ; C1C2="!"; C2 ="x"}; C1AC2sh = { C1 = "" ; C1C2="!"; C2 ="x"};
C1AC2achehu = { C1 = "" ; C1C2 ="!"; C2 ="!ch&"}; C1AC2achehu = { C1 = "" ; C1C2 ="!"; C2 ="!ch&"};
C1AC2a = { C1 = "" ; C1C2="!"; C2 ="'"}; C1AC2a = { C1 = "" ; C1C2="!"; C2 ="'"};
C1AC2ach = { C1 = "" ; C1C2="!"; C2 ="'c"}; C1AC2ach = { C1 = "" ; C1C2="!"; C2 ="'c"};
C1AC2u = { C1 = "" ; C1C2="!"; C2 ="&"}; C1AC2u = { C1 = "" ; C1C2="!"; C2 ="&"};
-- Imper -- mkV2yz -- Imper -- mkV2yz
@@ -698,6 +701,7 @@ C1C2ek = { C1 = "" ; C1C2=""; C2 ="'k"};
C1C2esh = { C1 = "" ; C1C2=""; C2 ="'x"}; C1C2esh = { C1 = "" ; C1C2=""; C2 ="'x"};
C1C2achehu = { C1 = "" ; C1C2=""; C2 ="!ch&"}; C1C2achehu = { C1 = "" ; C1C2=""; C2 ="!ch&"};
C1C2o = { C1 = "" ; C1C2=""; C2 ="/"}; C1C2o = { C1 = "" ; C1C2=""; C2 ="/"};
C1C2a = { C1 = "" ; C1C2=""; C2="!"};
C1C2ew = { C1 = "" ; C1C2=""; C2="'w"}; C1C2ew = { C1 = "" ; C1C2=""; C2="'w"};
--CompPer mkV2yz y!l'h& !l !l !l cX7l 7l l'c !l --CompPer mkV2yz y!l'h& !l !l !l cX7l 7l l'c !l
@@ -717,12 +721,81 @@ meC1aC2= {C1 ="m'" ; C1C2="!"; C2 =""};
--Infinitve mkV2yz --Infinitve mkV2yz
C1aC2ii= {C1 ="" ; C1C2="!"; C2 ="#"}; C1aC2ii= {C1 ="" ; C1C2="!"; C2 ="#"};
--mkV2yz -- yz -- catch
--Perf --
C1AC2hu = {C1 ="" ; C1C2="!"; C2 ="h&"};
C1AC2n = { C1 = "" ; C1C2="!"; C2 ="n"};
C1AC2k = { C1 = "" ; C1C2="!"; C2 ="k"};
C1AC2sh = { C1 = "" ; C1C2="!"; C2 ="x"};
C1AC2achehu = { C1 = "" ; C1C2 ="!"; C2 ="!ch&"};
C1AC2a = { C1 = "" ; C1C2="!"; C2 ="'"};
C1AC2ach = { C1 = "" ; C1C2="!"; C2 ="'c"};
C1AC2u = { C1 = "" ; C1C2="!"; C2 ="&"};
-- Imper -- mkV2yz
eC1C2alehu = { C1 = "ä" ; C1C2=""; C2 ="!l'h&"};
enC1C2alen = { C1 = "än" ; C1C2=""; C2 ="!l'n"};
teC1C2yaleh = { C1 = "t" ; C1C2=""; C2 ="!l'h"};
teC1C2aleh = { C1 = "t" ; C1C2=""; C2 ="y!l'x"};
teC1C2alachehu = { C1 = "t" ; C1C2=""; C2 ="!l!ch&"};
yeC1C2al = { C1 = "y" ; C1C2=""; C2 ="!l"};
teC1C2alech = { C1 = "t" ; C1C2=""; C2 ="!l'c"};
yeC1C2alu = { C1 = "y" ; C1C2=""; C2 ="!l&"};
-- Cont -- mkV2yz
eC1C2 = { C1 = "ä" ; C1C2=""; C2 =""};
enC1C2 = { C1 = "än" ; C1C2=""; C2 =""};
teC1C2 = { C1 = "t" ; C1C2=""; C2 =""};
--teC1C2 = { C1 = "t" ; C1C2=""; C2 =""};3
teC1C2u = { C1 = "t" ; C1C2=""; C2 ="&"};
yeC1C2 = { C1 = "y" ; C1C2=""; C2 =""};
--teC1C2 = { C1 = "t" ; C1C2=""; C2 =""};
yeC1C2u = { C1 = "y" ; C1C2=""; C2 ="&"};
--Jus_Imperat mkV2yz
leC1aC2a = {C1 ="l" ; C1C2="!"; C2 =""};
enC1aC2a = { C1 = "än" ; C1C2="!"; C2 =""};
C1aC2 = { C1 = "" ; C1C2="!"; C2 =""};
C1aC2i = { C1 = "" ; C1C2="!"; C2 ="#"};
C1eC2u = { C1 = "" ; C1C2="!"; C2 ="&"};
yC1aC2a = { C1 = "y" ; C1C2="!"; C2 =""};
tC1aC2a = { C1 = "t" ; C1C2="!"; C2 =""};
yC1aC2u = { C1 = "y" ; C1C2="!"; C2 ="&"};
--Gerund mkV2yz
C1C2ie = {C1 ="" ; C1C2=""; C2 ="%"};
C1C2en = { C1 = "" ; C1C2=""; C2 ="'n"};
C1C2ek = { C1 = "" ; C1C2=""; C2 ="'k"};
C1C2esh = { C1 = "" ; C1C2=""; C2 ="'x"};
C1C2achehu = { C1 = "" ; C1C2=""; C2 ="!ch&"};
C1C2o = { C1 = "" ; C1C2=""; C2 ="/"};
C1C2a = { C1 = "" ; C1C2=""; C2="!"};
C1C2ew = { C1 = "" ; C1C2=""; C2="'w"};
--CompPer mkV2yz y!l'h& !l !l !l cX7l 7l l'c !l
C1C2iealehu = {C1 ="" ; C1C2=""; C2 ="%y!l'h&"};
C1C2enal = { C1 = "" ; C1C2=""; C2 ="'n!l"};
C1C2ekal = { C1 = "" ; C1C2=""; C2 ="'k!l"};
C1C2eshal = { C1 = "" ; C1C2=""; C2 ="'x!l"};
C1C2achehual = { C1 = "" ; C1C2=""; C2 ="!cX7l"};
C1C2oal = { C1 = "" ; C1C2=""; C2 ="7l"};
C1C2alech = { C1 = "" ; C1C2=""; C2="!l'c"};
C1C2ewal = { C1 = "" ; C1C2=""; C2="'w!l"};
--Infinitve mkV2yz
meC1aC2= {C1 ="m'" ; C1C2="!"; C2 =""};
--Infinitve mkV2yz
C1aC2ii= {C1 ="" ; C1C2="!"; C2 ="#"};
--nore -- nr -- live --nore -- nr -- live
--Perf -- --Perf --
C1oC2hu = {C1 ="" ; C1C2="/"; C2 ="h&"}; C1oC2hu = {C1 ="" ; C1C2="/"; C2 ="h&"};
C1oC2n = { C1 = "" ; C1C2="/"; C2 ="n"}; C1oC2n = { C1 = "" ; C1C2="/"; C2 ="n"};
C1oC2k = { C1 = "" ; C1C2="/"; C2 ="k"}; C1oC2k = { C1 = "" ; C1C2="/"; C2 ="k"};
C1oC2sh = { C1 = "" ; C1C2="/"; C2 ="x"}; C1oC2sh = { C1 = "" ; C1C2="/"; C2 ="x"};
C1oC2achehu = { C1 = "" ; C1C2 ="/"; C2 ="!ch&"};
C1oC2a = { C1 = "" ; C1C2="/"; C2 ="'"}; C1oC2a = { C1 = "" ; C1C2="/"; C2 ="'"};
C1oC2ach = { C1 = "" ; C1C2="/"; C2 ="'c"}; C1oC2ach = { C1 = "" ; C1C2="/"; C2 ="'c"};
C1oC2u = { C1 = "" ; C1C2="/"; C2 ="&"}; C1oC2u = { C1 = "" ; C1C2="/"; C2 ="&"};
@@ -785,12 +858,87 @@ meC1oC2= {C1 ="m'" ; C1C2="/"; C2 =""};
C1uaC2i= {C1 ="" ; C1C2="7"; C2 ="#"}; C1uaC2i= {C1 ="" ; C1C2="7"; C2 ="#"};
--nore -- nr -- live
--Perf --
C1oC2hu = {C1 ="" ; C1C2="/"; C2 ="h&"};
C1oC2n = { C1 = "" ; C1C2="/"; C2 ="n"};
C1oC2k = { C1 = "" ; C1C2="/"; C2 ="k"};
C1oC2sh = { C1 = "" ; C1C2="/"; C2 ="x"};
C1oC2achehu = { C1 = "" ; C1C2 ="/"; C2 ="!ch&"};
C1oC2a = { C1 = "" ; C1C2="/"; C2 ="'"};
C1oC2ach = { C1 = "" ; C1C2="/"; C2 ="'c"};
C1oC2u = { C1 = "" ; C1C2="/"; C2 ="&"};
-- Imper -- mkV2nr
eC1oC2alehu = { C1 = "ä" ; C1C2="/"; C2 ="!l'h&"};
enC1oC2alen = { C1 = "än" ; C1C2="/"; C2 ="!l'n"};
teC1oC2yaleh = { C1 = "t" ; C1C2="/"; C2 ="!l'h"};
teC1oC2alesh = { C1 = "t" ; C1C2="/"; C2 ="y!l'x"};
teC1oC2alachehu = { C1 = "t" ; C1C2="/"; C2 ="!l!ch&"};
yeC1oC2al = { C1 = "y" ; C1C2="/"; C2 ="!l"};
teC1oC2alech = { C1 = "t" ; C1C2="/"; C2 ="!l'c"};
yeC1oC2alu = { C1 = "y" ; C1C2="/"; C2 ="!l&"};
-- Imper -- mkV2nr
eC1oC2 = { C1 = "ä" ; C1C2="/"; C2 =""};
enC1oC2 = { C1 = "än" ; C1C2="/"; C2 =""};
teC1oC2 = { C1 = "t" ; C1C2="/"; C2 =""};
teC1oC2i = { C1 = "t" ; C1C2="/"; C2 ="#"};
teC1oC2u = { C1 = "t" ; C1C2="/"; C2 ="&"};
yeC1oC2 = { C1 = "y" ; C1C2="/"; C2 =""};
--teC1oC2 = { C1 = "t" ; C1C2="/"; C2 ="!l'c"};
yeC1oC2u = { C1 = "y" ; C1C2="/"; C2 ="&"};
--Jus_Imperat mkV2nr
leC1uC2 = {C1 ="l" ; C1C2="&"; C2 =""};
enC1uC2 = { C1 = "än" ; C1C2="&"; C2 =""};
C1uC2 = { C1 = "" ; C1C2="&"; C2 =""};
C1uC2i = { C1 = "" ; C1C2="&"; C2 ="#"};
C1uC2u = { C1 = "" ; C1C2="&"; C2 ="&"};
yC1uC2 = { C1 = "y" ; C1C2="&"; C2 =""};
tC1uC2 = { C1 = "t" ; C1C2="&"; C2 =""};
yC1uC2u = { C1 = "y" ; C1C2="&"; C2 ="&"};
--Gerund mkV2nr
C1oC2ie = {C1 ="" ; C1C2="/"; C2 ="%"};
C1oC2en = { C1 = "" ; C1C2="/"; C2 ="'n"};
C1oC2ek = { C1 = "" ; C1C2="/"; C2 ="'k"};
C1oC2esh = { C1 = "" ; C1C2="/"; C2 ="'x"};
C1oC2achehu = { C1 = "" ; C1C2="/"; C2 ="!ch&"};
C1oC2o = { C1 = "" ; C1C2="/"; C2 ="/"};
C1oC2A = { C1 = "" ; C1C2="/"; C2="!"};
C1oC2ew = { C1 = "" ; C1C2="/"; C2="'w"};
--CompPer mkV2nr y!l'h& !l !l !l cX7l 7l l'c !l
C1oC2iealehu = {C1 ="" ; C1C2="/"; C2 ="%y!l'h& "};
C1oC2enal = { C1 = "" ; C1C2="/"; C2 ="'n!l"};
C1oC2ekal = { C1 = "" ; C1C2="/"; C2 ="'k!l"};
C1oC2eshal = { C1 = "" ; C1C2="/"; C2 ="'x!l"};
C1oC2achehual = { C1 = "" ; C1C2="/"; C2 ="!cX7l"};
C1oC2oal = { C1 = "" ; C1C2="/"; C2 ="7l"};
C1oC2Alech = { C1 = "" ; C1C2="/"; C2="!l'c"};
C1oC2ewal = { C1 = "" ; C1C2="/"; C2="'w!l"};
--Infinitve mkV2nr
meC1oC2= {C1 ="m'" ; C1C2="/"; C2 =""};
--Participle mkV2nr
C1uaC2i= {C1 ="" ; C1C2="7"; C2 ="#"};
--mkV2wN -- wN -- swim --- Eg lie, see, say --mkV2wN -- wN -- swim --- Eg lie, see, say
--Perf -- --Perf --
C1AC2ehu = {C1 ="" ; C1C2="!"; C2 ="'h&"}; C1AC2ehu = {C1 ="" ; C1C2="!"; C2 ="'h&"};
C1AC2en = { C1 = "" ; C1C2="!"; C2 ="'n"}; C1AC2en = { C1 = "" ; C1C2="!"; C2 ="'n"};
C1AC2ek = { C1 = "" ; C1C2="!"; C2 ="'k"}; C1AC2ek = { C1 = "" ; C1C2="!"; C2 ="'k"};
C1AC2esh = { C1 = "" ; C1C2="!"; C2 ="'x"}; C1AC2esh = { C1 = "" ; C1C2="!"; C2 ="'x"};
--C1AC2achehu = { C1 = "" ; C1C2 ="!"; C2 ="!ch&"};
--C1AC2a = { C1 = "" ; C1C2="!"; C2 ="'"};
--C1AC2ach = { C1 = "" ; C1C2="!"; C2 ="'c"};
--C1AC2u = { C1 = "" ; C1C2="!"; C2 ="&"};
-- Imper -- mkV2wN -- Imper -- mkV2wN
eC1aC2alehu = { C1 = "ä" ; C1C2="!"; C2 ="!l'h&"}; eC1aC2alehu = { C1 = "ä" ; C1C2="!"; C2 ="!l'h&"};
enC1aC2alen = { C1 = "än" ; C1C2="!"; C2 ="!l'n"}; enC1aC2alen = { C1 = "än" ; C1C2="!"; C2 ="!l'n"};
@@ -844,6 +992,74 @@ C1aC2tewal = { C1 = "" ; C1C2="!"; C2="t'w!l"};
meC1aC2et= {C1 ="m'" ; C1C2="!"; C2 ="'t"}; meC1aC2et= {C1 ="m'" ; C1C2="!"; C2 ="'t"};
--nore -- nr -- live --nore -- nr -- live
--mkV2wN -- wN -- swim --- Eg lie, see, say
--Perf --
C1AC2ehu = {C1 ="" ; C1C2="!"; C2 ="'h&"};
C1AC2en = { C1 = "" ; C1C2="!"; C2 ="'n"};
C1AC2ek = { C1 = "" ; C1C2="!"; C2 ="'k"};
C1AC2esh = { C1 = "" ; C1C2="!"; C2 ="'x"};
--C1AC2achehu = { C1 = "" ; C1C2 ="!"; C2 ="!ch&"};
--C1AC2a = { C1 = "" ; C1C2="!"; C2 ="'"};
--C1AC2ach = { C1 = "" ; C1C2="!"; C2 ="'c"};
--C1AC2u = { C1 = "" ; C1C2="!"; C2 ="&"};
-- Imper -- mkV2wN
eC1aC2alehu = { C1 = "ä" ; C1C2="!"; C2 ="!l'h&"};
enC1aC2alen = { C1 = "än" ; C1C2="!"; C2 ="!l'n"};
teC1aC2yaleh = { C1 = "t" ; C1C2="!"; C2 ="!l'h"};
teC1aC2alesh = { C1 = "t" ; C1C2="!"; C2 ="y!l'x"};
teC1aC2alachehu = { C1 = "t" ; C1C2="!"; C2 ="!l!ch&"};
yeC1aC2al = { C1 = "y" ; C1C2="!"; C2 ="!l"};
teC1aC2alech = { C1 = "t" ; C1C2="!"; C2 ="!l'c"};
yeC1aC2alu = { C1 = "y" ; C1C2="!"; C2 ="!l&"};
-- Cont -- mkV2wN
eC1aC2 = { C1 = "ä" ; C1C2="!"; C2 =""};
enC1aC2 = { C1 = "än" ; C1C2="!"; C2 =""};
teC1aC2 = { C1 = "t" ; C1C2="!"; C2 =""};
--teC1aC2 = { C1 = "t" ; C1C2="!"; C2 =""};
teC1aC2u = { C1 = "t" ; C1C2="!"; C2 ="&"};
yeC1aC2 = { C1 = "y" ; C1C2="!"; C2 =""};
--teC1aC2 = { C1 = "t" ; C1C2="!"; C2 =""};
yeC1aC2u = { C1 = "y" ; C1C2="!"; C2 ="&"};
--Jus_Imperat mkV2wN
--leC1aC2a = {C1 ="l" ; C1C2="!"; C2 =""};
--enC1aC2a = { C1 = "än" ; C1C2="!"; C2 =""};
--C1aC2 = { C1 = "" ; C1C2="!"; C2 =""};
--C1aC2i = { C1 = "" ; C1C2="!"; C2 ="#"};
--C1eC2u = { C1 = "" ; C1C2="!"; C2 ="&"};
--yC1aC2a = { C1 = "y" ; C1C2="!"; C2 =""};
--tC1aC2a = { C1 = "t" ; C1C2="!"; C2 =""};
--yC1aC2u = { C1 = "y" ; C1C2="!"; C2 ="&"};
--Gerund mkV2wN
C1aC2cie = {C1 ="" ; C1C2="!"; C2 ="c%"};
C1aC2ten = { C1 = "" ; C1C2="!"; C2 ="t'n"};
C1aC2tek = { C1 = "" ; C1C2="!"; C2 ="t'k"};
C1aC2tesh = { C1 = "" ; C1C2="!"; C2 ="t'x"};
C1aC2tachehu = { C1 = "" ; C1C2="!"; C2 ="t!ch&"};
C1aC2to = { C1 = "" ; C1C2="!"; C2 ="t/"};
C1aC2ta = { C1 = "" ; C1C2="!"; C2="t!"};
C1aC2tew = { C1 = "" ; C1C2="!"; C2="t'w"};
--ComPer mkV2wN y!l'h& !l !l !l cX7l 7l l'c !l
C1aC2ciealehu = {C1 ="" ; C1C2="!"; C2 ="c%y!l'h&"};
C1aC2tenal = { C1 = "" ; C1C2="!"; C2 ="t'n!l"};
C1aC2tekal = { C1 = "" ; C1C2="!"; C2 ="t'k!l"};
C1aC2teshal = { C1 = "" ; C1C2="!"; C2 ="t'x!l"};
C1aC2tachehual = { C1 = "" ; C1C2="!"; C2 ="t!cX7l"};
C1aC2toal = { C1 = "" ; C1C2="!"; C2 ="t7l"};
C1aC2talech = { C1 = "" ; C1C2="!"; C2="t!l'c"};
C1aC2tewal = { C1 = "" ; C1C2="!"; C2="t'w!l"};
--Infinitve mkV2wN
meC1aC2et= {C1 ="m'" ; C1C2="!"; C2 ="'t"};
--nore -- nr -- live
----------- This much is enough for the duo-radicals--- ----------- This much is enough for the duo-radicals---
--There are few verbs still remaining like the case of shete, hede , --washe, aye, ale , all need unique froms for them selves. I will get --back here later!! --There are few verbs still remaining like the case of shete, hede , --washe, aye, ale , all need unique froms for them selves. I will get --back here later!!
@@ -893,8 +1109,63 @@ tC1eC2 = { C1 = "t" ; C1C2=""; C2 =""};
meC1C2et= {C1 ="m'" ; C1C2=""; C2 ="'t"}; meC1C2et= {C1 ="m'" ; C1C2=""; C2 ="'t"};
----------- This much is enough for the duo-radicals---
--There are few verbs still remaining like the case of shete, hede , --washe, aye, ale , all need unique froms for them selves. I will get --back here later!!
--seTe -- st -- give
--Perf --
C1eC2hu = {C1 ="" ; C1C2="'"; C2 ="'h&"};
C1eC2n = { C1 = "" ; C1C2="'"; C2 ="'n"};
C1eC2k = { C1 = "" ; C1C2="'"; C2 ="'k"};
C1eC2sh = { C1 = "" ; C1C2="'"; C2 ="'x"};
C1eC2achehu = { C1 = "" ; C1C2 ="'"; C2 ="'ch&"};
C1eC2a = { C1 = "" ; C1C2="'"; C2 ="'"};
C1eC2ach = { C1 = "" ; C1C2="'"; C2 ="'c"};
--C1eC2u = { C1 = "" ; C1C2="'"; C2 ="&"}; same as C1aC2u (bela)
-- Imper -- mkV2sT
--eC1eC2alehu = { C1 = "ä" ; C1C2="'"; C2 ="!l'h&"}; eC1aC2alehu
--enC1eC2alen = { C1 = "än" ; C1C2="'"; C2 ="!l'n"};enC1aC2alen
--teC1eC2yaleh = { C1 = "t" ; C1C2="'"; C2 ="!l'h"};teC1aC2yaleh
--teC1eC2aleh = { C1 = "t" ; C1C2="'"; C2 ="y!l'x"};teC1aC2aleh
--teC1eC2alachehu = { C1 = "t" ; C1C2="'"; C2 ="!l!ch&"};teC1aC2alachehu
--yeC1eC2al = { C1 = "y" ; C1C2="'"; C2 ="!l"};yeC1aC2al
--teC1eC2alech = { C1 = "t" ; C1C2="'"; C2 ="!l'c"};teC1aC2alech
--yeC1eC2alu = { C1 = "y" ; C1C2="'"; C2 ="!l&"};yeC1aC2alu
--Jus_Imperat mkV2sT
leC1eC2 = {C1 ="l" ; C1C2=""; C2 =""};
enC1eC2 = { C1 = "än" ; C1C2=""; C2 =""};
C1C2 = { C1 = "" ; C1C2=""; C2 =""};
C1eC2i = { C1 = "" ; C1C2=""; C2 ="#"};
--C1eC2u = { C1 = "" ; C1C2=""; C2 ="&"}; C1C2u
yC1eC2 = { C1 = "y" ; C1C2=""; C2 =""};
tC1eC2 = { C1 = "t" ; C1C2=""; C2 =""};
--yC1eC2u = { C1 = "y" ; C1C2=""; C2 ="&"};yC1C2u
--Gerund mkV2sT
--C1eC2ie = {C1 ="" ; C1C2="'"; C2 ="c%"}; C1aC2cie
--C1eC2en = { C1 = "" ; C1C2="'"; C2 ="'n"};C1aC2ten
--C1eC2ek = { C1 = "" ; C1C2="'"; C2 ="'k"}; C1aC2tek
--C1eC2esh = { C1 = "" ; C1C2="'"; C2 ="'x"}; C1aC2tesh
--C1eC2achehu = { C1 = "" ; C1C2="'"; C2 ="!ch&"};C1aC2tachehu
--C1eC2o = { C1 = "" ; C1C2="'"; C2 ="/"};C1aC2to
--C1eC2A = { C1 = "" ; C1C2="'"; C2="!"};C1aC2ta
--C1eC2ew = { C1 = "" ; C1C2="'"; C2="'w"}; C1aC2tew
--Infinitve mkV2sT
meC1C2et= {C1 ="m'" ; C1C2=""; C2 ="'t"};
---- Quadro_Radical ---- Quadro_Radical
--Starting with type Tri-Radical Roots --Starting with type Tri-Radical Roots
-- Eg. dbdb - fight -- Eg. dbdb - fight
-- qzqz - freeze -- qzqz - freeze
@@ -967,4 +1238,152 @@ meC1aC2C3aC4 = {C1 ="m'" ; C1C2="'"; C2C3 =""; C3C4="'"; C4= "" };
--Participle mkV4dbdb --Participle mkV4dbdb
C1eC2C3aC4i = {C1 ="" ; C1C2="'"; C2C3 =""; C3C4="!"; C4= "#" }; C1eC2C3aC4i = {C1 ="" ; C1C2="'"; C2C3 =""; C3C4="!"; C4= "#" };
---- Quadro_Radical
--Starting with type Tri-Radical Roots
-- Eg. dbdb - fight
-- qzqz - freeze
-- wrwr - throw
-- tnfs - breath
--Perf --
C1aC2aC3aC4hu = {C1 ="" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "h&" };
C1aC2aC3aC4n = { C1 = "" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "n" };
C1aC2aC3aC4k = { C1 = "" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "k" };
C1aC2aC3aC4sh = { C1 = "" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "x" };
C1aC2aC3aC4achehu = { C1 = "" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "!ch&" };
C1aC2aC3aC4a = { C1 = "" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "'" };
C1aC2aC3aC4ech = { C1 = "" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "'c" };
C1aC2aC3aC4u = { C1 = "" ; C1C2="'"; C2C3 ="'"; C3C4="'"; C4= "&" };
--Imper --mkV4dbdb
eC1aC2aC3C4alehu = { C1 = "ä" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "!l'h&" };
enC1aC2aC3C4alen = { C1 = "än" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "!l'n" };
teC1aC2aC3C4yaleh = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "!l'h" };
teC1aC2aC3C4aleh = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "y!l'x" };
teC1aC2aC3C4alachehu = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "!l!ch&" };
yeC1aC2aC3C4al = { C1 = "y" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "!l" };
teC1aC2aC3C4alech = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "!l'c" };
yeC1aC2aC3C4alu = { C1 = "y" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "!l&" };
--Cont --mkV4dbdb
eC1aC2aC3C4 = { C1 = "ä" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "" };
enC1aC2aC3C4 = { C1 = "än" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "" };
teC1aC2aC3C4 = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "" };
teC1aC2aC3C4i = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "#" };
teC1aC2aC3C4u = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "&" };
yeC1aC2aC3C4 = { C1 = "y" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "" };
--teC1aC2aC3C4 = { C1 = "t" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "" };
yeC1aC2aC3C4u = { C1 = "y" ; C1C2="'"; C2C3 ="'"; C3C4=""; C4= "&" };
--Jus_Imperat mkV4dbdb
leC1aC2C3C4 = {C1 ="l" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "" };
enC1aC2C3C4 = { C1 = "än" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "" };
C1aC2C3C4 = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "" };
C1aC2C3C4i = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "#" };
C1aC2C3C4u = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "&" };
yC1aC2C3C4 = { C1 = "y" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "" };
tC1aC2C3C4 = { C1 = "t" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "" };
yC1aC2C3C4u = { C1 = "y" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "&" };
--Gerund mkV4dbdb
C1aC2C3C4ie = {C1 ="" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "%" };
C1aC2C3C4en = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'n" };
C1aC2C3C4ek = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'k" };
C1aC2C3C4esh = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'x" };
C1aC2C3C4achehu = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "!ch&" };
C1aC2C3C4o = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "/" };
C1aC2C3C4a = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "!" };
C1aC2C3C4ew = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'w" };
--CompPerf mkV4dbdb y!l'h& !l !l !l cX7l 7l l'c !l
C1aC2C3C4iealehu = {C1 ="" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "%y!l'h&" };
C1aC2C3C4enal = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'n!l" };
C1aC2C3C4ekal = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'k!l" };
C1aC2C3C4eshal = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'x!l" };
C1aC2C3C4achehual = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "!cX7l" };
C1aC2C3C4oal = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "7l" };
C1aC2C3C4alech = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "!l'c" };
C1aC2C3C4ewal = { C1 = "" ; C1C2="'"; C2C3 =""; C3C4=""; C4= "'w!l" };
--Infinitve mkV4dbdb
meC1aC2C3aC4 = {C1 ="m'" ; C1C2="'"; C2C3 =""; C3C4="'"; C4= "" };
--Participle mkV4dbdb
C1eC2C3aC4i = {C1 ="" ; C1C2="'"; C2C3 =""; C3C4="!"; C4= "#" };
} }
{-
resource PatternsAmh = {
flags coding=utf8 ;
oper
--perf
C1aC2aC3ku = {C1 ="" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="ኩ"};
C1aC2aC3n = { C1 = "" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="ን"};
C1aC2aC3k = { C1 = "" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="ክ"};
C1aC2aC3sh = { C1 = "" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="ሽ"};
C1aC2aC3achehu = { C1 = "" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="አችሁ"};
C1aC2aC3e = { C1 = "" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="ኧ"};
C1aC2aC3ech = { C1 = "" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="ኧች"};
C1aC2aC3u = { C1 = "" ; C1C2="ኧ"; C2C3 ="ኧ"; C3="ኡ"};
--imper
eC1aC2C3alehu = { C1 = "እ" ; C1C2="ኧ"; C2C3 =""; C3="አለሁ"};
enC1aC2C3alen = { C1 = "እን" ; C1C2="ኧ"; C2C3 =""; C3="አለን"};
teC1aC2C3yaleh = { C1 = "ት" ; C1C2="ኧ"; C2C3 =""; C3="አለህ"};
teC1aC2C3aleh = { C1 = "ት" ; C1C2="ኧ"; C2C3 =""; C3="ያለሽ"};
teC1aC2C3alachehu = { C1 = "ት" ; C1C2="ኧ"; C2C3 =""; C3="አላችሁ"};
yeC1aC2C3al = { C1 = "ይ" ; C1C2="ኧ"; C2C3 =""; C3="አል"};
teC1aC2C3alech = { C1 = "ት" ; C1C2="ኧ"; C2C3 =""; C3="አለች"};
yeC1aC2C3alu = { C1 = "ይ" ; C1C2="ኧ"; C2C3 =""; C3="አሉ"};
}
-}
+3
View File
@@ -22,9 +22,12 @@ concrete PhraseAmh of Phrase = CatAmh ** open
UttIP ip = ip ; --- Acc also UttIP ip = ip ; --- Acc also
UttVP vp = {s = vp.obj.s ++ vp.inf} ; UttVP vp = {s = vp.obj.s ++ vp.inf} ;
UttIAdv iadv = iadv ; UttIAdv iadv = iadv ;
UttCN n = {s = n.s ! Sg ! Indef!Nom} ;
UttCard n = {s = n.s ! Masc!Sg!Indef!Nom} ;
UttImpSg pol imp = {s = pol.s ++ imp.s!pol.p!Masc!Sg}; UttImpSg pol imp = {s = pol.s ++ imp.s!pol.p!Masc!Sg};
UttImpPl pol imp = {s = pol.s ++ imp.s ! pol.p! Masc! Pl} ; --- TO DO UttImpPl pol imp = {s = pol.s ++ imp.s ! pol.p! Masc! Pl} ; --- TO DO
UttImpPol pol imp = {s = pol.s ++ imp.s ! pol.p ! Masc!Pl} ; -- TO DO --- UttImpPol pol imp = {s = pol.s ++ imp.s ! pol.p ! Masc!Pl} ; -- TO DO ---
UttQS qs = {s = qs.s } ; -- TO DO
{- {-
PConjConj conj = {s = conj.s2} ; --- PConjConj conj = {s = conj.s2} ; ---
-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
** **
{} ; {} ;
+2 -3
View File
@@ -1,4 +1,3 @@
abstract AllHyeAbs = abstract AllHyeAbs =
Lang, Lang
Extend ** {}
** {}
+15 -64
View File
@@ -1,65 +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} ;
anterior : Tense => Polarity => Str; lincat CN = Noun ;
conditional : Aspect => Number => Str; lincat A = Adj ;
converb : {imperfective : Str; futCon1 : Str; lincat A2 = Adj ** {c2 : Compl} ;
futCon2 : Str; negative : Str; lincat AP = Adj ;
perfective : Str; simultaneous : Str}; lincat Prep = Compl ;
passive : Str; past : Person => Number => Str;
participle : PartType => Str;
subjunctive : Aspect => Number => Str} ;
lincat ClSlash = {s : Str} ;
lincat Comp = {s : Str} ;
lincat Conj = {s : Str} ;
lincat DAP = {s : Str} ;
lincat Decimal = {s : 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 : Number => 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; isCard : Bool} ;
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 : Tense => Anteriority => Polarity => Str} ;
lincat QS = {s : Str} ;
lincat Quant = {s : Number => Str; sp : Species; isArt : Bool} ;
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};
}
-76
View File
@@ -1,76 +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 {
s=s++copulaVerb.s;
conditional=\\a,p,n=>s++copulaVerb.conditional!a!p!n;
converb={imperfective=s++copulaVerb.converb.imperfective;
futCon1=s++copulaVerb.converb.futCon1;
futCon2=s++copulaVerb.converb.futCon2;
negative=s++copulaVerb.converb.negative;
perfective=s++copulaVerb.converb.perfective;
simultaneous=s++copulaVerb.converb.simultaneous};
imperative=\\n=>s++copulaVerb.imperative!n;
passive=s++copulaVerb.passive;
past=\\p,n=>s++copulaVerb.past!p!n;
participle=\\p=>s++copulaVerb.participle!p;
subjunctive=\\a,p,n=>s++copulaVerb.subjunctive!a!p!n
} ;
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};
anterior=\\_=>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
-161
View File
@@ -1,161 +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 : Agr => Str} ; [VPS] = {s1,s2 : Agr => Str} ;
VPI = {s : Str} ; [VPI] = {s1,s2 : Str} ;
[Comp] = {s1,s2 : Str} ; [Imp] = {s1,s2 : Number => 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} ;
extPrependVP : 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} ;
passivePart : Verb -> Str = \v -> v.passivePart ;
agentAdv : NP -> Str = \np -> np.s ! Dat ++ "կողմից" ;
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=\\agr=>case temp.a of {
Anter => case <temp.t,pol.p> of {
<R.Pres,Pos> => vp.converb.perfective++presentAux agr.p agr.n;
<R.Pres,Neg> => negativePresentAux agr.p agr.n++vp.converb.perfective;
<R.Past,Pos> => vp.converb.perfective++pastAux agr.p agr.n;
<R.Past,Neg> => negativePastAux agr.p agr.n++vp.converb.perfective;
<R.Fut,Pos> => vp.converb.perfective++copulaVerb.conditional!Non_Past!agr.p!agr.n;
<R.Fut,Neg> => negativePresentAux agr.p agr.n++vp.converb.perfective++copulaVerb.converb.futCon1;
<R.Cond,Pos> => vp.converb.perfective++copulaVerb.conditional!Perfect!agr.p!agr.n;
<R.Cond,Neg> => negativePastAux agr.p agr.n++vp.converb.perfective
};
Simul => case <temp.t,pol.p> of {
<R.Pres,Pos> => vp.converb.imperfective++presentAux agr.p agr.n;
<R.Pres,Neg> => negativePresentAux agr.p agr.n++vp.converb.imperfective;
<R.Past,Pos> => vp.past!agr.p!agr.n;
<R.Past,Neg> => "չ"++BIND++vp.past!agr.p!agr.n;
<R.Fut,Pos> => vp.conditional!Non_Past!agr.p!agr.n;
<R.Fut,Neg> => negativePresentAux agr.p agr.n++vp.converb.futCon1;
<R.Cond,Pos> => vp.conditional!Perfect!agr.p!agr.n;
<R.Cond,Neg> => "չ"++BIND++vp.conditional!Perfect!agr.p!agr.n
}
}} ;
BaseVPS x y = {s1=x.s;s2=y.s} ;
ConsVPS x xs = {s1=x.s;s2=\\a=>xs.s1!a++","++xs.s2!a} ;
ConjVPS c xs = {s=\\a=>xs.s1!a++c.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++BIND++"՞"} ;
QuestVPS ip vps = {s=ip.s++vps.s!{n=Sg;p=P3}++BIND++"՞"} ;
RelVPS rp vps = {s=rp.s++vps.s!{n=Sg;p=P3}} ;
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=\\_,_,_=>passivePart slash;isPre=True} ;
PastPartAgentAP slash np = {s=\\_,_,_=>agentAdv np++passivePart slash;isPre=True} ;
PassVPSlash slash = lin VP {
s=passivePart slash++copulaVerb.s;
conditional=\\a,p,n=>passivePart slash++copulaVerb.conditional!a!p!n;
converb={imperfective=passivePart slash++copulaVerb.converb.imperfective;
futCon1=passivePart slash++copulaVerb.converb.futCon1;
futCon2=passivePart slash++copulaVerb.converb.futCon2;
negative=passivePart slash++copulaVerb.converb.negative;
perfective=passivePart slash++copulaVerb.converb.perfective;
simultaneous=passivePart slash++copulaVerb.converb.simultaneous};
imperative=\\n=>passivePart slash++copulaVerb.imperative!n;
passive=passivePart slash++copulaVerb.passive;
past=\\p,n=>passivePart slash++copulaVerb.past!p!n;
participle=\\p=>passivePart slash++copulaVerb.participle!p;
subjunctive=\\a,p,n=>passivePart slash++copulaVerb.subjunctive!a!p!n
} ;
PassAgentVPSlash slash np = extPrependVP (agentAdv np) (PassVPSlash slash) ;
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=\\n=>xs.s1!n++","++xs.s2!n} ;
ConjImp c xs = {s=\\n=>xs.s1!n++c.s++xs.s2!n} ;
TPastSimple = {s=[];t=R.Past} ;
}
+4 -14
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 Prelude, ResHye in {
oper
bareCl : Str -> Cl = \s -> lin Cl {
s=s; negative=table {_ => "չ" ++ s}; anterior=\\_=>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 ++ BIND ++ "՞" ++ "կա"} ;
ExistNPAdv np adv = bareCl (adv.s ++ np.s ! Nom ++ "կա") ;
ExistIPAdv ip adv = {s=\\_,_,_=>adv.s ++ ip.s ++ BIND ++ "՞" ++ "կա"} ;
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 -2
View File
@@ -2,10 +2,9 @@
concrete LangHye of Lang = concrete LangHye of Lang =
GrammarHye, GrammarHye,
LexiconHye LexiconHye
,ConstructionHye
,DocumentationHye --# notpresent ,DocumentationHye --# notpresent
** { ** {
flags startcat = Phr ; flags startcat = Phr ;
} }
+1 -4
View File
@@ -1,5 +1,2 @@
concrete LexiconHye of Lexicon = CatHye ** open ParadigmsHye in { concrete LexiconHye of Lexicon = CatHye ** open ParadigmsHye in {
lin apple_N = mkN001 "խնձոր" ; }
lin man_N = mkN047 "տղամարդ" ;
lin woman_N = mkN034 "կին" ;
}
+1412 -1397
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 -97
View File
@@ -1,98 +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; isArt = True} ;
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 = case <quant.isArt,num.isCard> of {
<True,True> => num.s;
_ => quant.s ! num.n ++ num.s
};
n = num.n; sp=quant.sp
} ;
lin DetQuantOrd quant num ord = {
s = case <quant.isArt,num.isCard> of {
<True,True> => num.s ++ ord.s;
_ => quant.s ! num.n ++ num.s ++ ord.s
};
n = num.n; sp = quant.sp
} ;
lin IndefArt = {s = table {Sg => "մի"; Pl => []}; sp = Indef; isArt = True} ;
lin NumPl = {s = []; n = Pl; isCard = False} ;
lin NumSg = {s = []; n = Sg; isCard = False} ;
lin NumCard card = {s = card.s; n = Sg; isCard = True} ;
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 = Def; isArt = False} ;
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; isArt=False} ; 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 ! Sg; Neg => "մի" ++ imp.s ! Sg}} ;
UttImpPl pol imp = {s = case pol.p of {Pos => imp.s ! Pl; Neg => "մի" ++ imp.s ! Pl}} ;
UttImpPol pol imp = {s = case pol.p of {Pos => imp.s ! Pl; Neg => "մի" ++ imp.s ! Pl}} ;
VocNP np = {s = np.s ! Nom} ;
PConjConj conj = conj ;
NoPConj = {s = []} ; NoPConj = {s = []} ;
-59
View File
@@ -1,59 +0,0 @@
concrete QuestionHye of Question = CatHye ** open Prelude, ResHye in {
lincat QVP = {s : Str} ;
oper
markFinal : Str -> Str = \s -> s ++ BIND ++ "՞" ;
clForm : Cl -> Tense -> Anteriority -> Polarity -> Str = \cl,t,a,p ->
case a of {
Anter => cl.anterior ! t ! p;
Simul => case p of {
Neg => cl.negative ! t;
Pos => case t of {
Pres => cl.s;
Past => cl.past ! P3 ! Sg;
Fut => cl.conditional ! Non_Past ! Sg;
Cond => cl.conditional ! Perfect ! Sg
}
}
} ;
vpForm : VP -> Tense -> Anteriority -> Polarity -> Str = \vp,t,a,p ->
case a of {
Anter => case <t,p> of {
<Pres,Pos> => vp.converb.perfective ++ presentAux P3 Sg;
<Pres,Neg> => negativePresentAux P3 Sg ++ vp.converb.perfective;
<Past,Pos> => vp.converb.perfective ++ pastAux P3 Sg;
<Past,Neg> => negativePastAux P3 Sg ++ vp.converb.perfective;
<Fut,Pos> => vp.converb.perfective ++ copulaVerb.conditional ! Non_Past ! P3 ! Sg;
<Fut,Neg> => negativePresentAux P3 Sg ++ vp.converb.perfective ++ copulaVerb.converb.futCon1;
<Cond,Pos> => vp.converb.perfective ++ copulaVerb.conditional ! Perfect ! P3 ! Sg;
<Cond,Neg> => negativePastAux P3 Sg ++ vp.converb.perfective
};
Simul => case <t,p> of {
<Pres,Pos> => vp.converb.imperfective ++ presentAux P3 Sg;
<Pres,Neg> => negativePresentAux P3 Sg ++ vp.converb.imperfective;
<Past,Pos> => vp.past ! P3 ! Sg;
<Past,Neg> => "չ" ++ BIND ++ vp.past ! P3 ! Sg;
<Fut,Pos> => vp.conditional ! Non_Past ! P3 ! Sg;
<Fut,Neg> => negativePresentAux P3 Sg ++ vp.converb.futCon1;
<Cond,Pos> => vp.conditional ! Perfect ! P3 ! Sg;
<Cond,Neg> => "չ" ++ BIND ++ vp.conditional ! Perfect ! P3 ! Sg
}
} ;
lin
QuestCl cl = {s = \\t,a,p => markFinal (clForm cl t a p)} ;
QuestVP ip vp = {s = \\t,a,p => ip.s ++ vpForm vp t a p} ;
QuestSlash ip slash = {s = \\_,_,_ => ip.s ++ slash.s} ;
QuestIAdv adv cl = {s = \\t,a,p => adv.s ++ clForm cl t a p} ;
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 -100
View File
@@ -1,85 +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; passivePart: 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 presentAux : Person -> Number -> Str = \p,n -> case <p,n> of {
<P1,Sg> => "եմ"; <P2,Sg> => "ես"; <P3,Sg> => "է";
<P1,Pl> => "ենք"; <P2,Pl> => "եք"; <P3,Pl> => "են"
} ;
oper negativePresentAux : Person -> Number -> Str = \p,n -> case <p,n> of {
<P1,Sg> => "չեմ"; <P2,Sg> => "չես"; <P3,Sg> => "չի";
<P1,Pl> => "չենք"; <P2,Pl> => "չեք"; <P3,Pl> => "չեն"
} ;
oper pastAux : Person -> Number -> Str = \p,n -> case <p,n> of {
<P1,Sg> => "էի"; <P2,Sg> => "էիր"; <P3,Sg> => "էր";
<P1,Pl> => "էինք"; <P2,Pl> => "էիք"; <P3,Pl> => "էին"
} ;
oper negativePastAux : Person -> Number -> Str = \p,n -> case <p,n> of {
<P1,Sg> => "չէի"; <P2,Sg> => "չէիր"; <P3,Sg> => "չէր";
<P1,Pl> => "չէինք"; <P2,Pl> => "չէիք"; <P3,Pl> => "չէին"
} ;
oper copulaVerb : Verb = {
s = "լինել";
causative = "լինել";
conditional = table {
Perfect => table {
P1 => table {Sg => "կլինեի"; Pl => "կլինեինք"};
P2 => table {Sg => "կլինեիր"; Pl => "կլինեիք"};
P3 => table {Sg => "կլիներ"; Pl => "կլինեին"}
};
Non_Past => table {
P1 => table {Sg => "կլինեմ"; Pl => "կլինենք"};
P2 => table {Sg => "կլինես"; Pl => "կլինեք"};
P3 => table {Sg => "կլինի"; Pl => "կլինեն"}
}
};
converb = {
imperfective = [];
futCon1 = "լինելու";
futCon2 = "լինելիք";
negative = "լինի";
perfective = "եղել";
simultaneous = "լինելիս"
};
imperative = table {Sg => "եղի՛ր"; Pl => "եղե՛ք"};
passive = "լինել";
passivePart = "եղած";
past = table {
P1 => table {Sg => "էի"; Pl => "էինք"};
P2 => table {Sg => "էիր"; Pl => "էիք"};
P3 => table {Sg => "էր"; Pl => "էին"}
};
participle = table {Resultative => "եղած"; Subject => "լինող"};
subjunctive = table {
Perfect => table {
P1 => table {Sg => "լինեի"; Pl => "լինեինք"};
P2 => table {Sg => "լինեիր"; Pl => "լինեիք"};
P3 => table {Sg => "լիներ"; Pl => "լինեին"}
};
Non_Past => table {
P1 => table {Sg => "լինեմ"; Pl => "լինենք"};
P2 => table {Sg => "լինես"; Pl => "լինեք"};
P3 => table {Sg => "լինի"; Pl => "լինեն"}
}
}
} ;
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; passivePart=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 ;
@@ -109,24 +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 ;
passivePart = case f23 of { Past = table {
stem + "ել" => stem + "ած";
stem + "ալ" => stem + "ացած";
_ => f23
} ;
past = table {
P1 => table { P1 => table {
Sg => f24 ; Sg => f24 ;
Pl => f25 Pl => f25
@@ -140,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 ;
@@ -176,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 {
@@ -343,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} ;
} }
-90
View File
@@ -1,90 +0,0 @@
concrete SentenceHye of Sentence = CatHye ** open Prelude,ResHye in {
lin PredVP np vp = {s = np.s ! Nom ++ vp.converb.imperfective ++
presentAux np.a.p np.a.n;
negative = table {
Pres => np.s ! Nom ++ negativePresentAux np.a.p np.a.n ++ vp.converb.imperfective;
Past => np.s ! Nom ++ "չ" ++ BIND ++ vp.past ! np.a.p ! np.a.n;
Fut => np.s ! Nom ++ negativePresentAux np.a.p np.a.n ++ vp.converb.futCon1;
Cond => np.s ! Nom ++ "չ" ++ BIND ++ vp.conditional ! Non_Past ! np.a.p ! np.a.n
};
anterior = table {
Pres => table {
Pos => np.s ! Nom ++ vp.converb.perfective ++ presentAux np.a.p np.a.n;
Neg => np.s ! Nom ++ negativePresentAux np.a.p np.a.n ++ vp.converb.perfective
};
Past => table {
Pos => np.s ! Nom ++ vp.converb.perfective ++ pastAux np.a.p np.a.n;
Neg => np.s ! Nom ++ negativePastAux np.a.p np.a.n ++ vp.converb.perfective
};
Fut => table {
Pos => np.s ! Nom ++ vp.converb.perfective ++ copulaVerb.conditional ! Non_Past ! np.a.p ! np.a.n;
Neg => np.s ! Nom ++ negativePresentAux np.a.p np.a.n ++ vp.converb.perfective ++ copulaVerb.converb.futCon1
};
Cond => table {
Pos => np.s ! Nom ++ vp.converb.perfective ++ copulaVerb.conditional ! Perfect ! np.a.p ! np.a.n;
Neg => np.s ! Nom ++ negativePastAux np.a.p np.a.n ++ vp.converb.perfective
}
};
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.converb.imperfective ++ presentAux P3 Sg;
negative=table {
Pres => sc.s ++ negativePresentAux P3 Sg ++ vp.converb.imperfective;
Past => sc.s ++ "չ" ++ BIND ++ vp.past ! P3 ! Sg;
Fut => sc.s ++ negativePresentAux P3 Sg ++ vp.converb.futCon1;
Cond => sc.s ++ "չ" ++ BIND ++ vp.conditional ! Non_Past ! P3 ! Sg
};
anterior=table {
Pres=>table {Pos=>sc.s++vp.converb.perfective++presentAux P3 Sg;
Neg=>sc.s++negativePresentAux P3 Sg++vp.converb.perfective};
Past=>table {Pos=>sc.s++vp.converb.perfective++pastAux P3 Sg;
Neg=>sc.s++negativePastAux P3 Sg++vp.converb.perfective};
Fut=>table {Pos=>sc.s++vp.converb.perfective++copulaVerb.conditional!Non_Past!P3!Sg;
Neg=>sc.s++negativePresentAux P3 Sg++vp.converb.perfective++copulaVerb.converb.futCon1};
Cond=>table {Pos=>sc.s++vp.converb.perfective++copulaVerb.conditional!Perfect!P3!Sg;
Neg=>sc.s++negativePastAux P3 Sg++vp.converb.perfective}
};
conditional=\\a,_ => sc.s ++ vp.conditional ! a ! P3 ! Sg;
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=\\_,_ => sc.s ++ vp.past ! P3 ! Sg;
participle=\\p => sc.s ++ vp.participle ! p;
subjunctive=\\a,_ => sc.s ++ vp.subjunctive ! a ! P3 ! Sg} ;
lin UseCl temp pol cl = {s = case temp.a of {
Anter => cl.anterior ! temp.t ! pol.p;
Simul => case pol.p of {
Neg => cl.negative ! temp.t;
Pos => case temp.t of {
Pres => cl.s;
Past => cl.past ! P3 ! Sg;
Fut => cl.conditional ! Non_Past ! Sg;
Cond => cl.conditional ! Perfect ! Sg
}
}
}} ;
lin UseQCl temp pol qcl = {s = qcl.s ! temp.t ! temp.a ! pol.p} ;
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} ;
lin AdvImp adv imp = {s = \\n => adv.s ++ imp.s ! n} ;
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="ոչ"} ;
}
-118
View File
@@ -1,118 +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
} ;
appendVerb : Verb -> Str -> Verb = \v,x -> {
s=v.s ++ x; causative=v.causative ++ 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;
passivePart=v.passivePart ++ 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
} ;
prependVerb : Str -> Verb -> Verb = \x,v -> {
s=x ++ v.s; causative=x ++ v.causative;
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;
passivePart=x ++ v.passivePart;
past=\\p,n => x ++ v.past ! p ! n;
participle=\\p => x ++ v.participle ! p;
subjunctive=\\a,p,n => x ++ v.subjunctive ! a ! p ! n
} ;
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 ((prependVerb (compl v.c2 np) v) ** {
c2 = v.c3
}) ;
lin Slash3V3 v np = lin VPSlash ((prependVerb (compl v.c3 np) v) ** {
c2 = v.c2
}) ;
lin SlashV2S v s = lin VPSlash ((appendVerb v s.s) ** {c2=v.c2}) ;
lin SlashV2Q v qs = lin VPSlash ((appendVerb v qs.s) ** {c2=v.c2}) ;
lin SlashV2A v ap = lin VPSlash ((appendVerb v (ap.s ! Indef ! Nom ! Sg)) ** {
c2=v.c2
}) ;
lin UseComp comp = prependVP comp.s (toVP copulaVerb) ;
lin UseCopula = toVP copulaVerb ;
lin ExtAdvVP vp adv = appendVP vp ("," ++ adv.s) ;
lin AdVVP adv vp = prependVP adv.s vp ;
lin AdvVPSlash vp adv = lin VPSlash ((appendVerb vp adv.s) ** {c2=vp.c2}) ;
lin AdVVPSlash adv vp = lin VPSlash ((prependVerb adv.s vp) ** {c2=vp.c2}) ;
lin VPSlashPrep vp prep = lin VPSlash
(vp ** {causative=vp.s;passivePart=vp.participle!Resultative;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} ;
}
+2 -2
View File
@@ -2,5 +2,5 @@
concrete AllEus of AllEusAbs = concrete AllEus of AllEusAbs =
LangEus, LangEus,
ExtendEus ExtraEus
** open ExtraEus in {} ; ** {} ;
+1 -1
View File
@@ -2,5 +2,5 @@
abstract AllEusAbs = abstract AllEusAbs =
Lang, Lang,
Extend ExtraEusAbs
** {} ; ** {} ;
+5 -7
View File
@@ -104,18 +104,16 @@ concrete CatEus of Cat = CommonX ** open ResEus, Prelude in {
-- additional lexicon modules. -- additional lexicon modules.
V, V,
V2,
V3,
VV, -- verb-phrase-complement verb e.g. "want" VV, -- verb-phrase-complement verb e.g. "want"
VS, -- sentence-complement verb e.g. "claim" VS, -- sentence-complement verb e.g. "claim"
VQ, -- question-complement verb e.g. "wonder" VQ, -- question-complement verb e.g. "wonder"
VA = ResEus.Verb ; -- adjective-complement verb, e.g. "look" VA, -- adjective-complement verb e.g. "look"
V2,
V2V, -- verb with NP and V complement e.g. "cause" V2V, -- verb with NP and V complement e.g. "cause"
V2S, -- verb with NP and S complement e.g. "tell" V2S, -- verb with NP and S complement e.g. "tell"
V2Q, -- verb with NP and Q complement e.g. "ask" V2Q, -- verb with NP and Q complement e.g. "ask"
V2A = ResEus.Verb2 ; -- verb with NP and AP complement e.g. "paint" V2A = ResEus.Verb ; -- verb with NP and AP complement e.g. "paint"
V3 = ResEus.Verb3 ;
A = ResEus.Adjective ; A = ResEus.Adjective ;
A2 = ResEus.Adjective2 ; A2 = ResEus.Adjective2 ;
+1 -59
View File
@@ -1,5 +1,4 @@
concrete ConstructionEus of Construction = CatEus ** concrete ConstructionEus of Construction = CatEus ** open ParadigmsEus in {
open Prelude, ResEus, ParadigmsEus, (G=GrammarEus) in {
lincat lincat
Timeunit = N ; Timeunit = N ;
@@ -7,63 +6,6 @@ lincat
Monthday = NP ; Monthday = NP ;
Month = N ; Month = N ;
Year = NP ; Year = NP ;
lin
weekdayN w = w ;
monthN m = m ;
monday_Weekday = mkN "astelehen" ;
tuesday_Weekday = mkN "astearte" ;
wednesday_Weekday = mkN "asteazken" ;
thursday_Weekday = mkN "ostegun" ;
friday_Weekday = mkN "ostiral" ;
saturday_Weekday = mkN "larunbat" ;
sunday_Weekday = mkN "igande" ;
january_Month = mkN "urtarril" ;
february_Month = mkN "otsail" ;
march_Month = mkN "martxo" ;
april_Month = mkN "apiril" ;
may_Month = mkN "maiatz" ;
june_Month = mkN "ekain" ;
july_Month = mkN "uztail" ;
august_Month = mkN "abuztu" ;
september_Month = mkN "irail" ;
october_Month = mkN "urri" ;
november_Month = mkN "azaro" ;
december_Month = mkN "abendu" ;
weekdayPunctualAdv w = {s = w.s ++ artDef ! Sg ! Ine ! w.ph} ;
weekdayHabitualAdv w = {s = w.s ++ artDef ! Pl ! Ine ! w.ph} ;
weekdayNextAdv w = {s = "hurrengo" ++ w.s ++ artDef ! Sg ! Abs ! w.ph} ;
weekdayLastAdv w = {s = "joan den" ++ w.s ++ artDef ! Sg ! Abs ! w.ph} ;
monthAdv m = {s = m.s ++ artDef ! Sg ! Ine ! m.ph} ;
yearAdv y = {s = glue y.stem "an"} ;
intYear i = lin Year (invariantNP i.s) ;
intMonthday i = lin Monthday (invariantNP i.s) ;
ready_VP = G.UseComp (G.CompAP (G.PositA (mkA "prest"))) ;
has_age_VP card =
(useV {prc = \\_ => [] ; nstem = "izate" ; val = Du Ukan}) ** {
dobj = {s = \\_ => card.s ++ "urte" ; agr = Hauek ; isDef = True}
} ;
cup_of_CN np = G.PartNP (useN (mkNoun "kikara")) np ;
n_units_AP card unit a = {
s = \\_ => card.s ++ linCNIndef unit ++ a.s ! AF Posit ;
ph = a.ph ; typ = Bare
} ;
n_units_of_NP card unit np = lin NP (np ** {
s = \\c => card.s ++ linCNIndef unit ++ np.s ! c ;
stem = card.s ++ linCNIndef unit ++ np.stem ; agr = Hauek
}) ;
oper
invariantNP : Str -> NP = \s -> lin NP {
s = \\_ => s ; stem = s ; agr = Hau ; anim = Inan ; isDef = True
} ;
{- {-
lin lin
+3 -156
View File
@@ -1,171 +1,18 @@
--# -path=.:../common:../abstract --# -path=.:../common:../abstract
concrete ExtendEus of Extend = concrete ExtendEus of Extend =
CatEus ** ExtendFunctor - [ CatEus ** ExtendFunctor - [GenNP,ICompAP]
VPS, ListVPS, BaseVPS, ConsVPS, ConjVPS, MkVPS, PredVPS,
VPI, ListVPI, BaseVPI, ConsVPI, ConjVPI, MkVPI, ComplVPIVV,
ListComp, BaseComp, ConsComp, ConjComp,
ListImp, BaseImp, ConsImp, ConjImp,
GenNP, GenModNP, ICompAP,
PresPartAP, PastPartAP, PastPartAgentAP,
PassVPSlash, PassAgentVPSlash, ProgrVPSlash,
ReflPron, ReflPoss, AdvRNP, AdvRVP, AdvRAP, PossPronRNP,
CompoundN, CompoundAP, GerundCN, GerundNP, GerundAdv,
ByVP, InOrderToVP, ApposNP, PositAdVAdj,
UseDAP, UseDAPMasc, UseDAPFem, CompVP, ExistIPQS
]
with (Grammar=GrammarEus) with (Grammar=GrammarEus)
** open Prelude, ResEus, AditzTrinkoak, Coordination, (G=GrammarEus) in { ** open Prelude, ResEus in {
lincat
VPS = {s : Agr => Str ; sc : Case} ;
[VPS] = {s1,s2 : Agr => Str ; sc : Case} ;
VPI = {s : Agr => Str} ;
[VPI] = {s1,s2 : Agr => Str} ;
[Comp] = {s1,s2 : Agr => Str ; copula : SyntVerb1} ;
[Imp] = {s1,s2 : Str} ;
lin lin
MkVPS temp pol vp = {
s = \\agr => linS ((mkClause False
(empty_NP ** {agr = agr}) vp).s
! temp.t ! temp.a ! pol.p ! Stat) ;
sc = subjCase vp.val
} ;
BaseVPS x y = {s1 = x.s ; s2 = y.s ; sc = x.sc} ;
ConsVPS x xs = {
s1 = \\agr => x.s ! agr ++ SOFT_BIND ++ "," ++ xs.s1 ! agr ;
s2 = xs.s2 ; sc = x.sc
} ;
ConjVPS conj xs = {
s = \\agr => conj.s1 ++ xs.s1 ! agr ++ conj.s2 ++ xs.s2 ! agr ;
sc = xs.sc
} ;
PredVPS np vps = sentenceFromStr (np.s ! vps.sc ++ vps.s ! np.agr) ;
MkVPI vp = {s = linVPPrc vp} ;
BaseVPI x y = {s1 = x.s ; s2 = y.s} ;
ConsVPI x xs = {
s1 = \\agr => x.s ! agr ++ SOFT_BIND ++ "," ++ xs.s1 ! agr ;
s2 = xs.s2
} ;
ConjVPI conj xs = {
s = \\agr => conj.s1 ++ xs.s1 ! agr ++ conj.s2 ++ xs.s2 ! agr
} ;
ComplVPIVV vv vpi = insertComp vpi.s (useV vv) ;
BaseComp x y = {s1 = x.s ; s2 = y.s ; copula = x.copula} ;
ConsComp x xs = {
s1 = \\agr => x.s ! agr ++ SOFT_BIND ++ "," ++ xs.s1 ! agr ;
s2 = xs.s2 ; copula = xs.copula
} ;
ConjComp conj xs = {
s = \\agr => conj.s1 ++ xs.s1 ! agr ++ conj.s2 ++ xs.s2 ! agr ;
copula = xs.copula
} ;
BaseImp x y = {s1 = x.s ; s2 = y.s} ;
ConsImp x xs = {s1 = x.s ++ SOFT_BIND ++ "," ++ xs.s1 ; s2 = xs.s2} ;
ConjImp conj xs = {s = conj.s1 ++ xs.s1 ++ conj.s2 ++ xs.s2} ;
GenNP np = -- NP -> Quant ; -- this man's GenNP np = -- NP -> Quant ; -- this man's
{ s = artDef ; { s = artDef ;
indep, isDef = True ; indep, isDef = True ;
pref = np.s ! Gen } ; pref = np.s ! Gen } ;
GenModNP num np cn = G.DetCN (G.DetQuant G.DefArt num) (G.PossNP cn np) ;
ICompAP ap = -- AP -> IComp ; -- "how old" ICompAP ap = -- AP -> IComp ; -- "how old"
{ s = "nola" ++ ap.s ! Hau } ; --TODO agreement -- change type of IComp { s = "nola" ++ ap.s ! Hau } ; --TODO agreement -- change type of IComp
PresPartAP vp = relativeAP vp ;
PastPartAP vps = relativeAP (passVPSlash vps) ;
PastPartAgentAP vps agent = relativeAP (passAgentVPSlash vps agent) ;
PassVPSlash = passVPSlash ;
PassAgentVPSlash = passAgentVPSlash ;
ProgrVPSlash vps = vps ** {prc = \\_ => vps.prc ! Pres ++ "ari"} ;
ReflPron = reflexiveNP ;
ReflPoss num cn = lin RNP (G.DetCN (reflexiveDet num) cn) ;
AdvRNP np prep rnp = lin RNP (np ** {
s = \\c => np.s ! c ++ applyPost prep rnp ;
stem = np.stem ++ applyPost prep rnp
}) ;
AdvRVP vp prep rnp = insertAdv (ss (applyPost prep rnp)) vp ;
AdvRAP ap prep rnp = ap ** {
s = \\agr => ap.s ! agr ++ applyPost prep rnp
} ;
PossPronRNP pron num cn rnp =
G.DetCN (G.DetQuant (G.PossPron pron) num)
(cn ** {s = \\agr => rnp.s ! Gen ++ cn.s ! agr}) ;
CompoundN modifier head = head ** {s = modifier.s ++ head.s} ;
CompoundAP noun adjective = adjective ** {
s = \\agr => noun.s ++ adjective.s ! AF Posit ;
typ = Bare
} ;
GerundCN vp = {
s = \\_ => gerundStr vp ; comp = [] ; ph = FinalVow ; anim = Inan ;
heavyMod = \\_ => []
} ;
GerundNP vp = G.MassNP (GerundCN vp) ;
GerundAdv vp = {s = (GerundNP vp).s ! Gen ++ "bidez"} ;
ByVP = GerundAdv ;
InOrderToVP vp = {s = vpObjects vp ++ glue vp.nstem "ra"} ;
ApposNP np app = np ** {
s = \\c => np.s ! c ++ SOFT_BIND ++ "," ++ app.s ! Abs ++ SOFT_BIND ++ "," ;
stem = np.stem ++ SOFT_BIND ++ "," ++ app.stem ++ SOFT_BIND ++ ","
} ;
PositAdVAdj a = {s = a.s ! AAdv} ;
UseDAP dap = G.DetNP dap ;
UseDAPMasc = UseDAP ;
UseDAPFem = UseDAP ;
CompVP ant pol vp = {
s = \\agr => case pol.p of {
Pos => vpObjects vp ++ vp.prc ! Past ;
Neg => vpObjects vp ++ "ez" ++ vp.prc ! Past
} ;
copula = Izan
} ;
ExistIPQS temp pol ip =
G.UseQCl temp pol (G.QuestCl (G.ExistNP (lin NP ip))) ;
oper
sentenceFromStr : Str -> {s : Sentence} = \str -> {
s = {beforeAux = str ; aux = mkVForms [] ; afterAux = []}
} ;
passVPSlash : ResEus.VPSlash -> ResEus.VerbPhrase = \vps -> vps ** {
val = Da Izan ;
dobj = {s = \\_ => [] ; agr = Hau ; isDef = True}
} ;
passAgentVPSlash : ResEus.VPSlash -> NounPhrase -> ResEus.VerbPhrase = \vps,agent ->
insertAdv (ss (agent.s ! Ins)) (passVPSlash vps) ;
relativeAP : ResEus.VerbPhrase -> AdjPhrase = \vp ->
let rc = rclFromVP (BIND ++ "n") vp
in {s = \\agr => rc.s ! Pres ! Simul ! Pos ! agr ;
ph = FinalCons ; typ = Ko} ;
reflexiveDet : Num -> Determiner = \num -> {
s = artDef ! num.n ; indep = True ; nbr = num.n ;
pref = "bere" ; isDef = True
} ;
reflexiveNP : RNP = lin RNP
(G.DetCN (reflexiveDet G.NumSg) (useN (mkNoun "buru"))) ;
vpObjects : ResEus.VerbPhrase -> Str = \vp ->
vp.adv ++ vp.iobj.s ++ vp.dobj.s ! Pos ++ vp.comp ! Hau ;
gerundStr : ResEus.VerbPhrase -> Str = \vp -> vpObjects vp ++ vp.nstem ;
} ; } ;
-1
View File
@@ -9,7 +9,6 @@ concrete GrammarEus of Grammar =
RelativeEus, RelativeEus,
ConjunctionEus, ConjunctionEus,
PhraseEus, PhraseEus,
NamesEus,
TextX, TextX,
StructuralEus, StructuralEus,
IdiomEus, IdiomEus,

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