more updates from Codex

This commit is contained in:
Krasimir Angelov
2026-09-18 08:04:16 +02:00
parent 73b5f4e21e
commit 8124bafa41
15 changed files with 542 additions and 97 deletions
+4 -4
View File
@@ -7,13 +7,13 @@ concrete AdjectiveTel of Adjective = CatTel ** open ResTel, Prelude in {
UseComparA a = a ; UseComparA a = a ;
ComparA a np = { ComparA a np = {
s = \\g,n,c => a.s ! g ! n ! c ++ "కంటే" ++ np.s ! NPC Obl s = \\g,n,c => np.s ! NPC Obl ++ "కంటే" ++ a.s ! g ! n ! c
} ; } ;
-- $SuperlA$ belongs to determiner syntax in $Noun$. -- $SuperlA$ belongs to determiner syntax in $Noun$.
ComplA2 a np = { ComplA2 a np = {
s = \\g,n,c => a.s ! g ! n ! c ++ a.c2 ++ np.s ! NPC Obl s = \\g,n,c => np.s ! NPC Obl ++ a.c2 ++ a.s ! g ! n ! c
} ; } ;
ReflA2 a = { ReflA2 a = {
@@ -21,7 +21,7 @@ concrete AdjectiveTel of Adjective = CatTel ** open ResTel, Prelude in {
} ; } ;
SentAP ap sc = { SentAP ap sc = {
s = \\g,n,c => ap.s ! g ! n ! c ++ sc.s s = \\g,n,c => sc.s ++ ap.s ! g ! n ! c
} ; } ;
AdAP ada ap = { AdAP ada ap = {
@@ -29,7 +29,7 @@ concrete AdjectiveTel of Adjective = CatTel ** open ResTel, Prelude in {
} ; } ;
AdvAP ap adv = { AdvAP ap adv = {
s = \\g,n,c => ap.s ! g ! n ! c ++ adv.s s = \\g,n,c => adv.s ++ ap.s ! g ! n ! c
} ; } ;
UseA2 a = a ; UseA2 a = a ;
+1 -1
View File
@@ -15,7 +15,7 @@ concrete CatTel of Cat = CommonX ** open ResTel, Prelude in {
-- --
Cl = ResTel.Clause ; Cl = ResTel.Clause ;
ClSlash = {s : VPHTense => Polarity => Str ; c2 : Compl} ; ClSlash = {s : VPHTense => Polarity => Str ; c2 : Compl} ;
Imp = {s : Str} ; Imp = {s : Polarity => Number => Str} ;
-- --
---- Question ---- Question
-- --
+4 -4
View File
@@ -103,8 +103,8 @@ concrete DocumentationTel of Documentation = CatTel ** open
tr (th "Infinitive" ++ td (verb.s ! VInf)) ++ tr (th "Infinitive" ++ td (verb.s ! VInf)) ++
tr (th "Stem" ++ td (verb.s ! VStem)) ++ tr (th "Stem" ++ td (verb.s ! VStem)) ++
tr (th "Absolutive" ++ td (verb.s ! VAbs)) ++ tr (th "Absolutive" ++ td (verb.s ! VAbs)) ++
tr (th "Request" ++ td (verb.s ! VReq)) ++ tr (th "Imperative" ++ td (verb.s ! VImp Sg Pos)) ++
tr (th "Imperative" ++ td (verb.s ! VImp)) ++ tr (th "Request" ++ td (verb.s ! VImp Pl Pos)) ++
tr (th "Future request" ++ td (verb.s ! VReqFut)) tr (th "Future request" ++ td (verb.s ! VReqFut))
) ++ ) ++
heading2 "Imperfect" ++ genderNumberTable verb VImpf ++ heading2 "Imperfect" ++ genderNumberTable verb VImpf ++
@@ -133,7 +133,7 @@ concrete DocumentationTel of Documentation = CatTel ** open
futureTable : Verb -> Gender -> Str = \verb,gender -> futureTable : Verb -> Gender -> Str = \verb,gender ->
frameTable ( frameTable (
tr (th "" ++ th "P1" ++ th "P2" ++ th "P3") ++ tr (th "" ++ th "P1" ++ th "P2" ++ th "P3") ++
tr (th "Sg" ++ td (verb.s ! VFut Sg P1 gender) ++ td (verb.s ! VFut Sg P2 gender) ++ td (verb.s ! VFut Sg P3 gender)) ++ tr (th "Sg" ++ td (verb.s ! VFuture gender Sg P1) ++ td (verb.s ! VFuture gender Sg P2) ++ td (verb.s ! VFuture gender Sg P3)) ++
tr (th "Pl" ++ td (verb.s ! VFut Pl P1 gender) ++ td (verb.s ! VFut Pl P2 gender) ++ td (verb.s ! VFut Pl P3 gender)) tr (th "Pl" ++ td (verb.s ! VFuture gender Pl P1) ++ td (verb.s ! VFuture gender Pl P2) ++ td (verb.s ! VFuture gender Pl P3))
) ; ) ;
} }
+66 -12
View File
@@ -20,6 +20,10 @@ concrete ExtendTel of Extend =
lincat lincat
VPS = {s : Agr => Str} ; VPS = {s : Agr => Str} ;
[VPS] = {s1,s2 : Agr => Str} ; [VPS] = {s1,s2 : Agr => Str} ;
VPI = {s : Str} ;
[VPI] = {s1,s2 : Str} ;
[Comp] = {s1,s2 : Agr => Str} ;
[Imp] = {s1,s2 : Polarity => Number => Str} ;
lin lin
UseDAP dap = {s = \\c => dap.s ! Neutr ! npcase2case c ; a = agrP3 Neutr dap.n} ; UseDAP dap = {s = \\c => dap.s ! Neutr ! npcase2case c ; a = agrP3 Neutr dap.n} ;
@@ -33,14 +37,14 @@ concrete ExtendTel of Extend =
} ; } ;
AdvRNP np prep rnp = { AdvRNP np prep rnp = {
s = \\c => np.s ! c ++ rnp.s ! NPC Obl ++ prep.s ; s = \\c => rnp.s ! NPC Obl ++ prep.s ++ np.s ! c ;
a = np.a ; a = np.a ;
lock_NP = <> lock_NP = <>
} ; } ;
AdvRVP vp prep rnp = insertAdv (rnp.s ! NPC Obl ++ prep.s) vp ; AdvRVP vp prep rnp = insertAdv (rnp.s ! NPC Obl ++ prep.s) vp ;
AdvRAP ap prep rnp = { AdvRAP ap prep rnp = {
s = \\g,n,c => ap.s ! g ! n ! c ++ rnp.s ! NPC Obl ++ prep.s s = \\g,n,c => rnp.s ! NPC Obl ++ prep.s ++ ap.s ! g ! n ! c
} ; } ;
PositAdVAdj a = {s = a.s ! Masc ! Sg ! Dir} ; PositAdVAdj a = {s = a.s ! Masc ! Sg ! Dir} ;
@@ -61,29 +65,59 @@ concrete ExtendTel of Extend =
} ; } ;
PredVPS np vps = {s = np.s ! NPC Dir ++ vps.s ! np.a} ; PredVPS np vps = {s = np.s ! NPC Dir ++ vps.s ! np.a} ;
MkVPI vp = {s = let f = vp.s ! Pos ! VPInf in
vp.obj.s ++ vp.comp ! defaultAgr ++ f.neg ++ f.inf ++ f.fin} ;
BaseVPI first second = {s1 = first.s ; s2 = second.s} ;
ConsVPI first rest = {s1 = first.s ++ "," ++ rest.s1 ; s2 = rest.s2} ;
ConjVPI conj vpi = {s = vpi.s1 ++ conj.s2 ++ vpi.s2} ;
ComplVPIVV vv vpi = predV vv ** {comp = \\_ => vpi.s} ;
BaseComp first second = {s1 = first.s ; s2 = second.s} ;
ConsComp first rest = {
s1 = \\agr => first.s ! agr ++ "," ++ rest.s1 ! agr ;
s2 = rest.s2
} ;
ConjComp conj comps = {
s = \\agr => comps.s1 ! agr ++ conj.s2 ++ comps.s2 ! agr
} ;
BaseImp first second = {s1 = first.s ; s2 = second.s} ;
ConsImp first rest = {
s1 = \\pol,num => first.s ! pol ! num ++ "," ++ rest.s1 ! pol ! num ;
s2 = rest.s2
} ;
ConjImp conj imps = {
s = \\pol,num => imps.s1 ! pol ! num ++ conj.s2 ++ imps.s2 ! pol ! num
} ;
CompoundN modifier head = { CompoundN modifier head = {
s = \\n,c => modifier.s ! Sg ! Dir ++ head.s ! n ! c ; s = \\n,c => modifier.s ! Sg ! Dir ++ head.s ! n ! c ;
g = head.g g = head.g
} ; } ;
CompoundAP noun adjective = {
s = \\g,n,c => noun.s ! Sg ! Dir ++ adjective.s ! g ! n ! c
} ;
GenModNP num np cn = { GenModNP num np cn = {
s = \\c => np.s ! NPC Obl ++ cn.s ! num.n ! npcase2case c ; s = \\c => np.s ! NPC Obl ++ cn.s ! num.n ! npcase2case c ;
a = agrP3 cn.g num.n a = agrP3 cn.g num.n
} ; } ;
PresPartAP vp = { PresPartAP vp = {
s = \\_,_,_ => let f = vp.s ! Pos ! VPStem in s = \\g,n,_ => let f = vp.s ! Pos ! VPPresPart in
vp.obj.s ++ vp.comp ! defaultAgr ++ f.inf ++ f.fin vp.obj.s ++ vp.comp ! Ag g n P3 ++ f.neg ++ f.inf ++ f.fin
} ; } ;
PastPartAP vps = { PastPartAP vps = {
s = \\_,_,_ => let f = vps.s ! Pos ! VPStem in s = \\g,n,_ => let f = vps.passive ! Pos ! VPPastPart in
vps.obj.s ++ vps.comp ! defaultAgr ++ f.inf ++ f.fin vps.obj.s ++ vps.comp ! Ag g n P3 ++ f.neg ++ f.inf ++ f.fin
} ; } ;
PastPartAgentAP vps np = { PastPartAgentAP vps np = {
s = \\_,_,_ => let f = vps.s ! Pos ! VPStem in s = \\g,n,_ => let f = vps.passive ! Pos ! VPPastPart in
np.s ! NPC Obl ++ vps.obj.s ++ vps.comp ! defaultAgr ++ f.inf ++ f.fin np.s ! NPC Obl ++ "చేత" ++ vps.obj.s ++ vps.comp ! Ag g n P3 ++
f.neg ++ f.inf ++ f.fin
} ; } ;
GerundCN vp = { GerundCN vp = {
@@ -92,13 +126,29 @@ concrete ExtendTel of Extend =
g = Neutr g = Neutr
} ; } ;
GerundNP vp = {
s = \\_ => let f = vp.s ! Pos ! VPInf in
vp.obj.s ++ vp.comp ! defaultAgr ++ f.neg ++ f.inf ++ f.fin ;
a = defaultAgr
} ;
GerundAdv vp = { GerundAdv vp = {
s = let f = vp.s ! Pos ! VPInf in s = let f = vp.s ! Pos ! VPInf in
vp.obj.s ++ vp.comp ! defaultAgr ++ f.inf ++ f.fin vp.obj.s ++ vp.comp ! defaultAgr ++ f.inf ++ f.fin
} ; } ;
ByVP vp = {
s = let f = vp.s ! Pos ! VPInf in
vp.obj.s ++ vp.comp ! defaultAgr ++ f.neg ++ f.inf ++ f.fin ++ "ద్వారా"
} ;
ApposNP first second = {
s = \\c => first.s ! c ++ "," ++ second.s ! c ;
a = first.a
} ;
ReflPoss num cn = { ReflPoss num cn = {
s = \\c => cn.s ! num.n ! npcase2case c ; s = \\c => "తన" ++ cn.s ! num.n ! npcase2case c ;
a = agrP3 cn.g num.n ; a = agrP3 cn.g num.n ;
lock_NP = <> lock_NP = <>
} ; } ;
@@ -109,16 +159,20 @@ concrete ExtendTel of Extend =
} ; } ;
PassVPSlash vps = { PassVPSlash vps = {
s = vps.s ; s = vps.passive ;
passive = vps.passive ;
obj = vps.obj ; obj = vps.obj ;
subj = VIntrans ; subj = VIntrans ;
comp = vps.comp comp = vps.comp
} ; } ;
PassAgentVPSlash vps agent = { PassAgentVPSlash vps agent = {
s = vps.s ; s = vps.passive ;
passive = vps.passive ;
obj = vps.obj ; obj = vps.obj ;
subj = VIntrans ; subj = VIntrans ;
comp = \\agr => agent.s ! NPC Obl ++ vps.comp ! agr comp = \\agr => agent.s ! NPC Obl ++ "చేత" ++ vps.comp ! agr
} ; } ;
ProgrVPSlash vps = vps ;
} }
+45 -1
View File
@@ -1,9 +1,53 @@
concrete IdiomTel of Idiom = CatTel ** open Prelude, ResTel in { concrete IdiomTel of Idiom = CatTel ** open Prelude, ResTel in {
lin lin
ProgrVP vp = vp ; ProgrVP vp = vp ** {
s = \\pol,form => case form of {
VPTense VPGenPres agr => vp.s ! pol ! VPTense VPContPres agr ;
VPTense VPPerf agr => vp.s ! pol ! VPTense VPContPast agr ;
_ => vp.s ! pol ! form
}
} ;
ExistNP np = {
s = \\tense,pol => np.s ! NPC Dir ++ existVerb tense pol np.a
} ;
ExistNPAdv np adv = {
s = \\tense,pol => np.s ! NPC Dir ++ adv.s ++ existVerb tense pol np.a
} ;
ImpPl1 vp = {
s = let f = vp.s ! Pos ! VPHort in
vp.obj.s ++ vp.comp ! (Ag Masc Pl P1) ++ f.neg ++ f.inf ++ f.fin
} ;
ImpersCl vp = mkClause { ImpersCl vp = mkClause {
s = \\_ => "అది" ; s = \\_ => "అది" ;
a = agrP3 Neutr Sg a = agrP3 Neutr Sg
} vp ; } vp ;
oper
existVerb : VPHTense -> Polarity -> Agr -> Str = \tense,pol,agr ->
case pol of {
Neg => "లేదు" ;
Pos => case <tense,agr> of {
<VPPerf, Ag Masc Sg P3> => "ఉండేవాడు" ;
<VPPerf, Ag _ Sg P3> => "ఉండేది" ;
<VPPerf, Ag Neutr Pl P3> => "ఉండేవి" ;
<VPPerf, Ag _ Pl _ > => "ఉండేవారు" ;
<VPPerfPast, Ag Masc Sg P3> => "ఉండేవాడు" ;
<VPPerfPast, Ag _ Sg P3> => "ఉండేది" ;
<VPPerfPast, Ag Neutr Pl P3> => "ఉండేవి" ;
<VPPerfPast, Ag _ Pl _ > => "ఉండేవారు" ;
<VPFut, Ag Masc Sg P3> => "ఉంటాడు" ;
<VPFut, Ag _ Sg P3> => "ఉంటుంది" ;
<VPFut, Ag Neutr Pl P3> => "ఉంటాయి" ;
<VPFut, Ag _ Pl _ > => "ఉంటారు" ;
<_, Ag Masc Sg P3> => "ఉన్నాడు" ;
<_, Ag _ Sg P3> => "ఉంది" ;
<_, Ag Neutr Pl P3> => "ఉన్నాయి" ;
<_, Ag _ Pl _ > => "ఉన్నారు" ;
_ => "ఉంది"
}
} ;
} }
+1 -1
View File
@@ -1,4 +1,4 @@
--# -path=.:../abstract:../common --# -path=.:../abstract:../common:../api:../prelude
concrete LangTel of Lang = concrete LangTel of Lang =
GrammarTel, GrammarTel,
+2
View File
@@ -27,5 +27,7 @@ concrete NamesTel of Names = CatTel ** open ResTel in {
a = agrP3 Neutr Sg a = agrP3 Neutr Sg
} ; } ;
AdjLN ap name = {s = ap.s ! Neutr ! Sg ! Dir ++ name.s} ;
InLN name = {s = name.s ++ "లో"} ; InLN name = {s = name.s ++ "లో"} ;
} }
+26 -4
View File
@@ -27,7 +27,12 @@ concrete NounTel of Noun = CatTel ** open ResTel, Prelude in {
-- } ; -- } ;
-- --
AdvNP np adv = { AdvNP np adv = {
s = \\c => np.s ! c ++ adv.s ; s = \\c => adv.s ++ np.s ! c ;
a = np.a
} ;
ExtAdvNP np adv = {
s = \\c => np.s ! c ++ "," ++ adv.s ;
a = np.a a = np.a
} ; } ;
-- --
@@ -57,6 +62,7 @@ concrete NounTel of Noun = CatTel ** open ResTel, Prelude in {
NumDecimal n = {s = n.s ; n = n.n} ; NumDecimal n = {s = n.s ; n = n.n} ;
AdNum adn card = {s = adn.s ++ card.s ; n = card.n} ; AdNum adn card = {s = adn.s ++ card.s ; n = card.n} ;
OrdNumeral numeral = {s = numeral.s} ; OrdNumeral numeral = {s = numeral.s} ;
OrdDigits digits = {s = digits.s ++ "వ"} ;
-- --
-- NumDigits n = {s = n.s ! NCard ; n = n.n} ; -- NumDigits n = {s = n.s ! NCard ; n = n.n} ;
-- OrdDigits n = {s = n.s ! NOrd} ; -- OrdDigits n = {s = n.s ! NOrd} ;
@@ -101,7 +107,10 @@ concrete NounTel of Noun = CatTel ** open ResTel, Prelude in {
-- c2 = f.c3 -- c2 = f.c3
-- } ; -- } ;
-- --
ComplN2 f x = {s = \\n,c => f.s ! n ! c ++ f.c2 ++ x.s ! NPC c ; g = f.g} ; ComplN2 f x = {
s = \\n,c => x.s ! NPC c ++ f.c2 ++ f.s ! n ! c ;
g = f.g
} ;
-- ComplN3 f x = { -- ComplN3 f x = {
-- s = \\n,c => f.s ! n ! Nom ++ f.c2 ++ x.s ! c ; -- s = \\n,c => f.s ! n ! Nom ++ f.c2 ++ x.s ! c ;
-- g = f.g ; -- g = f.g ;
@@ -122,9 +131,9 @@ concrete NounTel of Noun = CatTel ** open ResTel, Prelude in {
-- s = \\n,c => cn.s ! n ! c ++ rs.s ! agrgP3 n cn.g ; -- s = \\n,c => cn.s ! n ! c ++ rs.s ! agrgP3 n cn.g ;
-- g = cn.g -- g = cn.g
-- } ; -- } ;
AdvCN cn ad = {s = \\n,c => cn.s ! n ! c ++ ad.s ; g = cn.g} ; AdvCN cn ad = {s = \\n,c => ad.s ++ cn.s ! n ! c ; g = cn.g} ;
-- --
SentCN cn sc = {s = \\n,c => cn.s ! n ! c ++ sc.s ; g = cn.g} ; SentCN cn sc = {s = \\n,c => sc.s ++ cn.s ! n ! c ; g = cn.g} ;
PossNP cn np = { PossNP cn np = {
s = \\n,c => np.s ! NPC Obl ++ cn.s ! n ! c ; s = \\n,c => np.s ! NPC Obl ++ cn.s ! n ! c ;
@@ -136,6 +145,19 @@ concrete NounTel of Noun = CatTel ** open ResTel, Prelude in {
g = cn.g g = cn.g
} ; } ;
CountNP det np = {
s = \\c => np.s ! NPC Obl ++ "లో" ++ det.s ! Neutr ! npcase2case c ;
a = agrP3 Neutr det.n
} ;
QuantityNP decimal mu = {
s = \\_ => case mu.isPre of {
True => mu.s ++ decimal.s ;
False => decimal.s ++ mu.s
} ;
a = agrP3 Neutr Pl
} ;
ApposCN cn np = { ApposCN cn np = {
s = \\n,c => cn.s ! n ! c ++ np.s ! NPC Dir ; s = \\n,c => cn.s ! n ! c ++ np.s ! NPC Dir ;
g = cn.g g = cn.g
+5 -3
View File
@@ -10,14 +10,16 @@ concrete PhraseTel of Phrase = CatTel ** open Prelude, ResTel in {
UttAP ap = {s = ap.s ! Masc ! Sg ! Dir} ; UttAP ap = {s = ap.s ! Masc ! Sg ! Dir} ;
UttVP vp = {s = let f = vp.s ! Pos ! VPInf in f.inf ++ f.fin} ; UttVP vp = {s = let f = vp.s ! Pos ! VPInf in f.inf ++ f.fin} ;
UttAdv adv = adv ; UttAdv adv = adv ;
UttImpSg pol imp = {s = pol.s ++ imp.s} ; UttIP ip = {s = ip.s ! Dir} ;
UttImpPl pol imp = {s = pol.s ++ imp.s} ; UttImpSg pol imp = {s = pol.s ++ imp.s ! pol.p ! Sg} ;
UttImpPol pol imp = {s = pol.s ++ imp.s} ; UttImpPl pol imp = {s = pol.s ++ imp.s ! pol.p ! Pl} ;
UttImpPol pol imp = {s = pol.s ++ imp.s ! pol.p ! Pl} ;
NoPConj = {s = []} ; NoPConj = {s = []} ;
-- PConjConj conj = {s = conj.s2} ; --- -- PConjConj conj = {s = conj.s2} ; ---
-- --
NoVoc = {s = []} ; NoVoc = {s = []} ;
VocNP np = {s = "," ++ np.s ! NPC Dir} ;
-- VocNP np = {s = "," ++ np.s ! Nom} ; -- VocNP np = {s = "," ++ np.s ! Nom} ;
-- --
} }
+5 -1
View File
@@ -7,10 +7,14 @@ concrete QuestionTel of Question = CatTel ** open ResTel, Prelude in {
QuestVP ip vp = mkClause {s = \\_ => ip.s ! Dir ; a = agrP3 Neutr ip.n} vp ; QuestVP ip vp = mkClause {s = \\_ => ip.s ! Dir ; a = agrP3 Neutr ip.n} vp ;
QuestIAdv iadv cl = cl ** {s = \\t,p => iadv.s ++ cl.s ! t ! p} ; QuestIAdv iadv cl = cl ** {s = \\t,p => iadv.s ++ cl.s ! t ! p} ;
QuestIComp icomp np = mkClause np (predV (regVerb []) ** {comp = \\_ => icomp.s}) ; QuestSlash ip slash = {
s = \\t,p => slash.s ! t ! p ++ ip.s ! Obl ++ slash.c2.s
} ;
QuestIComp icomp np = mkClause np (predCopula ** {comp = \\_ => icomp.s}) ;
PrepIP p ip = {s = ip.s ! Obl ++ p.s} ; PrepIP p ip = {s = ip.s ! Obl ++ p.s} ;
AdvIP ip adv = {s = \\c => ip.s ! c ++ adv.s ; n = ip.n} ; AdvIP ip adv = {s = \\c => ip.s ! c ++ adv.s ; n = ip.n} ;
AdvIAdv iadv adv = {s = adv.s ++ iadv.s} ;
IdetCN idet cn = {s = \\c => idet.s ++ cn.s ! idet.n ! c ; n = idet.n} ; IdetCN idet cn = {s = \\c => idet.s ++ cn.s ! idet.n ! c ; n = idet.n} ;
IdetIP idet = {s = \\_ => idet.s ; n = idet.n} ; IdetIP idet = {s = \\_ => idet.s ; n = idet.n} ;
IdetQuant iq num = {s = iq.s ! num.n ++ num.s ; n = num.n} ; IdetQuant iq num = {s = iq.s ! num.n ++ num.s ; n = num.n} ;
+10 -1
View File
@@ -4,7 +4,16 @@ concrete RelativeTel of Relative = CatTel ** open ResTel in {
-- --
lin lin
RelCl cl = cl ; RelCl cl = cl ;
RelVP rp vp = mkClause {s = \\_ => rp.s ; a = defaultAgr} vp ; RelVP rp vp = {
s = \\tense,pol => let f = vp.s ! pol ! case tense of {
VPGenPres => VPRelPresent ;
VPFut => VPRelPresent ;
_ => VPPastPart
} in vp.obj.s ++ vp.comp ! defaultAgr ++ f.neg ++ f.inf ++ f.fin
} ;
RelSlash rp slash = {
s = \\t,p => slash.s ! t ! p ++ rp.s ++ slash.c2.s
} ;
IdRP = {s = "ఏ"} ; IdRP = {s = "ఏ"} ;
FunRP prep np rp = {s = np.s ! NPC Obl ++ prep.s ++ rp.s} ; FunRP prep np rp = {s = np.s ! NPC Obl ++ prep.s ++ rp.s} ;
-- --
+302 -53
View File
@@ -10,7 +10,7 @@ resource ResTel = ParamX ** open Prelude in {
flags optimize=all ; flags optimize=all ;
param param
Case = Dir | Obl ; Case = Dir | Obl | Acc ;
Gender = Masc | Fem | Neutr ; Gender = Masc | Fem | Neutr ;
oper oper
@@ -18,12 +18,32 @@ resource ResTel = ParamX ** open Prelude in {
mkNoun : (x1,_,_,x4 : Str) -> Gender -> Noun = mkNoun : (x1,_,_,x4 : Str) -> Gender -> Noun =
\sd,so,pd,po,g -> { \sd,so,pd,po,g -> {
s = table Number [table Case [sd;so] ; table Case [pd;po]] ; s = table Number [
table Case [sd;so;accusative sd] ;
table Case [pd;po;accusative pd]
] ;
g = g g = g
} ; } ;
wallNoun : Str -> Noun = \goda -> accusative : Str -> Str = \word -> case word of {
mkNoun goda goda (goda + "లు") (goda + "ల") Neutr ; stem + "" => stem + "ాన్ని" ;
stem + "ము" => stem + "ాన్ని" ;
stem + "లు" => stem + "లను" ;
stem + "ి" => word + "ని" ;
stem + "ై" => word + "ని" ;
stem + "ు" => word + "ను" ;
_ => word + "ను"
} ;
wallNoun : Str -> Noun = \word ->
case word of {
stem + "" => mkNoun word word (stem + "ాలు") (stem + "ాల") Neutr ;
stem + "ము" => mkNoun word word (stem + "ములు") (stem + "ముల") Neutr ;
stem + "లు" => mkNoun word word word (stem + "ల") Neutr ;
stem + "ుడు" => mkNoun word word (stem + "ులు") (stem + "ుల") Neutr ;
stem + "ి" => mkNoun word word (stem + "ులు") (stem + "ుల") Neutr ;
_ => mkNoun word word (word + "లు") (word + "ల") Neutr
} ;
reggNoun : Str -> Gender -> Noun = \s,g -> reggNoun : Str -> Gender -> Noun = \s,g ->
wallNoun s ** {g = g} ; wallNoun s ** {g = g} ;
@@ -47,18 +67,24 @@ resource ResTel = ParamX ** open Prelude in {
VForm = VForm =
VInf VInf
| VStem | VStem
| VPresent Gender Number Person
| VPast Gender Number Person
| VFuture Gender Number Person
| VNegFinite Bool Gender Number Person
| VPresentPart
| VRelativePresent
| VPastPart
| VHortative
| VImpf Gender Number | VImpf Gender Number
| VPerf Gender Number | VPerf Gender Number
| VSubj Number Person | VSubj Number Person
| VFut Number Person Gender
| VAbs | VAbs
| VReq | VImp Number Polarity
| VImp
| VReqFut | VReqFut
; ;
oper oper
Verb = {s : VForm => Str} ; Verb = {s, passive : VForm => Str} ;
mkVerb : (x1,_,_,_,_,_,_,_,_,_,_,_,_,_,x15 : Str) -> Verb = mkVerb : (x1,_,_,_,_,_,_,_,_,_,_,_,_,_,x15 : Str) -> Verb =
\inf,stem,ims,imp,ifs,ifp,pms,pmp,pfs,pfp,ss1,ss2,sp2,sp3,r -> { \inf,stem,ims,imp,ifs,ifp,pms,pmp,pfs,pfp,ss1,ss2,sp2,sp3,r -> {
@@ -83,19 +109,229 @@ resource ResTel = ParamX ** open Prelude in {
VSubj Sg _ => ss2 ; VSubj Sg _ => ss2 ;
VSubj Pl P2 => sp2 ; VSubj Pl P2 => sp2 ;
VSubj Pl _ => sp3 ; VSubj Pl _ => sp3 ;
VFut Sg P1 g => ss1 + ga Sg g ;
VFut Sg _ g => ss2 + ga Sg g ;
VFut Pl P2 g => sp2 + ga Pl g ;
VFut Pl _ g => sp3 + ga Pl g ;
VAbs => stem ; VAbs => stem ;
VReq => r ; VImp Sg Pos => sp2 ;
VImp => sp2 ; VImp Sg Neg => verbRoot stem + "వద్దు" ;
VReqFut => r VImp Pl Pos => r ;
} VImp Pl Neg => verbRoot stem + "కండి" ;
VReqFut => r ;
VPresent g n p => presentFinite stem (Ag g n p) ;
VPast g n p => pastFinite stem (Ag g n p) ;
VFuture g n p => futureFinite stem (Ag g n p) ;
VNegFinite future g n p => case future of {
True => verbRoot stem + negativeEnding (Ag g n p) ;
False => verbRoot stem + "లేదు"
} ;
VPresentPart => nonPastStem stem + "ున్న" ;
VRelativePresent => relativePresent stem ;
VPastPart => pastStem stem + "ిన" ;
VHortative => verbRoot stem + "దాం"
} ;
passive = conjugation (verbRoot stem + "బడు")
} ; } ;
regVerb : Str -> Verb = \cal -> regVerb : Str -> Verb = \verb -> {
mkVerb cal cal cal cal cal cal cal cal cal cal cal cal cal cal cal ; s = conjugation verb ;
passive = conjugation (verbRoot verb + "బడు")
} ;
conjugation : Str -> VForm => Str = \verb ->
let root = verbRoot verb in table {
VInf => root + "డం" ;
VStem => verb ;
VPresent g n p => presentFinite verb (Ag g n p) ;
VPast g n p => pastFinite verb (Ag g n p) ;
VFuture g n p => futureFinite verb (Ag g n p) ;
VNegFinite future g n p => case future of {
True => root + negativeEnding (Ag g n p) ;
False => root + "లేదు"
} ;
VPresentPart => nonPastStem verb + "ున్న" ;
VRelativePresent => relativePresent verb ;
VPastPart => pastStem verb + "ిన" ;
VHortative => root + "దాం" ;
VImpf g n => nonPastStem verb + "ున్న" ;
VPerf g n => pastStem verb ;
VSubj n p => nonPastStem verb + finiteEnding (Ag Masc n p) ;
VAbs => pastStem verb + "ి" ;
VImp Sg Pos => verb ;
VImp Sg Neg => root + "వద్దు" ;
VImp Pl Pos => root + "ండి" ;
VImp Pl Neg => root + "కండి" ;
VReqFut => root + "ండి"
} ;
-- The WordNet lexicon gives verbs in the usual dictionary/imperative
-- form. These operations provide the productive spoken-Telugu stems.
-- Irregular high-frequency verbs are listed before the regular suffix
-- rules; compound verbs are handled because matching is suffix based.
verbRoot : Str -> Str = \verb -> case verb of {
stem + "ండి" => stem ;
stem + "ు" => stem ;
_ => verb
} ;
pastStem : Str -> Str = \verb -> case verb of {
stem + "చేయు" => stem + "చేశ" ;
stem + "తిను" => stem + "తిన్న" ;
stem + "విను" => stem + "విన్న" ;
stem + "కొను" => stem + "కొన్న" ;
stem + "కను" => stem + "కన్న" ;
stem + "ఉండు" => stem + "ఉన్న" ;
stem + "వచ్చు" => stem + "వచ్చ" ;
stem + "పో" => stem + "పోయ" ;
stem + "ను" => stem + "న్న" ;
stem + "ు" => stem ;
_ => verb
} ;
nonPastStem : Str -> Str = \verb -> case verb of {
stem + "చేయు" => stem + "చేస్త" ;
stem + "అవు" => stem + "అవుత" ;
stem + "వెళ్ళు" => stem + "వెళ్త" ;
stem + "పో" => stem + "పోత" ;
stem + "తిను" => stem + "తింట" ;
stem + "విను" => stem + "వింట" ;
stem + "కొను" => stem + "కొంట" ;
stem + "ను" => stem + "ంట" ;
stem + "ించు" => stem + "ిస్త" ;
stem + "చు" => stem + "స్త" ;
stem + "ు" => stem + "ుత" ;
_ => verb + "త"
} ;
relativePresent : Str -> Str = \verb -> case verb of {
stem + "చేయు" => stem + "చేసే" ;
stem + "వెళ్ళు" => stem + "వెళ్ళే" ;
stem + "వచ్చు" => stem + "వచ్చే" ;
_ => verbRoot verb + "ే"
} ;
finiteEnding : Agr -> Str = \agr -> case agr of {
Ag _ Sg P1 => "ాను" ;
Ag _ Sg P2 => "ావు" ;
Ag Masc Sg P3 => "ాడు" ;
Ag _ Sg P3 => "ింది" ;
Ag _ Pl P1 => "ాము" ;
Ag Neutr Pl P3 => "ాయి" ;
Ag _ Pl _ => "ారు"
} ;
presentFinite : Str -> Agr -> Str = \verb,agr ->
nonPastStem verb + "ున్న" + case agr of {
Ag _ Sg P1 => "ాను" ;
Ag _ Sg P2 => "ావు" ;
Ag Masc Sg P3 => "ాడు" ;
Ag _ Sg P3 => "ది" ;
Ag _ Pl P1 => "ాము" ;
Ag Neutr Pl P3 => "ాయి" ;
Ag _ Pl _ => "ారు"
} ;
pastFinite : Str -> Agr -> Str = \verb,agr -> case agr of {
Ag Masc Sg P3 => pastStem verb + "ాడు" ;
Ag _ Sg P3 => case verb of {
stem + "చేయు" => stem + "చేసింది" ;
stem + "తిను" => stem + "తిన్నది" ;
stem + "విను" => stem + "విన్నది" ;
stem + "కొను" => stem + "కొన్నది" ;
stem + "కను" => stem + "కన్నది" ;
_ => pastStem verb + case agr of {
Ag Masc Sg P3 => "ాడు" ;
_ => "ింది"
}
} ;
_ => pastStem verb + finiteEnding agr
} ;
futureFinite : Str -> Agr -> Str = \verb,agr ->
nonPastStem verb + case agr of {
Ag _ Sg P1 => "ాను" ;
Ag _ Sg P2 => "ావు" ;
Ag Masc Sg P3 => "ాడు" ;
Ag _ Sg P3 => "ుంది" ;
Ag _ Pl P1 => "ాము" ;
Ag Neutr Pl P3 => "ాయి" ;
Ag _ Pl _ => "ారు"
} ;
negativeEnding : Agr -> Str = \agr -> case agr of {
Ag _ Sg P1 => "ను" ;
Ag _ Sg P2 => "వు" ;
Ag Masc Sg P3 => "డు" ;
Ag _ Sg P3 => "దు" ;
Ag _ Pl P1 => "ము" ;
Ag Neutr Pl P3 => "వు" ;
Ag _ Pl _ => "రు"
} ;
finitePast : Verb -> Agr -> Str = \verb,agr ->
case agr of {Ag g n p => verb.s ! VPast g n p} ;
finitePresent : Verb -> Agr -> Str = \verb,agr ->
case agr of {Ag g n p => verb.s ! VPresent g n p} ;
finiteFuture : Verb -> Agr -> Str = \verb,agr ->
case agr of {Ag g n p => verb.s ! VFuture g n p} ;
finiteNegative : Verb -> VPHTense -> Agr -> Str = \verb,tense,agr ->
case agr of {Ag g n p => verb.s ! VNegFinite (case tense of {
VPFut => True ; _ => False}) g n p} ;
passiveV : Verb -> Verb = \verb -> {
s = verb.passive ;
passive = verb.passive
} ;
predCopula : VPH = {
s = \\pol,form => case form of {
VPTense tense agr => case pol of {
Neg => {fin = case tense of {
VPGenPres => negativeCopula agr ;
_ => "కాలేదు"
} ; inf = [] ; neg = []} ;
Pos => {fin = case tense of {
VPGenPres => [] ;
VPContPres => [] ;
VPPerf => copulaPast agr ;
VPPerfPres => copulaPast agr ;
VPImpPast => copulaPast agr ;
VPContPast => copulaPast agr ;
VPPerfPast => copulaPast agr ;
VPSubj => futureFinite "అవు" agr ;
VPFut => futureFinite "అవు" agr
} ; inf = [] ; neg = []}
} ;
VPInf => {fin = "అవడం" ; inf = [] ; neg = []} ;
VPStem => {fin = "అవు" ; inf = [] ; neg = []} ;
VPPresPart => {fin = "అవుతున్న" ; inf = [] ; neg = []} ;
VPRelPresent => {fin = "అయ్యే" ; inf = [] ; neg = []} ;
VPPastPart => {fin = "అయిన" ; inf = [] ; neg = []} ;
VPHort => {fin = "అవుదాం" ; inf = [] ; neg = []} ;
VPImp Sg => {fin = "అవు" ; inf = [] ; neg = []} ;
VPImp Pl => {fin = "అవండి" ; inf = [] ; neg = []} ;
VPReqFut => {fin = "అవండి" ; inf = [] ; neg = []}
} ;
passive = verbForms (regVerb "అవు") ;
obj = {s = [] ; a = defaultAgr} ;
subj = VIntrans ;
comp = \\_ => []
} ;
negativeCopula : Agr -> Str = \agr -> case agr of {
Ag _ Pl _ => "కారు" ;
_ => "కాదు"
} ;
copulaPast : Agr -> Str = \agr -> case agr of {
Ag _ Sg P1 => "అయ్యాను" ;
Ag _ Sg P2 => "అయ్యావు" ;
Ag Masc Sg P3 => "అయ్యాడు" ;
Ag _ Sg P3 => "అయింది" ;
Ag _ Pl P1 => "అయ్యాము" ;
Ag Neutr Pl P3 => "అయ్యాయి" ;
Ag _ Pl _ => "అయ్యారు"
} ;
param param
CTense = CPresent | CPast | CFuture ; CTense = CPresent | CPast | CFuture ;
@@ -110,12 +346,12 @@ resource ResTel = ParamX ** open Prelude in {
oper oper
personalPronoun : Person -> Number -> {s : PronCase => Str} = \p,n -> personalPronoun : Person -> Number -> {s : PronCase => Str} = \p,n ->
case <p,n> of { case <p,n> of {
<P1,Sg> => {s = table {PC Dir => "నేను" ; PC Obl => "నా" ; PObj => "నన్ను" ; PPoss => "నా"}} ; <P1,Sg> => {s = table {PC Dir => "నేను" ; PC Obl => "నా" ; PC Acc => "నన్ను" ; PObj => "నన్ను" ; PPoss => "నా"}} ;
<P1,Pl> => {s = table {PC Dir => "మేము" ; PC Obl => "మా" ; PObj => "మమ్మల్ని" ; PPoss => "మా"}} ; <P1,Pl> => {s = table {PC Dir => "మేము" ; PC Obl => "మా" ; PC Acc => "మమ్మల్ని" ; PObj => "మమ్మల్ని" ; PPoss => "మా"}} ;
<P2,Sg> => {s = table {PC Dir => "నువ్వు" ; PC Obl => "నీ" ; PObj => "నిన్ను" ; PPoss => "నీ"}} ; <P2,Sg> => {s = table {PC Dir => "నువ్వు" ; PC Obl => "నీ" ; PC Acc => "నిన్ను" ; PObj => "నిన్ను" ; PPoss => "నీ"}} ;
<P2,Pl> => {s = table {PC Dir => "మీరు" ; PC Obl => "మీ" ; PObj => "మిమ్మల్ని" ; PPoss => "మీ"}} ; <P2,Pl> => {s = table {PC Dir => "మీరు" ; PC Obl => "మీ" ; PC Acc => "మిమ్మల్ని" ; PObj => "మిమ్మల్ని" ; PPoss => "మీ"}} ;
<P3,Sg> => {s = table {PC Dir => "అతను" ; PC Obl => "అతని" ; PObj => "అతన్ని" ; PPoss => "అతని"}} ; <P3,Sg> => {s = table {PC Dir => "అతను" ; PC Obl => "అతని" ; PC Acc => "అతన్ని" ; PObj => "అతన్ని" ; PPoss => "అతని"}} ;
<P3,Pl> => {s = table {PC Dir => "వారు" ; PC Obl => "వారి" ; PObj => "వారిని" ; PPoss => "వారి"}} <P3,Pl> => {s = table {PC Dir => "వారు" ; PC Obl => "వారి" ; PC Acc => "వారిని" ; PObj => "వారిని" ; PPoss => "వారి"}}
} ; } ;
---- the third is the vocative - is it really this way? ---- the third is the vocative - is it really this way?
@@ -139,12 +375,15 @@ resource ResTel = ParamX ** open Prelude in {
; ;
VPHForm = VPHForm =
VPTense VPHTense Agr -- 9 * 12 VPInf
| VPReq | VPTense VPHTense Agr -- 9 * 12
| VPImp | VPImp Number
| VPReqFut | VPReqFut
| VPInf
| VPStem | VPStem
| VPPresPart
| VPRelPresent
| VPPastPart
| VPHort
; ;
VType = VIntrans | VTrans | VTransPost ; VType = VIntrans | VTrans | VTransPost ;
@@ -155,41 +394,50 @@ resource ResTel = ParamX ** open Prelude in {
_ => NPC Obl _ => NPC Obl
} ; } ;
FiniteForm : Type = {fin, inf, neg : Str} ;
VPH : Type = { VPH : Type = {
s : Polarity => VPHForm => {fin, inf, neg : Str} ; s, passive : Polarity => VPHForm => FiniteForm ;
obj : {s : Str ; a : Agr} ; obj : {s : Str ; a : Agr} ;
subj : VType ; subj : VType ;
comp : Agr => Str comp : Agr => Str
} ; } ;
predV : Verb -> VPH = \verb -> { verbForms : Verb -> (Polarity => VPHForm => FiniteForm) = \verb -> \\b,vh =>
s = \\b,vh =>
let let
na = case b of {Pos => []; Neg => "వద్దు" } ; na = case b of {Pos => []; Neg => "వద్దు" } ;
negative = case b of {Pos => []; Neg => "లేదు"} ; negative = case b of {Pos => []; Neg => "లేదు"} ;
in in
case vh of { case vh of {
VPTense VPGenPres (Ag g n p) => VPTense tense agr => case b of {
{fin = copula CPresent n p g ; inf = verb.s ! VImpf g n ; neg = negative} ; Neg => {fin = finiteNegative verb tense agr ; inf = [] ; neg = []} ;
VPTense VPImpPast (Ag g n p) => Pos => case tense of {
{fin = copula CPast n p g ; inf = verb.s ! VImpf g n ; neg = negative} ; VPGenPres => {fin = finiteFuture verb agr ; inf = [] ; neg = []} ;
VPTense VPContPres (Ag g n p) => VPImpPast => {fin = finitePast verb agr ; inf = [] ; neg = []} ;
{fin = copula CPresent n p g ; VPContPres => {fin = finitePresent verb agr ; inf = [] ; neg = []} ;
inf = verb.s ! VStem ++ progressive g n ; neg = negative} ; VPContPast => {fin = finitePast verb agr ; inf = [] ; neg = []} ;
VPTense VPContPast (Ag g n p) => VPPerf => {fin = finitePast verb agr ; inf = [] ; neg = []} ;
{fin = copula CPast n p g ; VPPerfPres => {fin = finitePast verb agr ; inf = [] ; neg = []} ;
inf = verb.s ! VStem ++ progressive g n ; neg = negative} ; VPPerfPast => {fin = finitePast verb agr ; inf = [] ; neg = []} ;
VPTense VPPerf (Ag g n _) => VPSubj => {fin = finiteFuture verb agr ; inf = [] ; neg = []} ;
{fin = verb.s ! VPerf g n ; inf = [] ; neg = negative} ; VPFut => {fin = finiteFuture verb agr ; inf = [] ; neg = []}
VPTense VPPerfPres (Ag g n p) => }
{fin = copula CPresent n p g ; inf = verb.s ! VPerf g n ; neg = negative} ; } ;
VPTense VPPerfPast (Ag g n p) => {- The finite cases above deliberately precede the legacy form
{fin = copula CPast n p g ; inf = verb.s ! VPerf g n ; neg = negative} ; table. The latter remains part of the public paradigms API. -}
VPTense VPSubj (Ag _ n p) => {fin = verb.s ! VSubj n p ; inf = [] ; neg = na} ; VPInf => {fin = verb.s ! VInf ; inf = [] ; neg = na} ;
VPTense VPFut (Ag g n p) => {fin = verb.s ! VFut n p g ; inf = [] ; neg = na} ; VPStem => {fin = verb.s ! VStem ; inf = [] ; neg = na} ;
VPInf => {fin = verb.s ! VStem ; inf = [] ; neg = na} ; VPPresPart => {fin = verb.s ! VPresentPart ; inf = [] ; neg = na} ;
_ => {fin = verb.s ! VStem ; inf = [] ; neg = na} ---- VPRelPresent => {fin = verb.s ! VRelativePresent ; inf = [] ; neg = na} ;
VPPastPart => {fin = verb.s ! VPastPart ; inf = [] ; neg = na} ;
VPHort => {fin = verb.s ! VHortative ; inf = [] ; neg = na} ;
VPImp n => {fin = verb.s ! VImp n b ; inf = [] ; neg = []} ;
VPReqFut => {fin = verb.s ! VReqFut ; inf = [] ; neg = na}
} ; } ;
predV : Verb -> VPH = \verb -> {
s = verbForms verb ;
passive = verbForms (passiveV verb) ;
obj = {s = [] ; a = defaultAgr} ; obj = {s = [] ; a = defaultAgr} ;
subj = VIntrans ; subj = VIntrans ;
comp = \\_ => [] comp = \\_ => []
@@ -205,6 +453,7 @@ resource ResTel = ParamX ** open Prelude in {
insertObject : NP -> VPHSlash -> VPH = \np,vps -> { insertObject : NP -> VPHSlash -> VPH = \np,vps -> {
s = vps.s ; s = vps.s ;
passive = vps.passive ;
obj = {s = vps.obj.s ++ np.s ! objVType vps.c2.c ++ vps.c2.s ; a = np.a} ; obj = {s = vps.obj.s ++ np.s ! objVType vps.c2.c ++ vps.c2.s ; a = np.a} ;
subj = vps.c2.c ; subj = vps.c2.c ;
comp = vps.comp comp = vps.comp
@@ -242,7 +491,7 @@ resource ResTel = ParamX ** open Prelude in {
npcase2case : NPCase -> Case = \npc -> case npc of { npcase2case : NPCase -> Case = \npc -> case npc of {
NPC c => c ; NPC c => c ;
NPObj => Obl ; NPObj => Acc ;
NPErg => Obl NPErg => Obl
} ; } ;
@@ -254,7 +503,7 @@ resource ResTel = ParamX ** open Prelude in {
toNP : (Case => Str) -> NPCase -> Str = \pn, npc -> case npc of { toNP : (Case => Str) -> NPCase -> Str = \pn, npc -> case npc of {
NPC c => pn ! c ; NPC c => pn ! c ;
NPObj => pn ! Obl ; NPObj => pn ! Acc ;
NPErg => pn ! Obl NPErg => pn ! Obl
} ; } ;
+6 -3
View File
@@ -8,10 +8,13 @@ concrete SentenceTel of Sentence = CatTel ** open Prelude, ResTel in {
PredSCVP sc vp = mkClause {s = \\_ => sc.s ; a = agrP3 Neutr Sg} vp ; PredSCVP sc vp = mkClause {s = \\_ => sc.s ; a = agrP3 Neutr Sg} vp ;
ImpVP vp = {s = let f = vp.s ! Pos ! VPImp in ImpVP vp = {
vp.obj.s ++ vp.comp ! defaultAgr ++ f.neg ++ f.inf ++ f.fin} ; s = \\pol,num =>
let f = vp.s ! pol ! VPImp num
in vp.obj.s ++ vp.comp ! defaultAgr ++ f.neg ++ f.inf ++ f.fin
} ;
AdvImp adv imp = {s = adv.s ++ imp.s} ; AdvImp adv imp = {s = \\pol,num => adv.s ++ imp.s ! pol ! num} ;
AdvS a s = {s = a.s ++ s.s} ; AdvS a s = {s = a.s ++ s.s} ;
+53 -6
View File
@@ -4,36 +4,83 @@ concrete StructuralTel of Structural = CatTel **
flags optimize=all ; flags optimize=all ;
lin lin
above_Prep = P.mkPrep "పైన" ;
after_Prep = P.mkPrep "తర్వాత" ;
almost_AdA = P.mkAdA "దాదాపు" ;
almost_AdN = P.mkAdN "దాదాపు" ;
always_AdV = P.mkAdV "ఎల్లప్పుడూ" ;
as_CAdv = {s = "అంత" ; p = "గా"} ;
at_least_AdN = P.mkAdN "కనీసం" ;
at_most_AdN = P.mkAdN "గరిష్ఠంగా" ;
before_Prep = P.mkPrep "ముందు" ;
behind_Prep = P.mkPrep "వెనుక" ;
between_Prep = P.mkPrep "మధ్య" ;
all_Predet = {s = "అన్ని"} ; all_Predet = {s = "అన్ని"} ;
although_Subj = {s = "అయినప్పటికీ"} ; although_Subj = {s = "అయినప్పటికీ"} ;
and_Conj = {s1 = [] ; s2 = "మరియు" ; n = Pl} ; and_Conj = {s1 = [] ; s2 = "మరియు" ; n = Pl} ;
because_Subj = {s = "ఎందుకంటే"} ; because_Subj = {s = "ఎందుకంటే"} ;
by8agent_Prep = P.mkPrep "చేత" ;
by8means_Prep = P.mkPrep "ద్వారా" ;
either7or_DConj = {s1 = "గాని" ; s2 = "లేదా" ; n = Sg} ; either7or_DConj = {s1 = "గాని" ; s2 = "లేదా" ; n = Sg} ;
both7and_DConj = {s1 = "రెండూ" ; s2 = "మరియు" ; n = Pl} ; both7and_DConj = {s1 = "రెండూ" ; s2 = "మరియు" ; n = Pl} ;
every_Det = {s = \\_,_ => "ప్రతి" ; n = Sg} ; every_Det = {s = \\_,_ => "ప్రతి" ; n = Sg} ;
during_Prep = P.mkPrep "సమయంలో" ;
everybody_NP = {s = \\_ => "అందరూ" ; a = Ag Masc Pl P3} ;
everything_NP = {s = \\_ => "అన్నీ" ; a = Ag Neutr Pl P3} ;
everywhere_Adv = P.mkAdv "ప్రతిచోటా" ;
except_Prep = P.mkPrep "తప్ప" ;
few_Det = {s = \\_,_ => "కొద్దిమంది" ; n = Pl} ;
for_Prep = P.mkPrep "కోసం" ;
from_Prep = P.mkPrep "నుండి" ;
if_Subj = {s = "అయితే"} ; if_Subj = {s = "అయితే"} ;
how8many_IDet = {s = "ఎన్ని" ; n = Pl} ;
how8much_IAdv = {s = "ఎంత"} ;
how_IAdv = {s = "ఎలా"} ;
it_Pron = { it_Pron = {
s = table {PC Dir => "అది" ; PC Obl => "దాని" ; PObj => "దానిని" ; PPoss => "దాని"} ; s = table {PC Dir => "అది" ; PC Obl => "దాని" ; PC Acc => "దానిని" ; PObj => "దానిని" ; PPoss => "దాని"} ;
a = Ag Neutr Sg P3 a = Ag Neutr Sg P3
} ; } ;
or_Conj = {s1 = [] ; s2 = "లేదా" ; n = Sg} ; or_Conj = {s1 = [] ; s2 = "లేదా" ; n = Sg} ;
more_CAdv = {s = "మరింత" ; p = "కంటే"} ;
most_Predet = {s = "చాలా వరకు"} ;
no_Quant = {s = \\_,_,_ => "ఏ"} ;
on_Prep = P.mkPrep "మీద" ;
only_Predet = {s = "మాత్రమే"} ;
please_Voc = {s = "దయచేసి"} ;
she_Pron = { she_Pron = {
s = table {PC Dir => "ఆమె" ; PC Obl => "ఆమె" ; PObj => "ఆమెను" ; PPoss => "ఆమె"} ; s = table {PC Dir => "ఆమె" ; PC Obl => "ఆమె" ; PC Acc => "ఆమెను" ; PObj => "ఆమెను" ; PPoss => "ఆమె"} ;
a = Ag Fem Sg P3 a = Ag Fem Sg P3
} ; } ;
that_Quant = {s = table { that_Quant = {s = table {
Sg => \\_,_ => "అది" ; Sg => \\_,_ => "" ;
Pl => \\_,_ => "అవి" Pl => \\_,_ => ""
} }
} ; } ;
that_Subj = {s = "అని"} ; that_Subj = {s = "అని"} ;
they_Pron = personalPronoun P3 Pl ** {a = Ag Masc Pl P3} ; they_Pron = personalPronoun P3 Pl ** {a = Ag Masc Pl P3} ;
this_Quant = {s = table { this_Quant = {s = table {
Sg => \\_,_ => "ఇది" ; Sg => \\_,_ => "" ;
Pl => \\_,_ => "ఇవి" Pl => \\_,_ => ""
} }
} ; } ;
very_AdA = {s = "చాలా"} ; very_AdA = {s = "చాలా"} ;
somebody_NP = {s = \\_ => "ఎవరో ఒకరు" ; a = Ag Masc Sg P3} ;
something_NP = {s = \\_ => "ఏదో ఒకటి" ; a = Ag Neutr Sg P3} ;
somewhere_Adv = P.mkAdv "ఎక్కడో" ;
through_Prep = P.mkPrep "ద్వారా" ;
to_Prep = P.mkPrep "కు" ;
too_AdA = P.mkAdA "మరీ" ;
under_Prep = P.mkPrep "కింద" ;
want_VV = P.mkVV (P.mkV "కోరు") ;
whatPl_IP = {s = \\_ => "ఏవి" ; n = Pl} ;
whatSg_IP = {s = \\_ => "ఏది" ; n = Sg} ;
when_IAdv = {s = "ఎప్పుడు"} ;
where_IAdv = {s = "ఎక్కడ"} ;
which_IQuant = {s = \\_ => "ఏ"} ;
whoPl_IP = {s = \\c => case c of {Dir => "ఎవరు" ; Obl => "ఎవరి" ; Acc => "ఎవరిని"} ; n = Pl} ;
whoSg_IP = {s = \\c => case c of {Dir => "ఎవరు" ; Obl => "ఎవరి" ; Acc => "ఎవరిని"} ; n = Sg} ;
why_IAdv = {s = "ఎందుకు"} ;
without_Prep = P.mkPrep "లేకుండా" ;
when_Subj = {s = "అప్పుడు"} ; when_Subj = {s = "అప్పుడు"} ;
with_Prep = {s = "తో"} ; with_Prep = {s = "తో"} ;
youSg_Pron = personalPronoun P2 Sg ** {a = Ag Masc Sg P2} ; youSg_Pron = personalPronoun P2 Sg ** {a = Ag Masc Sg P2} ;
+12 -3
View File
@@ -12,6 +12,11 @@ concrete VerbTel of Verb = CatTel ** open ResTel, Prelude in {
comp = \\agr => case agr of {Ag g n _ => ap.s ! g ! n ! Dir} comp = \\agr => case agr of {Ag g n _ => ap.s ! g ! n ! Dir}
} ; } ;
SlashV2S v sent = predV v ** {
c2 = v.c2 ;
comp = \\_ => sent.s ++ "అని"
} ;
Slash2V3 v np = Slash2V3 v np =
let vp = insertObject np (predV v ** {c2 = v.c2}) let vp = insertObject np (predV v ** {c2 = v.c2})
in vp ** {c2 = v.c3} ; in vp ** {c2 = v.c3} ;
@@ -35,15 +40,19 @@ concrete VerbTel of Verb = CatTel ** open ResTel, Prelude in {
f.inf ++ f.fin f.inf ++ f.fin
} ; } ;
ComplVS v s = predV v ** {comp = \\_ => s.s} ; ComplVS v s = predV v ** {comp = \\_ => s.s ++ "అని"} ;
ComplVQ v q = predV v ** {comp = \\_ => q.s} ; ComplVQ v q = predV v ** {comp = \\_ => q.s ++ "అని"} ;
ComplVA v ap = predV v ** {comp = \\agr => case agr of { ComplVA v ap = predV v ** {comp = \\agr => case agr of {
Ag g n _ => ap.s ! g ! n ! Dir Ag g n _ => ap.s ! g ! n ! Dir
}} ; }} ;
VPSlashPrep vp prep = vp ** {
c2 = {s = prep.s ; c = VTransPost}
} ;
AdVVP adv vp = insertAdv adv.s vp ; AdVVP adv vp = insertAdv adv.s vp ;
UseComp comp = predV (regVerb []) ** {comp = comp.s} ; UseComp comp = predCopula ** {comp = comp.s} ;
CompAP ap = {s = \\agr => case agr of { CompAP ap = {s = \\agr => case agr of {
Ag g n _ => ap.s ! g ! n ! Dir Ag g n _ => ap.s ! g ! n ! Dir