1
0
forked from GitHub/gf-rgl

updated Spa and Swe Extend

This commit is contained in:
Aarne Ranta
2017-08-23 22:08:24 +03:00
parent 6c6141befd
commit 2313f6ee40
9 changed files with 259 additions and 29 deletions

View File

@@ -1,3 +1,8 @@
module Main where
import Data.List
import Data.Ord (comparing)
main = docExtend main = docExtend
docExtend = do docExtend = do
@@ -22,13 +27,15 @@ docExtend = do
--- mapM print fundefs --- mapM print fundefs
-- read the functor exclusion lists for each language -- read the functor exclusion lists for each language
let langs = [("Eng","english"),("Dut","dutch"),("Spa","spanish")] --,("Swe","swedish")] let langs = [("Eng","english"),("Dut","dutch"),("Spa","spanish"),("Swe","swedish")]
funss <- mapM getExclusions langs funss <- mapM getExclusions langs
mapM_ print funss --- mapM_ print funss
let langfuns = zip (map fst langs) funss let langfuns = zip (map fst langs) funss
let funlangs = [(fu,[lang | (lang,fs) <- langfuns, elem fu fs]) | fu:_ <- funs] let funlangs = [(fu,[lang | (lang,fs) <- langfuns, elem fu fs]) | fu:_ <- funs]
let fundeflangs = [[fu,ty,co,de,unwords ls] | fu:ty:co:de:_ <- fundefs, (f,ls) <- funlangs, f==fu] let fundeflangs = [[fu,ty,co,de,unwords ls] | fu:ty:co:de:_ <- fundefs, (f,ls) <- funlangs, f==fu]
mapM print fundeflangs --- mapM print fundeflangs
writeFile "GF-RGL-Extend.html" $ printHTML $ sortBy (comparing (\z -> (last (words (z !! 1)), z!!0))) fundeflangs
putStrLn "wrote file GF-RGL-Extend.html"
-- exclusion format: -- exclusion format:
-- concrete ExtendEng of Extend = -- concrete ExtendEng of Extend =
@@ -43,3 +50,16 @@ getExclusions (lan,language) = do
[] -> [] [] -> []
_:es -> map (filter (/=',')) $ concat $ takeWhile (/= ["]"]) es _:es -> map (filter (/=',')) $ concat $ takeWhile (/= ["]"]) es
return excls return excls
printHTML fs = unlines $
"<html>" :
"<body>" :
"<table>" :
map prRow fs ++ [
"</table>",
"</body>",
"</html>"
]
where
prRow ss = concat $ "<tr>" : ["<td>" ++ s ++ "</td>" | s <- ss] ++ ["</tr>"]

View File

@@ -25,7 +25,7 @@ abstract Extend = Cat ** {
GenModNP : Num -> NP -> CN -> NP ; -- this man's car(s) GenModNP : Num -> NP -> CN -> NP ; -- this man's car(s)
GenModIP : Num -> IP -> CN -> IP ; -- whose car(s) GenModIP : Num -> IP -> CN -> IP ; -- whose car(s)
CompBareCN : CN -> Comp ; -- (est) professeur CompBareCN : CN -> Comp ; -- (is) teacher
StrandQuestSlash : IP -> ClSlash -> QCl ; -- whom does John live with StrandQuestSlash : IP -> ClSlash -> QCl ; -- whom does John live with
StrandRelSlash : RP -> ClSlash -> RCl ; -- that he lives in StrandRelSlash : RP -> ClSlash -> RCl ; -- that he lives in
@@ -68,7 +68,7 @@ abstract Extend = Cat ** {
ComplVPI2 : VPI2 -> NP -> VPI ; -- to love and hate that person ComplVPI2 : VPI2 -> NP -> VPI ; -- to love and hate that person
fun fun
ProDrop : Pron -> Pron ; -- unstressed subject pronoun becomes []: "(io) sono stanco" ProDrop : Pron -> Pron ; -- unstressed subject pronoun becomes empty: "am tired"
ICompAP : AP -> IComp ; -- "how old" ICompAP : AP -> IComp ; -- "how old"
IAdvAdv : Adv -> IAdv ; -- "how often" IAdvAdv : Adv -> IAdv ; -- "how often"
@@ -192,18 +192,20 @@ abstract Extend = Cat ** {
-- Romance -- Romance
DetNPFem : Det -> NP ; DetNPFem : Det -> NP ;
iFem_Pron : Pron ; -- je (suis vieille) iFem_Pron : Pron ; -- I (Fem)
youFem_Pron : Pron ; -- tu (es vieille) youFem_Pron : Pron ; -- you (Fem)
weFem_Pron : Pron ; -- nous (sommes vieilles) weFem_Pron : Pron ; -- we (Fem)
youPlFem_Pron : Pron ; -- vous (êtes vieilles) youPlFem_Pron : Pron ; -- you plural (Fem)
theyFem_Pron : Pron ; -- elles (sont vieilles) theyFem_Pron : Pron ; -- they (Fem)
youPolFem_Pron : Pron ; -- vous (êtes vieille) youPolFem_Pron : Pron ; -- you polite (Fem)
youPolPl_Pron : Pron ; -- you polite plural (Masc)
youPolPlFem_Pron : Pron ; -- you polite plural (Fem)
-- German -- German
UttAccNP : NP -> Utt ; -- him (accusative) UttAccNP : NP -> Utt ; -- him (accusative)
UttDatNP : NP -> Utt ; -- him (dative) UttDatNP : NP -> Utt ; -- him (dative)
UttAccIP : NP -> Utt ; -- whom (accusative) UttAccIP : IP -> Utt ; -- whom (accusative)
UttDatIP : NP -> Utt ; -- whom (dative) UttDatIP : IP -> Utt ; -- whom (dative)
} }

View File

@@ -19,7 +19,7 @@ lin
GenRP = variants {} ; -- Num -> CN -> RP ; -- whose car GenRP = variants {} ; -- Num -> CN -> RP ; -- whose car
GenModNP num np cn = DetCN (DetQuant DefArt num) (AdvCN cn (PrepNP possess_Prep np)) ; -- this man's car(s) ; DEFAULT the car of this man GenModNP num np cn = DetCN (DetQuant DefArt num) (AdvCN cn (PrepNP possess_Prep np)) ; -- this man's car(s) ; DEFAULT the car of this man
GenModIP = variants {} ; -- Num -> IP -> CN -> IP ; -- whose car(s) GenModIP = variants {} ; -- Num -> IP -> CN -> IP ; -- whose car(s)
CompBareCN cn = CompCN cn ; -- (est) professeur ; DEFAULT is a teacher CompBareCN cn = CompCN cn ; -- (is) teacher ; DEFAULT is a teacher
StrandQuestSlash = QuestSlash ; -- whom does John live with ; DEFAULT with whom does John live StrandQuestSlash = QuestSlash ; -- whom does John live with ; DEFAULT with whom does John live
StrandRelSlash = RelSlash ; -- that he lives in ; DEFAULT in which he lives StrandRelSlash = RelSlash ; -- that he lives in ; DEFAULT in which he lives
EmptyRelSlash = RelSlash IdRP ; -- he lives in ; DEFAULT in which he lives EmptyRelSlash = RelSlash IdRP ; -- he lives in ; DEFAULT in which he lives
@@ -35,7 +35,7 @@ lin
MkVPI2 = variants {} ; -- : Ant -> Pol -> VPSlash -> VPI2 ; -- to have loved MkVPI2 = variants {} ; -- : Ant -> Pol -> VPSlash -> VPI2 ; -- to have loved
ConjVPI2 = variants {} ; -- : Conj -> [VPI2] -> VPI2 ; -- to love and have hated ConjVPI2 = variants {} ; -- : Conj -> [VPI2] -> VPI2 ; -- to love and have hated
ComplVPI2 = variants {} ; -- : VPI2 -> NP -> VPI ; -- to love and hate that person ComplVPI2 = variants {} ; -- : VPI2 -> NP -> VPI ; -- to love and hate that person
ProDrop pro = pro ; -- am tired ; DEFAULT I am tired ProDrop pro = pro ; -- am tired ; DEFAULT I am tired (no pro drop)
ICompAP = variants {} ; -- AP -> IComp ; -- "how old" ICompAP = variants {} ; -- AP -> IComp ; -- "how old"
IAdvAdv = variants {} ; -- Adv -> IAdv ; -- "how often" IAdvAdv = variants {} ; -- Adv -> IAdv ; -- "how often"
CompIQuant iquant = CompIP (IdetIP (IdetQuant iquant NumSg)) ; -- which (is it) [agreement to NP] ; DEFAULT which [no agreement] CompIQuant iquant = CompIP (IdetIP (IdetQuant iquant NumSg)) ; -- which (is it) [agreement to NP] ; DEFAULT which [no agreement]
@@ -90,12 +90,14 @@ lin
DetNPFem = DetNP ; DetNPFem = DetNP ;
iFem_Pron = i_Pron ; iFem_Pron = i_Pron ; -- DEFAULT I (masc)
youFem_Pron = youSg_Pron ; youFem_Pron = youSg_Pron ; -- DEFAULT you (masc)
weFem_Pron = we_Pron ; weFem_Pron = we_Pron ; -- DEFAULT we (masc)
youPlFem_Pron = youPl_Pron ; youPlFem_Pron = youPl_Pron ; -- DEFAULT you plural (masc)
theyFem_Pron = they_Pron ; theyFem_Pron = they_Pron ; -- DEFAULT they (masc)
youPolFem_Pron = youPol_Pron ; youPolFem_Pron = youPol_Pron ; -- DEFAULT you polite (masc)
youPolPl_Pron = youPl_Pron ; -- DEFAULT you plural (masc)
youPolPlFem_Pron = youPl_Pron ; -- DEFAULT you plural (masc)
UttAccNP = UttNP ; -- him (accusative) ; DEFAULT he UttAccNP = UttNP ; -- him (accusative) ; DEFAULT he
UttDatNP np = UttAccNP (lin NP np) ; -- him(dative) ; DEFAULT he UttDatNP np = UttAccNP (lin NP np) ; -- him(dative) ; DEFAULT he
UttAccIP = UttIP ; -- whom (accusative) ; DEFAULT who UttAccIP = UttIP ; -- whom (accusative) ; DEFAULT who

View File

@@ -3,5 +3,6 @@
concrete AllSpa of AllSpaAbs = concrete AllSpa of AllSpaAbs =
LangSpa, LangSpa,
IrregSpa, IrregSpa,
ExtraSpa ExtendSpa
---- ExtraSpa
** {} ; ** {} ;

View File

@@ -1,5 +1,6 @@
abstract AllSpaAbs = abstract AllSpaAbs =
Lang, Lang,
IrregSpaAbs, IrregSpaAbs,
ExtraSpaAbs Extend
---- ExtraSpaAbs
** {} ; ** {} ;

View File

@@ -1,16 +1,70 @@
--# -path=alltenses:../common:../abstract --# -path=alltenses:../common:../abstract
concrete ExtendSpa of Extend = concrete ExtendSpa of Extend =
CatSpa ** ExtendFunctor CatSpa ** ExtendFunctor -
-- - [] -- put the names of your own definitions here [
iFem_Pron, youFem_Pron, weFem_Pron, youPlFem_Pron, theyFem_Pron, youPolFem_Pron, youPolPl_Pron, youPolPlFem_Pron,
ProDrop
] -- put the names of your own definitions here
with with
(Grammar = GrammarSpa) ** (Grammar = GrammarSpa) **
open open
GrammarSpa, GrammarSpa,
ResSpa, ResSpa,
MorphoSpa,
Coordination, Coordination,
Prelude, Prelude,
ParadigmsSpa in { ParadigmsSpa in {
-- put your own definitions here -- put your own definitions here
lin
iFem_Pron = mkPronoun
"yo" "me" "me" "mí"
"mi" "mi" "mis" "mis"
Fem Sg P1 ;
theyFem_Pron = mkPronoun
"ellas" "las" "les" "ellas"
"su" "su" "sus" "sus"
Fem Pl P3 ;
weFem_Pron = mkPronoun
"nosotras" "nos" "nos" "nosotras"
"nuestro" "nuestra" "nuestros" "nuestras"
Fem Pl P1 ;
youFem_Pron = mkPronoun
"tú" "te" "te" "ti"
"tu" "tu" "tus" "tus"
Fem Sg P2 ;
youPlFem_Pron = mkPronoun
"vosotras" "os" "os" "vosotras"
"vuestro" "vuestra" "vuestros" "vuestras"
Fem Pl P2 ;
youPolFem_Pron = mkPronoun
"usted" "la" "le" "usted"
"su" "su" "sus" "sus"
Fem Sg P3 ;
youPolPl_Pron = mkPronoun
"ustedes" "los" "les" "usted"
"su" "su" "sus" "sus"
Masc Pl P3 ;
youPolPlFem_Pron = mkPronoun
"ustedes" "las" "les" "usted"
"su" "su" "sus" "sus"
Fem Pl P3 ;
ProDrop p = {
s = table {
Nom => let pn = p.s ! Nom in {c1 = pn.c1 ; c2 = pn.c2 ; comp = [] ; ton = pn.ton} ;
c => p.s ! c
} ;
a = p.a ;
poss = p.poss ;
hasClit = p.hasClit ;
isPol = p.isPol ;
isNeg = False
} ;
} }

View File

@@ -3,5 +3,6 @@
concrete AllSwe of AllSweAbs = concrete AllSwe of AllSweAbs =
LangSwe - [PassV2], LangSwe - [PassV2],
IrregSwe, IrregSwe,
ExtraSwe ---- ExtraSwe
ExtendSwe
** {} ; ** {} ;

View File

@@ -1,5 +1,6 @@
abstract AllSweAbs = abstract AllSweAbs =
Lang - [PassV2] , Lang - [PassV2] ,
IrregSweAbs, IrregSweAbs,
ExtraSweAbs ---- ExtraSweAbs
Extend
** {} ; ** {} ;

148
src/swedish/ExtendSwe.gf Normal file
View File

@@ -0,0 +1,148 @@
--# -path=.:../scandinavian:../abstract:../common:prelude
concrete ExtendSwe of Extend = CatSwe **
ExtendFunctor -
[
GenNP, ComplBareVS, CompBareCN,
StrandRelSlash, EmptyRelSlash, StrandQuestSlash,
MkVPI, BaseVPI, ConsVPI, ConjVPI, ComplVPIVV,
MkVPS, BaseVPS, ConsVPS, ConjVPS, PredVPS,
ICompAP,
RNP, RNPList, ReflRNP, ReflPron, ReflPoss, PredetRNP, ConjRNP,
Base_rr_RNP, Base_nr_RNP, Base_rn_RNP, Cons_rr_RNP, Cons_nr_RNP
]
with (Grammar = GrammarSwe)
**
open CommonScand, ResSwe, ParamX, VerbSwe, Prelude, DiffSwe, StructuralSwe, MorphoSwe,
NounSwe, Coordination, AdjectiveSwe, SentenceSwe, AdverbSwe, RelativeSwe, (P = ParadigmsSwe) in {
flags coding=utf8 ;
lin
GenNP np = {
s,sp = \\n,_,_,g => np.s ! NPPoss (gennum (ngen2gen g) n) Nom ;
det = DDef Indef
} ;
ComplBareVS v s = insertObj (\\_ => s.s ! Sub) (predV v) ;
CompBareCN cn = {s = \\a => case a.n of {
Sg => cn.s ! Sg ! DIndef ! Nom ;
Pl => cn.s ! Pl ! DIndef ! Nom
}
} ;
StrandRelSlash rp slash = {
s = \\t,a,p,ag,_ =>
rp.s ! ag.g ! ag.n ! RNom ++ slash.s ! t ! a ! p ! Sub ++ slash.n3 ! ag ++ slash.c2.s ;
c = NPAcc
} ;
EmptyRelSlash slash = {
s = \\t,a,p,ag,_ =>
slash.s ! t ! a ! p ! Sub ++ slash.c2.s ;
c = NPAcc
} ;
StrandQuestSlash ip slash = {
s = \\t,a,p =>
let
cls = slash.s ! t ! a ! p ;
who = ip.s ! accusative ;
agr = agrP3 ip.g ip.n ;
in table {
QDir => who ++ cls ! Inv ++ slash.n3 ! agr ++ slash.c2.s ;
QIndir => who ++ cls ! Sub ++ slash.n3 ! agr ++ slash.c2.s
}
} ;
lincat
VPI = {s : VPIForm => Agr => Str} ;
[VPI] = {s1,s2 : VPIForm => Agr => Str} ;
lin
BaseVPI = twoTable2 VPIForm Agr ;
ConsVPI = consrTable2 VPIForm Agr comma ;
MkVPI vp = {
s = \\v,a => infVP vp a ---- no sup
} ;
ConjVPI = conjunctDistrTable2 VPIForm Agr ;
ComplVPIVV vv vpi = insertObj (\\a => vv.c2.s ++ vpi.s ! VPIInf ! a) (predV vv) ;
lincat
VPS = {s : Order => Agr => Str} ;
[VPS] = {s1,s2 : Order => Agr => Str} ;
lin
BaseVPS = twoTable2 Order Agr ;
ConsVPS = consrTable2 Order Agr comma ;
PredVPS np vpi =
let
subj = np.s ! nominative ;
agr = np.a ;
in {
s = \\o =>
let verb = vpi.s ! o ! agr
in case o of {
Main => subj ++ verb ;
Inv => verb ++ subj ; ---- älskar henne och sover jag
Sub => subj ++ verb
}
} ;
MkVPS t p vp = {
s = \\o,a =>
let
verb = vp.s ! Act ! VPFinite t.t t.a ;
neg = verb.a1 ! p.p ! a ;
compl = vp.n2 ! a ++ vp.a2 ++ vp.ext ;
pron = vp.n1 ! a
in t.s ++ p.s ++ case o of {
Main => verb.fin ++ neg.p1 ++ verb.inf ++ pron ++ neg.p2 ++ compl ;
Inv => verb.fin ++ neg.p1 ++ verb.inf ++ pron ++ neg.p2 ++ compl ; ----
Sub => neg.p1 ++ neg.p2 ++ verb.fin ++ verb.inf ++ pron ++ compl
}
} ;
ConjVPS = conjunctDistrTable2 Order Agr ;
ICompAP ap = {s = \\a => hur_IAdv.s ++ ap.s ! a} ;
lincat
RNP = {s : Agr => Str ; isPron : Bool} ; ---- inherent Agr needed: han färgar sitt hår vitt. But also depends on subject
RNPList = {s1,s2 : Agr => Str} ;
lin
ReflRNP vps rnp =
insertObjPron
(andB (notB vps.c2.hasPrep) rnp.isPron)
rnp.s
(insertObj (\\a => vps.c2.s ++ vps.n3 ! a) vps) ;
ReflPron = {s = \\a => reflPron a ; isPron = True} ; ---- agr ??
ReflPoss num cn = {
s = \\a => possPron a.n a.p num.n (ngen2gen cn.g) ++ num.s ! cn.g ++ cn.s ! num.n ! DDef Indef ! Nom ;
isPron = False
} ;
PredetRNP predet rnp = {
s = \\a => predet.s ! Utr ! Pl ++ predet.p ++ rnp.s ! a ; ---- agr needed here as well
---- s = \\a => predet.s ! np.a.g ! np.a.n ++ predet.p ++ np.s ! a ;
---- a = case pred.a of {PAg n => agrP3 np.a.g n ; _ => np.a} ;
isPron = False
} ;
ConjRNP conj rpns = conjunctDistrTable Agr conj rpns ** {isPron = False} ;
Base_rr_RNP x y = twoTable Agr x y ;
Base_nr_RNP x y = twoTable Agr {s = \\a => x.s ! NPAcc} y ;
Base_rn_RNP x y = twoTable Agr x {s = \\a => y.s ! NPAcc} ;
Cons_rr_RNP x xs = consrTable Agr comma x xs ;
Cons_nr_RNP x xs = consrTable Agr comma {s = \\a => x.s ! NPAcc} xs ;
}