mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-05-04 16:52:50 -06:00
fixed decodeUTF8 for pgf; removed old resources from darcs
This commit is contained in:
44
lib/resource/scandinavian/AdjectiveScand.gf
Normal file
44
lib/resource/scandinavian/AdjectiveScand.gf
Normal file
@@ -0,0 +1,44 @@
|
||||
incomplete concrete AdjectiveScand of Adjective =
|
||||
CatScand ** open CommonScand, ResScand, Prelude in {
|
||||
|
||||
lin
|
||||
|
||||
PositA a = {
|
||||
s = \\ap => a.s ! AF (APosit ap) Nom ;
|
||||
isPre = True
|
||||
} ;
|
||||
ComparA a np = {
|
||||
s = \\ap => case a.isComp of {
|
||||
True => compMore ++ a.s ! AF (APosit ap) Nom ;
|
||||
_ => a.s ! AF ACompar Nom
|
||||
}
|
||||
++ conjThan ++ np.s ! nominative ;
|
||||
isPre = False
|
||||
} ;
|
||||
|
||||
-- $SuperlA$ belongs to determiner syntax in $Noun$.
|
||||
|
||||
ComplA2 a np = {
|
||||
s = \\ap => a.s ! AF (APosit ap) Nom ++ a.c2.s ++ np.s ! accusative ;
|
||||
isPre = False
|
||||
} ;
|
||||
|
||||
ReflA2 a = {
|
||||
s = \\ap => a.s ! AF (APosit ap) Nom ++ a.c2.s ++
|
||||
reflPron (agrP3 utrum Sg) ; ----
|
||||
isPre = False
|
||||
} ;
|
||||
|
||||
SentAP ap sc = {
|
||||
s = \\a => ap.s ! a ++ sc.s ;
|
||||
isPre = False
|
||||
} ;
|
||||
|
||||
AdAP ada ap = {
|
||||
s = \\a => ada.s ++ ap.s ! a ;
|
||||
isPre = ap.isPre
|
||||
} ;
|
||||
|
||||
UseA2 a = a ;
|
||||
|
||||
}
|
||||
27
lib/resource/scandinavian/AdverbScand.gf
Normal file
27
lib/resource/scandinavian/AdverbScand.gf
Normal file
@@ -0,0 +1,27 @@
|
||||
incomplete concrete AdverbScand of Adverb = CatScand ** open CommonScand, ResScand, Prelude in {
|
||||
|
||||
lin
|
||||
PositAdvAdj a = {
|
||||
s = a.s ! adverbForm
|
||||
} ;
|
||||
ComparAdvAdj cadv a np = {
|
||||
s = cadv.s ++ a.s ! adverbForm ++ conjThan ++ np.s ! nominative
|
||||
} ;
|
||||
ComparAdvAdjS cadv a s = {
|
||||
s = cadv.s ++ a.s ! adverbForm ++ conjThan ++ s.s ! Sub
|
||||
} ;
|
||||
|
||||
PrepNP prep np = {s = prep.s ++ np.s ! accusative} ;
|
||||
|
||||
AdAdv = cc2 ;
|
||||
|
||||
SubjS subj s = {
|
||||
s = subj.s ++ s.s ! Sub
|
||||
} ;
|
||||
|
||||
AdnCAdv cadv = {s = cadv.s ++ conjThan} ;
|
||||
|
||||
oper
|
||||
adverbForm : AForm = AF (APosit (Strong SgNeutr)) Nom ;
|
||||
|
||||
}
|
||||
106
lib/resource/scandinavian/CatScand.gf
Normal file
106
lib/resource/scandinavian/CatScand.gf
Normal file
@@ -0,0 +1,106 @@
|
||||
incomplete concrete CatScand of Cat =
|
||||
CommonX ** open ResScand, Prelude, CommonScand, (R = ParamX) in {
|
||||
|
||||
flags optimize=all_subs ;
|
||||
|
||||
lincat
|
||||
|
||||
-- Tensed/Untensed
|
||||
|
||||
S = {s : Order => Str} ;
|
||||
QS = {s : QForm => Str} ;
|
||||
RS = {s : Agr => Str ; c : NPForm} ;
|
||||
SSlash = {s : Order => Str ; n3 : Agr => Str ; c2 : Complement} ;
|
||||
|
||||
-- Sentence
|
||||
|
||||
Cl = {s : R.Tense => Anteriority => Polarity => Order => Str} ;
|
||||
ClSlash = {
|
||||
s : R.Tense => Anteriority => Polarity => Order => Str ;
|
||||
n3 : Agr => Str ;
|
||||
c2 : Complement
|
||||
} ;
|
||||
Imp = {s : Polarity => Number => Str} ;
|
||||
|
||||
-- Question
|
||||
|
||||
QCl = {s : R.Tense => Anteriority => Polarity => QForm => Str} ;
|
||||
IP = {s : NPForm => Str ; gn : GenNum} ;
|
||||
IComp = {s : AFormPos => Str} ;
|
||||
IDet = {s : Gender => Str ; n : Number ; det : DetSpecies} ;
|
||||
IQuant = {s : Number => Gender => Str ; det : DetSpecies} ;
|
||||
|
||||
-- Relative; the case $c$ is for "det" clefts.
|
||||
|
||||
RCl = {s : R.Tense => Anteriority => Polarity => Agr => Str ; c : NPForm} ;
|
||||
RP = {s : GenNum => RCase => Str ; a : RAgr} ;
|
||||
|
||||
-- Verb
|
||||
|
||||
VP = {
|
||||
s : VPForm => {
|
||||
fin : Str ; -- V1 har ---s1
|
||||
inf : Str -- V2 sagt ---s4
|
||||
} ;
|
||||
a1 : Polarity => Str ; -- A1 inte ---s3
|
||||
n2 : Agr => Str ; -- N2 dig ---s5
|
||||
a2 : Str ; -- A2 idag ---s6
|
||||
ext : Str ; -- S-Ext att hon går ---s7
|
||||
en2,ea2,eext : Bool -- indicate if the field exists
|
||||
} ;
|
||||
VPSlash = CommonScand.VP ** {
|
||||
n3 : Agr => Str ; -- object-control complement
|
||||
c2 : Complement
|
||||
} ;
|
||||
Comp = {s : AFormPos => Str} ;
|
||||
|
||||
|
||||
-- Adjective
|
||||
|
||||
AP = {s : AFormPos => Str ; isPre : Bool} ;
|
||||
|
||||
-- Noun
|
||||
|
||||
-- The fields $isMod$ and $isDet$, and the boolean parameter of
|
||||
-- determiners, are a hack (the simples possible we found) that
|
||||
-- permits treating definite articles "huset - de fem husen - det gamla huset"
|
||||
-- as $Quant$.
|
||||
|
||||
CN = {s : Number => DetSpecies => Case => Str ; g : Gender ; isMod : Bool} ;
|
||||
NP,Pron = {s : NPForm => Str ; a : Agr} ;
|
||||
Det = {s : Bool => Gender => Str ; n : Number ; det : DetSpecies} ;
|
||||
Quant = {s : Number => Bool => Gender => Str ; det : DetSpecies} ;
|
||||
Art = {s : Number => Bool => Bool => Gender => Str ; det : DetSpecies} ;
|
||||
Predet = {s : GenNum => Str} ;
|
||||
Num = {s : Gender => Str ; isDet : Bool ; n : Number} ;
|
||||
Card = {s : Gender => Str ; n : Number} ;
|
||||
Ord = {s : Str} ;
|
||||
|
||||
-- Numeral
|
||||
|
||||
Numeral = {s : CardOrd => Str ; n : Number} ;
|
||||
Digits = {s : CardOrd => Str ; n : Number} ;
|
||||
|
||||
-- Structural
|
||||
|
||||
Conj = {s1,s2 : Str ; n : Number} ;
|
||||
Subj = {s : Str} ;
|
||||
Prep = {s : Str} ;
|
||||
|
||||
-- Open lexical classes, e.g. Lexicon
|
||||
|
||||
V, VS, VQ, VA = Verb ;
|
||||
V2, VV, V2Q, V2S, V2A = Verb ** {c2 : Complement} ;
|
||||
V3, V2V = Verb ** {c2,c3 : Complement} ;
|
||||
|
||||
A = Adjective ** {isComp : Bool} ;
|
||||
-- {s : AForm => Str} ;
|
||||
A2 = Adjective ** {isComp : Bool ; c2 : Complement} ;
|
||||
|
||||
N = Noun ;
|
||||
-- {s : Number => Species => Case => Str ; g : Gender} ;
|
||||
N2 = Noun ** {c2 : Complement} ;
|
||||
N3 = Noun ** {c2,c3 : Complement} ;
|
||||
PN = {s : Case => Str ; g : Gender} ;
|
||||
|
||||
}
|
||||
310
lib/resource/scandinavian/CommonScand.gf
Normal file
310
lib/resource/scandinavian/CommonScand.gf
Normal file
@@ -0,0 +1,310 @@
|
||||
--1 Auxiliary operations common for Scandinavian languages.
|
||||
--
|
||||
-- This module contains operations that are shared by the Scandinavian
|
||||
-- languages. The complete set of auxiliary operations needed to
|
||||
-- implement [Test Test.html] is defined in [ResScandinavian ResScandinavian.html],
|
||||
-- which depends on [DiffScandinavian DiffScandinavian.html].
|
||||
|
||||
resource CommonScand = ParamX ** open Prelude in {
|
||||
|
||||
flags optimize=all ;
|
||||
|
||||
param
|
||||
Species = Indef | Def ;
|
||||
Case = Nom | Gen ;
|
||||
Voice = Act | Pass ;
|
||||
|
||||
Order = Main | Inv | Sub ;
|
||||
|
||||
DetSpecies = DIndef | DDef Species ;
|
||||
|
||||
GenNum = SgUtr | SgNeutr | Plg ;
|
||||
|
||||
AForm = AF AFormGrad Case ;
|
||||
|
||||
AFormGrad =
|
||||
APosit AFormPos
|
||||
| ACompar
|
||||
| ASuperl AFormSup ;
|
||||
|
||||
-- The $Number$ in $Weak$ only matters in "lilla"/"små".
|
||||
|
||||
AFormPos = Strong GenNum | Weak Number ;
|
||||
AFormSup = SupStrong | SupWeak ;
|
||||
|
||||
VForm =
|
||||
VF VFin
|
||||
| VI VInf ;
|
||||
|
||||
VFin =
|
||||
VPres Voice
|
||||
| VPret Voice --# notpresent
|
||||
| VImper Voice
|
||||
;
|
||||
|
||||
VInf =
|
||||
VInfin Voice
|
||||
| VSupin Voice --# notpresent
|
||||
| VPtPret AFormPos Case
|
||||
;
|
||||
|
||||
VPForm =
|
||||
VPFinite Tense Anteriority
|
||||
| VPImperat
|
||||
| VPInfinit Anteriority ;
|
||||
|
||||
VType = VAct | VPass | VRefl ;
|
||||
|
||||
NPForm = NPNom | NPAcc | NPPoss GenNum ;
|
||||
--- AdjPronForm = APron GenNum Case ;
|
||||
--- AuxVerbForm = AuxInf | AuxPres | AuxPret | AuxSup ;
|
||||
|
||||
RCase = RNom | RGen | RPrep Bool ;
|
||||
|
||||
RAgr = RNoAg | RAg {gn : GenNum ; p : Person} ;
|
||||
|
||||
oper
|
||||
Complement : Type = {s : Str ; hasPrep : Bool} ;
|
||||
|
||||
Agr : PType = {gn : GenNum ; p : Person} ;
|
||||
|
||||
nominative : NPForm = NPNom ;
|
||||
accusative : NPForm = NPAcc ;
|
||||
|
||||
caseNP : NPForm -> Case = \np -> case np of {
|
||||
NPPoss _ => Gen ;
|
||||
_ => Nom
|
||||
} ;
|
||||
|
||||
specDet : DetSpecies -> Species = \d -> case d of {
|
||||
DDef Def => Def ;
|
||||
_ => Indef
|
||||
} ;
|
||||
|
||||
mkComplement : Str -> Complement = \s -> {
|
||||
s = s ;
|
||||
hasPrep = case s of {
|
||||
"" => False ;
|
||||
_ => True
|
||||
}
|
||||
} ;
|
||||
-- Used in $Noun.AdjCN$.
|
||||
|
||||
----- agrAdj : GenNum -> DetSpecies -> AFormPos = \gn,d -> Strong gn ; --- debug
|
||||
agrAdj : GenNum -> DetSpecies -> AFormPos = \gn,d ->
|
||||
case <<gn,d> : GenNum * DetSpecies> of {
|
||||
<_, DIndef> => Strong gn ;
|
||||
<Plg,DDef _> => Weak Pl ;
|
||||
_ => Weak Sg
|
||||
} ;
|
||||
|
||||
-- Used in $DiffScand.predV$.
|
||||
|
||||
vFin : Tense -> Voice -> VForm = \t,v -> case t of {
|
||||
Pres => VF (VPres v) ;
|
||||
Past => VF (VPret v) ; --# notpresent
|
||||
_ => VI (VInfin v) --- not to be used?
|
||||
} ;
|
||||
|
||||
-- Used in $ConjunctionScand$.
|
||||
|
||||
conjGenNum : (_,_ : GenNum) -> GenNum = \g,h -> case <g,h> of {
|
||||
<SgUtr,SgUtr> => SgUtr ;
|
||||
<Plg, _> => Plg ;
|
||||
<_, Plg> => Plg ;
|
||||
_ => SgNeutr
|
||||
} ;
|
||||
|
||||
conjAgr : (_,_ : Agr) -> Agr = \a,b -> {
|
||||
gn = conjGenNum a.gn b.gn ;
|
||||
p = conjPerson a.p b.p
|
||||
} ;
|
||||
|
||||
---
|
||||
|
||||
-- For $Lex$.
|
||||
|
||||
-- For each lexical category, here are the worst-case constructors.
|
||||
--
|
||||
-- But $mkNoun$ is fully defined only for each language, since
|
||||
-- $Gender$ varies.
|
||||
|
||||
nounForms : (x1,_,_,x4 : Str) -> (Number => Species => Case => Str) =
|
||||
\man,mannen,men,mennen -> \\n,d,c => case <n,d> of {
|
||||
<Sg,Indef> => mkCase c man ;
|
||||
<Sg,Def> => mkCase c mannen ;
|
||||
<Pl,Indef> => mkCase c men ;
|
||||
<Pl,Def> => mkCase c mennen
|
||||
} ;
|
||||
|
||||
Adjective : Type = {s : AForm => Str} ;
|
||||
|
||||
mkAdjective : (x1,_,_,_,_,_,x7 : Str) -> {s : AForm => Str} =
|
||||
\liten, litet, lilla, sma, mindre, minst, minsta -> {
|
||||
s = table {
|
||||
AF (APosit a) c => mkCase c (mkAdjPos a liten litet lilla sma) ;
|
||||
AF ACompar c => mkCase c mindre ;
|
||||
AF (ASuperl SupStrong) c => mkCase c minst ;
|
||||
AF (ASuperl SupWeak) c => mkCase c minsta
|
||||
}
|
||||
} ;
|
||||
|
||||
mkVerb : (x1,_,_,_,_,_,_,x8 : Str) -> {s : VForm => Str ; vtype : VType} =
|
||||
\finna,finner,finn,fann,funnit,funnen,funnet,funna -> {
|
||||
s = table {
|
||||
VF (VPres Act) => finner ;
|
||||
VF (VPres Pass) => mkVoice Pass finn ;
|
||||
VF (VPret v) => mkVoice v fann ; --# notpresent
|
||||
VF (VImper v) => mkVoice v finn ;
|
||||
VI (VInfin v) => mkVoice v finna ;
|
||||
VI (VSupin v) => mkVoice v funnit ; --# notpresent
|
||||
VI (VPtPret a c)=> mkCase c (mkAdjPos a funnen funnet funna funna)
|
||||
} ;
|
||||
vtype = VAct
|
||||
} ;
|
||||
|
||||
-- These are useful auxiliaries.
|
||||
|
||||
mkCase : Case -> Str -> Str = \c,f -> case c of {
|
||||
Nom => f ;
|
||||
Gen => f + case last f of {
|
||||
"s" | "x" => [] ;
|
||||
_ => "s"
|
||||
}
|
||||
} ;
|
||||
|
||||
mkAdjPos : AFormPos -> (s1,_,_,s4 : Str) -> Str =
|
||||
\a, liten, litet, lilla, sma ->
|
||||
case a of {
|
||||
Strong gn => case gn of {
|
||||
SgUtr => liten ;
|
||||
SgNeutr => litet ;
|
||||
Plg => sma
|
||||
} ;
|
||||
Weak Sg => lilla ;
|
||||
Weak Pl => sma
|
||||
} ;
|
||||
|
||||
mkVoice : Voice -> Str -> Str = \v,s -> case v of {
|
||||
Act => s ;
|
||||
Pass => s + case last s of {
|
||||
"s" => "es" ;
|
||||
_ => "s"
|
||||
}
|
||||
} ;
|
||||
|
||||
|
||||
-- For $Noun$.
|
||||
|
||||
artDef : GenNum -> Str = \gn -> gennumForms "den" "det" "de" ! gn ;
|
||||
|
||||
mkNP : (x1,_,_,_,x5 : Str) -> GenNum -> Person ->
|
||||
{s : NPForm => Str ; a : Agr} = \du,dig,din,ditt,dina,gn,p -> {
|
||||
s = table {
|
||||
NPNom => du ;
|
||||
NPAcc => dig ;
|
||||
NPPoss g => gennumForms din ditt dina ! g
|
||||
} ;
|
||||
a = {
|
||||
gn = gn ;
|
||||
p = p
|
||||
}
|
||||
} ;
|
||||
|
||||
gennumForms : (x1,x2,x3 : Str) -> GenNum => Str = \den,det,de ->
|
||||
table {
|
||||
SgUtr => den ;
|
||||
SgNeutr => det ;
|
||||
_ => de
|
||||
} ;
|
||||
|
||||
regNP : Str -> Str -> GenNum -> {s : NPForm => Str ; a : Agr} =
|
||||
\det,dess,gn ->
|
||||
mkNP det det dess dess dess gn P3 ;
|
||||
|
||||
|
||||
-- For $Verb$.
|
||||
|
||||
VP = {
|
||||
s : VPForm => {
|
||||
fin : Str ; -- V1 har ---s1
|
||||
inf : Str -- V2 sagt ---s4
|
||||
} ;
|
||||
a1 : Polarity => Str ; -- A1 inte ---s3
|
||||
n2 : Agr => Str ; -- N2 dig ---s5
|
||||
a2 : Str ; -- A2 idag ---s6
|
||||
ext : Str ; -- S-Ext att hon går ---s7
|
||||
--- ea1,ev2, --- these depend on params of v and a1
|
||||
en2,ea2,eext : Bool -- indicate if the field exists
|
||||
} ;
|
||||
|
||||
|
||||
insertObj : (Agr => Str) -> VP -> VP = \obj,vp -> {
|
||||
s = vp.s ;
|
||||
a1 = vp.a1 ;
|
||||
n2 = \\a => obj ! a ++ vp.n2 ! a ;
|
||||
a2 = vp.a2 ;
|
||||
ext = vp.ext ;
|
||||
en2 = True ;
|
||||
ea2 = vp.ea2 ;
|
||||
eext = vp.eext
|
||||
} ;
|
||||
|
||||
insertObjPost : (Agr => Str) -> VP -> VP = \obj,vp -> {
|
||||
s = vp.s ;
|
||||
a1 = vp.a1 ;
|
||||
n2 = \\a => vp.n2 ! a ++ obj ! a ;
|
||||
a2 = vp.a2 ;
|
||||
ext = vp.ext ;
|
||||
en2 = True ;
|
||||
ea2 = vp.ea2 ;
|
||||
eext = vp.eext
|
||||
} ;
|
||||
|
||||
insertAdv : Str -> VP -> VP = \adv,vp -> {
|
||||
s = vp.s ;
|
||||
a1 = vp.a1 ;
|
||||
n2 = vp.n2 ;
|
||||
a2 = vp.a2 ++ adv ;
|
||||
ext = vp.ext ;
|
||||
en2 = vp.en2 ;
|
||||
ea2 = True ;
|
||||
eext = vp.eext
|
||||
} ;
|
||||
|
||||
insertAdV : Str -> VP -> VP = \adv,vp -> {
|
||||
s = vp.s ;
|
||||
a1 = \\b => vp.a1 ! b ++ adv ;
|
||||
n2 = vp.n2 ;
|
||||
a2 = vp.a2 ;
|
||||
ext = vp.ext ;
|
||||
en2 = vp.en2 ;
|
||||
ea2 = vp.ea2 ;
|
||||
eext = vp.eext
|
||||
} ;
|
||||
|
||||
infVP : VP -> Agr -> Str = \vp,a ->
|
||||
vp.a1 ! Pos ++ (vp.s ! VPInfinit Simul).inf ++ vp.n2 ! a ++ vp.a2 ++ vp.ext ; --- a1
|
||||
|
||||
|
||||
-- For $Sentence$.
|
||||
|
||||
Clause : Type = {
|
||||
s : Tense => Anteriority => Polarity => Order => Str
|
||||
} ;
|
||||
|
||||
mkClause : Str -> Agr -> VP -> Clause = \subj,agr,vp -> {
|
||||
s = \\t,a,b,o =>
|
||||
let
|
||||
verb = vp.s ! VPFinite t a ;
|
||||
neg = vp.a1 ! b ;
|
||||
compl = vp.n2 ! agr ++ vp.a2 ++ vp.ext
|
||||
in
|
||||
case o of {
|
||||
Main => subj ++ verb.fin ++ neg ++ verb.inf ++ compl ;
|
||||
Inv => verb.fin ++ subj ++ neg ++ verb.inf ++ compl ;
|
||||
Sub => subj ++ neg ++ verb.fin ++ verb.inf ++ compl
|
||||
}
|
||||
} ;
|
||||
|
||||
}
|
||||
37
lib/resource/scandinavian/ConjunctionScand.gf
Normal file
37
lib/resource/scandinavian/ConjunctionScand.gf
Normal file
@@ -0,0 +1,37 @@
|
||||
incomplete concrete ConjunctionScand of Conjunction =
|
||||
CatScand ** open CommonScand, ResScand, Coordination, Prelude in {
|
||||
|
||||
flags optimize=all_subs ;
|
||||
|
||||
lin
|
||||
|
||||
ConjS conj ss = conjunctDistrTable Order conj ss ;
|
||||
|
||||
ConjAdv conj ss = conjunctDistrSS conj ss ;
|
||||
|
||||
ConjNP conj ss = conjunctDistrTable NPForm conj ss ** {
|
||||
a = {gn = conjGenNum (gennum utrum conj.n) ss.a.gn ; p = ss.a.p}
|
||||
} ;
|
||||
|
||||
ConjAP conj ss = conjunctDistrTable AFormPos conj ss ** {
|
||||
isPre = ss.isPre
|
||||
} ;
|
||||
|
||||
-- These fun's are generated from the list cat's.
|
||||
|
||||
BaseS = twoTable Order ;
|
||||
ConsS = consrTable Order comma ;
|
||||
BaseAdv = twoSS ;
|
||||
ConsAdv = consrSS comma ;
|
||||
BaseNP x y = twoTable NPForm x y ** {a = conjAgr x.a y.a} ;
|
||||
ConsNP xs x = consrTable NPForm comma xs x ** {a = conjAgr xs.a x.a} ;
|
||||
BaseAP x y = twoTable AFormPos x y ** {isPre = andB x.isPre y.isPre} ;
|
||||
ConsAP xs x = consrTable AFormPos comma xs x ** {isPre = andB xs.isPre x.isPre} ;
|
||||
|
||||
lincat
|
||||
[S] = {s1,s2 : Order => Str} ;
|
||||
[Adv] = {s1,s2 : Str} ;
|
||||
[NP] = {s1,s2 : NPForm => Str ; a : Agr} ;
|
||||
[AP] = {s1,s2 : AFormPos => Str ; isPre : Bool} ;
|
||||
|
||||
}
|
||||
63
lib/resource/scandinavian/DiffScand.gf
Normal file
63
lib/resource/scandinavian/DiffScand.gf
Normal file
@@ -0,0 +1,63 @@
|
||||
interface DiffScand = open CommonScand, Prelude in {
|
||||
|
||||
--1 Differences between Scandinavian languages
|
||||
|
||||
-- Norway has three genders, Danish and Swedish have two.
|
||||
|
||||
param
|
||||
Gender ;
|
||||
|
||||
oper
|
||||
neutrum, utrum : Gender ;
|
||||
|
||||
gennum : Gender -> Number -> GenNum ;
|
||||
|
||||
-- This is the form of the noun in "det stora berget"/"det store berg".
|
||||
|
||||
detDef : Species ;
|
||||
|
||||
-- Danish and Norwegian verbs, but not Swedish verbs,
|
||||
-- have two possible compound-tense auxiliaries ("have" or "være").
|
||||
|
||||
Verb : Type ;
|
||||
|
||||
hasAuxBe : Verb -> Bool ;
|
||||
|
||||
-- The rest of the parameters are function words used in the syntax modules.
|
||||
|
||||
conjThat : Str ;
|
||||
conjThan : Str ;
|
||||
compMore : Str ;
|
||||
conjAnd : Str ;
|
||||
infMark : Str ;
|
||||
|
||||
subjIf : Str ;
|
||||
|
||||
artIndef : Gender => Str ;
|
||||
|
||||
verbHave : Verb ;
|
||||
verbBe : Verb ;
|
||||
|
||||
verbBecome : Verb ;
|
||||
|
||||
auxFut : Str ;
|
||||
auxCond : Str ;
|
||||
|
||||
negation : Polarity => Str ;
|
||||
|
||||
-- For determiners; mostly two-valued even in Norwegian.
|
||||
|
||||
genderForms : (x1,x2 : Str) -> Gender => Str ;
|
||||
|
||||
-- The forms of a relative pronoun ("som", "vars", "i vilken").
|
||||
|
||||
relPron : GenNum => RCase => Str ;
|
||||
|
||||
-- Pronoun "sådan" used in $Relative.RelCl$.
|
||||
|
||||
pronSuch : GenNum => Str ;
|
||||
|
||||
reflPron : Agr -> Str ;
|
||||
|
||||
}
|
||||
|
||||
15
lib/resource/scandinavian/ExtEngAbs.gf
Normal file
15
lib/resource/scandinavian/ExtEngAbs.gf
Normal file
@@ -0,0 +1,15 @@
|
||||
abstract ExtEngAbs = Cat ** {
|
||||
|
||||
cat
|
||||
Aux ; -- auxiliary verbs: "can", "must", etc
|
||||
|
||||
-- Notice that $Aux$ cannot form $VP$ with infinitive, imperative, etc.
|
||||
|
||||
fun
|
||||
PredAux : NP -> Aux -> VP -> Cl ;
|
||||
QuestAux : IP -> Aux -> VP -> QCl ;
|
||||
|
||||
can_Aux : Aux ;
|
||||
must_Aux : Aux ;
|
||||
|
||||
}
|
||||
47
lib/resource/scandinavian/ExtraScand.gf
Normal file
47
lib/resource/scandinavian/ExtraScand.gf
Normal file
@@ -0,0 +1,47 @@
|
||||
incomplete concrete ExtraScand of ExtraScandAbs = CatScand **
|
||||
open CommonScand,Coordination,ResScand in {
|
||||
lin
|
||||
GenNP np = {
|
||||
s = \\n,_,g => np.s ! NPPoss (gennum g n) ;
|
||||
det = DDef Indef
|
||||
} ;
|
||||
|
||||
ComplBareVS v s = insertObj (\\_ => s.s ! Sub) (predV v) ;
|
||||
|
||||
StrandRelSlash rp slash = {
|
||||
s = \\t,a,p,ag =>
|
||||
rp.s ! ag.gn ! RNom ++ slash.s ! t ! a ! p ! Sub ++ slash.c2 ;
|
||||
c = NPAcc
|
||||
} ;
|
||||
EmptyRelSlash rp slash = {
|
||||
s = \\t,a,p,ag =>
|
||||
slash.s ! t ! a ! p ! Sub ++ slash.c2 ;
|
||||
c = NPAcc
|
||||
} ;
|
||||
|
||||
StrandQuestSlash ip slash = {
|
||||
s = \\t,a,p =>
|
||||
let
|
||||
cls = slash.s ! t ! a ! p ;
|
||||
who = ip.s ! accusative
|
||||
in table {
|
||||
QDir => who ++ cls ! Inv ++ slash.c2 ;
|
||||
QIndir => who ++ cls ! Sub ++ slash.c2
|
||||
}
|
||||
} ;
|
||||
|
||||
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 ++ vpi.s ! VPIInf ! a) (predV vv) ;
|
||||
|
||||
}
|
||||
3
lib/resource/scandinavian/ExtraScandAbs.gf
Normal file
3
lib/resource/scandinavian/ExtraScandAbs.gf
Normal file
@@ -0,0 +1,3 @@
|
||||
abstract ExtraScandAbs = Extra ** {
|
||||
|
||||
}
|
||||
231
lib/resource/scandinavian/NounScand.gf
Normal file
231
lib/resource/scandinavian/NounScand.gf
Normal file
@@ -0,0 +1,231 @@
|
||||
incomplete concrete NounScand of Noun =
|
||||
CatScand ** open CommonScand, ResScand, Prelude in {
|
||||
|
||||
flags optimize=all_subs ;
|
||||
|
||||
-- The rule defines $Det Quant Num Ord CN$ where $Det$ is empty if
|
||||
-- it is the definite article ($DefSg$ or $DefPl$) and both $Num$ and
|
||||
-- $Ord$ are empty and $CN$ is not adjectivally modified
|
||||
-- ($AdjCN$). Thus we get $huset$ but $de fem husen$, $det gamla huset$.
|
||||
|
||||
lin
|
||||
DetCN det cn =
|
||||
let
|
||||
g = cn.g ;
|
||||
m = cn.isMod ;
|
||||
dd = case <det.det,detDef,m> of {
|
||||
<DDef Def, Indef, True> => DDef Indef ;
|
||||
<d,_,_> => d
|
||||
}
|
||||
in {
|
||||
s = \\c => det.s ! m ! g ++
|
||||
cn.s ! det.n ! dd ! caseNP c ;
|
||||
a = agrP3 g det.n
|
||||
} ;
|
||||
|
||||
UsePN pn = {
|
||||
s = \\c => pn.s ! caseNP c ;
|
||||
a = agrP3 pn.g Sg
|
||||
} ;
|
||||
|
||||
UsePron p = p ;
|
||||
|
||||
PredetNP pred np = {
|
||||
s = \\c => pred.s ! np.a.gn ++ np.s ! c ;
|
||||
a = np.a
|
||||
} ;
|
||||
|
||||
PPartNP np v2 = {
|
||||
s = \\c => np.s ! c ++ v2.s ! (VI (VPtPret (agrAdj np.a.gn DIndef) Nom)) ;
|
||||
a = np.a
|
||||
} ;
|
||||
|
||||
AdvNP np adv = {
|
||||
s = \\c => np.s ! c ++ adv.s ;
|
||||
a = np.a
|
||||
} ;
|
||||
|
||||
DetQuantOrd quant num ord = {
|
||||
s = \\b,g => quant.s ! num.n ! (orB b num.isDet) ! g ++
|
||||
num.s ! g ++ ord.s ;
|
||||
n = num.n ;
|
||||
det = quant.det
|
||||
} ;
|
||||
|
||||
DetQuant quant num = {
|
||||
s = \\b,g => quant.s ! num.n ! (orB b num.isDet) ! g ++
|
||||
num.s ! g ;
|
||||
n = num.n ;
|
||||
det = quant.det
|
||||
} ;
|
||||
|
||||
DetNP det =
|
||||
let
|
||||
g = Neutr ; ----
|
||||
m = True ; ---- is this needed for other than Art?
|
||||
in {
|
||||
s = \\c => det.s ! m ! g ;
|
||||
a = agrP3 g det.n
|
||||
} ;
|
||||
|
||||
DetArtOrd quant num ord = {
|
||||
s = \\b,g => quant.s ! num.n ! b ! num.isDet ! g ++
|
||||
num.s ! g ++ ord.s ;
|
||||
n = num.n ;
|
||||
det = quant.det
|
||||
} ;
|
||||
|
||||
DetArtCard quant num = {
|
||||
s = \\b,g => quant.s ! num.n ! b ! True ! g ++ num.s ! g ;
|
||||
n = num.n ;
|
||||
det = quant.det
|
||||
} ;
|
||||
|
||||
DetArtSg det cn =
|
||||
let
|
||||
g = cn.g ;
|
||||
n = Sg ;
|
||||
m = cn.isMod ;
|
||||
dd = case <det.det,detDef,m> of {
|
||||
<DDef Def, Indef, True> => DDef Indef ;
|
||||
<d,_,_> => d
|
||||
}
|
||||
in {
|
||||
s = \\c => det.s ! n ! cn.isMod ! False ! cn.g ++
|
||||
cn.s ! n ! dd ! caseNP c ;
|
||||
a = agrP3 g n
|
||||
} ;
|
||||
|
||||
DetArtPl det cn =
|
||||
let
|
||||
g = cn.g ;
|
||||
n = Pl ;
|
||||
m = cn.isMod ;
|
||||
dd = case <det.det,detDef,m> of {
|
||||
<DDef Def, Indef, True> => DDef Indef ;
|
||||
<d,_,_> => d
|
||||
}
|
||||
in {
|
||||
s = \\c => det.s ! n ! cn.isMod ! False !cn.g ++
|
||||
cn.s ! n ! dd ! caseNP c ;
|
||||
a = agrP3 g n
|
||||
} ;
|
||||
|
||||
|
||||
PossPron p = {
|
||||
s = \\n,_,g => p.s ! NPPoss (gennum g n) ;
|
||||
det = DDef Indef
|
||||
} ;
|
||||
|
||||
NumCard c = c ** {isDet = True} ;
|
||||
|
||||
NumSg = {s = \\_ => [] ; isDet = False ; n = Sg} ;
|
||||
NumPl = {s = \\_ => [] ; isDet = False ; n = Pl} ;
|
||||
|
||||
NumDigits nu = {s = \\g => nu.s ! NCard g ; n = nu.n} ;
|
||||
OrdDigits nu = {s = nu.s ! NOrd SupWeak} ;
|
||||
|
||||
NumNumeral nu = {s = \\g => nu.s ! NCard g ; n = nu.n} ;
|
||||
OrdNumeral nu = {s = nu.s ! NOrd SupWeak} ;
|
||||
|
||||
AdNum adn num = {s = \\g => adn.s ++ num.s ! g ; isDet = True ; n = num.n} ;
|
||||
|
||||
OrdSuperl a = {
|
||||
s = case a.isComp of {
|
||||
True => "mest" ++ a.s ! AF (APosit (Weak Sg)) Nom ;
|
||||
_ => a.s ! AF (ASuperl SupWeak) Nom
|
||||
} ;
|
||||
isDet = True
|
||||
} ;
|
||||
|
||||
DefArt = {
|
||||
s = \\n,bm,bn,g => if_then_Str (orB bm bn) (artDef (gennum g n)) [] ;
|
||||
det = DDef Def
|
||||
} ;
|
||||
|
||||
IndefArt = {
|
||||
s = table {
|
||||
Sg => \\_,bn,g => if_then_Str bn [] (artIndef ! g) ;
|
||||
Pl => \\_,bn,_ => []
|
||||
} ;
|
||||
det = DIndef
|
||||
} ;
|
||||
|
||||
MassNP cn = {
|
||||
s = \\c => cn.s ! Sg ! DIndef ! caseNP c ;
|
||||
a = agrP3 cn.g Sg
|
||||
} ;
|
||||
|
||||
UseN, UseN2 = \noun -> {
|
||||
s = \\n,d,c => noun.s ! n ! specDet d ! c ;
|
||||
---- part app wo c shows editor bug. AR 8/7/2007
|
||||
g = noun.g ;
|
||||
isMod = False
|
||||
} ;
|
||||
|
||||
Use2N3 f = {
|
||||
s = f.s ;
|
||||
g = f.g ;
|
||||
c2 = f.c2 ;
|
||||
isMod = False
|
||||
} ;
|
||||
|
||||
Use3N3 f = {
|
||||
s = f.s ;
|
||||
g = f.g ;
|
||||
c2 = f.c3 ;
|
||||
isMod = False
|
||||
} ;
|
||||
|
||||
-- The genitive of this $NP$ is not correct: "sonen till mig" (not "migs").
|
||||
|
||||
ComplN2 f x = {
|
||||
s = \\n,d,c => f.s ! n ! specDet d ! Nom ++ f.c2.s ++ x.s ! accusative ;
|
||||
g = f.g ;
|
||||
isMod = False
|
||||
} ;
|
||||
ComplN3 f x = {
|
||||
s = \\n,d,c => f.s ! n ! d ! Nom ++ f.c2.s ++ x.s ! accusative ;
|
||||
g = f.g ;
|
||||
c2 = f.c3 ;
|
||||
isMod = False
|
||||
} ;
|
||||
|
||||
AdjCN ap cn = let g = cn.g in {
|
||||
s = \\n,d,c =>
|
||||
preOrPost ap.isPre
|
||||
(ap.s ! agrAdj (gennum g n) d)
|
||||
(cn.s ! n ! d ! c) ;
|
||||
g = g ;
|
||||
isMod = True
|
||||
} ;
|
||||
|
||||
RelCN cn rs = let g = cn.g in {
|
||||
s = \\n,d,c => cn.s ! n ! d ! c ++ rs.s ! agrP3 g n ;
|
||||
g = g ;
|
||||
isMod = cn.isMod
|
||||
} ;
|
||||
|
||||
RelNP np rs = {
|
||||
s = \\c => np.s ! c ++ "," ++ rs.s ! np.a ;
|
||||
a = np.a ;
|
||||
isMod = np.isMod
|
||||
} ;
|
||||
|
||||
AdvCN cn sc = let g = cn.g in {
|
||||
s = \\n,d,c => cn.s ! n ! d ! c ++ sc.s ;
|
||||
g = g ;
|
||||
isMod = cn.isMod
|
||||
} ;
|
||||
SentCN cn sc = let g = cn.g in {
|
||||
s = \\n,d,c => cn.s ! n ! d ! c ++ sc.s ;
|
||||
g = g ;
|
||||
isMod = cn.isMod
|
||||
} ;
|
||||
ApposCN cn np = let g = cn.g in {
|
||||
s = \\n,d,c => cn.s ! n ! d ! Nom ++ np.s ! NPNom ; --c
|
||||
g = g ;
|
||||
isMod = cn.isMod
|
||||
} ;
|
||||
|
||||
}
|
||||
25
lib/resource/scandinavian/PhraseScand.gf
Normal file
25
lib/resource/scandinavian/PhraseScand.gf
Normal file
@@ -0,0 +1,25 @@
|
||||
incomplete concrete PhraseScand of Phrase =
|
||||
CatScand ** open CommonScand, ResScand, Prelude in {
|
||||
|
||||
lin
|
||||
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
|
||||
|
||||
UttS s = {s = s.s ! Main} ;
|
||||
UttQS qs = {s = qs.s ! QDir} ;
|
||||
UttImpSg pol imp = {s = pol.s ++ imp.s ! pol.p ! Sg} ;
|
||||
UttImpPl pol imp = {s = pol.s ++ imp.s ! pol.p ! Pl} ;
|
||||
UttImpPol pol imp = {s = pol.s ++ imp.s ! pol.p ! Sg} ; --- works for adj but not for refl
|
||||
|
||||
UttIP ip = {s = ip.s ! nominative} ; --- Acc also
|
||||
UttIAdv iadv = iadv ;
|
||||
UttNP np = {s = np.s ! accusative} ;
|
||||
UttVP vp = {s = infMark ++ infVP vp (agrP3 utrum Sg)} ;
|
||||
UttAdv adv = adv ;
|
||||
|
||||
NoPConj = {s = []} ;
|
||||
PConjConj conj = {s = conj.s2} ;
|
||||
|
||||
NoVoc = {s = []} ;
|
||||
VocNP np = {s = "," ++ np.s ! nominative} ;
|
||||
|
||||
}
|
||||
96
lib/resource/scandinavian/QuestionScand.gf
Normal file
96
lib/resource/scandinavian/QuestionScand.gf
Normal file
@@ -0,0 +1,96 @@
|
||||
incomplete concrete QuestionScand of Question =
|
||||
CatScand ** open CommonScand, ResScand in {
|
||||
|
||||
flags optimize=all_subs ;
|
||||
|
||||
lin
|
||||
|
||||
QuestCl cl = {
|
||||
s = \\t,a,p =>
|
||||
let cls = cl.s ! t ! a ! p
|
||||
in table {
|
||||
QDir => cls ! Inv ;
|
||||
QIndir => subjIf ++ cls ! Sub
|
||||
}
|
||||
} ;
|
||||
|
||||
QuestVP qp vp = {
|
||||
s = \\t,a,b,q =>
|
||||
let
|
||||
somo = case q of {
|
||||
QIndir => <"som",Sub> ;
|
||||
_ => <[], Main>
|
||||
} ;
|
||||
cl = mkClause (qp.s ! nominative ++ somo.p1) {gn = qp.gn ; p = P3} vp
|
||||
in
|
||||
cl.s ! t ! a ! b ! somo.p2
|
||||
} ;
|
||||
|
||||
QuestSlash ip slash = {
|
||||
s = \\t,a,p =>
|
||||
let
|
||||
agr = {gn = ip.gn ; p = P3} ;
|
||||
cls : Order => Str = \\o => slash.s ! t ! a ! p ! o ++ slash.n3 ! agr ;
|
||||
who = slash.c2.s ++ ip.s ! accusative --- stranding in ExtScand
|
||||
in table {
|
||||
QDir => who ++ cls ! Inv ;
|
||||
QIndir => who ++ cls ! Sub
|
||||
}
|
||||
} ;
|
||||
|
||||
QuestIAdv iadv cl = {
|
||||
s = \\t,a,p =>
|
||||
let
|
||||
cls = cl.s ! t ! a ! p ;
|
||||
why = iadv.s
|
||||
in table {
|
||||
QDir => why ++ cls ! Inv ;
|
||||
QIndir => why ++ cls ! Sub
|
||||
}
|
||||
} ;
|
||||
|
||||
QuestIComp icomp np = {
|
||||
s = \\t,a,p =>
|
||||
let
|
||||
cls =
|
||||
(mkClause (np.s ! nominative) np.a (predV verbBe)).s ! t ! a ! p ;
|
||||
why = icomp.s ! agrAdj np.a.gn DIndef
|
||||
in table {
|
||||
QDir => why ++ cls ! Inv ;
|
||||
QIndir => why ++ cls ! Sub
|
||||
}
|
||||
} ;
|
||||
|
||||
PrepIP p ip = {
|
||||
s = p.s ++ ip.s ! accusative
|
||||
} ;
|
||||
|
||||
AdvIP ip adv = {
|
||||
s = \\c => ip.s ! c ++ adv.s ;
|
||||
gn = ip.gn
|
||||
} ;
|
||||
|
||||
IdetCN idet cn = let g = cn.g in {
|
||||
s = \\c =>
|
||||
idet.s ! g ++ cn.s ! idet.n ! idet.det ! caseNP c ;
|
||||
gn = gennum g idet.n
|
||||
} ;
|
||||
|
||||
IdetIP idet =
|
||||
let
|
||||
g = Neutr ;
|
||||
in {
|
||||
s = \\c => idet.s ! g ;
|
||||
gn = (agrP3 g idet.n).gn
|
||||
} ;
|
||||
|
||||
IdetQuant idet num = {
|
||||
s = \\g => idet.s ! num.n ! g ++ num.s ! g ;
|
||||
n = num.n ;
|
||||
det = idet.det
|
||||
} ;
|
||||
|
||||
CompIAdv a = {s = \\_ => a.s} ;
|
||||
CompIP ip = {s = \\_ => ip.s ! nominative} ;
|
||||
|
||||
}
|
||||
52
lib/resource/scandinavian/RelativeScand.gf
Normal file
52
lib/resource/scandinavian/RelativeScand.gf
Normal file
@@ -0,0 +1,52 @@
|
||||
incomplete concrete RelativeScand of Relative =
|
||||
CatScand ** open CommonScand, ResScand, Prelude in {
|
||||
|
||||
flags optimize=all_subs ;
|
||||
|
||||
lin
|
||||
|
||||
RelCl cl = {
|
||||
s = \\t,a,p,ag => pronSuch ! ag.gn ++ conjThat ++ cl.s ! t ! a ! p ! Sub ;
|
||||
c = NPAcc
|
||||
} ;
|
||||
|
||||
RelVP rp vp = {
|
||||
s = \\t,ant,b,ag =>
|
||||
let
|
||||
agr = case rp.a of {
|
||||
RNoAg => ag ;
|
||||
RAg a => a
|
||||
} ;
|
||||
cl = mkClause (rp.s ! ag.gn ! RNom) agr vp
|
||||
in
|
||||
cl.s ! t ! ant ! b ! Sub ;
|
||||
c = NPNom
|
||||
} ;
|
||||
|
||||
-- This rule uses pied piping ("huset i vilket hon bor")
|
||||
-- Preposition stranding ("huset som hon bor i")
|
||||
-- and the empty relative ("huset hon bor i") are defined in $ExtraScand$.
|
||||
|
||||
RelSlash rp slash = {
|
||||
s = \\t,a,p,ag =>
|
||||
let
|
||||
agr = case rp.a of {
|
||||
RNoAg => ag ;
|
||||
RAg agg => agg
|
||||
}
|
||||
in
|
||||
slash.c2.s ++ rp.s ! ag.gn ! RPrep slash.c2.hasPrep ++
|
||||
slash.s ! t ! a ! p ! Sub ++ slash.n3 ! agr ;
|
||||
c = NPAcc
|
||||
} ;
|
||||
|
||||
--- The case here could be genitive.
|
||||
|
||||
FunRP p np rp = {
|
||||
s = \\gn,c => np.s ! nominative ++ p.s ++ rp.s ! gn ! RPrep True ;
|
||||
a = RAg np.a
|
||||
} ;
|
||||
|
||||
IdRP = {s = relPron ; a = RNoAg} ;
|
||||
|
||||
}
|
||||
75
lib/resource/scandinavian/ResScand.gf
Normal file
75
lib/resource/scandinavian/ResScand.gf
Normal file
@@ -0,0 +1,75 @@
|
||||
--1 Scandinavian auxiliary operations
|
||||
|
||||
interface ResScand = DiffScand ** open CommonScand, Prelude in {
|
||||
|
||||
--2 Constants uniformly defined in terms of language-dependent constants
|
||||
|
||||
param
|
||||
CardOrd = NCard Gender | NOrd AFormSup ; -- sic! (AFormSup)
|
||||
|
||||
oper
|
||||
agrP3 : Gender -> Number -> Agr = \g,n -> {
|
||||
gn = gennum g n ;
|
||||
p = P3
|
||||
} ;
|
||||
|
||||
Noun = {s : Number => Species => Case => Str ; g : Gender} ;
|
||||
|
||||
-- This function is here because it depends on $verbHave, auxFut, auxCond$.
|
||||
|
||||
predV : Verb -> VP = \verb ->
|
||||
let
|
||||
diath = case verb.vtype of {
|
||||
VPass => Pass ;
|
||||
_ => Act
|
||||
} ;
|
||||
vfin : Tense -> Str = \t -> verb.s ! vFin t diath ;
|
||||
vsup = verb.s ! VI (VSupin diath) ; --# notpresent
|
||||
vinf = verb.s ! VI (VInfin diath) ;
|
||||
|
||||
auxv = case hasAuxBe verb of {
|
||||
True => verbBe.s ;
|
||||
_ => verbHave.s
|
||||
} ;
|
||||
|
||||
har : Tense -> Str = \t -> auxv ! vFin t Act ;
|
||||
ha : Str = auxv ! VI (VInfin Act) ;
|
||||
|
||||
vf : Str -> Str -> {fin,inf : Str} = \fin,inf -> {
|
||||
fin = fin ; inf = inf ++ verb.part
|
||||
} ;
|
||||
|
||||
in {
|
||||
s = table {
|
||||
VPFinite t Simul => case t of {
|
||||
-- Pres | Past => vf (vfin t) [] ; -- the general rule
|
||||
Past => vf (vfin t) [] ; --# notpresent
|
||||
Fut => vf auxFut vinf ; --# notpresent
|
||||
Cond => vf auxCond vinf ; --# notpresent
|
||||
Pres => vf (vfin t) []
|
||||
} ;
|
||||
VPFinite t Anter => case t of { --# notpresent
|
||||
Pres | Past => vf (har t) vsup ; --# notpresent
|
||||
Fut => vf auxFut (ha ++ vsup) ; --# notpresent
|
||||
Cond => vf auxCond (ha ++ vsup) --# notpresent
|
||||
} ; --# notpresent
|
||||
VPImperat => vf (verb.s ! VF (VImper diath)) [] ;
|
||||
VPInfinit Anter => vf [] (ha ++ vsup) ; --# notpresent
|
||||
VPInfinit Simul => vf [] vinf
|
||||
} ;
|
||||
a1 : Polarity => Str = negation ;
|
||||
n2 : Agr => Str = \\a => case verb.vtype of {
|
||||
VRefl => reflPron a ;
|
||||
_ => []
|
||||
} ;
|
||||
a2 : Str = [] ;
|
||||
ext : Str = [] ;
|
||||
en2,ea2,eext : Bool = False -- indicate if the field exists
|
||||
} ;
|
||||
|
||||
-- needed for VP conjunction
|
||||
param
|
||||
VPIForm = VPIInf | VPISup ; ---- sup not yet used
|
||||
|
||||
|
||||
}
|
||||
64
lib/resource/scandinavian/SentenceScand.gf
Normal file
64
lib/resource/scandinavian/SentenceScand.gf
Normal file
@@ -0,0 +1,64 @@
|
||||
incomplete concrete SentenceScand of Sentence =
|
||||
CatScand ** open CommonScand, ResScand, Prelude in {
|
||||
|
||||
flags optimize=all_subs ;
|
||||
|
||||
lin
|
||||
PredVP np vp = mkClause (np.s ! nominative) np.a vp ;
|
||||
|
||||
PredSCVP sc vp = mkClause sc.s (agrP3 neutrum Sg) vp ;
|
||||
|
||||
ImpVP vp = {
|
||||
s = \\pol,n =>
|
||||
let
|
||||
agr = {gn = gennum utrum n ; p = P2} ;
|
||||
verb = vp.s ! VPImperat ;
|
||||
in
|
||||
verb.fin ++ vp.a1 ! pol ++ verb.inf ++ vp.n2 ! agr ++ vp.a2 ++ vp.ext
|
||||
} ;
|
||||
|
||||
SlashVP np vp =
|
||||
mkClause
|
||||
(np.s ! nominative) np.a
|
||||
vp **
|
||||
{n3 = vp.n3 ; c2 = vp.c2} ;
|
||||
|
||||
AdvSlash slash adv = {
|
||||
s = \\t,a,b,o => slash.s ! t ! a ! b ! o ++ adv.s ;
|
||||
n3 = slash.n3 ;
|
||||
c2 = slash.c2
|
||||
} ;
|
||||
|
||||
SlashPrep cl prep = cl ** {n3 = \\_ => [] ; c2 = {s = prep.s ; hasPrep = True}} ;
|
||||
|
||||
SlashVS np vs slash =
|
||||
mkClause
|
||||
(np.s ! nominative) np.a
|
||||
(insertObj (\\_ => conjThat ++ slash.s ! Sub) (predV vs)) **
|
||||
{n3 = slash.n3 ; c2 = slash.c2} ;
|
||||
|
||||
EmbedS s = {s = conjThat ++ s.s ! Sub} ;
|
||||
EmbedQS qs = {s = qs.s ! QIndir} ;
|
||||
EmbedVP vp = {s = infMark ++ infVP vp (agrP3 utrum Sg)} ; --- agr
|
||||
|
||||
UseCl t a p cl = {
|
||||
s = \\o => t.s ++ a.s ++ p.s ++ cl.s ! t.t ! a.a ! p.p ! o
|
||||
} ;
|
||||
UseQCl t a p cl = {
|
||||
s = \\q => t.s ++ a.s ++ p.s ++ cl.s ! t.t ! a.a ! p.p ! q
|
||||
} ;
|
||||
UseRCl t a p cl = {
|
||||
s = \\r => t.s ++ a.s ++ p.s ++ cl.s ! t.t ! a.a ! p.p ! r ;
|
||||
c = cl.c
|
||||
} ;
|
||||
UseSlash t a p cl = {
|
||||
s = \\o => t.s ++ a.s ++ p.s ++ cl.s ! t.t ! a.a ! p.p ! o ;
|
||||
n3 = cl.n3 ;
|
||||
c2 = cl.c2
|
||||
} ;
|
||||
|
||||
AdvS a s = {s = \\o => a.s ++ s.s ! Inv} ;
|
||||
|
||||
RelS s r = {s = \\o => s.s ! o ++ "," ++ r.s ! agrP3 Neutr Sg} ; --- vilket
|
||||
|
||||
}
|
||||
69
lib/resource/scandinavian/VerbScand.gf
Normal file
69
lib/resource/scandinavian/VerbScand.gf
Normal file
@@ -0,0 +1,69 @@
|
||||
incomplete concrete VerbScand of Verb = CatScand ** open CommonScand, ResScand in {
|
||||
|
||||
flags optimize=all_subs ;
|
||||
|
||||
lin
|
||||
UseV = predV ;
|
||||
|
||||
SlashV2a v = predV v ** {n3 = \\_ => [] ; c2 = v.c2} ;
|
||||
|
||||
Slash2V3 v np =
|
||||
insertObj (\\_ => v.c2.s ++ np.s ! accusative) (predV v) **
|
||||
{n3 = \\_ => [] ; c2 = v.c3} ; -- to preserve the order of args
|
||||
Slash3V3 v np = predV v ** {
|
||||
n3 = \\_ => v.c3.s ++ np.s ! accusative ;
|
||||
c2 = v.c2
|
||||
} ;
|
||||
|
||||
ComplVV v vp = insertObj (\\a => v.c2.s ++ infVP vp a) (predV v) ;
|
||||
ComplVS v s = insertObj (\\_ => conjThat ++ s.s ! Sub) (predV v) ;
|
||||
ComplVQ v q = insertObj (\\_ => q.s ! QIndir) (predV v) ;
|
||||
ComplVA v ap = insertObj (\\a => ap.s ! agrAdj a.gn DIndef) (predV v) ;
|
||||
|
||||
SlashV2V v vp = predV v ** {
|
||||
n3 = \\a => v.c3.s ++ infVP vp a ;
|
||||
c2 = v.c2
|
||||
} ;
|
||||
SlashV2S v s = predV v ** {
|
||||
n3 = \\_ => conjThat ++ s.s ! Sub ;
|
||||
c2 = v.c2
|
||||
} ;
|
||||
SlashV2Q v q = predV v ** {
|
||||
n3 = \\_ => q.s ! QIndir ;
|
||||
c2 = v.c2
|
||||
} ;
|
||||
SlashV2A v ap = predV v ** {
|
||||
n3 = \\a => ap.s ! agrAdj a.gn DIndef ;
|
||||
c2 = v.c2
|
||||
} ;
|
||||
|
||||
ComplSlash vp np =
|
||||
insertObj
|
||||
(\\_ => vp.c2.s ++ np.s ! accusative ++ vp.n3 ! np.a) vp ;
|
||||
|
||||
SlashVV v vp =
|
||||
insertObj (\\a => v.c2.s ++ infVP vp a) (predV v) ** {n3 = vp.n3 ; c2 = vp.c2} ;
|
||||
|
||||
SlashV2VNP v np vp =
|
||||
insertObj
|
||||
(\\a => v.c2.s ++ np.s ! accusative ++ v.c3.s ++ infVP vp a) (predV v)
|
||||
** {n3 = vp.n3 ; c2 = v.c2} ;
|
||||
|
||||
UseComp comp = insertObj (\\a => comp.s ! agrAdj a.gn DIndef) (predV verbBe) ;
|
||||
|
||||
CompAP ap = ap ;
|
||||
CompNP np = {s = \\_ => np.s ! accusative} ;
|
||||
CompAdv a = {s = \\_ => a.s} ;
|
||||
|
||||
AdvVP vp adv = insertAdv adv.s vp ;
|
||||
AdVVP adv vp = insertAdV adv.s vp ;
|
||||
|
||||
|
||||
ReflVP vp = insertObj (\\a => vp.c2.s ++ reflPron a ++ vp.n3 ! a) vp ;
|
||||
|
||||
PassV2 v =
|
||||
insertObj
|
||||
(\\a => v.s ! VI (VPtPret (agrAdj a.gn DIndef) Nom))
|
||||
(predV verbBecome) ;
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user