1
0
forked from GitHub/gf-core
Files
gf-core/lib/src/sindhi/MorphoSnd.gf
2012-02-21 09:20:38 +00:00

394 lines
11 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
--# -path=.:../../prelude
--
----1 A Simple Sindhi Resource Morphology
----
---- by Jherna Devi, Shafqat Virk,2012
----
---- This resource morphology contains definitions needed in the resource
---- syntax. To build a lexicon, it is better to use $ParadigmsSnd$, which
---- gives a higher-level access to this module.
--
resource MorphoSnd = ResSnd ** open Prelude,Predef in {
flags optimize=all ;
coding = utf8;
----2 Nouns
oper
mkN : (x1,_,_,_,_,_,_,x8 : Str) -> Gender -> Noun =
\sd,so,sv,sa, pd,po,pv,pa, g -> {
s = table {
Sg => table {
Dir => sd ;
Obl => so ;
Voc => sv ;
Abl => sa
} ;
Pl => table {
Dir => pd ;
Obl => po ;
Voc => pv ;
Abl => pa
}
} ;
g = g
} ;
-- 1. msculine: chokro, kuto, hat
mkN01 : Str -> Noun ;
mkN01 chokro = let chokr = (tk 1 chokro)
in mkN (chokro) (chokr+"ی") (chokr+"ا") (chokr+"ا")
(chokr+"ا") (chokr+"ن") (chokr+"ا") (chokr+"ا")
Masc ;
-- 2. karkhano
mkN02 : Str -> Noun ;
mkN02 karkhano =let karkhan = (tk 1 karkhano)
in mkN (karkhano) (karkhan+"ی") (karkhan+"ا") (karkhano)
(karkhan+"ا") (karkhan+"ن") (karkhan+"و") (karkhan+"ا")
Fem ;
-- 3. gher, shehar
mkN03 : Str -> Noun ;
mkN03 gher = mkN (gher) (gher) (gher) (gher)
(gher) (gher+"ن") (gher+"و") (gher)
Masc ;
-- 4. paki, mez, gah
mkN04 : Str -> Noun ;
mkN04 paki = mkN (paki) (paki) (paki) (paki)
(paki) (paki+"ن") (paki) (paki)
Fem ;
-- 5. msculine: bar, hotel, pathar
mkN05 : Str -> Noun ;
mkN05 bar = mkN (bar) (bar) (bar) (bar)
(bar) (bar+"ن") (bar+"و") (bar)
Masc ;
-- 6. pe
mkN06 : Str -> Noun ;
mkN06 pe = mkN (pe) (pe) (pe) (pe)
(pe+"۶ر") (pe+"۶رن") (pe+"۶رو") (pe+"۶ر")
Masc ;
-- 7. Feminine : ma
mkN07 : Str -> Noun ;
mkN07 ma = mkN (ma) (ma) (ma) (ma)
(ma+"۶ر") (ma+"۶رن") (ma+"۶رو") (ma+"۶ر")
Fem ;
-- 8. msculine: topi, takre
mkN08 : Str -> Noun ;
mkN08 topi = mkN (topi) (topi) (topi) (topi)
(topi+"ون") (topi+"ن") (topi+"و") (topi+"ون")
Masc ;
-- 9. Feminine: bere, bili, kurse
mkN09 : Str -> Noun ;
mkN09 bili = mkN (bili) (bili) (bili) (bili)
(bili+"ون") (bili+"ن") (bili+"ن") (bili+"ون")
Fem ;
-- 10. msculine: bha
mkN010 : Str -> Noun ;
mkN010 bha = mkN (bha) (bha) (bha) (bha)
(bha+"ر") (bha+"رن") (bha+"رو") (bha+"ر")
Masc ;
-- 11. Feminine: bhen
mkN11 : Str -> Noun ;
mkN11 bhen = let bhe= (tk 1 bhen)
in mkN (bhen) (bhen) (bhen) (bhen)
(bhe+"نر") (bhe+"نرن") (bhen+"ون") (bhe+"نر")
Fem ;
--12. msculine: raja, darya
mkN12 : Str -> Noun ;
mkN12 raja = mkN (raja) (raja) (raja) (raja)
(raja) (raja+"۶ن") (raja+"۶و") (raja)
Masc ;
-- 13. msculine: fan, son, kher,
mkN13 : Str -> Noun ;
mkN13 son = mkN (son) (son) (son) (son)
(son) (son) (son) (son)
Masc ;
-- 14. Feminine: pen, samand
mkN14 : Str -> Noun ;
mkN14 pen = mkN (pen) (pen) (pen) (pen)
(pen) (pen) pen ""
Fem ;
----2 Determiners
IDeterminer = {s:Gender => Str ; n : Number};
makeDet : Str -> Str -> Str -> Str -> Number -> Determiner = \s1,s2,s3,s4,n -> {
s = table {
Sg => table {
Masc => s1 ;
Fem => s2
} ;
Pl => table {
Masc => s3 ;
Fem => s4
}
} ;
n = n
};
makeIDet : Str -> Str -> Number -> IDeterminer = \s1,s2,n -> {
s = table {
Masc => s1;
Fem => s2
};
n = n
};
makeIQuant : Str -> Str -> Str -> Str -> {s:Number => Gender => Str} = \s1,s2,s3,s4 -> {
s = table {
Sg => table {
Masc => s1 ;
Fem => s2
} ;
Pl => table {
Masc => s3 ;
Fem => s4
}
}
};
-- Proposition
makePrep : Str -> Preposition = \str -> {s = str } ** { lock_Prep = <>};
----2 Pronouns
--PronForm = {s:Pronoun => Str};
DemonPronForm = {s:DemPronForm => Str};
mkDemonPronForm : (x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,x16:Str) -> DemPronForm =
\y1,y2,y3,y4,y5,y6,y7,y8,y9,y10,y11,y12,y13,y14,y15,y16 -> {
s = table {
Sg => table {
Masc => table {
Dir => y1 ;
Obl => y2 ;
Voc => y3 ;
Abl => y4
};
Fem => table {
Dir => y5 ;
Obl => y6 ;
Voc => y7 ;
Abl => y8
}
};
Pl => table {
Masc => table {
Dir => y9 ;
Obl => y10 ;
Voc => y11 ;
Abl => y12
};
Fem => table {
Dir => y13 ;
Obl => y14 ;
Voc => y15 ;
Abl => y16
}
}
}
};
makeDemonPronForm : Str -> Str -> Str -> DemPronForm ;
makeDemonPronForm yeh is inn = mkDemonPronForm yeh is "" yeh is "" yeh inn "" yeh inn "" "" "" "" "";
-- makePossPronForm myra myry hmara hmary = mkDemonPronForm myra myra myra myry myry myry hmara hmara hmara hmary hmary hmary;
mkPron : (x1,x2,x3,x4:Str) -> {s:Case => Str} =
\y1,y2,y3,y4 -> { s =
table {
Dir => y1;
Obl => y2;
Voc => y3;
Abl => y4
}
};
------- PossPronForm yet to be implemented
-- IntPronForm = {s:InterrPronForm => Str};
IntPronForm = {s: Case => Str};
mkIntPronForm : (x1,x2,x3,x4:Str) -> IntPronForm =
\y1,y2,y3,y4 -> {
s =
table {
Dir => y1;
Obl => y2;
Voc => y3;
Abl => y4
}
};
----2 Adjectives
-- defined in ResSnd
------------------------------------------------------------------
----Verbs
------------------------------------------------------------------
--1. Basic stem form, direct & indirect causatives exists
-- v1 nechna nechaana nechwana
mkVerb : (_: Str) -> Verb = \inf ->
let root = (tk 1 inf) ;
inf = inf ;
root2 = (tk 2 inf) ;
in {
s = table {
Root => root ;
Inf => inf ;
Inf_Fem => ((tk 1 root) + "ی") ;
Inf_Obl => (tk 1 root) ;
Ablative => ((tk 1 root) + "وN") ;
VF tense person number gender => (mkCmnVF root root2 tense person number gender).s
}
} ;
mkIrrgVerb : (inf,root: Str) -> Verb = \inf,root ->
let root = root ;
in {
s = table {
Root => root ;
Inf => inf ;
Inf_Fem => ((tk 1 inf) + "ی") ;
Inf_Obl => (tk 1 inf) ;
Ablative => ((tk 1 inf) + "وN") ;
VF tense person number gender => (mkCmnVF (root+"ی") (root+"ی") tense person number gender).s
}
} ;
mkCmnVF : Str -> Str -> VTense -> PPerson -> Number -> Gender -> {s:Str}= \root,root2,t,p,n,g ->
{s = case (last root) of {
("ا"|"۽"|"ی") => (mkCmnVF1 root t p n g).s ;
_ => (mkCmnVF1 root t p n g).s
}
};
mkCmnVF1 : Str -> VTense -> PPerson -> Number -> Gender -> {s:Str}= \root,t,p,n,g ->
{s = let nadaa = root + "ندو" ; --root + variants{"ندا";"وندا"};
nadii = root + "ون" ; --root + variants{"ندی";"وندی"} ;
nade = root + "ندی" ; --root + variants{"ندی";"یندین"} ;
nadiiaaN = root + "ندو"; --root + variants{"ندیاN";"وندیاN"};
ndi = root + "ندی";
nda = root + "ندا" ;
ndywn = root + "ندیون" ;
ndyn = root + "ندین" ;
in
case <t,p,n,g> of {
<Subj,Pers1, Sg,_> => root + "ان" ;
<Subj,Pers1, Sg,_> => root + "ان" ;
<subj, Pers1, pl,Masc> => root + "ون" ;
<subj, Pers1, pl,Fem> => root + "ون" ;
<Subj,Pers2_Casual, Sg,_> => root +"ین";
<Subj,Pers2_Casual, Pl,_> => root + "و" ;
<Subj,Pers2_Respect, _, _> => root + "و" ;
<Subj,Pers3_Near, Sg,Masc> => root +"ی";
<Subj,Pers3_Near, sg,Fem> => root +"ی";
<Subj,Pers3_Near, pl,Masc> => root +"ن";
<Subj,Pers3_Near, pl,Fem> => root +"ن";
<Subj,Pers3_Distant,Sg,Masc> => root +"ی";
<Subj,Pers3_Distant,Sg,Fem> => root +"ی";
<Subj,Pers3_Distant,Pl,Masc> => root +"ن";
<Subj,Pers3_Distant,Pl,Fem> => root +"ن";
<Perf, Pers1,Sg,Masc> => root + "یل" ;
<Perf, Pers1,Sg,Fem> => root + "یل" ;
<Perf, Pers1,Pl,Masc> => root + "یل" ;
<Perf, Pers1,Pl,Fem> => root + "یل" ;
<Perf, Pers2_Casual,Sg,Masc> => root + "یل" ;
<Perf, Pers2_Casual,Sg,Fem> => root + "یل" ;
<Perf, Pers2_Casual,Pl,Masc> => root + "یل" ;
<Perf, Pers2_Casual,Pl,Fem> => root + "یل" ;
<Perf, Pers2_Respect,Sg,Masc> => root + "یل" ;
<Perf, Pers2_Respect,Sg,Fem> => root + "یل" ;
<Perf, Pers2_Respect,Pl,Masc> => root + "یل" ;
<Perf, Pers2_Respect,Pl,Fem> => root + "یل" ;
<Perf, _, Sg,Masc> => root + "یل" ;
<Perf, _, Sg,Fem> => root + "یل" ;
<Perf, _, Pl,Masc> => root + "یل" ;
<Perf, _, Pl,Fem> => root + "یل" ;
<Imperf, Pers1,Sg, Masc> => root + "ندو" ;
<Imperf, Pers1,Sg, Fem> => root + "ندی" ;
<Imperf, Pers1,Pl, Masc> => root + "ندا" ;
<Imperf, Pers1,Pl, Fem> => root + "ندیون" ;
<Imperf, Pers2_Casual, Sg, Masc> => root + "ندو" ;
<Imperf, Pers2_Casual, Sg, Fem> => root + "ندی" ;
<Imperf, Pers2_Casual, Pl, Masc> => root + "ندا" ;
<Imperf, Pers2_Casual, Pl, Fem> => root + "ندیون" ;
<Imperf, Pers2_Respect, Sg, Masc> => root + "ندا" ;
<Imperf, Pers2_Respect, Sg, Fem> => root + "ندیون" ;
<Imperf, Pers2_Respect, Pl, Masc> => root + "ندا" ;
<Imperf, Pers2_Respect, Pl, Fem> => root + "ندیون" ;
<Imperf, _, Sg, Masc> => root + "ندو" ;
<Imperf, _, Sg, Fem> => root + "ندی" ;
<Imperf, _, Pl, Masc> => root + "ندا" ;
<Imperf, _, Pl, Fem> => root + "ندیون"
}
} ;
mkCmnVF2 : Str -> VTense -> PPerson -> Number -> Gender -> {s:Str}= \inf,t,p,n,g ->
{s =
case <t,p,n,g> of {
<_, _, _,_> => inf
}
};
}