From 8567d4df553f19e2b312f7ed095f23a535b3d2f4 Mon Sep 17 00:00:00 2001 From: aarne Date: Wed, 4 Dec 2013 10:03:02 +0000 Subject: [PATCH] =?UTF-8?q?started=20implementing=20Swedish=20construction?= =?UTF-8?q?=20grammar=20from=20Spr=C3=A5kbanken?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/src/scandinavian/NounScand.gf | 2 +- lib/src/swedish/Konstruktikon.gf | 74 +++++++++++++++++++++++++++++ lib/src/swedish/KonstruktikonSwe.gf | 58 ++++++++++++++++++++++ 3 files changed, 133 insertions(+), 1 deletion(-) create mode 100644 lib/src/swedish/Konstruktikon.gf create mode 100644 lib/src/swedish/KonstruktikonSwe.gf diff --git a/lib/src/scandinavian/NounScand.gf b/lib/src/scandinavian/NounScand.gf index 19700419f..d6d1c9237 100644 --- a/lib/src/scandinavian/NounScand.gf +++ b/lib/src/scandinavian/NounScand.gf @@ -78,7 +78,7 @@ incomplete concrete NounScand of Noun = g = neutrum ; ---- m = True ; ---- is this needed for other than Art? in { - s = \\c => det.sp ! m ! g ; + s = \\c => det.sp ! m ! g ; ---- case of det! a = agrP3 (ngen2gen g) det.n } ; diff --git a/lib/src/swedish/Konstruktikon.gf b/lib/src/swedish/Konstruktikon.gf new file mode 100644 index 000000000..9fb9f3763 --- /dev/null +++ b/lib/src/swedish/Konstruktikon.gf @@ -0,0 +1,74 @@ +-- AR 4/12/2013 from http://spraakbanken.gu.se/swe/resurs/konstruktikon/utvecklingsversion + +abstract Konstruktikon = Lang ** { + + +fun + reflexiv_resultativVP : V -> AP -> VP ; -- jag dricker mig smal + indirekt_kausativ_bortVP : V -> NP -> VP ; -- jag äter bort min huvudverk + verba_pa_fortsVP : V -> VP ; -- jag jobbar på + adjektiv_som_nom_abstraktNP : A -> NP ; -- det materiella --- should be AP but case is not available in AFormPos + adjektiv_som_nom_anaforiskNP : NPAgr -> A -> NP ; -- den blåa ; det röda ---- should be AP + adjektiv_som_nom_folkNP : A -> NP ; -- den gamla ---- should be AP +-- samordningXP : Conj -> [XP] -> XP ; -- mjölk, havregryn och gröt -- exists as ConjXP for XP = NP, AP, VP, S, Adv, CN +-- disj_sam_korrXP : [XP] -> XP ; -- varken gas, vätska eller fast material -- special case of Conj + +-- ellips_samordningXP ---- TODO : + -- en klänning med skärp och en 0 utan 0 + -- en röd 0 och en grön stol + -- Alf sitter i soffan och Barbro 0 i stolen + -- humrarna var beställda och borden 0 dukade + -- hon började gilla Simon och han 0 henne + +-- ellips_komplementXP ---- TODO + -- det är förbjudet att både köpa 0 och sälja droger + +-- ellips_fragmentXP ---- TODO + -- han somnade om, men bara en halvtimma + +-- snarare_hellre_an_samordnXO ---- TODO + -- förvara plånboken i framfickan hellre än bakfickan + +-- exocentrisk_adj_smnN : N -> A ; -- tjockbottnad ---- should perhaps be an oper + +-- jämförelseAP + -- lika bra som -- CAdvAP + -- bättre än -- ComparA + +-- jämförelse_likhet + -- inte ... så bra som + -- lika mycket som + +-- jämförelse_olikhet + -- högre än + + + saa_gradAP : AP -> S -> AP ; -- så allvarligt skadad att han inte kan höras av polis + saa_gradAdv : Adv -> S -> Adv ; -- så mycket att jag till slut sa upp skiten + +-- grad_mod_attribut +-- superlativ + + unikhetQuant : Quant ; -- den enda (varelse) + + + + + + + + + +-- auxiliaries +cat + NPAgr ; -- needed in adjektiv_som_nom.anaforiskNP + NPGender ; +fun + UtrNPGender, NeutrNPGender : NPGender ; + MkNPAgr : NPGender -> Num -> NPAgr ; + + DetNPGender : NPGender -> Det -> NP ; -- a generalization of DetNP + + + +} diff --git a/lib/src/swedish/KonstruktikonSwe.gf b/lib/src/swedish/KonstruktikonSwe.gf new file mode 100644 index 000000000..23f3cb993 --- /dev/null +++ b/lib/src/swedish/KonstruktikonSwe.gf @@ -0,0 +1,58 @@ + +concrete KonstruktikonSwe of Konstruktikon = LangSwe ** + open + SyntaxSwe, + (P = ParadigmsSwe), + Prelude, + CommonScand, ResSwe + in { + +lin + reflexiv_resultativVP v ap = + insertObj (\\a => reflPron a ++ ap.s ! agrAdjNP a DIndef) (predV v) ; + indirekt_kausativ_bortVP v np = + insertObj (\\a => "bort" ++ np.s ! accusative) (predV v) ; + verba_pa_fortsVP v = + mkVP (mkVP (lin V v)) (P.mkAdv "på") ; + adjektiv_som_nom_abstraktNP ap = { + s = \\c => ap.s ! (AF (APosit (Weak Sg)) (caseNP c)) ; + a = agrP3 Neutr Sg + } ; + adjektiv_som_nom_anaforiskNP npa ap = { + s = \\c => artDef (gennum npa.g npa.n) ++ npa.s ++ ap.s ! (AF (APosit (Weak npa.n)) (caseNP c)) ; + a = agrP3 npa.g npa.n + } ; + adjektiv_som_nom_folkNP ap = { + s = \\c => artDef (gennum Utr Pl) ++ ap.s ! (AF (APosit (Weak Pl)) (caseNP c)) ; + a = agrP3 Utr Pl + } ; + + saa_gradAP ap s = { + s = \\a => "så" ++ ap.s ! a ++ (mkSC (lin S s)).s ; + isPre = False ---- + } ; + saa_gradAdv adv s = { + s = "så" ++ adv.s ++ (mkSC (lin S s)).s ; + } ; + + unikhetQuant = { + s,sp = \\n,bm,bn,g => artDef (gennum (ngen2gen g) n) ++ "enda" ; + det = DDef Def + } ; + + + +lincat + NPAgr = {s : Str ; g : Gender ; n : Number} ; + NPGender = {s : Str ; g : Gender} ; +lin + UtrNPGender = {s = [] ; g = Utr} ; + NeutrNPGender = {s = [] ; g = Neutr} ; + MkNPAgr npg nu = {s = npg.s ++ nu.s ! npg.g ; g = npg.g ; n = nu.n} ; + + DetNPGender npg det = { + s = \\c => npg.s ++ det.sp ! True ! npg.g ; ---- case of det! + a = agrP3 npg.g det.n + } ; + +}