comparative adverbs generalized to cover more of Attempto

This commit is contained in:
aarne
2008-11-15 11:19:10 +00:00
parent 6b21e170e8
commit fc60a33c2a
34 changed files with 124 additions and 78 deletions

View File

@@ -14,6 +14,7 @@ abstract Adjective = Cat ** {
ReflA2 : A2 -> AP ; -- married to itself
UseA2 : A2 -> AP ; -- married
UseComparA : A -> AP ; -- warmer
CAdvAP : CAdv -> AP -> NP -> AP ; -- as cool as John
-- The superlative use is covered in $Ord$.

View File

@@ -70,6 +70,11 @@ abstract Sentence = Cat ** {
RelS : S -> RS -> S ; -- she sleeps, which is good
---- A sentence can also be post-modified by a subjunct sentence.
---- ModSubjS : S -> Subj -> S -> S ; -- she sleeps, because she is old
---- cf. Adverb.SubjS
}
--.

View File

@@ -117,4 +117,6 @@ abstract Structural = Cat ** {
nothing_NP : NP ;
except_Prep : Prep ;
as_CAdv : CAdv ;
}

View File

@@ -389,12 +389,13 @@ incomplete resource Constructors = open Grammar in {
mkNP : Predet -> NP -> NP ; -- 21. only John
mkNP : NP -> V2 -> NP ; -- 22. John killed
mkNP : NP -> Adv -> NP ; -- 23. John in Paris
mkNP : NP -> RS -> NP ; -- 24. John, who lives in Paris
-- A conjunction can be formed both from two noun phrases and a longer
-- list of them.
mkNP : Conj -> NP -> NP -> NP ; -- 22. John and I
mkNP : Conj -> ListNP -> NP ; -- 23. John, I, and that
mkNP : Conj -> NP -> NP -> NP ; -- 25. John and I
mkNP : Conj -> ListNP -> NP ; -- 26. John, I, and that
} ;
@@ -614,6 +615,7 @@ incomplete resource Constructors = open Grammar in {
mkAP : Conj -> ListAP -> AP ; -- 11. old, big, and warm
mkAP : Ord -> AP ; -- 12. oldest
mkAP : CAdv -> AP -> NP -> AP ; -- 13. as old as John
} ;
reflAP : A2 -> AP ; -- married to himself
@@ -894,7 +896,8 @@ incomplete resource Constructors = open Grammar in {
= \c,xy -> ConjAP c xy ;
mkAP : Ord -> AP
= AdjOrd ;
mkAP : CAdv -> AP -> NP -> AP
= CAdvAP ;
} ;
reflAP = ReflA2 ;
@@ -1055,6 +1058,8 @@ incomplete resource Constructors = open Grammar in {
= PPartNP ;
mkNP : NP -> Adv -> NP -- Paris at midnight
= AdvNP ;
mkNP : NP -> RS -> NP
= RelNP ;
mkNP : Conj -> NP -> NP -> NP
= \c,x,y -> ConjNP c (BaseNP x y) ;
mkNP : Conj -> ListNP -> NP

View File

@@ -1,5 +1,5 @@
concrete StructuralCat of Structural = CatCat **
open PhonoCat, MorphoCat, ParadigmsCat, BeschCat, Prelude in {
open PhonoCat, MorphoCat, ParadigmsCat, BeschCat, (X = ConstructX), Prelude in {
flags optimize=all ; coding=utf8 ;
@@ -60,10 +60,10 @@ lin
"ell" "lo" "el" "ell"
["el seu"] ["la seva"] ["els seus"] ["les seves"]
Masc Sg P3 ;
less_CAdv = ss "menys" ; ----
less_CAdv = X.mkCAdv "menys" conjThan ; ----
many_Det = {
s,sp = \\g,c => prepCase c ++ genForms "molts" "moltes" ! g ; n = Pl ; s2 = []} ;
more_CAdv = ss "més" ;
more_CAdv = X.mkCAdv "més" conjThan ;
most_Predet = {s = \\_,c => prepCase c ++ ["la majoria"] ; c = CPrep P_de} ;
much_Det = {
s,sp = \\g,c => prepCase c ++ genForms "molt" "molta" ! g ; n = Sg ; s2 = []} ;

View File

@@ -11,7 +11,7 @@ concrete CommonX of Common = open (R = ParamX) in {
AdA = {s : Str} ; --lock_AdA : {}} ;
AdN = {s : Str} ; --lock_AdN : {}} ;
IAdv = {s : Str} ; --lock_IAdv : {}} ;
CAdv = {s : Str} ; --lock_CAdv : {}} ;
CAdv = {s,p : Str} ; --lock_CAdv : {}} ;
PConj = {s : Str} ; --lock_PConj : {}} ;
Temp = {s : Str ; t : R.Tense ; a : R.Anteriority} ;

View File

@@ -13,7 +13,7 @@ resource ConstructX = open CommonX in {
mkAdA : Str -> AdA = \s -> {s = s ; lock_AdA = <>} ;
mkAdN : Str -> AdN = \s -> {s = s ; lock_AdN = <>} ;
mkIAdv : Str -> IAdv = \s -> {s = s ; lock_IAdv = <>} ;
mkCAdv : Str -> CAdv = \s -> {s = s ; lock_CAdv = <>} ;
mkCAdv : Str -> Str -> CAdv = \s,p -> {s = s ; p = p ; lock_CAdv = <>} ;
mkPConj : Str -> PConj = \s -> {s = s ; lock_PConj = <>} ;
}

View File

@@ -20,6 +20,10 @@ concrete AdjectiveEng of Adjective = CatEng ** open ResEng, Prelude in {
isPre = True
} ;
CAdvAP ad ap np = {
s = \\a => ad.s ++ ap.s ! a ++ ad.p ++ np.s ! Nom ;
isPre = False
} ;
ComplA2 a np = {
s = \\_ => a.s ! AAdj Posit ++ a.c2 ++ np.s ! Acc ;

View File

@@ -3,10 +3,10 @@ concrete AdverbEng of Adverb = CatEng ** open ResEng, Prelude in {
lin
PositAdvAdj a = {s = a.s ! AAdv} ;
ComparAdvAdj cadv a np = {
s = cadv.s ++ a.s ! AAdv ++ "than" ++ np.s ! Nom
s = cadv.s ++ a.s ! AAdv ++ cadv.p ++ np.s ! Nom
} ;
ComparAdvAdjS cadv a s = {
s = cadv.s ++ a.s ! AAdv ++ "than" ++ s.s
s = cadv.s ++ a.s ! AAdv ++ cadv.p ++ s.s
} ;
PrepNP prep np = {s = prep.s ++ np.s ! Acc} ;
@@ -14,8 +14,7 @@ concrete AdverbEng of Adverb = CatEng ** open ResEng, Prelude in {
AdAdv = cc2 ;
SubjS = cc2 ;
---b AdvSC s = s ; --- this rule give stack overflow in ordinary parsing
AdnCAdv cadv = {s = cadv.s ++ "than"} ;
AdnCAdv cadv = {s = cadv.s ++ cadv.p} ;
}

View File

@@ -178,7 +178,7 @@ lin
stone_N = regN "stone" ;
stove_N = regN "stove" ;
student_N = mkN human (regN "student") ;
stupid_A = regADeg "stupid" ;
stupid_A = mkA "stupid" ;
sun_N = regN "sun" ;
switch8off_V2 = dirV2 (partV (regV "switch") "off") ;
switch8on_V2 = dirV2 (partV (regV "switch") "on") ;
@@ -193,7 +193,7 @@ lin
travel_V = (regDuplV "travel") ;
tree_N = regN "tree" ;
---- trousers_N = regN "trousers" ;
ugly_A = regADeg "ugly" ;
ugly_A = mkA "ugly" ;
understand_V2 = dirV2 (irregV "understand" "understood" "understood") ;
university_N = regN "university" ;
village_N = regN "village" ;
@@ -203,7 +203,7 @@ lin
war_N = regN "war" ;
watch_V2 = dirV2 (regV "watch") ;
water_N = regN "water" ;
white_A = regADeg "white" ;
white_A = mkA "white" ;
window_N = regN "window" ;
wine_N = regN "wine" ;
win_V2 = dirV2 (irregDuplV "win" "won" "won") ;
@@ -211,7 +211,7 @@ lin
wonder_VQ = mkVQ (regV "wonder") ;
wood_N = regN "wood" ;
write_V2 = dirV2 (irregV "write" "wrote" "written") ;
yellow_A = regADeg "yellow" ;
yellow_A = mkA "yellow" ;
young_A = regADeg "young" ;
do_V2 = dirV2 (mk5V "do" "does" "did" "done" "doing") ;

View File

@@ -1,11 +1,13 @@
--# -path=.:../common:../abstract
resource MakeStructuralEng = open CatEng, ParadigmsEng, MorphoEng, Prelude in {
resource MakeStructuralEng = open CatEng, ParadigmsEng, ResEng, MorphoEng, Prelude in {
oper
mkConj : Str -> Str -> Number -> Conj = \x,y,n ->
{s1 = x ; s2 = y ; n = n ; lock_Conj = <>} ;
mkSubj : Str -> Subj = \x ->
{s = x ; lock_Subj = <>} ;
mkNP : Str -> Number -> NP = \s,n ->
regNP s n ** {lock_NP = <>} ;
}

View File

@@ -1,5 +1,5 @@
concrete StructuralEng of Structural = CatEng **
open MorphoEng, ResEng, ParadigmsEng, Prelude in {
open MorphoEng, ResEng, ParadigmsEng, (C = ConstructX), Prelude in {
flags optimize=all ;
@@ -54,9 +54,9 @@ concrete StructuralEng of Structural = CatEng **
i_Pron = mkPron "I" "me" "my" "mine" singular P1 human ;
in_Prep = mkPrep "in" ;
it_Pron = mkPron "it" "it" "its" "its" singular P3 nonhuman ;
less_CAdv = ss "less" ;
less_CAdv = C.mkCAdv "less" "than" ;
many_Det = mkDeterminer plural "many" ;
more_CAdv = ss "more" ;
more_CAdv = C.mkCAdv "more" "than" ;
most_Predet = ss "most" ;
much_Det = mkDeterminer singular "much" ;
must_VV = {
@@ -132,5 +132,8 @@ concrete StructuralEng of Structural = CatEng **
at_most_AdN = mkAdN "at most" ;
except_Prep = mkPrep "except" ;
as_CAdv = C.mkCAdv "as" "as" ;
}

View File

@@ -13,6 +13,9 @@ concrete AdjectiveFin of Adjective = CatFin ** open ResFin, Prelude in {
_ => a.s ! Compar ! AN af ++ "kuin" ++ np.s ! NPCase Nom -- isompi kuin minä
}
} ;
CAdvAP ad ap np = {
s = \\m,af => ad.s ++ ap.s ! m ! af ++ ad.p ++ np.s ! NPCase Nom
} ;
UseComparA a = {
s = \\_,nf => a.s ! Compar ! AN nf ;
} ;

View File

@@ -3,10 +3,10 @@ concrete AdverbFin of Adverb = CatFin ** open ResFin, Prelude in {
lin
PositAdvAdj a = {s = a.s ! Posit ! AAdv} ;
ComparAdvAdj cadv a np = {
s = cadv.s ++ a.s ! Posit ! AAdv ++ "kuin" ++ np.s ! NPCase Nom
s = cadv.s ++ a.s ! Posit ! AAdv ++ cadv.p ++ np.s ! NPCase Nom
} ;
ComparAdvAdjS cadv a s = {
s = cadv.s ++ a.s ! Posit ! AAdv ++ "kuin" ++ s.s
s = cadv.s ++ a.s ! Posit ! AAdv ++ cadv.p ++ s.s
} ;
PrepNP prep np = {s = preOrPost prep.isPre prep.s (np.s ! prep.c)} ;

View File

@@ -1,5 +1,5 @@
concrete StructuralFin of Structural = CatFin **
open MorphoFin, ParadigmsFin, Prelude in {
open MorphoFin, ParadigmsFin, (X = ConstructX), Prelude in {
flags optimize=all ;
@@ -57,9 +57,9 @@ concrete StructuralFin of Structural = CatFin **
a = agrP3 Sg ;
isPron = False
} ;
less_CAdv = ss "vähemmän" ;
less_CAdv = X.mkCAdv "vähemmän" "kuin" ;
many_Det = mkDet Sg (mkN "moni" "monia") ;
more_CAdv = ss "enemmän" ;
more_CAdv = X.mkCAdv "enemmän" "kuin" ;
most_Predet = {s = \\n,c => (nForms2N (dSuurin "useinta")).s ! NCase n (npform2case n c)} ;
much_Det = mkDet Sg {s = \\_ => "paljon"} ;
must_VV = mkVV (caseV genitive (mkV "täytyä")) ;
@@ -302,6 +302,7 @@ lin
at_least_AdN = ss "vähintään" ;
at_most_AdN = ss "enintään" ;
as_CAdv = X.mkCAdv "yhtä" "kuin" ;
}

View File

@@ -1,7 +1,7 @@
--# -path=.:../abstract:../romance:../common:prelude
concrete StructuralFre of Structural = CatFre **
open PhonoFre, MorphoFre, ParadigmsFre, IrregFre, Prelude in {
open PhonoFre, MorphoFre, ParadigmsFre, IrregFre, (X = ConstructX), Prelude in {
flags optimize=all ; coding=utf8 ;
@@ -57,9 +57,9 @@ lin
mkPronoun
"il" (elision "l") "lui" "lui" "son" (elisPoss "s") "ses"
Masc Sg P3 ;
less_CAdv = ss "moins" ;
less_CAdv = X.mkCAdv "moins" conjThan ;
many_Det = {s,sp = \\_,c => prepCase c ++ "plusieurs" ; n = Pl ; s2 = []} ;
more_CAdv = ss "plus" ;
more_CAdv = X.mkCAdv "plus" conjThan ;
most_Predet = {s = \\_,c => prepCase c ++ ["la plupart"] ; c = CPrep P_de} ;
much_Det = {s,sp = \\_,c => prepCase c ++ "beaucoup" ++ elisDe ; n = Pl ; s2 = []} ;
must_VV = mkVV (devoir_V2 ** {lock_V = <>}) ;
@@ -183,5 +183,7 @@ lin
except_Prep = mkPreposition "excepté" ;
as_CAdv = X.mkCAdv "aussi" conjThan ;
}

View File

@@ -12,6 +12,10 @@ concrete AdjectiveGer of Adjective = CatGer ** open ResGer, Prelude in {
s = \\af => a.s ! Compar ! af ++ conjThan ++ np.s ! Nom ;
isPre = True
} ;
CAdvAP ad ap np = {
s = \\af => ad.s ++ ap.s ! af ++ ad.p ++ np.s ! Nom ;
isPre = False
} ;
UseComparA a = {
s = \\af => a.s ! Compar ! af ;
isPre = True

View File

@@ -4,10 +4,10 @@ concrete AdverbGer of Adverb = CatGer ** open ResGer, Prelude in {
PositAdvAdj a = {s = a.s ! Posit ! APred} ;
ComparAdvAdj cadv a np = {
s = cadv.s ++ a.s ! Posit ! APred ++ conjThan ++ np.s ! Nom
s = cadv.s ++ a.s ! Posit ! APred ++ cadv.p ++ np.s ! Nom
} ;
ComparAdvAdjS cadv a s = {
s = cadv.s ++ a.s ! Posit ! APred ++ conjThan ++ s.s ! Sub
s = cadv.s ++ a.s ! Posit ! APred ++ cadv.p ++ s.s ! Sub
} ;
PrepNP prep np = {s = appPrep prep np.s} ;

View File

@@ -1,6 +1,6 @@
concrete StructuralGer of Structural = CatGer **
open MorphoGer, Prelude in {
open MorphoGer, (X = ConstructX), Prelude in {
flags optimize=all ;
@@ -48,9 +48,9 @@ concrete StructuralGer of Structural = CatGer **
i_Pron = mkPronPers "ich" "mich" "mir" "meiner" "mein" Masc Sg P1 ;
in_Prep = mkPrep "in" Dat ;
it_Pron = mkPronPers "es" "es" "ihm" "seiner" "sein" Neutr Sg P3 ;
less_CAdv = ss "weniger" ;
less_CAdv = X.mkCAdv "weniger" "als" ;
many_Det = detLikeAdj Pl "viel" ;
more_CAdv = ss "mehr" ;
more_CAdv = X.mkCAdv "mehr" "als" ;
most_Predet = {s = appAdj (regA "meist") ; c = NoCase} ;
much_Det = detLikeAdj Sg "viel" ;
must_VV = auxVV
@@ -143,4 +143,7 @@ concrete StructuralGer of Structural = CatGer **
at_least_AdN = ss "wenigstens" ;
at_most_AdN = ss "höchstens" ;
except_Prep = mkPrep "außer" Dat ;
as_CAdv = X.mkCAdv "ebenso" "wie" ;
}

View File

@@ -1,7 +1,7 @@
concrete StructuralIta of Structural = CatIta **
open
PhonoIta, MorphoIta,
ParadigmsIta, BeschIta, Prelude in {
ParadigmsIta, BeschIta, (X = ConstructX), Prelude in {
flags optimize=all ; coding=utf8 ;
@@ -57,9 +57,9 @@ lin
mkPronoun
"lui" "lo" "gli" "glie" "lui" "suo" "sua" "suoi" "sue"
Masc Sg P3 ;
less_CAdv = ss "meno" ;
less_CAdv = X.mkCAdv "meno" conjThan ;
many_Det = {s,sp = \\g,c => prepCase c ++ genForms "molti" "molte" ! g ; n = Pl ; s2 = []} ;
more_CAdv = ss "più" ;
more_CAdv = X.mkCAdv "più" conjThan ;
most_Predet = {s = \\_,c => prepCase c ++ ["la maggior parte"] ; c = CPrep P_di} ;
much_Det = {s,sp = \\g,c => prepCase c ++ genForms "molto" "molta" ! g ; n = Sg ; s2 = []} ;
must_VV = mkVV (verboV (dovere_47 "dovere")) ;
@@ -174,5 +174,6 @@ lin
at_least_AdN = ss "almeno" ;
at_most_AdN = ss "al massimo" ;
as_CAdv = X.mkCAdv "così" conjThan ;
}

View File

@@ -11,6 +11,10 @@ incomplete concrete AdjectiveRomance of Adjective =
s = \\af => a.s ! Compar ! af ++ conjThan ++ (np.s ! Nom).ton ;
isPre = False
} ;
CAdvAP ad ap np = {
s = \\af => ad.s ++ ap.s ! af ++ ad.p ++ (np.s ! Nom).ton ;
isPre = False
} ;
UseComparA a = {
s = \\af => a.s ! Compar ! af ;
isPre = a.isPre

View File

@@ -6,10 +6,10 @@ incomplete concrete AdverbRomance of Adverb =
s = a.s ! Posit ! AA
} ;
ComparAdvAdj cadv a np = {
s = cadv.s ++ a.s ! Posit ! AA ++ conjThan ++ (np.s ! Nom).ton
s = cadv.s ++ a.s ! Posit ! AA ++ cadv.p ++ (np.s ! Nom).ton
} ;
ComparAdvAdjS cadv a s = {
s = cadv.s ++ a.s ! Posit ! AA ++ conjThan ++ s.s ! Conjunct --- ne
s = cadv.s ++ a.s ! Posit ! AA ++ cadv.p ++ s.s ! Conjunct --- ne
} ;
PrepNP prep np = {s = prep.s ++ (np.s ! prep.c).ton} ;

View File

@@ -23,6 +23,11 @@ incomplete concrete AdjectiveScand of Adjective =
isPre = False
} ;
CAdvAP ad ap np = {
s = \\a => ad.s ++ ap.s ! a ++ ad.p ++ np.s ! nominative ;
isPre = False
} ;
AdjOrd ord = {
s = \\_ => ord.s ;
isPre = True

View File

@@ -5,10 +5,10 @@ incomplete concrete AdverbScand of Adverb = CatScand ** open CommonScand, ResSca
s = a.s ! adverbForm
} ;
ComparAdvAdj cadv a np = {
s = cadv.s ++ a.s ! adverbForm ++ conjThan ++ np.s ! nominative
s = cadv.s ++ a.s ! adverbForm ++ cadv.p ++ np.s ! nominative
} ;
ComparAdvAdjS cadv a s = {
s = cadv.s ++ a.s ! adverbForm ++ conjThan ++ s.s ! Sub
s = cadv.s ++ a.s ! adverbForm ++ cadv.p ++ s.s ! Sub
} ;
PrepNP prep np = {s = prep.s ++ np.s ! accusative} ;

View File

@@ -1,5 +1,5 @@
concrete StructuralSpa of Structural = CatSpa **
open PhonoSpa, MorphoSpa, ParadigmsSpa, BeschSpa, Prelude in {
open PhonoSpa, MorphoSpa, ParadigmsSpa, BeschSpa, (X = ConstructX), Prelude in {
flags optimize=all ;
@@ -60,10 +60,10 @@ lin
"el" "lo" "le" "él"
"su" "su" "sus" "sus"
Masc Sg P3 ;
less_CAdv = ss "meno" ; ----
less_CAdv = X.mkCAdv "menos" conjThan ; ----
many_Det = {
s,sp = \\g,c => prepCase c ++ genForms "muchos" "muchas" ! g ; n = Pl ; s2 = []} ;
more_CAdv = ss "mas" ;
more_CAdv = X.mkCAdv "más" conjThan ;
most_Predet = {s = \\_,c => prepCase c ++ ["la mayor parte"] ; c = CPrep P_de} ;
much_Det = {
s,sp = \\g,c => prepCase c ++ genForms "mucho" "mucha" ! g ; n = Sg ; s2 = []} ;
@@ -168,6 +168,8 @@ oper
"y" / strs {"ya" ; "ye" ; "yo" ; "yu"} ;
"e" / strs {"i" ; "hi" ; "y"}
}} ** {n = Pl} ;
lin
as_CAdv = X.mkCAdv "si" conjThan ; ----
}

View File

@@ -1,5 +1,5 @@
concrete StructuralSwe of Structural = CatSwe **
open MorphoSwe, ParadigmsSwe, Prelude in {
open MorphoSwe, ParadigmsSwe, (X = ConstructX), Prelude in {
flags optimize=all ;
@@ -43,9 +43,9 @@ concrete StructuralSwe of Structural = CatSwe **
i_Pron = MorphoSwe.mkNP "jag" "mig" "min" "mitt" "mina" SgUtr P1 ;
in_Prep = ss "i" ;
it_Pron = MorphoSwe.regNP "det" "dess" SgNeutr ;
less_CAdv = ss "mindre" ;
less_CAdv = X.mkCAdv "mindre" "än" ;
many_Det = {s = \\_,_ => "många" ; n = Pl ; det = DDef Indef} ;
more_CAdv = ss "mer" ;
more_CAdv = X.mkCAdv "mer" "än" ;
most_Predet = {s = gennumForms ["den mesta"] ["det mesta"] ["de flesta"]} ;
much_Det = {s = \\_,_ => "mycket" ; n = Pl ; det = DDef Indef} ;
must_VV =
@@ -141,5 +141,8 @@ lin
at_most_AdN = ss "högst" ;
except_Prep = ss "utom" ;
as_CAdv = X.mkCAdv "lika" "som" ;
}