Skip to content

Commit

Permalink
(Ger) Changed Adv and CAdv to have adverbs with separable comparison …
Browse files Browse the repository at this point in the history
…NP or S ;

      Conjunction of Adv and AdV added
  • Loading branch information
hleiss committed Jan 19, 2024
1 parent 9367344 commit 6e52edd
Show file tree
Hide file tree
Showing 15 changed files with 104 additions and 49 deletions.
20 changes: 12 additions & 8 deletions src/german/AdverbGer.gf
Original file line number Diff line number Diff line change
@@ -1,24 +1,28 @@
concrete AdverbGer of Adverb = CatGer ** open ResGer, Prelude in {

lin
PositAdvAdj a = {s = a.s ! Posit ! APred} ;
PositAdvAdj a = {s = a.s ! Posit ! APred ; cp,rc = []} ;

ComparAdvAdj cadv a np = {
s = cadv.s ++ a.s ! Posit ! APred ++ cadv.p ++ np.s ! False ! Nom ++ bigNP np
s = cadv.s ++ a.s ! cadv.deg ! APred ;
cp = cadv.p ++ np.s ! False ! Nom ++ bigNP np ;
rc = []
} ;
ComparAdvAdjS cadv a s = {
s = cadv.s ++ a.s ! Posit ! APred ++ cadv.p ++ s.s ! Sub
s = cadv.s ++ a.s ! Posit ! APred ;
cp = cadv.p ++ s.s ! Sub ;
rc = []
} ;

PrepNP prep np = {s = appPrepNP prep np} ;
PrepNP prep np = {s = appPrepNP prep np ; cp,rc = []} ;

AdAdv = cc2 ;
AdAdv ada adv = adv ** {s = ada.s ++ adv.s} ;

PositAdAAdj a = {s = a.s ! Posit ! APred} ;
PositAdAAdj a = {s = a.s ! Posit ! APred ; cp,rc = []} ;

SubjS subj s = {s = subj.s ++ s.s ! Sub} ;
SubjS subj s = {s = subj.s ++ s.s ! Sub ; cp,rc = []} ;

AdnCAdv cadv = {s = cadv.s ++ conjThan} ;
AdnCAdv cadv = {s = cadv.s ++ conjThan} ; ---- HL: ebenso als ?

}

Expand Down
7 changes: 6 additions & 1 deletion src/german/CatGer.gf
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
--# -path=.:../abstract:../common:../prelude
concrete CatGer of Cat =
CommonX - [Tense,Temp] **
CommonX - [Tense,Temp,Adv,CAdv] **
open ResGer, Prelude in {

flags optimize=all_subs ;
Expand Down Expand Up @@ -42,6 +42,11 @@ concrete CatGer of Cat =
VPSlash = ResGer.VPSlash ;
Comp = {s : Agr => Str ; ext : Str} ;

-- Adverb

Adv = {s : Str ; cp : Str ; rc : Str} ;
CAdv = {s : Str ; p : Str ; deg : Degree} ;

-- Adjective (HL 7/23: we need c : Agr => Str * Str to handle reflexive objects, cf ReflA2)

AP = {
Expand Down
35 changes: 24 additions & 11 deletions src/german/ConjunctionGer.gf
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ concrete ConjunctionGer of Conjunction =

ConjS conj ss = conjunctDistrTable Order conj ss ;

ConjAdv conj ss = conjunctDistrSS conj ss ;
ConjAdv conj ss = {s = conj.s1 ++ ss.s1 ++ conj.s2 ++ ss.s2 ; cp,rc = []} ;

ConjNP conj ss = heavyNP (
{s = \\_ => (conjunctDistrTable Case conj ss).s ;
Expand Down Expand Up @@ -43,8 +43,18 @@ concrete ConjunctionGer of Conjunction =
s2 = xs.s2
} ;

BaseAdv = twoSS ;
ConsAdv = consrSS comma ;
BaseAdv x y = {
s1 = bigAdv (lin Adv x) ;
s2 = bigAdv (lin Adv y) ;
rc,cp = [] ; lock_Adv = <>} ;
ConsAdv xs x = {
s1 = xs.s ++ comma ++ x.s1 ;
s2 = x.s2 ;
} ;
BaseAdV = twoSS ;
ConsAdV = consrSS comma ;
BaseIAdv = twoSS ;
ConsIAdv = consrSS comma ;
BaseNP x y = {
s1 = \\c => x.s ! False ! c ++ bigNP x ;
s2 = \\c => y.s ! False ! c ++ bigNP y ;
Expand All @@ -54,26 +64,26 @@ concrete ConjunctionGer of Conjunction =
s2 = x.s2 ;
a = conjAgr xs.a x.a } ;
BaseAP x y = lin AP {
s1 = bigAP x ;
s2 = bigAP y ;
s1 = bigAP (lin AP x) ;
s2 = bigAP (lin AP y) ;
isPre = andB x.isPre y.isPre ;
c = <[],[]> ;
ext = []} ;
ConsAP xs x = lin AP {
s1 = \\a => (bigAP xs) ! a ++ comma ++ x.s1 ! a ;
s1 = \\a => (bigAP (lin AP xs)) ! a ++ comma ++ x.s1 ! a ;
s2 = x.s2 ;
isPre = andB x.isPre xs.isPre ;
c = <[],[]> ;
ext = []} ;
BaseRS x y = twoTable RelGenNum x y ** {c = y.c} ;
ConsRS xs x = consrTable RelGenNum comma xs x ** {c = xs.c} ;
BaseCN x y = lin CN {
s1 = bigCN x ;
s2 = bigCN y ;
BaseCN x y = {
s1 = bigCN (lin CN x) ;
s2 = bigCN (lin CN y) ;
g = x.g ; --- gender of first CN, used e.g. in articles
} ;
ConsCN x xs = lin CN {
s1 = \\a,n,c => bigCN x ! a ! n ! c ++ comma ++ xs.s1 ! a ! n ! c ;
ConsCN x xs = {
s1 = \\a,n,c => bigCN (lin CN x) ! a ! n ! c ++ comma ++ xs.s1 ! a ! n ! c ;
s2 = xs.s2 ;
g = x.g ; --- gender of first CN, used e.g. in articles
} ;
Expand All @@ -82,6 +92,8 @@ concrete ConjunctionGer of Conjunction =
lincat
[S] = {s1,s2 : Order => Str} ;
[Adv] = {s1,s2 : Str} ;
[AdV] = {s1,s2 : Str} ;
[IAdv] = {s1,s2 : Str} ;
[NP] = {s1,s2 : Case => Str ; a : Agr} ;
[AP] = {s1,s2 : AForm => Str ; isPre : Bool; c : Str * Str ; ext : Str} ;
[RS] = {s1,s2 : RelGenNum => Str ; c : Case} ;
Expand All @@ -93,4 +105,5 @@ concrete ConjunctionGer of Conjunction =
bigCN : CN -> Adjf => Number => Case => Str = \cn ->
\\a,n,c => cn.s ! a ! n ! c ++ cn.adv ++ cn.ext ++ cn.rc ! n ;

bigAdv : CatGer.Adv -> Str = \adv -> adv.s ++ adv.cp ++ adv.rc ;
}
10 changes: 6 additions & 4 deletions src/german/ConstructionGer.gf
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ lin
married_Cl x y = ----mkCl (lin NP x) L.married_A2 (lin NP y) |
mkCl (mkNP and_Conj (lin NP x) (lin NP y)) (P.mkA "verheiratet") ;

what_name_QCl x = mkQCl how_IAdv (mkCl (lin NP x) I.heißen_V) ;
what_name_QCl x = mkQCl how_IAdv (mkCl x I.heißen_V) ;
---- how_old_QCl x = mkQCl (E.ICompAP (mkAP L.old_A)) (lin NP x) ; ---- compilation slow
how_old_QCl x = mkQCl (E.IAdvAdv (P.mkAdv "alt")) (mkCl (lin NP x) G.UseCopula) ; ----
how_far_QCl x = mkQCl (E.IAdvAdv L.far_Adv) (mkCl (mkVP (SyntaxGer.mkAdv to_Prep (lin NP x)))) ;
Expand Down Expand Up @@ -75,7 +75,7 @@ lin

lincat
Timeunit = N ;
Hour = {short:Str ; long:Str ; adv:Adv} ;
Hour = {short:Str ; long:Str ; adv:CatGer.Adv} ;
Weekday = N ;
Monthday = NP ;
Month = N ;
Expand All @@ -89,7 +89,9 @@ lin
in SyntaxGer.mkAdv (for_Prep | accPrep) n_hours_NP ;

timeunitRange l u time =
{s = l.s ! R.AMod (R.gennum R.Masc l.n) R.Nom ++ "bis" ++ u.s ! R.AMod (R.gennum R.Masc u.n) R.Nom ++ time.s ! R.Pl ! R.Nom} ;
{s = l.s ! R.AMod (R.gennum R.Masc l.n) R.Nom ++ "bis"
++ u.s ! R.AMod (R.gennum R.Masc u.n) R.Nom ++ time.s ! R.Pl ! R.Nom ;
cp,rc = []} ;

oper
mkHour : Str -> Str -> Str -> Hour
Expand Down Expand Up @@ -195,7 +197,7 @@ lin
languageNP l = mkNP l ;
languageCN l = mkCN l ;

oper mkLanguage : Str -> N = \s -> P.mkN s neuter ; ---- produces Neuter
oper mkLanguage : Str -> N = \s -> P.mkN s neuter ; ---- need mkN : A -> N for "das Arabische" etc.

----------------------------------------------
---- lexicon of special names
Expand Down
12 changes: 10 additions & 2 deletions src/german/ExtendGer.gf
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ concrete ExtendGer of Extend =
PastPartAP, PastPartAgentAP,
PassVPSlash, PassAgentVPSlash,
AdvIsNP,
ComplDirectVS, ComplDirectVQ,
RNP, RNPList, Base_rr_RNP, Base_nr_RNP, Base_rn_RNP, Cons_rr_RNP, Cons_nr_RNP, Conj_RNP,
ReflRNP, ReflPron, ReflPoss, PredetRNP, AdvRNP, ReflA2RNP, PossPronRNP,
CompoundN, DetNPMasc, DetNPFem, UseDAP, UseDAPMasc, UseDAPFem,
Expand Down Expand Up @@ -157,7 +158,8 @@ concrete ExtendGer of Extend =
} ;

PrepCN prep cn = {
s = prep.s ! GPl ++ cn.s ! Strong ! Sg ! prep.c ++ cn.adv ++ cn.rc ! Sg ++ cn.ext} ;
s = prep.s ! GPl ++ cn.s ! Strong ! Sg ! prep.c ++ cn.adv ++ cn.rc ! Sg ++ cn.ext ;
cp, rc = []} ;

-- fronted/focal constructions, only for main clauses

Expand Down Expand Up @@ -217,6 +219,11 @@ concrete ExtendGer of Extend =

-- object S without "that"

ComplDirectVS vs utt =
AdvVP (UseV <lin V vs : V>) (lin Adv {s = ":" ++ quoted utt.s ; cp,rc=[]}) ;
ComplDirectVQ vq utt =
AdvVP (UseV <lin V vq : V>) (lin Adv {s = ":" ++ quoted utt.s ; cp,rc=[]}) ;

-- front the extraposed part

-- proper structure of "it is AP to VP"
Expand Down Expand Up @@ -390,7 +397,8 @@ concrete ExtendGer of Extend =
} ;


InOrderToVP vp = {s = "um" ++ useInfVP False vp} ;
InOrderToVP vp = {s = "um" ++ useInfVP False vp ;
cp, rc = []} ;

oper
insertObjReflNP : RNP -> ResGer.VPSlash -> ResGer.VP = -- HL 5/2022
Expand Down
4 changes: 2 additions & 2 deletions src/german/GrammarGer.gf
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
--# -path=.:../abstract:../common:prelude
--# -path=.:../abstract:../common:../prelude

concrete GrammarGer of Grammar =
NounGer,
Expand All @@ -11,7 +11,7 @@ concrete GrammarGer of Grammar =
RelativeGer,
ConjunctionGer,
PhraseGer,
TextX - [Tense,Temp],
TextX - [Tense,Temp,Adv,CAdv],
IdiomGer,
StructuralGer,
TenseGer,
Expand Down
2 changes: 1 addition & 1 deletion src/german/MarkupGer.gf
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ lin
MarkupCN m cn = cn ** {s = \\a,n,c => appMark m (cn.s ! a ! n ! c)} ; --- other fields e.g ext intact
MarkupNP m np = np ** {s = \\b,c => appMark m (np.s ! b ! c)} ;
MarkupAP m ap = ap ** {s = \\a => appMark m (ap.s ! a)} ;
MarkupAdv m adv = {s = appMark m adv.s} ;
MarkupAdv m adv = adv ** {s = appMark m adv.s} ;
MarkupS m s = {s = \\o => appMark m (s.s ! o)} ;
MarkupUtt m utt = {s = appMark m utt.s} ;
MarkupPhr m phr = {s = appMark m phr.s} ;
Expand Down
3 changes: 2 additions & 1 deletion src/german/NamesGer.gf
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,8 @@ lin InLN ln = {
a = agrgP3 ln.g ln.n ;
w = WLight ;
rc, ext = []
}
} ;
cp,rc = []
} ;

-- AdjLN : AP -> LN -> LN ;
Expand Down
4 changes: 2 additions & 2 deletions src/german/NumeralGer.gf
Original file line number Diff line number Diff line change
Expand Up @@ -82,8 +82,8 @@ oper
IIDig d i =
let isPld : Bool = case d.n of {Sg => False ; _ => True} ;
b : Bool = case i.isDig of {True => isPld ; _ => notB i.tail1to19} ;
i' : Digits = case b of {True => IDig (mkDig (i.s ! invNum ++ BIND ++ "s")) ;
_ => i }
i' : Digits = lin Digits (case b of {True => IDig (mkDig (i.s ! invNum ++ BIND ++ "s")) ;
_ => i})
in {s = table {NCard af => d.s ! invNum ++ BIND ++ i.s ! NCard af ;
NOrd af => d.s ! invNum ++ BIND ++ i'.s ! NOrd af} ;
n = Pl ;
Expand Down
17 changes: 13 additions & 4 deletions src/german/ParadigmsGer.gf
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,10 @@ mkN : overload {

mkAdv : Str -> Adv ; -- adverbs have just one form anyway

mkCAdv : overload {
mkCAdv : Str -> Str -> CAdv ; -- comparative adverb (with positive degree)
mkCAdv : Str -> Str -> Degree -> CAdv -- comparative adverb with degree
} ;

--2 Prepositions

Expand All @@ -234,9 +238,7 @@ mkN : overload {
mkPrep : Str -> Case -> Prep ; -- e.g. "durch" + accusative
mkPrep : Case -> Str -> Prep ; -- postposition
mkPrep : Str -> Case -> Str -> Prep ; -- both sides
-- for prepositions glued with DefArt in singular
-- e.g. "auf" "auf den" "auf die" "aufs" + accusative
mkPrep : Str -> Str -> Str -> Str -> Case -> Prep ;
mkPrep : Str -> Str -> Str -> Str -> Case -> Prep ; -- prep contracted with defArtSg, e.g. "auf" "auf den" "auf die" "aufs" + accusative
mkPrep : Case -> Prep ; -- convert case to preposition
} ;

Expand Down Expand Up @@ -575,7 +577,14 @@ mkV2 : overload {

mkA2 = \a,p -> a ** {c2 = p ; lock_A2 = <>} ;

mkAdv s = {s = s ; lock_Adv = <>} ;
mkAdv s = {s = s ; cp,rc = [] ; lock_Adv = <>} ;

mkCAdv = overload {
mkCAdv : Str -> Str -> CAdv =
\s1,s2 -> {s = s1 ; p = s2 ; deg = Posit ; lock_CAdv = <>} ;
mkCAdv : Str -> Str -> Degree -> CAdv =
\s1,s2,d -> {s = s1 ; p = s2 ; deg = d ; lock_CAdv = <>}
} ;

mkPrep = overload {
mkPrep : Str -> Case -> Prep = \s,c ->
Expand Down
25 changes: 13 additions & 12 deletions src/german/StructuralGer.gf
Original file line number Diff line number Diff line change
Expand Up @@ -37,17 +37,17 @@ concrete StructuralGer of Structural = CatGer **
s,sp = \\_,g,c => "jed" + detEnding ! (gennum g Sg) ! c ;
n = Sg ; a = Weak ; isDef = False ; hasDefArt = False} ;
everything_NP = nameNounPhrase Neutr {s = caselist "alles" "alles" "allem" "alles"} ;
everywhere_Adv = ss "überall" ;
everywhere_Adv = P.mkAdv "überall" ;
few_Det = {
s,sp = \\_,g,c => "wenig" + adjEnding ! (gennum g Pl) ! c ;
n = Pl ; a = Strong ; isDef = False ; hasDefArt = False} ;
---- first_Ord = {s = (regA "erst").s ! Posit} ;
for_Prep = mkPrep "für" P.accusative ;
from_Prep = mkPrep "aus" P.dative ;
he_Pron = mkPronPers "er" "ihn" "ihm" "seiner" "sein" Masc Sg P3 ;
here7to_Adv = ss ["hierher"] ;
here7from_Adv = ss ["hieraus"] ;
here_Adv = ss "hier" ;
here7to_Adv = P.mkAdv "hierher" ;
here7from_Adv = P.mkAdv "hieraus" ;
here_Adv = P.mkAdv "hier" ;
how_IAdv = ss "wie" ;
how8much_IAdv = ss "wieviel" ;
how8many_IDet = {s = \\g,c => "wie viel" + detEnding ! (gennum g Pl) ! c ; n = Pl} ;
Expand All @@ -56,11 +56,11 @@ concrete StructuralGer of Structural = CatGer **
i_Pron = mkPronPers "ich" "mich" "mir" "meiner" "mein" Masc Sg P1 ;
in_Prep = P.inDat_Prep ;
it_Pron = mkPronPers "es" "es" "ihm" "seiner" "sein" Neutr Sg P3 ;
less_CAdv = X.mkCAdv "weniger" "als" ;
less_CAdv = P.mkCAdv "weniger" "als" ;
many_Det = {
s,sp = \\_,g,c => "viel" + adjEnding ! (gennum g Pl) ! c ;
n = Pl ; a = Strong ; isDef = False ; hasDefArt = False} ;
more_CAdv = X.mkCAdv "mehr" "als" ;
more_CAdv = P.mkCAdv "" "als" Compar ;
-- most_Predet = {s = appAdj (regA "meist") ; c = noCase ; a = PAgNone} ;
most_Predet = { -- HL 5/2022
s = \\n,g,c => let gn = R.gennum g n ;
Expand Down Expand Up @@ -89,7 +89,7 @@ concrete StructuralGer of Structural = CatGer **
part_Prep = P.von_Prep ; -- obsolete, better use PartNP cn np
please_Voc = ss "bitte" ;
possess_Prep = P.von_Prep ; -- obsolete, better use PossNP cn np
quite_Adv = ss "ziemlich" ;
quite_Adv = P.mkAdv "ziemlich" ;
she_Pron = mkPronPers "sie" "sie" "ihr" "ihrer" "ihr" Fem Sg P3 ;
so_AdA = ss "so" ;
somebody_NP = nameNounPhrase Masc {s = caselist "jemand" "jemanden" "jemandem" "jemands"} ;
Expand All @@ -102,13 +102,13 @@ concrete StructuralGer of Structural = CatGer **
n = Sg ; a = Mixed ; isDef = False ; hasDefArt = False
} ;
something_NP = nameNounPhrase Neutr {s = \\_ => "etwas"} ;
somewhere_Adv = ss "irgendwo" ;
somewhere_Adv = P.mkAdv "irgendwo" ;
that_Quant = let jener : GenNum => Case => Str = \\gn,c => "jen" + detEnding ! gn ! c
in {s = \\_ => jener ; sp = jener ; a = Weak ; isDefArt,delCardOne = False} ;
---b that_NP = nameNounPhrase Neutr {s = caselist "das" "das" "dem" "dessen"} ; ----
there_Adv = ss "da" ; --- no variants in the rgl | ss "dort" ;
there7to_Adv = ss "dahin" ;
there7from_Adv = ss ["daher"] ;
there_Adv = P.mkAdv "da" ; --- no variants in the rgl | ss "dort" ;
there7to_Adv = P.mkAdv "dahin" ;
there7from_Adv = P.mkAdv "daher" ;
therefore_PConj = ss "deshalb" ;
---b these_NP = {s = caselist "diese" "diese" "diesen" "dieser" ; a = agrP3 Pl} ;

Expand Down Expand Up @@ -162,7 +162,7 @@ concrete StructuralGer of Structural = CatGer **
at_most_AdN = ss "höchstens" ;
except_Prep = mkPrep "außer" P.dative ;

as_CAdv = X.mkCAdv "ebenso" "wie" ;
as_CAdv = P.mkCAdv "ebenso" "wie" ;
have_V2 = P.dirV2 IrregGer.haben_V ;
that_Subj = ss "dass" ;

Expand All @@ -178,4 +178,5 @@ oper

-- (detLikeAdj b n str).s = \\g,c => str + adjEnding ! (gennum g n) ! c
-- (detUnLikeAdj b n str).s = \\g,c => str + detEnding ! (gennum g n) ! c

}
2 changes: 1 addition & 1 deletion src/german/VerbGer.gf
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ concrete VerbGer of Verb = CatGer ** open Prelude, ResGer, Coordination in {
ext = cn.adv ++ cn.ext
} ;

AdvVP vp adv = insertAdv adv.s vp ;
AdvVP vp adv = insertAdv (adv.s ++ adv.cp ++ adv.rc) vp ;
ExtAdvVP vp adv = insertAdv (embedInCommas adv.s) vp ;

AdVVP adv vp = insertAdv adv.s vp ; -- not AdV 27/5/2012: nicht immer
Expand Down
5 changes: 5 additions & 0 deletions tests/german/TestLexiconEng.gf
Original file line number Diff line number Diff line change
Expand Up @@ -66,4 +66,9 @@ lin
neugierig_auf_A2 = mkA2 (regA "curious") (mkPrep "about") ;
treu_A2 = mkA2 (compoundA (mkA "faithful")) (mkPrep "to") ;
stolz_A2 = mkA2 (mkA "proud" "prouder") (mkPrep "of") ;

-- Adverbs

anders_CAdv = mkCAdv "other" "than" Posit ; -- (nicht) anders bewertet als

}
Loading

0 comments on commit 6e52edd

Please sign in to comment.