1
0
forked from GitHub/gf-rgl

Added minimally functional Tamil

This commit is contained in:
Yap Jun Hong (Nemo)
2022-08-13 23:09:59 +08:00
parent 81218506d9
commit a6cfe58398
31 changed files with 3543 additions and 0 deletions

View File

@@ -50,3 +50,4 @@ Tha,Thai,thai,,to_thai,,,,,,y
Tur,Turkish,turkish,,,y,,,n,,n
Urd,Urdu,urdu,Hindustani,,,,,,,y
Som,Somali,somali,,,,,n,n,,n
Tam,Tamil,tamil,,,,,,,,n
1 Code Name Directory Functor Unlexer Present All Try Symbolic Compatibility Synopsis
50 Tur Turkish turkish y n n
51 Urd Urdu urdu Hindustani y
52 Som Somali somali n n n
53 Tam Tamil tamil n

View File

@@ -0,0 +1,9 @@
--# -path=.:alltenses:prelude
resource CombinatorsTam = Combinators - [ appCN, appCNc ] with
(Cat = CatTam),
(Structural = StructuralTam),
(Noun = NounTam),
(Constructors = ConstructorsTam) **
{}
}

View File

@@ -0,0 +1,5 @@
--# -path=.:alltenses:prelude:../malay
resource ConstructorsTam = Constructors with (Grammar = GrammarTam) **
open MissingTam in {} ;
}

6
src/api/SymbolicTam.gf Normal file
View File

@@ -0,0 +1,6 @@
--# -path=.:../malay:../common:../abstract:../prelude
resource SymbolicTam = Symbolic with
(Symbol = SymbolTam),
(Grammar = GrammarTam) ** open MissingTam in {} ;
}

6
src/api/SyntaxTam.gf Normal file
View File

@@ -0,0 +1,6 @@
--# -path=.:alltenses:prelude
instance SyntaxTam of Syntax =
ConstructorsTam, CatTam, StructuralTam, CombinatorsTam ;
}

4
src/api/TryTam.gf Normal file
View File

@@ -0,0 +1,4 @@
--# -path=.:../malay:../common:../abstract:../prelude
resource TryTam = SyntaxTam, LexiconTam, ParadigmsTam - [mkAdv,mkAdN,mkOrd,mkNum] ;
}

69
src/tamil/AdjectiveTam.gf Normal file
View File

@@ -0,0 +1,69 @@
concrete AdjectiveTam of Adjective = CatTam ** open ResTam, Prelude in {
-- flags optimize=all_subs ;
-- lin
-- -- : AP -> Adv -> AP ; -- warm by nature
-- AdvAP ap adv = ap ** {
-- s = ap.s ++ adv.s ;
-- } ;
-- -- : A -> AP ;
-- PositA a = a ** {
-- compar = [] ;
-- } ;
-- -- : A -> NP -> AP ;
-- ComparA a np = a ** {
-- compar = np.s
-- } ;
-- -- : A2 -> NP -> AP ; -- married to her
-- -- ComplA2 a2 np = a2 ** { } ;
-- -- : A2 -> AP ; -- married to itself
-- -- ReflA2 a2 = a2 ** { } ;
-- -- : A2 -> AP ; -- married
-- UseA2 = PositA ;
-- -- : A -> AP ; -- warmer
-- -- UseComparA a = a ** {
-- -- s = \\af => "???" ++ a.s ! af ;
-- -- compar = []
-- -- } ;
-- -- : CAdv -> AP -> NP -> AP ; -- as cool as John
-- -- CAdvAP adv ap np = ap ** { } ;
-- The superlative use is covered in $Ord$.
-- -- : Ord -> AP ; -- warmest
-- -- AdjOrd ord = ord ** {
-- -- compar = []
-- -- } ;
-- -- AdjOrd : Ord -> AP =
-- AdjOrd ord = ord ;
-- Sentence and question complements defined for all adjectival
-- phrases, although the semantics is only clear for some adjectives.
-- -- : AP -> SC -> AP ; -- good that she is here
-- -- SentAP ap sc = ap ** {
-- -- s = \\af => ap.s ! af ++ sc.s
-- -- } ;
-- An adjectival phrase can be modified by an *adadjective*, such as "very".
-- -- : AdA -> AP -> AP ;
-- -- AdAP ada ap = ap ** { } ;
-- It can also be postmodified by an adverb, typically a prepositional phrase.
--}
}

37
src/tamil/AdverbTam.gf Normal file
View File

@@ -0,0 +1,37 @@
concrete AdverbTam of Adverb = CatTam ** open ResTam, ParamTam, ParadigmsTam, Prelude in {
--lin
-- -- : A -> Adv ;
-- --PositAdvAdj adj = { } ;
-- -- : CAdv -> A -> NP -> Adv ; -- more warmly than John
-- -- ComparAdvAdj cadv a np = { } ;
-- ComparAdvAdjS : CAdv -> A -> S -> Adv ; -- more warmly than he runs
-- -- : Prep -> NP -> Adv ;
-- PrepNP prep np = {s = applyPrep prep np} ;
-- -- PrepNP to_Prep (UsePron youSg_Pron)
-- Adverbs can be modified by 'adadjectives', just like adjectives.
-- --AdAdv : AdA -> Adv -> Adv ; -- very quickly
-- -- AdAdv ada adv = adv **
-- Like adverbs, adadjectives can be produced by adjectives.
-- -- : A -> AdA ; -- extremely
-- -- PositAdAAdj a = { } ;
-- -- Subordinate clauses can function as adverbs.
-- -- : Subj -> S -> Adv ;
-- SubjS subj s = {s = subj.s ++ s.s} ;
-- Comparison adverbs also work as numeral adverbs.
-- --AdnCAdv : CAdv -> AdN ; -- less (than five)
-- --AdnCAdv cadv = {s = } ;
--} ;
}

9
src/tamil/AllTam.gf Normal file
View File

@@ -0,0 +1,9 @@
--# -path=.:../abstract:../common:../prelude
concrete AllTam of AllTamAbs =
LangTam,
ExtendTam
** open ParadigmsTam in {
-- lin sing_V2 = mkV2 "nyanyi" ;
-- } ;
}

9
src/tamil/AllTamAbs.gf Normal file
View File

@@ -0,0 +1,9 @@
--# -path=.:../abstract:../common:prelude
abstract AllTamAbs =
Lang,
Extend
** {
fun sing_V2: V2;
} ;
}

136
src/tamil/CatTam.gf Normal file
View File

@@ -0,0 +1,136 @@
concrete CatTam of Cat = CommonX - [IAdv] ** open ResTam, Prelude in {
-- flags optimize=all_subs ;
lincat
--2 Sentences and clauses
-- Constructed in SentenceTam, and also in IdiomTam
-- S = ResTam.Sentence ;
-- QS = SS ;
-- RS = ResTam.RS ;
-- -- relative sentence. Tense and polarity fixed,
-- -- but agreement may depend on the CN/NP it modifies.
-- Cl = ResTam.Clause ;
-- ClSlash = ResTam.ClSlash ;
-- SSlash = ResTam.Sentence ; -- sentence missing NP; e.g. "she has looked at"
-- Imp = {s : Number => Polarity => Str} ; -- imperative e.g. "look at this"
--2 Questions and interrogatives
-- Constructed in QuestionTam.
-- QCl = ResTam.Clause ;
-- IComp = {s: Str} ; -- interrogative complement of copula e.g. "where"
-- IDet = ResTam.Determiner ; -- interrogative determiner e.g. "how many"
-- IQuant = ResTam.IQuant ; -- interrogative quantifier e.g. "which"
-- IP = ResTam.IPhrase ; -- interrogative pronoun e.g. "who"
-- IAdv = ResTam.IAdv ;
--2 Subord clauses and pronouns
-- RCl = ResTam.RClause ;
-- RP = SS ;
--2 Verb phrases
-- Constructed in VerbTam.
-- VP = ResTam.VerbPhrase ;
-- VPSlash = ResTam.VPSlash ;
-- Comp = ResTam.VerbPhrase ;
--2 Adjectival phrases
-- Constructed in AdjectiveTam.
-- AP = ResTam.AdjPhrase ;
--2 Nouns and noun phrases
-- Constructed in NounTam.
-- Many atomic noun phrases e.g. "everybody"
-- are constructed in StructuralTam.
-- The determiner structure is
-- ``` Predet (QuantSg | QuantPl Num) Ord
-- as defined in NounTam.
CN = ResTam.CNoun ;
NP = ResTam.NounPhrase ;
-- Pron = ResTam.Pronoun ; --Pronouns need enough info to turn it into NP or Quant.
Det = ResTam.Determiner ;
-- Predet = SS ;
-- Quant = ResTam.Quant ;
Num = ResTam.Num ;
-- Ord = {
-- s : Str ; -- AForm => Str ; -- Ord can came from AP and become AP again
-- -- n : Number -- Ord can come from Num, which has inherent number
-- } ;
-- DAP = ResTam.Determiner ;
--2 Numerals
-- Constructed in NumeralTam.
-- Card = ResTam.CardNum ;
-- Numeral = ResTam.CardOrdNum ;
-- Digits = ResTam.DigNum ;
--2 Structural words
-- Constructed in StructuralTam.
-- Conj = {s2 : Str ; s1 : Str ; n : Number } ;
-- Subj = SS ;
-- Prep = ResTam.Preposition ;
--2 Words of open classes
-- These are constructed in LexiconTam and in
-- additional lexicon modules.
-- -- TODO: eventually different lincats
-- VS, -- sentence-complement verb e.g. "claim"
-- VQ, -- question-complement verb e.g. "wonder"
-- VA, -- adjective-complement verb e.g. "look"
-- V = ResTam.Verb ;
-- VV -- verb-phrase-complement verb e.g. "want"
-- = SS ;
-- V2A, -- verb with NP and AP complement e.g. "paint"
-- V2V, -- verb with NP and V complement e.g. "cause"
-- V2S, -- Reverb with NP and S complement e.g. "tell"
-- V2Q, -- verb with NP and Q complement e.g. "ask"
-- V2 = ResTam.Verb2 ;
-- V3 = ResTam.Verb3 ;
-- A = ResTam.Adjective ;
-- A2 = ResTam.Adjective2 ;
N = ResTam.Noun ;
-- N2 = ResTam.Noun2 ;
-- N3 = ResTam.Noun3 ;
-- PN = ResTam.PNoun ;
-- linref
-- CN = \cn -> cn.s ! NF Sg Bare ++ cn.heavyMod;
-- ClSlash = \cl -> cl.subj ++ cl.pred ! Root ! Pos ++ cl.c2.s;
-- RCl = \cl -> cl.subj ++ cl.pred ! P1 ! Pos;
-- Cl = \cl -> cl.subj ++ cl.pred ! Active ! Pos;
-- Det = linDet ;
--}
-- Determiner : Type = Quant ** {
-- pr : Str ; -- prefix for numbers
-- n : NumType ; -- number as in 5 (noun in singular), Sg or Pl
-- } ;
}

View File

@@ -0,0 +1,98 @@
concrete ConjunctionTam of Conjunction =
CatTam ** open ResTam, Coordination, Prelude in {
-- flags optimize=all_subs ;
-- {- Conjunction for category X needs four things:
-- lincat [X]
-- lin BaseX
-- lin ConsX
-- lin ConjX
-- For example, if X is defined as
-- lincat X = {s : Number => Str ; g : Gender} ;
-- then [X] will split its s field into two, and retain its other fields as is:
-- lincat [X] = {s1,s2 : Number => Str ; g : Gender} ;
-- Let us look at a simple case: Adv is of type {s : Str}
-- Then [Adv] is {s1,s2 : Str}.
-- BaseAdv, ConsAdv and ConjAdv can all use functions defined in prelude/Coordination:
-- BaseAdv = twoSS ;
-- ConsAdv = consrSS comma ;
-- ConjAdv = conjunctSS ;
-- --}
-- Adverb and other simple {s : Str} types.
--lincat
-- [Adv],[AdV],[IAdv] = {s1,s2 : Str} ;
--lin
-- BaseAdv, BaseAdV, BaseIAdv = twoSS ;
-- ConsAdv, ConsAdV, ConsIAdv = consrSS comma ;
-- ConjAdv, ConjAdV, ConjIAdv = conjunctDistrSS ;
--{-
-- RS depends on X, Y and Z, otherwise exactly like previous.
-- RS can modify CNs, which are open for …, and have inherent …
--lincat
-- [RS] = {s1,s2 : … => Str} ;
--lin
-- BaseRS = twoTable3 … ;
-- ConsRS = consrTable3 … comma ;
-- ConjRS = conjunctRSTable ;
--lincat
-- [S] = {} ;
--lin
-- BaseS x y = y ** { } ;
-- ConsS x xs =
-- xs ** { } ;
-- ConjS co xs = {} ;
--lincat
-- [AP] = {} ;
--lin
-- BaseAP x y = twoTable … x y ** y ; --choose all the other fields from second argument
-- ConsAP as a = consrTable … comma as a ** as ;
-- ConjAP co as = conjunctDistrTable … co as ** as ;
--lincat
-- [CN] = { } ;
--lin
-- BaseCN = {} ;
-- ConsCN = {} ;
-- ConjCN co cs = conjunctDistrTable Agr co cs ** cs ;
--lincat
-- [DAP] =
--lin
-- BaseDAP x y = x **
-- ConsDAP xs x = xs **
-- ConjDet conj xs = xs **
-- Noun phrases
--lincat
-- [NP] =
--lin
-- BaseNP x y =
-- ConsNP x xs =
-- ConjNP conj xs =
---}
--}
}

View File

@@ -0,0 +1,120 @@
concrete ConstructionTam of Construction = CatTam ** open ParadigmsTam in {
--lincat
-- Timeunit = N ;
-- Weekday = N ;
-- Monthday = NP ;
-- Month = N ;
-- Year = NP ;
--{-
--lin
-- timeunitAdv n time =
-- let n_card : Card = n ;
-- n_hours_NP : NP = mkNP n_card time ;
-- in SyntaxTam.mkAdv for_Prep n_hours_NP | mkAdv (n_hours_NP.s ! R.npNom) ;
-- weekdayPunctualAdv w = ; -- on Sunday
-- weekdayHabitualAdv w = ; -- on Sundays
-- weekdayNextAdv w = -- next Sunday
-- weekdayLastAdv w = -- last Sunday
-- monthAdv m = mkAdv in_Prep (mkNP m) ;
-- yearAdv y = mkAdv in_Prep y ;
-- dayMonthAdv d m = ; -- on 17 Tam
-- monthYearAdv m y = ; -- in Tam 2012
-- dayMonthYearAdv d m y = ; -- on 17 Tam 2013
-- intYear = symb ;
-- intMonthday = symb ;
--lincat Language = N ;
--lin InLanguage l = mkAdv ???_Prep (mkNP l) ;
--lin
-- weekdayN w = w ;
-- monthN m = m ;
-- weekdayPN w = mkPN w ;
-- monthPN m = mkPN m ;
-- languageCN l = mkCN l ;
-- languageNP l = mkNP l ;
--oper mkLanguage : Str -> N = \s -> mkN s ;
----------------------------------------------
---- lexicon of special names
--lin second_Timeunit = mkN "second" ;
--lin minute_Timeunit = mkN "minute" ;
--lin hour_Timeunit = mkN "hour" ;
--lin day_Timeunit = mkN "day" ;
--lin week_Timeunit = mkN "week" ;
--lin month_Timeunit = mkN "month" ;
--lin year_Timeunit = mkN "year" ;
--lin monday_Weekday = mkN "Monday" ;
--lin tuesday_Weekday = mkN "Tuesday" ;
--lin wednesday_Weekday = mkN "Wednesday" ;
--lin thursday_Weekday = mkN "Thursday" ;
--lin friday_Weekday = mkN "Friday" ;
--lin saturday_Weekday = mkN "Saturday" ;
--lin sunday_Weekday = mkN "Sunday" ;
--lin january_Month = mkN "January" ;
--lin february_Month = mkN "February" ;
--lin march_Month = mkN "March" ;
--lin april_Month = mkN "April" ;
--lin may_Month = mkN "May" ;
--lin june_Month = mkN "June" ;
--lin july_Month = mkN "July" ;
--lin august_Month = mkN "August" ;
--lin september_Month = mkN "September" ;
--lin october_Month = mkN "October" ;
--lin november_Month = mkN "November" ;
--lin december_Month = mkN "December" ;
--lin afrikaans_Language = mkLanguage "Afrikaans" ;
--lin amharic_Language = mkLanguage "Amharic" ;
--lin arabic_Language = mkLanguage "Arabic" ;
--lin bulgarian_Language = mkLanguage "Bulgarian" ;
--lin catalan_Language = mkLanguage "Catalan" ;
--lin chinese_Language = mkLanguage "Chinese" ;
--lin danish_Language = mkLanguage "Danish" ;
--lin dutch_Language = mkLanguage "Dutch" ;
--lin english_Language = mkLanguage "Euslish" ;
--lin estonian_Language = mkLanguage "Estonian" ;
--lin finnish_Language = mkLanguage "Finnish" ;
--lin french_Language = mkLanguage "French" ;
--lin german_Language = mkLanguage "German" ;
--lin greek_Language = mkLanguage "Greek" ;
--lin hebrew_Language = mkLanguage "Hebrew" ;
--lin hindi_Language = mkLanguage "Hindi" ;
--lin japanese_Language = mkLanguage "Japanese" ;
--lin italian_Language = mkLanguage "Italian" ;
--lin latin_Language = mkLanguage "Latin" ;
--lin latvian_Language = mkLanguage "Latvian" ;
--lin maltese_Language = mkLanguage "Maltese" ;
--lin nepali_Language = mkLanguage "Nepali" ;
--lin norwegian_Language = mkLanguage "Norwegian" ;
--lin persian_Language = mkLanguage "Persian" ;
--lin polish_Language = mkLanguage "Polish" ;
--lin punjabi_Language = mkLanguage "Punjabi" ;
--lin romanian_Language = mkLanguage "Romanian" ;
--lin russian_Language = mkLanguage "Russian" ;
--lin sindhi_Language = mkLanguage "Sindhi" ;
--lin spanish_Language = mkLanguage "Spanish" ;
--lin swahili_Language = mkLanguage "Swahili" ;
--lin swedish_Language = mkLanguage "Swedish" ;
--lin thai_Language = mkLanguage "Thai" ;
--lin turkish_Language = mkLanguage "Turkish" ;
--lin urdu_Language = mkLanguage "Urdu" ;
--—}
--}
---}
--}
}

106
src/tamil/ExtendTam.gf Normal file
View File

@@ -0,0 +1,106 @@
--# -path=.:../common:../abstract
concrete ExtendTam of Extend = CatTam
** ExtendFunctor - [
VPS -- finite VP's with tense and polarity
, ListVPS
, VPI
, ListVPI -- infinitive VP's (TODO: with anteriority and polarity)
, MkVPS
, PredVPS
-- excluded because RGL funs needed for them not implemented yet
, SlashBareV2S
, PredAPVP
, ComplBareVS
,PresPartAP, PastPartAP
,GenModNP, GenNP, GenRP
,CompoundN
,GerundNP
-- VPS2 ; -- have loved (binary version of VPS)
-- [VPS2] {2} ; -- has loved, hates"
-- VPI2 ; -- to love (binary version of VPI)
-- [VPI2] {2} ; -- to love, to hate
]
with (Grammar=GrammarTam)
** open Prelude, Coordination, ResTam, NounTam in {
-- lincat
-- VPS, VPI = SS ;
-- ListVPS, ListVPI = ListX ;
-- lin
-- -- MkVPS : Temp -> Pol -> VP -> VPS ; -- hasn't slept
-- MkVPS t p vp = {
-- s = t.s ++ p.s ++ vp.s ! Active ! p.p;
-- } ;
-- -- BaseVPS : VPS -> VPS -> ListVPS ;
-- BaseVPS vps vps2 = twoSS vps vps2 ;
-- -- ConsVPS : VPS -> ListVPS -> ListVPS ;
-- ConsVPS str listvps vps = consSS "," listvps vps ;
-- -- ConjVPS : Conj -> [VPS] -> VPS ; -- has walked and won't sleep
-- ConjVPS conj listvps = conjunctX conj listvps ;
-- -- PredVPS : NP -> VPS -> S ; -- she [has walked and won't sleep]
-- PredVPS np vps = {
-- s = np.s ! Bare ++ vps.s ;
-- } ;
-- -- SQuestVPS : NP -> VPS -> QS ; -- has she walked
-- -- QuestVPS : IP -> VPS -> QS ; -- who has walked
-- -- RelVPS : RP -> VPS -> RS ; -- which won't sleep
-- -- MkVPI : VP -> VPI ; -- to sleep (TODO: Ant and Pol)
-- MkVPI vp = {s = linVP vp} ;
-- -- BaseVPI : VPI -> VPI -> ListVPI ;
-- BaseVPI vpi vpi2 = twoSS vpi vpi2 ;
-- -- ConsVPI : VPI -> ListVPI -> ListVPI ;
-- ConsVPI str listvpi vpi = consSS "," listvpi vpi ;
-- -- ConjVPI : Conj -> [VPI] -> VPI ; -- to sleep and to walk
-- -- ComplVPIVV : VV -> VPI -> VP ; -- must sleep and walk
-- ComplVPIVV vv vpi = useV {
-- s = \\vf => vv.s ++ vpi.s
-- } ;
-- -- PresPartAP : VP -> AP ; -- (the man) looking at Mary
-- PresPartAP vp = {
-- s = linVP vp
-- } ;
-- PastPartAP vp = {
-- s = linVP vp
-- } ;
-- -- GenModNP : Num -> NP -> CN -> NP ; -- this man's car(s)
-- GenModNP n np cn = variants {};
-- -- GenNP : NP -> Quant ; -- this man's
-- GenNP np = variants {};
-- -- GenRP : Num -> CN -> RP ; -- whose car
-- GenRP n cn = variants {};
-- -- CompoundN : N -> N -> N ; -- control system / controls system / control-system
-- CompoundN n1 n2 = n2 ** {
-- s = \\nf => n1.s ! NF Sg Bare ++ n2.s ! nf
-- } ;
-- -- GerundNP : VP -> NP ; -- publishing the document (by nature definite)
-- GerundNP vp = emptyNP ** {
-- s = \\_ => linVP vp
-- } ;
-- -- MkVPS2 : Temp -> Pol -> VPSlash -> VPS2 ; -- has loved
-- -- ConjVPS2 : Conj -> [VPS2] -> VPS2 ; -- has loved and now hates
-- -- ComplVPS2 : VPS2 -> NP -> VPS ; -- has loved and now hates that person
-- -- ReflVPS2 : VPS2 -> RNP -> VPS ; -- have loved and now hate myself and my car
-- -- MkVPI2 : VPSlash -> VPI2 ; -- to love
-- -- ConjVPI2 : Conj -> [VPI2] -> VPI2 ; -- to love and hate
-- -- ComplVPI2 : VPI2 -> NP -> VPI ; -- to love and hate that person
--} ;
}

25
src/tamil/GrammarTam.gf Normal file
View File

@@ -0,0 +1,25 @@
concrete GrammarTam of Grammar =
NounTam,
VerbTam,
AdjectiveTam,
AdverbTam,
NumeralTam,
SentenceTam,
QuestionTam,
RelativeTam,
ConjunctionTam,
PhraseTam,
TextX - [AAnter, TFut, TCond, IAdv],
StructuralTam,
IdiomTam,
TenseX - [AAnter, TFut, TCond, IAdv]
** open ParamX in {
-- flags startcat = Phr ;
-- lin AAnter = {s = "sudah" ; a = ParamX.Anter} ; --# notpresent
-- TFut = {s = "akan" ; t = ParamX.Fut} ; --# notpresent
-- TCond = {s = "akan" ; t = ParamX.Cond} ; --# notpresent
--} ;
}

59
src/tamil/IdiomTam.gf Normal file
View File

@@ -0,0 +1,59 @@
--1 Idiom: Idiomatic Expressions
concrete IdiomTam of Idiom = CatTam ** open Prelude, ResTam, VerbTam, QuestionTam, NounTam, StructuralTam in {
-- This module defines constructions that are formed in fixed ways,
-- often different even in closely related languages.
-- lin
-- -- ImpersCl : VP -> Cl ; -- it is hot
-- ImpersCl vp = {
-- subj = [] ;
-- pred = \\vf,pol => vp.s ! Root ! pol -- force no prefix -- TODO check if legit?
-- } ;
-- -- : NP -> Cl ; -- there is a house
-- ExistNP np = predVP np (useV copula) ;
-- -- ExistIP : IP -> QCl ; -- which houses are there
-- ExistIP ip = QuestVP ip (useV copula) ;
-- -- GenericCl : VP -> Cl ; -- one sleeps
-- GenericCl = \vp -> predVP emptyNP vp ;
--{-
-- CleftNP : NP -> RS -> Cl ; -- it is I who did it
-- CleftAdv : Adv -> S -> Cl ; -- it is here she slept
-- -- : NP -> Cl ; -- there is a house
-- ExistNP np =
-- ExistIP : IP -> QCl ; -- which houses are there
-- 7/12/2012 generalizations of these
-- ExistNPAdv : NP -> Adv -> Cl ; -- there is a house in Paris
-- ExistIPAdv : IP -> Adv -> QCl ; -- which houses are there in Paris
-- -- : VP -> VP ;
-- ProgrVP vp = vp ** {
-- } ;
-- -- : VP -> Utt ; -- let's go
-- ImpPl1 vp = { } ;
-- ImpP3 : NP -> VP -> Utt ; -- let John walk
-- 3/12/2013 non-reflexive uses of "self"
-- SelfAdvVP : VP -> VP ; -- is at home himself
-- SelfAdVVP : VP -> VP ; -- is himself at home
-- SelfNP : NP -> NP ; -- the president himself (is at home)
---}
--}
}

6
src/tamil/LangTam.gf Normal file
View File

@@ -0,0 +1,6 @@
--# -path=.:../abstract:../common:../prelude:../api
concrete LangTam of Lang =
GrammarTam,
LexiconTam,
ConstructionTam ;

431
src/tamil/LexiconTam.gf Normal file
View File

@@ -0,0 +1,431 @@
concrete LexiconTam of Lexicon = CatTam **
open ParadigmsTam, ResTam in {
----
-- A
-- lin add_V3 = mkV3 "" ;
--lin airplane_N = mkN "" ;
-- lin alas_Interj = mkInterj "" ;
--lin already_Adv = mkA "" ;
--lin animal_N = mkN "" ;
-- lin answer_V2S = mkV2S "" ;
--lin apartment_N = mkN "" ;
--lin apple_N = mkN "" ;
--lin art_N = mkN "" ;
--lin ashes_N = mkN "" ;
--lin ask_V2Q = mkV2 "" ;
----
-- B
--lin baby_N = mkN "" ;
--lin back_N = mkN "" ;
-- lin bad_A = mkA "" ;
--lin bank_N = mkN "" ;
-- lin bark_N = mkN "" ;
--lin beautiful_A = mkA "" ;
-- lin become_VA = mkVA "" ;
--lin beer_N = mkN "" ;
-- lin beg_V2V = mkV2 "" ;
-- lin belly_N = mkN "" ;
--lin big_A = mkA "" ;
--lin bike_N = mkN "" ;
--lin bird_N = mkN "" ;
-- lin bite_V2 = mkV2 "" ;
--lin black_A = mkA "" ;
--lin blood_N = mkN "" ;
-- lin blow_V = mkV "" ;
--lin blue_A = mkA "" ;
--lin boat_N = mkN "" ;
--lin bone_N = mkN "" ;
-- lin boot_N = mkN "" ;
-- lin boss_N = mkN "" ;
--lin book_N = mkN "" ;
-- lin boy_N = mkN "" ;
--lin bread_N = mkN "" ;
--lin break_V2 = mkV4 "" ;
-- lin breast_N = mkN "" ;
-- lin breathe_V = mkV "" ;
-- lin broad_A = mkA "" ;
-- lin brother_N2 = mkN "";
-- lin brown_A = mkA "" ;
--lin burn_V = mkV "" ;
--lin butter_N = mkN "" ;
--lin buy_V2 = mkV2 "" ;
----
-- C
-- lin camera_N = mkN "" ;
-- lin cap_N = mkN "" ;
--lin car_N = mkN "kereta" ;
-- lin carpet_N = mkN "" ;
--lin cat_N = mkN "kucing" ;
-- lin ceiling_N = mkN "" ;
-- lin chair_N = mkN "" ;
-- lin cheese_N = mkN "" ;
-- lin child_N = mkN "" ;
-- lin church_N = mkN "" ;
-- lin city_N = mkN "" ;
--lin clean_A = mkA "" ;
-- lin clever_A = mkA "" ;
-- lin close_V2 = mkV2 "" ;
--lin cloud_N = mkN "" ;
-- lin coat_N = mkN "" ;
-- lin cold_A = mkA "" ;
--lin come_V = mkV "" ;
-- lin computer_N = mkN "" ;
-- lin correct_A = mkA "" ;
-- lin count_V2 = mkV2 "" ;
-- lin country_N = mkN "" ;
-- lin cousin_N = mkN "" ;
--lin cow_N = mkN "" ;
-- lin cut_V2 = mkV2 "" ;
----
-- D
-- lin day_N = mkN "" ;
-- lin die_V = mkV "" ;
-- lin dig_V = mkV "" ;
-- lin dirty_A = mkA "" ;
-- lin distance_N3 = mkN "" ;
-- lin do_V2 = lin V2 "" ;
-- lin doctor_N = mkN "" ;
--lin dog_N = mkN "" ;
--lin door_N = mkN "" ;
--lin drink_V2 = let drink' : V2 = mkV2 "minum" in drink' ** {
-- s = \\_ => "" ;
--};
-- lin dry_A = mkA "" ;
-- lin dull_A = mkA "" ;
-- lin dust_N = mkN "" ;
----
-- E
-- lin ear_N = mkN "" ;
-- lin earth_N = mkN "" ;
--lin eat_V2 = let eat' : V2 = mkV2 "makan" in eat' ** {
-- s = \\_ => "makan" ;
--};
-- lin egg_N = mkN "" ;
-- lin empty_A = mkA "" ;
-- lin enemy_N = mkN "" ;
-- lin eye_N = mkN "" ;
----
-- F
-- lin factory_N = mkN "" ;
-- lin fall_V = mkV "" ;
-- lin far_Adv = mkA "" ;
-- lin fat_N = mkN "" ;
--lin father_N2 = mkN2 "" ;
-- lin fear_V2 = mkV2 "" ;
-- lin fear_VS = mkVS "" ;
-- lin feather_N = mkN "" ;
-- lin fight_V2 = mkV2 "" ;
-- lin find_V2 = mkV2 "" ;
-- lin fingernail_N = mkN "" ;
-- lin fire_N = mkN "" ;
-- lin fish_N = mkN "" ;
-- lin float_V = mkV "" ;
-- lin floor_N = mkN "" ;
-- lin flow_V = mkV "" ;
-- lin flower_N = mkN "" ;
-- lin fly_V = mkV "" ;
-- lin fog_N = mkN "" ;
-- lin foot_N = mkN "" ;
-- lin forest_N = mkN "" ;
-- lin forget_V2 = mkV2 "" ;
-- lin freeze_V = mkV "" ;
-- lin fridge_N = mkN "" ;
-- lin friend_N = mkN "" ;
-- lin fruit_N = mkN "" ;
-- lin full_A = mkA "" ;
-- --lin fun_AV
----
-- G
-- lin garden_N = mkN "" ;
-- lin girl_N = mkN "" ;
--lin give_V3 = mkV3 "" ;
-- lin glove_N = mkN "" ;
--lin go_V = mkV "" ;
-- lin gold_N = mkN "" ;
-- lin good_A = mkA "" ;
-- lin grammar_N = mkN "" ;
-- lin grass_N = mkN "" ;
--lin green_A = mkA "" ;
----
-- H
-- lin hair_N = mkN "" ;
-- lin hand_N = mkN "" ;
-- lin harbour_N = mkN "" ;
-- lin hat_N = mkN "" ;
-- lin hate_V2 = mkV2 "" ;
-- lin head_N = mkN "" ;
-- lin hear_V2 = mkV2 "" ;
-- lin heart_N = mkN "" ;
-- lin heavy_A = mkA "" ;
-- lin hill_N = mkN "" ;
--lin hit_V2 = mkV2 "" ;
-- lin hold_V2 = mkV2 "" ;
-- lin hope_VS = mkV "" ;
-- lin horn_N = mkN "" ;
-- lin horse_N = mkN "" ;
-- lin hot_A = mkA "" ;
lin house_N = mkN "vittu" "vittu" ;
-- lin hunt_V2 = mkV2 "" ;
-- lin husband_N = mkN "" ;
--------
-- I - K
-- lin ice_N = mkN "" ;
-- lin industry_N = mkN "" ;
-- lin iron_N = mkN "" ;
--lin john_PN = mkPN "" ;
-- lin jump_V = mkV "" ;
-- lin kill_V2 = mkV2 "" ;
--lin king_N = mkN "" ;
-- lin knee_N = mkN "" ;
-- lin know_V2 = mkV2 "" ;
-- lin know_VQ = mkVQ "" ;
-- lin know_VS = mkV "" ;
----
-- L
-- lin lake_N = mkN "" ;
-- lin lamp_N = mkN "" ;
-- lin language_N = mkN "" ;
-- lin laugh_V = mkV "" ;
-- lin leaf_N = mkN "" ;
--lin learn_V2 = mkV2 (prefixV (mkV "ajar" Ber)) emptyPrep ;
-- lin leather_N = mkN "" ;
-- lin leave_V2 = mkV2 "" ;
-- lin leg_N = mkN "" ;
-- lin lie_V = mkV "" ;
--lin like_V2 = let like' : V2 = mkV2 "suka" in like' ** {
-- s = \\_ => "suka" ;
-- passive = "disukai" ;
--} ;
-- lin listen_V2 = mkV2 "" ;
-- lin live_V = mkV "";
-- lin liver_N = mkN "" ;
--lin long_A = mkA "" ;
-- lin lose_V2 = mkV2 "" ;
-- lin louse_N = mkN "" ;
-- lin love_N = mkN "" ;
-- lin love_V2 = let love' : V2 = mkV2 "cinta" in love' ** {
-- s = \\_ => "mencintai" ;
-- passive = "dicintai" ;
-- } ;
--lin love_V2 = mkV4 "" "";
----
-- M
--lin man_N = mkN "lelaki" ;
-- lin married_A2 = mkA "" ;
--lin meat_N = mkN "daging" ;
--lin milk_N = mkN "susu" ;
-- lin moon_N = mkN "" ;
--lin mother_N2 = mkN2 "ibu" ;
-- lin mountain_N = mkN "" ;
-- lin mouth_N = mkN "" ;
-- lin music_N = mkN "" ;
----
-- N
-- lin name_N = mkN "" ;
-- lin narrow_A = mkA "" ;
-- lin near_A = mkA "" ;
-- lin neck_N = mkN "" ;
-- lin new_A = mkA "" ;
-- lin newspaper_N = mkN "" ;
-- lin night_N = mkN "" ;
-- lin nose_N = mkN "" ;
--lin now_Adv = mkAdv "sekarang" ;
-- lin number_N = mkN "" ;
--------
-- O - P
-- lin oil_N = mkN "" ;
--lin old_A = mkA "tua" ;
--lin open_V2 = mkV2 "buka" ;
--lin paint_V2A = mkV2 "cat" ;
-- lin paper_N = mkN "" ;
-- lin paris_PN = mkPN "Paris" ;
-- lin peace_N = mkN "" ;
-- lin pen_N = mkN "" ;
--lin person_N = mkN "orang" ;
-- lin planet_N = mkN "" ;
-- lin plastic_N = mkN "" ;
-- lin play_V = mkV "" ;
-- lin policeman_N = mkN "" ;
-- lin priest_N = mkN "" ;
-- lin pull_V2 = mkV2 "" ;
-- lin push_V2 = mkV2 "" ;
-- lin put_V2 = mkV2 "" ;
--------
-- Q - R
--lin queen_N = mkN "ratu" ;
-- lin question_N = mkN "" ;
-- lin radio_N = mkN "" ;
--lin rain_N = mkN "hujan" ;
--lin rain_V0 = mkV "hujan" ;
--lin read_V2 = mkV2 "baca" ;
-- lin ready_A = mkA "" ;
-- lin reason_N = mkN "" ;
-- lin red_A = mkA "" ;
-- lin religion_N = mkN "" ;
-- lin restaurant_N = mkN "" ;
-- lin river_N = mkN "" ;
-- lin road_N = mkN "" ;
-- lin rock_N = mkN "" ;
-- lin roof_N = mkN "" ;
-- lin root_N = mkN "" ;
-- lin rope_N = mkN "" ;
-- lin rotten_A = mkA "" ;
-- lin round_A = mkA "" ;
-- lin rub_V2 = mkV2 "" ;
-- lin rubber_N = mkN "" ;
--lin rule_N = mkN "peraturan" ;
-- lin run_V = mkV "" ;
----
-- S
-- lin salt_N = mkN "" ;
-- lin sand_N = mkN "" ;
-- lin say_VS = mkVS "" ;
--lin school_N = mkN "sekolah" ;
--lin science_N = mkN "sains" ;
-- lin scratch_V2 = mkV2 "" ;
-- lin sea_N = mkN "" ;
--lin see_V2 = mkV2 "lihat" ;
-- lin seed_N = mkN "" ;
-- lin seek_V2 = mkV2 "" ;
-- lin sell_V3 = mkV3 (mkV "jual" Meng) emptyPrep emptyPrep ; -- TODO
-- lin send_V3 = mkV3 "" ;
-- lin sew_V = mkV "" ;
-- lin sharp_A = mkA "" ;
-- lin sheep_N = mkN "" fem ;
-- lin ship_N = mkN "" ;
-- lin shirt_N = mkN "" ;
-- lin shoe_N = mkN "" ;
-- lin shop_N = mkN "" ;
-- lin short_A = mkA "" ;
-- lin silver_N = mkN "" ;
--lin sing_V = mkV "nyanyi" ;
-- lin sister_N = mkN "" ;
-- lin sit_V = mkV "" ;
-- lin skin_N = mkN "" ;
-- lin sky_N = mkN "" ;
-- lin sleep_V = mkV "" ;
--lin small_A = mkA "kecil" ;
-- lin smell_V = mkV "" ;
-- lin smoke_N = mkN "" ;
-- lin smooth_A = mkA "" ;
-- lin snake_N = mkN "" ;
-- lin snow_N = mkN "" ;
-- lin sock_N = mkN "" ;
--lin song_N = mkN "lagu" ;
-- lin speak_V2 = mkV2 "" ;
-- lin spit_V = mkV "" ;
-- lin split_V2 = mkV2 "" ;
-- lin squeeze_V2 = mkV2 "" ;
-- lin stab_V2 = mkV2 "" ;
-- lin stand_V = mkV "" ;
-- lin star_N = mkN "" ;
-- lin steel_N = mkN "" ;
-- lin stick_N = mkN "" ;
-- lin stone_N = mkN "" ;
--lin stop_V = mkV "henti" ;
-- lin stove_N = mkN "" ;
-- lin straight_A = mkA "" ;
-- lin student_N = mkN "" ;
-- lin stupid_A = mkA "" ;
-- lin suck_V2 = mkV2 "" ;
-- lin sun_N = mkN "" ;
-- lin swell_V = mkV "" ;
-- lin swim_V = mkV "" ;
----
-- T
-- lin table_N = mkN "" ;
-- lin tail_N = mkN "" ;
--lin talk_V3 = mkV3 (mkV "cakap" Ber) (mkPrep "tentang") (mkPrep "dengan") ;
--lin teach_V2 = mkV2 "ajar" ;
-- lin teacher_N = mkN "" ;
-- lin television_N = mkN "" ;
-- lin thick_A = mkA "" ;
-- lin thin_A = mkA "" ;
-- lin think_V = mkV "" ;
-- lin throw_V2 = mkV2 "" ;
-- lin tie_V2 = mkV2 "" ;
-- lin today_Adv = mkA "" ;
-- lin tongue_N = mkN "" ;
-- lin tooth_N = mkN "" ;
-- lin train_N = mkN "" ;
-- lin travel_V = mkV "" ;
-- lin tree_N = mkN "" ;
-- lin turn_V = mkV "" ;
--------
-- U - V
--lin ugly_A = mkA "jelek" ;
-- lin uncertain_A = mkA "" ;
-- lin understand_V2 = mkV2 "" ;
-- lin university_N = mkN "" ;
-- lin village_N = mkN "" ;
-- lin vomit_V = mkV2 "" ;
--------
-- W - Y
-- lin wait_V2 = mkV2 "" ;
--lin walk_V = mkV "jalan" ;
-- lin war_N = mkN "" ;
-- lin warm_A = mkA "" ;
-- lin wash_V2 = mkV2 "" ;
-- lin watch_V2 = mkV2 "" ;
-- lin water_N = mkNoun "" ;
-- lin wet_A = mkA "" ;
-- lin white_A = mkA "" ;
-- lin wide_A = mkA "" ;
-- lin wife_N = mkN "" ;
-- lin win_V2 = mkV2 "" ;
-- lin wind_N = mkN "" ;
-- lin window_N = mkN "" ;
-- lin wine_N = mkN "" ;
-- lin wing_N = mkN "" ;
-- lin wipe_V2 = mkV2 "" ;
--lin woman_N = mkN "perempuan" ;
-- lin wonder_VQ = mkVQ "" ;
-- lin wood_N = mkN "" ;
-- lin worm_N = mkN "" ;
--lin write_V2 = mkV2 "tulis" ;
-- lin year_N = mkN "" ;
-- lin yellow_A = mkA "" ;
--lin young_A = mkA "muda" ;
--}
}

561
src/tamil/MissingTam.gf Normal file
View File

@@ -0,0 +1,561 @@
resource MissingTam = open GrammarTam, Prelude in {
--oper AdAP : AdA -> AP -> AP = notYet "AdAP" ;
--oper AdAdv : AdA -> Adv -> Adv = notYet "AdAdv" ;
--oper AdNum : AdN -> Card -> Card = notYet "AdNum" ;
--oper AdVVP : AdV -> VP -> VP = notYet "AdVVP" ;
--oper AdVVPSlash : AdV -> VPSlash -> VPSlash = notYet "AdVVPSlash" ;
--oper AddAdvQVP : QVP -> IAdv -> QVP = notYet "AddAdvQVP" ;
--oper AdjCN : AP -> CN -> CN = notYet "AdjCN" ;
--oper AdjDAP : DAP -> AP -> DAP = notYet "AdjDAP" ;
--oper AdjOrd : Ord -> AP = notYet "AdjOrd" ;
--oper AdnCAdv : CAdv -> AdN = notYet "AdnCAdv" ;
--oper AdvIAdv : IAdv -> Adv -> IAdv = notYet "AdvIAdv" ;
--oper AdvIP : IP -> Adv -> IP = notYet "AdvIP" ;
--oper AdvNP : NP -> Adv -> NP = notYet "AdvNP" ;
--oper AdvQVP : VP -> IAdv -> QVP = notYet "AdvQVP" ;
--oper AdvSlash : ClSlash -> Adv -> ClSlash = notYet "AdvSlash" ;
--oper AdvVPSlash : VPSlash -> Adv -> VPSlash = notYet "AdvVPSlash" ;
--oper ApposCN : CN -> NP -> CN = notYet "ApposCN" ;
--oper BaseAP : AP -> AP -> ListAP = notYet "BaseAP" ;
--oper BaseAdV : AdV -> AdV -> ListAdV = notYet "BaseAdV" ;
--oper BaseAdv : Adv -> Adv -> ListAdv = notYet "BaseAdv" ;
--oper BaseCN : CN -> CN -> ListCN = notYet "BaseCN" ;
--oper BaseIAdv : IAdv -> IAdv -> ListIAdv = notYet "BaseIAdv" ;
--oper BaseNP : NP -> NP -> ListNP = notYet "BaseNP" ;
--oper BaseRS : RS -> RS -> ListRS = notYet "BaseRS" ;
--oper BaseS : S -> S -> ListS = notYet "BaseS" ;
--oper CAdvAP : CAdv -> AP -> NP -> AP = notYet "CAdvAP" ;
--oper CleftAdv : Adv -> S -> Cl = notYet "CleftAdv" ;
--oper CleftNP : NP -> RS -> Cl = notYet "CleftNP" ;
--oper CompIAdv : IAdv -> IComp = notYet "CompIAdv" ;
--oper CompIP : IP -> IComp = notYet "CompIP" ;
--oper ComparAdvAdj : CAdv -> A -> NP -> Adv = notYet "ComparAdvAdj" ;
--oper ComparAdvAdjS : CAdv -> A -> S -> Adv = notYet "ComparAdvAdjS" ;
--oper ComplA2 : A2 -> NP -> AP = notYet "ComplA2" ;
--oper ComplN3 : N3 -> NP -> N2 = notYet "ComplN3" ;
--oper ComplSlashIP : VPSlash -> IP -> QVP = notYet "ComplSlashIP" ;
--oper ComplVA : VA -> AP -> VP = notYet "ComplVA" ;
--oper ComplVQ : VQ -> QS -> VP = notYet "ComplVQ" ;
--oper ComplVS : VS -> S -> VP = notYet "ComplVS" ;
--oper ConjAP : Conj -> ListAP -> AP = notYet "ConjAP" ;
--oper ConjAdV : Conj -> ListAdV -> AdV = notYet "ConjAdV" ;
--oper ConjAdv : Conj -> ListAdv -> Adv = notYet "ConjAdv" ;
--oper ConjCN : Conj -> ListCN -> CN = notYet "ConjCN" ;
--oper ConjDet : Conj -> ListDAP -> Det = notYet "ConjDet" ;
--oper ConjIAdv : Conj -> ListIAdv -> IAdv = notYet "ConjIAdv" ;
--oper ConjNP : Conj -> ListNP -> NP = notYet "ConjNP" ;
--oper ConjRS : Conj -> ListRS -> RS = notYet "ConjRS" ;
--oper ConjS : Conj -> ListS -> S = notYet "ConjS" ;
--oper ConsAP : AP -> ListAP -> ListAP = notYet "ConsAP" ;
--oper ConsAdV : AdV -> ListAdV -> ListAdV = notYet "ConsAdV" ;
--oper ConsAdv : Adv -> ListAdv -> ListAdv = notYet "ConsAdv" ;
--oper ConsCN : CN -> ListCN -> ListCN = notYet "ConsCN" ;
--oper ConsIAdv : IAdv -> ListIAdv -> ListIAdv = notYet "ConsIAdv" ;
--oper ConsNP : NP -> ListNP -> ListNP = notYet "ConsNP" ;
--oper ConsRS : RS -> ListRS -> ListRS = notYet "ConsRS" ;
--oper ConsS : S -> ListS -> ListS = notYet "ConsS" ;
--oper CountNP : Det -> NP -> NP = notYet "CountNP" ;
--oper DetDAP : Det -> DAP = notYet "DetDAP" ;
--oper DetQuantOrd : Quant -> Num -> Ord -> Det = notYet "DetQuantOrd" ;
--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 ExistIPAdv : IP -> Adv -> QCl = notYet "ExistIPAdv" ;
--oper ExistNP : NP -> Cl = notYet "ExistNP" ;
--oper ExistNPAdv : NP -> Adv -> Cl = notYet "ExistNPAdv" ;
--oper ExtAdvVP : VP -> Adv -> VP = notYet "ExtAdvVP" ;
--oper FunRP : Prep -> NP -> RP -> RP = notYet "FunRP" ;
--oper GenericCl : VP -> Cl = notYet "GenericCl" ;
--oper IdetCN : IDet -> CN -> IP = notYet "IdetCN" ;
--oper IdetIP : IDet -> IP = notYet "IdetIP" ;
--oper IdetQuant : IQuant -> Num -> IDet = notYet "IdetQuant" ;
--oper ImpP3 : NP -> VP -> Utt = notYet "ImpP3" ;
--oper ImpPl1 : VP -> Utt = notYet "ImpPl1" ;
--oper ImpVP : VP -> Imp = notYet "ImpVP" ;
--oper OrdDigits : Digits -> Ord = notYet "OrdDigits" ;
--oper OrdNumeral : Numeral -> Ord = notYet "OrdNumeral" ;
--oper OrdNumeralSuperl : Numeral -> A -> Ord = notYet "OrdNumeralSuperl" ;
--oper OrdSuperl : A -> Ord = notYet "OrdSuperl" ;
--oper PConjConj : Conj -> PConj = notYet "PConjConj" ;
--oper PPartNP : NP -> V2 -> NP = notYet "PPartNP" ;
--oper PartNP : CN -> NP -> CN = notYet "PartNP" ;
--oper PositAdAAdj : A -> AdA = notYet "PositAdAAdj" ;
--oper PositAdvAdj : A -> Adv = notYet "PositAdvAdj" ;
--oper PredSCVP : SC -> VP -> Cl = notYet "PredSCVP" ;
--oper PredetNP : Predet -> NP -> NP = notYet "PredetNP" ;
--oper PrepIP : Prep -> IP -> IAdv = notYet "PrepIP" ;
--oper ProgrVP : VP -> VP = notYet "ProgrVP" ;
--oper QuestCl : Cl -> QCl = notYet "QuestCl" ;
--oper QuestIAdv : IAdv -> Cl -> QCl = notYet "QuestIAdv" ;
--oper QuestIComp : IComp -> NP -> QCl = notYet "QuestIComp" ;
--oper QuestQVP : IP -> QVP -> QCl = notYet "QuestQVP" ;
--oper QuestSlash : IP -> ClSlash -> QCl = notYet "QuestSlash" ;
--oper QuestVP : IP -> VP -> QCl = notYet "QuestVP" ;
--oper ReflA2 : A2 -> AP = notYet "ReflA2" ;
--oper ReflVP : VPSlash -> VP = notYet "ReflVP" ;
--oper RelCl : Cl -> RCl = notYet "RelCl" ;
--oper RelS : S -> RS -> S = notYet "RelS" ;
--oper SSubjS : S -> Subj -> S -> S = notYet "SSubjS" ;
--oper SelfAdVVP : VP -> VP = notYet "SelfAdVVP" ;
--oper SelfAdvVP : VP -> VP = notYet "SelfAdvVP" ;
--oper SelfNP : NP -> NP = notYet "SelfNP" ;
--oper SentAP : AP -> SC -> AP = notYet "SentAP" ;
--oper SentCN : CN -> SC -> CN = notYet "SentCN" ;
--oper SlashV2A : V2A -> AP -> VPSlash = notYet "SlashV2A" ;
--oper SlashV2Q : V2Q -> QS -> VPSlash = notYet "SlashV2Q" ;
--oper SlashV2S : V2S -> S -> VPSlash = notYet "SlashV2S" ;
--oper SlashV2V : V2V -> VP -> VPSlash = notYet "SlashV2V" ;
--oper SlashV2VNP : V2V -> NP -> VPSlash -> VPSlash = notYet "SlashV2VNP" ;
--oper SlashVS : NP -> VS -> SSlash -> ClSlash = notYet "SlashVS" ;
--oper Use2N3 : N3 -> N2 = notYet "Use2N3" ;
--oper Use3N3 : N3 -> N2 = notYet "Use3N3" ;
--oper UseA2 : A2 -> AP = notYet "UseA2" ;
--oper UseComparA : A -> AP = notYet "UseComparA" ;
--oper UseQCl : Temp -> Pol -> QCl -> QS = notYet "UseQCl" ;
--oper UseSlash : Temp -> Pol -> ClSlash -> SSlash = notYet "UseSlash" ;
--oper UttAP : AP -> Utt = notYet "UttAP" ;
--oper UttAdv : Adv -> Utt = notYet "UttAdv" ;
--oper UttCN : CN -> Utt = notYet "UttCN" ;
--oper UttCard : Card -> Utt = notYet "UttCard" ;
--oper UttIAdv : IAdv -> Utt = notYet "UttIAdv" ;
--oper UttIP : IP -> Utt = notYet "UttIP" ;
--oper UttImpPl : Pol -> Imp -> Utt = notYet "UttImpPl" ;
--oper UttImpPol : Pol -> Imp -> Utt = notYet "UttImpPol" ;
--oper UttImpSg : Pol -> Imp -> Utt = notYet "UttImpSg" ;
--oper UttInterj : Interj -> Utt = notYet "UttInterj" ;
--oper UttQS : QS -> Utt = notYet "UttQS" ;
--oper UttVP : VP -> Utt = notYet "UttVP" ;
--oper VPSlashPrep : VP -> Prep -> VPSlash = notYet "VPSlashPrep" ;
--oper VocNP : NP -> Voc = notYet "VocNP" ;
--oper above_Prep : Prep = notYet "above_Prep" ;
--oper active2passive : Cl -> Cl = notYet "active2passive" ;
--oper add_V3 : V3 = notYet "add_V3" ;
--oper after_Prep : Prep = notYet "after_Prep" ;
--oper airplane_N : N = notYet "airplane_N" ;
--oper alas_Interj : Interj = notYet "alas_Interj" ;
--oper all_Predet : Predet = notYet "all_Predet" ;
--oper almost_AdA : AdA = notYet "almost_AdA" ;
--oper almost_AdN : AdN = notYet "almost_AdN" ;
--oper already_Adv : Adv = notYet "already_Adv" ;
--oper although_Subj : Subj = notYet "although_Subj" ;
--oper always_AdV : AdV = notYet "always_AdV" ;
--oper animal_N : N = notYet "animal_N" ;
--oper answer_V2S : V2S = notYet "answer_V2S" ;
--oper apartment_N : N = notYet "apartment_N" ;
--oper apple_N : N = notYet "apple_N" ;
--oper art_N : N = notYet "art_N" ;
--oper as_CAdv : CAdv = notYet "as_CAdv" ;
--oper ashes_N : N = notYet "ashes_N" ;
--oper ask_V2Q : V2Q = notYet "ask_V2Q" ;
--oper at_least_AdN : AdN = notYet "at_least_AdN" ;
--oper at_most_AdN : AdN = notYet "at_most_AdN" ;
--oper baby_N : N = notYet "baby_N" ;
--oper back_N : N = notYet "back_N" ;
--oper bad_A : A = notYet "bad_A" ;
--oper bank_N : N = notYet "bank_N" ;
--oper bark_N : N = notYet "bark_N" ;
--oper because_Subj : Subj = notYet "because_Subj" ;
--oper become_VA : VA = notYet "become_VA" ;
--oper beer_N : N = notYet "beer_N" ;
--oper before_Prep : Prep = notYet "before_Prep" ;
--oper beg_V2V : V2V = notYet "beg_V2V" ;
--oper behind_Prep : Prep = notYet "behind_Prep" ;
--oper belly_N : N = notYet "belly_N" ;
--oper between_Prep : Prep = notYet "between_Prep" ;
--oper big_A : A = notYet "big_A" ;
--oper bike_N : N = notYet "bike_N" ;
--oper bird_N : N = notYet "bird_N" ;
--oper bite_V2 : V2 = notYet "bite_V2" ;
--oper black_A : A = notYet "black_A" ;
--oper blood_N : N = notYet "blood_N" ;
--oper blow_V : V = notYet "blow_V" ;
--oper blue_A : A = notYet "blue_A" ;
--oper boat_N : N = notYet "boat_N" ;
--oper bone_N : N = notYet "bone_N" ;
--oper boot_N : N = notYet "boot_N" ;
--oper boss_N : N = notYet "boss_N" ;
--oper both7and_DConj : Conj = notYet "both7and_DConj" ;
--oper boy_N : N = notYet "boy_N" ;
--oper bread_N : N = notYet "bread_N" ;
--oper break_V2 : V2 = notYet "break_V2" ;
--oper breast_N : N = notYet "breast_N" ;
--oper breathe_V : V = notYet "breathe_V" ;
--oper broad_A : A = notYet "broad_A" ;
--oper brother_N2 : N2 = notYet "brother_N2" ;
--oper brown_A : A = notYet "brown_A" ;
--oper burn_V : V = notYet "burn_V" ;
--oper but_PConj : PConj = notYet "but_PConj" ;
--oper butter_N : N = notYet "butter_N" ;
--oper camera_N : N = notYet "camera_N" ;
--oper can8know_VV : VV = notYet "can8know_VV" ;
--oper cap_N : N = notYet "cap_N" ;
--oper carpet_N : N = notYet "carpet_N" ;
--oper ceiling_N : N = notYet "ceiling_N" ;
--oper chair_N : N = notYet "chair_N" ;
--oper cheese_N : N = notYet "cheese_N" ;
--oper child_N : N = notYet "child_N" ;
--oper church_N : N = notYet "church_N" ;
--oper city_N : N = notYet "city_N" ;
--oper clean_A : A = notYet "clean_A" ;
--oper clever_A : A = notYet "clever_A" ;
--oper close_V2 : V2 = notYet "close_V2" ;
--oper cloud_N : N = notYet "cloud_N" ;
--oper coat_N : N = notYet "coat_N" ;
--oper cold_A : A = notYet "cold_A" ;
--oper computer_N : N = notYet "computer_N" ;
--oper correct_A : A = notYet "correct_A" ;
--oper count_V2 : V2 = notYet "count_V2" ;
--oper country_N : N = notYet "country_N" ;
--oper cousin_N : N = notYet "cousin_N" ;
--oper cow_N : N = notYet "cow_N" ;
--oper cut_V2 : V2 = notYet "cut_V2" ;
--oper day_N : N = notYet "day_N" ;
--oper dconcat : Digits -> Digits -> Digits = notYet "dconcat" ;
--oper die_V : V = notYet "die_V" ;
--oper dig_V : V = notYet "dig_V" ;
--oper digits2num : Digits -> Numeral = notYet "digits2num" ;
--oper digits2numeral : Card -> Card = notYet "digits2numeral" ;
--oper dirty_A : A = notYet "dirty_A" ;
--oper distance_N3 : N3 = notYet "distance_N3" ;
--oper dn : Dig -> Digit = notYet "dn" ;
--oper dn10 : Dig -> Sub10 = notYet "dn10" ;
--oper dn100 : Dig -> Dig -> Sub100 = notYet "dn100" ;
--oper dn1000 : Dig -> Dig -> Dig -> Sub1000 = notYet "dn1000" ;
--oper dn1000000a : Dig -> Dig -> Dig -> Dig -> Sub1000000 = notYet "dn1000000a" ;
--oper dn1000000b : Dig -> Dig -> Dig -> Dig -> Dig -> Sub1000000 = notYet "dn1000000b" ;
--oper dn1000000c : Dig -> Dig -> Dig -> Dig -> Dig -> Dig -> Sub1000000 = notYet "dn1000000c" ;
--oper do_V2 : V2 = notYet "do_V2" ;
--oper doctor_N : N = notYet "doctor_N" ;
--oper door_N : N = notYet "door_N" ;
--oper dry_A : A = notYet "dry_A" ;
--oper dull_A : A = notYet "dull_A" ;
--oper during_Prep : Prep = notYet "during_Prep" ;
--oper dust_N : N = notYet "dust_N" ;
--oper ear_N : N = notYet "ear_N" ;
--oper earth_N : N = notYet "earth_N" ;
--oper easy_A2V : A2 = notYet "easy_A2V" ;
--oper egg_N : N = notYet "egg_N" ;
--oper either7or_DConj : Conj = notYet "either7or_DConj" ;
--oper empty_A : A = notYet "empty_A" ;
--oper enemy_N : N = notYet "enemy_N" ;
--oper every_Det : Det = notYet "every_Det" ;
--oper everybody_NP : NP = notYet "everybody_NP" ;
--oper everything_NP : NP = notYet "everything_NP" ;
--oper everywhere_Adv : Adv = notYet "everywhere_Adv" ;
--oper except_Prep : Prep = notYet "except_Prep" ;
--oper eye_N : N = notYet "eye_N" ;
--oper factory_N : N = notYet "factory_N" ;
--oper fall_V : V = notYet "fall_V" ;
--oper far_Adv : Adv = notYet "far_Adv" ;
--oper fat_N : N = notYet "fat_N" ;
--oper fear_V2 : V2 = notYet "fear_V2" ;
--oper fear_VS : VS = notYet "fear_VS" ;
--oper feather_N : N = notYet "feather_N" ;
--oper few_Det : Det = notYet "few_Det" ;
--oper fight_V2 : V2 = notYet "fight_V2" ;
--oper find_V2 : V2 = notYet "find_V2" ;
--oper fingernail_N : N = notYet "fingernail_N" ;
--oper fire_N : N = notYet "fire_N" ;
--oper fish_N : N = notYet "fish_N" ;
--oper float_V : V = notYet "float_V" ;
--oper floor_N : N = notYet "floor_N" ;
--oper flow_V : V = notYet "flow_V" ;
--oper flower_N : N = notYet "flower_N" ;
--oper fly_V : V = notYet "fly_V" ;
--oper fog_N : N = notYet "fog_N" ;
--oper foot_N : N = notYet "foot_N" ;
--oper for_Prep : Prep = notYet "for_Prep" ;
--oper forest_N : N = notYet "forest_N" ;
--oper forget_V2 : V2 = notYet "forget_V2" ;
--oper freeze_V : V = notYet "freeze_V" ;
--oper fridge_N : N = notYet "fridge_N" ;
--oper friend_N : N = notYet "friend_N" ;
--oper from_Prep : Prep = notYet "from_Prep" ;
--oper fruit_N : N = notYet "fruit_N" ;
--oper full_A : A = notYet "full_A" ;
--oper fun_AV : A = notYet "fun_AV" ;
--oper garden_N : N = notYet "garden_N" ;
--oper girl_N : N = notYet "girl_N" ;
--oper glove_N : N = notYet "glove_N" ;
--oper gold_N : N = notYet "gold_N" ;
--oper good_A : A = notYet "good_A" ;
--oper grammar_N : N = notYet "grammar_N" ;
--oper grass_N : N = notYet "grass_N" ;
--oper guts_N : N = notYet "guts_N" ;
--oper hair_N : N = notYet "hair_N" ;
--oper hand_N : N = notYet "hand_N" ;
--oper harbour_N : N = notYet "harbour_N" ;
--oper has_age_VP : Card -> VP = notYet "has_age_VP" ;
--oper hat_N : N = notYet "hat_N" ;
--oper hate_V2 : V2 = notYet "hate_V2" ;
--oper have_V2 : V2 = notYet "have_V2" ;
--oper have_name_Cl : NP -> NP -> Cl = notYet "have_name_Cl" ;
--oper head_N : N = notYet "head_N" ;
--oper hear_V2 : V2 = notYet "hear_V2" ;
--oper heart_N : N = notYet "heart_N" ;
--oper heavy_A : A = notYet "heavy_A" ;
--oper here7from_Adv : Adv = notYet "here7from_Adv" ;
--oper here7to_Adv : Adv = notYet "here7to_Adv" ;
--oper here_Adv : Adv = notYet "here_Adv" ;
--oper hill_N : N = notYet "hill_N" ;
--oper hold_V2 : V2 = notYet "hold_V2" ;
--oper hope_VS : VS = notYet "hope_VS" ;
--oper horn_N : N = notYet "horn_N" ;
--oper horse_N : N = notYet "horse_N" ;
--oper hot_A : A = notYet "hot_A" ;
--oper how8many_IDet : IDet = notYet "how8many_IDet" ;
--oper how8much_IAdv : IAdv = notYet "how8much_IAdv" ;
--oper how_IAdv : IAdv = notYet "how_IAdv" ;
--oper how_far_QCl : NP -> QCl = notYet "how_far_QCl" ;
--oper how_old_QCl : NP -> QCl = notYet "how_old_QCl" ;
--oper hungry_VP : VP = notYet "hungry_VP" ;
--oper hunt_V2 : V2 = notYet "hunt_V2" ;
--oper husband_N : N = notYet "husband_N" ;
--oper ice_N : N = notYet "ice_N" ;
--oper if_then_Conj : Conj = notYet "if_then_Conj" ;
--oper ill_VP : VP = notYet "ill_VP" ;
--oper important_A : A = notYet "important_A" ;
--oper in8front_Prep : Prep = notYet "in8front_Prep" ;
--oper industry_N : N = notYet "industry_N" ;
--oper iron_N : N = notYet "iron_N" ;
--oper is_right_VP : VP = notYet "is_right_VP" ;
--oper is_wrong_VP : VP = notYet "is_wrong_VP" ;
--oper it_Pron : Pron = notYet "it_Pron" ;
--oper john_PN : PN = notYet "john_PN" ;
--oper jump_V : V = notYet "jump_V" ;
--oper kill_V2 : V2 = notYet "kill_V2" ;
--oper king_N : N = notYet "king_N" ;
--oper knee_N : N = notYet "knee_N" ;
--oper know_V2 : V2 = notYet "know_V2" ;
--oper know_VQ : VQ = notYet "know_VQ" ;
--oper know_VS : VS = notYet "know_VS" ;
--oper lake_N : N = notYet "lake_N" ;
--oper lamp_N : N = notYet "lamp_N" ;
--oper language_N : N = notYet "language_N" ;
--oper laugh_V : V = notYet "laugh_V" ;
--oper leaf_N : N = notYet "leaf_N" ;
--oper leather_N : N = notYet "leather_N" ;
--oper leave_V2 : V2 = notYet "leave_V2" ;
--oper left_Ord : Ord = notYet "left_Ord" ;
--oper leg_N : N = notYet "leg_N" ;
--oper less_CAdv : CAdv = notYet "less_CAdv" ;
--oper lie_V : V = notYet "lie_V" ;
--oper listen_V2 : V2 = notYet "listen_V2" ;
--oper live_V : V = notYet "live_V" ;
--oper liver_N : N = notYet "liver_N" ;
--oper lose_V2 : V2 = notYet "lose_V2" ;
--oper louse_N : N = notYet "louse_N" ;
--oper love_N : N = notYet "love_N" ;
--oper many_Det : Det = notYet "many_Det" ;
--oper married_A2 : A2 = notYet "married_A2" ;
--oper married_Cl : NP -> NP -> Cl = notYet "married_Cl" ;
--oper meat_N : N = notYet "meat_N" ;
--oper moon_N : N = notYet "moon_N" ;
--oper more_CAdv : CAdv = notYet "more_CAdv" ;
--oper most_Predet : Predet = notYet "most_Predet" ;
--oper mother_N2 : N2 = notYet "mother_N2" ;
--oper mountain_N : N = notYet "mountain_N" ;
--oper mouth_N : N = notYet "mouth_N" ;
--oper much_Det : Det = notYet "much_Det" ;
--oper music_N : N = notYet "music_N" ;
--oper n_unit_CN : Card -> CN -> CN -> CN = notYet "n_unit_CN" ;
--oper n_units_AP : Card -> CN -> A -> AP = notYet "n_units_AP" ;
--oper n_units_of_NP : Card -> CN -> NP -> NP = notYet "n_units_of_NP" ;
--oper name_N : N = notYet "name_N" ;
--oper narrow_A : A = notYet "narrow_A" ;
--oper nd : Digit -> Dig = notYet "nd" ;
--oper nd10 : Sub10 -> Digits = notYet "nd10" ;
--oper nd100 : Sub100 -> Digits = notYet "nd100" ;
--oper nd1000 : Sub1000 -> Digits = notYet "nd1000" ;
--oper nd1000000 : Sub1000000 -> Digits = notYet "nd1000000" ;
--oper near_A : A = notYet "near_A" ;
--oper neck_N : N = notYet "neck_N" ;
--oper new_A : A = notYet "new_A" ;
--oper newspaper_N : N = notYet "newspaper_N" ;
--oper night_N : N = notYet "night_N" ;
--oper no_Quant : Quant = notYet "no_Quant" ;
--oper no_Utt : Utt = notYet "no_Utt" ;
--oper nobody_NP : NP = notYet "nobody_NP" ;
--oper nose_N : N = notYet "nose_N" ;
--oper not_Predet : Predet = notYet "not_Predet" ;
--oper nothing_NP : NP = notYet "nothing_NP" ;
--oper num2digits : Numeral -> Digits = notYet "num2digits" ;
--oper number_N : N = notYet "number_N" ;
--oper oil_N : N = notYet "oil_N" ;
--oper on_Prep : Prep = notYet "on_Prep" ;
--oper only_Predet : Predet = notYet "only_Predet" ;
--oper open_V2 : V2 = notYet "open_V2" ;
--oper or_Conj : Conj = notYet "or_Conj" ;
--oper otherwise_PConj : PConj = notYet "otherwise_PConj" ;
--oper paint_V2A : V2A = notYet "paint_V2A" ;
--oper paper_N : N = notYet "paper_N" ;
--oper paris_PN : PN = notYet "paris_PN" ;
--oper part_Prep : Prep = notYet "part_Prep" ;
--oper peace_N : N = notYet "peace_N" ;
--oper pen_N : N = notYet "pen_N" ;
--oper planet_N : N = notYet "planet_N" ;
--oper plastic_N : N = notYet "plastic_N" ;
--oper play_V : V = notYet "play_V" ;
--oper play_V2 : V2 = notYet "play_V2" ;
--oper please_Voc : Voc = notYet "please_Voc" ;
--oper policeman_N : N = notYet "policeman_N" ;
--oper priest_N : N = notYet "priest_N" ;
--oper probable_AS : A = notYet "probable_AS" ;
--oper pull_V2 : V2 = notYet "pull_V2" ;
--oper push_V2 : V2 = notYet "push_V2" ;
--oper put_V2 : V2 = notYet "put_V2" ;
--oper queen_N : N = notYet "queen_N" ;
--oper question_N : N = notYet "question_N" ;
--oper quite_Adv : AdA = notYet "quite_Adv" ;
--oper radio_N : N = notYet "radio_N" ;
--oper ready_A : A = notYet "ready_A" ;
--oper ready_VP : VP = notYet "ready_VP" ;
--oper reason_N : N = notYet "reason_N" ;
--oper red_A : A = notYet "red_A" ;
--oper religion_N : N = notYet "religion_N" ;
--oper restaurant_N : N = notYet "restaurant_N" ;
--oper right_Ord : Ord = notYet "right_Ord" ;
--oper river_N : N = notYet "river_N" ;
--oper road_N : N = notYet "road_N" ;
--oper rock_N : N = notYet "rock_N" ;
--oper roof_N : N = notYet "roof_N" ;
--oper root_N : N = notYet "root_N" ;
--oper rope_N : N = notYet "rope_N" ;
--oper rotten_A : A = notYet "rotten_A" ;
--oper round_A : A = notYet "round_A" ;
--oper rub_V2 : V2 = notYet "rub_V2" ;
--oper rubber_N : N = notYet "rubber_N" ;
--oper rule_N : N = notYet "rule_N" ;
--oper run_V : V = notYet "run_V" ;
--oper salt_N : N = notYet "salt_N" ;
--oper sand_N : N = notYet "sand_N" ;
--oper say_VS : VS = notYet "say_VS" ;
--oper scared_VP : VP = notYet "scared_VP" ;
--oper scratch_V2 : V2 = notYet "scratch_V2" ;
--oper sea_N : N = notYet "sea_N" ;
--oper see_V2 : V2 = notYet "see_V2" ;
--oper seed_N : N = notYet "seed_N" ;
--oper seek_V2 : V2 = notYet "seek_V2" ;
--oper send_V3 : V3 = notYet "send_V3" ;
--oper sew_V : V = notYet "sew_V" ;
--oper sharp_A : A = notYet "sharp_A" ;
--oper sheep_N : N = notYet "sheep_N" ;
--oper ship_N : N = notYet "ship_N" ;
--oper shirt_N : N = notYet "shirt_N" ;
--oper shoe_N : N = notYet "shoe_N" ;
--oper shop_N : N = notYet "shop_N" ;
--oper short_A : A = notYet "short_A" ;
--oper silver_N : N = notYet "silver_N" ;
--oper sing_V : V = notYet "sing_V" ;
--oper sister_N : N = notYet "sister_N" ;
--oper sit_V : V = notYet "sit_V" ;
--oper skin_N : N = notYet "skin_N" ;
--oper sky_N : N = notYet "sky_N" ;
--oper sleep_V : V = notYet "sleep_V" ;
--oper smell_V : V = notYet "smell_V" ;
--oper smoke_N : N = notYet "smoke_N" ;
--oper smooth_A : A = notYet "smooth_A" ;
--oper snake_N : N = notYet "snake_N" ;
--oper snow_N : N = notYet "snow_N" ;
--oper so_AdA : AdA = notYet "so_AdA" ;
--oper sock_N : N = notYet "sock_N" ;
--oper somePl_Det : Det = notYet "somePl_Det" ;
--oper someSg_Det : Det = notYet "someSg_Det" ;
--oper somebody_NP : NP = notYet "somebody_NP" ;
--oper something_NP : NP = notYet "something_NP" ;
--oper somewhere_Adv : Adv = notYet "somewhere_Adv" ;
--oper song_N : N = notYet "song_N" ;
--oper speak_V2 : V2 = notYet "speak_V2" ;
--oper spit_V : V = notYet "spit_V" ;
--oper split_V2 : V2 = notYet "split_V2" ;
--oper squeeze_V2 : V2 = notYet "squeeze_V2" ;
--oper stab_V2 : V2 = notYet "stab_V2" ;
--oper stand_V : V = notYet "stand_V" ;
--oper star_N : N = notYet "star_N" ;
--oper steel_N : N = notYet "steel_N" ;
--oper stick_N : N = notYet "stick_N" ;
--oper stone_N : N = notYet "stone_N" ;
--oper stop_V : V = notYet "stop_V" ;
--oper stove_N : N = notYet "stove_N" ;
--oper straight_A : A = notYet "straight_A" ;
--oper student_N : N = notYet "student_N" ;
--oper stupid_A : A = notYet "stupid_A" ;
--oper suck_V2 : V2 = notYet "suck_V2" ;
--oper sun_N : N = notYet "sun_N" ;
--oper swell_V : V = notYet "swell_V" ;
--oper swim_V : V = notYet "swim_V" ;
--oper switch8off_V2 : V2 = notYet "switch8off_V2" ;
--oper switch8on_V2 : V2 = notYet "switch8on_V2" ;
--oper table_N : N = notYet "table_N" ;
--oper tail_N : N = notYet "tail_N" ;
--oper talk_V3 : V3 = notYet "talk_V3" ;
--oper teacher_N : N = notYet "teacher_N" ;
--oper television_N : N = notYet "television_N" ;
--oper that_Subj : Subj = notYet "that_Subj" ;
--oper there7from_Adv : Adv = notYet "there7from_Adv" ;
--oper there7to_Adv : Adv = notYet "there7to_Adv" ;
--oper there_Adv : Adv = notYet "there_Adv" ;
--oper therefore_PConj : PConj = notYet "therefore_PConj" ;
--oper thick_A : A = notYet "thick_A" ;
--oper thin_A : A = notYet "thin_A" ;
--oper think_V : V = notYet "think_V" ;
--oper thirsty_VP : VP = notYet "thirsty_VP" ;
--oper through_Prep : Prep = notYet "through_Prep" ;
--oper throw_V2 : V2 = notYet "throw_V2" ;
--oper tie_V2 : V2 = notYet "tie_V2" ;
--oper tired_VP : VP = notYet "tired_VP" ;
--oper today_Adv : Adv = notYet "today_Adv" ;
--oper tongue_N : N = notYet "tongue_N" ;
--oper too_AdA : AdA = notYet "too_AdA" ;
--oper tooth_N : N = notYet "tooth_N" ;
--oper train_N : N = notYet "train_N" ;
--oper travel_V : V = notYet "travel_V" ;
--oper tree_N : N = notYet "tree_N" ;
--oper turn_V : V = notYet "turn_V" ;
--oper uncertain_A : A = notYet "uncertain_A" ;
--oper under_Prep : Prep = notYet "under_Prep" ;
--oper understand_V2 : V2 = notYet "understand_V2" ;
--oper university_N : N = notYet "university_N" ;
--oper very_AdA : AdA = notYet "very_AdA" ;
--oper village_N : N = notYet "village_N" ;
--oper vomit_V : V = notYet "vomit_V" ;
--oper wait_V2 : V2 = notYet "wait_V2" ;
--oper war_N : N = notYet "war_N" ;
--oper warm_A : A = notYet "warm_A" ;
--oper wash_V2 : V2 = notYet "wash_V2" ;
--oper watch_V2 : V2 = notYet "watch_V2" ;
--oper water_N : N = notYet "water_N" ;
--oper weather_adjCl : AP -> Cl = notYet "weather_adjCl" ;
--oper wet_A : A = notYet "wet_A" ;
--oper whatPl_IP : IP = notYet "whatPl_IP" ;
--oper whatSg_IP : IP = notYet "whatSg_IP" ;
--oper what_name_QCl : NP -> QCl = notYet "what_name_QCl" ;
--oper when_IAdv : IAdv = notYet "when_IAdv" ;
--oper where_IAdv : IAdv = notYet "where_IAdv" ;
--oper which_IQuant : IQuant = notYet "which_IQuant" ;
--oper white_A : A = notYet "white_A" ;
--oper whoPl_IP : IP = notYet "whoPl_IP" ;
--oper whoSg_IP : IP = notYet "whoSg_IP" ;
--oper why_IAdv : IAdv = notYet "why_IAdv" ;
--oper wide_A : A = notYet "wide_A" ;
--oper wife_N : N = notYet "wife_N" ;
--oper win_V2 : V2 = notYet "win_V2" ;
--oper wind_N : N = notYet "wind_N" ;
--oper window_N : N = notYet "window_N" ;
--oper wine_N : N = notYet "wine_N" ;
--oper wing_N : N = notYet "wing_N" ;
--oper wipe_V2 : V2 = notYet "wipe_V2" ;
--oper without_Prep : Prep = notYet "without_Prep" ;
--oper wonder_VQ : VQ = notYet "wonder_VQ" ;
--oper wood_N : N = notYet "wood_N" ;
--oper worm_N : N = notYet "worm_N" ;
--oper write_V2 : V2 = notYet "write_V2" ;
--oper year_N : N = notYet "year_N" ;
--oper yellow_A : A = notYet "yellow_A" ;
--oper yes_Utt : Utt = notYet "yes_Utt" ;
--oper youPl_Pron : Pron = notYet "youPl_Pron" ;
--oper youPol_Pron : Pron = notYet "youPol_Pron" ;
--oper youSg_Pron : Pron = notYet "youSg_Pron" ;
--}
}

237
src/tamil/NounTam.gf Normal file
View File

@@ -0,0 +1,237 @@
concrete NounTam of Noun = CatTam ** open ResTam, Prelude in {
flags optimize=all_subs ;
lin
--2 Noun phrases
-- : Det -> CN -> NP
DetCN det cn = {s = det.s ++ cn.s ! Sg ! Nom} ;
-- -- : PN -> NP ;
-- UsePN pn = MassNP (UseN pn) ;
-- -- : Pron -> NP ;
-- UsePron pron = pron ** {
-- s = \\_ => pron.s ;
-- a = IsPron pron.p ;
-- };
-- -- : Predet -> NP -> NP ; -- only the man
-- -- PredetNP predet np =
-- A noun phrase can also be postmodified by the past participle of a
-- verb, by an adverb, or by a relative clause
-- -- : NP -> V2 -> NP ; -- the man seen
-- -- PPartNP np v2 = np ** {
-- -- s = \\c => v2.s ! ??? ++ np.s ! c } ; ----
-- -- : NP -> Adv -> NP ; -- Paris today ; boys, such as ..
-- AdvNP,ExtAdvNP = \np,adv -> np ** {
-- s = \\pos => np.s ! pos ++ adv.s
-- } ;
-- -- : NP -> RS -> NP ; -- Paris, which is here
-- RelNP np rs = np ** {
-- s = \\poss => np.s ! poss ++ rs.s ! agr2p np.a
-- } ;
-- Determiners can form noun phrases directly.
-- -- : Det -> NP ;
-- DetNP det = emptyNP ** {
-- s = \\_ => linDet det ;
-- } ;
-- -- MassNP : CN -> NP ;
-- MassNP cn = emptyNP ** {
-- s = \\poss => cn.s ! NF Sg poss ++ cn.heavyMod
-- } ;
--2 Determiners
-- The determiner has a fine-grained structure, in which a 'nucleus'
-- quantifier and an optional numeral can be discerned.
-- -- : Quant -> Num -> Det ;
DetQuant quant num = quant ** {
pr = num.s ; -- if it's not a number or digit, num.s is empty
s = quant.s ;
n = num.n ;
count = "ke" ++ BIND ++ num.s ++ BIND ++ "-" ++ BIND ++ num.s;
} ;
-- -- : Quant -> Num -> Ord -> Det ;
-- DetQuantOrd quant num ord = quant ** {
-- pr = num.s ;
-- n = num.n ;
-- s = ord.s ++ quant.s ;
-- count = "" ;
-- } ;
-- Whether the resulting determiner is singular or plural depends on the
-- cardinal.
-- All parts of the determiner can be empty, except $Quant$, which is
-- the "kernel" of a determiner. It is, however, the $Num$ that determines
-- the inherent number.
NumSg = baseNum ;
-- NumPl = baseNum ** {n = NoNum Pl} ;
-- -- : Card -> Num ;
-- NumCard card = card ** {
-- n = IsNumber -- for the purposes of modifying a noun, this is singular
-- } ;
-- -- : Digits -> Card ;
-- NumDigits dig = {
-- s = dig.s ! NCard
-- } ;
-- -- : Numeral -> Card ;
-- NumNumeral num = num ;
--{-
-- -- : AdN -> Card -> Card ;
-- AdNum adn card = card ** { s = adn.s ++ card.s } ;
-- -- : Digits -> Ord ;
-- OrdDigits digs = digs ** { s = digs.s ! NOrd } ;
---}
-- -- : Numeral -> Ord ;
-- OrdNumeral num = {
-- s = num.ord
-- } ;
-- -- : A -> Ord ;
-- OrdSuperl a = {
-- s = "ter" ++ BIND ++ a.s
-- } ;
-- One can combine a numeral and a superlative.
-- -- : Numeral -> A -> Ord ; -- third largest
-- OrdNumeralSuperl num a = {
-- s = num.ord ++ "ter" ++ BIND ++ a.s
-- } ;
-- -- : Quant
-- DefArt = mkQuant [] ;
-- -- : Quant
-- IndefArt = mkQuant [] ;
-- -- : Pron -> Quant
-- PossPron pron = mkQuant pron.s ** {
-- poss = Bare ; -- this becomes "kucing dia". for "kucingnya", use PossNP.
-- } ;
--2 Common nouns
-- -- : N -> CN
-- -- : N2 -> CN ;
UseN = ResTam.useN ;
-- UseN2 = ResTam.useN ;
-- -- : N2 -> NP -> CN ;
-- ComplN2 n2 np = useN n2 ** {
-- s = \\nf =>
-- case <n2.c2.prepType, np.a, nf> of {
-- <DirObj, IsPron p, NF num _>
-- => n2.s ! NF num (Poss p) ++ np.empty ; -- DirObj is reused here to mean possession
-- _ => n2.s ! nf ++ applyPrep n2.c2 np
-- }
-- } ;
-- -- : N3 -> NP -> N2 ; -- distance from this city (to Paris)
-- -- ComplN3 n3 np =
-- -- : N3 -> N2 ; -- distance (from this city)
-- -- Use2N3 n3 = lin N2 n3 ** { c2 = n3.c3 } ;
-- -- : N3 -> N2 ; -- distance (to Paris)
-- -- Use3N3 n3 = lin N2 n3 ;
-- -- : AP -> CN -> CN
-- AdjCN ap cn = cn ** {
-- s = \\nf => cn.s ! nf ++ ap.s
-- } ;
-- -- : CN -> RS -> CN ;
-- RelCN cn rs = cn ** {
-- heavyMod = cn.heavyMod ++ rs.s ! P3
-- } ;
-- -- : CN -> Adv -> CN ;
-- AdvCN cn adv = cn ** {
-- heavyMod = cn.heavyMod ++ adv.s
-- } ;
--{-
-- -- : CN -> Adv -> CN ;
-- AdvCN cn adv = cn ** { } ;
-- Nouns can also be modified by embedded sentences and questions.
-- For some nouns this makes little sense, but we leave this for applications
-- to decide. Sentential complements are defined in VerbTam.
-- -- : CN -> SC -> CN ; -- question where she sleeps
-- SentCN cn sc = cn ** { } ;
--2 Apposition
-- This is certainly overgenerating.
-- -- : CN -> NP -> CN ; -- city Paris (, numbers x and y)
-- ApposCN cn np = cn ** { s = } ;
---}
--2 Possessive and partitive constructs
-- -- : PossNP : CN -> NP -> CN ;
-- -- this produces "bukunya".
-- PossNP cn np = cn ** {
-- s = \\nf => case <np.a, nf> of {
-- <IsPron p, NF num _>
-- => cn.s ! NF num (Poss p) ++ np.empty ;
-- _ => cn.s ! nf ++ np.s ! Bare
-- }
-- } ;
-- -- : Det -> NP -> NP ;
-- CountNP det np = np **
-- {
-- s = \\pos => det.count ++ np.s ! pos;
-- } ; -- Nonsense for DefArt or IndefArt
-- -- : CN -> NP -> CN ; -- glass of wine / two kilos of red apples
-- -- PartNP cn np = cn ** {
-- -- } ;
--{-
-- This is different from the partitive, as shown by many languages.
-- -- : Det -> NP -> NP ;
-- CountNP det np = np **
-- { } ; -- Nonsense for DefArt or IndefArt
--3 Conjoinable determiners and ones with adjectives
-- -- : DAP -> AP -> DAP ; -- the large (one)
-- AdjDAP dap ap = dap ** { } ;
-- -- : Det -> DAP ; -- this (or that)
-- DetDAP det = det ;
---}
--}
}

162
src/tamil/NumeralTam.gf Normal file
View File

@@ -0,0 +1,162 @@
-- David Wahlstedt 2002 (cardinal numbers)
-- Inari Listenmaa 2020 (ordinals + cosmetic changes)
concrete NumeralTam of Numeral = CatTam [Numeral,Digits] **
open Prelude, ResTam in {
-- lincat
-- Digit = OrdNum ; -- 2..9
-- Sub10, -- 1..9
-- Sub100, -- 1..99
-- Sub1000 = LinNumber ; -- 1..999
-- Sub1000000 = OrdNum ; -- 1..999999
-- oper
-- LinNumber : Type = {
-- s : DForm => Str ;
-- n : Number ; -- This is an internal number that tells which form of digits to choose. When quantifying a noun, the noun is in singular.
-- ord : Str ;
-- } ;
-- OrdNum : Type = CardOrdNum ** {n : Number} ;
-- lin
-- -- : Sub1000000 -> Numeral ; -- 123456 [coercion to top category]
-- num x = x ;
-- -- : Digit ;
-- n2 = mkDigit "dua" ;
-- n3 = mkDigit "tiga" ;
-- n4 = mkDigit "empat" ;
-- n5 = mkDigit "lima" ;
-- n6 = mkDigit "enam" ;
-- n7 = mkDigit "tujuh" ;
-- n8 = mkDigit "lapan" ; -- "delapan" for Indonesian
-- n9 = mkDigit "sembilan" ;
-- -- : Sub10 ; -- 1
-- pot01 = {
-- s = table {
-- Attrib => [] ;
-- Indep => "satu" } ;
-- n = Sg ;
-- ord = "pertama"
-- } ;
-- -- : Digit -> Sub10 ; -- d * 1
-- pot0 d = d ** {s = \\_ => d.s} ;
-- -- : Sub100 ; -- 10
-- pot110 = mkNum "sepuluh" ;
-- -- : Sub100 ; -- 11
-- pot111 = mkNum "sebelas" ;
-- -- : Digit -> Sub100 ; -- 10 + d
-- pot1to19 d = mkNum3 d "belas" [] ;
-- -- : Sub10 -> Sub100 ; -- coercion of 1..9
-- pot0as1 n = n ;
-- -- : Digit -> Sub100 ; -- d * 10
-- pot1 d = mkNum3 d "puluh" [] ;
-- -- : Digit -> Sub10 -> Sub100 ; -- d * 10 + n
-- pot1plus d e = -- 21 = dua puluh satu, so we choose Indep form of 1.
-- mkNum3 d "puluh" (e.s ! Indep) ;
-- -- : Sub100 -> Sub1000 ; -- coercion of 1..99
-- pot1as2 n = n ;
-- -- : Sub10 -> Sub1000 ; -- m * 100
-- pot2 d = potNum d ratus [] ;
-- -- : Sub10 -> Sub100 -> Sub1000 ; -- m * 100 + n
-- pot2plus d e = potNum d ratus (e.s ! Indep) ;
-- -- : Sub1000 -> Sub1000000 ; -- coercion of 1..999
-- pot2as3 n = n ** {s = n.s ! Indep} ;
-- -- : Sub1000 -> Sub1000000 ; -- m * 1000
-- pot3 d = pot2as3 (potNum d ribu []) ;
-- -- : Sub1000 -> Sub1000 -> Sub1000000 ; -- m * 1000 + n
-- pot3plus d e = pot2as3 (potNum d ribu (e.s ! Indep)) ;
--oper
-- ratus : Number*CardOrd => Str = table { -- 100
-- <Sg, NCard> => "seratus" ;
-- <Sg, NOrd> => "keseratus" ;
-- <Pl,_> => "ratus"
-- } ;
-- ribu : Number*CardOrd => Str = table { -- 1000
-- <Sg, NCard> => "seribu" ;
-- <Sg, NOrd> => "keseribu" ;
-- <Pl,_> => "ribu"
-- } ;
-- -- To make Sub* funs directly from a string.
-- -- ordnumeral from here
-- mkNum : Str -> LinNumber = \s -> {
-- n = Pl ;
-- s = \\_ => s ; -- Indep vs. Attrib only matters for number 1
-- ord = "ke" + s ; -- Works for all but number 1
-- } ;
-- mkDigit : Str -> OrdNum = \s -> mkNum s ** {s=s} ;
-- -- Only for Digit -> Sub*: we won't run into 1 here.
-- mkNum3 : (digit : OrdNum) -> (ten,unit : Str) -> LinNumber = \tiga,puluh,dua -> {
-- n = Pl ;
-- s = \\_ => tiga.s ++ puluh ++ dua ;
-- ord = tiga.ord ++ puluh ++ dua
-- } ;
-- -- The most general oper for making new numbers out of old ones.
-- potNum : LinNumber -> (Number*CardOrd => Str) -> Str -> LinNumber = \satu,ribuTbl,dua -> {
-- n = Pl ;
-- s = \\_ =>
-- satu.s ! Attrib ++ -- Attrib form is empty string in 1, and normal for others.
-- ribuTbl ! <satu.n, NCard> ++ dua ;
-- ord = case satu.n of {
-- Sg => satu.s ! Attrib ++ ribuTbl ! <Sg, NOrd> ++ dua ;
-- Pl => satu.ord ++ ribuTbl ! <Pl, NCard> ++ dua }
-- } ;
-- -- Numerals as sequences of digits have a separate, simpler grammar
-- lincat
-- Dig = DigNum ; -- single digit 0..9
-- lin
-- -- : Dig -> Digits ; -- 8
-- IDig d = d ;
-- -- : Dig -> Digits -> Digits ; -- 876
-- IIDig d e = {
-- s = table {
-- NCard => glue (d.s ! NCard) (e.s ! NCard) ;
-- NOrd => glue (d.s ! NOrd) (e.s ! NCard)
-- }
-- } ;
-- -- : Dig ;
-- D_0 = mkDig "0" ;
-- D_1 = mkDig "1" ;
-- D_2 = mkDig "2" ;
-- D_3 = mkDig "3" ;
-- D_4 = mkDig "4" ;
-- D_5 = mkDig "5" ;
-- D_6 = mkDig "6" ;
-- D_7 = mkDig "7" ;
-- D_8 = mkDig "8" ;
-- D_9 = mkDig "9" ;
-- oper
-- mkDig : Str -> DigNum = \s -> {
-- s = table {
-- NCard => s ;
-- NOrd => "ke-" + s
-- }
-- } ;
--}
}

166
src/tamil/ParadigmsTam.gf Normal file
View File

@@ -0,0 +1,166 @@
resource ParadigmsTam = open CatTam, ResTam, ParamTam, NounTam, Prelude in {
--oper
--2 Parameters
--
-- To abstract over number, valency and (some) case names,
-- we define the following identifiers. The application programmer
-- should always use these constants instead of the constructors
-- defined in $ResSom$.
--noPrep : Prep = mkPrep "" ;
--2 Nouns
-- mkN : overload {
-- mkN : (noun : Str) -> N ; -- Predictable nouns
-- } ;
-- mkPN : overload {
-- mkPN : Str -> PN ; -- Proper nouns
-- } ;
--2 Adjectives
-- mkA : overload {
-- mkA : (adj : Str) -> A ;
-- } ;
-- mkA2 : overload {
-- mkA2 : (adj : Str) -> Prep -> A2 ;
-- } ;
--2 Verbs
-- -- Verbs
-- mkV : overload {
-- mkV : (root : Str) -> V ; -- Verb that takes meng as a active prefix
-- mkV : (root : Str) -> Prefix -> V -- Root and prefix
-- } ;
-- mkV2 : overload {
-- mkV2 : (root : Str) -> V2 ; -- The prefix is meng and no preposition
-- mkV2 : V -> Prep -> V2 ; -- V and Prep
-- } ;
-- mkV3 : overload {
-- mkV3 : V -> V3 ; -- No prepositions
-- mkV3 : V -> Prep -> Prep -> V3 ; -- Prepositions for direct and indirect objects given
-- } ;
-- mkVV : overload {
-- mkVV : Str -> VV ;
-- } ;
-- --
-- -- mkVA : Str -> VA
-- -- = \s -> lin VA (regV s) ;
-- -- mkVQ : Str -> VQ
-- -- = \s -> lin VQ (regV s) ;
-- mkVS : overload {
-- mkV : (root : Str) -> V ; -- Verb that takes meng as a active prefix
-- mkV : (root : Str) -> Prefix -> V -- Root and prefix
-- } ;
-- --
-- -- mkV2A : Str -> V2A
-- -- = \s -> lin V2A (regV s ** {c2 = noPrep}) ;
-- -- mkV2V : Str -> V2V
-- -- = \s -> lin V2V (regV s ** {c2 = noPrep}) ;
-- -- mkV2Q : Str -> V2Q
-- -- = \s -> lin V2Q (regV s ** {c2 = noPrep}) ;
-- -----
--2 Structural categories
-- -- mkPrep = overload {
-- -- } ;
-- -- mkConj : (_,_ : Str) -> Number -> Conj = \s1,s2,num ->
-- -- lin Conj { s = s1 ; s2 = s2 } ;
-- -- mkSubj : Str -> Bool -> Subj = \s,b ->
-- -- lin Subj { } ;
-- mkAdv : Str -> Adv = \s -> lin Adv {s = s} ;
-- mkAdV : Str -> AdV = \s -> lin AdV {s = s} ;
-- mkAdA : Str -> AdA = \s -> lin AdA {s = s} ;
--.
-------------------------------------------------------------------------------
-- The definitions should not bother the user of the API. So they are
-- hidden from the document.
-- mkN = overload {
-- mkN : Str -> N = \s -> lin N (mkNoun s) ;
-- mkN : Str -> Animacy -> N = \s,a -> lin N (mkNoun s) ;
-- } ;
-- mkN2 = overload {
-- mkN2 : Str -> N2 = \s -> lin N2 (mkNoun s ** {c2 = dirPrep}) ;
-- mkN2 : N -> N2 = \n -> lin N2 (n ** {c2 = dirPrep}) ;
-- } ;
-- mkN3 = overload {
-- mkN3 : Str -> N3 = \s -> lin N3 (mkNoun s ** {c2,c3 = dirPrep}) ;
-- mkN3 : N -> N3 = \n -> lin N3 (n ** {c2,c3 = dirPrep}) ;
-- mkN3 : N -> Prep -> Prep -> N3 = \n,c2,c3 -> lin N3 (n ** {c2,c3 = dirPrep}) ;
-- } ;
-- mkPN = overload {
-- mkPN : Str -> PN = \s -> lin PN {s = \\_ => s} ;
-- } ;
-- mkA = overload {
-- mkA : (adj : Str) -> A = \s -> lin A (mkAdj s) ;
-- } ;
-- mkA2 = overload {
-- mkA2 : (adj : Str) -> A = \s -> lin A2 (mkAdj s) ;
-- mkA2 : A -> Prep -> A = \a,p -> lin A2 (a) ;
-- } ;
-- mkV = overload {
-- mkV : Str -> V = \v -> lin V (mkVerb v Ber) ;
-- mkV : Str -> Prefix -> V = \v,p -> lin V (mkVerb v p)
-- } ;
-- prefixV : V -> V = \v -> v ** {
-- s = table {
-- Root => v.s ! Active ;
-- x => v.s ! x -- TODO: how does it work with passives?
-- }
-- } ;
-- mkV2 = overload {
-- mkV2 : Str -> V2 = \v2 -> lin V2 (mkVerb2 (mkVerb v2 Meng) dirPrep) ;
-- mkV2 : V -> Prep -> V2 = \v,p -> lin V2 (mkVerb2 v p)
-- } ;
-- mkV3 = overload {
-- mkV3 : V -> V3 = \v ->
-- lin V3 (mkVerb3 v dirPrep dirPrep) ;
-- mkV3 : V -> (p,q : Prep) -> V3 = \v,p,q ->
-- lin V3 (mkVerb3 v p q)
-- } ;
-- mkV4 = overload {
-- mkV4 : Str -> Str -> V2 = \v2,str ->
-- lin V2 (mkVerb4 (mkVerb v2 Meng) dirPrep str) ;
-- mkV4 : V -> Prep -> Str -> V2 = \v,p,str -> lin V2 (mkVerb4 v p str)
-- } ;
-- mkVV = overload {
-- mkVV : Str -> VV = \vv -> lin VV (ss vv)
-- } ;
--------------------------------------------------------------------------------
--}
}

135
src/tamil/ParamTam.gf Normal file
View File

@@ -0,0 +1,135 @@
resource ParamTam = ParamX ** open Prelude in {
--------------------------------------------------------------------------------
-- Phonology
--oper
-- v : pattern Str = #("a"|"e"|"i"|"o"|"u") ;
-- diphthong : pattern Str = #("ai"|"au"|"oi") ;
-- c : pattern Str = #("m"|"n"|"ny"|"ng"
-- |"p"|"b"|"t"|"d"|"k"|"g"
-- |"s"|"z"|"c"|"j"|"sy"
-- |"f"|"v"|"kh"|"gh"|"h"
-- |"l"|"r"
-- |"w"|"y") ;
-- -- not sure if needed anywhere, this is just my standard helper function.
-- voiced : Str -> Str = \s -> case s of {
-- "k" => "g" ; "t" => "d" ; "p" => "b" ;
-- "s" => "z" ; "c" => "j" ; "kh" => "gh" ;
-- _ => s } ;
--------------------------------------------------------------------------------
-- Morphophonology
-- prefix : Prefix -> Str -> Str = \p -> case p of {
-- Meng => prefixMeng ;
-- Ber => prefixBer
-- } ;
-- prefixMeng : Str -> Str = \makan -> case makan of {
-- ? + ? + ? => "menge" + makan ;
-- (#v|"g"|"h") + _
-- => "meng" + makan ; -- prefix meng: e.g. meng+atur
-- "k" + enal
-- => "meng" + enal ; -- replace k with meng
-- "b" + _
-- => "mem" + makan ; -- prefix mem: e.g. mem+beli
-- ("p"|"f") + ikir
-- => "mem" + ikir ; -- replace p/f with mem
-- ("j"|"c"|"z"|"d") + _
-- => "men" + makan ; -- prefix men: e.g. men+jadi
-- "t" + ipu
-- => "men" + ipu ; -- replace t with men
-- "s" + alak
-- => "meny" + alak ; -- replace s with meny
-- ("r"|"l"|"w"|"y"|"m"|"n"|"ny"|"ng") + _
-- => "me" + makan ; -- prefix me
-- -- We can throw an error
-- -- _ => Predef.error "Not a valid verb root" ;
-- -- or we can let it pass with some default allomorph
-- _ => "meng" + makan
-- } ;
-- prefixBer : Str -> Str = \jalan -> case jalan of {
-- -- Exception
-- "ajar" => "belajar" ;
-- -- Drop the r
-- (#c + "er" + _ -- be+kerja
-- |"r" + _ ) -- be+rehat
-- => "be" + jalan ;
-- -- Default allomorph: ber
-- _ => "ber" + jalan
-- } ;
--------------------------------------------------------------------------------
-- Nouns
param
Case = Nom | Acc | Dat | Soc | Gen | Instr | Loc | Abl ;
-- Number = Already available from ParamX.gf under "common" folder
--------------------------------------------------------------------------------
-- Numerals
--param
-- DForm = Indep | Attrib ;
-- CardOrd = NOrd | NCard ;
NumType = NoNum Number | IsNumber ;
--oper
-- isNum : NumType -> Bool = \nt -> case nt of {
-- NoNum _ => False ;
-- _ => True
-- } ;
-- toNum : NumType -> Number = \nt -> case nt of {
-- NoNum n => n ;
-- _ => Sg
-- } ;
--------------------------------------------------------------------------------
-- Adjectives
--param
-- AForm = TODOAdj ;
--------------------------------------------------------------------------------
-- Prepositions
--param
-- PrepType = DirObj | EmptyPrep | OtherPrep ;
--------------------------------------------------------------------------------
-- Adverbs
--------------------------------------------------------------------------------
-- Verbs
param
--Tense = Already available from ParamX.gf under "common" folder
Gender = Masc | Fem | Neu | Hon | Hum ; -- Male, Female, Neuter, Honorary, Humble
VForm = VF Person Number | VFP3 Number Gender ;
--------------------------------------------------------------------------------
-- Clauses
--param
-- ClType = Statement | PolarQuestion | WhQuestion | Subord ;
--}
}

29
src/tamil/PhraseTam.gf Normal file
View File

@@ -0,0 +1,29 @@
concrete PhraseTam of Phrase = CatTam ** open Prelude, ResTam in {
-- lin
-- PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
-- UttS s = s ;
-- UttQS qs = qs ;
-- UttIAdv iadv = iadv ;
-- UttNP np = {s = np.s ! Bare} ;
-- UttIP ip = {s = ip.sp ! NF Sg Bare} ;
-- UttImpSg pol imp = { s = pol.s ++ imp.s ! Sg ! pol.p } ;
-- UttImpPol pol imp = {s = pol.s ++ imp.s ! Sg ! pol.p} ;
-- UttVP vp = {s = linVP vp} ;
-- UttAP ap = { s = ap.s } ;
--{-
-- UttImpPl pol imp =
-- UttAdv adv = {s = } ;
-- UttCN n = {s = } ;
-- UttCard n = {s = } ;
-- UttInterj i = i ;
---}
-- NoPConj = {s = []} ;
-- PConjConj conj = {s = conj.s1 ++ conj.s2 ! …} ;
-- NoVoc = {s = []} ;
-- VocNP np = { s = "," ++ np.s ! … } ; -}
--}
}

152
src/tamil/QuestionTam.gf Normal file
View File

@@ -0,0 +1,152 @@
concrete QuestionTam of Question = CatTam ** open
Prelude, ResTam, ParadigmsTam, (VS=VerbTam), (NM=NounTam), (SS=StructuralTam) in {
-- A question can be formed from a clause ('yes-no question') or
-- with an interrogative.
-- Interrogative pronouns can be formed with interrogative
-- determiners, with or without a noun.
--lin
-- -- : IDet -> CN -> IP ; -- which five songs
-- IdetCN idet cn = NM.DetCN idet cn ** {
-- sp = \\nf => idet.sp ! nf ++ cn.s ! nf
-- } ;
-- -- : IDet -> IP ; -- which five
-- IdetIP idet = NM.DetNP idet ** {sp = idet.sp};
-- -- : IQuant -> Num -> IDet ; -- which (five)
-- IdetQuant iquant num = iquant ** {
-- pr = num.s ++ case iquant.isPre of {True => iquant.s ; False => [] } ;
-- -- if isPre is True, then: "berapa kucing"
-- s = case iquant.isPre of { False => iquant.s ; True => [] };
-- -- if isPre is False, use s: "kucing berapa"
-- n = num.n ;
-- count = "" ;
-- } ;
-- -- : IP -> ClSlash -> QCl ; -- whom does John love
-- QuestSlash ip cls = cls ** {
-- pred = \\vf,pol => cls.pred ! vf ! pol ++ ip.s ! Bare
-- } ;
-- -- : Subj -> Pred -> QCl ;
-- -- QuestCl cl = cl ** {
-- -- pred = \\vf,pol => cl.pred ! vf ! pol
-- -- };
-- QuestCl cl = cl ** {
-- subj = "adakah" ++ cl.subj;
-- } ;
-- -- missing record fields: pred type of vp
-- -- : IP -> VP -> QCl ;
-- -- expected: ParamTam.VForm => ParamX.Polarity => Str
-- -- inferred: {s : ParamTam.VForm => ParamX.Polarity => Str}
-- QuestVP ip cl = cl ** {
-- pred = \\vf,pol => cl.s ! vf ! pol;
-- subj = ip.s ! Bare ;
-- };
-- -- : IAdv -> Cl -> QCl ; -- why does John walk
-- QuestIAdv iadv cls = {
-- subj = case iadv.isPre of {
-- True => iadv.s ++ cls.subj ; False => cls.subj
-- } ;
-- pred = \\vf,pol => case iadv.isPre of {
-- True => cls.pred ! iadv.vf ! pol ;
-- False => cls.pred ! iadv.vf ! pol ++ iadv.s
-- } ;
-- } ;
-- -- : IP -> IComp ;
-- CompIP ip = {s = ip.s ! Bare } ; -- who (is it)
-- -- : IComp -> NP -> QCl ; -- where is John?
-- QuestIComp icomp np = {
-- pred = \\vf,pol => np.s ! Bare ;
-- subj = icomp.s ;
-- } ;
-- \\vf,pol,posadv =>
-- -- {
-- -- pred = \\vf,pol => ip.s ++ vp.s ! vf ! pol;
-- -- } ;
--{- ----
-- s = \\t,a,p =>
-- let
-- cl = oldClause slash ;
-- cls : Direct -> Str =
-- \d -> cl.s ! d ! t ! a ! p ! Indic ;
---- \d -> cl.s ! ip.a ! d ! t ! a ! p ! Indic ;
-- who = slash.c2.s ++ ip.s ! slash.c2.c
-- in table {
-- QDir => who ++ cls DInv ;
-- QIndir => who ++ cls DDir
-- }
---}
--{-
-- lin
-- -- : IComp -> NP -> QCl ; -- where is John?
-- QuestIComp icomp np =
-- Interrogative pronouns can be formed with interrogative
-- determiners, with or without a noun.
-- -- : IDet -> CN -> IP ; -- which five songs
-- IdetCN idet cn = {contractSTM = False} ** NS.DetCN idet cn ;
-- -- : IDet -> IP ; -- which five
-- IdetIP idet = {contractSTM = False} ** NS.DetNP idet ;
-- They can be modified with adverbs.
-- -- : IP -> Adv -> IP ; -- who in Paris
-- --AdvIP = NS.AdvNP ;
-- Interrogative quantifiers have number forms and can take number modifiers.
-- -- : IQuant -> Num -> IDet ; -- which (five)
-- IdetQuant = NS.DetQuant ;
-- Interrogative adverbs can be formed prepositionally.
-- -- : Prep -> IP -> IAdv ; -- with whom
-- PrepIP prep ip = SS.prepIP prep (ip.s ! Abs) False ;
-- They can be modified with other adverbs.
-- -- : IAdv -> Adv -> IAdv ; -- where in Paris
-- -- AdvIAdv iadv adv =
-- Interrogative complements to copulas can be both adverbs and
-- pronouns.
-- -- : IAdv -> IComp ;
-- CompIAdv iadv = iadv ; -- where (is it)
-- More $IP$, $IDet$, and $IAdv$ are defined in $Structural$.
-- Wh questions with two or more question words require a new, special category.
-- cat
-- QVP ; -- buy what where
-- fun
-- ComplSlashIP : VPSlash -> IP -> QVP ; -- buys what
-- AdvQVP : VP -> IAdv -> QVP ; -- lives where
-- AddAdvQVP : QVP -> IAdv -> QVP ; -- buys what where
-- QuestQVP : IP -> QVP -> QCl ; -- who buys what where
---}
--}
}

41
src/tamil/RelativeTam.gf Normal file
View File

@@ -0,0 +1,41 @@
concrete RelativeTam of Relative = CatTam ** open
ResTam, Prelude in {
--lin
-- -- : Cl -> RCl ; -- such that John loves her
-- -- RelCl cl = cl ** {
-- -- subj = cl.subj ;
-- -- pred = cl.pred ;
-- -- };
-- -- : RP -> VP -> RCl ;
-- RelVP rp vp = {
-- subj = rp.s ;
-- pred = \\per,pol => vp.s ! Active ! pol;
-- } ;
-- -- : RP -> ClSlash -> RCl ; -- who I went with
-- RelSlash rp cls = {
-- subj = rp.s -- yang
-- ++ cls.subj ; -- aku
-- pred = \\per,pol =>
-- let object : Str = case cls.c2.prepType of {
-- OtherPrep
-- => cls.c2.obj ! per ; -- depends on the head, not known yet
-- _ => [] -- if the preposition is dir.obj or empty, no obj. pronoun
-- } ;
-- in cls.pred ! Active ! pol -- ikut sama
-- ++ object -- dengan+nya
-- } ;
-- -- : RP ;
-- IdRP = {s = "yang"} ;
-- -- Mintz page 49: aku jumpa orang /yang kaki+nya/ patah.
-- -- 'I met a man /whose foot/ was broken.'
-- -- : Prep -> NP -> RP -> RP ; -- the mother of whom
-- -- FunRP prep np rp = {} ;
--}
}

421
src/tamil/ResTam.gf Normal file
View File

@@ -0,0 +1,421 @@
resource ResTam = ParamTam ** open Prelude, Predef in {
--------------------------------------------------------------------------------
-- Nouns
oper
Noun : Type = {s: ParamX.Number => ParamTam.Case => Str} ;
-- Noun2 : Type = Noun ** {c2 : Preposition} ;
-- Noun3 : Type = Noun2 ** {c3 : Preposition} ;
CNoun : Type = Noun ;
-- heavyMod : Str ; -- heavy stuff like relative clauses after determiner
-- PNoun : Type = Noun ;
mkN : (_,_ : Str) -> Noun = \x,y -> {
s = table {
Sg => table{
Nom => x ;
Acc => x + "ai" ;
Dat => x + "ukku" ;
Soc => x + "otu" ;
Gen => x + "utaiya" ;
Instr => x + "al" ;
Loc => x + "itam" ;
Abl => x + "itamiruntu"
} ;
Pl => table{
Nom => y + "kal" ;
Acc => y + "kal" + "ai" ;
Dat => y + "kal" + "ukku" ;
Soc => y + "kal" + "otu" ;
Gen => y + "kal" + "utaiya" ;
Instr => y + "kal" + "al" ;
Loc => y + "kal" + "itam" ;
Abl => y + "kal" + "itamiruntu"
}
} ;
} ;
useN : Noun -> CNoun = \n -> n ** {
heavyMod = []
} ;
---------------------------------------------
-- Pronoun
-- Pronoun : Type = {
-- s : Str ;
-- p : Person ; -- for relative clauses
-- empty : Str ; -- need to avoid GF being silly. See https://inariksit.github.io/gf/2018/08/28/gf-gotchas.html#metavariables-or-those-question-marks-that-appear-when-parsing
-- } ;
-- mkPron : Str -> Person -> Pronoun = \str,p -> {
-- s = str ;
-- p = p ;
-- empty = []
-- } ;
---------------------------------------------
-- NP
NounPhrase : Type = {
s : Str ;
-- empty : Str ; -- need to avoid GF being silly. See https://inariksit.github.io/gf/2018/08/28/gf-gotchas.html#metavariables-or-those-question-marks-that-appear-when-parsing
} ;
-- IPhrase : Type = NounPhrase ** {
-- sp : NForm => Str ; -- standalone berapa banyak kucing
-- } ;
-- emptyNP : NounPhrase = {
-- s = \\_ => [] ;
-- a = NotPron ;
-- empty = []
-- } ;
mkNounPhrase : Str -> NounPhrase = \str -> {
s = str ;
-- a = NotPron ;
-- empty = []
} ;
-- mkIP : Str -> IPhrase = \str -> {
-- s = \\_ => str ;
-- a = NotPron ;
-- empty = [] ;
-- sp = \\_ => str ;
-- } ;
--------------------------------------------------------------------------------
-- Det, Quant, Card, Ord
Quant : Type = {
s : Str ; -- quantifier in a context, eg. 'berapa (kucing)' (Tamil: I (Nemo) am uncommenting only this part)
-- sp : NForm => Str ; -- a standalone, eg. '(kucing) berapa banyak'
-- poss : Possession ;
} ;
-- IQuant : Type = Quant ** {
-- isPre : Bool ;
-- } ;
-- linDet : Determiner -> Str = \det -> det.pr ++ det.s ;
Determiner : Type = Quant ** {
pr : Str ; -- prefix for numbers
n : NumType ; -- number as in 5 (noun in singular), Sg or Pl
count: Str ;
} ;
CardNum : Type = {
s : Str ;
} ;
Num : Type = CardNum ** {
n : NumType
} ; -- (Tamil: Necessary for DetQuant : Quant -> Num -> Det ;)
baseNum : Num = {
s = [] ;
n = NoNum Sg
} ;
-- CardOrdNum : Type = CardNum ** {
-- ord : Str
-- } ;
-- DigNum : Type = {
-- s : CardOrd => Str ;
-- } ;
baseQuant : Quant = {
s = [] ;
sp = \\_ => [] ;
-- poss = Bare ;
} ;
-- -- \\vf,pol, =>
-- -- let
-- -- verb : Str = joinVP vp tense ant pol agr ;
-- -- obj : Str = vp.s2 ! agr ;
-- -- in case ord of {
-- -- ODir => subj ++ verb ++ obj ; -- Ġanni jiekol ħut
-- -- OQuest => verb ++ obj ++ subj -- jiekol ħut Ġanni ?
-- -- }
mkQuant : Str -> Quant = \str -> baseQuant ** {
s = str ; -- (Tamil: Extra arguments leftover from Malay)
sp = \\_ => str
} ;
mkDet : Str -> Str -> Number -> Determiner = \cnt, str, num -> mkQuant str ** {
pr = "" ;
n = NoNum num ;
count = "" ;
} ;
-- mkIdet : Str -> Str -> Str -> Number -> Bool -> Determiner = \cnt, str, standalone, num, isPre -> mkDet cnt str num ** {
-- pr = case isPre of {True => str ; False => [] } ;
-- -- if isPre is True, then: "berapa kucing"
-- s = case isPre of { False => str ; True => [] };
-- count = cnt ;
-- sp = \\_ => standalone ;
-- } ;
-- -- s = \\p,a => vp.topic ++ np ++ vp.prePart ++ useVerb vp.verb ! p ! a ++ vp.compl ++ compl ;
-- -- np = vp.topic ++ np ;
-- -- vp = insertObj (ss compl) vp ;
--------------------------------------------------------------------------------
-- Prepositions
-- Preposition : Type = {
-- s : Str ; -- dengan
-- obj : Person => Str ; -- dengan+nya -- needed in relative clauses to refer to the object
-- prepType : PrepType ; -- TODO rename, the name is confusing
-- } ;
-- mkPrep : Str -> Preposition = \dengan -> {
-- s = dengan ;
-- obj = \\p => dengan + poss2str (Poss p) ;
-- prepType = OtherPrep ;
-- } ;
-- -- direct object: "hits him" -> "memukul+nya"
-- dirPrep : Preposition = {
-- s = [] ;
-- obj = table {
-- P1 => BIND ++ "ku" ;
-- P2 => BIND ++ "mu" ;
-- P3 => BIND ++ "nya" } ;
-- prepType = DirObj ;
-- } ;
-- -- truly empty
-- emptyPrep : Preposition = {
-- s = [] ;
-- obj = \\_ => [] ;
-- prepType = EmptyPrep ;
-- } ;
-- datPrep : Preposition = mkPrep "kepada" ;
-- applyPrep : Preposition -> NounPhrase -> Str = \prep,np ->
-- case <np.a, prep.prepType> of {
-- <IsPron p,OtherPrep> => prep.obj ! p ++ np.empty ;
-- _ => prep.s ++ np.s ! Bare
-- } ;
--------------------------------------------------------------------------------
-- Adjectives
-- Adjective : Type = SS ;
-- Adjective2 : Type = Adjective ;
-- mkAdj : Str -> Adjective = \str -> {s = str} ;
-- AdjPhrase : Type = Adjective ; -- ** {compar : Str} ;
--------------------------------------------------------------------------------
-- Verbs
Verb : Type = {s: Tense => VForm => Str} ;
mkVerb : (s : Str) -> Verb = \x -> {
s = table {
Past => table {
VF P1 Sg => x + "nt" + "en" ;
VF P2 Sg => x + "nt" + "ay" ;
VFP3 Sg Hon => x + "nt" + "ar" ;
VFP3 Sg Masc => x + "nt" + "an" ;
VFP3 Sg Fem => x + "nt" + "al" ;
VFP3 Sg Neu => x + "nt" + "atu" ;
VF P1 Pl => x + "nt" + "om" ;
VF P2 Pl => x + "nt" + "irkal" ;
VFP3 Pl Hum => x + "nt" + "arkal" ;
VFP3 Pl Neu => x + "nt" + "ana" ;
VF _ _ => x ;
VFP3 _ _ => x
} ;
Pres => table{
VF P1 Sg => x + "kir" + "en" ;
VF P2 Sg => x + "kir" + "ay" ;
VFP3 Sg Hon => x + "kir" + "ar" ;
VFP3 Sg Masc => x + "kir" + "an" ;
VFP3 Sg Fem => x + "kir" + "al" ;
VFP3 Sg Neu => x + "kir" + "atu" ;
VF P1 Pl => x + "kir" + "om" ;
VF P2 Pl => x + "kir" + "irkal" ;
VFP3 Pl Hum => x + "kir" + "arkal" ;
VFP3 Pl Neu => x + "kir" + "ana" ;
VF _ _ => x ;
VFP3 _ _ => x
} ;
Fut => table{
VF P1 Sg => x + "v" + "en" ;
VF P2 Sg => x + "v" + "ay" ;
VFP3 Sg Hon => x + "v" + "ar" ;
VFP3 Sg Masc => x + "v" + "an" ;
VFP3 Sg Fem => x + "v" + "al" ;
VFP3 Sg Neu => x + "v" + "atu" ;
VF P1 Pl => x + "v" + "om" ;
VF P2 Pl => x + "v" + "irkal" ;
VFP3 Pl Hum => x + "v" + "arkal" ;
VFP3 Pl Neu => x + "v" + "ana" ;
VF _ _ => x ;
VFP3 _ _ => x
} ;
Cond => table{
VF P1 Sg => x + "v" + "en" ;
VF P2 Sg => x + "v" + "ay" ;
VFP3 Sg Hon => x + "v" + "ar" ;
VFP3 Sg Masc => x + "v" + "an" ;
VFP3 Sg Fem => x + "v" + "al" ;
VFP3 Sg Neu => x + "v" + "atu" ;
VF P1 Pl => x + "v" + "om" ;
VF P2 Pl => x + "v" + "irkal" ;
VFP3 Pl Hum => x + "v" + "arkal" ;
VFP3 Pl Neu => x + "v" + "ana" ;
VF _ _ => x ;
VFP3 _ _ => x
}
} ;
} ; -- N.B. Cond is just a placeholder, it uses the Future Tamil case
-- mkVerb2 : Verb -> Preposition -> Verb2 = \v,pr -> v ** {
-- c2 = pr ;
-- passive = "di" ++ BIND ++ v.s ! Root
-- } ;
-- mkVerb3 : Verb -> (p,q : Preposition) -> Verb3 = \v,p,q ->
-- mkVerb2 v p ** {c3 = q} ;
-- mkVerb4 : Verb -> Preposition -> Str -> Verb4 = \v,pr,str -> v ** {
-- s = \\_ => v.s ! Active ++ str;
-- c2 = pr ;
-- passive = "di" ++ BIND ++ v.s ! Root ++ str
-- } ;
-- copula : Verb = {s = \\_ => "ada"} ; -- TODO
------------------
-- Adv
-- Adverb : Type = {
-- s : Str;
-- } ;
-- IAdv : Type = Adverb ** {
-- isPre : Bool ;
-- vf : VForm ;
-- } ;
------------------
-- VP
-- VerbPhrase : Type = {
-- s : VForm => Polarity => Str ; -- tidak or bukan
-- } ;
-- VPSlash : Type = VerbPhrase ** {
-- c2 : Preposition ;
-- adjCompl : Str ;
-- } ;
-- useV : Verb -> VerbPhrase = \v -> v ** {
-- s = \\vf,pol => verbneg pol ++ v.s ! vf
-- } ;
-- useComp : Str -> VerbPhrase = \s -> {
-- s = \\vf,pol => nounneg pol ++ s ;
-- } ;
-- linVP : VerbPhrase -> Str = \vp -> vp.s ! Active ! Pos;
-- https://www.reddit.com/r/indonesian/comments/gsizsv/when_to_use_tidak_bukan_jangan_belum/
-- verbneg : Polarity -> Str = \pol -> case pol of {
-- Neg => "tidak" ; -- or "tak"?
-- Pos => []
-- } ;
-- nounneg : Polarity -> Str = \pol -> case pol of {
-- Neg => "bukan" ;
-- Pos => []
-- } ;
-- impneg : Polarity -> Str = \pol -> case pol of {
-- Neg => "jangan" ;
-- Pos => []
-- } ;
--------------------------------------------------------------------------------
-- Cl, S
-- Clause : Type = {
-- subj : Str ;
-- pred : VForm => Polarity => Str -- Cl may become relative clause, need to keep open VForm
-- } ;
-- RClause : Type = {
-- subj : Str ;
-- pred : Person => Polarity => Str
-- } ;
-- RS : Type = {s : Person => Str} ;
-- ClSlash : Type = Clause ** {c2 : Preposition} ;
-- Sentence : Type = {s : Str} ;
-- predVP : NounPhrase -> VerbPhrase -> Clause = \np,vp -> {
-- subj = np.s ! Bare ;
-- pred = vp.s
-- } ;
-- predVPSlash : NounPhrase -> VPSlash -> ClSlash = \np,vps ->
-- predVP np <vps : VerbPhrase> ** {c2 = vps.c2} ;
-- -- mkClause : Str -> NounPhrase -> VPSlash -> Clause = \str,np,vp -> {
-- -- subj = str ++ np.s ! Bare;
-- -- pred = vp.s
-- -- } ;
-- -- mkClause : Str -> IPhrase -> VerbPhrase -> Clause = \str,ip,vp -> {
-- -- subj = ip.s ! Bare ;
-- -- pred = vp.s ;
-- -- } ;
-- -- baseQuant : Quant = {
-- -- s = [] ;
-- -- sp = \\_ => [] ;
-- -- poss = Bare ;
-- -- } ;
-- -- -- \\vf,pol, =>
-- -- -- let
-- -- -- verb : Str = joinVP vp tense ant pol agr ;
-- -- -- obj : Str = vp.s2 ! agr ;
-- -- -- in case ord of {
-- -- -- ODir => subj ++ verb ++ obj ; -- Ġanni jiekol ħut
-- -- -- OQuest => verb ++ obj ++ subj -- jiekol ħut Ġanni ?
-- -- -- }
-- -- mkQuant : Str -> Quant = \str -> baseQuant ** {
-- -- s = str ;
-- -- sp = \\_ => str
-- -- } ;
--------------------------------------------------------------------------------
-- linrefs
--}
}

99
src/tamil/SentenceTam.gf Normal file
View File

@@ -0,0 +1,99 @@
concrete SentenceTam of Sentence = CatTam ** open
TenseX, ResTam, (AM=AdverbTam), Prelude in {
--flags optimize=all_subs ;
--lin
--2 Clauses
-- -- : NP -> VP -> Cl
-- PredVP = predVP ;
-- -- : SC -> VP -> Cl ; -- that she goes is good (Saeed p. 94)
-- --PredSCVP sc vp = ;
--2 Clauses missing object noun phrases
-- -- : NP -> VPSlash -> ClSlash ;
-- SlashVP = predVPSlash ;
-- -- : ClSlash -> Adv -> ClSlash ; -- (whom) he sees today
-- -- AdvSlash cls adv = cls ** insertAdv adv cls ;
-- -- : Cl -> Prep -> ClSlash ; -- (with whom) he walks
-- SlashPrep cl prep = cl ** {c2 = prep} ;
--2 Imperatives
-- -- : VP -> Imp ;
-- ImpVP vp = {
-- s = \\num,pol => case pol of {
-- Neg => "jangan" ++ vp.s ! Imperative ! Pos;
-- Pos => vp.s ! Imperative ! Pos
-- }
-- } ;
-- -- : VP -> SC ;
-- EmbedVP vp = {s = vp.s ! Root ! Pos} ;
-- {-
-- -- : NP -> VS -> SSlash -> ClSlash ; -- (whom) she says that he loves
-- SlashVS np vs ss = {} ;
-- -- : Temp -> Pol -> ClSlash -> SSlash ; -- (that) she had not seen
-- UseSlash t p cls = {} ;
--2 Imperatives
-- -- : VP -> Imp ;
-- -- ImpVP vp = {s = \\num,pol => linVP (VImp num pol) Statement vp} ;
--2 Embedded sentences
-- -- : S -> SC ;
-- EmbedS s = {s = s.s ! True} ; -- choose subordinate
-- -- : QS -> SC ;
-- -- EmbedQS qs = { } ;
-- -- : VP -> SC ;
-- EmbedVP vp = {s = infVP vp} ;
---}
--2 Sentences
-- -- : Temp -> Pol -> Cl -> S ;
-- UseCl t p cl = {
-- s = cl.subj ++ t.s ++ p.s ++ cl.pred ! Active ! p.p;
-- } ;
-- -- : Temp -> Pol -> QCl -> QS ;
-- UseQCl t p cl = {
-- s = t.s ++ p.s ++ cl.subj ++ cl.pred ! Active ! p.p ;
-- } ;
-- -- : Temp -> Pol -> RCl -> RS ;
-- UseRCl t p cl = {
-- s = \\per => cl.subj ++ t.s ++ p.s ++ cl.pred ! per ! p.p ;
-- } ;
-- -- AdvS : Adv -> S -> S ; -- then I will go home
-- AdvS = advS "" ;
-- -- ExtAdvS : Adv -> S -> S ; -- next week, I will go home
-- ExtAdvS = advS (SOFT_BIND ++ ",");
-- -- : S -> Subj -> S -> S ;
-- -- SSubjS s1 subj s2 = AdvS (AM.SubjS subj s2) s1 ;
-- -- : S -> RS -> S ; -- she sleeps, which is good
-- -- RelS sent rs = advS {s = rs.s ! Sg3 Masc ++ SOFT_BIND ++ ","} sent ;
--oper
-- advS : (comma : Str) -> Adverb -> S -> S = \comma,a,sent -> sent ** {
-- s = a.s ++ comma ++ sent.s
-- } ;
--}
}

190
src/tamil/StructuralTam.gf Normal file
View File

@@ -0,0 +1,190 @@
concrete StructuralTam of Structural = CatTam **
open Prelude, ResTam, (N=NounTam), ParadigmsTam in {
-------
-- Ad*
{-
--lin almost_AdA = mkAdA "" ;
--lin almost_AdN = ss "" ;
--lin at_least_AdN = ss "" ;
--lin at_most_AdN = ss "" ;
--lin so_AdA = ss "" ;
--lin too_AdA = ss "" ;
--lin very_AdA = mkAdA "" ;
--lin as_CAdv = { s = "" ; p = [] } ;
--lin less_CAdv = { s = "" ; p = [] } ;
--lin more_CAdv = { s = "" ; p = [] } ;
--lin how8much_IAdv = ss "" ;
--lin when_IAdv = ss "" ;
---}
--lin how_IAdv = { s = "bagaimana"; isPre = True ; vf = Active } ;
--lin where_IAdv = { s = "mana"; isPre = False ; vf = Root } ;
--lin why_IAdv = {s = "mengapa"; isPre = True ; vf = Root } ;
--{-
--lin always_AdV = ss "" ;
--lin everywhere_Adv = ss "" ;
--lin here7from_Adv = ss "" ;
--lin here7to_Adv = ss "" ;
--lin here_Adv = ss "" ;
--lin quite_Adv = ss "" ;
--lin somewhere_Adv = ss "" ;
--lin there7from_Adv = ss "" ;
--lin there7to_Adv = ss "" ;
--lin there_Adv = ss "" ;
---}
-------
-- Conj
--lin and_Conj = {s2 = "dan" ; s1 = [] ; n = Pl} ;
-- lin or_Conj = {s2 = \\_ => "" ; s1 = [] ; n = Sg} ;
-- lin if_then_Conj = mkConj
-- lin both7and_DConj = mkConj "" "" pl ;
-- lin either7or_DConj = {s2 = \\_ => "" ; s1 = "" ; n = Sg} ;
--
-- lin but_PConj = ss "" ;
-- lin otherwise_PConj = ss "" ;
-- lin therefore_PConj = ss "" ;
-----------------
-- *Det and Quant
--lin how8many_IDet = mkIdet "berapa" "berapa banyak" "" Sg True;
--lin every_Det = mkDet "semua" "semua" Sg ; -- to check
--{-}
--lin all_Predet = {s = ""} ;
--lin not_Predet = { s = "" } ;
--lin only_Predet = { s = "" } ;
--lin most_Predet = {s = ""} ;
--lin few_Det = R.indefDet "" pl ;
--lin many_Det = R.indefDet "" pl ;
--lin much_Det = R.indefDet "" sg ;
--lin somePl_Det =
--lin someSg_Det =
--lin no_Quant = -}
--lin that_Quant = mkQuant "itu" ;
lin this_Quant = mkQuant "idhu" ;
--lin which_IQuant = mkQuant "yang mana" ** {isPre = False} ;
-----
-- NP
--lin somebody_NP = mkNounPhrase "seorang" ; --todo
--{-
--lin everybody_NP = defNP "" N.NumPl ;
--lin everything_NP = defNP "" N.NumSg ;
--lin nobody_NP = mkVerb; ""
--lin nothing_NP = defNP "" N.NumSg ;
--lin somebody_NP = defNP "" N.NumSg ;
--lin something_NP = defNP "" N.NumSg ;
--oper
-- defNP : Str -> Num -> NP = {} ;
---}
-------
-- Prep
-- lin above_Prep = mkPrep ""
-- lin after_Prep = mkPrep ""
-- lin before_Prep = mkPrep "" ;
-- lin behind_Prep = mkPrep "" ;
-- lin between_Prep = = mkPrep "" ;
--lin by8agent_Prep = mkPrep "oleh" ; -- for pronoun agent, see Mintz p. 170, 5.4.1
--lin by8means_Prep = mkPrep "dengan" ;
-- lin during_Prep = mkPrep ;
-- lin except_Prep = mkPrep ;
-- lin for_Prep = mkPrep ;
-- lin from_Prep = mkPrep "" ;
-- lin in8front_Prep = mkPrep "" ;
--lin in_Prep = mkPrep "di" ;
-- lin on_Prep = mkPrep "" ;
-- lin part_Prep = mkPrep ;
--lin possess_Prep = mkPrep [] ; -- TODO check Mintz p. 39-40, 2.2.1.2
-- lin through_Prep = mkPrep ;
-- lin to_Prep = mkPrep "ke" ;
--lin to_Prep =
-- let ke : Preposition = mkPrep "ke";
-- kepada : Preposition = mkPrep "kepada" ;
-- in ke ** {
-- obj = kepada.obj
-- } ;
-- lin have_V2 = let have' : V2 = mkV2 "ada" in have' ** {
-- s = \\_ => "ada" ;
-- passive = "diadakan" ;
-- } ;
-- lin under_Prep = mkPrep "" ;
--lin with_Prep = mkPrep "dengan" ;
-- lin without_Prep = mkPrep "" ;
-------
-- Pron
-- Pronouns are closed class, no constructor in ParadigmsTam.
--lin it_Pron = mkPron "dia" P3 ;
--lin i_Pron = mkPron "aku" P1 ;
--lin youPol_Pron = mkPron "kamu" P2 ;
--lin youSg_Pron = mkPron "kamu" P2 ;
--lin he_Pron = mkPron "dia" P3 ;
--lin she_Pron = mkPron "dia" P3 ;
-- inclusive we
--lin we_Pron = mkPron "kita" P1 ;
--lin youPl_Pron = mkPron "kamu" P2;
--lin they_Pron = mkPron "mereka" P3 ;
--lin whatPl_IP = ;
--lin whatSg_IP = mkIP "apa";
--lin whoPl_IP = ;
--lin whoSg_IP = mkIP "siapa";
-- expected: {s : ParamTam.Possession => Str; a : ParamTam.NPAgr;
-- empty : Str; sp : ParamTam.NForm => Str}
-------
-- Subj
-- lin although_Subj =
-- lin because_Subj =
--lin if_Subj = ss "sekiranya" ;
--lin that_Subj = ss "yang" ;
--lin when_Subj = ss "kalau" ;
------
-- Utt
--lin language_title_Utt = ss "bahasa Melayu" ;
-- lin no_Utt = ss "" ;
-- lin yes_Utt = ss "" ;
-------
-- Verb
--lin have_V2 = let have' : V2 = mkV2 "ada" in have' ** {
-- s = \\_ => "ada" ;
-- passive = "diadakan" ;
--} ;
-- lin can8know_VV = can_VV ; -- can (capacity)
--lin can_VV = mkVV "boleh" ; -- can (possibility)
--lin must_VV = mkVV "perlu" ;
--lin want_VV = mkVV "mahu" ;
------
-- Voc
--{-
--lin please_Voc = ss "" ;
---}
--}
}

51
src/tamil/SymbolTam.gf Normal file
View File

@@ -0,0 +1,51 @@
--# -path=.:../abstract:../common:../prelude
concrete SymbolTam of Symbol = CatTam **
open Prelude, ParadigmsTam, ResTam, (NM=NounTam) in {
--lin
-- -- : Symb -> PN ; -- x
-- SymbPN i = mkPN i.s ;
-- -- : Int -> PN ; -- 27
-- IntPN i = mkPN i.s ;
-- -- : Float -> PN ; -- 3.14159
-- FloatPN i = mkPN i.s ;
-- -- : Card -> PN ; -- twelve [as proper name]
-- NumPN i = mkPN i.s ;
--lin
-- CNIntNP cn i = {} ;
-- -- : Det -> CN -> [Symb] -> NP ; -- (the) (2) numbers x and y
-- CNSymbNP det cn xs =
-- let cnSymb = cn ** {heavyMod = cn.heavyMod ++ xs.s}
-- in NM.DetCN det cnSymb ;
-- -- : CN -> Card -> NP ; -- level five ; level 5
-- CNNumNP cn i = NM.MassNP (cn ** {heavyMod = cn.heavyMod ++ i.s}) ;
-- -- : Symb -> S ;
-- SymbS sy = sy ;
-- -- : Symb -> Card ;
-- SymbNum sy = sy ;
-- -- : Symb -> Ord ;
-- SymbOrd sy = sy ;
--lincat
-- Symb, [Symb] = SS ;
--lin
-- MkSymb s = s ;
-- BaseSymb = infixSS "dan" ; -- TODO check
-- ConsSymb = infixSS "," ;
--}
}

163
src/tamil/VerbTam.gf Normal file
View File

@@ -0,0 +1,163 @@
concrete VerbTam of Verb = CatTam ** open ResTam, AdverbTam, Prelude in {
--lin
-----
-- VP
-- -- : V -> VP
-- UseV = ResTam.useV ;
-- -- : V2 -> VP ; -- be loved
-- PassV2 v2 = useV {s = \\_ => v2.passive} ;
-- -- : VPSlash -> VP ;
-- -- ReflVP = ResTam.insertRefl ;
-- -- : VV -> VP -> VP ;
-- ComplVV vv vp = vp ** useV {
-- s = \\vf => vv.s ++ linVP vp
-- } ;
-- -- : VS -> S -> VP ;
-- -- ComplVS vs s =
-- -- let vps = useV vs ;
-- -- subord = SubjS {s=""} s ;
-- -- in vps ** {} ;
--{-
-- -- : VQ -> QS -> VP ;
-- ComplVQ vq qs = ;
-- -- : VA -> AP -> VP ; -- they become red
-- ComplVA va ap = ResTam.insertComp (CompAP ap).s (useV va) ;
---}
--------
-- Slash
-- -- : V2 -> VPSlash
-- SlashV2a v2 = useV v2 ** {
-- c2 = v2.c2 ;
-- adjCompl = []
-- } ;
-- -- : V3 -> NP -> VPSlash ; -- give it (to her)
-- Slash2V3 v3 dobj = useV {
-- s = \\vf => v3.s ! vf ++ applyPrep v3.c2 dobj
-- } ** {
-- c2 = v3.c3; -- Now the VPSlash is missing only the indirect object
-- adjCompl = []
-- } ;
-- -- : V3 -> NP -> VPSlash ; -- give (it) to her
-- Slash3V3 v3 iobj = useV {
-- s = \\vf => v3.s ! vf ++ applyPrep v3.c3 emptyNP ++ iobj.s ! Bare;
-- --iobj.s ! Bare -- applyPrep v3.c3 iobj -- TODO check if this works for all -- probably not
-- } ** {
-- c2 = v3.c2 ;-- Now the VPSlash is missing only the direct object
-- adjCompl = []
-- } ;
-- -- insertObjc : (Agr => Str) -> SlashVP -> SlashVP = \obj,vp ->
-- -- insertObj obj vp ** {c2 = vp.c2 ; gapInMiddle = vp.gapInMiddle ; missingAdv = vp.missingAdv } ;
-- SlashV2A v2 adj = useV {
-- s = \\vf => v2.s ! vf;
-- } ** {
-- c2 = v2.c2;
-- adjCompl = adj.s
-- } ;
-- {-
-- -- : V2S -> S -> VPSlash ; -- answer (to him) that it is good
-- SlashV2S v2s s =
-- -- : V2V -> VP -> VPSlash ; -- beg (her) to go
-- SlashV2V v2v vp = ;
-- -- : V2Q -> QS -> VPSlash ; -- ask (him) who came
-- SlashV2Q v2q qs = ;
-- -- : V2A -> AP -> VPSlash ; -- paint (it) red
-- SlashV2A v2a ap = ;
---}
-- -- : VPSlash -> NP -> VP
-- ComplSlash vps np = vps ** {
-- s = \\vf,pol =>
-- vps.s ! vf ! pol
-- ++ applyPrep vps.c2 np ++ vps.adjCompl
-- -- s = \\vf,pol => vps.s ! vf ! pol ++ applyPrep vps.c2 np
-- } ;
-- -- : VV -> VPSlash -> VPSlash ;
-- SlashVV vv vps = ComplVV vv vps ** {
-- c2 = vps.c2 ; -- like ComplVV except missing object
-- passive = vv.s ++ vps.passive;
-- adjCompl = vps.adjCompl ;
-- } ;
-- -- SlashVV vv vp = vp ** useV {
-- -- s = \\vf => vv.s ++ linVP vp ;
-- -- c2 = vp.c2 ;
-- -- passive = vv.s ++ vp.passive;
-- -- adjCompl = vp.adjCompl ;
-- -- } ;
-- -- : V2V -> NP -> VPSlash -> VPSlash ; -- beg me to buy
-- -- SlashV2VNP v2v np vps =
-- -- : Comp -> VP ;
-- UseComp comp = comp ;
-- -- : VP -> Adv -> VP ; -- sleep here
-- AdvVP vp adv = vp ** {
-- s = \\vf,pol => vp.s ! vf ! pol ++ adv.s
-- } ;
-- -- : AdV -> VP -> VP ; -- always sleep
-- AdVVP adv vp = vp ** {
-- s = \\vf,pol => vp.s ! vf ! pol ++ adv.s
-- } ;
--{-
-- -- : VPSlash -> Adv -> VPSlash ; -- use (it) here
-- AdvVPSlash = insertAdv ;
-- -- : VP -> Adv -> VP ; -- sleep , even though ...
-- ExtAdvVP vp adv = ;
-- -- : AdV -> VPSlash -> VPSlash ; -- always use (it)
-- AdVVPSlash adv vps = vps ** { adv = adv.s ++ vps.adv } ;
---}
-- -- : VP -> Prep -> VPSlash ; -- live in (it)
-- -- VPSlashPrep vp prep = vp ** {c2 = prep} ;
--2 Complements to copula
-- Adjectival phrases, noun phrases, and adverbs can be used.
-- -- : AP -> Comp ;
-- CompAP ap = useComp ap.s ;
-- -- : CN -> Comp ;
-- CompCN cn = useComp (cn.s ! NF Sg Bare) ;
-- -- NP -> Comp ;
-- CompNP np = useComp (np.s ! Bare) ;
-- -- : Adv -> Comp ;
-- --"Both bukan and tidak may negate prepositional phrases. The choice of either
-- --depends on whether it is the noun within the phrase that is being negated
-- --or the implied verb associated with the phrase." Mintz p. 281 (10.1.4)
-- CompAdv adv = useV {s = \\_ => adv.s} ;
-- -- : VP -- Copula alone;
-- UseCopula = useV copula ;
--}
}