1
0
forked from GitHub/gf-core
Files
gf-core/lib/src/thai/ResTha.gf

164 lines
4.4 KiB
Plaintext

--# -path=.:../abstract:../common:../../prelude
--1 Thai auxiliary operations.
--
---- This module contains operations that are needed to make the
---- resource syntax work. To define everything that is needed to
---- implement $Test$, it moreover contains regular lexical
---- patterns needed for $Lex$.
--
resource ResTha = ParamX, StringsTha ** open Prelude in {
oper
-- binding words together
-- will be activated when the parser supports consecutive BINDs AR 16/3/2015
bIND = [] ; ---- Predef.BIND ;
thbind = overload {
thbind : Str -> Str = \s -> s ;
thbind : (s1,s2 : Str) -> Str = \s1,s2 -> s1 ++ bIND ++ s2 ;
thbind : (s1,_,s3 : Str) -> Str = \s1,s2,s3 -> s1 ++ bIND ++ s2 ++ bIND ++ s3 ;
thbind : (s1,_,_,s4 : Str) -> Str =
\s1,s2,s3,s4 -> s1 ++ bIND ++ s2 ++ bIND ++ s3 ++ bIND ++ s4 ;
thbind : (s1,_,_,_,s5 : Str) -> Str =
\s1,s2,s3,s4,s5 -> s1 ++ bIND ++ s2 ++ bIND ++ s3 ++ bIND ++ s4 ++ bIND ++ s5 ;
thbind : (s1,_,_,_,_,s6 : Str) -> Str =
\s1,s2,s3,s4,s5,s6 ->
s1 ++ bIND ++ s2 ++ bIND ++ s3 ++ bIND ++ s4 ++ bIND ++ s5 ++ bIND ++ s6 ;
thbind : SS -> SS = \s -> s ;
thbind : (s1,s2 : SS) -> SS = \s1,s2 -> ss (s1.s ++ bIND ++ s2.s) ;
thbind : (s1,_,s3 : SS) -> SS = \s1,s2,s3 -> ss (s1.s ++ bIND ++ s2.s ++ bIND ++ s3.s) ;
thbind : (s1,_,_,s4 : SS) -> SS =
\s1,s2,s3,s4 -> ss (s1.s ++ bIND ++ s2.s ++ bIND ++ s3.s ++ bIND ++ s4.s) ;
} ;
thword = overload {
thword : Str -> Str = \s -> s ;
thword : (s1,s2 : Str) -> Str = \s1,s2 -> s1 + s2 ;
thword : (s1,_,s3 : Str) -> Str = \s1,s2,s3 -> s1 + s2 + s3 ;
thword : (s1,_,_,s4 : Str) -> Str =
\s1,s2,s3,s4 -> s1 + s2 + s3 + s4 ;
thword : (s1,_,_,_,s5 : Str) -> Str =
\s1,s2,s3,s4,s5 -> s1 + s2 + s3 + s4 + s5 ;
thword : (s1,_,_,_,_,s6 : Str) -> Str =
\s1,s2,s3,s4,s5,s6 -> s1 + s2 + s3 + s4 + s5 + s6 ;
} ;
-- noun and classifier
Noun = {s,c : Str} ;
mkNoun : Str -> Str -> Noun = \s,c -> {s = s ; c = c} ;
-- before and after classifier; whether classifier needed (default)
Determiner = {s1, s2 : Str ; hasC : Bool} ;
mkDet : Str -> Str -> Determiner = -- before and after classifier
\s,c -> {s1 = s ; s2 = c ; hasC = True} ;
quantDet : Str -> Determiner = -- quantifier: before classifier
\s -> mkDet s [] ;
demDet : Str -> Determiner = -- demonstrative: after classifier
\s -> mkDet [] s ;
-- Part before and after negation (mai_s)
Verb = {s1,s2 : Str ; isCompl : Bool} ;
resV : Str -> Str -> Verb = \s,c -> {s1 = s ; s2 = c ; isCompl = True} ;
regV : Str -> Verb = \s -> {s1 = [] ; s2 = s ; isCompl = False} ;
dirV2 : Verb -> Verb ** {c2 : Str} = \v -> v ** {c2 = []} ;
-- Auxiliary verbs, according to order and negation.
-- The three types are $VV may VP | may VV VP | VP may VV$
param VVTyp = VVPre | VVMid | VVPost ;
oper
VVerb = {s : Str ; typ : VVTyp} ;
Adj = SS ;
mkAdj : Str -> Adj = ss ;
-- Verb phrases: form negation and question, too.
VP = {
s : Polarity => Str ;
e : Str -- extraposed clause
} ;
infVP : VP -> Str = \vp -> thbind (vp.s ! Pos) vp.e ; ----
predV : Verb -> VP = \v -> {
s = \\p => if_then_Str v.isCompl
(thbind v.s1 (polStr may_s p ++bIND++ v.s2))
(v.s1 ++bIND++ (polStr may_s p ++bIND++ v.s2)) ; --- v.s1 = [] ;
e = []
} ;
insertObj : NP -> VP -> VP = \o,vp -> {
s = \\p => thbind (vp.s ! p) o.s ;
e = vp.e
} ;
insertExtra : Str -> VP -> VP = \o,vp -> {
s = vp.s ;
e = vp.e ++bIND++ o
} ;
adjVP : Adj -> VP = \a -> {
s = \\p => thbind (polStr may_s p) a.s ;
e = []
} ;
insertObject : Str -> VP -> VP = \np,vp -> {
s = \\p => thbind (vp.s ! p) np ;
e = vp.e
} ;
polStr : Str -> Polarity -> Str = \m,p -> case p of {
Pos => [] ;
Neg => m
} ;
negation : Polarity -> Str = polStr may_s ;
-- clauses
param ClForm = ClDecl | ClQuest ;
oper
NP = SS ;
mkNP : Str -> NP = ss ;
Clause = {
s : ClForm => Polarity => Str
} ;
mkClause : NP -> VP -> Clause = \np,vp -> {
s = table {
ClDecl => \\p => thbind np.s (vp.s ! p) vp.e ;
ClQuest => \\p => thbind np.s (vp.s ! p) (polStr chay_s p) vp.e m'ay_s --- the place of vp.e?
}
} ;
mkPolClause : NP -> VP -> {s : Polarity => Str} = \np,vp -> {
s = (mkClause np vp).s ! ClDecl
} ;
conjThat = waa_s ;
reflPron = thbind tua_s eeng_s ;
}