mirror of
https://github.com/GrammaticalFramework/gf-rgl.git
synced 2026-05-27 17:08:54 -06:00
@@ -12,9 +12,6 @@ oper ComparAdvAdjS : CAdv -> A -> S -> Adv = notYet "ComparAdvAdjS" ;
|
|||||||
oper ConjRS : Conj -> ListRS -> RS = notYet "ConjRS" ;
|
oper ConjRS : Conj -> ListRS -> RS = notYet "ConjRS" ;
|
||||||
oper ConsRS : RS -> ListRS -> ListRS = notYet "ConsRS" ;
|
oper ConsRS : RS -> ListRS -> ListRS = notYet "ConsRS" ;
|
||||||
oper DetNP : Det -> NP = notYet "DetNP" ;
|
oper DetNP : Det -> NP = notYet "DetNP" ;
|
||||||
oper EmbedQS : QS -> SC = notYet "EmbedQS" ;
|
|
||||||
oper EmbedS : S -> SC = notYet "EmbedS" ;
|
|
||||||
oper EmbedVP : VP -> SC = notYet "EmbedVP" ;
|
|
||||||
oper ExistIP : IP -> QCl = notYet "ExistIP" ;
|
oper ExistIP : IP -> QCl = notYet "ExistIP" ;
|
||||||
oper FunRP : Prep -> NP -> RP -> RP = notYet "FunRP" ;
|
oper FunRP : Prep -> NP -> RP -> RP = notYet "FunRP" ;
|
||||||
oper ImpPl1 : VP -> Utt = notYet "ImpPl1" ;
|
oper ImpPl1 : VP -> Utt = notYet "ImpPl1" ;
|
||||||
|
|||||||
@@ -80,6 +80,7 @@ resource ParadigmsAra = open
|
|||||||
mkN : N -> N -> N ; -- Compound noun with singular genitive attribute, but inflects in state.
|
mkN : N -> N -> N ; -- Compound noun with singular genitive attribute, but inflects in state.
|
||||||
mkN : Number -> N -> N -> N ; -- Compound noun with genitive attribute, but inflects in state. Attribute's number specified by 1st arg.
|
mkN : Number -> N -> N -> N ; -- Compound noun with genitive attribute, but inflects in state. Attribute's number specified by 1st arg.
|
||||||
mkN : N -> A -> N ; -- Force adjective modifier into the noun. Adjective inflects in state, case and number.
|
mkN : N -> A -> N ; -- Force adjective modifier into the noun. Adjective inflects in state, case and number.
|
||||||
|
mkN : Number -> N -> A -> N ; -- Force adjective modifier into the noun. Adjective inflects in state and case. Adjective's number specified by 1st arg.
|
||||||
mkN : N -> AP -> N ; -- Force AP modifier into the noun. AP inflects in state, case and number.
|
mkN : N -> AP -> N ; -- Force AP modifier into the noun. AP inflects in state, case and number.
|
||||||
--- mkN : (root,sgPatt : Str) -> Gender -> Species -> N -- sound feminine plural
|
--- mkN : (root,sgPatt : Str) -> Gender -> Species -> N -- sound feminine plural
|
||||||
--- = sdfN ;
|
--- = sdfN ;
|
||||||
@@ -104,6 +105,8 @@ resource ParadigmsAra = open
|
|||||||
sdmN : Str -> Str -> Gender -> Species -> N ;
|
sdmN : Str -> Str -> Gender -> Species -> N ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
--3 Proper names
|
--3 Proper names
|
||||||
|
|
||||||
mkPN = overload {
|
mkPN = overload {
|
||||||
@@ -366,6 +369,8 @@ resource ParadigmsAra = open
|
|||||||
= attrN ;
|
= attrN ;
|
||||||
mkN : N -> A -> N
|
mkN : N -> A -> N
|
||||||
= mkAN ;
|
= mkAN ;
|
||||||
|
mkN : Number -> N -> A -> N
|
||||||
|
= \num,n,a -> mkAPNumN n (A.PositA a) num ;
|
||||||
mkN : N -> AP -> N
|
mkN : N -> AP -> N
|
||||||
= mkAPN
|
= mkAPN
|
||||||
} ;
|
} ;
|
||||||
@@ -383,6 +388,11 @@ resource ParadigmsAra = open
|
|||||||
++ ap.s ! n.h ! n.g ! num ! s ! c
|
++ ap.s ! n.h ! n.g ! num ! s ! c
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
mkAPNumN : N -> AP -> Number -> N = \n,ap,forceNum -> n ** {
|
||||||
|
s2 = \\num,s,c => n.s2 ! num ! s ! c
|
||||||
|
++ ap.s ! Hum ! n.g ! forceNum ! s ! c
|
||||||
|
} ; -- Hum because we want to override the smartness in number agreement
|
||||||
|
|
||||||
dualN : N -> N = \n -> n ** {isDual=True} ;
|
dualN : N -> N = \n -> n ** {isDual=True} ;
|
||||||
|
|
||||||
proDrop : NP -> NP ; -- Force a NP to lose its string, only contributing with its agreement.
|
proDrop : NP -> NP ; -- Force a NP to lose its string, only contributing with its agreement.
|
||||||
@@ -543,11 +553,13 @@ resource ParadigmsAra = open
|
|||||||
};
|
};
|
||||||
|
|
||||||
sdfN =
|
sdfN =
|
||||||
\root,sg,gen,spec ->
|
\root,sg,gen,spec -> let {
|
||||||
let { kalimaStr = mkWord sg root;
|
kalimaStr = case root of {
|
||||||
|
x@? + y@? + "ي" => mkDefectiveAlifMaqsura (mkPat sg) (mkRoot3 root) ;
|
||||||
|
_ => mkWord sg root } ;
|
||||||
kalimaRaw : NTable = case gen of {
|
kalimaRaw : NTable = case gen of {
|
||||||
Fem => sndf kalimaStr ;
|
Fem => sndf kalimaStr ;
|
||||||
Masc => sgMsndf kalimaStr } ;
|
Masc => sgMsndf kalimaStr } ; -- TODO this isn't actually the case of gender, add an argument
|
||||||
kalima : NTable = \\n,d,c =>
|
kalima : NTable = \\n,d,c =>
|
||||||
rectifyHmz (kalimaRaw ! n ! d ! c)
|
rectifyHmz (kalimaRaw ! n ! d ! c)
|
||||||
} in mkFullN kalima gen spec;
|
} in mkFullN kalima gen spec;
|
||||||
|
|||||||
@@ -55,6 +55,13 @@ resource ResAra = PatternsAra ** open Prelude, Predef, OrthoAra, ParamX in {
|
|||||||
_ => error ("mkRoot2: too short root" ++ fcl)
|
_ => error ("mkRoot2: too short root" ++ fcl)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
mkPat : Str -> Pattern = \pat ->
|
||||||
|
case pat of {
|
||||||
|
w + "ف" + x + "ع" + y + "ل" + z
|
||||||
|
=> { h = w ; m1 = x; m2 = y; t = z} ;
|
||||||
|
w + "ف" + x + ("ع"|"ل") + y
|
||||||
|
=> { h = w ; m1 = x; m2 = ""; t = y}
|
||||||
|
} ;
|
||||||
--opers to interdigitize (make words out of roots and patterns:
|
--opers to interdigitize (make words out of roots and patterns:
|
||||||
|
|
||||||
oper
|
oper
|
||||||
@@ -65,6 +72,9 @@ resource ResAra = PatternsAra ** open Prelude, Predef, OrthoAra, ParamX in {
|
|||||||
mkDefective : Pattern -> Root3 -> Str = \p,fcl ->
|
mkDefective : Pattern -> Root3 -> Str = \p,fcl ->
|
||||||
p.h + fcl.f + p.m1 + fcl.c + p.t;
|
p.h + fcl.f + p.m1 + fcl.c + p.t;
|
||||||
|
|
||||||
|
mkDefectiveAlifMaqsura : Pattern -> Root3 -> Str = \p,fcl ->
|
||||||
|
p.h + fcl.f + p.m1 + fcl.c + p.t + "َى" ;
|
||||||
|
|
||||||
mkHollow : Pattern -> Root3 -> Str = \p,fcl ->
|
mkHollow : Pattern -> Root3 -> Str = \p,fcl ->
|
||||||
p.h + fcl.f + p.m1 + fcl.l + p.t;
|
p.h + fcl.f + p.m1 + fcl.l + p.t;
|
||||||
|
|
||||||
@@ -85,14 +95,13 @@ resource ResAra = PatternsAra ** open Prelude, Predef, OrthoAra, ParamX in {
|
|||||||
|
|
||||||
--takes a pattern string and root string and makes a word
|
--takes a pattern string and root string and makes a word
|
||||||
mkWord : Str -> Str -> Str =\pS, rS ->
|
mkWord : Str -> Str -> Str =\pS, rS ->
|
||||||
|
let pat = mkPat pS in
|
||||||
case pS of {
|
case pS of {
|
||||||
w + "ف" + x + "ع" + y + "ل" + z =>
|
w + "ف" + x + "ع" + y + "ل" + z =>
|
||||||
let pat = { h = w ; m1 = x; m2 = y; t = z} in
|
|
||||||
case rS of {
|
case rS of {
|
||||||
x@? + y@? + "ّ" => mkStrong pat (mkRoot3 (x+y+y)) ; -- In principle, shadda shouldn't be in the root, but if someone puts one, this should fix it. /IL
|
x@? + y@? + "ّ" => mkStrong pat (mkRoot3 (x+y+y)) ; -- In principle, shadda shouldn't be in the root when dealing with strong inflection, but if someone puts one, this should fix it. /IL
|
||||||
_ => mkStrong pat (mkRoot3 rS) } ;
|
_ => mkStrong pat (mkRoot3 rS) } ;
|
||||||
w + "ف" + x + "ع" + y =>
|
w + "ف" + x + "ع" + y =>
|
||||||
let pat = { h = w ; m1 = x; m2 = ""; t = y} in
|
|
||||||
case rS of {
|
case rS of {
|
||||||
x + "ّ" => mkBilit pat (mkRoot2 x) ; -- fc~
|
x + "ّ" => mkBilit pat (mkRoot2 x) ; -- fc~
|
||||||
x@? + y@? + ("و"|"ي")
|
x@? + y@? + ("و"|"ي")
|
||||||
@@ -1049,7 +1058,6 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf ->
|
|||||||
-- determine the declension and gives the corresponding inf table
|
-- determine the declension and gives the corresponding inf table
|
||||||
brkPl : Str -> State => Case => Str = \word ->
|
brkPl : Str -> State => Case => Str = \word ->
|
||||||
\\s,c => defArt s c (case word of {
|
\\s,c => defArt s c (case word of {
|
||||||
lemma + "ِيّ" => fixShd word (dec1sg ! s ! c) ; -- nisba
|
|
||||||
lemma + "ِي" => fixShd lemma (dec2sg ! s ! c) ; -- 2nd declension
|
lemma + "ِي" => fixShd lemma (dec2sg ! s ! c) ; -- 2nd declension
|
||||||
_ + ("ا"|"ى") => fixShd word (dec3sg ! s ! c) ;
|
_ + ("ا"|"ى") => fixShd word (dec3sg ! s ! c) ;
|
||||||
lemma + (#hamza|#hamzaseat)
|
lemma + (#hamza|#hamzaseat)
|
||||||
@@ -1219,6 +1227,9 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf ->
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
-- TODO: this isn't actually because of gender, it "just happens".
|
||||||
|
-- Refactor the whole sdfN and make variant with a parameter
|
||||||
|
-- whether to insert a و or ه or something else /IL
|
||||||
mkAtMasc : Str -> Str = \x ->
|
mkAtMasc : Str -> Str = \x ->
|
||||||
case x of {
|
case x of {
|
||||||
y + "ة" => y + "ات";
|
y + "ة" => y + "ات";
|
||||||
|
|||||||
@@ -58,10 +58,10 @@ concrete SentenceAra of Sentence = CatAra ** open
|
|||||||
-- SlashVS np vs sslash = TODO
|
-- SlashVS np vs sslash = TODO
|
||||||
|
|
||||||
|
|
||||||
-- EmbedS s = {s = conjThat ++ s.s} ;
|
EmbedS s = {s = "أَنْ" ++ s.s ! Verbal} ;
|
||||||
-- EmbedQS qs = {s = qs.s ! QIndir} ;
|
EmbedQS qs = {s = qs.s ! QIndir} ;
|
||||||
-- EmbedVP vp = {s = infVP False vp (agrP3 Sg)} ; --- agr
|
EmbedVP vp = {s = uttVP vp ! Masc} ;
|
||||||
--
|
|
||||||
|
|
||||||
UseCl t p cl =
|
UseCl t p cl =
|
||||||
{s = \\o => t.s ++ p.s ++
|
{s = \\o => t.s ++ p.s ++
|
||||||
|
|||||||
Reference in New Issue
Block a user