mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-05-20 00:22:51 -06:00
English auxiliaries and AdV
This commit is contained in:
@@ -36,6 +36,7 @@ concrete CatEng of Cat = TenseX ** open ResEng, Prelude in {
|
|||||||
|
|
||||||
VP = {
|
VP = {
|
||||||
s : Tense => Anteriority => Polarity => Order => Agr => {fin, inf : Str} ;
|
s : Tense => Anteriority => Polarity => Order => Agr => {fin, inf : Str} ;
|
||||||
|
ad : Str ;
|
||||||
s2 : Agr => Str
|
s2 : Agr => Str
|
||||||
} ;
|
} ;
|
||||||
Comp = {s : Agr => Str} ;
|
Comp = {s : Agr => Str} ;
|
||||||
@@ -73,8 +74,9 @@ concrete CatEng of Cat = TenseX ** open ResEng, Prelude in {
|
|||||||
-- Open lexical classes, e.g. Lexicon
|
-- Open lexical classes, e.g. Lexicon
|
||||||
|
|
||||||
V, VS, VQ, VA = Verb ; -- = {s : VForm => Str} ;
|
V, VS, VQ, VA = Verb ; -- = {s : VForm => Str} ;
|
||||||
V2, VV, V2A = Verb ** {c2 : Str} ;
|
V2, V2A = Verb ** {c2 : Str} ;
|
||||||
V3 = Verb ** {c2, c3 : Str} ;
|
V3 = Verb ** {c2, c3 : Str} ;
|
||||||
|
VV = {s : VVForm => Str ; isAux : Bool} ;
|
||||||
|
|
||||||
A = {s : AForm => Str} ;
|
A = {s : AForm => Str} ;
|
||||||
A2 = {s : AForm => Str ; c2 : Str} ;
|
A2 = {s : AForm => Str ; c2 : Str} ;
|
||||||
|
|||||||
@@ -42,7 +42,6 @@ oper
|
|||||||
human : Gender ;
|
human : Gender ;
|
||||||
nonhuman : Gender ;
|
nonhuman : Gender ;
|
||||||
masculine : Gender ;
|
masculine : Gender ;
|
||||||
feminite : Gender ;
|
|
||||||
|
|
||||||
-- To abstract over number names, we define the following.
|
-- To abstract over number names, we define the following.
|
||||||
|
|
||||||
@@ -439,7 +438,10 @@ oper
|
|||||||
dirdirV3 v = dirV3 v [] ;
|
dirdirV3 v = dirV3 v [] ;
|
||||||
|
|
||||||
mkVS v = v ** {lock_VS = <>} ;
|
mkVS v = v ** {lock_VS = <>} ;
|
||||||
mkVV v = v ** {c2 = "to" ; lock_VV = <>} ;
|
mkVV v = {
|
||||||
|
s = table {VVF vf => v.s ! vf ; _ => variants {}} ;
|
||||||
|
isAux = False ; lock_VV = <>
|
||||||
|
} ;
|
||||||
mkVQ v = v ** {lock_VQ = <>} ;
|
mkVQ v = v ** {lock_VQ = <>} ;
|
||||||
|
|
||||||
V0 : Type = V ;
|
V0 : Type = V ;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
concrete PhraseEng of Phrase = CatEng ** open ResEng in {
|
concrete PhraseEng of Phrase = CatEng ** open Prelude, ResEng in {
|
||||||
|
|
||||||
lin
|
lin
|
||||||
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
|
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
|
||||||
@@ -11,7 +11,7 @@ concrete PhraseEng of Phrase = CatEng ** open ResEng in {
|
|||||||
UttIP ip = {s = ip.s ! Nom} ; --- Acc also
|
UttIP ip = {s = ip.s ! Nom} ; --- Acc also
|
||||||
UttIAdv iadv = iadv ;
|
UttIAdv iadv = iadv ;
|
||||||
UttNP np = {s = np.s ! Acc} ;
|
UttNP np = {s = np.s ! Acc} ;
|
||||||
UttVP vp = {s = "to" ++ infVP vp (agrP3 Sg)} ;
|
UttVP vp = {s = infVP False vp (agrP3 Sg)} ;
|
||||||
UttAdv adv = adv ;
|
UttAdv adv = adv ;
|
||||||
|
|
||||||
NoPConj = {s = []} ;
|
NoPConj = {s = []} ;
|
||||||
|
|||||||
@@ -36,6 +36,10 @@ resource ResEng = ParamX ** open Prelude in {
|
|||||||
param
|
param
|
||||||
VForm = VInf | VPres | VPast | VPPart | VPresPart ;
|
VForm = VInf | VPres | VPast | VPPart | VPresPart ;
|
||||||
|
|
||||||
|
-- Auxiliary verbs have special negative forms.
|
||||||
|
|
||||||
|
VVForm = VVF VForm | VVPresNeg | VVPastNeg ;
|
||||||
|
|
||||||
-- The order of sentence is needed already in $VP$.
|
-- The order of sentence is needed already in $VP$.
|
||||||
|
|
||||||
Order = ODir | OQuest ;
|
Order = ODir | OQuest ;
|
||||||
@@ -159,9 +163,13 @@ resource ResEng = ParamX ** open Prelude in {
|
|||||||
|
|
||||||
VP : Type = {
|
VP : Type = {
|
||||||
s : VerbForms ;
|
s : VerbForms ;
|
||||||
|
ad : Str ;
|
||||||
s2 : Agr => Str
|
s2 : Agr => Str
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
--- The order gets wrong with AdV, but works around a parser
|
||||||
|
--- generation bug.
|
||||||
|
|
||||||
predV : Verb -> VP = \verb -> {
|
predV : Verb -> VP = \verb -> {
|
||||||
s = \\t,ant,b,ord,agr =>
|
s = \\t,ant,b,ord,agr =>
|
||||||
let
|
let
|
||||||
@@ -173,12 +181,12 @@ resource ResEng = ParamX ** open Prelude in {
|
|||||||
{fin = x ; inf = y} ;
|
{fin = x ; inf = y} ;
|
||||||
in
|
in
|
||||||
case <t,ant,b,ord> of {
|
case <t,ant,b,ord> of {
|
||||||
<Pres,Simul,Pos,ODir> => vf fin [] ;
|
<Pres,Simul,Pos,ODir> => vf fin [] ; --- should be opp
|
||||||
<Pres,Simul,Pos,OQuest> => vf (does agr) inf ;
|
<Pres,Simul,Pos,OQuest> => vf (does agr) inf ;
|
||||||
<Pres,Simul,Neg,_> => vf (doesnt agr) inf ;
|
<Pres,Simul,Neg,_> => vf (doesnt agr) inf ;
|
||||||
<Pres,Anter,Pos,_> => vf (have agr) part ;
|
<Pres,Anter,Pos,_> => vf (have agr) part ;
|
||||||
<Pres,Anter,Neg,_> => vf (havent agr) part ;
|
<Pres,Anter,Neg,_> => vf (havent agr) part ;
|
||||||
<Past,Simul,Pos,ODir> => vf past [] ;
|
<Past,Simul,Pos,ODir> => vf past [] ; --- should be opp
|
||||||
<Past,Simul,Pos,OQuest> => vf "did" inf ;
|
<Past,Simul,Pos,OQuest> => vf "did" inf ;
|
||||||
<Past,Simul,Neg,_> => vf "didn't" inf ;
|
<Past,Simul,Neg,_> => vf "didn't" inf ;
|
||||||
<Past,Anter,Pos,_> => vf "had" part ;
|
<Past,Anter,Pos,_> => vf "had" part ;
|
||||||
@@ -192,6 +200,7 @@ resource ResEng = ParamX ** open Prelude in {
|
|||||||
<Cond,Anter,Pos,_> => vf "would" ("have" ++ part) ;
|
<Cond,Anter,Pos,_> => vf "would" ("have" ++ part) ;
|
||||||
<Cond,Anter,Neg,_> => vf "wouldn't" ("have" ++ part)
|
<Cond,Anter,Neg,_> => vf "wouldn't" ("have" ++ part)
|
||||||
} ;
|
} ;
|
||||||
|
ad = [] ;
|
||||||
s2 = \\a => if_then_Str verb.isRefl (reflPron ! a) []
|
s2 = \\a => if_then_Str verb.isRefl (reflPron ! a) []
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -221,25 +230,50 @@ resource ResEng = ParamX ** open Prelude in {
|
|||||||
<Cond,Anter,Pos,_> => vf "would" ("have" ++ part) ;
|
<Cond,Anter,Pos,_> => vf "would" ("have" ++ part) ;
|
||||||
<Cond,Anter,Neg,_> => vf "wouldn't" ("have" ++ part)
|
<Cond,Anter,Neg,_> => vf "wouldn't" ("have" ++ part)
|
||||||
} ;
|
} ;
|
||||||
|
ad = [] ;
|
||||||
s2 = \\_ => []
|
s2 = \\_ => []
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
insertObj : (Agr => Str) -> VP -> VP = \obj,vp -> {
|
insertObj : (Agr => Str) -> VP -> VP = \obj,vp -> {
|
||||||
s = vp.s ;
|
s = vp.s ;
|
||||||
|
ad = vp.ad ;
|
||||||
s2 = \\a => vp.s2 ! a ++ obj ! a
|
s2 = \\a => vp.s2 ! a ++ obj ! a
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
--- This is not functional.
|
--- The adverb should be before the finite verb.
|
||||||
|
|
||||||
insertAdV : Str -> VP -> VP = \adv,vp -> {
|
insertAdV : Str -> VP -> VP = \adv,vp -> {
|
||||||
s = vp.s ;
|
s = vp.s ;
|
||||||
s2 = vp.s2
|
ad = vp.ad ++ adv ;
|
||||||
|
s2 = \\a => vp.s2 ! a
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
--
|
||||||
|
|
||||||
|
predVV : {s : VVForm => Str ; isAux : Bool} -> VP = \verb ->
|
||||||
|
let verbs = verb.s
|
||||||
|
in
|
||||||
|
case verb.isAux of {
|
||||||
|
True => predAux {
|
||||||
|
pres = table {
|
||||||
|
Pos => \\_ => verbs ! VVF VPres ;
|
||||||
|
Neg => \\_ => verbs ! VVPresNeg
|
||||||
|
} ;
|
||||||
|
past = table {
|
||||||
|
Pos => \\_ => verbs ! VVF VPast ;
|
||||||
|
Neg => \\_ => verbs ! VVPastNeg
|
||||||
|
} ;
|
||||||
|
inf = verbs ! VVF VInf ;
|
||||||
|
ppart = verbs ! VVF VPPart
|
||||||
|
} ;
|
||||||
|
_ => predV {s = \\vf => verbs ! VVF vf ; isRefl = False}
|
||||||
|
} ;
|
||||||
|
|
||||||
presVerb : {s : VForm => Str} -> Agr -> Str = \verb ->
|
presVerb : {s : VForm => Str} -> Agr -> Str = \verb ->
|
||||||
agrVerb (verb.s ! VPres) (verb.s ! VInf) ;
|
agrVerb (verb.s ! VPres) (verb.s ! VInf) ;
|
||||||
|
|
||||||
infVP : VP -> Agr -> Str = \vp,a ->
|
infVP : Bool -> VP -> Agr -> Str = \isAux,vp,a ->
|
||||||
|
if_then_Str isAux [] "to" ++
|
||||||
(vp.s ! Fut ! Simul ! Neg ! ODir ! a).inf ++ vp.s2 ! a ;
|
(vp.s ! Fut ! Simul ! Neg ! ODir ! a).inf ++ vp.s2 ! a ;
|
||||||
|
|
||||||
agrVerb : Str -> Str -> Agr -> Str = \has,have,agr ->
|
agrVerb : Str -> Str -> Agr -> Str = \has,have,agr ->
|
||||||
@@ -299,8 +333,8 @@ resource ResEng = ParamX ** open Prelude in {
|
|||||||
compl = vp.s2 ! agr
|
compl = vp.s2 ! agr
|
||||||
in
|
in
|
||||||
case o of {
|
case o of {
|
||||||
ODir => subj ++ verb.fin ++ verb.inf ++ compl ;
|
ODir => subj ++ verb.fin ++ vp.ad ++ verb.inf ++ compl ;
|
||||||
OQuest => verb.fin ++ subj ++ verb.inf ++ compl
|
OQuest => verb.fin ++ subj ++ vp.ad ++ verb.inf ++ compl
|
||||||
}
|
}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
concrete SentenceEng of Sentence = CatEng ** open ResEng in {
|
concrete SentenceEng of Sentence = CatEng ** open Prelude, ResEng in {
|
||||||
|
|
||||||
flags optimize=all_subs ;
|
flags optimize=all_subs ;
|
||||||
|
|
||||||
@@ -12,7 +12,7 @@ concrete SentenceEng of Sentence = CatEng ** open ResEng in {
|
|||||||
s = \\pol,n =>
|
s = \\pol,n =>
|
||||||
let
|
let
|
||||||
agr = {n = n ; p = P2} ;
|
agr = {n = n ; p = P2} ;
|
||||||
verb = infVP vp agr ;
|
verb = infVP True vp agr ;
|
||||||
dont = case pol of {
|
dont = case pol of {
|
||||||
Neg => "don't" ;
|
Neg => "don't" ;
|
||||||
_ => []
|
_ => []
|
||||||
@@ -25,8 +25,9 @@ concrete SentenceEng of Sentence = CatEng ** open ResEng in {
|
|||||||
mkClause (np.s ! Nom) np.a (predV v2) ** {c2 = v2.c2} ;
|
mkClause (np.s ! Nom) np.a (predV v2) ** {c2 = v2.c2} ;
|
||||||
|
|
||||||
SlashVVV2 np vv v2 =
|
SlashVVV2 np vv v2 =
|
||||||
mkClause (np.s ! Nom) np.a (insertObj (\\_ => "to" ++ v2.s ! VInf) (predV vv)) **
|
mkClause (np.s ! Nom) np.a
|
||||||
{c2 = v2.c2} ;
|
(insertObj (\\a => infVP vv.isAux (predV v2) a) (predVV vv)) **
|
||||||
|
{c2 = v2.c2} ;
|
||||||
|
|
||||||
AdvSlash slash adv = {
|
AdvSlash slash adv = {
|
||||||
s = \\t,a,b,o => slash.s ! t ! a ! b ! o ++ adv.s ;
|
s = \\t,a,b,o => slash.s ! t ! a ! b ! o ++ adv.s ;
|
||||||
@@ -37,7 +38,7 @@ concrete SentenceEng of Sentence = CatEng ** open ResEng in {
|
|||||||
|
|
||||||
EmbedS s = {s = conjThat ++ s.s} ;
|
EmbedS s = {s = conjThat ++ s.s} ;
|
||||||
EmbedQS qs = {s = qs.s ! QIndir} ;
|
EmbedQS qs = {s = qs.s ! QIndir} ;
|
||||||
EmbedVP vp = {s = "to" ++ infVP vp (agrP3 Sg)} ; --- agr
|
EmbedVP vp = {s = infVP False vp (agrP3 Sg)} ; --- agr
|
||||||
|
|
||||||
UseCl t a p cl = {s = t.s ++ a.s ++ p.s ++ cl.s ! t.t ! a.a ! p.p ! ODir} ;
|
UseCl t a p cl = {s = t.s ++ a.s ++ p.s ++ cl.s ! t.t ! a.a ! p.p ! ODir} ;
|
||||||
UseQCl t a p cl = {s = \\q => t.s ++ a.s ++ p.s ++ cl.s ! t.t ! a.a ! p.p ! q} ;
|
UseQCl t a p cl = {s = \\q => t.s ++ a.s ++ p.s ++ cl.s ! t.t ! a.a ! p.p ! q} ;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
concrete StructuralEng of Structural = CatEng **
|
concrete StructuralEng of Structural = CatEng **
|
||||||
open MorphoEng, Prelude in {
|
open MorphoEng, (P = ParadigmsEng), Prelude in {
|
||||||
|
|
||||||
flags optimize=all ;
|
flags optimize=all ;
|
||||||
|
|
||||||
@@ -19,8 +19,11 @@ concrete StructuralEng of Structural = CatEng **
|
|||||||
but_PConj = ss "but" ;
|
but_PConj = ss "but" ;
|
||||||
by8agent_Prep = ss "by" ;
|
by8agent_Prep = ss "by" ;
|
||||||
by8means_Prep = ss "by" ;
|
by8means_Prep = ss "by" ;
|
||||||
can8know_VV = verbPart (mkVerbIrreg "know" "knew" "known") "how"** {c2 = "to"} ;---
|
can8know_VV, can_VV = {
|
||||||
can_VV = verbGen "manage" ** {c2 = "to"} ; ---
|
s = table VVForm [["be able to"] ; "can" ; "could" ;
|
||||||
|
["been able to"] ; ["being able to"] ; "can't" ; "couldn't"] ;
|
||||||
|
isAux = True
|
||||||
|
} ;
|
||||||
during_Prep = ss "during" ;
|
during_Prep = ss "during" ;
|
||||||
either7or_DConj = sd2 "either" "or" ** {n = Sg} ;
|
either7or_DConj = sd2 "either" "or" ** {n = Sg} ;
|
||||||
everybody_NP = regNP "everybody" Sg ;
|
everybody_NP = regNP "everybody" Sg ;
|
||||||
@@ -45,7 +48,11 @@ concrete StructuralEng of Structural = CatEng **
|
|||||||
more_CAdv = ss "more" ;
|
more_CAdv = ss "more" ;
|
||||||
most_Predet = ss "most" ;
|
most_Predet = ss "most" ;
|
||||||
much_Det = mkDeterminer Sg "much" ;
|
much_Det = mkDeterminer Sg "much" ;
|
||||||
must_VV = mkVerb4 "have" "has" "had" "had" ** {c2 = "to"} ; ---
|
must_VV = {
|
||||||
|
s = table VVForm [["be have to"] ; "must" ; ["had to"] ;
|
||||||
|
["had to"] ; ["having to"] ; "mustn't" ; ["hadn't to"]] ; ----
|
||||||
|
isAux = True
|
||||||
|
} ;
|
||||||
no_Phr = ss "no" ;
|
no_Phr = ss "no" ;
|
||||||
on_Prep = ss "on" ;
|
on_Prep = ss "on" ;
|
||||||
one_Quant = mkDeterminer Sg "one" ;
|
one_Quant = mkDeterminer Sg "one" ;
|
||||||
@@ -69,6 +76,7 @@ concrete StructuralEng of Structural = CatEng **
|
|||||||
there7to_Adv = ss "there" ;
|
there7to_Adv = ss "there" ;
|
||||||
there7from_Adv = ss ["from there"] ;
|
there7from_Adv = ss ["from there"] ;
|
||||||
therefore_PConj = ss "therefore" ;
|
therefore_PConj = ss "therefore" ;
|
||||||
|
these_NP = regNP "these" Pl ;
|
||||||
they_Pron = mkNP "they" "them" "their" Pl P3 ;
|
they_Pron = mkNP "they" "them" "their" Pl P3 ;
|
||||||
this_Quant = mkQuant "this" "these" ;
|
this_Quant = mkQuant "this" "these" ;
|
||||||
this_NP = regNP "this" Sg ;
|
this_NP = regNP "this" Sg ;
|
||||||
@@ -78,7 +86,7 @@ concrete StructuralEng of Structural = CatEng **
|
|||||||
to_Prep = ss "to" ;
|
to_Prep = ss "to" ;
|
||||||
under_Prep = ss "under" ;
|
under_Prep = ss "under" ;
|
||||||
very_AdA = ss "very" ;
|
very_AdA = ss "very" ;
|
||||||
want_VV = verbGen "want" ** {c2 = "to"} ;
|
want_VV = P.mkVV (P.regV "want") ;
|
||||||
we_Pron = mkNP "we" "us" "our" Pl P1 ;
|
we_Pron = mkNP "we" "us" "our" Pl P1 ;
|
||||||
whatPl_IP = mkIP "what" "what" "what's" Sg ;
|
whatPl_IP = mkIP "what" "what" "what's" Sg ;
|
||||||
whatSg_IP = mkIP "what" "what" "what's" Sg ;
|
whatSg_IP = mkIP "what" "what" "what's" Sg ;
|
||||||
|
|||||||
@@ -8,7 +8,8 @@ concrete VerbEng of Verb = CatEng ** open ResEng in {
|
|||||||
ComplV3 v np np2 =
|
ComplV3 v np np2 =
|
||||||
insertObj (\\_ => v.c2 ++ np.s ! Acc ++ v.c3 ++ np2.s ! Acc) (predV v) ;
|
insertObj (\\_ => v.c2 ++ np.s ! Acc ++ v.c3 ++ np2.s ! Acc) (predV v) ;
|
||||||
|
|
||||||
ComplVV v vp = insertObj (\\a => v.c2 ++ infVP vp a) (predV v) ;
|
ComplVV v vp = insertObj (\\a => infVP v.isAux vp a) (predVV v) ;
|
||||||
|
|
||||||
ComplVS v s = insertObj (\\_ => conjThat ++ s.s) (predV v) ;
|
ComplVS v s = insertObj (\\_ => conjThat ++ s.s) (predV v) ;
|
||||||
ComplVQ v q = insertObj (\\_ => q.s ! QIndir) (predV v) ;
|
ComplVQ v q = insertObj (\\_ => q.s ! QIndir) (predV v) ;
|
||||||
|
|
||||||
@@ -20,8 +21,7 @@ concrete VerbEng of Verb = CatEng ** open ResEng in {
|
|||||||
|
|
||||||
AdvVP vp adv = insertObj (\\_ => adv.s) vp ;
|
AdvVP vp adv = insertObj (\\_ => adv.s) vp ;
|
||||||
|
|
||||||
--- This rule destroys parsing...
|
AdVVP adv vp = insertAdV adv.s vp ;
|
||||||
---- AdVVP adv vp = insertAdV adv.s vp ;
|
|
||||||
|
|
||||||
ReflV2 v = insertObj (\\a => v.c2 ++ reflPron ! a) (predV v) ;
|
ReflV2 v = insertObj (\\a => v.c2 ++ reflPron ! a) (predV v) ;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user