mirror of
https://github.com/GrammaticalFramework/gf-rgl.git
synced 2026-10-25 09:13:18 -06:00
extensions by Codex
This commit is contained in:
1 parent
f0c12fb284
commit
7ac3d7d05d
18 files changed
+489
-265
No files matched your search
@@ -48,9 +48,9 @@ concrete AdjectiveKor of Adjective = CatKor **
|
|||||||
-- phrases, although the semantics is only clear for some adjectives.
|
-- phrases, although the semantics is only clear for some adjectives.
|
||||||
|
|
||||||
-- : AP -> SC -> AP ; -- good that she is here
|
-- : AP -> SC -> AP ; -- good that she is here
|
||||||
-- SentAP ap sc = ap ** {
|
SentAP ap sc = ap ** {
|
||||||
-- s = \\af => ap.s ! af ++ sc.s
|
compar = sc.s ++ ap.compar
|
||||||
-- } ;
|
} ;
|
||||||
|
|
||||||
-- An adjectival phrase can be modified by an *adadjective*, such as "very".
|
-- An adjectival phrase can be modified by an *adadjective*, such as "very".
|
||||||
|
|
||||||
@@ -61,6 +61,6 @@ concrete AdjectiveKor of Adjective = CatKor **
|
|||||||
-- It can also be postmodified by an adverb, typically a prepositional phrase.
|
-- It can also be postmodified by an adverb, typically a prepositional phrase.
|
||||||
|
|
||||||
-- : AP -> Adv -> AP ; -- warm by nature
|
-- : AP -> Adv -> AP ; -- warm by nature
|
||||||
-- AdvAP ap adv = ap ** {} ;
|
AdvAP ap adv = ap ** {compar = adv.s ++ ap.compar} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -3,7 +3,7 @@ concrete AdverbKor of Adverb = CatKor ** open ResKor, ParamKor, ParadigmsKor, Pr
|
|||||||
lin
|
lin
|
||||||
|
|
||||||
-- : A -> Adv ;
|
-- : A -> Adv ;
|
||||||
--PositAdvAdj adj = { } ;
|
PositAdvAdj adj = {s = glue (adj.s ! VStem Pos) "게"} ;
|
||||||
|
|
||||||
-- : CAdv -> A -> NP -> Adv ; -- more warmly than John
|
-- : CAdv -> A -> NP -> Adv ; -- more warmly than John
|
||||||
-- ComparAdvAdj cadv a np = { } ;
|
-- ComparAdvAdj cadv a np = { } ;
|
||||||
@@ -16,15 +16,15 @@ lin
|
|||||||
-- Adverbs can be modified by 'adadjectives', just like adjectives.
|
-- Adverbs can be modified by 'adadjectives', just like adjectives.
|
||||||
|
|
||||||
--AdAdv : AdA -> Adv -> Adv ; -- very quickly
|
--AdAdv : AdA -> Adv -> Adv ; -- very quickly
|
||||||
-- AdAdv ada adv = adv **
|
AdAdv ada adv = {s = ada.s ++ adv.s} ;
|
||||||
-- Like adverbs, adadjectives can be produced by adjectives.
|
-- Like adverbs, adadjectives can be produced by adjectives.
|
||||||
|
|
||||||
-- : A -> AdA ; -- extremely
|
-- : A -> AdA ; -- extremely
|
||||||
-- PositAdAAdj a = { } ;
|
PositAdAAdj a = {s = glue (a.s ! VStem Pos) "게"} ;
|
||||||
-- Subordinate clauses can function as adverbs.
|
-- Subordinate clauses can function as adverbs.
|
||||||
|
|
||||||
-- : Subj -> S -> Adv ;
|
-- : Subj -> S -> Adv ;
|
||||||
-- SubjS subj s =
|
SubjS subj s = {s = s.s ! Subord ++ subj.s} ;
|
||||||
|
|
||||||
-- Comparison adverbs also work as numeral adverbs.
|
-- Comparison adverbs also work as numeral adverbs.
|
||||||
|
|
||||||
|
|||||||
@@ -106,15 +106,20 @@ oper
|
|||||||
False => glue (ap.s ! VStem Neg) (conjTable ! VStar ! conj ! ap.pNeg)
|
False => glue (ap.s ! VStem Neg) (conjTable ! VStar ! conj ! ap.pNeg)
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
{-
|
|
||||||
lincat
|
lincat
|
||||||
[CN] = { } ;
|
[CN] = ResKor.CNoun ** {firstCN : ConjType => Str} ;
|
||||||
|
|
||||||
lin
|
lin
|
||||||
BaseCN = {} ;
|
BaseCN x y = y ** {firstCN = \\c => glue (x.rs ++ x.s ! Bare)
|
||||||
ConsCN = {} ;
|
(conjTable ! NStar ! c ! x.p)} ;
|
||||||
ConjCN co cs = conjunctDistrTable Agr co cs ** cs ;
|
ConsCN x xs = xs ** {firstCN = \\c => glue (x.rs ++ x.s ! Bare)
|
||||||
|
(conjTable ! NStar ! c ! x.p) ++ xs.firstCN ! c} ;
|
||||||
|
ConjCN co xs = xs ** {
|
||||||
|
s = \\nf => co.s1 ++ xs.firstCN ! co.c ++ xs.rs ++ xs.s ! nf ;
|
||||||
|
rs = []
|
||||||
|
} ;
|
||||||
|
|
||||||
|
{-
|
||||||
lincat
|
lincat
|
||||||
[DAP] =
|
[DAP] =
|
||||||
|
|
||||||
|
|||||||
+46
-105
@@ -1,4 +1,5 @@
|
|||||||
concrete ConstructionKor of Construction = CatKor ** open ParadigmsKor in {
|
concrete ConstructionKor of Construction = CatKor **
|
||||||
|
open Prelude, ResKor, (P=ParadigmsKor), (G=GrammarKor) in {
|
||||||
|
|
||||||
lincat
|
lincat
|
||||||
Timeunit = N ;
|
Timeunit = N ;
|
||||||
@@ -6,114 +7,54 @@ lincat
|
|||||||
Monthday = NP ;
|
Monthday = NP ;
|
||||||
Month = N ;
|
Month = N ;
|
||||||
Year = NP ;
|
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
|
lin
|
||||||
|
ready_VP = useV (mkVerb "준비되다") ;
|
||||||
|
has_age_VP card =
|
||||||
|
let age = glue (card.s ! SK ! Attrib) "살" in
|
||||||
|
useV copula ** {
|
||||||
|
s = \\vf => glue age (copula.s ! vf) ;
|
||||||
|
past = \\p => glue age (copula.past ! p) ;
|
||||||
|
pastAttr = \\p => glue age (copula.pastAttr ! p) ;
|
||||||
|
futureAttr = \\p => glue age (copula.futureAttr ! p)
|
||||||
|
} ;
|
||||||
|
|
||||||
|
n_units_AP card unit adj = adj ** {
|
||||||
|
s = \\vf => card.s ! unit.c.origin ! Attrib ++ unit.s ! Bare ++ adj.s ! vf ;
|
||||||
|
compar = []
|
||||||
|
} ;
|
||||||
|
n_units_of_NP card unit np = np ** {
|
||||||
|
s = \\nf => card.s ! unit.c.origin ! Attrib ++ unit.s ! Bare ++ np.s ! nf
|
||||||
|
} ;
|
||||||
|
cup_of_CN np = useN (P.mkN "컵") ** {rs = np.s ! Bare} ;
|
||||||
|
|
||||||
|
weekdayPunctualAdv w = {s = glue (w.s ! Bare) "에"} ;
|
||||||
|
weekdayHabitualAdv w = {s = "매주" ++ glue (w.s ! Bare) "에"} ;
|
||||||
|
yearAdv y = {s = glue (y.s ! Bare) "에"} ;
|
||||||
|
intYear i = lin NP {s = \\_ => glue i.s "년" ; p = Consonant} ;
|
||||||
|
intMonthday i = lin NP {s = \\_ => glue i.s "일" ; p = Consonant} ;
|
||||||
|
|
||||||
weekdayN w = w ;
|
weekdayN w = w ;
|
||||||
monthN m = m ;
|
monthN m = m ;
|
||||||
|
|
||||||
weekdayPN w = mkPN w ;
|
monday_Weekday = P.mkN "월요일" ;
|
||||||
monthPN m = mkPN m ;
|
tuesday_Weekday = P.mkN "화요일" ;
|
||||||
|
wednesday_Weekday = P.mkN "수요일" ;
|
||||||
|
thursday_Weekday = P.mkN "목요일" ;
|
||||||
|
friday_Weekday = P.mkN "금요일" ;
|
||||||
|
saturday_Weekday = P.mkN "토요일" ;
|
||||||
|
sunday_Weekday = P.mkN "일요일" ;
|
||||||
|
|
||||||
languageCN l = mkCN l ;
|
january_Month = P.mkN "1월" ;
|
||||||
languageNP l = mkNP l ;
|
february_Month = P.mkN "2월" ;
|
||||||
|
march_Month = P.mkN "3월" ;
|
||||||
|
april_Month = P.mkN "4월" ;
|
||||||
oper mkLanguage : Str -> N = \s -> mkN s ;
|
may_Month = P.mkN "5월" ;
|
||||||
|
june_Month = P.mkN "6월" ;
|
||||||
----------------------------------------------
|
july_Month = P.mkN "7월" ;
|
||||||
---- lexicon of special names
|
august_Month = P.mkN "8월" ;
|
||||||
|
september_Month = P.mkN "9월" ;
|
||||||
lin second_Timeunit = mkN "second" ;
|
october_Month = P.mkN "10월" ;
|
||||||
lin minute_Timeunit = mkN "minute" ;
|
november_Month = P.mkN "11월" ;
|
||||||
lin hour_Timeunit = mkN "hour" ;
|
december_Month = P.mkN "12월" ;
|
||||||
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" ;
|
|
||||||
|
|
||||||
—}
|
|
||||||
}
|
|
||||||
-}
|
|
||||||
}
|
}
|
||||||
+71
-1
@@ -3,7 +3,11 @@
|
|||||||
concrete ExtendKor of Extend = CatKor
|
concrete ExtendKor of Extend = CatKor
|
||||||
-- ** ExtendFunctor - [ApposNP]
|
-- ** ExtendFunctor - [ApposNP]
|
||||||
-- with (Grammar=GrammarKor)
|
-- with (Grammar=GrammarKor)
|
||||||
** open Prelude, ResKor, NounKor, Coordination, TenseX in {
|
** open Prelude, ResKor, NounKor, Coordination, TenseX,
|
||||||
|
(G=GrammarKor) in {
|
||||||
|
|
||||||
|
lincat
|
||||||
|
VPS, [VPS], VPI, [VPI], RNP, [Comp], [Imp] = SS ;
|
||||||
|
|
||||||
lin
|
lin
|
||||||
UttAdV adv = {s = adv.s} ;
|
UttAdV adv = {s = adv.s} ;
|
||||||
@@ -11,5 +15,71 @@ concrete ExtendKor of Extend = CatKor
|
|||||||
-- : NP -> NP -> NP
|
-- : NP -> NP -> NP
|
||||||
ApposNP np1 np2 = np1 ** {s = \\nf => np1.s ! nf ++ np2.s ! nf} ;
|
ApposNP np1 np2 = np1 ** {s = \\nf => np1.s ! nf ++ np2.s ! nf} ;
|
||||||
|
|
||||||
|
EmptyRelSlash cl = cl ;
|
||||||
|
|
||||||
|
ReflPron = {s="자신"} ;
|
||||||
|
ReflPoss n cn = {s="자신의" ++ cn.rs ++ cn.s ! Bare} ;
|
||||||
|
AdvRNP np prep rnp = {s=np.s ! Bare ++ rnp.s ++ prep.s ! Vowel} ;
|
||||||
|
AdvRVP vp prep rnp = insertAdv vp {s=rnp.s ++ prep.s ! Vowel} ;
|
||||||
|
AdvRAP ap prep rnp = ap ** {compar=rnp.s ++ prep.s ! Vowel ++ ap.compar} ;
|
||||||
|
PossPronRNP pron n cn rnp = G.DetCN (G.DetQuant (G.PossPron pron) n)
|
||||||
|
(cn ** {rs=glue rnp.s "의" ++ cn.rs}) ;
|
||||||
|
|
||||||
|
GenModNP n np cn = G.DetCN (G.DetQuant G.DefArt n)
|
||||||
|
(cn ** {rs=glue (np.s ! Bare) "의" ++ cn.rs}) ;
|
||||||
|
CompoundN first head = head ** {
|
||||||
|
s = \\nf => first.s ! Bare ++ head.s ! nf
|
||||||
|
} ;
|
||||||
|
CompoundAP n a = a ** {s=\\vf=>n.s ! Bare ++ a.s ! vf; compar=[]} ;
|
||||||
|
PresPartAP vp = do_A ** {s=\\vf=>linVP vf vp; compar=[]} ;
|
||||||
|
PastPartAP slash = do_A ** {
|
||||||
|
s=\\vf=>slash.adv ++ slash.s ! vf; compar=[]
|
||||||
|
} ;
|
||||||
|
PastPartAgentAP slash agent = do_A ** {
|
||||||
|
s=\\vf=>glue (agent.s ! Bare) "에게" ++ slash.adv ++
|
||||||
|
slash.s ! vf; compar=[]
|
||||||
|
} ;
|
||||||
|
PassVPSlash slash = useV slash ** {adv=slash.adv} ;
|
||||||
|
PassAgentVPSlash slash agent = insertAdv (PassVPSlash slash)
|
||||||
|
{s=glue (agent.s ! Bare) "에게"} ;
|
||||||
|
ProgrVPSlash slash = slash ** {
|
||||||
|
s=\\vf=>glue (slash.s ! VStem Pos) "고" ++ have_V.s ! vf
|
||||||
|
} ;
|
||||||
|
GerundCN vp = useN (stringN (linVP (VAttr Pos) vp ++ "것")) ;
|
||||||
|
GerundNP vp = stringNP (linVP (VAttr Pos) vp ++ "것") ;
|
||||||
|
GerundAdv vp = {s=glue (linVP (VStem Pos) vp) "면서"} ;
|
||||||
|
ByVP vp = {s=linVP (VAttr Pos) vp ++ "것으로써"} ;
|
||||||
|
PositAdVAdj a = {s=glue (a.s ! VStem Pos) "게"} ;
|
||||||
|
ComplBareVS vs s = useV vs ** {adv=s.s ! Subord ++ "고"} ;
|
||||||
|
ComplSlashPartLast = G.ComplSlash ;
|
||||||
|
UttVPShort = G.UttVP ;
|
||||||
|
|
||||||
|
UseDAP d = d ** {s=d.sp} ;
|
||||||
|
UseDAPMasc = UseDAP ;
|
||||||
|
UseDAPFem = UseDAP ;
|
||||||
|
|
||||||
|
MkVPS t pol vp = {s=t.s ++ pol.s ++
|
||||||
|
vp.nObj ! DeclObj ++ vp.adv ++
|
||||||
|
tenseVP t.t t.a (Statement Formal) pol.p vp} ;
|
||||||
|
BaseVPS x y = {s=x.s ++ y.s} ;
|
||||||
|
ConsVPS x xs = {s=x.s ++ xs.s} ;
|
||||||
|
ConjVPS co xs = {s=co.s1 ++ xs.s} ;
|
||||||
|
PredVPS np vps = {s=\\_=>np.s ! Subject ++ vps.s; p=Vowel} ;
|
||||||
|
MkVPI vp = {s=linVP (VAttr Pos) vp ++ "것"} ;
|
||||||
|
BaseVPI x y = {s=x.s ++ y.s} ;
|
||||||
|
ConsVPI x xs = {s=x.s ++ xs.s} ;
|
||||||
|
ConjVPI co xs = {s=co.s1 ++ xs.s} ;
|
||||||
|
ComplVPIVV vv vpi = useV vv ** {adv=glue vpi.s "을"} ;
|
||||||
|
BaseImp x y = {s=x.s ! Pos ++ y.s ! Pos} ;
|
||||||
|
ConsImp x xs = {s=x.s ! Pos ++ xs.s} ;
|
||||||
|
ConjImp co xs = {s=\\_=>co.s1 ++ xs.s} ;
|
||||||
|
BaseComp x y = {s=x.s ! VAttr Pos ++ y.s ! VAttr Pos} ;
|
||||||
|
ConsComp x xs = {s=x.s ! VAttr Pos ++ xs.s} ;
|
||||||
|
ConjComp co xs = emptyComp ** {s=\\_=>co.s1 ++ xs.s} ;
|
||||||
|
|
||||||
TPastSimple = TPast ;
|
TPastSimple = TPast ;
|
||||||
|
|
||||||
|
oper
|
||||||
|
stringNP : Str -> NounPhrase = \s -> {s=\\_=>s; p=Consonant} ;
|
||||||
|
stringN : Str -> Noun = \s -> stringNP s ** {c=baseCounter} ;
|
||||||
} ;
|
} ;
|
||||||
@@ -20,6 +20,9 @@ oper
|
|||||||
|
|
||||||
addSuffix : Str -> Str = \stem ->
|
addSuffix : Str -> Str = \stem ->
|
||||||
case stem of {
|
case stem of {
|
||||||
|
-- 하다 and all productive 하다 compounds contract 하+여 to 해.
|
||||||
|
start + "하" => start + "해" ;
|
||||||
|
|
||||||
-- Final ㅏ or ㅓ does not repeat itself.
|
-- Final ㅏ or ㅓ does not repeat itself.
|
||||||
_ + #a|#eo
|
_ + #a|#eo
|
||||||
=> stem ;
|
=> stem ;
|
||||||
|
|||||||
+15
-18
@@ -6,42 +6,39 @@ concrete IdiomKor of Idiom = CatKor ** open Prelude, ResKor, VerbKor, NounKor, S
|
|||||||
-- This module defines constructions that are formed in fixed ways,
|
-- This module defines constructions that are formed in fixed ways,
|
||||||
-- often different even in closely related languages.
|
-- often different even in closely related languages.
|
||||||
|
|
||||||
{- lin
|
lin
|
||||||
|
|
||||||
|
|
||||||
-- ImpersCl : VP -> Cl ; -- it is hot
|
ImpersCl vp = predVP' [] vp ;
|
||||||
-- GenericCl : VP -> Cl ; -- one sleeps
|
GenericCl vp = predVP' "사람이" vp ;
|
||||||
ImpersCl,
|
|
||||||
GenericCl = \vp -> predVP impersNP (passVP vp) ;
|
|
||||||
|
|
||||||
CleftNP : NP -> RS -> Cl ; -- it is I who did it
|
-- CleftNP : NP -> RS -> Cl ; -- it is I who did it
|
||||||
CleftAdv : Adv -> S -> Cl ; -- it is here she slept
|
-- CleftAdv : Adv -> S -> Cl ; -- it is here she slept
|
||||||
|
|
||||||
-- : NP -> Cl ; -- there is a house
|
ExistNP np = predVP np (useV have_V) ;
|
||||||
ExistNP np =
|
|
||||||
|
|
||||||
ExistIP : IP -> QCl ; -- which houses are there
|
-- ExistIP : IP -> QCl ; -- which houses are there
|
||||||
|
|
||||||
-- 7/12/2012 generalizations of these
|
-- 7/12/2012 generalizations of these
|
||||||
|
|
||||||
ExistNPAdv : NP -> Adv -> Cl ; -- there is a house in Paris
|
ExistNPAdv np adv = predVP np (insertAdv (useV have_V) adv) ;
|
||||||
ExistIPAdv : IP -> Adv -> QCl ; -- which houses are there in Paris
|
-- ExistIPAdv : IP -> Adv -> QCl ; -- which houses are there in Paris
|
||||||
|
|
||||||
-- : VP -> VP ;
|
-- : VP -> VP ;
|
||||||
ProgrVP vp = vp ** {
|
ProgrVP vp = vp ** {
|
||||||
|
s = \\vf => glue (vp.s ! VStem Pos) "고" ++ have_V.s ! vf
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|
||||||
-- : VP -> Utt ; -- let's go
|
-- : VP -> Utt ; -- let's go
|
||||||
ImpPl1 vp = { } ;
|
ImpPl1 vp = {s = vp.nObj ! ImpObj ++ vp.adv ++ vp.s ! VF Polite Pos} ;
|
||||||
|
|
||||||
ImpP3 : NP -> VP -> Utt ; -- let John walk
|
-- ImpP3 : NP -> VP -> Utt ; -- let John walk
|
||||||
|
|
||||||
-- 3/12/2013 non-reflexive uses of "self"
|
-- 3/12/2013 non-reflexive uses of "self"
|
||||||
|
|
||||||
SelfAdvVP : VP -> VP ; -- is at home himself
|
-- SelfAdvVP : VP -> VP ; -- is at home himself
|
||||||
SelfAdVVP : VP -> VP ; -- is himself at home
|
-- SelfAdVVP : VP -> VP ; -- is himself at home
|
||||||
SelfNP : NP -> NP ; -- the president himself (is at home)
|
-- SelfNP : NP -> NP ; -- the president himself (is at home)
|
||||||
-}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
concrete NamesKor of Names = CatKor ** open ResKor in {
|
concrete NamesKor of Names = CatKor ** open Prelude, ResKor in {
|
||||||
|
|
||||||
lin GivenName, MaleSurname, FemaleSurname = \n -> n ;
|
lin GivenName, MaleSurname, FemaleSurname = \n -> n ;
|
||||||
lin FullName gn sn = {
|
lin FullName gn sn = {
|
||||||
@@ -7,5 +7,7 @@ lin FullName gn sn = {
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
UseLN pn = pn ;
|
UseLN pn = pn ;
|
||||||
|
InLN pn = {s = glue (pn.s ! Bare) "에서"} ;
|
||||||
|
AdjLN ap pn = pn ** {s = \\nf => ap.compar ++ ap.s ! VAttr Pos ++ pn.s ! nf} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
+42
-29
@@ -20,6 +20,13 @@ concrete NounKor of Noun = CatKor ** open ResKor, Prelude in {
|
|||||||
in case isNum det of {
|
in case isNum det of {
|
||||||
True => cn.rs ++ cns ++ detnum ;
|
True => cn.rs ++ cns ++ detnum ;
|
||||||
False => cn.rs ++ detnum ++ cns }
|
False => cn.rs ++ detnum ++ cns }
|
||||||
|
; p = case isNum det of {
|
||||||
|
True => cn.c.p ;
|
||||||
|
False => case det.n of {
|
||||||
|
Pl => Consonant ;
|
||||||
|
Sg => cn.p
|
||||||
|
}
|
||||||
|
}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- : PN -> NP ;
|
-- : PN -> NP ;
|
||||||
@@ -30,13 +37,7 @@ concrete NounKor of Noun = CatKor ** open ResKor, Prelude in {
|
|||||||
|
|
||||||
-- : Predet -> NP -> NP ; -- only the man
|
-- : Predet -> NP -> NP ; -- only the man
|
||||||
PredetNP predet np = np ** {s =
|
PredetNP predet np = np ** {s =
|
||||||
let sakwa = np.s ! Bare ;
|
\\nf => predet.s ! np.p ++ np.s ! nf
|
||||||
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
|
-- A noun phrase can also be postmodified by the past participle of a
|
||||||
@@ -52,8 +53,7 @@ concrete NounKor of Noun = CatKor ** open ResKor, Prelude in {
|
|||||||
s = \\nf => adv.s ++ np.s ! nf
|
s = \\nf => adv.s ++ np.s ! nf
|
||||||
} ; -- TODO test
|
} ; -- TODO test
|
||||||
|
|
||||||
-- : NP -> Adv -> NP ; -- boys, such as ..
|
ExtAdvNP np adv = np ** {s = \\nf => adv.s ++ np.s ! nf} ;
|
||||||
-- ExtAdvNP np adv = np ** {} ;
|
|
||||||
|
|
||||||
-- : NP -> RS -> NP ; -- Paris, which is here
|
-- : NP -> RS -> NP ; -- Paris, which is here
|
||||||
-- RelNP np rs = np ** {
|
-- RelNP np rs = np ** {
|
||||||
@@ -67,6 +67,11 @@ concrete NounKor of Noun = CatKor ** open ResKor, Prelude in {
|
|||||||
c = baseCounter
|
c = baseCounter
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
QuantityNP dec unit = {
|
||||||
|
s = \\_ => dec.s ! NCard ++ unit.s ;
|
||||||
|
p = Consonant
|
||||||
|
} ;
|
||||||
|
|
||||||
-- MassNP : CN -> NP ;
|
-- MassNP : CN -> NP ;
|
||||||
MassNP cn = cn ** {
|
MassNP cn = cn ** {
|
||||||
s = \\nf => cn.rs ++ cn.s ! nf
|
s = \\nf => cn.rs ++ cn.s ! nf
|
||||||
@@ -83,9 +88,11 @@ concrete NounKor of Noun = CatKor ** open ResKor, Prelude in {
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- : Quant -> Num -> Ord -> Det ; -- these five best
|
-- : Quant -> Num -> Ord -> Det ; -- these five best
|
||||||
-- DetQuantOrd quant num ord =
|
DetQuantOrd quant num ord =
|
||||||
-- let theseFive = DetQuant quant num in theseFive ** {
|
let det = DetQuant quant num in det ** {
|
||||||
-- } ;
|
s = \\origin => det.s ! origin ++ ord.s ! VAttr Pos ;
|
||||||
|
sp = \\nf => ord.s ! VAttr Pos ++ det.sp ! nf
|
||||||
|
} ;
|
||||||
|
|
||||||
-- Whether the resulting determiner is singular or plural depends on the
|
-- Whether the resulting determiner is singular or plural depends on the
|
||||||
-- cardinal.
|
-- cardinal.
|
||||||
@@ -116,17 +123,20 @@ concrete NounKor of Noun = CatKor ** open ResKor, Prelude in {
|
|||||||
-- : Numeral -> Card ;
|
-- : Numeral -> Card ;
|
||||||
NumNumeral num = num ;
|
NumNumeral num = num ;
|
||||||
|
|
||||||
{-
|
|
||||||
-- : AdN -> Card -> Card ;
|
-- : AdN -> Card -> Card ;
|
||||||
AdNum adn card = card ** { s = adn.s ++ card.s } ;
|
AdNum adn card = card ** {s = \\o,f => adn.s ++ card.s ! o ! f} ;
|
||||||
|
|
||||||
-- : Digits -> Ord ;
|
-- : Digits -> Ord ;
|
||||||
OrdDigits digs = digs ** { s = digs.s ! NOrd } ;
|
OrdDigits digs = do_A ** {
|
||||||
-}
|
s = \\_ => digs.s ! NOrd ;
|
||||||
|
n = digs.n
|
||||||
|
} ;
|
||||||
|
|
||||||
-- : Numeral -> Ord ;
|
-- : Numeral -> Ord ;
|
||||||
-- OrdNumeral num = num ** {
|
OrdNumeral num = do_A ** {
|
||||||
-- s = \\_ => num.ord
|
s = \\_ => num.ord ;
|
||||||
-- } ;
|
n = num.n
|
||||||
|
} ;
|
||||||
|
|
||||||
-- : A -> Ord ;
|
-- : A -> Ord ;
|
||||||
OrdSuperl a = a ** {
|
OrdSuperl a = a ** {
|
||||||
@@ -153,7 +163,9 @@ concrete NounKor of Noun = CatKor ** open ResKor, Prelude in {
|
|||||||
UseN,UseN2 = ResKor.useN ;
|
UseN,UseN2 = ResKor.useN ;
|
||||||
|
|
||||||
-- : N2 -> NP -> CN ;
|
-- : N2 -> NP -> CN ;
|
||||||
-- ComplN2 n2 np =
|
ComplN2 n2 np = useN n2 ** {
|
||||||
|
rs = (prepNP Bare n2.p2 np).s
|
||||||
|
} ;
|
||||||
|
|
||||||
-- : N3 -> NP -> N2 ; -- distance from this city (to Paris)
|
-- : N3 -> NP -> N2 ; -- distance from this city (to Paris)
|
||||||
-- ComplN3 n3 np =
|
-- ComplN3 n3 np =
|
||||||
@@ -202,28 +214,29 @@ concrete NounKor of Noun = CatKor ** open ResKor, Prelude in {
|
|||||||
--2 Possessive and partitive constructs
|
--2 Possessive and partitive constructs
|
||||||
|
|
||||||
-- : PossNP : CN -> NP -> CN ;
|
-- : PossNP : CN -> NP -> CN ;
|
||||||
-- PossNP cn np = cn ** {
|
PossNP cn np = cn ** {
|
||||||
-- } ;
|
rs = glue (np.s ! Bare) "의" ++ cn.rs
|
||||||
|
} ;
|
||||||
|
|
||||||
-- : CN -> NP -> CN ; -- glass of wine / two kilos of red apples
|
-- : CN -> NP -> CN ; -- glass of wine / two kilos of red apples
|
||||||
-- PartNP cn np = cn ** {
|
PartNP cn np = cn ** {
|
||||||
-- } ;
|
rs = np.s ! Bare ++ cn.rs
|
||||||
|
} ;
|
||||||
{-
|
|
||||||
|
|
||||||
-- This is different from the partitive, as shown by many languages.
|
-- This is different from the partitive, as shown by many languages.
|
||||||
|
|
||||||
-- : Det -> NP -> NP ;
|
-- : Det -> NP -> NP ;
|
||||||
CountNP det np = np **
|
CountNP det np = np **
|
||||||
{ } ; -- Nonsense for DefArt or IndefArt
|
{s = \\nf => det.s ! NK ++ np.s ! nf} ; -- Nonsense for DefArt or IndefArt
|
||||||
|
|
||||||
--3 Conjoinable determiners and ones with adjectives
|
--3 Conjoinable determiners and ones with adjectives
|
||||||
|
|
||||||
-- : DAP -> AP -> DAP ; -- the large (one)
|
-- : DAP -> AP -> DAP ; -- the large (one)
|
||||||
AdjDAP dap ap = dap ** { } ;
|
AdjDAP dap ap = dap ** {
|
||||||
|
sp = \\nf => ap.compar ++ ap.s ! VAttr Pos ++ dap.sp ! nf
|
||||||
|
} ;
|
||||||
|
|
||||||
-- : Det -> DAP ; -- this (or that)
|
-- : Det -> DAP ; -- this (or that)
|
||||||
DetDAP det = det ;
|
DetDAP det = det ;
|
||||||
-}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -75,19 +75,25 @@ lin
|
|||||||
pot2 = potTimes "백" "백" ;
|
pot2 = potTimes "백" "백" ;
|
||||||
|
|
||||||
-- : Sub10 -> Sub100 -> Sub1000 ; -- m * 100 + n
|
-- : Sub10 -> Sub100 -> Sub1000 ; -- m * 100 + n
|
||||||
pot2plus m n = TODO ;
|
pot2plus m n = combineNum "백" m n ;
|
||||||
|
|
||||||
-- : Sub1000 -> Sub1000000 ; -- coercion of 1..999
|
-- : Sub1000 -> Sub1000000 ; -- coercion of 1..999
|
||||||
pot2as3 x = x ;
|
pot2as3 x = x ;
|
||||||
|
|
||||||
-- : Sub1000 -> Sub1000000 ; -- m * 1000
|
-- : Sub1000 -> Sub1000000 ; -- m * 1000
|
||||||
pot3 m = TODO ;
|
pot3 m = scaleNum "천" m ;
|
||||||
|
|
||||||
-- : Sub1000 -> Sub1000 -> Sub1000000 ; -- m * 1000 + n
|
-- : Sub1000 -> Sub1000 -> Sub1000000 ; -- m * 1000 + n
|
||||||
pot3plus m n = TODO ;
|
pot3plus m n = combineNum "천" m n ;
|
||||||
|
|
||||||
pot3as4 x = x ;
|
pot3as4 x = x ;
|
||||||
|
pot41 = fixedNum "백만" ;
|
||||||
|
pot4 m = scaleNum "백만" m ;
|
||||||
|
pot4plus m n = combineNum "백만" m n ;
|
||||||
pot4as5 x = x ;
|
pot4as5 x = x ;
|
||||||
|
pot51 = fixedNum "십억" ;
|
||||||
|
pot5 m = scaleNum "십억" m ;
|
||||||
|
pot5plus m n = combineNum "십억" m n ;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
LinDigit : Type = ResKor.Numeral ** {isTwo : Bool ; ten : Str} ;
|
LinDigit : Type = ResKor.Numeral ** {isTwo : Bool ; ten : Str} ;
|
||||||
@@ -128,6 +134,23 @@ oper
|
|||||||
|
|
||||||
TODO : ResKor.Numeral = mkNum2 "TODO" "TODO" ;
|
TODO : ResKor.Numeral = mkNum2 "TODO" "TODO" ;
|
||||||
|
|
||||||
|
fixedNum : Str -> ResKor.Numeral = \s -> {
|
||||||
|
s = \\_,_ => s ; n = numNumber ; numtype = IsNum ; ord = s ++ "번째"
|
||||||
|
} ;
|
||||||
|
|
||||||
|
scaleNum : Str -> ResKor.Numeral -> ResKor.Numeral = \unit,m -> m ** {
|
||||||
|
s = \\_,_ => m.s ! SK ! Indep ++ unit ;
|
||||||
|
n = numNumber ;
|
||||||
|
ord = m.s ! SK ! Indep ++ unit ++ "번째"
|
||||||
|
} ;
|
||||||
|
|
||||||
|
combineNum : Str -> ResKor.Numeral -> ResKor.Numeral -> ResKor.Numeral =
|
||||||
|
\unit,m,n -> n ** {
|
||||||
|
s = \\_,_ => m.s ! SK ! Indep ++ unit ++ n.s ! SK ! Indep ;
|
||||||
|
n = numNumber ;
|
||||||
|
ord = m.s ! SK ! Indep ++ unit ++ n.s ! SK ! Indep ++ "번째"
|
||||||
|
} ;
|
||||||
|
|
||||||
|
|
||||||
-- numerals as sequences of digits
|
-- numerals as sequences of digits
|
||||||
|
|
||||||
|
|||||||
+71
-22
@@ -27,6 +27,12 @@ oper
|
|||||||
mkN : (noun,counter : Str) -> NumOrigin -> N ; -- Noun, classifier and origin of numerals. E.g. `mkN "사람" "명" nativeKorean`
|
mkN : (noun,counter : Str) -> NumOrigin -> N ; -- Noun, classifier and origin of numerals. E.g. `mkN "사람" "명" nativeKorean`
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
mkN2 : overload {
|
||||||
|
mkN2 : Str -> N2 ;
|
||||||
|
mkN2 : N -> N2 ;
|
||||||
|
mkN2 : N -> Prep -> N2 ;
|
||||||
|
} ;
|
||||||
|
|
||||||
--2 Adjectives
|
--2 Adjectives
|
||||||
|
|
||||||
mkA : overload {
|
mkA : overload {
|
||||||
@@ -58,27 +64,30 @@ oper
|
|||||||
mkV2 : overload {
|
mkV2 : overload {
|
||||||
mkV2 : (plain : Str) -> V2 ; -- Regular verb. Takes plain, uninflected -다 form, subject particle is 가/이 and object particle is 를/을.
|
mkV2 : (plain : Str) -> V2 ; -- Regular verb. Takes plain, uninflected -다 form, subject particle is 가/이 and object particle is 를/을.
|
||||||
mkV2 : V -> V2 ; -- Takes preconstructed V, subject particle is 가/이 and object particle is 를/을.
|
mkV2 : V -> V2 ; -- Takes preconstructed V, subject particle is 가/이 and object particle is 를/을.
|
||||||
|
mkV2 : V -> CaseParticle -> V2 ; -- Takes preconstructed V and a case particle for its complement.
|
||||||
|
mkV2 : V -> Prep -> V2 ; -- Takes preconstructed V and a postposition for its complement.
|
||||||
mkV2 : V -> (subj,obj : CaseParticle) -> V2 ; -- Takes preconstructed V, and subject and object particles. E.g. `mkV2 좋다_V topic subject` for "as for <SUBJ>는, <OBJ>가 is good".
|
mkV2 : V -> (subj,obj : CaseParticle) -> V2 ; -- Takes preconstructed V, and subject and object particles. E.g. `mkV2 좋다_V topic subject` for "as for <SUBJ>는, <OBJ>가 is good".
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- mkV3 : overload {
|
-- mkV3 : overload {
|
||||||
-- } ;
|
-- } ;
|
||||||
|
|
||||||
-- mkVV : overload {
|
mkVA : V -> VA ;
|
||||||
-- } ;
|
mkVV : overload {
|
||||||
|
mkVV : V -> VV ;
|
||||||
|
mkVV : V -> CaseParticle -> VV ;
|
||||||
|
mkVV : V -> Prep -> VV ;
|
||||||
|
} ;
|
||||||
|
mkVS : V -> VS ;
|
||||||
|
mkVQ : V -> VQ ;
|
||||||
|
mkV2A : V -> V2A ;
|
||||||
|
mkV2V : overload {
|
||||||
|
mkV2V : V -> V2V ;
|
||||||
|
mkV2V : V -> CaseParticle -> V2V ;
|
||||||
|
mkV2V : V -> Prep -> V2V ;
|
||||||
|
} ;
|
||||||
|
mkV2S : V -> V2S ;
|
||||||
|
|
||||||
--
|
|
||||||
-- 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
|
-- mkV2Q : Str -> V2Q
|
||||||
-- = \s -> lin V2Q (regV s ** {c2 = noPrep}) ;
|
-- = \s -> lin V2Q (regV s ** {c2 = noPrep}) ;
|
||||||
|
|
||||||
@@ -107,6 +116,8 @@ oper
|
|||||||
mkAdA : Str -> AdA
|
mkAdA : Str -> AdA
|
||||||
= \s -> lin AdA {s = s} ;
|
= \s -> lin AdA {s = s} ;
|
||||||
|
|
||||||
|
mkAdN : Str -> AdN ;
|
||||||
|
|
||||||
|
|
||||||
--.
|
--.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
@@ -135,8 +146,9 @@ oper
|
|||||||
in lin N (noun ** {c = counter}) ;
|
in lin N (noun ** {c = counter}) ;
|
||||||
|
|
||||||
mkN2 = overload {
|
mkN2 = overload {
|
||||||
mkN2 : Str -> N2 = \s -> lin N2 (mkNoun s) ;
|
mkN2 : Str -> N2 = \s -> lin N2 (mkNoun s ** {p2 = emptyPP}) ;
|
||||||
mkN2 : N -> N2 = \n -> lin N2 n ;
|
mkN2 : N -> N2 = \n -> lin N2 (n ** {p2 = emptyPP}) ;
|
||||||
|
mkN2 : N -> Prep -> N2 = \n,p -> lin N2 (n ** {p2 = p}) ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- mkPN = overload {
|
-- mkPN = overload {
|
||||||
@@ -145,11 +157,21 @@ oper
|
|||||||
mkA = overload {
|
mkA = overload {
|
||||||
mkA : (adj : Str) -> A = \s -> lin A (mkAdj s) ;
|
mkA : (adj : Str) -> A = \s -> lin A (mkAdj s) ;
|
||||||
mkA : (kiga : Str) -> (jakda : A) -> A = \kiga,jakda ->
|
mkA : (kiga : Str) -> (jakda : A) -> A = \kiga,jakda ->
|
||||||
jakda ** {s = \\af => kiga ++ jakda.s ! af} ;
|
jakda ** {
|
||||||
|
s = \\af => kiga ++ jakda.s ! af ;
|
||||||
|
past = \\p => kiga ++ jakda.past ! p ;
|
||||||
|
pastAttr = \\p => kiga ++ jakda.pastAttr ! p ;
|
||||||
|
futureAttr = \\p => kiga ++ jakda.futureAttr ! p
|
||||||
|
} ;
|
||||||
mkA : (plain,polite,formal,attr : Str) -> A
|
mkA : (plain,polite,formal,attr : Str) -> A
|
||||||
= \x1,x2,x3,x4 -> lin A (mkAdjReg x1 x2 x3 x4) ;
|
= \x1,x2,x3,x4 -> lin A (mkAdjReg x1 x2 x3 x4) ;
|
||||||
mkA : (jaemi : Str) -> (itda : V) -> A
|
mkA : (jaemi : Str) -> (itda : V) -> A
|
||||||
= \jaemi,itda -> lin A (itda ** {s = \\vf => jaemi ++ itda.s ! vf}) ;
|
= \jaemi,itda -> lin A (itda ** {
|
||||||
|
s = \\vf => jaemi ++ itda.s ! vf ;
|
||||||
|
past = \\p => jaemi ++ itda.past ! p ;
|
||||||
|
pastAttr = \\p => jaemi ++ itda.pastAttr ! p ;
|
||||||
|
futureAttr = \\p => jaemi ++ itda.futureAttr ! p
|
||||||
|
}) ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
mkA2 = overload {
|
mkA2 = overload {
|
||||||
@@ -164,7 +186,11 @@ oper
|
|||||||
mkV = overload {
|
mkV = overload {
|
||||||
mkV : (plain : Str) -> V = \v -> lin V (mkVerb v) ;
|
mkV : (plain : Str) -> V = \v -> lin V (mkVerb v) ;
|
||||||
mkV : (nore : Str) -> (hada : V) -> V = \nore,hada -> hada ** {
|
mkV : (nore : Str) -> (hada : V) -> V = \nore,hada -> hada ** {
|
||||||
s = \\vf => nore + hada.s ! vf} ;
|
s = \\vf => nore + hada.s ! vf ;
|
||||||
|
past = \\p => nore + hada.past ! p ;
|
||||||
|
pastAttr = \\p => nore + hada.pastAttr ! p ;
|
||||||
|
futureAttr = \\p => nore + hada.futureAttr ! p
|
||||||
|
} ;
|
||||||
mkV : (plain,polite,formal,attr : Str) -> V
|
mkV : (plain,polite,formal,attr : Str) -> V
|
||||||
= \x1,x2,x3,x4 -> lin V (mkVerbReg x1 x2 x3 x4) ;
|
= \x1,x2,x3,x4 -> lin V (mkVerbReg x1 x2 x3 x4) ;
|
||||||
} ;
|
} ;
|
||||||
@@ -177,16 +203,39 @@ oper
|
|||||||
mkV2 = overload {
|
mkV2 = overload {
|
||||||
mkV2 : (plain : Str) -> V2 = \v2 -> lin V2 (mkVerb2 v2) ;
|
mkV2 : (plain : Str) -> V2 = \v2 -> lin V2 (mkVerb2 v2) ;
|
||||||
mkV2 : V -> V2 = \v -> lin V2 (vtov2 v) ;
|
mkV2 : V -> V2 = \v -> lin V2 (vtov2 v) ;
|
||||||
|
mkV2 : V -> CaseParticle -> V2 = \v,c2 ->
|
||||||
|
lin V2 (vtov2 v ** {c2 = c2}) ;
|
||||||
mkV2 : V -> (subj,obj : CaseParticle) -> V2 = \v,sc,c2 ->
|
mkV2 : V -> (subj,obj : CaseParticle) -> V2 = \v,sc,c2 ->
|
||||||
lin V2 (vtov2 v ** {sc = sc ; c2 = c2}) ;
|
lin V2 (vtov2 v ** {sc = sc ; c2 = c2}) ;
|
||||||
|
mkV2 : V -> Prep -> V2 = \v,p2 ->
|
||||||
|
lin V2 (vtov2 v ** {c2 = Bare ; p2 = p2}) ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
mkV3 = overload {
|
mkV3 = overload {
|
||||||
mkV3 : (plain : Str) -> V3 = \v3 -> lin V3 (mkVerb3 v3) ;
|
mkV3 : (plain : Str) -> V3 = \v3 -> lin V3 (mkVerb3 v3) ;
|
||||||
} ;
|
} ;
|
||||||
--
|
|
||||||
-- mkVV = overload {
|
mkVA = \v -> lin VA v ;
|
||||||
-- } ;
|
mkVV = overload {
|
||||||
|
mkVV : V -> VV = \v -> lin VV (vtov2 v) ;
|
||||||
|
mkVV : V -> CaseParticle -> VV = \v,c2 ->
|
||||||
|
lin VV (vtov2 v ** {c2 = c2}) ;
|
||||||
|
mkVV : V -> Prep -> VV = \v,p2 ->
|
||||||
|
lin VV (vtov2 v ** {c2 = Bare ; p2 = p2}) ;
|
||||||
|
} ;
|
||||||
|
mkVS = \v -> lin VS v ;
|
||||||
|
mkVQ = \v -> lin VQ v ;
|
||||||
|
mkV2A = \v -> lin V2A (v ** {c2=Object; p2={s=\\_=>""; attaches=False}}) ;
|
||||||
|
mkV2V = overload {
|
||||||
|
mkV2V : V -> V2V = \v -> lin V2V (vtov2 v) ;
|
||||||
|
mkV2V : V -> CaseParticle -> V2V = \v,c2 ->
|
||||||
|
lin V2V (vtov2 v ** {c2 = c2}) ;
|
||||||
|
mkV2V : V -> Prep -> V2V = \v,p2 ->
|
||||||
|
lin V2V (vtov2 v ** {c2 = Bare ; p2 = p2}) ;
|
||||||
|
} ;
|
||||||
|
mkV2S = \v -> lin V2S (v ** {c2=Object; p2={s=\\_=>""; attaches=False}}) ;
|
||||||
|
|
||||||
|
mkAdN = \s -> lin AdN {s=s} ;
|
||||||
|
|
||||||
mkPrep = overload {
|
mkPrep = overload {
|
||||||
mkPrep : (e : Str) -> Prep -- Particle like 에, attaches to the NP.
|
mkPrep : (e : Str) -> Prep -- Particle like 에, attaches to the NP.
|
||||||
|
|||||||
@@ -25,6 +25,6 @@ concrete PhraseKor of Phrase = CatKor ** open Prelude, ResKor in {
|
|||||||
-- PConjConj conj = {s = conj.s1 ++ conj.s2 ! …} ;
|
-- PConjConj conj = {s = conj.s1 ++ conj.s2 ! …} ;
|
||||||
|
|
||||||
NoVoc = {s = []} ;
|
NoVoc = {s = []} ;
|
||||||
-- VocNP np = { s = "," ++ np.s ! … } ; -}
|
VocNP np = {s = SOFT_BIND ++ "," ++ np.s ! Bare} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -74,5 +74,27 @@ concrete QuestionKor of Question = CatKor ** open
|
|||||||
QuestQVP : IP -> QVP -> QCl ; -- who buys what where
|
QuestQVP : IP -> QVP -> QCl ; -- who buys what where
|
||||||
-}
|
-}
|
||||||
|
|
||||||
|
lin
|
||||||
|
QuestCl cl = cl ;
|
||||||
|
QuestVP ip vp = predVP ip vp ;
|
||||||
|
QuestSlash ip cl = cl ** {
|
||||||
|
s = \\t,a,p,c => ip.s ! Object ++ cl.s ! t ! a ! p ! c
|
||||||
|
} ;
|
||||||
|
QuestIAdv adv cl = cl ** {
|
||||||
|
s = \\t,a,p,c => adv.s ++ cl.s ! t ! a ! p ! c
|
||||||
|
} ;
|
||||||
|
QuestIComp comp np = predVP np (VS.UseComp (emptyComp ** {
|
||||||
|
s = \\_ => comp.s
|
||||||
|
})) ;
|
||||||
|
|
||||||
|
IdetCN = NS.DetCN ;
|
||||||
|
IdetIP = NS.DetNP ;
|
||||||
|
AdvIP = NS.AdvNP ;
|
||||||
|
IdetQuant = NS.DetQuant ;
|
||||||
|
PrepIP prep ip = prepNP Bare prep ip ;
|
||||||
|
AdvIAdv a b = {s = a.s ++ b.s} ;
|
||||||
|
CompIAdv adv = adv ;
|
||||||
|
CompIP ip = {s = ip.s ! Bare} ;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -6,12 +6,12 @@ lin
|
|||||||
RelCl = relSlash (ss "") ;
|
RelCl = relSlash (ss "") ;
|
||||||
|
|
||||||
-- : RP -> VP -> RCl ;
|
-- : RP -> VP -> RCl ;
|
||||||
RelVP rp vp = vp ** { -- TODO no tenses yet in the grammar
|
RelVP rp vp = vp ** {
|
||||||
s = \\t,a,p,cltyp =>
|
s = \\t,a,p,cltyp =>
|
||||||
rp.s ++ vp.adv ++ vp.nObj ! DeclObj ++
|
rp.s ++ vp.nObj ! DeclObj ++ vp.adv ++
|
||||||
case cltyp of {
|
tenseVP t a cltyp p (vp ** {
|
||||||
WithConj => vp.s ! VStem p ;
|
nObj = \\_ => [] ; adv = []
|
||||||
_ => vp.s ! VAttr p } ;
|
}) ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- : RP -> ClSlash -> RCl ; -- whom John loves
|
-- : RP -> ClSlash -> RCl ; -- whom John loves
|
||||||
|
|||||||
+96
-14
@@ -5,17 +5,20 @@ resource ResKor = ParamKor ** open Prelude, Predef, ParamKor in {
|
|||||||
oper
|
oper
|
||||||
Counter : Type = {
|
Counter : Type = {
|
||||||
s : Str ;
|
s : Str ;
|
||||||
origin : NumOrigin
|
origin : NumOrigin ;
|
||||||
|
p : Phono
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
baseCounter : Counter = {
|
baseCounter : Counter = {
|
||||||
s = "개" ;
|
s = "개" ;
|
||||||
origin = NK
|
origin = NK ;
|
||||||
|
p = Vowel
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
mkCounter : Str -> NumOrigin -> Counter = \s,o -> baseCounter ** {
|
mkCounter : Str -> NumOrigin -> Counter = \s,o -> baseCounter ** {
|
||||||
s = s ;
|
s = s ;
|
||||||
origin = o ;
|
origin = o ;
|
||||||
|
p = if_then_else Phono (vowFinal s) Vowel Consonant ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
BaseNoun : Type = {
|
BaseNoun : Type = {
|
||||||
@@ -26,7 +29,7 @@ oper
|
|||||||
Noun : Type = BaseNoun ** {
|
Noun : Type = BaseNoun ** {
|
||||||
c : Counter ;
|
c : Counter ;
|
||||||
} ;
|
} ;
|
||||||
Noun2 : Type = Noun ; -- TODO eventually more parameters?
|
Noun2 : Type = Noun ** {p2 : Postposition} ;
|
||||||
Noun3 : Type = Noun ;
|
Noun3 : Type = Noun ;
|
||||||
|
|
||||||
CNoun : Type = Noun ** {
|
CNoun : Type = Noun ** {
|
||||||
@@ -145,6 +148,7 @@ oper
|
|||||||
Adjective : Type = {
|
Adjective : Type = {
|
||||||
s : VForm => Str ; -- Adjectives are verbs
|
s : VForm => Str ; -- Adjectives are verbs
|
||||||
p, pNeg : Phono ; -- needed for attaching conjunction
|
p, pNeg : Phono ; -- needed for attaching conjunction
|
||||||
|
past, pastAttr, futureAttr : Polarity => Str ;
|
||||||
} ;
|
} ;
|
||||||
Adjective2 : Type = Adjective ** {c2 : NForm ; p2 : Postposition} ;
|
Adjective2 : Type = Adjective ** {c2 : NForm ; p2 : Postposition} ;
|
||||||
|
|
||||||
@@ -172,6 +176,7 @@ oper
|
|||||||
BaseVerb : Type = {
|
BaseVerb : Type = {
|
||||||
sc : NForm ; -- subject case
|
sc : NForm ; -- subject case
|
||||||
p, pNeg : Phono ; -- needed for attaching conjunction
|
p, pNeg : Phono ; -- needed for attaching conjunction
|
||||||
|
past, pastAttr, futureAttr : Polarity => Str ;
|
||||||
} ;
|
} ;
|
||||||
Verb : Type = BaseVerb ** {
|
Verb : Type = BaseVerb ** {
|
||||||
s : VForm => Str ;
|
s : VForm => Str ;
|
||||||
@@ -206,7 +211,7 @@ oper
|
|||||||
planeg = neg ++ negForms ! Plain ;
|
planeg = neg ++ negForms ! Plain ;
|
||||||
polneg = neg ++ negForms ! Polite ;
|
polneg = neg ++ negForms ! Polite ;
|
||||||
formneg = neg ++ negForms ! Formal ;
|
formneg = neg ++ negForms ! Formal ;
|
||||||
impneg = neg ++ "마새요" ;
|
impneg = neg ++ "마세요" ;
|
||||||
in mkVerbFull stem attrpos attrneg plain polite formal planeg polneg formneg impneg ;
|
in mkVerbFull stem attrpos attrneg plain polite formal planeg polneg formneg impneg ;
|
||||||
|
|
||||||
mkVerbFull : (x1,_,_,_,_,_,_,_,_,x10 : Str) -> Verb =
|
mkVerbFull : (x1,_,_,_,_,_,_,_,_,x10 : Str) -> Verb =
|
||||||
@@ -225,6 +230,18 @@ oper
|
|||||||
VImpNeg => impneg
|
VImpNeg => impneg
|
||||||
} ;
|
} ;
|
||||||
sc = Subject ;
|
sc = Subject ;
|
||||||
|
past = table {
|
||||||
|
Pos => pastBase stem ;
|
||||||
|
Neg => pastBase (init planeg)
|
||||||
|
} ;
|
||||||
|
pastAttr = table {
|
||||||
|
Pos => add_N stem ;
|
||||||
|
Neg => add_N (init planeg)
|
||||||
|
} ;
|
||||||
|
futureAttr = table {
|
||||||
|
Pos => futureAttrForm stem ;
|
||||||
|
Neg => futureAttrForm (init planeg)
|
||||||
|
} ;
|
||||||
p = if_then_else Phono (vowFinal stem) Vowel Consonant ;
|
p = if_then_else Phono (vowFinal stem) Vowel Consonant ;
|
||||||
pNeg = if_then_else Phono (vowFinal (init planeg)) Vowel Consonant ;
|
pNeg = if_then_else Phono (vowFinal (init planeg)) Vowel Consonant ;
|
||||||
} ;
|
} ;
|
||||||
@@ -239,14 +256,17 @@ oper
|
|||||||
"아니다"
|
"아니다"
|
||||||
"아니에요"
|
"아니에요"
|
||||||
"아닙니다"
|
"아닙니다"
|
||||||
"있지마세요" ;
|
"있지 마세요" ;
|
||||||
|
|
||||||
copulaAfterVowel : Verb = copula ** {
|
copulaAfterVowel : Verb = copula ** {
|
||||||
s = \\vf => case vf of {
|
s = \\vf => case vf of {
|
||||||
VAttr Pos => "는" ; -- TODO just guessing
|
VAttr Pos => "는" ; -- TODO just guessing
|
||||||
VF Plain Pos => "다" ;
|
VF Plain Pos => "다" ;
|
||||||
VF Polite Pos => "예요" ;
|
VF Polite Pos => "예요" ;
|
||||||
_ => copula.s ! vf }
|
_ => copula.s ! vf } ;
|
||||||
|
past = table {Pos => "였" ; Neg => copula.past ! Neg} ;
|
||||||
|
pastAttr = table {Pos => "였던" ; Neg => copula.pastAttr ! Neg} ;
|
||||||
|
futureAttr = table {Pos => "일" ; Neg => copula.futureAttr ! Neg}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
have_V : Verb = mkVerbFull
|
have_V : Verb = mkVerbFull
|
||||||
@@ -259,7 +279,7 @@ oper
|
|||||||
"없다"
|
"없다"
|
||||||
"없어요"
|
"없어요"
|
||||||
"없습니다"
|
"없습니다"
|
||||||
"없지 마새요" ;
|
"없지 마세요" ;
|
||||||
|
|
||||||
-- For building an adjective. Different attr from do_V.
|
-- For building an adjective. Different attr from do_V.
|
||||||
do_A : Verb = mkVerbReg
|
do_A : Verb = mkVerbReg
|
||||||
@@ -312,10 +332,12 @@ oper
|
|||||||
|
|
||||||
Complement : Type = {
|
Complement : Type = {
|
||||||
s : VForm => Str ;
|
s : VForm => Str ;
|
||||||
|
past, pastAttr, futureAttr : Polarity => Str ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
emptyComp : Complement = {
|
emptyComp : Complement = {
|
||||||
s = \\_ => [] ;
|
s = \\_ => [] ;
|
||||||
|
past, pastAttr, futureAttr = \\_ => [] ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
BaseVP : Type = {
|
BaseVP : Type = {
|
||||||
@@ -371,15 +393,75 @@ oper
|
|||||||
let npstr : Str = np.s ! vp.sc in predVP' npstr vp ;
|
let npstr : Str = np.s ! vp.sc in predVP' npstr vp ;
|
||||||
|
|
||||||
predVP' : (np : Str) -> VerbPhrase -> ClSlash = \np,vp -> vp ** {
|
predVP' : (np : Str) -> VerbPhrase -> ClSlash = \np,vp -> vp ** {
|
||||||
s = \\t,a,p,cltyp =>
|
s = \\t,a,p,cltyp => np
|
||||||
let vf = case cltyp of {
|
|
||||||
Subord => VAttr p ;
|
|
||||||
WithConj => VStem p ;
|
|
||||||
Statement st => VF st p } -- TODO: more tenses
|
|
||||||
in np
|
|
||||||
++ vp.nObj ! DeclObj -- an object, not copula complement
|
++ vp.nObj ! DeclObj -- an object, not copula complement
|
||||||
++ vp.adv
|
++ vp.adv
|
||||||
++ vp.s ! vf
|
++ tenseVP t a cltyp p vp
|
||||||
|
} ;
|
||||||
|
|
||||||
|
-- Korean marks tense on the final predicate. Deriving the marked forms
|
||||||
|
-- here also makes tense work for VPs assembled from auxiliaries.
|
||||||
|
tenseVP : Tense -> Anteriority -> ClType -> Polarity -> VerbPhrase -> Str =
|
||||||
|
\t,a,ct,p,vp ->
|
||||||
|
let stem = vp.s ! VStem p in
|
||||||
|
case <ct,t,a> of {
|
||||||
|
<Statement st,Pres,Simul> => vp.s ! VF st p ;
|
||||||
|
<Statement st,Fut,Simul> => finishFinite st (glue stem "겠") ;
|
||||||
|
<Statement st,Cond,Simul> => conditional st (vp.past ! p) ;
|
||||||
|
<Statement st,_,_> => finishFinite st (vp.past ! p) ;
|
||||||
|
|
||||||
|
<Subord,Pres,Simul> => vp.s ! VAttr p ;
|
||||||
|
<Subord,Fut,Simul> => vp.futureAttr ! p ;
|
||||||
|
<Subord,Cond,Simul> => glue (vp.past ! p) "을" ;
|
||||||
|
<Subord,_,_> => vp.pastAttr ! p ;
|
||||||
|
|
||||||
|
<WithConj,Pres,Simul> => stem ;
|
||||||
|
<WithConj,Fut,Simul> => glue stem "겠" ;
|
||||||
|
<WithConj,Cond,Simul> => vp.past ! p ;
|
||||||
|
<WithConj,_,_> => vp.past ! p
|
||||||
|
} ;
|
||||||
|
|
||||||
|
finishFinite : Style -> Str -> Str = \st,base -> case st of {
|
||||||
|
Formal => glue base "습니다" ;
|
||||||
|
Polite => glue base "어요" ;
|
||||||
|
Plain => glue base "다"
|
||||||
|
} ;
|
||||||
|
|
||||||
|
conditional : Style -> Str -> Str = \st,base -> case st of {
|
||||||
|
Formal => base ++ "을 것입니다" ;
|
||||||
|
Polite => base ++ "을 거예요" ;
|
||||||
|
Plain => base ++ "을 것이다"
|
||||||
|
} ;
|
||||||
|
|
||||||
|
-- Past -았/었- contracts after the common vowel-final stems. Consonant
|
||||||
|
-- stems only need the harmony-sensitive suffix and cover most regular
|
||||||
|
-- Korean verbs; 하다 compounds are by far the largest lexical class.
|
||||||
|
pastBase : Str -> Str = \stem -> case stem of {
|
||||||
|
x + "하" => x + "했" ;
|
||||||
|
x + "가" => x + "갔" ; x + "나" => x + "났" ;
|
||||||
|
x + "오" => x + "왔" ; x + "보" => x + "봤" ;
|
||||||
|
x + "주" => x + "줬" ; x + "두" => x + "뒀" ;
|
||||||
|
x + "되" => x + "됐" ; x + "돼" => x + "됐" ;
|
||||||
|
x + "서" => x + "섰" ; x + "자" => x + "잤" ;
|
||||||
|
x + "사" => x + "샀" ; x + "차" => x + "찼" ;
|
||||||
|
x + "켜" => x + "켰" ; x + "펴" => x + "폈" ;
|
||||||
|
x + "여" => x + "였" ; x + "해" => x + "했" ;
|
||||||
|
_ => case vowFinal stem of {
|
||||||
|
-- The uncontracted form (e.g. 버리었습니다, 추었습니다) is
|
||||||
|
-- grammatical and avoids producing duplicated *-어었습니다.
|
||||||
|
True => stem + "었" ;
|
||||||
|
False => case stem of {
|
||||||
|
_ + #a_o => stem + "았" ;
|
||||||
|
_ => stem + "었"
|
||||||
|
}
|
||||||
|
} } ;
|
||||||
|
|
||||||
|
futureAttrForm : Str -> Str = \stem -> case stem of {
|
||||||
|
x + "가" => x + "갈" ; x + "나" => x + "날" ;
|
||||||
|
x + "오" => x + "올" ; x + "보" => x + "볼" ;
|
||||||
|
x + "주" => x + "줄" ; x + "하" => x + "할" ;
|
||||||
|
x + "되" => x + "될" ; x + "서" => x + "설" ;
|
||||||
|
_ => stem + "을"
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -15,12 +15,13 @@ lin
|
|||||||
|
|
||||||
--2 Clauses missing object noun phrases
|
--2 Clauses missing object noun phrases
|
||||||
-- : NP -> VPSlash -> ClSlash ;
|
-- : NP -> VPSlash -> ClSlash ;
|
||||||
-- SlashVP = predVP ;
|
SlashVP = predVP ;
|
||||||
{-
|
|
||||||
-- : ClSlash -> Adv -> ClSlash ; -- (whom) he sees today
|
-- : ClSlash -> Adv -> ClSlash ; -- (whom) he sees today
|
||||||
AdvSlash cls adv = cls ** insertAdv adv cls ;
|
AdvSlash cls adv = cls ** {
|
||||||
|
s = \\t,a,p,c => adv.s ++ cls.s ! t ! a ! p ! c
|
||||||
|
} ;
|
||||||
|
|
||||||
-- SlashPrep : Cl -> Prep -> ClSlash ; -- (with whom) he walks
|
SlashPrep cl prep = cl ;
|
||||||
|
|
||||||
-- : NP -> VS -> SSlash -> ClSlash ; -- (whom) she says that he loves
|
-- : NP -> VS -> SSlash -> ClSlash ; -- (whom) she says that he loves
|
||||||
-- SlashVS np vs ss = {} ;
|
-- SlashVS np vs ss = {} ;
|
||||||
@@ -28,11 +29,13 @@ lin
|
|||||||
|
|
||||||
-- : Temp -> Pol -> ClSlash -> SSlash ; -- (that) she had not seen
|
-- : Temp -> Pol -> ClSlash -> SSlash ; -- (that) she had not seen
|
||||||
UseSlash t p cls = {
|
UseSlash t p cls = {
|
||||||
|
s = \\c => t.s ++ p.s ++ cls.s ! t.t ! t.a ! p.p ! c ;
|
||||||
|
p = case p.p of {Pos => cls.p ; Neg => cls.pNeg}
|
||||||
} ;
|
} ;
|
||||||
-}
|
|
||||||
--2 Imperatives
|
--2 Imperatives
|
||||||
-- : VP -> Imp ;
|
-- : VP -> Imp ;
|
||||||
ImpVP vp = {s = \\pol => linImp pol vp} ;
|
ImpVP vp = {s = \\pol => linImp pol vp} ;
|
||||||
|
AdvImp adv imp = {s = \\pol => adv.s ++ imp.s ! pol} ;
|
||||||
|
|
||||||
--2 Embedded sentences
|
--2 Embedded sentences
|
||||||
|
|
||||||
@@ -40,7 +43,7 @@ lin
|
|||||||
EmbedS s = {s = s.s ! Subord ++ "것이"} ; -- TODO check subject case
|
EmbedS s = {s = s.s ! Subord ++ "것이"} ; -- TODO check subject case
|
||||||
|
|
||||||
-- : QS -> SC ;
|
-- : QS -> SC ;
|
||||||
-- EmbedQS qs = { } ;
|
EmbedQS qs = {s = qs.s ! Plain ++ "것이"} ;
|
||||||
|
|
||||||
-- : VP -> SC ;
|
-- : VP -> SC ;
|
||||||
EmbedVP vp = {s = linVP (VAttr Pos) vp ++ "것이"} ;
|
EmbedVP vp = {s = linVP (VAttr Pos) vp ++ "것이"} ;
|
||||||
@@ -74,7 +77,7 @@ lin
|
|||||||
ExtAdvS = advS (SOFT_BIND ++ ",");
|
ExtAdvS = advS (SOFT_BIND ++ ",");
|
||||||
|
|
||||||
-- : S -> Subj -> S -> S ;
|
-- : S -> Subj -> S -> S ;
|
||||||
-- SSubjS s1 subj s2 = AdvS (AK.SubjS subj s2) s1 ;
|
SSubjS s1 subj s2 = AdvS (AK.SubjS subj s2) s1 ;
|
||||||
|
|
||||||
-- : S -> RS -> S ; -- she sleeps, which is good
|
-- : S -> RS -> S ; -- she sleeps, which is good
|
||||||
-- RelS sent rs = advS {s = rs.s ! Sg3 Masc ++ SOFT_BIND ++ ","} sent ;
|
-- RelS sent rs = advS {s = rs.s ! Sg3 Masc ++ SOFT_BIND ++ ","} sent ;
|
||||||
|
|||||||
@@ -47,7 +47,14 @@ lin
|
|||||||
-- : Symb -> Ord ;
|
-- : Symb -> Ord ;
|
||||||
SymbOrd sy =
|
SymbOrd sy =
|
||||||
let comp : Comp = VK.CompAdv (lin Adv sy)
|
let comp : Comp = VK.CompAdv (lin Adv sy)
|
||||||
in {s = comp.s ; n = Pl ; p,pNeg = Vowel} ;
|
in {
|
||||||
|
s = comp.s ;
|
||||||
|
past = comp.past ;
|
||||||
|
pastAttr = comp.pastAttr ;
|
||||||
|
futureAttr = comp.futureAttr ;
|
||||||
|
n = Pl ;
|
||||||
|
p,pNeg = Vowel
|
||||||
|
} ;
|
||||||
|
|
||||||
lincat
|
lincat
|
||||||
Symb, [Symb] = SS ;
|
Symb, [Symb] = SS ;
|
||||||
|
|||||||
+52
-45
@@ -15,71 +15,70 @@ lin
|
|||||||
-- ReflVP = ResKor.insertRefl ;
|
-- ReflVP = ResKor.insertRefl ;
|
||||||
|
|
||||||
-- : VV -> VP -> VP ;
|
-- : VV -> VP -> VP ;
|
||||||
-- ComplVV vv vp = let vc = vp.vComp in case vv.vvtype of {
|
ComplVV vv vp = useV vv ** {
|
||||||
--
|
adv = vp.adv ;
|
||||||
-- } ;
|
nObj = vp.nObj ;
|
||||||
|
s = \\vf => vp.s ! VAttr Pos ++ "것을" ++ vv.s ! vf
|
||||||
|
} ;
|
||||||
|
|
||||||
-- : VS -> S -> VP ;
|
-- : VS -> S -> VP ;
|
||||||
-- ComplVS vs s =
|
ComplVS vs sent = useV vs ** {
|
||||||
-- let vps = useV vs ;
|
adv = sent.s ! Subord ++ "고" ;
|
||||||
-- subord = SubjS {s=""} s ;
|
} ;
|
||||||
-- in vps ** {} ;
|
|
||||||
|
|
||||||
{-
|
|
||||||
-- : VQ -> QS -> VP ;
|
-- : VQ -> QS -> VP ;
|
||||||
ComplVQ vq qs = ;
|
ComplVQ vq qs = useV vq ** {adv = qs.s ! Plain ++ "고"} ;
|
||||||
|
|
||||||
-- : VA -> AP -> VP ; -- they become red
|
-- : VA -> AP -> VP ; -- they become red
|
||||||
ComplVA va ap = ResKor.insertComp (CompAP ap).s (useV va) ;
|
ComplVA va ap = useV va ** {
|
||||||
|
adv = ap.compar ++ ap.s ! VAttr Pos
|
||||||
-}
|
} ;
|
||||||
--------
|
--------
|
||||||
-- Slash
|
-- Slash
|
||||||
-- : V2 -> VPSlash
|
-- : V2 -> VPSlash
|
||||||
SlashV2a = ResKor.useVc ;
|
SlashV2a = ResKor.useVc ;
|
||||||
|
|
||||||
{-
|
|
||||||
|
|
||||||
-- : V3 -> NP -> VPSlash ; -- give it (to her)
|
-- : V3 -> NP -> VPSlash ; -- give it (to her)
|
||||||
-- : V3 -> NP -> VPSlash ; -- give (it) to her
|
-- : V3 -> NP -> VPSlash ; -- give (it) to her
|
||||||
Slash2V3,
|
Slash2V3 v3 np = useVc v3 ** {
|
||||||
Slash3V3 = \v3 -> insertComp (useVc3 v3) ;
|
nObj = \\_ => (prepNP v3.c3 v3.p3 np).s
|
||||||
|
} ;
|
||||||
|
Slash3V3 v3 np = useVc (v3 ** {c2=v3.c3; p2=v3.p3}) ** {
|
||||||
|
nObj = \\_ => (prepNP v3.c2 v3.p2 np).s
|
||||||
|
} ;
|
||||||
|
|
||||||
-- : V2S -> S -> VPSlash ; -- answer (to him) that it is good
|
-- : V2S -> S -> VPSlash ; -- answer (to him) that it is good
|
||||||
SlashV2S v2s s =
|
SlashV2S v2s s =
|
||||||
let vps = useVc v2s ;
|
let vps = useVc v2s ;
|
||||||
subord = SubjS {s=""} s ;
|
in vps ** {adv = s.s ! Subord ++ "고"} ;
|
||||||
in vps ** {obj = } ;
|
|
||||||
|
|
||||||
|
|
||||||
-- : V2V -> VP -> VPSlash ; -- beg (her) to go
|
-- : V2V -> VP -> VPSlash ; -- beg (her) to go
|
||||||
SlashV2V v2v vp = ;
|
SlashV2V v2v vp = useVc v2v ** {
|
||||||
|
adv = vp.nObj ! DeclObj ++ vp.adv ++ vp.s ! VAttr Pos ++ "것을"
|
||||||
|
} ;
|
||||||
|
|
||||||
-- : V2Q -> QS -> VPSlash ; -- ask (him) who came
|
-- : V2Q -> QS -> VPSlash ; -- ask (him) who came
|
||||||
SlashV2Q v2q qs = ;
|
SlashV2Q v2q qs = useVc v2q ** {adv = qs.s ! Plain ++ "고"} ;
|
||||||
|
|
||||||
-- : V2A -> AP -> VPSlash ; -- paint (it) red
|
-- : V2A -> AP -> VPSlash ; -- paint (it) red
|
||||||
SlashV2A v2a ap = useVc v2a ** {
|
SlashV2A v2a ap = useVc v2a ** {
|
||||||
aComp = \\_ => (CompAP ap).aComp ! Sg3 Masc
|
adv = ap.compar ++ glue (ap.s ! VStem Pos) "게"
|
||||||
} ;
|
} ;
|
||||||
-}
|
|
||||||
-- : VPSlash -> NP -> VP
|
-- : VPSlash -> NP -> VP
|
||||||
ComplSlash = ResKor.insertComp ;
|
ComplSlash = ResKor.insertComp ;
|
||||||
|
|
||||||
{-
|
|
||||||
-- : VV -> VPSlash -> VPSlash ;
|
-- : VV -> VPSlash -> VPSlash ;
|
||||||
-- Just like ComplVV except missing subject!
|
SlashVV vv vps = vps ** {
|
||||||
SlashVV vv vps = ComplVV vv vps ** { missing = vps.missing ;
|
s = \\vf => vps.s ! VAttr Pos ++ "것을" ++ vv.s ! vf
|
||||||
post = vps.post } ;
|
} ;
|
||||||
|
|
||||||
-- : V2V -> NP -> VPSlash -> VPSlash ; -- beg me to buy
|
-- : V2V -> NP -> VPSlash -> VPSlash ; -- beg me to buy
|
||||||
SlashV2VNP v2v np vps =
|
SlashV2VNP v2v np vps =
|
||||||
ComplVV v2v vps **
|
vps ** {
|
||||||
{ missing = vps.missing ;
|
adv = (prepNP v2v.c2 v2v.p2 np).s ++ vps.adv ;
|
||||||
post = vps.post ;
|
s = \\vf => vps.s ! VAttr Pos ++ "것을" ++ v2v.s ! vf
|
||||||
iobj = np ** { s = np.s ! Dat } } ;
|
} ;
|
||||||
|
|
||||||
-}
|
|
||||||
|
|
||||||
-- : Comp -> VP ;
|
-- : Comp -> VP ;
|
||||||
UseComp comp = UseCopula ** comp ;
|
UseComp comp = UseCopula ** comp ;
|
||||||
@@ -91,7 +90,7 @@ lin
|
|||||||
|
|
||||||
|
|
||||||
-- : VP -> Adv -> VP ; -- sleep , even though ...
|
-- : VP -> Adv -> VP ; -- sleep , even though ...
|
||||||
-- ExtAdvVP vp adv = ;
|
ExtAdvVP = insertAdv ;
|
||||||
|
|
||||||
-- : AdV -> VP -> VP ; -- always sleep
|
-- : AdV -> VP -> VP ; -- always sleep
|
||||||
AdVVP adv vp = vp ** {adv = vp.adv ++ adv.s} ;
|
AdVVP adv vp = vp ** {adv = vp.adv ++ adv.s} ;
|
||||||
@@ -100,9 +99,7 @@ lin
|
|||||||
AdVVPSlash adv vps = vps ** { adv = vps.adv ++ adv.s} ;
|
AdVVPSlash adv vps = vps ** { adv = vps.adv ++ adv.s} ;
|
||||||
|
|
||||||
-- : VP -> Prep -> VPSlash ; -- live in (it)
|
-- : VP -> Prep -> VPSlash ; -- live in (it)
|
||||||
-- VPSlashPrep vp prep =
|
VPSlashPrep vp prep = vp ** {c2=Bare; p2=prep} ;
|
||||||
-- let adv = prepNP prep emptyNP
|
|
||||||
-- in insertAdv vp adv ;
|
|
||||||
|
|
||||||
--2 Complements to copula
|
--2 Complements to copula
|
||||||
|
|
||||||
@@ -110,26 +107,36 @@ lin
|
|||||||
|
|
||||||
-- : AP -> Comp ;
|
-- : AP -> Comp ;
|
||||||
CompAP ap = emptyComp ** {
|
CompAP ap = emptyComp ** {
|
||||||
s = \\vf => ap.compar ++ ap.s ! vf
|
s = \\vf => ap.compar ++ ap.s ! vf ;
|
||||||
|
past = \\p => ap.compar ++ ap.past ! p ;
|
||||||
|
pastAttr = \\p => ap.compar ++ ap.pastAttr ! p ;
|
||||||
|
futureAttr = \\p => ap.compar ++ ap.futureAttr ! p
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- : CN -> Comp ;
|
-- : CN -> Comp ;
|
||||||
-- : NP -> Comp ;
|
-- : NP -> Comp ;
|
||||||
CompCN,
|
CompCN,
|
||||||
CompNP = \n -> emptyComp ** {
|
CompNP = \n ->
|
||||||
|
let cop = case n.p of {
|
||||||
|
Vowel => copulaAfterVowel ;
|
||||||
|
Consonant => copula }
|
||||||
|
in emptyComp ** {
|
||||||
s = \\vf =>
|
s = \\vf =>
|
||||||
let cop = case n.p of {
|
case vf of {
|
||||||
Vowel => copulaAfterVowel.s ;
|
VF _ Neg => n.s ! Bare ++ cop.s ! vf ;
|
||||||
Consonant => copula.s }
|
_ => glue (n.s ! Bare) (cop.s ! vf)
|
||||||
in case vf of {
|
} ;
|
||||||
VF _ Neg => n.s ! Bare ++ cop ! vf ;
|
past = \\p => glue (n.s ! Bare) (cop.past ! p) ;
|
||||||
_ => glue (n.s ! Bare) (cop ! vf)
|
pastAttr = \\p => glue (n.s ! Bare) (cop.pastAttr ! p) ;
|
||||||
}
|
futureAttr = \\p => glue (n.s ! Bare) (cop.futureAttr ! p)
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- : Adv -> Comp ;
|
-- : Adv -> Comp ;
|
||||||
CompAdv adv = emptyComp ** {
|
CompAdv adv = emptyComp ** {
|
||||||
s = \\vf => adv.s ++ have_V.s ! vf ;
|
s = \\vf => adv.s ++ have_V.s ! vf ;
|
||||||
|
past = \\p => adv.s ++ have_V.past ! p ;
|
||||||
|
pastAttr = \\p => adv.s ++ have_V.pastAttr ! p ;
|
||||||
|
futureAttr = \\p => adv.s ++ have_V.futureAttr ! p
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- : VP -- Copula alone;
|
-- : VP -- Copula alone;
|
||||||
|
|||||||
Reference in new issue
Block a user