mirror of
https://github.com/GrammaticalFramework/gf-rgl.git
synced 2026-10-30 02:33:17 -06:00
revitalize the Telugu grammar
This commit is contained in:
1 parent
fda7e1595d
commit
5dce027e68
22 files changed
+1998
-2160
No files matched your search
+253
-282
@@ -1,303 +1,274 @@
|
||||
--# -path=.:../abstract:../common:../../prelude
|
||||
|
||||
--1 Teldi auxiliary operations.
|
||||
--1 Telugu auxiliary operations.
|
||||
|
||||
-- This module contains operations that are needed to make the
|
||||
-- resource syntax work.
|
||||
--
|
||||
-- resource syntax work.
|
||||
|
||||
resource ResTel = ParamX ** open Prelude in {
|
||||
|
||||
flags optimize=all ;
|
||||
|
||||
param
|
||||
param
|
||||
Case = Dir | Obl ;
|
||||
Gender = Masc | Fem | Neutr ;
|
||||
|
||||
oper
|
||||
Noun = {s : Number => Case => Str ; g : Gender} ;
|
||||
|
||||
mkNoun : (x1,_,_,x4 : Str) -> Gender -> Noun =
|
||||
mkNoun : (x1,_,_,x4 : Str) -> Gender -> Noun =
|
||||
\sd,so,pd,po,g -> {
|
||||
s = table Number [table Case [sd;so] ; table Case [pd;po]] ;
|
||||
g = g
|
||||
} ;
|
||||
|
||||
wallNoun : Str -> Noun = \goda ->
|
||||
mkNoun goda goda (goda + "lu") (goda + "la") Neutr ;
|
||||
wallNoun : Str -> Noun = \goda ->
|
||||
mkNoun goda goda (goda + "లు") (goda + "ల") Neutr ;
|
||||
|
||||
reggNoun : Str -> Gender -> Noun = \s,g ->
|
||||
wallNoun s ** {g = g} ;
|
||||
|
||||
regNoun : Str -> Noun = wallNoun ;
|
||||
|
||||
|
||||
Adjective = {s : Gender => Number => Case => Str} ;
|
||||
|
||||
mkAdjective : (x1,x2,x3 : Str) -> Adjective = \smd,sm,f -> {
|
||||
s = \\g,n,c => case <g,n,c> of {
|
||||
<Masc,Sg,Dir> => smd ;
|
||||
<Masc> => sm ;
|
||||
_ => f
|
||||
}
|
||||
} ;
|
||||
|
||||
regAdjective : Str -> Adjective = \s -> mkAdjective s s s ;
|
||||
|
||||
param
|
||||
VForm =
|
||||
VInf
|
||||
| VStem
|
||||
| VImpf Gender Number
|
||||
| VPerf Gender Number
|
||||
| VSubj Number Person
|
||||
| VFut Number Person Gender
|
||||
| VAbs
|
||||
| VReq
|
||||
| VImp
|
||||
| VReqFut
|
||||
;
|
||||
|
||||
oper
|
||||
Verb = {s : VForm => Str} ;
|
||||
|
||||
mkVerb : (x1,_,_,_,_,_,_,_,_,_,_,_,_,_,x15 : Str) -> Verb =
|
||||
\inf,stem,ims,imp,ifs,ifp,pms,pmp,pfs,pfp,ss1,ss2,sp2,sp3,r -> {
|
||||
s =
|
||||
let ga : Number -> Gender -> Str = \_,_ -> []
|
||||
in table {
|
||||
VInf => inf ;
|
||||
VStem => stem ;
|
||||
VImpf Masc Sg => ims ;
|
||||
VImpf Masc Pl => imp ;
|
||||
VImpf Fem Sg => ifs ;
|
||||
VImpf Fem Pl => ifp ;
|
||||
VImpf Neutr Sg => ifs ;
|
||||
VImpf Neutr Pl => ifp ;
|
||||
VPerf Masc Sg => pms ;
|
||||
VPerf Masc Pl => pmp ;
|
||||
VPerf Fem Sg => pfs ;
|
||||
VPerf Fem Pl => pfp ;
|
||||
VPerf Neutr Sg => pfs ;
|
||||
VPerf Neutr Pl => pfp ;
|
||||
VSubj Sg P1 => ss1 ;
|
||||
VSubj Sg _ => ss2 ;
|
||||
VSubj Pl P2 => sp2 ;
|
||||
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 ;
|
||||
VReq => r ;
|
||||
VImp => sp2 ;
|
||||
VReqFut => r
|
||||
}
|
||||
} ;
|
||||
|
||||
regVerb : Str -> Verb = \cal ->
|
||||
mkVerb cal cal cal cal cal cal cal cal cal cal cal cal cal cal cal ;
|
||||
|
||||
param
|
||||
CTense = CPresent | CPast | CFuture ;
|
||||
oper
|
||||
copula : CTense -> Number -> Person -> Gender -> Str = \t,n,p,g ->
|
||||
case <t,n,p,g> of {
|
||||
_ => []
|
||||
} ;
|
||||
|
||||
param
|
||||
PronCase = PC Case | PObj | PPoss ;
|
||||
oper
|
||||
personalPronoun : Person -> Number -> {s : PronCase => Str} = \p,n ->
|
||||
case <p,n> of {
|
||||
<P1,Sg> => {s = table {PC Dir => "నేను" ; PC Obl => "నా" ; PObj => "నన్ను" ; PPoss => "నా"}} ;
|
||||
<P1,Pl> => {s = table {PC Dir => "మేము" ; PC Obl => "మా" ; PObj => "మమ్మల్ని" ; PPoss => "మా"}} ;
|
||||
<P2,Sg> => {s = table {PC Dir => "నువ్వు" ; PC Obl => "నీ" ; PObj => "నిన్ను" ; PPoss => "నీ"}} ;
|
||||
<P2,Pl> => {s = table {PC Dir => "మీరు" ; PC Obl => "మీ" ; PObj => "మిమ్మల్ని" ; PPoss => "మీ"}} ;
|
||||
<P3,Sg> => {s = table {PC Dir => "అతను" ; PC Obl => "అతని" ; PObj => "అతన్ని" ; PPoss => "అతని"}} ;
|
||||
<P3,Pl> => {s = table {PC Dir => "వారు" ; PC Obl => "వారి" ; PObj => "వారిని" ; PPoss => "వారి"}}
|
||||
} ;
|
||||
---- the third is the vocative - is it really this way?
|
||||
|
||||
-- the Telugu verb phrase
|
||||
|
||||
--- CTense = CPresent | CPast | CFuture ;
|
||||
|
||||
|
||||
|
||||
param
|
||||
VPHTense =
|
||||
VPGenPres -- impf hum nahim "I go"
|
||||
| VPImpPast -- impf Ta nahim "I went"
|
||||
| VPContPres -- stem raha hum nahim "I am going"
|
||||
| VPContPast -- stem raha Ta nahim "I was going"
|
||||
| VPPerf -- perf na/nahim "I went"
|
||||
| VPPerfPres -- perf hum na/nahim "I have gone"
|
||||
| VPPerfPast -- perf Ta na/nahim "I had gone"
|
||||
| VPSubj -- subj na "I may go"
|
||||
| VPFut -- fut na/nahim "I shall go"
|
||||
;
|
||||
|
||||
VPHForm =
|
||||
VPTense VPHTense Agr -- 9 * 12
|
||||
| VPReq
|
||||
| VPImp
|
||||
| VPReqFut
|
||||
| VPInf
|
||||
| VPStem
|
||||
;
|
||||
|
||||
VType = VIntrans | VTrans | VTransPost ;
|
||||
|
||||
oper
|
||||
objVType : VType -> NPCase = \vt -> case vt of {
|
||||
VTrans => NPObj ;
|
||||
_ => NPC Obl
|
||||
} ;
|
||||
|
||||
VPH : Type = {
|
||||
s : Polarity => VPHForm => {fin, inf, neg : Str} ;
|
||||
obj : {s : Str ; a : Agr} ;
|
||||
subj : VType ;
|
||||
comp : Agr => Str
|
||||
} ;
|
||||
|
||||
predV : Verb -> VPH = \verb -> {
|
||||
s = \\b,vh =>
|
||||
let
|
||||
na = case b of {Pos => []; Neg => "వద్దు" } ;
|
||||
negative = case b of {Pos => []; Neg => "లేదు"} ;
|
||||
in
|
||||
case vh of {
|
||||
VPTense VPGenPres (Ag g n p) =>
|
||||
{fin = copula CPresent n p g ; inf = verb.s ! VImpf g n ; neg = negative} ;
|
||||
VPTense VPImpPast (Ag g n p) =>
|
||||
{fin = copula CPast n p g ; inf = verb.s ! VImpf g n ; neg = negative} ;
|
||||
VPTense VPContPres (Ag g n p) =>
|
||||
{fin = copula CPresent n p g ;
|
||||
inf = verb.s ! VStem ++ progressive g n ; neg = negative} ;
|
||||
VPTense VPContPast (Ag g n p) =>
|
||||
{fin = copula CPast n p g ;
|
||||
inf = verb.s ! VStem ++ progressive g n ; neg = negative} ;
|
||||
VPTense VPPerf (Ag g n _) =>
|
||||
{fin = verb.s ! VPerf g n ; inf = [] ; neg = negative} ;
|
||||
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) =>
|
||||
{fin = copula CPast n p g ; inf = verb.s ! VPerf g n ; neg = negative} ;
|
||||
VPTense VPSubj (Ag _ n p) => {fin = verb.s ! VSubj n p ; inf = [] ; neg = na} ;
|
||||
VPTense VPFut (Ag g n p) => {fin = verb.s ! VFut n p g ; inf = [] ; neg = na} ;
|
||||
VPInf => {fin = verb.s ! VStem ; inf = [] ; neg = na} ;
|
||||
_ => {fin = verb.s ! VStem ; inf = [] ; neg = na} ----
|
||||
} ;
|
||||
obj = {s = [] ; a = defaultAgr} ;
|
||||
subj = VIntrans ;
|
||||
comp = \\_ => []
|
||||
} ;
|
||||
|
||||
progressive : Gender -> Number -> Str = \_,_ -> [] ;
|
||||
|
||||
VPHSlash = VPH ** {c2 : Compl} ;
|
||||
|
||||
Clause : Type = {s : VPHTense => Polarity => Str} ;
|
||||
|
||||
Compl : Type = {s : Str ; c : VType} ;
|
||||
|
||||
insertObject : NP -> VPHSlash -> VPH = \np,vps -> {
|
||||
s = vps.s ;
|
||||
obj = {s = vps.obj.s ++ np.s ! objVType vps.c2.c ++ vps.c2.s ; a = np.a} ;
|
||||
subj = vps.c2.c ;
|
||||
comp = vps.comp
|
||||
} ;
|
||||
|
||||
insertAdv : Str -> VPH -> VPH = \adv,vp -> vp ** {
|
||||
comp = \\agr => vp.comp ! agr ++ adv
|
||||
} ;
|
||||
|
||||
tenseVPH : Tense -> Anteriority -> VPHTense = \tense,ant ->
|
||||
case <tense,ant> of {
|
||||
<Pres,Simul> => VPGenPres ;
|
||||
<Past,Simul> => VPPerf ;
|
||||
<Fut, Simul> => VPFut ;
|
||||
<Cond,Simul> => VPSubj ;
|
||||
<Pres,Anter> => VPPerfPres ;
|
||||
<Past,Anter> => VPPerfPast ;
|
||||
<Fut, Anter> => VPPerf ;
|
||||
<Cond,Anter> => VPPerf
|
||||
} ;
|
||||
|
||||
positivePolarity : Polarity -> Bool = \pol -> case pol of {
|
||||
Pos => True ;
|
||||
Neg => False
|
||||
} ;
|
||||
|
||||
param
|
||||
Agr = Ag Gender Number Person ;
|
||||
NPCase = NPC Case | NPObj | NPErg ;
|
||||
|
||||
oper
|
||||
agrP3 : Gender -> Number -> Agr = \g,n -> Ag g n P3 ;
|
||||
|
||||
defaultAgr : Agr = agrP3 Masc Sg ;
|
||||
|
||||
npcase2case : NPCase -> Case = \npc -> case npc of {
|
||||
NPC c => c ;
|
||||
NPObj => Obl ;
|
||||
NPErg => Obl
|
||||
} ;
|
||||
|
||||
np2pronCase : NPCase -> PronCase = \np -> case np of {
|
||||
NPC c => PC c ;
|
||||
NPObj => PObj ;
|
||||
NPErg => PC Obl
|
||||
} ;
|
||||
|
||||
toNP : (Case => Str) -> NPCase -> Str = \pn, npc -> case npc of {
|
||||
NPC c => pn ! c ;
|
||||
NPObj => pn ! Obl ;
|
||||
NPErg => pn ! Obl
|
||||
} ;
|
||||
|
||||
NP : Type = {s : NPCase => Str ; a : Agr} ;
|
||||
|
||||
mkClause : NP -> VPH -> Clause = \np,vp -> {
|
||||
s = \\vt,b =>
|
||||
let
|
||||
subj = NPC Dir ;
|
||||
agr = np.a ;
|
||||
vps = vp.s ! b ! VPTense vt agr ;
|
||||
in
|
||||
np.s ! subj ++ vp.obj.s ++ vp.comp ! np.a ++ vps.neg ++ vps.inf ++ vps.fin
|
||||
} ;
|
||||
|
||||
|
||||
-- reggNoun : Str -> Gender -> Noun = \s,g -> case <s,g> of {
|
||||
-- <-(_ + ("A" | "I")), Fem> =>
|
||||
-- mkNoun s s s (s + "eM") (s + "oM") (s + "o") Fem ;
|
||||
-- _ => regNoun s ** {g = g}
|
||||
-- } ;
|
||||
--
|
||||
-- regNoun : Str -> Noun = \s -> case s of {
|
||||
-- x + "iyA" =>
|
||||
-- mkNoun s s s (x + "iyAM") (x + "iyoN") (x + "iyo") Fem ;
|
||||
-- x + "A" =>
|
||||
-- mkNoun s (x + "e") (x + "e") (x + "e") (x + "oN") (x + "o") Masc ;
|
||||
-- x + "I" =>
|
||||
-- mkNoun s s s (x + "iyAM") (x + "iyoN") (x + "iyo") Fem ;
|
||||
-- _ =>
|
||||
-- mkNoun s s s s (s + "oN") (s + "o") Masc
|
||||
-- } ;
|
||||
--
|
||||
--
|
||||
-- Adjective = {s : Gender => Number => Case => Str} ;
|
||||
--
|
||||
-- mkAdjective : (x1,x2,x3 : Str) -> Adjective = \smd,sm,f -> {
|
||||
-- s = \\g,n,c => case <g,n,c> of {
|
||||
-- <Masc,Sg,Dir> => smd ;
|
||||
-- <Masc> => sm ;
|
||||
-- _ => f
|
||||
-- }
|
||||
-- } ;
|
||||
--
|
||||
-- regAdjective : Str -> Adjective = \s -> case s of {
|
||||
-- acch + "A" => mkAdjective s (acch + "e") (acch + "I") ;
|
||||
-- _ => mkAdjective s s s
|
||||
-- } ;
|
||||
--
|
||||
-- param
|
||||
-- VForm =
|
||||
-- VInf
|
||||
-- | VStem
|
||||
-- | VImpf Gender Number
|
||||
-- | VPerf Gender Number
|
||||
-- | VSubj Number Person
|
||||
-- | VFut Number Person Gender
|
||||
-- | VAbs
|
||||
-- | VReq
|
||||
-- | VImp
|
||||
-- | VReqFut
|
||||
-- ;
|
||||
--
|
||||
-- oper
|
||||
-- Verb = {s : VForm => Str} ;
|
||||
--
|
||||
-- mkVerb : (x1,_,_,_,_,_,_,_,_,_,_,_,_,_,x15 : Str) -> Verb =
|
||||
-- \inf,stem,ims,imp,ifs,ifp,pms,pmp,pfs,pfp,ss1,ss2,sp2,sp3,r -> {
|
||||
-- s =
|
||||
-- let ga : Number -> Gender -> Str = \n,g ->
|
||||
-- (regAdjective "gA").s ! g ! n ! Dir
|
||||
-- in table {
|
||||
-- VInf => inf ;
|
||||
-- VStem => stem ;
|
||||
-- VImpf Masc Sg => ims ;
|
||||
-- VImpf Masc Pl => imp ;
|
||||
-- VImpf Fem Sg => ifs ;
|
||||
-- VImpf Fem Pl => ifp ;
|
||||
-- VPerf Masc Sg => pms ;
|
||||
-- VPerf Masc Pl => pmp ;
|
||||
-- VPerf Fem Sg => pfs ;
|
||||
-- VPerf Fem Pl => pfp ;
|
||||
-- VSubj Sg P1 => ss1 ;
|
||||
-- VSubj Sg _ => ss2 ;
|
||||
-- VSubj Pl P2 => sp2 ;
|
||||
-- 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 + "kar" ; --- ke
|
||||
-- VReq => r ;
|
||||
-- VImp => sp2 ;
|
||||
-- VReqFut => stem + "ie-gA"
|
||||
-- }
|
||||
-- } ;
|
||||
--
|
||||
-- regVerb : Str -> Verb = \cal ->
|
||||
-- let caly : Str = case cal of {
|
||||
-- _ + ("A" | "e") => cal + "y" ;
|
||||
-- c + "U" => c + "uy" ;
|
||||
-- c + "I" => c + "iy" ;
|
||||
-- _ => cal
|
||||
-- }
|
||||
-- in
|
||||
-- mkVerb
|
||||
-- (cal + "nA") cal
|
||||
-- (cal + "tA") (cal + "te") (cal + "tI") (cal + "tI")
|
||||
-- (caly + "A") (caly + "e") (caly + "I") (caly + "IN")
|
||||
-- (caly + "UM") (caly + "e") (caly + "o") (caly + "eN")
|
||||
-- (caly + "ie-") ;
|
||||
--
|
||||
-- param
|
||||
-- CTense = CPresent | CPast | CFuture ;
|
||||
-- oper
|
||||
-- copula : CTense -> Number -> Person -> Gender -> Str = \t,n,p,g ->
|
||||
-- case <t,n,p,g> of {
|
||||
-- <CPresent,Sg,P1,_ > => "hUM" ;
|
||||
-- <CPresent,Sg,P2,_ > => "hE" ;
|
||||
-- <CPresent,Sg,P3,_ > => "hE" ;
|
||||
-- <CPresent,Pl,P1,_ > => "hEN" ;
|
||||
-- <CPresent,Pl,P2,_ > => "ho" ;
|
||||
-- <CPresent,Pl,P3,_ > => "hEN" ;
|
||||
-- <CPast, Sg,_ ,Masc> => "TA" ;
|
||||
-- <CPast, Sg,_ ,Fem > => "TI" ;
|
||||
-- <CPast, Pl,_ ,Masc> => "Te" ;
|
||||
-- <CPast, Pl,_ ,Fem > => "TIN" ;
|
||||
-- <CFuture, Sg,P1,Masc> => "hUNgA" ;
|
||||
-- <CFuture, Sg,P1,Fem > => "hUNgI" ;
|
||||
-- <CFuture, Sg,_ ,Masc> => "hogA" ;
|
||||
-- <CFuture, Sg,_ ,Fem > => "hogI" ;
|
||||
-- <CFuture, Pl,P2,Masc> => "hoge" ;
|
||||
-- <CFuture, Pl,_ ,Masc> => "hoNge" ;
|
||||
-- <CFuture, Pl,P2,Fem > => "hogi:" ;
|
||||
-- <CFuture, Pl,_ ,Fem > => "hoNgi:"
|
||||
-- } ;
|
||||
--
|
||||
-- param
|
||||
-- PronCase = PC Case | PObj | PPoss ;
|
||||
-- oper
|
||||
-- personalPronoun : Person -> Number -> {s : PronCase => Str} = \p,n ->
|
||||
-- case <p,n> of {
|
||||
-- <P1,Sg> => {s = table PronCase ["mEN" ; "muJ" ; "muJ" ; "muJe" ; "merA"]} ;
|
||||
-- <P1,Pl> => {s = table PronCase ["ham" ; "ham" ; "ham" ; "hameN" ; "hamArA"]} ;
|
||||
-- <P2,Sg> => {s = table PronCase ["tU" ; "tuJ" ; "tuJ" ; "tuJe" ; "terA"]} ;
|
||||
-- <P2,Pl> => {s = table PronCase ["tum" ; "tum" ; "tum" ; "tum" ; "tumhArA"]} ;
|
||||
-- <P3,Sg> => {s = table PronCase ["vah" ; "u-s" ; "u-s" ; "u-se" ; "u-skA"]} ;
|
||||
-- <P3,Pl> => {s = table PronCase ["ve" ; "u-n" ; "u-n" ; "u-nheN" ; "u-nkA"]}
|
||||
-- } ;
|
||||
-- ---- the third is the vocative - is it really this way?
|
||||
--
|
||||
-- -- the Teldi verb phrase
|
||||
--
|
||||
----- CTense = CPresent | CPast | CFuture ;
|
||||
--
|
||||
--
|
||||
--
|
||||
-- param
|
||||
-- VPHTense =
|
||||
-- VPGenPres -- impf hum nahim "I go"
|
||||
-- | VPImpPast -- impf Ta nahim "I went"
|
||||
-- | VPContPres -- stem raha hum nahim "I am going"
|
||||
-- | VPContPast -- stem raha Ta nahim "I was going"
|
||||
-- | VPPerf -- perf na/nahim "I went"
|
||||
-- | VPPerfPres -- perf hum na/nahim "I have gone"
|
||||
-- | VPPerfPast -- perf Ta na/nahim "I had gone"
|
||||
-- | VPSubj -- subj na "I may go"
|
||||
-- | VPFut -- fut na/nahim "I shall go"
|
||||
-- ;
|
||||
--
|
||||
-- VPHForm =
|
||||
-- VPTense VPHTense Agr -- 9 * 12
|
||||
-- | VPReq
|
||||
-- | VPImp
|
||||
-- | VPReqFut
|
||||
-- | VPInf
|
||||
-- | VPStem
|
||||
-- ;
|
||||
--
|
||||
-- VType = VIntrans | VTrans | VTransPost ;
|
||||
--
|
||||
-- oper
|
||||
-- objVType : VType -> NPCase = \vt -> case vt of {
|
||||
-- VTrans => NPObj ;
|
||||
-- _ => NPC Obl
|
||||
-- } ;
|
||||
--
|
||||
-- VPH : Type = {
|
||||
-- s : Bool => VPHForm => {fin, inf, neg : Str} ;
|
||||
-- obj : {s : Str ; a : Agr} ;
|
||||
-- subj : VType ;
|
||||
-- comp : Agr => Str
|
||||
-- } ;
|
||||
--
|
||||
-- predV : Verb -> VPH = \verb -> {
|
||||
-- s = \\b,vh =>
|
||||
-- let
|
||||
-- na = if_then_Str b [] "na" ;
|
||||
-- nahim = if_then_Str b [] "nahIN" ;
|
||||
-- in
|
||||
-- case vh of {
|
||||
-- VPTense VPGenPres (Ag g n p) =>
|
||||
-- {fin = copula CPresent n p g ; inf = verb.s ! VImpf g n ; neg = nahim} ;
|
||||
-- VPTense VPImpPast (Ag g n p) =>
|
||||
-- {fin = copula CPast n p g ; inf = verb.s ! VImpf g n ; neg = nahim} ;
|
||||
-- VPTense VPContPres (Ag g n p) =>
|
||||
-- {fin = copula CPresent n p g ;
|
||||
-- inf = verb.s ! VStem ++ raha g n ; neg = nahim} ;
|
||||
-- VPTense VPContPast (Ag g n p) =>
|
||||
-- {fin = copula CPast n p g ;
|
||||
-- inf = verb.s ! VStem ++ raha g n ; neg = nahim} ;
|
||||
-- VPTense VPPerf (Ag g n _) =>
|
||||
-- {fin = verb.s ! VPerf g n ; inf = [] ; neg = nahim} ;
|
||||
-- VPTense VPPerfPres (Ag g n p) =>
|
||||
-- {fin = copula CPresent n p g ; inf = verb.s ! VPerf g n ; neg = nahim} ;
|
||||
-- VPTense VPPerfPast (Ag g n p) =>
|
||||
-- {fin = copula CPast n p g ; inf = verb.s ! VPerf g n ; neg = nahim} ;
|
||||
-- VPTense VPSubj (Ag _ n p) => {fin = verb.s ! VSubj n p ; inf = [] ; neg = na} ;
|
||||
-- VPTense VPFut (Ag g n p) => {fin = verb.s ! VFut n p g ; inf = [] ; neg = na} ;
|
||||
-- VPInf => {fin = verb.s ! VStem ; inf = [] ; neg = na} ;
|
||||
-- _ => {fin = verb.s ! VStem ; inf = [] ; neg = na} ----
|
||||
-- } ;
|
||||
-- obj = {s = [] ; a = defaultAgr} ;
|
||||
-- subj = VIntrans ;
|
||||
-- comp = \\_ => []
|
||||
-- } ;
|
||||
--
|
||||
-- raha : Gender -> Number -> Str = \g,n ->
|
||||
-- (regAdjective "rahA").s ! g ! n ! Dir ;
|
||||
--
|
||||
-- VPHSlash = VPH ** {c2 : Compl} ;
|
||||
--
|
||||
-- Clause : Type = {s : VPHTense => Bool => Str} ;
|
||||
--
|
||||
-- Compl : Type = {s : Str ; c : VType} ;
|
||||
--
|
||||
-- insertObject : NP -> VPHSlash -> VPH = \np,vps -> {
|
||||
-- s = vps.s ;
|
||||
-- obj = {s = vps.obj.s ++ np.s ! objVType vps.c2.c ++ vps.c2.s ; a = np.a} ;
|
||||
-- subj = vps.c2.c ;
|
||||
-- comp = vps.comp
|
||||
-- } ;
|
||||
--
|
||||
-- param
|
||||
-- Agr = Ag Gender Number Person ;
|
||||
-- NPCase = NPC Case | NPObj | NPErg ;
|
||||
--
|
||||
-- oper
|
||||
-- agrP3 : Gender -> Number -> Agr = \g,n -> Ag g n P3 ;
|
||||
--
|
||||
-- defaultAgr : Agr = agrP3 Masc Sg ;
|
||||
--
|
||||
-- npcase2case : NPCase -> Case = \npc -> case npc of {
|
||||
-- NPC c => c ;
|
||||
-- NPObj => Obl ;
|
||||
-- NPErg => Obl
|
||||
-- } ;
|
||||
--
|
||||
-- np2pronCase : NPCase -> PronCase = \np -> case np of {
|
||||
-- NPC c => PC c ;
|
||||
-- NPObj => PObj ;
|
||||
-- NPErg => PC Obl
|
||||
-- } ;
|
||||
--
|
||||
-- toNP : (Case => Str) -> NPCase -> Str = \pn, npc -> case npc of {
|
||||
-- NPC c => pn ! c ;
|
||||
-- NPObj => pn ! Obl ;
|
||||
-- NPErg => pn ! Obl ++ "ne"
|
||||
-- } ;
|
||||
--
|
||||
-- NP : Type = {s : NPCase => Str ; a : Agr} ;
|
||||
--
|
||||
-- mkClause : NP -> VPH -> Clause = \np,vp -> {
|
||||
-- s = \\vt,b =>
|
||||
-- let
|
||||
-- subjagr : NPCase * Agr = case vt of {
|
||||
-- VPPerf => case vp.subj of {
|
||||
-- VTrans => <NPErg, vp.obj.a> ;
|
||||
-- VTransPost => <NPErg, defaultAgr> ;
|
||||
-- _ => <NPC Dir, np.a>
|
||||
-- } ;
|
||||
-- _ => <NPC Dir, np.a>
|
||||
-- } ;
|
||||
-- subj = subjagr.p1 ;
|
||||
-- agr = subjagr.p2 ;
|
||||
-- vps = vp.s ! b ! VPTense vt agr ;
|
||||
-- in
|
||||
-- np.s ! subj ++ vp.obj.s ++ vp.comp ! np.a ++ vps.neg ++ vps.inf ++ vps.fin
|
||||
-- } ;
|
||||
--
|
||||
--
|
||||
}
|
||||
Reference in new issue
Block a user