summaryrefslogtreecommitdiff
path: root/next-lib/src/telugu/ResTel.gf
diff options
context:
space:
mode:
authoraarne <aarne@cs.chalmers.se>2008-09-23 09:52:10 +0000
committeraarne <aarne@cs.chalmers.se>2008-09-23 09:52:10 +0000
commitffb5b007488e4f36079d3c319c299fb865ce0497 (patch)
tree6ae623241f74428f8ef6ea6cffffa61f57b5c385 /next-lib/src/telugu/ResTel.gf
parent47abd5327d5f2764dbb3fa26c7fa98b76944b6c6 (diff)
started Telugu in next-lib
Diffstat (limited to 'next-lib/src/telugu/ResTel.gf')
-rw-r--r--next-lib/src/telugu/ResTel.gf303
1 files changed, 303 insertions, 0 deletions
diff --git a/next-lib/src/telugu/ResTel.gf b/next-lib/src/telugu/ResTel.gf
new file mode 100644
index 000000000..20e05f964
--- /dev/null
+++ b/next-lib/src/telugu/ResTel.gf
@@ -0,0 +1,303 @@
+--# -path=.:../abstract:../common:../../prelude
+
+--1 Teldi auxiliary operations.
+
+-- This module contains operations that are needed to make the
+-- resource syntax work.
+--
+resource ResTel = ParamX ** open Prelude in {
+
+ flags optimize=all ;
+
+ param
+ Case = Dir | Obl ;
+ Gender = Masc | Fem | Neutr ;
+
+ oper
+ Noun = {s : Number => Case => Str ; g : Gender} ;
+
+ 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 ;
+
+-- 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
+-- } ;
+--
+--
+}