mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-09 04:59:31 -06:00
aux and slash
This commit is contained in:
@@ -64,17 +64,15 @@ fun
|
||||
-- module $Verbphrase$ (deep $VP$ nesting) and its alternative,
|
||||
-- $Clause$ (shallow many-place predication structure).
|
||||
|
||||
PredAS : AS -> S -> Cl ; -- "it is good that he comes"
|
||||
PredV0 : V0 -> Cl ; -- "it is raining"
|
||||
PredAS : AS -> S -> Cl ; -- "it is good that he comes"
|
||||
PredV0 : V0 -> Cl ; -- "it is raining"
|
||||
|
||||
-- Partial saturation.
|
||||
|
||||
UseV2 : V2 -> V ; -- "loves"
|
||||
ComplV3 : V3 -> NP -> V2 ; -- "prefers wine (to beer)"
|
||||
UseV2 : V2 -> V ; -- "loves"
|
||||
ComplV3 : V3 -> NP -> V2 ; -- "prefers wine (to beer)"
|
||||
|
||||
ComplA2S : A2S -> NP -> AS ; -- "good for John"
|
||||
|
||||
TransVV2 : VV -> V2 -> V2 ; -- (which song do you) want to play
|
||||
ComplA2S : A2S -> NP -> AS ; -- "good for John"
|
||||
|
||||
UseV2V : V2V -> VV ;
|
||||
UseV2S : V2S -> VS ;
|
||||
@@ -118,13 +116,15 @@ fun
|
||||
--3 Sentences and relative clauses
|
||||
--
|
||||
|
||||
SlashV2 : NP -> V2 -> Slash ; -- "John doesn't love"
|
||||
SlashV2 : NP -> V2 -> Slash ; -- "(whom) John doesn't love"
|
||||
SlashVV2 : NP -> VV -> V2 -> Slash ; -- "(which song do you) want to play"
|
||||
SlashAdv : Cl -> Prep -> Slash ; -- "(whom) John walks with"
|
||||
|
||||
IdRP : RP ; -- "which"
|
||||
FunRP : N2 -> RP -> RP ; -- "the successor of which"
|
||||
RelSlash : RP -> Slash -> RCl ; -- "that I wait for"/"for which I wait"
|
||||
ModRS : CN -> RS -> CN ; -- "man who walks"
|
||||
RelCl : Cl -> RCl ; -- "such that it is even"
|
||||
IdRP : RP ; -- "which"
|
||||
FunRP : N2 -> RP -> RP ; -- "the successor of which"
|
||||
RelSlash : RP -> Slash -> RCl ; -- "that I wait for"/"for which I wait"
|
||||
ModRS : CN -> RS -> CN ; -- "man who walks"
|
||||
RelCl : Cl -> RCl ; -- "such that it is even"
|
||||
|
||||
--!
|
||||
--3 Questions and imperatives
|
||||
|
||||
@@ -59,7 +59,7 @@ lincat
|
||||
-- = Verb ** {s3 : Preposition} ;
|
||||
V3 = TransVerb ** {s4 : Preposition} ;
|
||||
VS = Verb ;
|
||||
VV = Verb ** {isAux : Bool} ;
|
||||
VV = AuxVerb ** {isAux : Bool} ;
|
||||
|
||||
VS = Verb ;
|
||||
VQ = Verb ;
|
||||
|
||||
@@ -12,7 +12,7 @@ concrete ClauseEng of Clause = CategoriesEng **
|
||||
SPredV2 np v x = predVerbClause np v (complTransVerb v x) ;
|
||||
SPredReflV2 np v = predVerbClause np v (reflTransVerb v) ;
|
||||
SPredVS np v x = predVerbClause np v (complSentVerb v x) ;
|
||||
SPredVV np v x = predVerbClause np v (complVerbVerb v x) ;
|
||||
SPredVV np v x = predVerbClause np (aux2verb v) (complVerbVerb v x) ;
|
||||
SPredVQ np v x = predVerbClause np v (complQuestVerb v x) ;
|
||||
SPredVA np v x = predVerbClause np v (complAdjVerb v x) ;
|
||||
SPredV2A np v x y = predVerbClause np v (complDitransAdjVerb v x y) ;
|
||||
@@ -37,7 +37,7 @@ concrete ClauseEng of Clause = CategoriesEng **
|
||||
QPredV2 np v x = intVerbClause np v (complTransVerb v x) ;
|
||||
QPredReflV2 np v = intVerbClause np v (reflTransVerb v) ;
|
||||
QPredVS np v x = intVerbClause np v (complSentVerb v x) ;
|
||||
QPredVV np v x = intVerbClause np v (complVerbVerb v x) ;
|
||||
QPredVV np v x = intVerbClause np (aux2verb v) (complVerbVerb v x) ;
|
||||
QPredVQ np v x = intVerbClause np v (complQuestVerb v x) ;
|
||||
QPredVA np v x = intVerbClause np v (complAdjVerb v x) ;
|
||||
QPredV2A np v x y = intVerbClause np v (complDitransAdjVerb v x y) ;
|
||||
|
||||
@@ -178,9 +178,9 @@ oper
|
||||
mkVerbP3worst : (_,_,_,_,_: Str) -> VerbP3 = \go,goes,went,gone,going ->
|
||||
{s = table {
|
||||
InfImp => go ;
|
||||
Indic P3 => goes ;
|
||||
Indic Sg => goes ;
|
||||
Indic _ => go ;
|
||||
Pastt _ => went ;
|
||||
Pastt => went ;
|
||||
PPart => gone ;
|
||||
PresPart => going
|
||||
}
|
||||
@@ -246,22 +246,62 @@ oper
|
||||
|
||||
verbP3Do = mkVerbP3 "do" "does" "did" "done" ;
|
||||
|
||||
verbBe : VerbP3 = {s = table {
|
||||
InfImp => "be" ;
|
||||
Indic P1 => "am" ;
|
||||
Indic P2 => "are" ;
|
||||
Indic P3 => "is" ;
|
||||
Pastt Sg => "was" ;
|
||||
Pastt Pl => "were" ;
|
||||
PPart => "been" ;
|
||||
PresPart => "being"
|
||||
}} ;
|
||||
auxVerbBe : AuxVerb = {s = table {
|
||||
AInfImp => "be" ;
|
||||
AIndic P1 b => if_then_Str b "am" ["am not"] ;
|
||||
AIndic P2 b => negAux b "are" ;
|
||||
AIndic P3 b => negAux b "is" ;
|
||||
APastt Sg b => negAux b "was" ;
|
||||
APastt Pl b => negAux b "were" ;
|
||||
APPart => "been" ;
|
||||
APresPart => "being"
|
||||
}
|
||||
} ;
|
||||
|
||||
-- The negative forms are not used;
|
||||
--- the particle $want.s1$ disappears - is it ever needed?
|
||||
|
||||
verb2aux : Verb -> AuxVerb = \want -> {s = table {
|
||||
AInfImp => want.s ! InfImp ;
|
||||
AIndic P3 b => want.s ! Indic Sg ;
|
||||
AIndic _ b => want.s ! Indic Pl ;
|
||||
APastt _ b => want.s ! Pastt ;
|
||||
APPart => want.s ! PPart ;
|
||||
APresPart => want.s ! PresPart
|
||||
}
|
||||
} ;
|
||||
|
||||
aux2verb : AuxVerb -> Verb = \want -> {s = table {
|
||||
InfImp => want.s ! AInfImp ;
|
||||
Indic Sg => want.s ! AIndic P3 True ;
|
||||
Indic _ => want.s ! AIndic P2 True ;
|
||||
Pastt => want.s ! APastt Pl True ;
|
||||
PPart => want.s ! APPart ;
|
||||
PresPart => want.s ! APresPart
|
||||
} ;
|
||||
s1 = []
|
||||
} ;
|
||||
|
||||
-- The three most important example auxiliaries.
|
||||
|
||||
mkVerbAux : (_,_,_,_: Str) -> AuxVerb = \beable, can, could, beenable ->
|
||||
{s = table {
|
||||
AInfImp => beable ;
|
||||
AIndic _ b => negAux b can ;
|
||||
APastt _ b => negAux b could ;
|
||||
APPart => beenable ;
|
||||
APrepPart => nonExist ---- fix!
|
||||
} ;
|
||||
} ;
|
||||
|
||||
|
||||
verbPart : VerbP3 -> Particle -> Verb = \v,p ->
|
||||
v ** {s1 = p} ;
|
||||
|
||||
verbNoPart : VerbP3 -> Verb = \v -> verbPart v [] ;
|
||||
|
||||
negAux : Bool -> Str -> Str = \b,is -> if_then_Str b is (is + "n't") ;
|
||||
|
||||
-- The optional negation contraction is a useful macro e.g. for "do".
|
||||
|
||||
contractNot : Str -> Str = \is -> variants {is ++ "not" ; is + "n't"} ;
|
||||
|
||||
@@ -154,7 +154,7 @@ oper
|
||||
|
||||
-- The verbs "be" and "have" are special.
|
||||
|
||||
vBe : V ;
|
||||
---- vBe : V ;
|
||||
vHave : V ;
|
||||
|
||||
-- Verbs with a particle.
|
||||
@@ -281,7 +281,6 @@ oper
|
||||
mkV2 = \v,p -> v ** {lock_V2 = <> ; s3 = p} ;
|
||||
tvPartReg = \get, along, to -> mkV2 (vPartReg get along) to ;
|
||||
|
||||
vBe = verbBe ** {s1 = [] ; lock_V = <>} ;
|
||||
vHave = verbP3Have ** {s1 = [] ; lock_V = <>} ;
|
||||
|
||||
tvGen = \s,p -> mkV2 (vGen s) p ;
|
||||
|
||||
@@ -403,7 +403,7 @@ oper
|
||||
mkV0 v = v ** {lock_V0 = <>} ;
|
||||
mkVS v = v ** {lock_VS = <>} ;
|
||||
mkV2S v p = mkV2 v p ** {lock_V2S = <>} ;
|
||||
mkVV v = v ** {isAux = False ; lock_VV = <>} ;
|
||||
mkVV v = verb2aux v ** {isAux = False ; lock_VV = <>} ;
|
||||
mkV2V v p t = mkV2 v p ** {s4 = t ; lock_V2V = <>} ;
|
||||
mkVA v = v ** {lock_VA = <>} ;
|
||||
mkV2A v p = mkV2 v p ** {lock_V2A = <>} ;
|
||||
|
||||
@@ -82,7 +82,6 @@ lin
|
||||
|
||||
ComplA2S = predAdjSent2 ;
|
||||
|
||||
TransVV2 = transVerbVerb ;
|
||||
AdjPart = adjPastPart ;
|
||||
|
||||
UseV2V x = x ** {isAux = False} ;
|
||||
@@ -120,6 +119,8 @@ lin
|
||||
--
|
||||
|
||||
SlashV2 = slashTransVerbCl ;
|
||||
SlashVV2 = slashVerbVerb ;
|
||||
SlashAdv cl p = slashAdverb cl p.s ;
|
||||
|
||||
IdRP = identRelPron ;
|
||||
FunRP = funRelPron ;
|
||||
@@ -197,16 +198,12 @@ lin
|
||||
|
||||
OneNP = nameNounPhrase (nameReg "one" human) ;
|
||||
|
||||
ExistCN A = predVerbClause
|
||||
ExistCN A = predBeGroup
|
||||
(nameNounPhrase (nameReg "there" Neutr))
|
||||
(mkTransVerbDir verbBe)
|
||||
(complTransVerb (mkTransVerbDir verbBe)
|
||||
(indefNounPhrase singular A)) ;
|
||||
(complNounPhrase (indefNounPhrase singular A)) ;
|
||||
ExistNumCN nu A =
|
||||
predVerbClause
|
||||
predBeGroup
|
||||
(nameNounPhrasePl (nameReg "there" Neutr))
|
||||
(mkTransVerbDir verbBe)
|
||||
(complTransVerb (mkTransVerbDir verbBe)
|
||||
(indefNounPhraseNum plural nu A)) ;
|
||||
(complNounPhrase (indefNounPhraseNum plural nu A)) ;
|
||||
|
||||
} ;
|
||||
|
||||
@@ -79,7 +79,7 @@ concrete StructuralEng of Structural =
|
||||
to_Prep = ss "to" ;
|
||||
under_Prep = ss "under" ;
|
||||
very_Adv = ss "very" ;
|
||||
want_VV = verbNoPart (regVerbP3 "want") ** {isAux = False} ;
|
||||
want_VV = verb2aux (verbNoPart (regVerbP3 "want")) ** {isAux = False} ;
|
||||
we_NP = pronNounPhrase pronWe ;
|
||||
what8many_IP = intPronWhat plural ;
|
||||
what8one_IP = intPronWhat singular ;
|
||||
|
||||
@@ -408,22 +408,6 @@ oper
|
||||
}
|
||||
in negAux b has ;
|
||||
|
||||
auxBe : Bool -> Tense -> Agr -> Str = \b,t,a ->
|
||||
let is =
|
||||
case t of {
|
||||
Present => case a of {
|
||||
ASgP3 _ => "is" ;
|
||||
ASgP1 => "am" ;
|
||||
_ => "are"
|
||||
} ;
|
||||
Past => case a of {
|
||||
ASgP3 _ => "was" ;
|
||||
_ => "were"
|
||||
} ;
|
||||
_ => "be" --- never used
|
||||
}
|
||||
in negAux b is ; ---- amn't
|
||||
|
||||
auxTense : Bool -> Tense -> Agr -> Str = \b,t,a ->
|
||||
case t of {
|
||||
Present => negAux b (case a of {
|
||||
@@ -435,8 +419,6 @@ oper
|
||||
Conditional => negAux b "would"
|
||||
} ;
|
||||
|
||||
negAux : Bool -> Str -> Str = \b,is -> if_then_Str b is (is + "n't") ;
|
||||
|
||||
{- --vg
|
||||
useVerbGen : Bool -> Verb -> (Agr => Str) -> VerbGroup = \isAux,verb,arg ->
|
||||
let
|
||||
@@ -527,14 +509,6 @@ oper
|
||||
complAdverb : PrepPhrase -> Complement = \elsewhere ->
|
||||
(\\_ => elsewhere.s) ;
|
||||
|
||||
{- --- compiles to 25k lines gfr 3/2/2005
|
||||
predAdjSent : Adjective -> Sentence -> Clause = \bra,hansover ->
|
||||
predVerbGroupClause
|
||||
(pronNounPhrase pronIt)
|
||||
(beGroup (
|
||||
\\n => bra.s ! AAdj ++ "that" ++ hansover.s)) ;
|
||||
-}
|
||||
|
||||
predAdjSent : Adjective -> Sentence -> Clause = \bra,hansover ->
|
||||
predBeGroup (pronNounPhrase pronIt) (\\n => bra.s ! AAdj ++ "that" ++ hansover.s) ;
|
||||
|
||||
@@ -552,47 +526,6 @@ oper
|
||||
s1 = if_then_Str b [] "not" ;
|
||||
} ;
|
||||
|
||||
predBeGroup : NounPhrase -> Complement -> Clause = \itt,goo ->
|
||||
let
|
||||
it = itt.s ! NomP ;
|
||||
good = goo ! itt.a ;
|
||||
begood : Tense -> Str = \t -> case t of {
|
||||
Present => good ;
|
||||
Past => good ;
|
||||
_ => "be" ++ good
|
||||
} ;
|
||||
beengood : Tense -> Str = \t -> case t of {
|
||||
Future => "have" ++ "been" ++ good ;
|
||||
Conditional => "have" ++ "been" ++ good ;
|
||||
_ => "been" ++ good
|
||||
} ;
|
||||
has : Bool -> Tense -> Str = \b,t -> case t of {
|
||||
Future => if_then_Str b "will" "won't" ;
|
||||
Conditional => negAux b "would" ;
|
||||
_ => auxHave b t itt.a
|
||||
} ;
|
||||
is : Bool -> Tense -> Str = \b,t -> case t of {
|
||||
Future => if_then_Str b "will" "won't" ;
|
||||
Conditional => negAux b "would" ;
|
||||
_ => auxBe b t itt.a
|
||||
}
|
||||
in
|
||||
{s = \\o,b,sf =>
|
||||
case sf of {
|
||||
VFinite t Simul => case o of {
|
||||
Dir => it ++ is b t ++ begood t ;
|
||||
Inv => is b t ++ it ++ begood t
|
||||
} ;
|
||||
VFinite t Anter => case o of {
|
||||
Dir => it ++ has b t ++ beengood t ;
|
||||
Inv => has b t ++ it ++ beengood t
|
||||
}
|
||||
--- ;
|
||||
--- VInfinit Simul => it ++ begood Future ;
|
||||
--- VInfinit Anter => it ++ beengood Future ;
|
||||
--- VPresPart => it ++ "being" ++ good
|
||||
}
|
||||
} ;
|
||||
|
||||
|
||||
predAdjSent2 : AdjCompl -> NounPhrase -> Adjective = \bra,han ->
|
||||
@@ -778,21 +711,42 @@ oper
|
||||
|
||||
-- This applies to non-auxiliaries.
|
||||
|
||||
predVerbClause : NounPhrase -> Verb -> Complement -> Clause = \np,verb,comp ->
|
||||
predVerbClause : NounPhrase -> Verb -> Complement -> Clause = \np,verb,comp ->
|
||||
let nv = predVerbClauseGen np verb comp in
|
||||
{s = table {
|
||||
Dir => \\b,sf => let nvg = nv ! b ! sf in nvg.p1 ++ nvg.p2 ++ nvg.p3 ;
|
||||
Inv => \\b,sf => let nvg = nv ! b ! sf in
|
||||
case sf of {
|
||||
VFinite t Simul => case b of {
|
||||
True => auxTense b t np.a ++ nvg.p1 ++ (nv ! False ! sf).p3 ;
|
||||
_ => nvg.p2 ++ nvg.p1 ++ nvg.p3
|
||||
} ;
|
||||
_ => nvg.p2 ++ nvg.p1 ++ nvg.p3
|
||||
}
|
||||
}
|
||||
} ;
|
||||
|
||||
predClauseGroup : Verb -> Complement -> VerbGroup = \verb,comp ->
|
||||
let
|
||||
nvg : Agr -> (Bool => SForm => (Str * Str * Str)) =
|
||||
\ag -> predVerbClauseGen {s = \\_ => [] ; a = ag} verb comp
|
||||
in
|
||||
{s = \\b,f,a => (nvg a ! b ! f).p2 ;
|
||||
s2 = \\b,f,a => (nvg a ! b ! f).p3 ;
|
||||
isAux = False ----
|
||||
} ;
|
||||
|
||||
predVerbClauseGen : NounPhrase -> Verb -> Complement -> (Bool =>
|
||||
SForm => (Str * Str * Str)) = \np,verb,comp ->
|
||||
let
|
||||
it = np.s ! NomP ;
|
||||
agr = np.a ;
|
||||
itgoes : Order -> Str -> Str -> Str = \o,x,y -> case o of {
|
||||
Dir => it ++ x ++ y ;
|
||||
Inv => x ++ it ++ y
|
||||
} ;
|
||||
goes : Tense -> Str = \t -> verb.s ! case <t,agr> of {
|
||||
<Present,ASgP1> => Indic P1 ;
|
||||
<Present,ASgP3 _> => Indic P3 ;
|
||||
<Present,_> => Indic P2 ;
|
||||
<Past,ASgP1> => Pastt Pl ;
|
||||
<Past,ASgP3 _> => Pastt Sg ;
|
||||
_ => Pastt Pl --- Future doesn't matter
|
||||
goes : Tense -> Str = \t -> verb.s ! case t of {
|
||||
Present => case agr of {
|
||||
ASgP3 _ => Indic Sg ;
|
||||
_ => Indic Pl
|
||||
} ;
|
||||
_ => Pastt --- Future doesn't matter
|
||||
} ;
|
||||
off = comp ! agr ;
|
||||
go = verb.s ! InfImp ++ off ;
|
||||
@@ -801,59 +755,102 @@ oper
|
||||
have = "have" ;
|
||||
has : Bool -> Tense -> Str = \b,t -> auxHave b t agr ;
|
||||
does : Bool -> Tense -> Str = \b,t -> auxTense b t agr
|
||||
in
|
||||
{s = \\o,b,sf =>
|
||||
let
|
||||
neg = if_then_Str b [] "not" ;
|
||||
in
|
||||
case sf of {
|
||||
in
|
||||
\\b => table {
|
||||
VFinite Present Simul => case b of {
|
||||
True => case o of {
|
||||
Dir => it ++ goes Present ++ off ;
|
||||
Inv => does b Present ++ it ++ go
|
||||
} ;
|
||||
False => itgoes o (does b Present) go
|
||||
True => <it,goes Present,off> ;
|
||||
---- does b Present ++ it ++ go
|
||||
False => <it,does b Present, go>
|
||||
} ;
|
||||
VFinite Past Simul => case b of {
|
||||
True => case o of {
|
||||
Dir => it ++ goes Past ++ off ;
|
||||
Inv => does b Past ++ it ++ go
|
||||
} ;
|
||||
False => itgoes o (does b Past) go
|
||||
True => <it,goes Past,off> ;
|
||||
---- does b Present ++ it ++ go
|
||||
False => <it,does b Past, go>
|
||||
} ;
|
||||
VFinite t Simul => itgoes o (does b t) go ;
|
||||
VFinite Present Anter => itgoes o (has b Present) gone ;
|
||||
VFinite Past Anter => itgoes o (has b Past) gone ;
|
||||
VFinite t Anter => itgoes o (does b t) (have ++ gone)
|
||||
VFinite t Simul => <it,does b t, go> ;
|
||||
VFinite Present Anter => <it,has b Present, gone> ;
|
||||
VFinite Past Anter => <it,has b Past, gone> ;
|
||||
VFinite t Anter => <it,does b t, have ++ gone>
|
||||
--- ;
|
||||
--- VInfinit Simul => it ++ neg ++ go ;
|
||||
--- VInfinit Anter => it ++ neg ++ (have ++ gone) ;
|
||||
--- VPresPart => it ++ neg ++ going
|
||||
}
|
||||
} ;
|
||||
{- --vg
|
||||
predVerbGroupClause : NounPhrase -> VerbGroup -> Clause =
|
||||
\yo,dosleep -> {
|
||||
s = \\o,b,c =>
|
||||
let
|
||||
a = yo.a ;
|
||||
you = yo.s ! NomP ;
|
||||
do = dosleep.s ! b ! c ! a ;
|
||||
sleeps = dosleep.s2 ! b ! c ! a ;
|
||||
does = auxTense b Present a ;
|
||||
did = auxTense b Past a ;
|
||||
sleep = dosleep.s2 ! False ! c ! a
|
||||
in
|
||||
case o of {
|
||||
Dir => you ++ do ++ sleeps ;
|
||||
Inv => case <c,dosleep.isAux> of {
|
||||
<VFinite Present Simul,False> => does ++ you ++ sleep ;
|
||||
<VFinite Past Simul,False> => did ++ you ++ sleep ;
|
||||
_ => do ++ you ++ sleeps
|
||||
}
|
||||
|
||||
-- This is for auxiliaries.
|
||||
|
||||
predBeGroup : NounPhrase -> Complement -> Clause = \np,comp ->
|
||||
let nv = predAuxClauseGen np auxVerbBe comp in
|
||||
{s = table {
|
||||
Dir => \\b,sf => let nvg = nv ! b ! sf in nvg.p1 ++ nvg.p2 ++ nvg.p3 ;
|
||||
Inv => \\b,sf => let nvg = nv ! b ! sf in nvg.p2 ++ nvg.p1 ++ nvg.p3
|
||||
}
|
||||
} ;
|
||||
|
||||
{- ---
|
||||
predClauseGroup : Verb -> Complement -> VerbGroup = \verb,comp ->
|
||||
let
|
||||
nvg : Agr -> (Bool => SForm => (Str * Str * Str)) =
|
||||
\ag -> predVerbClauseGen {s = \\_ => [] ; a = ag} verb comp
|
||||
in
|
||||
{s = \\b,f,a => (nvg a ! b ! f).p2 ;
|
||||
s2 = \\b,f,a => (nvg a ! b ! f).p3 ;
|
||||
isAux = True
|
||||
} ;
|
||||
-}
|
||||
|
||||
predAuxClauseGen : NounPhrase -> AuxVerb -> Complement ->
|
||||
(Bool => SForm => (Str * Str * Str)) = \np,verb,comp ->
|
||||
let
|
||||
it = np.s ! NomP ;
|
||||
ita = np.a ;
|
||||
been = verb.s ! APPart ;
|
||||
good = comp ! ita ;
|
||||
begood : Tense -> Str = \t -> case t of {
|
||||
Present => good ;
|
||||
Past => good ;
|
||||
_ => verb.s ! AInfImp ++ good
|
||||
} ;
|
||||
beengood : Tense -> Str = \t -> case t of {
|
||||
Future => "have" ++ been ++ good ;
|
||||
Conditional => "have" ++ been ++ good ;
|
||||
_ => been ++ good
|
||||
} ;
|
||||
has : Bool -> Tense -> Str = \b,t -> case t of {
|
||||
Future => if_then_Str b "will" "won't" ;
|
||||
Conditional => negAux b "would" ;
|
||||
_ => auxHave b t ita
|
||||
} ;
|
||||
is : Bool -> Tense -> Str = \b,t -> case t of {
|
||||
Future => if_then_Str b "will" "won't" ;
|
||||
Conditional => negAux b "would" ;
|
||||
_ => auxVerbForm verb b t ita
|
||||
}
|
||||
in
|
||||
\\b =>
|
||||
table {
|
||||
VFinite t Simul => <it, is b t, begood t> ;
|
||||
VFinite t Anter => <it, has b t, beengood t>
|
||||
--- VInfinit Simul => it ++ begood Future ;
|
||||
--- VInfinit Anter => it ++ beengood Future ;
|
||||
--- VPresPart => it ++ "being" ++ good
|
||||
} ;
|
||||
-- vg -}
|
||||
|
||||
auxVerbForm : AuxVerb -> Bool -> Tense -> Agr -> Str = \verb,b,t,a ->
|
||||
case t of {
|
||||
Present => case a of {
|
||||
ASgP3 _ => verb.s ! AIndic P3 b ;
|
||||
ASgP1 => verb.s ! AIndic P1 b ;
|
||||
_ => verb.s ! AIndic P2 b
|
||||
} ;
|
||||
Past => case a of {
|
||||
ASgP3 _ => verb.s ! APastt Sg b ;
|
||||
_ => verb.s ! APastt Pl b
|
||||
} ;
|
||||
_ => verb.s ! AInfImp --- never used
|
||||
} ;
|
||||
|
||||
|
||||
|
||||
--3 Sentence-complement verbs
|
||||
--
|
||||
@@ -891,7 +888,7 @@ oper
|
||||
-- the construction can be iterated, and the corresponding complication
|
||||
-- in the parameter structure.
|
||||
|
||||
VerbVerb : Type = Verb ** {isAux : Bool} ;
|
||||
VerbVerb : Type = AuxVerb ** {isAux : Bool} ;
|
||||
|
||||
-- To generate "can walk"/"can't walk"; "tries to walk"/"does not try to walk":
|
||||
-- The contraction of "not" is not provided, since it would require changing
|
||||
@@ -906,26 +903,13 @@ oper
|
||||
in
|
||||
---- if_then_else VerbGroup taux
|
||||
---- (useVerbAux try torun)
|
||||
(mkComp try torun) ;
|
||||
|
||||
-- The three most important example auxiliaries.
|
||||
|
||||
mkVerbAux : (_,_,_,_: Str) -> VerbVerb = \beable, can, could, beenable ->
|
||||
{s = table {
|
||||
InfImp => beable ;
|
||||
Indic _ => can ;
|
||||
Pastt _ => could ;
|
||||
PPart => beenable ;
|
||||
PrepPart => nonExist ---- fix!
|
||||
} ;
|
||||
s1 = [] ;
|
||||
isAux = True
|
||||
} ;
|
||||
(mkComp (aux2verb try) torun) ; ----
|
||||
|
||||
---- Problem: "to" in non-present tenses comes to wrong place.
|
||||
--- The real problem is that these are *not* auxiliaries in all tenses.
|
||||
|
||||
vvCan : VerbVerb = mkVerbAux ["be able to"] "can" "could" ["been able to"] ;
|
||||
vvMust : VerbVerb = mkVerbAux ["have to"] "must" ["had to"] ["had to"] ;
|
||||
vvCan : VerbVerb = mkVerbAux ["be able to"] "can" "could" ["been able to"] ** {isAux = True} ;
|
||||
vvMust : VerbVerb = mkVerbAux ["have to"] "must" ["had to"] ["had to"] ** {isAux = True} ;
|
||||
|
||||
-- Notice agreement to object vs. subject:
|
||||
|
||||
@@ -942,13 +926,6 @@ oper
|
||||
(simma.s ! VIInfinit ! a)
|
||||
) ;
|
||||
|
||||
transVerbVerb : VerbVerb -> TransVerb -> TransVerb = \vilja,hitta ->
|
||||
{s = vilja.s ;
|
||||
s1 = vilja.s1 ++ if_then_Str vilja.isAux [] "to" ++
|
||||
hitta.s ! InfImp ++ hitta.s1 ;
|
||||
s3 = hitta.s3
|
||||
} ;
|
||||
|
||||
complVerbAdj : Adjective -> VerbPhrase -> Complement = \grei, simma ->
|
||||
(\\a =>
|
||||
grei.s ! AAdj ++ simma.s1 ++
|
||||
@@ -996,6 +973,32 @@ oper
|
||||
s2 = lookat.s3
|
||||
} ;
|
||||
|
||||
--- this does not give negative or anterior forms
|
||||
|
||||
slashVerbVerb : NounPhrase -> VerbVerb -> TransVerb -> ClauseSlashNounPhrase =
|
||||
\you,want,lookat ->
|
||||
let youlookat = (predVerbClause you (aux2verb want)
|
||||
(complVerbVerb want (predVerbI True {s = [] ; a = Simul} lookat
|
||||
(complVerb lookat)))).s
|
||||
in
|
||||
{s = table {
|
||||
DirQ => youlookat ! Inv ;
|
||||
IndirQ => youlookat ! Dir
|
||||
} ;
|
||||
s2 = lookat.s3
|
||||
} ;
|
||||
|
||||
slashAdverb : Clause -> Preposition -> ClauseSlashNounPhrase =
|
||||
\youwalk,by ->
|
||||
{s = table {
|
||||
DirQ => youwalk.s ! Inv ;
|
||||
IndirQ => youwalk.s ! Dir
|
||||
} ;
|
||||
s2 = by
|
||||
} ;
|
||||
|
||||
|
||||
|
||||
|
||||
--2 Relative pronouns and relative clauses
|
||||
--
|
||||
|
||||
@@ -63,7 +63,12 @@ oper
|
||||
-- in the singular; plural forms are uniformly equal to the 2nd person singular.
|
||||
|
||||
param
|
||||
VForm = InfImp | Indic Person | Pastt Number | PPart | PresPart ;
|
||||
VForm = InfImp | Indic Number | Pastt | PPart | PresPart ;
|
||||
|
||||
-- This is for auxiliary verbs, which have special negated indicative forms.
|
||||
|
||||
AuxVerbForm = AInfImp | AIndic Person Bool | APastt Number Bool | APPart | APresPart ;
|
||||
|
||||
|
||||
oper
|
||||
VerbP3 : Type = {s : VForm => Str} ;
|
||||
@@ -73,6 +78,8 @@ oper
|
||||
Particle : Type = Str ;
|
||||
Verb = VerbP3 ** {s1 : Particle} ;
|
||||
|
||||
AuxVerb = {s : AuxVerbForm => Str} ;
|
||||
|
||||
--
|
||||
--3 Pronouns
|
||||
--
|
||||
|
||||
@@ -61,7 +61,6 @@ lin
|
||||
|
||||
ComplA2S = predAdjSent2 ;
|
||||
|
||||
TransVV2 = transVerbVerb ;
|
||||
AdjPart = adjPastPart ;
|
||||
|
||||
UseV2V x = x ;
|
||||
@@ -102,6 +101,8 @@ lin
|
||||
--
|
||||
|
||||
SlashV2 = slashTransVerb ;
|
||||
SlashVV2 = slashVerbVerb ;
|
||||
SlashAdv cl p = slashAdverb cl p.s ;
|
||||
|
||||
IdRP = identRelPron ;
|
||||
FunRP = funRelPron ;
|
||||
|
||||
@@ -918,7 +918,20 @@ oper
|
||||
slashTransVerb : NounPhrase -> TransVerb -> ClauseSlashNounPhrase =
|
||||
\jag, se ->
|
||||
predVerbGroupClause jag (useVerb se (\\_,_,_ => se.s1)) ** {s2 = se.s2} ;
|
||||
|
||||
|
||||
--- this does not give negative or anterior forms
|
||||
|
||||
slashVerbVerb : NounPhrase -> VerbVerb -> TransVerb -> ClauseSlashNounPhrase =
|
||||
\jag,vilja,se ->
|
||||
predVerbGroupClause jag (useVerb vilja (\\g,n,p =>
|
||||
vilja.s1 ++
|
||||
vilja.s3 ++
|
||||
se.s ! VI (Inf Act))
|
||||
) ** {s2 = se.s2} ;
|
||||
|
||||
slashAdverb : Clause -> Preposition -> ClauseSlashNounPhrase =
|
||||
\youwalk,by -> youwalk ** {s2 = by} ;
|
||||
|
||||
--2 Relative pronouns and relative clauses
|
||||
--
|
||||
-- Relative pronouns can be nominative, accusative, or genitive, and
|
||||
|
||||
Reference in New Issue
Block a user