forked from GitHub/gf-rgl
@@ -22,6 +22,7 @@ Ice,Icelandic,icelandic,,,,,,n,,y
|
||||
Ina,Interlingua,interlingua,,,y,,n,n,,n
|
||||
Ita,Italian,italian,Romance,,y,,,,y,y
|
||||
Jpn,Japanese,japanese,,,,,,,,y
|
||||
Kor,Korean,korean,,,n,n,n,n,n,n
|
||||
Lat,Latin,latin,,,,,y,y,n,y
|
||||
Lav,Latvian,latvian,,,,,,,y,y
|
||||
Mlt,Maltese,maltese,,,,,,,,y
|
||||
|
||||
|
7
src/api/CombinatorsKor.gf
Normal file
7
src/api/CombinatorsKor.gf
Normal file
@@ -0,0 +1,7 @@
|
||||
--# -path=.:alltenses:prelude:src/korean
|
||||
|
||||
resource CombinatorsKor = Combinators with
|
||||
(Cat = CatKor),
|
||||
(Structural = StructuralKor),
|
||||
(Noun = NounKor),
|
||||
(Constructors = ConstructorsKor) ** open MissingKor in {} ;
|
||||
3
src/api/ConstructorsKor.gf
Normal file
3
src/api/ConstructorsKor.gf
Normal file
@@ -0,0 +1,3 @@
|
||||
--# -path=.:alltenses:prelude:../korean
|
||||
|
||||
resource ConstructorsKor = Constructors with (Grammar = GrammarKor) ** open MissingKor in {} ;
|
||||
5
src/api/SymbolicKor.gf
Normal file
5
src/api/SymbolicKor.gf
Normal file
@@ -0,0 +1,5 @@
|
||||
--# -path=.:../korean:../common:../abstract:../prelude
|
||||
|
||||
resource SymbolicKor = Symbolic with
|
||||
(Symbol = SymbolKor),
|
||||
(Grammar = GrammarKor) ** open MissingKor in {} ;
|
||||
5
src/api/SyntaxKor.gf
Normal file
5
src/api/SyntaxKor.gf
Normal file
@@ -0,0 +1,5 @@
|
||||
--# -path=.:alltenses:prelude
|
||||
|
||||
instance SyntaxKor of Syntax =
|
||||
ConstructorsKor, CatKor, StructuralKor, CombinatorsKor ;
|
||||
|
||||
3
src/api/TryKor.gf
Normal file
3
src/api/TryKor.gf
Normal file
@@ -0,0 +1,3 @@
|
||||
--# -path=.:../korean:../common:../abstract:../prelude
|
||||
|
||||
resource TryKor = SyntaxKor, LexiconKor, ParadigmsKor - [mkAdv] ;
|
||||
63
src/korean/AdjectiveKor.gf
Normal file
63
src/korean/AdjectiveKor.gf
Normal file
@@ -0,0 +1,63 @@
|
||||
concrete AdjectiveKor of Adjective = CatKor ** open ResKor, Prelude in {
|
||||
|
||||
flags optimize=all_subs ;
|
||||
|
||||
lin
|
||||
|
||||
-- : A -> AP ;
|
||||
PositA a = a ** {
|
||||
compar = [] ;
|
||||
} ;
|
||||
|
||||
-- : A -> NP -> AP ;
|
||||
ComparA a np = a ** {
|
||||
compar = np.s ! Bare
|
||||
} ;
|
||||
|
||||
-- : 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 ** {
|
||||
s = \\_ => ord.s ;
|
||||
compar = []
|
||||
} ;
|
||||
|
||||
-- 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 ** {s = \\af => ada.s ++ ap.s ! af} ;
|
||||
|
||||
|
||||
-- It can also be postmodified by an adverb, typically a prepositional phrase.
|
||||
|
||||
-- : AP -> Adv -> AP ; -- warm by nature
|
||||
-- AdvAP ap adv = ap ** {} ;
|
||||
|
||||
}
|
||||
37
src/korean/AdverbKor.gf
Normal file
37
src/korean/AdverbKor.gf
Normal file
@@ -0,0 +1,37 @@
|
||||
concrete AdverbKor of Adverb = CatKor ** open ResKor, ParamKor, ParadigmsKor, 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 = case prep.attaches of {
|
||||
True => glue (np.s ! Bare) prep.s ;
|
||||
False => np.s ! Bare ++ prep.s }
|
||||
} ;
|
||||
|
||||
-- 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 =
|
||||
|
||||
-- Comparison adverbs also work as numeral adverbs.
|
||||
|
||||
--AdnCAdv : CAdv -> AdN ; -- less (than five)
|
||||
--AdnCAdv cadv = {s = } ;
|
||||
} ;
|
||||
6
src/korean/AllKor.gf
Normal file
6
src/korean/AllKor.gf
Normal file
@@ -0,0 +1,6 @@
|
||||
--# -path=.:../abstract:../common:../prelude
|
||||
|
||||
concrete AllKor of AllKorAbs =
|
||||
LangKor,
|
||||
ExtendKor
|
||||
** {} ;
|
||||
6
src/korean/AllKorAbs.gf
Normal file
6
src/korean/AllKorAbs.gf
Normal file
@@ -0,0 +1,6 @@
|
||||
--# -path=.:../abstract:../common:prelude
|
||||
|
||||
abstract AllKorAbs =
|
||||
Lang,
|
||||
Extend
|
||||
** {} ;
|
||||
123
src/korean/CatKor.gf
Normal file
123
src/korean/CatKor.gf
Normal file
@@ -0,0 +1,123 @@
|
||||
concrete CatKor of Cat = CommonX ** open ResKor, Prelude in {
|
||||
|
||||
flags optimize=all_subs ;
|
||||
|
||||
lincat
|
||||
|
||||
--2 Sentences and clauses
|
||||
-- Constructed in SentenceKor, and also in IdiomKor
|
||||
|
||||
S = ResKor.Sentence ;
|
||||
QS = SS ;
|
||||
RS = SS ;
|
||||
-- relative sentence. Tense and polarity fixed,
|
||||
-- but agreement may depend on the CN/NP it modifies.
|
||||
|
||||
Cl = ResKor.ClSlash ;
|
||||
ClSlash = ResKor.ClSlash ;
|
||||
SSlash = ResKor.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 QuestionKor.
|
||||
|
||||
QCl = ResKor.QClause ;
|
||||
IComp = SS ; -- interrogative complement of copula e.g. "where"
|
||||
IDet = ResKor.Determiner ; -- interrogative determiner e.g. "how many"
|
||||
IQuant = ResKor.Quant ; -- interrogative quantifier e.g. "which"
|
||||
IP = ResKor.NounPhrase ; -- interrogative pronoun e.g. "who"
|
||||
|
||||
--2 Subord clauses and pronouns
|
||||
|
||||
RCl = ResKor.RClause ;
|
||||
RP = SS ;
|
||||
|
||||
--2 Verb phrases
|
||||
|
||||
-- Constructed in VerbKor.
|
||||
|
||||
VP = ResKor.VerbPhrase ;
|
||||
VPSlash = ResKor.VPSlash ;
|
||||
Comp = ResKor.Complement ;
|
||||
|
||||
|
||||
--2 Adjectival phrases
|
||||
|
||||
-- Constructed in AdjectiveKor.
|
||||
|
||||
AP = ResKor.AdjPhrase ;
|
||||
|
||||
|
||||
--2 Nouns and noun phrases
|
||||
|
||||
-- Constructed in NounKor.
|
||||
-- Many atomic noun phrases e.g. "everybody"
|
||||
-- are constructed in StructuralKor.
|
||||
-- The determiner structure is
|
||||
-- ``` Predet (QuantSg | QuantPl Num) Ord
|
||||
-- as defined in NounKor.
|
||||
|
||||
CN = ResKor.CNoun ;
|
||||
NP = ResKor.NounPhrase ;
|
||||
Pron = ResKor.Pronoun ; --Pronouns need enough info to turn it into NP or Quant.
|
||||
Det = ResKor.Determiner ;
|
||||
Predet = {s : Phono => Str ; p : Phono} ;
|
||||
Quant = ResKor.Quant ;
|
||||
Num = ResKor.Num ;
|
||||
Ord = {
|
||||
s : Str ; -- AForm => Str ; -- Ord can come from AP and become AP again
|
||||
n : Number -- Ord can come from Num, which has inherent number
|
||||
} ;
|
||||
DAP = ResKor.Determiner ;
|
||||
|
||||
|
||||
--2 Numerals
|
||||
|
||||
-- Constructed in NumeralKor.
|
||||
|
||||
Card = ResKor.Num ;
|
||||
Numeral = ResKor.Numeral ;
|
||||
Digits = {s : CardOrd => Str ; n : Number} ;
|
||||
|
||||
|
||||
|
||||
--2 Structural words
|
||||
|
||||
-- Constructed in StructuralKor.
|
||||
Conj = ResKor.Conj ;
|
||||
Subj = SS ;
|
||||
Prep = ResKor.Postposition ;
|
||||
|
||||
|
||||
|
||||
--2 Words of open classes
|
||||
|
||||
-- These are constructed in LexiconKor and in
|
||||
-- additional lexicon modules.
|
||||
|
||||
VS, -- sentence-complement verb e.g. "claim"
|
||||
-- TODO: eventually different lincats
|
||||
VQ, -- question-complement verb e.g. "wonder"
|
||||
VA, -- adjective-complement verb e.g. "look"
|
||||
V = ResKor.Verb ;
|
||||
|
||||
VV, -- verb-phrase-complement verb e.g. "want"
|
||||
V2A, -- verb with NP and AP complement e.g. "paint"
|
||||
V2V, -- verb with NP and V complement e.g. "cause"
|
||||
V2S, -- verb with NP and S complement e.g. "tell"
|
||||
V2Q, -- verb with NP and Q complement e.g. "ask"
|
||||
V2 = ResKor.Verb2 ;
|
||||
V3 = ResKor.Verb3 ;
|
||||
|
||||
A = ResKor.Adjective ;
|
||||
A2 = ResKor.Adjective2 ;
|
||||
|
||||
N = ResKor.Noun ;
|
||||
N2 = ResKor.Noun2 ;
|
||||
N3 = ResKor.Noun3 ;
|
||||
PN = ResKor.PNoun ;
|
||||
|
||||
linref
|
||||
V, V2, V3, VP = linVerb ;
|
||||
}
|
||||
134
src/korean/ConjunctionKor.gf
Normal file
134
src/korean/ConjunctionKor.gf
Normal file
@@ -0,0 +1,134 @@
|
||||
concrete ConjunctionKor of Conjunction =
|
||||
CatKor ** open ResKor, 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] = ResKor.Sentence ** {firstS : ConjType => Str} ;
|
||||
|
||||
lin
|
||||
BaseS s1 s2 = s2 ** {
|
||||
firstS = mkFirstS s1
|
||||
} ;
|
||||
|
||||
ConsS s ss = ss ** {
|
||||
firstS = \\conj =>
|
||||
mkFirstS s ! conj ++ ss.firstS ! conj ;
|
||||
} ;
|
||||
|
||||
ConjS co ss = ss ** {
|
||||
s = \\st => co.s1 ++ ss.firstS ! co.c ++ ss.s ! st
|
||||
} ;
|
||||
|
||||
oper
|
||||
mkFirstS : ResKor.Sentence -> ConjType => Str = \s ->
|
||||
\\conj => glue (s.s ! Subord) (conjTable ! NStar ! conj) ;
|
||||
|
||||
lincat
|
||||
[AP] = ResKor.AdjPhrase ** {firstAP : AForm => ConjType => Str} ;
|
||||
|
||||
lin
|
||||
BaseAP a1 a2 = a2 ** {
|
||||
firstAP = mkFirstAP a1 ;
|
||||
} ;
|
||||
|
||||
ConsAP a as = as ** {
|
||||
firstAP = \\af,conj =>
|
||||
mkFirstAP a ! af ! conj ++ as.firstAP ! af ! conj ;
|
||||
} ;
|
||||
|
||||
ConjAP co as = as ** {
|
||||
s = \\af => co.s1 ++ as.firstAP ! af ! co.c ++ as.s ! af
|
||||
} ;
|
||||
|
||||
|
||||
oper
|
||||
mkFirstAP : ResKor.AdjPhrase -> AForm => ConjType => Str = \ap ->
|
||||
\\af,conj => case af of {
|
||||
AAttr => glue (ap.s ! AAttr) (conjTable ! NStar ! conj) ;
|
||||
APred _ => glue (ap.s ! APred VStem) (conjTable ! VStar ! conj) } ;
|
||||
|
||||
{-
|
||||
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] = ResKor.NounPhrase ** {firstNP : ConjType => Str} ;
|
||||
|
||||
lin
|
||||
BaseNP np1 np2 = np2 ** {firstNP = mkFirstNP np1} ;
|
||||
ConsNP np nps = nps ** {
|
||||
firstNP = \\conj => mkFirstNP np ! conj ++ nps.firstNP ! conj
|
||||
} ;
|
||||
ConjNP co nps = nps ** {
|
||||
s = \\nf => co.s1 ++ nps.firstNP ! co.c ++ nps.s ! nf ;
|
||||
n = co.n
|
||||
} ;
|
||||
|
||||
oper
|
||||
mkFirstNP : ResKor.NounPhrase -> ConjType => Str = \np ->
|
||||
\\conj => glue (np.s ! Bare) (conjTable ! NStar ! conj) ;
|
||||
|
||||
}
|
||||
119
src/korean/ConstructionKor.gf
Normal file
119
src/korean/ConstructionKor.gf
Normal file
@@ -0,0 +1,119 @@
|
||||
concrete ConstructionKor of Construction = CatKor ** open ParadigmsKor 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 SyntaxKor.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 May
|
||||
monthYearAdv m y = ; -- in May 2012
|
||||
dayMonthYearAdv d m y = ; -- on 17 May 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" ;
|
||||
|
||||
—}
|
||||
}
|
||||
-}
|
||||
}
|
||||
8
src/korean/ExtendKor.gf
Normal file
8
src/korean/ExtendKor.gf
Normal file
@@ -0,0 +1,8 @@
|
||||
--# -path=.:../common:../abstract
|
||||
|
||||
concrete ExtendKor of Extend = CatKor
|
||||
-- ** ExtendFunctor - []
|
||||
-- with (Grammar=GrammarKor)
|
||||
** open Prelude, ResKor, NounKor in {
|
||||
|
||||
} ;
|
||||
20
src/korean/GrammarKor.gf
Normal file
20
src/korean/GrammarKor.gf
Normal file
@@ -0,0 +1,20 @@
|
||||
concrete GrammarKor of Grammar =
|
||||
NounKor,
|
||||
VerbKor,
|
||||
AdjectiveKor,
|
||||
AdverbKor,
|
||||
NumeralKor,
|
||||
SentenceKor,
|
||||
QuestionKor,
|
||||
RelativeKor,
|
||||
ConjunctionKor,
|
||||
PhraseKor,
|
||||
TextX,
|
||||
StructuralKor,
|
||||
IdiomKor,
|
||||
TenseX
|
||||
** {
|
||||
|
||||
flags startcat = Phr ; unlexer = text ; lexer = text ;
|
||||
|
||||
} ;
|
||||
1054
src/korean/Hangul.gf
Normal file
1054
src/korean/Hangul.gf
Normal file
File diff suppressed because it is too large
Load Diff
10668
src/korean/HangulReplaceVowel.gf
Normal file
10668
src/korean/HangulReplaceVowel.gf
Normal file
File diff suppressed because it is too large
Load Diff
47
src/korean/IdiomKor.gf
Normal file
47
src/korean/IdiomKor.gf
Normal file
@@ -0,0 +1,47 @@
|
||||
|
||||
--1 Idiom: Idiomatic Expressions
|
||||
|
||||
concrete IdiomKor of Idiom = CatKor ** open Prelude, ResKor, VerbKor, NounKor, StructuralKor 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
|
||||
-- GenericCl : VP -> Cl ; -- one sleeps
|
||||
ImpersCl,
|
||||
GenericCl = \vp -> predVP impersNP (passVP 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)
|
||||
-}
|
||||
|
||||
}
|
||||
4
src/korean/LangKor.gf
Normal file
4
src/korean/LangKor.gf
Normal file
@@ -0,0 +1,4 @@
|
||||
concrete LangKor of Lang =
|
||||
GrammarKor,
|
||||
LexiconKor,
|
||||
ConstructionKor ;
|
||||
418
src/korean/LexiconKor.gf
Normal file
418
src/korean/LexiconKor.gf
Normal file
@@ -0,0 +1,418 @@
|
||||
concrete LexiconKor of Lexicon = CatKor **
|
||||
open ParadigmsKor, ResKor 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 = mkV2 "" ;
|
||||
-- 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 "" ;
|
||||
-- lin carpet_N = mkN "" ;
|
||||
lin cat_N = mkN "고양이" ;
|
||||
-- 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 = mkV2 do_V ;
|
||||
-- lin doctor_N = mkN "" ;
|
||||
-- lin dog_N = mkN "" ;
|
||||
-- lin door_N = mkN "" ;
|
||||
-- lin drink_V2 = mkV2 "" ;
|
||||
-- lin dry_A = mkA "" ;
|
||||
-- lin dull_A = mkA "" ;
|
||||
-- lin dust_N = mkN "" ;
|
||||
|
||||
----
|
||||
-- E
|
||||
|
||||
-- lin ear_N = mkN "" ;
|
||||
-- lin earth_N = mkN "" ;
|
||||
lin eat_V2 = mkV2 "먹다" ;
|
||||
-- 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 "집" ;
|
||||
-- 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 "" ;
|
||||
-- lin leather_N = mkN "" ;
|
||||
-- lin leave_V2 = mkV2 "" ;
|
||||
-- lin leg_N = mkN "" ;
|
||||
-- lin lie_V = mkV "" ;
|
||||
-- lin like_V2 = mkV2 "" ;
|
||||
-- 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 = mkV2 "" ;
|
||||
|
||||
----
|
||||
-- M
|
||||
|
||||
lin man_N = mkN "남자" ;
|
||||
-- lin married_A2 = mkA "" ;
|
||||
-- lin meat_N = mkN "" ;
|
||||
lin milk_N = mkN "우유" ;
|
||||
-- lin moon_N = mkN "" ;
|
||||
--lin mother_N2 = mkN2 "" ;
|
||||
-- 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 "지금" ;
|
||||
-- lin number_N = mkN "" ;
|
||||
--
|
||||
-- --------
|
||||
-- -- O - P
|
||||
--
|
||||
--
|
||||
-- lin oil_N = mkN "" ;
|
||||
-- lin old_A = mkA "" ;
|
||||
-- lin open_V2 = mkV2 "" ;
|
||||
-- lin paint_V2A = mkV2A "" ;
|
||||
-- lin paper_N = mkN "" ;
|
||||
-- lin paris_PN = mkPN "Paris" ;
|
||||
-- lin peace_N = mkN "" ;
|
||||
-- lin pen_N = mkN "" ;
|
||||
lin person_N = mkN "사람" ;
|
||||
-- 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 "" ;
|
||||
-- lin question_N = mkN "" ;
|
||||
-- lin radio_N = mkN "" ;
|
||||
-- lin rain_N = mkN "" ;
|
||||
-- lin rain_V0 = mkV "" ;
|
||||
-- lin read_V2 = mkV2 "" ;
|
||||
-- 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 "" ;
|
||||
-- lin run_V = mkV "" ;
|
||||
|
||||
----
|
||||
-- S
|
||||
|
||||
-- lin salt_N = mkN "" ;
|
||||
-- lin sand_N = mkN "" ;
|
||||
-- lin say_VS = mkVS "" ;
|
||||
-- lin school_N = mkN "" ;
|
||||
-- lin science_N = mkN "" ;
|
||||
-- lin scratch_V2 = mkV2 "" ;
|
||||
-- lin sea_N = mkN "" ;
|
||||
lin see_V2 = mkV2 "보다" ;
|
||||
-- lin seed_N = mkN "" ;
|
||||
-- lin seek_V2 = mkV2 "" ;
|
||||
-- lin sell_V3 = mkV3 "" ;
|
||||
-- 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 "키가" small_A ; -- "height is small"
|
||||
-- lin silver_N = mkN "" ;
|
||||
lin sing_V = mkV "노래" do_V ;
|
||||
-- lin sister_N = mkN "" ;
|
||||
-- lin sit_V = mkV "" ;
|
||||
-- lin skin_N = mkN "" ;
|
||||
-- lin sky_N = mkN "" ;
|
||||
-- lin sleep_V = mkV "" ;
|
||||
lin small_A = mkA "작다" ;
|
||||
-- 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 "" ;
|
||||
-- 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 "" ;
|
||||
-- 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 "" ;
|
||||
-- lin teach_V2 = mkV2 "" ;
|
||||
-- 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 = mkAdv "오늘" ;
|
||||
-- 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 "" ;
|
||||
-- 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 "" ;
|
||||
-- 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 "여자" ;
|
||||
-- lin wonder_VQ = mkVQ "" ;
|
||||
-- lin wood_N = mkN "" ;
|
||||
-- lin worm_N = mkN "" ;
|
||||
-- lin write_V2 = mkV2 "" ;
|
||||
-- lin year_N = mkN "" ;
|
||||
-- lin yellow_A = mkA "" ;
|
||||
-- lin young_A = mkA "" ;
|
||||
|
||||
}
|
||||
590
src/korean/MissingKor.gf
Normal file
590
src/korean/MissingKor.gf
Normal file
@@ -0,0 +1,590 @@
|
||||
resource MissingKor = open GrammarKor, Prelude in {
|
||||
-- temporary definitions to enable the compilation of RGL API
|
||||
|
||||
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 AdjDAP : DAP -> AP -> DAP = notYet "AdjDAP" ;
|
||||
oper AdnCAdv : CAdv -> AdN = notYet "AdnCAdv" ;
|
||||
oper AdvAP : AP -> Adv -> AP = notYet "AdvAP" ;
|
||||
oper AdvCN : CN -> Adv -> CN = notYet "AdvCN" ;
|
||||
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 ApposCN : CN -> NP -> CN = notYet "ApposCN" ;
|
||||
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 BaseRS : RS -> RS -> ListRS = notYet "BaseRS" ;
|
||||
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 ComplN2 : N2 -> NP -> CN = notYet "ComplN2" ;
|
||||
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 ComplVV : VV -> VP -> VP = notYet "ComplVV" ;
|
||||
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 ConjRS : Conj -> ListRS -> RS = notYet "ConjRS" ;
|
||||
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 ConsRS : RS -> ListRS -> ListRS = notYet "ConsRS" ;
|
||||
oper CountNP : Det -> NP -> NP = notYet "CountNP" ;
|
||||
oper D_0, D_1, D_2, D_3, D_4, D_5, D_6, D_7, D_8, D_9 : Dig = notYet "D_9" ;
|
||||
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 IDig : Dig -> Digits = notYet "IDig" ;
|
||||
oper IIDig : Dig -> Digits -> Digits = notYet "IIDig" ;
|
||||
oper IdRP : RP = notYet "IdRP" ;
|
||||
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 ImpersCl : VP -> Cl = notYet "ImpersCl" ;
|
||||
oper MassNP : CN -> NP = notYet "MassNP" ;
|
||||
oper NumDigits : Digits -> Card = notYet "NumDigits" ;
|
||||
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 PassV2 : V2 -> VP = notYet "PassV2" ;
|
||||
oper PositAdAAdj : A -> AdA = notYet "PositAdAAdj" ;
|
||||
oper PositAdvAdj : A -> Adv = notYet "PositAdvAdj" ;
|
||||
oper PossNP : CN -> NP -> CN = notYet "PossNP" ;
|
||||
oper PossPron : Pron -> Quant = notYet "PossPron" ;
|
||||
oper PredSCVP : SC -> VP -> Cl = notYet "PredSCVP" ;
|
||||
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 RelCN : CN -> RS -> CN = notYet "RelCN" ;
|
||||
oper RelCl : Cl -> RCl = notYet "RelCl" ;
|
||||
oper RelNP : NP -> RS -> NP = notYet "RelNP" ;
|
||||
oper RelS : S -> RS -> S = notYet "RelS" ;
|
||||
oper RelSlash : RP -> ClSlash -> RCl = notYet "RelSlash" ;
|
||||
oper RelVP : RP -> VP -> RCl = notYet "RelVP" ;
|
||||
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 Slash2V3 : V3 -> NP -> VPSlash = notYet "Slash2V3" ;
|
||||
oper Slash3V3 : V3 -> NP -> VPSlash = notYet "Slash3V3" ;
|
||||
oper SlashPrep : Cl -> Prep -> ClSlash = notYet "SlashPrep" ;
|
||||
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 SlashVP : NP -> VPSlash -> ClSlash = notYet "SlashVP" ;
|
||||
oper SlashVS : NP -> VS -> SSlash -> ClSlash = notYet "SlashVS" ;
|
||||
oper SlashVV : VV -> VPSlash -> VPSlash = notYet "SlashVV" ;
|
||||
oper SubjS : Subj -> S -> Adv = notYet "SubjS" ;
|
||||
oper Use2N3 : N3 -> N2 = notYet "Use2N3" ;
|
||||
oper Use3N3 : N3 -> N2 = notYet "Use3N3" ;
|
||||
oper UseComparA : A -> AP = notYet "UseComparA" ;
|
||||
oper UsePN : PN -> NP = notYet "UsePN" ;
|
||||
oper UsePron : Pron -> NP = notYet "UsePron" ;
|
||||
oper UseRCl : Temp -> Pol -> RCl -> RS = notYet "UseRCl" ;
|
||||
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 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 UttNP : NP -> Utt = notYet "UttNP" ;
|
||||
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 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 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 beautiful_A : A = notYet "beautiful_A" ;
|
||||
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 belly_N : N = notYet "belly_N" ;
|
||||
oper between_Prep : Prep = notYet "between_Prep" ;
|
||||
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 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 bottle_of_CN : NP -> CN = notYet "bottle_of_CN" ;
|
||||
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 buy_V2 : V2 = notYet "buy_V2" ;
|
||||
oper by8agent_Prep : Prep = notYet "by8agent_Prep" ;
|
||||
oper by8means_Prep : Prep = notYet "by8means_Prep" ;
|
||||
oper camera_N : N = notYet "camera_N" ;
|
||||
oper can8know_VV : VV = notYet "can8know_VV" ;
|
||||
oper can_VV : VV = notYet "can_VV" ;
|
||||
oper cap_N : N = notYet "cap_N" ;
|
||||
oper car_N : N = notYet "car_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 cup_of_CN : NP -> CN = notYet "cup_of_CN" ;
|
||||
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 doctor_N : N = notYet "doctor_N" ;
|
||||
oper dog_N : N = notYet "dog_N" ;
|
||||
oper door_N : N = notYet "door_N" ;
|
||||
oper drink_V2 : V2 = notYet "drink_V2" ;
|
||||
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 father_N2 : N2 = notYet "father_N2" ;
|
||||
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 few_X_short_of_Y : NP -> CN -> CN -> S = notYet "few_X_short_of_Y" ;
|
||||
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 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 glass_of_CN : NP -> CN = notYet "glass_of_CN" ;
|
||||
oper glove_N : N = notYet "glove_N" ;
|
||||
oper gold_N : N = notYet "gold_N" ;
|
||||
oper grammar_N : N = notYet "grammar_N" ;
|
||||
oper grass_N : N = notYet "grass_N" ;
|
||||
oper green_A : A = notYet "green_A" ;
|
||||
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_name_Cl : NP -> NP -> Cl = notYet "have_name_Cl" ;
|
||||
oper he_Pron : Pron = notYet "he_Pron" ;
|
||||
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 hit_V2 : V2 = notYet "hit_V2" ;
|
||||
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 i_Pron : Pron = notYet "i_Pron" ;
|
||||
oper ice_N : N = notYet "ice_N" ;
|
||||
oper if_Subj : Subj = notYet "if_Subj" ;
|
||||
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 leaf_N : N = notYet "leaf_N" ;
|
||||
oper learn_V2 : V2 = notYet "learn_V2" ;
|
||||
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 like_V2 : V2 = notYet "like_V2" ;
|
||||
oper listen_V2 : V2 = notYet "listen_V2" ;
|
||||
oper live_V : V = notYet "live_V" ;
|
||||
oper liver_N : N = notYet "liver_N" ;
|
||||
oper long_A : A = notYet "long_A" ;
|
||||
oper lose_V2 : V2 = notYet "lose_V2" ;
|
||||
oper louse_N : N = notYet "louse_N" ;
|
||||
oper love_N : N = notYet "love_N" ;
|
||||
oper love_V2 : V2 = notYet "love_V2" ;
|
||||
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 must_VV : VV = notYet "must_VV" ;
|
||||
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 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 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 old_A : A = notYet "old_A" ;
|
||||
oper on_Prep : Prep = notYet "on_Prep" ;
|
||||
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 rain_N : N = notYet "rain_N" ;
|
||||
oper rain_V0 : V = notYet "rain_V0" ;
|
||||
oper read_V2 : V2 = notYet "read_V2" ;
|
||||
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 school_N : N = notYet "school_N" ;
|
||||
oper science_N : N = notYet "science_N" ;
|
||||
oper scratch_V2 : V2 = notYet "scratch_V2" ;
|
||||
oper sea_N : N = notYet "sea_N" ;
|
||||
oper seed_N : N = notYet "seed_N" ;
|
||||
oper seek_V2 : V2 = notYet "seek_V2" ;
|
||||
oper sell_V3 : V3 = notYet "sell_V3" ;
|
||||
oper send_V3 : V3 = notYet "send_V3" ;
|
||||
oper sew_V : V = notYet "sew_V" ;
|
||||
oper sharp_A : A = notYet "sharp_A" ;
|
||||
oper she_Pron : Pron = notYet "she_Pron" ;
|
||||
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 silver_N : N = notYet "silver_N" ;
|
||||
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 teach_V2 : V2 = notYet "teach_V2" ;
|
||||
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 they_Pron : Pron = notYet "they_Pron" ;
|
||||
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 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 ugly_A : A = notYet "ugly_A" ;
|
||||
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 village_N : N = notYet "village_N" ;
|
||||
oper vomit_V : V = notYet "vomit_V" ;
|
||||
oper wait_V2 : V2 = notYet "wait_V2" ;
|
||||
oper walk_V : V = notYet "walk_V" ;
|
||||
oper want_VV : VV = notYet "want_VV" ;
|
||||
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 we_Pron : Pron = notYet "we_Pron" ;
|
||||
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 when_Subj : Subj = notYet "when_Subj" ;
|
||||
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 with_Prep : Prep = notYet "with_Prep" ;
|
||||
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 youPl_Pron : Pron = notYet "youPl_Pron" ;
|
||||
oper youPol_Pron : Pron = notYet "youPol_Pron" ;
|
||||
oper youSg_Pron : Pron = notYet "youSg_Pron" ;
|
||||
oper young_A : A = notYet "young_A" ;
|
||||
}
|
||||
212
src/korean/NounKor.gf
Normal file
212
src/korean/NounKor.gf
Normal file
@@ -0,0 +1,212 @@
|
||||
concrete NounKor of Noun = CatKor ** open ResKor, Prelude in {
|
||||
|
||||
flags optimize=all_subs ;
|
||||
|
||||
lin
|
||||
|
||||
--2 Noun phrases
|
||||
|
||||
-- : Det -> CN -> NP
|
||||
DetCN det cn = cn ** {s =
|
||||
\\c =>
|
||||
let cns : Str = case det.n of {
|
||||
-- Pl => cn.s ! Bare ++ BIND ++ plural ! c ;
|
||||
_Sg => cn.s ! c } ;
|
||||
dets : Str = det.s ! cn.c.origin ;
|
||||
detnum : Str = case det.numtype of {
|
||||
IsNum => dets ++ cn.c.s ;
|
||||
IsDig => glue dets cn.c.s ;
|
||||
NoNum => dets } ;
|
||||
in case isNum det of {
|
||||
True => cns ++ detnum ;
|
||||
False => detnum ++ cns }
|
||||
} ;
|
||||
|
||||
-- : PN -> NP ;
|
||||
-- UsePN pn = pn ** {
|
||||
-- } ;
|
||||
|
||||
-- : Pron -> NP ;
|
||||
-- UsePron pron = pron ;
|
||||
|
||||
-- : Predet -> NP -> NP ; -- only the man
|
||||
PredetNP predet np = np ** {s =
|
||||
let sakwa = np.s ! Bare ;
|
||||
man = predet.s ! np.p ;
|
||||
un = table {Vowel => "는"; Consonant => "은"} ! predet.p
|
||||
in table { -- TODO: do particles combine?
|
||||
Topic => glue (glue sakwa man) un ;
|
||||
_ => glue sakwa man
|
||||
}
|
||||
} ;
|
||||
|
||||
-- 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 ** {} ;
|
||||
|
||||
-- : NP -> RS -> NP ; -- Paris, which is here
|
||||
-- RelNP np rs = np ** {
|
||||
-- } ;
|
||||
|
||||
-- Determiners can form noun phrases directly.
|
||||
|
||||
-- : Det -> NP ;
|
||||
DetNP det = det ** {
|
||||
s = det.sp ;
|
||||
c = baseCounter
|
||||
} ;
|
||||
|
||||
-- MassNP : CN -> NP ;
|
||||
-- MassNP cn = useN cn ** {
|
||||
-- } ;
|
||||
|
||||
|
||||
--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 ** num ** {
|
||||
s = \\origin => quant.s ++ num.s ! origin ! Attrib
|
||||
} ;
|
||||
|
||||
-- : Quant -> Num -> Ord -> Det ; -- these five best
|
||||
-- DetQuantOrd quant num ord =
|
||||
-- let theseFive = DetQuant quant num in theseFive ** {
|
||||
-- } ;
|
||||
|
||||
-- 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 = Pl} ;
|
||||
|
||||
-- : Card -> Num ;
|
||||
NumCard card = card ;
|
||||
|
||||
-- : Digits -> Card ;
|
||||
-- NumDigits dig =
|
||||
|
||||
-- : 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 = num ** {
|
||||
-- s = \\_ => num.ord
|
||||
-- } ;
|
||||
|
||||
-- : A -> Ord ;
|
||||
-- OrdSuperl a = {
|
||||
-- s = \\af => "제일" ++ a.s ! af ;
|
||||
-- n = Sg -- ?? is this meaningful?
|
||||
-- } ;
|
||||
|
||||
-- One can combine a numeral and a superlative.
|
||||
|
||||
-- : Numeral -> A -> Ord ; -- third largest
|
||||
-- OrdNumeralSuperl num a = num ** { } ;
|
||||
|
||||
-- : Quant
|
||||
DefArt,
|
||||
IndefArt = mkQuant [] [] ;
|
||||
|
||||
-- : Pron -> Quant
|
||||
-- PossPron pron =
|
||||
-- let p = pron.poss ;
|
||||
-- in DefArt ** {
|
||||
-- } ;
|
||||
|
||||
--2 Common nouns
|
||||
|
||||
-- : N -> CN
|
||||
-- : N2 -> CN ;
|
||||
UseN,UseN2 = ResKor.useN ;
|
||||
|
||||
-- : N2 -> NP -> CN ;
|
||||
-- ComplN2 n2 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 => ap.s ! AAttr ++ cn.s ! nf
|
||||
} ;
|
||||
|
||||
-- : CN -> RS -> CN ;
|
||||
-- RelCN cn rs = cn ** {
|
||||
-- } ;
|
||||
|
||||
{-
|
||||
-- : 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 VerbKor.
|
||||
|
||||
-- : 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 ;
|
||||
-- PossNP cn np = cn ** {
|
||||
-- } ;
|
||||
|
||||
-- : 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 ;
|
||||
-}
|
||||
|
||||
}
|
||||
126
src/korean/NumeralKor.gf
Normal file
126
src/korean/NumeralKor.gf
Normal file
@@ -0,0 +1,126 @@
|
||||
concrete NumeralKor of Numeral = CatKor [Numeral,Digits] **
|
||||
open Prelude, ResKor in {
|
||||
|
||||
lincat
|
||||
Digit = LinDigit ;
|
||||
Sub10,
|
||||
Sub100,
|
||||
Sub1000,
|
||||
Sub1000000 = ResKor.Numeral ;
|
||||
|
||||
lin
|
||||
-- : Sub1000000 -> Numeral ; -- 123456 [coercion to top category]
|
||||
num x = x ;
|
||||
|
||||
-- : Digit ;
|
||||
n2 = mkNum4 "이" "둘" "두" "스물" ** {isTwo=True} ;
|
||||
n3 = mkNum4 "삼" "셋" "세" "서른" ;
|
||||
n4 = mkNum4 "사" "넷" "네" "마흔" ;
|
||||
n5 = mkNum4 "오" "다섯" "다섯" "쉰" ;
|
||||
n6 = mkNum2 "육" "여섯" ;
|
||||
n7 = mkNum2 "칠" "일곱" ;
|
||||
n8 = mkNum2 "팔" "여덟" ;
|
||||
n9 = mkNum2 "구" "아홉" ;
|
||||
|
||||
-- : Sub10 ; -- 1
|
||||
pot01 = mkNum5 "일" "하나" "한" "첫" "열" ;
|
||||
|
||||
-- : Digit -> Sub10 ; -- d * 1
|
||||
pot0 x = x ;
|
||||
|
||||
-- : Sub100 ; -- 10
|
||||
pot110 = mkNum2 "십" "열" ;
|
||||
|
||||
-- : Sub100 ; -- 11
|
||||
pot111 = mkNum4 "십일" "열하나" "열한" "십첫" ; -- TODO check
|
||||
|
||||
-- : Digit -> Sub100 ; -- 10 + d
|
||||
pot1to19 d = let newS = xPlus "십" "열" d.s in d ** {
|
||||
s = newS ;
|
||||
n = Pl ;
|
||||
ord = newS ! NK ! Attrib ++ "번째" ;
|
||||
} ;
|
||||
|
||||
-- : Sub10 -> Sub100 ; -- coercion of 1..9
|
||||
pot0as1 x = x ;
|
||||
|
||||
-- : Digit -> Sub100 ; -- d * 10
|
||||
pot1 d = let sk = potTimes "십" "열" d in sk ** {
|
||||
s = table {
|
||||
SK => sk.s ! SK ;
|
||||
NK => case d.isTwo of {
|
||||
True => table {Attrib => "스무" ; Indep => "스물"} ;
|
||||
False => table {_ => d.ten}
|
||||
}
|
||||
}
|
||||
} ;
|
||||
|
||||
-- : Digit -> Sub10 -> Sub100 ; -- d * 10 + n
|
||||
pot1plus d n =
|
||||
let dx10 = pot1 d ;
|
||||
tenSK = glue (dx10.s ! SK ! Indep) "십" ;
|
||||
tenNK = d.ten ;
|
||||
newS = xPlus tenSK tenNK n.s
|
||||
in dx10 ** {
|
||||
s = newS ;
|
||||
ord = newS ! NK ! Attrib ++ "번째" ; -- TODO check
|
||||
} ;
|
||||
|
||||
-- : Sub100 -> Sub1000 ; -- coercion of 1..99
|
||||
pot1as2 x = x ;
|
||||
|
||||
-- : Sub10 -> Sub1000 ; -- m * 100
|
||||
pot2 = potTimes "백" "백" ;
|
||||
|
||||
-- : Sub10 -> Sub100 -> Sub1000 ; -- m * 100 + n
|
||||
pot2plus m n = TODO ;
|
||||
|
||||
-- : Sub1000 -> Sub1000000 ; -- coercion of 1..999
|
||||
pot2as3 x = x ;
|
||||
|
||||
-- : Sub1000 -> Sub1000000 ; -- m * 1000
|
||||
pot3 m = TODO ;
|
||||
|
||||
-- : Sub1000 -> Sub1000 -> Sub1000000 ; -- m * 1000 + n
|
||||
pot3plus m n = TODO ;
|
||||
|
||||
|
||||
oper
|
||||
LinDigit : Type = ResKor.Numeral ** {isTwo : Bool ; ten : Str} ;
|
||||
|
||||
mkNum2 : (sk, nk : Str) -> LinDigit =
|
||||
\sk,nk -> mkNum5 sk nk nk nk (sk+"십") ; -- Digits >5: no NK form for d*10
|
||||
|
||||
mkNum4 : (x1,_,_,x4 : Str) -> LinDigit =
|
||||
\sk,nk,ord,ten -> mkNum5 sk nk ord ord ten ; -- Digits >4: NK attrib==indep
|
||||
|
||||
mkNum5 : (x1,_,_,_,x5 : Str) -> LinDigit = \sk,nk,nkAttr,ord,ten -> {
|
||||
s = table {
|
||||
SK => \\_ => sk ;
|
||||
NK => table {Indep => nk ; _ => nkAttr }
|
||||
} ;
|
||||
n = Pl ;
|
||||
numtype = IsNum ;
|
||||
isTwo = False ;
|
||||
ten = ten ;
|
||||
ord = ord ++ "번째" ;
|
||||
} ;
|
||||
|
||||
NumForm : Type = NumOrigin => DForm => Str ;
|
||||
|
||||
xTimes : (tenSK, tenNK : Str) -> NumForm -> NumForm = \sk,nk,tbl ->
|
||||
table {SK => \\df => glue (tbl ! SK ! df) sk ;
|
||||
NK => \\df => glue (tbl ! NK ! Indep) nk } ;
|
||||
xPlus : (tenSK, tenNK : Str) -> NumForm -> NumForm = \sk,nk,tbl ->
|
||||
table {SK => \\df => glue sk (tbl ! SK ! df) ;
|
||||
NK => \\df => glue nk (tbl ! NK ! df) } ;
|
||||
|
||||
potTimes : (sk,nk : Str) -> ResKor.Numeral -> ResKor.Numeral = \sk,nk,num ->
|
||||
let newS = xTimes sk nk num.s in num ** {
|
||||
s = newS ;
|
||||
n = Pl ;
|
||||
ord = newS ! NK ! Attrib ++ "번째" ; -- TODO check
|
||||
} ;
|
||||
|
||||
TODO : ResKor.Numeral = mkNum2 "TODO" "TODO" ;
|
||||
}
|
||||
144
src/korean/ParadigmsKor.gf
Normal file
144
src/korean/ParadigmsKor.gf
Normal file
@@ -0,0 +1,144 @@
|
||||
resource ParadigmsKor = open CatKor, ResKor, ParamKor, NounKor, 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 $ResKor$.
|
||||
|
||||
|
||||
--2 Nouns
|
||||
|
||||
mkN : overload {
|
||||
mkN : (noun : Str) -> N ; -- Predictable nouns
|
||||
} ;
|
||||
|
||||
--2 Adjectives
|
||||
|
||||
mkA : overload {
|
||||
mkA : (adj : Str) -> A ; -- Regular adjective, given in -다 form
|
||||
mkA : (kiga : Str) -> (jakda : A) -> A ; -- Compound adjective, e.g. 키가 작다 'short', literally 'height (is) small'. 키가 'height' given as string, 작다 'small' given as preconstructed A.
|
||||
} ;
|
||||
|
||||
-- mkA2 : Str -> Prep -> A2 ;
|
||||
|
||||
--2 Verbs
|
||||
|
||||
-- Verbs
|
||||
mkV : overload {
|
||||
mkV : (plain : Str) -> V ; -- Predictable verb. Takes plain, uninflected -다 form, e.g. 가다
|
||||
mkV : (nore : Str) -> (hada : V) -> V ; -- Add a prefix to an existing verb, e.g. 노래+하다
|
||||
} ;
|
||||
|
||||
copula : V ; -- The copula verb ''
|
||||
|
||||
mkV2 : overload {
|
||||
mkV2 : (plain : Str) -> V2 ; -- Regular verb. Takes plain, uninflected -다 form, object particle is 를.
|
||||
mkV2 : V -> V2 ; -- Takes preconstructed V, object particle is 를.
|
||||
} ;
|
||||
|
||||
-- mkV3 : overload {
|
||||
-- } ;
|
||||
|
||||
-- mkVV : overload {
|
||||
-- } ;
|
||||
|
||||
--
|
||||
-- mkVA : Str -> VA
|
||||
-- = \s -> lin VA (regV s) ;
|
||||
-- mkVQ : Str -> VQ
|
||||
-- = \s -> lin VQ (regV s) ;
|
||||
-- mkVS : Str -> VS
|
||||
-- = \s -> lin VS (regV s) ;
|
||||
--
|
||||
-- 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 {
|
||||
mkPrep : (e : Str) -> Prep ; -- Particle like 에, attaches to the NP.
|
||||
mkPrep : (dwie : Str) -> (attaches : Bool) -> Prep ; -- `mkPrep "뒤에" False` for a postposition that doesn't attach to the NP.
|
||||
} ;
|
||||
|
||||
-- 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) ;
|
||||
} ;
|
||||
|
||||
|
||||
mkN2 = overload {
|
||||
mkN2 : Str -> N2 = \s -> lin N2 (mkNoun s) ;
|
||||
mkN2 : N -> N2 = \n -> lin N2 n ;
|
||||
} ;
|
||||
|
||||
-- mkPN = overload {
|
||||
-- } ;
|
||||
|
||||
mkA = overload {
|
||||
mkA : (adj : Str) -> A = \s -> lin A (mkAdj s) ;
|
||||
mkA : (kiga : Str) -> (jakda : A) -> A = \kiga,jakda ->
|
||||
jakda ** {s = \\af => kiga ++ jakda.s ! af} ;
|
||||
} ;
|
||||
|
||||
mkV = overload {
|
||||
mkV : (plain : Str) -> V = \v -> lin V (mkVerb v) ;
|
||||
mkV : (nore : Str) -> (hada : V) -> V = \nore,hada -> hada ** {
|
||||
s = \\vf => nore + hada.s ! vf} ;
|
||||
} ;
|
||||
|
||||
copula = ResKor.copula ;
|
||||
|
||||
-- regV : Str -> Verb = \s -> case s of {
|
||||
-- } ;
|
||||
|
||||
mkV2 = overload {
|
||||
mkV2 : (plain : Str) -> V2 = \v2 -> lin V2 (mkVerb2 v2) ;
|
||||
mkV2 : V -> V2 = vtov2 ;
|
||||
} ;
|
||||
|
||||
mkV3 = overload {
|
||||
mkV3 : (plain : Str) -> V3 = \v3 -> lin V3 (mkVerb3 v3) ;
|
||||
} ;
|
||||
--
|
||||
-- mkVV = overload {
|
||||
-- } ;
|
||||
|
||||
mkPrep = overload {
|
||||
mkPrep : (e : Str) -> Prep -- Particle like 에, attaches to the NP.
|
||||
= \e -> lin Prep (ResKor.mkPrep e) ;
|
||||
mkPrep : (dwie : Str) -> (attaches : Bool) -> Prep -- `mkPrep "뒤에" False` for a postposition that doesn't attach to the NP.
|
||||
= \dwie,f -> lin Prep (ResKor.mkPrep dwie ** {attaches = f}) ;
|
||||
} ;
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
}
|
||||
BIN
src/korean/ParamKor.gf
Normal file
BIN
src/korean/ParamKor.gf
Normal file
Binary file not shown.
29
src/korean/PhraseKor.gf
Normal file
29
src/korean/PhraseKor.gf
Normal file
@@ -0,0 +1,29 @@
|
||||
concrete PhraseKor of Phrase = CatKor ** open Prelude, ResKor in {
|
||||
|
||||
lin
|
||||
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
|
||||
|
||||
UttS s = {s = s.s ! Statement} ;
|
||||
UttQS qs = qs ;
|
||||
UttIAdv iadv = iadv ;
|
||||
{-
|
||||
UttImpSg pol imp =
|
||||
UttImpPl pol imp =
|
||||
UttImpPol = UttImpSg ;
|
||||
|
||||
UttIP ip = {s = ip.s ! } ;
|
||||
UttNP np = {s = np.s ! } ;
|
||||
UttVP vp = {s = } ;
|
||||
UttAdv adv = {s = } ;
|
||||
UttCN n = {s = } ;
|
||||
UttCard n = {s = } ;
|
||||
UttAP ap = { s = ap.s ! } ;
|
||||
UttInterj i = i ;
|
||||
-}
|
||||
NoPConj = {s = []} ;
|
||||
-- PConjConj conj = {s = conj.s1 ++ conj.s2 ! …} ;
|
||||
|
||||
NoVoc = {s = []} ;
|
||||
-- VocNP np = { s = "," ++ np.s ! … } ; -}
|
||||
|
||||
}
|
||||
78
src/korean/QuestionKor.gf
Normal file
78
src/korean/QuestionKor.gf
Normal file
@@ -0,0 +1,78 @@
|
||||
concrete QuestionKor of Question = CatKor ** open
|
||||
Prelude, ResKor, ParadigmsKor, (VS=VerbKor), (NS=NounKor), (SS=StructuralKor) in {
|
||||
|
||||
-- A question can be formed from a clause ('yes-no question') or
|
||||
-- with an interrogative.
|
||||
|
||||
{-
|
||||
lin
|
||||
-- : Cl -> QCl ;
|
||||
QuestCl =
|
||||
|
||||
-- : IP -> VP -> QCl ;
|
||||
QuestVP ip vp =
|
||||
|
||||
-- : IP -> ClSlash -> QCl ; -- whom does John love
|
||||
QuestSlash ip cls =
|
||||
|
||||
-- : IAdv -> Cl -> QCl ; -- why does John walk
|
||||
QuestIAdv iadv cls =
|
||||
|
||||
|
||||
-- : 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)
|
||||
|
||||
-- : IP -> IComp ;
|
||||
CompIP ip = {s = ip.s ! Abs} ; -- who (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
|
||||
-}
|
||||
|
||||
|
||||
}
|
||||
22
src/korean/RelativeKor.gf
Normal file
22
src/korean/RelativeKor.gf
Normal file
@@ -0,0 +1,22 @@
|
||||
concrete RelativeKor of Relative = CatKor ** open
|
||||
ResKor, Prelude, (NS=NounKor), (SS=StructuralKor) in {
|
||||
|
||||
{-
|
||||
lin
|
||||
-- : Cl -> RCl ; -- such that John loves her
|
||||
-- RelCl cl = ;
|
||||
|
||||
-- : RP -> VP -> RCl ;
|
||||
RelVP rp vp =
|
||||
|
||||
-- : RP -> ClSlash -> RCl ; -- whom John loves
|
||||
RelSlash rp cls =
|
||||
|
||||
-- : RP ;
|
||||
IdRP = {s = ""} ;
|
||||
|
||||
-- : Prep -> NP -> RP -> RP ; -- the mother of whom
|
||||
--FunRP prep np rp = {} ;
|
||||
-}
|
||||
|
||||
}
|
||||
325
src/korean/ResKor.gf
Normal file
325
src/korean/ResKor.gf
Normal file
@@ -0,0 +1,325 @@
|
||||
resource ResKor = ParamKor ** open Prelude, Predef, ParamKor in {
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- Nouns
|
||||
oper
|
||||
Counter : Type = {
|
||||
s : Str ;
|
||||
origin : NumOrigin
|
||||
} ;
|
||||
|
||||
baseCounter : Counter = {
|
||||
s = "개" ;
|
||||
origin = NK
|
||||
} ;
|
||||
|
||||
Noun : Type = {
|
||||
s : NForm => Str ;
|
||||
p : Phono ;
|
||||
c : Counter ;
|
||||
} ;
|
||||
Noun2 : Type = Noun ; -- TODO eventually more parameters?
|
||||
Noun3 : Type = Noun ;
|
||||
|
||||
CNoun : Type = Noun ** {
|
||||
} ;
|
||||
|
||||
PNoun : Type = Noun ;
|
||||
|
||||
mkNoun : Str -> Noun = \str -> {
|
||||
s = \\cas => str + allomorph cas str ;
|
||||
p = if_then_else Phono (vowFinal str) Vowel Consonant ;
|
||||
c = baseCounter
|
||||
} ;
|
||||
|
||||
useN : Noun -> CNoun = \n -> n ;
|
||||
|
||||
---------------------------------------------
|
||||
-- NP
|
||||
|
||||
-- BaseNP : Type = {
|
||||
-- a : Agreement ;
|
||||
-- isPron : Bool ;
|
||||
-- empty : Str ; -- standard trick for pro-drop
|
||||
-- } ;
|
||||
--
|
||||
-- emptyNP : NounPhrase = {
|
||||
-- s = \\_ => [] ;
|
||||
-- a = Sg3 Masc ;
|
||||
-- isPron = False ;
|
||||
-- empty = [] ;
|
||||
-- } ;
|
||||
--
|
||||
-- indeclNP : Str -> NounPhrase = \s -> emptyNP ** {s = \\c => s} ;
|
||||
|
||||
--NounPhrase : Type = BaseNP ** {s : NForm => Str} ;
|
||||
NounPhrase = Noun ;
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- Pronouns
|
||||
|
||||
Pronoun : Type = NounPhrase ** {
|
||||
-- poss : { -- for PossPron : Pron -> Quant
|
||||
-- } ;
|
||||
sp : NForm => Str ;
|
||||
} ;
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- Det, Quant, Card, Ord
|
||||
|
||||
BaseQuant : Type = {
|
||||
isPoss : Bool ;
|
||||
p : Phono
|
||||
} ;
|
||||
|
||||
Determiner : Type = BaseQuant ** {
|
||||
s : NumOrigin => Str ; -- Chosen by the counter of CN
|
||||
sp : NForm => Str ;
|
||||
n : Number ;
|
||||
numtype : NumType ; -- Whether its Num component is digit, numeral or Sg/Pl
|
||||
} ;
|
||||
|
||||
Quant : Type = BaseQuant ** {
|
||||
s : Str ;
|
||||
sp : NForm => Str ;
|
||||
} ;
|
||||
|
||||
Num : Type = {
|
||||
s : NumOrigin -- Sino-Korean or native Korean
|
||||
=> DForm -- Independent or attribute
|
||||
=> Str ;
|
||||
n : Number ;
|
||||
numtype : NumType ; -- Digit, numeral or Sg/Pl
|
||||
} ;
|
||||
|
||||
baseNum : Num = {
|
||||
s = \\_,_ => [] ;
|
||||
n = Sg ;
|
||||
numtype = NoNum
|
||||
} ;
|
||||
|
||||
Numeral : Type = Num ** {
|
||||
ord : Str
|
||||
} ;
|
||||
|
||||
baseQuant : BaseQuant = {
|
||||
isPoss = False ;
|
||||
p = Vowel ;
|
||||
} ;
|
||||
|
||||
mkQuant : (s,sp : Str) -> Quant = \s,sp -> baseQuant ** {
|
||||
s = s ;
|
||||
sp = (mkNoun sp).s ;
|
||||
p = (mkNoun sp).p ;
|
||||
} ;
|
||||
|
||||
plural : NForm => Str = table {
|
||||
Bare => "들" ;
|
||||
nf => "들" + allomorph nf "들"
|
||||
} ;
|
||||
--------------------------------------------------------------------------------
|
||||
-- Postpositions
|
||||
|
||||
Postposition : Type = {s : Str ; attaches : Bool} ;
|
||||
|
||||
mkPrep : Str -> Postposition = \str -> {s=str ; attaches=True} ;
|
||||
|
||||
emptyPP : Postposition = mkPrep [] ** {attaches=False} ;
|
||||
datPP : Postposition = mkPrep "에게" ;
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- Adjectives
|
||||
|
||||
Adjective : Type = {s : AForm => Str} ;
|
||||
Adjective2 : Type = Adjective ;
|
||||
|
||||
mkAdj : Str -> Adjective = \plain ->
|
||||
let stem = init plain ;
|
||||
verb = mkVerb plain ;
|
||||
in {
|
||||
s = table { AAttr => add_N stem ;
|
||||
APred vf => verb.s ! vf }
|
||||
} ;
|
||||
|
||||
AdjPhrase : Type = Adjective ** {compar : Str} ;
|
||||
--------------------------------------------------------------------------------
|
||||
-- Verbs
|
||||
|
||||
BaseVerb : Type = {
|
||||
sc : NForm ; -- subject case
|
||||
} ;
|
||||
Verb : Type = BaseVerb ** {
|
||||
s : VForm => Str ;
|
||||
} ;
|
||||
Verb2 : Type = Verb ** {c2 : NForm ; p2 : Postposition} ;
|
||||
Verb3 : Type = Verb2 ** {c3 : NForm ; p3 : Postposition} ;
|
||||
|
||||
-- VV : Type = Verb ** {vvtype : VVForm} ;
|
||||
|
||||
mkVerb : (plain : Str) -> Verb = \plain ->
|
||||
let stem = init plain ;
|
||||
-- plainpres = case vowFinal stem of { -- not used in grammar yet
|
||||
-- True => add_N stem + "다" ;
|
||||
-- False => stem + "는다" } ;
|
||||
informal = add_eo stem ; -- not used in grammar yet
|
||||
polpres = informal + "요" ;
|
||||
formalpres = case vowFinal stem of {
|
||||
True => add_B stem + "니다" ;
|
||||
False => stem + "습니다" } ;
|
||||
neg = stem + "지" ;
|
||||
in mkVerbReg plain polpres formalpres neg ;
|
||||
|
||||
mkVerb2 : (plain : Str) -> Verb2 = \plain -> vtov2 (mkVerb plain) ;
|
||||
mkVerb3 : (plain : Str) -> Verb3 = \plain -> v2tov3 (mkVerb2 plain) ;
|
||||
|
||||
vtov2 : Verb -> Verb2 = \v -> v ** {c2 = Object ; p2 = emptyPP} ;
|
||||
v2tov3 : Verb2 -> Verb3 = \v -> v ** {c3 = Bare ; p3 = datPP} ;
|
||||
|
||||
mkVerbReg : (x1,_,_,x4 : Str) -> Verb =
|
||||
\plain,polite,formal,neg ->
|
||||
let stem = init plain ;
|
||||
planeg = neg ++ negForms ! Plain ;
|
||||
polneg = neg ++ negForms ! Polite ;
|
||||
formneg = neg ++ negForms ! Formal ;
|
||||
in mkVerbFull stem plain polite formal planeg polneg formneg ;
|
||||
|
||||
mkVerbFull : (x1,_,_,_,_,_,x7 : Str) -> Verb =
|
||||
\stem,plain,polite,formal,planeg,polneg,formneg -> {
|
||||
s = table {
|
||||
VStem => stem ;
|
||||
VF Plain Pos => plain ;
|
||||
VF Plain Neg => planeg ;
|
||||
VF Polite Pos => polite ;
|
||||
VF Polite Neg => polneg ;
|
||||
VF Formal Pos => formal ;
|
||||
VF Formal Neg => formneg
|
||||
} ;
|
||||
sc = Subject
|
||||
} ;
|
||||
|
||||
copula : Verb = mkVerbFull
|
||||
"이"
|
||||
"이다"
|
||||
"이에요"
|
||||
"입니다"
|
||||
"아니다"
|
||||
"아니에요"
|
||||
"아닙니다" ;
|
||||
|
||||
copulaAfterVowel : Verb = copula ** {
|
||||
s = \\vf => case vf of {
|
||||
VF Plain Pos => "다" ;
|
||||
VF Polite Pos => "예요" ;
|
||||
_ => copula.s ! vf }
|
||||
} ;
|
||||
|
||||
have_V : Verb = mkVerbFull
|
||||
"있"
|
||||
"있다"
|
||||
"있어요"
|
||||
"있습니다"
|
||||
"없다"
|
||||
"없어요"
|
||||
"없습니다" ;
|
||||
|
||||
do_V : Verb = mkVerbReg
|
||||
"하다"
|
||||
"해요"
|
||||
"합니다"
|
||||
"하지" ;
|
||||
|
||||
negForms : Style => Str =
|
||||
table { Plain => "않다" ;
|
||||
Polite => "않아요" ;
|
||||
Formal => "않습니다" } ;
|
||||
|
||||
------------------
|
||||
-- Adv
|
||||
|
||||
Adverb : Type = SS ;
|
||||
|
||||
------------------
|
||||
-- Conj
|
||||
|
||||
Conj : Type = {
|
||||
s1 : Str ;
|
||||
c : ConjType ; -- if it's And, Or, …
|
||||
-- Need to add conjunction already in ConsX funs.
|
||||
n : Number ;
|
||||
} ;
|
||||
------------------
|
||||
-- VP
|
||||
|
||||
Complement : Type = {
|
||||
s : VForm => Str ;
|
||||
-- compar : Str ; -- comparative is discontinuous
|
||||
} ;
|
||||
|
||||
emptyComp : Complement = {
|
||||
s = \\_ => [] ;
|
||||
-- compar : Str ;
|
||||
} ;
|
||||
|
||||
BaseVP : Type = {
|
||||
adv,
|
||||
nObj,
|
||||
vComp : Str
|
||||
-- {subjunc : Str ; -- inflected verb complement
|
||||
-- inf : Str ; -- infinitive verb complement
|
||||
-- subcl : Str} -- clause complement
|
||||
} ;
|
||||
|
||||
baseVP : BaseVP = {
|
||||
adv,
|
||||
nObj,
|
||||
vComp = [] ;
|
||||
} ;
|
||||
|
||||
VerbPhrase : Type = BaseVerb ** Complement ** BaseVP ;
|
||||
|
||||
VPSlash : Type = Verb2 ** BaseVP ;
|
||||
|
||||
useV : Verb -> VerbPhrase = \v -> baseVP ** v ;
|
||||
|
||||
useVc : Verb2 -> VPSlash = \v2 -> baseVP ** v2 ;
|
||||
|
||||
insertComp : VPSlash -> NounPhrase -> VerbPhrase = \v2,np -> useV v2 ** {
|
||||
nObj = np.s ! v2.c2 ++ v2.p2.s
|
||||
} ;
|
||||
|
||||
insertAdv : VerbPhrase -> SS -> VerbPhrase = \vp,adv -> vp ** {adv = adv.s} ;
|
||||
insertAdvSlash : VPSlash -> SS -> VPSlash = \v,a -> v ** insertAdv v a ;
|
||||
--------------------------------------------------------------------------------
|
||||
-- Cl, S
|
||||
|
||||
Clause : Type = {s : Tense => Anteriority => Polarity => ClType => Str} ;
|
||||
|
||||
{- After PredVP, we might still want to add more adverbs (QuestIAdv),
|
||||
but we're done with verb inflection.
|
||||
-}
|
||||
ClSlash : Type = Clause ;
|
||||
|
||||
QClause : Type = Clause ;
|
||||
|
||||
RClause : Type = {s : NForm => Tense => Anteriority => Polarity => Str} ;
|
||||
|
||||
Sentence : Type = {s : ClType => Str} ;
|
||||
|
||||
predVP : NounPhrase -> VerbPhrase -> ClSlash = \np,vp -> vp ** {
|
||||
s = \\t,a,p,cltyp =>
|
||||
let vf = case cltyp of {
|
||||
Subord => VStem ;
|
||||
_ => VF Polite p } -- TODO: more tenses, politeness
|
||||
in np.s ! vp.sc
|
||||
++ vp.nObj -- an object, not copula complement
|
||||
++ vp.adv
|
||||
++ vp.s ! vf
|
||||
} ;
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- linrefs
|
||||
|
||||
linVerb : Verb -> Str = \v -> v.s ! linVF ;
|
||||
|
||||
}
|
||||
79
src/korean/SentenceKor.gf
Normal file
79
src/korean/SentenceKor.gf
Normal file
@@ -0,0 +1,79 @@
|
||||
concrete SentenceKor of Sentence = CatKor ** open
|
||||
TenseX, ResKor, (AK=AdverbKor), 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 = predVP ;
|
||||
{-
|
||||
-- : ClSlash -> Adv -> ClSlash ; -- (whom) he sees today
|
||||
AdvSlash cls adv = cls ** insertAdv adv cls ;
|
||||
|
||||
-- SlashPrep : Cl -> Prep -> ClSlash ; -- (with whom) he walks
|
||||
|
||||
-- : 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 = \\c => t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p ! c
|
||||
} ;
|
||||
|
||||
-- : Temp -> Pol -> QCl -> QS ;
|
||||
UseQCl t p cl = {s = t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p ! Statement} ;
|
||||
|
||||
-- : Temp -> Pol -> RCl -> RS ;
|
||||
-- UseRCl t p cl = {s = } ;
|
||||
|
||||
-- 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 (AK.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 = \\c => a.s ++ comma ++ sent.s ! c
|
||||
} ;
|
||||
|
||||
}
|
||||
180
src/korean/StructuralKor.gf
Normal file
180
src/korean/StructuralKor.gf
Normal file
@@ -0,0 +1,180 @@
|
||||
concrete StructuralKor of Structural = CatKor **
|
||||
open Prelude, ResKor, (N=NounKor), ParadigmsKor 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 how_IAdv = ss "" :
|
||||
|
||||
lin how8much_IAdv = ss "" ;
|
||||
lin when_IAdv = ss "" ;
|
||||
lin where_IAdv = ss "" :
|
||||
lin why_IAdv = ss "" :
|
||||
|
||||
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
|
||||
|
||||
and_Conj = {
|
||||
s1 = [] ;
|
||||
-- no need for strings here, actual values come from ParamKor.conjTable
|
||||
-- s2 = \\phono => table {
|
||||
-- VStar => "고" ;
|
||||
-- NStar => "하고"} ;
|
||||
n = Pl ;
|
||||
c = And
|
||||
} ;
|
||||
-- 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 = ;
|
||||
|
||||
lin all_Predet = {s = \\_ => "마다" ; p = Vowel} ;
|
||||
--lin not_Predet = { s = "" } ;
|
||||
lin only_Predet = {s = \\_ => "만" ; p = Consonant} ;
|
||||
--lin most_Predet = {s = ""} ;
|
||||
|
||||
{-
|
||||
lin every_Det = R.defDet [] pl **
|
||||
{ s = mkVow } ;
|
||||
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 "그" "그것" ;
|
||||
lin this_Quant = mkQuant "이" "이것" ;
|
||||
{-lin which_IQuant =
|
||||
|
||||
|
||||
-----
|
||||
-- NP
|
||||
|
||||
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 "뒤에" False ;
|
||||
-- lin between_Prep = = mkPrep "" ;
|
||||
-- lin by8agent_Prep = mkPrep ;
|
||||
-- lin by8means_Prep = mkPrep ;
|
||||
-- lin during_Prep = mkPrep ;
|
||||
-- lin except_Prep = mkPrep ;
|
||||
lin for_Prep = mkPrep "에게" ;
|
||||
-- lin from_Prep = mkPrep "" ;
|
||||
-- lin in8front_Prep = mkPrep "" ;
|
||||
lin in_Prep = mkPrep "에서" ;
|
||||
-- lin on_Prep = mkPrep "에서" ;
|
||||
-- lin part_Prep = mkPrep ;
|
||||
lin possess_Prep = mkPrep "의" ;
|
||||
-- lin through_Prep = mkPrep ;
|
||||
lin to_Prep = mkPrep "에";
|
||||
-- lin under_Prep = mkPrep "" ;
|
||||
-- lin with_Prep = mkPrep "" ;
|
||||
-- lin without_Prep = mkPrep "" ;
|
||||
|
||||
|
||||
-------
|
||||
-- Pron
|
||||
|
||||
-- Pronouns are closed class, no constructor in ParadigmsKor.
|
||||
-- it_Pron =
|
||||
-- i_Pron =
|
||||
-- youPol_Pron,
|
||||
-- youSg_Pron =
|
||||
-- he_Pron =
|
||||
-- she_Pron =
|
||||
-- we_Pron =
|
||||
-- youPl_Pron =
|
||||
-- they_Pron =
|
||||
|
||||
--lin whatPl_IP = ;
|
||||
--lin whatSg_IP = :
|
||||
--lin whoPl_IP = ;
|
||||
--lin whoSg_IP = ;
|
||||
|
||||
-------
|
||||
-- Subj
|
||||
|
||||
-- lin although_Subj =
|
||||
-- lin because_Subj =
|
||||
-- lin if_Subj =
|
||||
-- lin that_Subj =
|
||||
-- lin when_Subj =
|
||||
|
||||
|
||||
------
|
||||
-- Utt
|
||||
|
||||
lin language_title_Utt = ss "한국어" ;
|
||||
lin no_Utt = ss "예" ;
|
||||
lin yes_Utt = ss "아니요" ;
|
||||
|
||||
|
||||
-------
|
||||
-- Verb
|
||||
|
||||
lin have_V2 = vtov2 have_V ** {sc = Topic ; c2 = Subject} ;
|
||||
-- lin can8know_VV = can_VV ; -- can (capacity)
|
||||
-- lin can_VV = mkVV "" ; -- can (possibility)
|
||||
-- lin must_VV = mkVV "" ;
|
||||
-- lin want_VV = mkVV "" subjunctive ;
|
||||
|
||||
|
||||
------
|
||||
-- Voc
|
||||
{-
|
||||
lin please_Voc = ss "" ;
|
||||
-}
|
||||
|
||||
}
|
||||
50
src/korean/SymbolKor.gf
Normal file
50
src/korean/SymbolKor.gf
Normal file
@@ -0,0 +1,50 @@
|
||||
--# -path=.:../abstract:../common:../prelude
|
||||
|
||||
concrete SymbolKor of Symbol = CatKor **
|
||||
open Prelude, ParadigmsKor, ResKor, (NS=NounKor) 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 ** { comp = cn.comp ++ xs.s }
|
||||
in NS.DetCN det cnSymb ;
|
||||
|
||||
-- : CN -> Card -> NP ; -- level five ; level 5
|
||||
CNNumNP cn i = NS.MassNP (cn ** { comp = cn.comp ++ i.s }) ;
|
||||
|
||||
-- : Symb -> S ;
|
||||
SymbS sy = {s = } ;
|
||||
-- : Symb -> Card ;
|
||||
SymbNum sy = { s = sy.s ; n = Pl } ;
|
||||
|
||||
-- : Symb -> Ord ;
|
||||
SymbOrd sy = { s =} ;
|
||||
-}
|
||||
lincat
|
||||
Symb, [Symb] = SS ;
|
||||
|
||||
lin
|
||||
MkSymb s = s ;
|
||||
|
||||
BaseSymb = infixSS "과" ; -- 와 after vowel. TODO make it a table.
|
||||
ConsSymb = infixSS "," ;
|
||||
|
||||
|
||||
}
|
||||
139
src/korean/VerbKor.gf
Normal file
139
src/korean/VerbKor.gf
Normal file
@@ -0,0 +1,139 @@
|
||||
concrete VerbKor of Verb = CatKor ** open ResKor, AdverbKor, Prelude in {
|
||||
|
||||
|
||||
lin
|
||||
|
||||
-----
|
||||
-- VP
|
||||
-- : V -> VP
|
||||
UseV = ResKor.useV ;
|
||||
|
||||
-- : V2 -> VP ; -- be loved
|
||||
-- PassV2 = ResKor.passV2 ;
|
||||
|
||||
-- : VPSlash -> VP ;
|
||||
-- ReflVP = ResKor.insertRefl ;
|
||||
|
||||
-- : VV -> VP -> VP ;
|
||||
-- ComplVV vv vp = let vc = vp.vComp in case vv.vvtype of {
|
||||
--
|
||||
-- } ;
|
||||
|
||||
-- : 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 = ResKor.insertComp (CompAP ap).s (useV va) ;
|
||||
|
||||
-}
|
||||
--------
|
||||
-- Slash
|
||||
-- : V2 -> VPSlash
|
||||
SlashV2a = ResKor.useVc ;
|
||||
|
||||
{-
|
||||
|
||||
-- : V3 -> NP -> VPSlash ; -- give it (to her)
|
||||
-- : V3 -> NP -> VPSlash ; -- give (it) to her
|
||||
Slash2V3,
|
||||
Slash3V3 = \v3 -> insertComp (useVc3 v3) ;
|
||||
|
||||
-- : V2S -> S -> VPSlash ; -- answer (to him) that it is good
|
||||
SlashV2S v2s s =
|
||||
let vps = useVc v2s ;
|
||||
subord = SubjS {s=""} s ;
|
||||
in vps ** {obj = } ;
|
||||
|
||||
|
||||
-- : 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 = useVc v2a ** {
|
||||
aComp = \\_ => (CompAP ap).aComp ! Sg3 Masc
|
||||
} ;
|
||||
-}
|
||||
-- : VPSlash -> NP -> VP
|
||||
ComplSlash = ResKor.insertComp ;
|
||||
|
||||
{-
|
||||
-- : VV -> VPSlash -> VPSlash ;
|
||||
-- Just like ComplVV except missing subject!
|
||||
SlashVV vv vps = ComplVV vv vps ** { missing = vps.missing ;
|
||||
post = vps.post } ;
|
||||
|
||||
-- : V2V -> NP -> VPSlash -> VPSlash ; -- beg me to buy
|
||||
SlashV2VNP v2v np vps =
|
||||
ComplVV v2v vps **
|
||||
{ missing = vps.missing ;
|
||||
post = vps.post ;
|
||||
iobj = np ** { s = np.s ! Dat } } ;
|
||||
|
||||
-}
|
||||
|
||||
-- : Comp -> VP ;
|
||||
UseComp comp = UseCopula ** comp ;
|
||||
-- : VP -> Adv -> VP ; -- sleep here
|
||||
AdvVP = insertAdv ;
|
||||
|
||||
-- : VPSlash -> Adv -> VPSlash ; -- use (it) here
|
||||
AdvVPSlash = insertAdvSlash ;
|
||||
|
||||
{-
|
||||
-- : VP -> Adv -> VP ; -- sleep , even though ...
|
||||
ExtAdvVP vp adv = ;
|
||||
|
||||
-- : AdV -> VP -> VP ; -- always sleep
|
||||
AdVVP adv vp = vp ** {adv = 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 =
|
||||
-- let adv = prepNP prep emptyNP
|
||||
-- in insertAdv vp adv ;
|
||||
|
||||
--2 Complements to copula
|
||||
|
||||
-- Adjectival phrases, noun phrases, and adverbs can be used.
|
||||
|
||||
-- : AP -> Comp ;
|
||||
CompAP ap = emptyComp ** {
|
||||
s = \\vf => ap.s ! APred vf
|
||||
} ;
|
||||
|
||||
-- : CN -> Comp ;
|
||||
-- : NP -> Comp ;
|
||||
CompCN,
|
||||
CompNP = \n -> emptyComp ** {
|
||||
s = \\vf =>
|
||||
let cop = case n.p of {
|
||||
Vowel => copulaAfterVowel.s ;
|
||||
Consonant => copula.s }
|
||||
in case vf of {
|
||||
VF _ Neg => n.s ! Bare ++ cop ! vf ;
|
||||
_ => glue (n.s ! Bare) (cop ! vf)
|
||||
}
|
||||
} ;
|
||||
|
||||
-- : Adv -> Comp ;
|
||||
CompAdv adv = emptyComp ** {
|
||||
s = \\vf => adv.s ++ have_V.s ! vf ;
|
||||
} ;
|
||||
|
||||
-- : VP -- Copula alone;
|
||||
UseCopula = useV copula ;
|
||||
|
||||
}
|
||||
7
src/korean/unittest/adverb.gftest
Normal file
7
src/korean/unittest/adverb.gftest
Normal file
@@ -0,0 +1,7 @@
|
||||
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (DetCN (DetQuant DefArt NumSg) (UseN cat_N)) (UseComp (CompAdv (PrepNP in_Prep (DetCN (DetQuant DefArt NumSg) (UseN house_N)))))))) NoVoc
|
||||
LangEng: the cat is in the house
|
||||
LangKor: 고양이가 집 BIND 에서 있어요
|
||||
|
||||
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (DetCN (DetQuant DefArt NumSg) (UseN cat_N)) (UseComp (CompAdv (PrepNP behind_Prep (DetCN (DetQuant DefArt NumSg) (UseN house_N)))))))) NoVoc
|
||||
LangEng: the cat is behind the house
|
||||
LangKor: 고양이가 집 뒤에 있어요
|
||||
31
src/korean/unittest/inflection.gftest
Normal file
31
src/korean/unittest/inflection.gftest
Normal file
@@ -0,0 +1,31 @@
|
||||
|
||||
-----------------------
|
||||
-- Verb inflection --
|
||||
-- (Polite informal) --
|
||||
-----------------------
|
||||
|
||||
-- Regular
|
||||
Lang: eat_V2
|
||||
LangKor: 먹어요
|
||||
|
||||
Lang: UseComp (CompAP (PositA good_A))
|
||||
LangKor: 좋어요
|
||||
|
||||
-- Final ㅏ or ㅓ does not repeat itself
|
||||
Lang: go_V
|
||||
LangKor: 가요
|
||||
|
||||
-- Monosyllabic 으-final is dropped
|
||||
Lang: UseComp (CompAP (PositA big_A))
|
||||
LangKor: 커요
|
||||
|
||||
-- Final ㅗ + -아요 becomes ㅘ요
|
||||
Lang: see_V2
|
||||
LangKor: 봐요
|
||||
|
||||
Lang: come_V
|
||||
LangKor: 와요
|
||||
|
||||
-- Final ㅜ + -어요 becomes ㅝ요
|
||||
Lang: give_V3
|
||||
LangKor: 줘요
|
||||
Reference in New Issue
Block a user