From f24d9c2cad0a438d2b7b8cab407e1a210400815f Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Fri, 24 Apr 2020 17:00:44 +0200 Subject: [PATCH] (Hun) Add possibility to prepose Advs --- src/hungarian/AdverbHun.gf | 3 ++- src/hungarian/CatHun.gf | 4 +++- src/hungarian/ConjunctionHun.gf | 16 ++++++++++++---- src/hungarian/GrammarHun.gf | 4 ++-- src/hungarian/NounHun.gf | 18 +++++++++++++----- src/hungarian/ParadigmsHun.gf | 2 +- src/hungarian/ResHun.gf | 2 ++ src/hungarian/SymbolHun.gf | 6 +++--- 8 files changed, 38 insertions(+), 17 deletions(-) diff --git a/src/hungarian/AdverbHun.gf b/src/hungarian/AdverbHun.gf index c7cbde60..d4643818 100644 --- a/src/hungarian/AdverbHun.gf +++ b/src/hungarian/AdverbHun.gf @@ -12,7 +12,8 @@ lin -- : Prep -> NP -> Adv ; PrepNP prep np = { - s = applyAdp prep np + s = applyAdp prep np ; + isPre = False ; } ; -- Adverbs can be modified by 'adadjectives', just like adjectives. diff --git a/src/hungarian/CatHun.gf b/src/hungarian/CatHun.gf index f900b586..95655490 100644 --- a/src/hungarian/CatHun.gf +++ b/src/hungarian/CatHun.gf @@ -1,4 +1,4 @@ -concrete CatHun of Cat = CommonX ** open ResHun, Prelude in { +concrete CatHun of Cat = CommonX - [Adv] ** open ResHun, Prelude in { flags optimize=all_subs ; @@ -118,6 +118,8 @@ concrete CatHun of Cat = CommonX ** open ResHun, Prelude in { N3 = ResHun.Noun ; PN = ResHun.NounPhrase ; + Adv = {s : Str ; isPre : Bool} ; + linref CN = linCN ; diff --git a/src/hungarian/ConjunctionHun.gf b/src/hungarian/ConjunctionHun.gf index f233d22c..e0d596c2 100644 --- a/src/hungarian/ConjunctionHun.gf +++ b/src/hungarian/ConjunctionHun.gf @@ -3,12 +3,20 @@ concrete ConjunctionHun of Conjunction = -- Adverb and other simple {s : Str} types. lincat - [Adv],[AdV],[IAdv],[S] = {s1,s2 : Str} ; + [AdV],[IAdv],[S] = {s1,s2 : Str} ; lin - BaseAdv, BaseAdV, BaseIAdv, BaseS = twoSS ; - ConsAdv, ConsAdV, ConsIAdv, ConsS = consrSS comma ; - ConjAdv, ConjAdV, ConjIAdv, ConjS = conjunctDistrSS ; + BaseAdV, BaseIAdv, BaseS = twoSS ; + ConsAdV, ConsIAdv, ConsS = consrSS comma ; + ConjAdV, ConjIAdv, ConjS = conjunctDistrSS ; + +lincat + [Adv] = {s1,s2 : Str ; isPre : Bool} ; + +lin + BaseAdv x y = y ** twoSS x y ; + ConsAdv x xs = xs ** consrSS comma x xs ; + ConjAdv co xs = xs ** conjunctDistrSS co xs ; -- Adjectival phrases lincat diff --git a/src/hungarian/GrammarHun.gf b/src/hungarian/GrammarHun.gf index 325a57e9..5122cfb8 100644 --- a/src/hungarian/GrammarHun.gf +++ b/src/hungarian/GrammarHun.gf @@ -9,10 +9,10 @@ concrete GrammarHun of Grammar = RelativeHun, ConjunctionHun, PhraseHun, - TextX, + TextX - [Adv], StructuralHun, IdiomHun, - TenseX + TenseX - [Adv] ** { flags startcat = Phr ; unlexer = text ; lexer = text ; diff --git a/src/hungarian/NounHun.gf b/src/hungarian/NounHun.gf index ac4e7fcd..f870e38a 100644 --- a/src/hungarian/NounHun.gf +++ b/src/hungarian/NounHun.gf @@ -1,4 +1,5 @@ -concrete NounHun of Noun = CatHun ** open ResHun, Prelude, Coordination in { +concrete NounHun of Noun = CatHun ** open + ResHun, Prelude, Coordination in { flags optimize=all_subs ; @@ -40,7 +41,13 @@ concrete NounHun of Noun = CatHun ** open ResHun, Prelude, Coordination in { -- : NP -> Adv -> NP ; -- Paris today AdvNP np adv = np ** { - s = \\c => np.s ! c ++ adv.s ; + s = \\c => case adv.isPre of { + True => adv.s ++ np.s ! c ; + False => np.s ! c ++ adv.s } ; + -- compl = \\nc => case adv.isPre of { + -- True => np.compl ! nc ; + -- False => np.compl ! nc ++ adv.s } ; + } ; -- : NP -> Adv -> NP ; -- boys, such as .. ExtAdvNP np adv = np ** { @@ -202,9 +209,10 @@ concrete NounHun of Noun = CatHun ** open ResHun, Prelude, Coordination in { } ; -- : CN -> Adv -> CN ; - AdvCN cn adv = cn ** { - compl = \\n,c => cn.compl ! n ! c ++ adv.s - } ; + AdvCN cn adv = case adv.isPre of { + True => AdjCN (invarAP adv.s) cn ; + False => cn ** {compl = \\n,c => cn.compl ! n ! c ++ adv.s} + } ; -- Nouns can also be modified by embedded sentences and questions. -- For some nouns this makes little sense, but we leave this for applications diff --git a/src/hungarian/ParadigmsHun.gf b/src/hungarian/ParadigmsHun.gf index 6a6ccd16..fc07c8c2 100644 --- a/src/hungarian/ParadigmsHun.gf +++ b/src/hungarian/ParadigmsHun.gf @@ -101,7 +101,7 @@ oper -- lin Subj { } ; mkAdv : Str -> Adv - = \s -> lin Adv {s = s} ; + = \s -> lin Adv {s = s ; isPre=False} ; mkAdV : Str -> AdV = \s -> lin AdV {s = s} ; diff --git a/src/hungarian/ResHun.gf b/src/hungarian/ResHun.gf index ad33f323..c984740c 100644 --- a/src/hungarian/ResHun.gf +++ b/src/hungarian/ResHun.gf @@ -336,6 +336,8 @@ oper in adj + plural } ; + invarAP : Str -> AdjPhrase = \s -> emptyAP ** {s = \\_ => s} ; + -- https://en.wikisource.org/wiki/Simplified_Grammar_of_the_Hungarian_Language/Adjectives comparAdj : Str -> Str = \stem -> case stem of { diff --git a/src/hungarian/SymbolHun.gf b/src/hungarian/SymbolHun.gf index 47f7c990..2d0b3909 100644 --- a/src/hungarian/SymbolHun.gf +++ b/src/hungarian/SymbolHun.gf @@ -24,16 +24,16 @@ oper lin -- : CN -> Int -> NP CNIntNP cn i = NH.MassNP (cn ** { - s = \\n,c => cn.s ! n ! c ++ i.s}) ; + compl = \\n,c => cn.compl ! n ! c ++ i.s}) ; -- : Det -> CN -> [Symb] -> NP ; -- (the) (2) numbers x and y CNSymbNP det cn xs = - let cnSymb : CN = cn ** {s = \\n,c => cn.s ! n ! c ++ xs.s} + let cnSymb : CN = cn ** {compl = \\n,c => cn.compl ! n ! c ++ xs.s} in NH.DetCN det cnSymb ; -- : CN -> Card -> NP ; -- level five ; level 5 CNNumNP cn i = NH.MassNP (cn ** { - s = \\n,c => cn.s ! n ! c ++ i.s ! Indep}) ; + compl = \\n,c => cn.compl ! n ! c ++ i.s ! Indep}) ; -- : Symb -> S ; SymbS sy = sy ;