summaryrefslogtreecommitdiff
path: root/next-lib/src/scandinavian/ResScand.gf
diff options
context:
space:
mode:
Diffstat (limited to 'next-lib/src/scandinavian/ResScand.gf')
-rw-r--r--next-lib/src/scandinavian/ResScand.gf75
1 files changed, 75 insertions, 0 deletions
diff --git a/next-lib/src/scandinavian/ResScand.gf b/next-lib/src/scandinavian/ResScand.gf
new file mode 100644
index 000000000..bcd1c7497
--- /dev/null
+++ b/next-lib/src/scandinavian/ResScand.gf
@@ -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
+
+
+}