forked from GitHub/gf-core
Most of Finnish done.
This commit is contained in:
@@ -50,6 +50,11 @@ We have developed one for linguistics
|
||||
- constraint of reversibility (nontrivial math problem)
|
||||
|
||||
|
||||
Writing a grammar of e.g. French clitics should not be a topic
|
||||
on which one can write a paper - it should be easy to render in code
|
||||
the known facts about languages!
|
||||
|
||||
|
||||
|
||||
#NEW
|
||||
|
||||
|
||||
@@ -1,23 +1,26 @@
|
||||
concrete AdjectiveFin of Adjective = CatFin ** open ResFin, Prelude in {
|
||||
|
||||
flags optimize=all_subs ; -- gfc size from 2864336 to 6786
|
||||
|
||||
lin
|
||||
|
||||
PositA a = {
|
||||
s = \\_ => a.s ! AAdj Posit ;
|
||||
isPre = True
|
||||
s = \\_ => a.s ! Posit
|
||||
} ;
|
||||
ComparA a np = {
|
||||
s = \\_ => a.s ! AAdj Compar ++ "than" ++ np.s ! Nom ;
|
||||
isPre = False
|
||||
s = \\isMod,af => case isMod of {
|
||||
True => np.s ! NPCase Part ++ a.s ! Compar ! af ; -- minua isompi
|
||||
_ => a.s ! Compar ! af ++ "kuin" ++ np.s ! NPCase Nom -- isompi kuin minä
|
||||
}
|
||||
} ;
|
||||
|
||||
-- $SuperlA$ belongs to determiner syntax in $Noun$.
|
||||
|
||||
ComplA2 a np = {
|
||||
s = \\_ => a.s ! AAdj Posit ++ a.c2 ++ np.s ! Acc ;
|
||||
isPre = False
|
||||
ComplA2 adj np = {
|
||||
s = \\isMod,af =>
|
||||
preOrPost isMod (appCompl True Pos adj.c2 np) (adj.s ! Posit ! af)
|
||||
} ;
|
||||
|
||||
{-
|
||||
ReflA2 a = {
|
||||
s = \\ag => a.s ! AAdj Posit ++ a.c2 ++ reflPron ! ag ;
|
||||
isPre = False
|
||||
@@ -27,10 +30,9 @@ concrete AdjectiveFin of Adjective = CatFin ** open ResFin, Prelude in {
|
||||
s = \\a => ap.s ! a ++ sc.s ;
|
||||
isPre = False
|
||||
} ;
|
||||
|
||||
-}
|
||||
AdAP ada ap = {
|
||||
s = \\a => ada.s ++ ap.s ! a ;
|
||||
isPre = ap.isPre
|
||||
s = \\b,af => ada.s ++ ap.s ! b ! af
|
||||
} ;
|
||||
|
||||
UseA2 a = a ;
|
||||
|
||||
@@ -30,7 +30,7 @@ concrete CatFin of Cat = TenseX ** open ResFin, Prelude in {
|
||||
-- Relative
|
||||
|
||||
RCl = {s : Tense => Anteriority => Polarity => Agr => Str} ;
|
||||
RP = {s : Number => Case => Str ; a : RAgr} ;
|
||||
RP = {s : Number => NPForm => Str ; a : RAgr} ;
|
||||
|
||||
-- Verb
|
||||
|
||||
@@ -40,6 +40,9 @@ concrete CatFin of Cat = TenseX ** open ResFin, Prelude in {
|
||||
|
||||
-- Adjective
|
||||
|
||||
-- The $Bool$ tells whether usage is modifying (as opposed to
|
||||
-- predicative), e.g. "x on suurempi kuin y" vs. "y:tä suurempi luku".
|
||||
|
||||
AP = {s : Bool => AForm => Str} ;
|
||||
|
||||
-- Noun
|
||||
|
||||
@@ -3,12 +3,12 @@
|
||||
concrete LangFin of Lang =
|
||||
NounFin,
|
||||
VerbFin,
|
||||
-- AdjectiveFin,
|
||||
AdjectiveFin,
|
||||
AdverbFin,
|
||||
-- NumeralFin,
|
||||
NumeralFin,
|
||||
SentenceFin,
|
||||
-- QuestionFin,
|
||||
-- RelativeFin,
|
||||
QuestionFin,
|
||||
RelativeFin,
|
||||
ConjunctionFin,
|
||||
PhraseFin,
|
||||
StructuralFin,
|
||||
|
||||
@@ -1064,44 +1064,6 @@ caseTable : Number -> CommonNoun -> Case => Str = \n,cn ->
|
||||
(juo + "t" + u)
|
||||
(juo + "d" + u + "n") ;
|
||||
|
||||
|
||||
-- For $NumeralsFin$.
|
||||
|
||||
param NumPlace = NumIndep | NumAttr ;
|
||||
|
||||
oper
|
||||
yksiN = nhn (mkSubst "ä" "yksi" "yhde" "yhte" "yhtä" "yhteen" "yksi" "yksi"
|
||||
"yksien" "yksiä" "yksiin") ;
|
||||
kymmenenN = nhn (mkSubst "ä" "kymmenen" "kymmene" "kymmene" "kymmentä"
|
||||
"kymmeneen" "kymmeni" "kymmeni" "kymmenien" "kymmeniä"
|
||||
"kymmeniin") ;
|
||||
sataN = nhn (sLukko "sata") ;
|
||||
|
||||
tuhatN = nhn (mkSubst "a" "tuhat" "tuhanne" "tuhante" "tuhatta" "tuhanteen"
|
||||
"tuhansi" "tuhansi" "tuhansien" "tuhansia" "tuhansiin") ;
|
||||
|
||||
kymmentaN = {s = table {
|
||||
NCase Sg Nom => "kymmentä" ;
|
||||
c => kymmenenN.s ! c
|
||||
}
|
||||
} ;
|
||||
|
||||
sataaN = {s = table {
|
||||
Sg => sataN.s ;
|
||||
Pl => table {
|
||||
NCase Sg Nom => "sataa" ;
|
||||
c => sataN.s ! c
|
||||
}
|
||||
}
|
||||
} ;
|
||||
tuhattaN = {s = table {
|
||||
Sg => tuhatN.s ;
|
||||
Pl => table {
|
||||
NCase Sg Nom => "tuhatta" ;
|
||||
c => tuhatN.s ! c
|
||||
}
|
||||
}
|
||||
} ;
|
||||
} ;
|
||||
|
||||
|
||||
|
||||
@@ -13,8 +13,15 @@ concrete NounFin of Noun = CatFin ** open ResFin, Prelude in {
|
||||
True => Sg ;
|
||||
_ => det.n
|
||||
} ;
|
||||
ncase : Case -> NForm = \c -> case <c,det.isNum,det.isPoss> of {
|
||||
<Nom,True,_> => NCase Sg Part ;
|
||||
ncase : Case -> NForm = \c -> case <n,c,det.isNum,det.isPoss> of {
|
||||
<_, Nom,True,_> => NCase Sg Part ;
|
||||
<_, _, True,False> => NCase Sg c ;
|
||||
<_, Nom,_,True> => NPossNom ;
|
||||
<Sg,Gen,_,True> => NPossNom ;
|
||||
<Pl,Gen,_,True> => NPossGenPl ;
|
||||
<_,Transl,_,True> => NPossTransl n ;
|
||||
<_,Illat,_,True> => NPossIllat n ;
|
||||
|
||||
_ => NCase n c ----
|
||||
}
|
||||
in {
|
||||
@@ -77,41 +84,51 @@ concrete NounFin of Noun = CatFin ** open ResFin, Prelude in {
|
||||
NoNum = {s = \\_,_ => [] ; isNum = False} ;
|
||||
NoOrd = {s = \\_,_ => []} ;
|
||||
|
||||
NumInt n = {s = \\_,_ => n.s ++ "." ; isNum = True} ;
|
||||
NumInt n = {s = \\_,_ => n.s ; isNum = True} ;
|
||||
OrdInt n = {s = \\_,_ => n.s ++ "."} ;
|
||||
|
||||
{-
|
||||
NumNumeral numeral = {s = numeral.s ! NCard} ;
|
||||
OrdNumeral numeral = {s = numeral.s ! NOrd} ;
|
||||
---- NumNumeral numeral = {s = numeral.s ! NCard} ;
|
||||
---- OrdNumeral numeral = {s = numeral.s ! NOrd} ;
|
||||
|
||||
AdNum adn num = {s = adn.s ++ num.s} ;
|
||||
AdNum adn num = {s = \\n,c => adn.s ++ num.s ! n ! c ; isNum = num.isNum} ;
|
||||
|
||||
OrdSuperl a = {s = a.s ! AAdj Superl} ;
|
||||
---- OrdSuperl a = {s = a.s ! AAdj Superl} ;
|
||||
|
||||
DefArt = {s = \\_ => artDef} ;
|
||||
|
||||
IndefArt = {
|
||||
s = table {
|
||||
Sg => artIndef ;
|
||||
Pl => []
|
||||
}
|
||||
DefArt = {
|
||||
s1 = \\_,_ => [] ;
|
||||
s2 = [] ;
|
||||
isNum,isPoss = False
|
||||
} ;
|
||||
|
||||
MassDet = {s = [] ; n = Sg} ;
|
||||
-}
|
||||
IndefArt = {
|
||||
s1 = \\_,_ => [] ; --- Nom is Part in Pl ?
|
||||
s2 = [] ;
|
||||
isNum,isPoss = False
|
||||
} ;
|
||||
|
||||
MassDet = {
|
||||
s1 = \\_ => [] ; --- Nom is Part ?
|
||||
s2 = [] ;
|
||||
isNum,isPoss = False
|
||||
} ;
|
||||
|
||||
UseN n = n ;
|
||||
|
||||
{-
|
||||
UseN2 n = n ;
|
||||
UseN3 n = n ;
|
||||
|
||||
ComplN2 f x = {s = \\n,c => f.s ! n ! Nom ++ f.c2 ++ x.s ! c} ;
|
||||
ComplN3 f x = {s = \\n,c => f.s ! n ! Nom ++ f.c2 ++ x.s ! c ; c2 = f.c3} ;
|
||||
ComplN2 f x = {
|
||||
s = \\nf => appCompl True Pos f.c2 x ++ f.s ! nf
|
||||
} ;
|
||||
ComplN3 f x = {
|
||||
s = \\nf => appCompl True Pos f.c2 x ++ f.s ! nf ;
|
||||
c2 = f.c3
|
||||
} ;
|
||||
|
||||
AdjCN ap cn = {
|
||||
s = \\n,c => preOrPost ap.isPre (ap.s ! agrP3 n) (cn.s ! n ! c)
|
||||
s = \\nf => ap.s ! True ! AN nf ++ cn.s ! nf
|
||||
} ;
|
||||
{-
|
||||
RelCN cn rs = {s = \\n,c => cn.s ! n ! c ++ rs.s ! {n = n ; p = P3}} ;
|
||||
AdvCN cn ad = {s = \\n,c => cn.s ! n ! c ++ ad.s} ;
|
||||
|
||||
|
||||
@@ -1,44 +1,142 @@
|
||||
concrete NumeralFin of Numeral = CatFin ** open ResFin in {
|
||||
concrete NumeralFin of Numeral = CatFin ** open Prelude, ParadigmsFin, MorphoFin in {
|
||||
|
||||
-- Notice: possessive forms are not used. They get wrong, since every
|
||||
-- part is made to agree in them.
|
||||
|
||||
flags optimize = all_subs ;
|
||||
|
||||
lincat
|
||||
Digit = {s : DForm => CardOrd => Str} ;
|
||||
Sub10 = {s : DForm => CardOrd => Str ; n : Number} ;
|
||||
Sub100 = {s : CardOrd => Str ; n : Number} ;
|
||||
Sub1000 = {s : CardOrd => Str ; n : Number} ;
|
||||
Sub1000000 = {s : CardOrd => Str ; n : Number} ;
|
||||
Digit = {s : CardOrd => Str} ;
|
||||
Sub10, Sub100, Sub1000 = {s : NumPlace => CardOrd => Str ; n : Number} ;
|
||||
|
||||
lin num x = x ;
|
||||
lin n2 = let two = mkNum "two" "twelve" "twenty" "second" in
|
||||
{s = \\f,c => case <f,c> of {
|
||||
<teen,NOrd> => "twelfth" ;
|
||||
_ => two.s ! f ! c
|
||||
}
|
||||
} ;
|
||||
lin
|
||||
num x = x ;
|
||||
n2 = co
|
||||
(nhn (mkSubst "a" "kaksi" "kahde" "kahte" "kahta" "kahteen" "kaksi" "kaksi"
|
||||
"kaksien" "kaksia" "kaksiin"))
|
||||
(ordN "a" "kahdes") ; --- toinen
|
||||
n3 = co
|
||||
(nhn (mkSubst "a" "kolme" "kolme" "kolme" "kolmea" "kolmeen" "kolmi" "kolmi"
|
||||
"kolmien" "kolmia" "kolmiin"))
|
||||
(ordN "a" "kolmas") ;
|
||||
n4 = co (regN "neljä") (ordN "ä" "neljäs") ;
|
||||
n5 = co (reg3N "viisi" "viiden" "viisiä") (ordN "ä" "viides") ;
|
||||
n6 = co (reg3N "kuusi" "kuuden" "kuusia") (ordN "a" "kuudes") ;
|
||||
n7 = co
|
||||
(nhn (mkSubst "ä" "seitsemän" "seitsemä" "seitsemä" "seitsemää"
|
||||
"seitsemään" "seitsemi" "seitsemi" "seitsemien" "seitsemiä"
|
||||
"seitsemiin"))
|
||||
(ordN "ä" "seitsemäs") ;
|
||||
n8 = co
|
||||
(nhn (mkSubst "a" "kahdeksan" "kahdeksa" "kahdeksa" "kahdeksaa"
|
||||
"kahdeksaan" "kahdeksi" "kahdeksi" "kahdeksien" "kahdeksia"
|
||||
"kahdeksiin"))
|
||||
(ordN "a" "kahdeksas") ;
|
||||
n9 = co
|
||||
(nhn (mkSubst "ä" "yhdeksän" "yhdeksä" "yhdeksä" "yhdeksää"
|
||||
"yhdeksään" "yhdeksi" "yhdeksi" "yhdeksien" "yhdeksiä" "yhdeksiin"))
|
||||
(ordN "ä" "yhdeksäs") ;
|
||||
|
||||
lin n3 = mkNum "three" "thirteen" "thirty" "third" ;
|
||||
lin n4 = mkNum "four" "fourteen" "forty" "fourth" ;
|
||||
lin n5 = mkNum "five" "fifteen" "fifty" "fifth" ;
|
||||
lin n6 = regNum "six" ;
|
||||
lin n7 = regNum "seven" ;
|
||||
lin n8 = mkNum "eight" "eighteen" "eighty" "eighth" ;
|
||||
lin n9 = regNum "nine" ;
|
||||
pot01 =
|
||||
{s = table {
|
||||
NumAttr => \\_ => [] ;
|
||||
NumIndep => yksiN.s
|
||||
} ;
|
||||
n = Sg
|
||||
} ;
|
||||
pot0 d = {n = Pl ; s = \\_ => d.s} ;
|
||||
pot110 =
|
||||
{s = \\_ => kymmenenN.s ;
|
||||
n = Pl
|
||||
} ;
|
||||
|
||||
pot111 = {n = Pl ; s = \\_,c => yksiN.s ! c ++"toista"} ; ---- yhdes
|
||||
pot1to19 d = {n = Pl ; s = \\_,c => d.s ! c ++"toista"} ;
|
||||
pot0as1 n = n ;
|
||||
|
||||
pot1 d = {n = Pl ; s = \\_,c => d.s ! c ++ kymmentaN.s ! c} ;
|
||||
pot1plus d e = {
|
||||
n = Pl ;
|
||||
s = \\_,c => d.s ! c ++ kymmentaN.s ! c ++ e.s ! NumIndep ! c
|
||||
} ;
|
||||
pot1as2 n = n ;
|
||||
pot2 d = {n = Pl ; s = \\_,c => d.s ! NumAttr ! c ++ sataaN.s ! d.n ! c} ; ----
|
||||
pot2plus d e = {
|
||||
n = Pl ;
|
||||
s = \\_,c => d.s ! NumAttr ! c ++ sataaN.s ! d.n ! c ++ e.s ! NumIndep ! c
|
||||
} ;
|
||||
pot2as3 n = {n = n.n ; s = n.s ! NumIndep} ;
|
||||
pot3 d = {n = Pl ; s = \\c => d.s ! NumAttr ! c ++ tuhattaN.s ! d.n ! c} ; ----
|
||||
pot3plus d e = {
|
||||
n = Pl ;
|
||||
s = \\c => d.s ! NumAttr ! c ++ tuhattaN.s ! d.n ! c ++ e.s ! NumIndep ! c
|
||||
} ;
|
||||
|
||||
oper
|
||||
co : (c,o : {s : NForm => Str}) -> {s : CardOrd => Str} = \c,o -> {
|
||||
s = table {
|
||||
NCard nf => c.s ! nf ;
|
||||
NOrd nf => o.s ! nf
|
||||
}
|
||||
} ;
|
||||
|
||||
-- Too much trouble to infer vowel, cf. "kuudes" vs. "viides".
|
||||
|
||||
ordN : Str -> Str -> {s : NForm => Str} = \a,sadas ->
|
||||
let
|
||||
sada = init sadas
|
||||
in
|
||||
mkN
|
||||
sadas (sada + "nnen") (sada + "nten" + a) (sada + "tt" + a) (sada + "nteen")
|
||||
(sada + "nsin" + a) (sada + "nsiss" + a) (sada + "nsien")
|
||||
(sada + "nsi" + a) (sada + "nsiin") ;
|
||||
|
||||
param
|
||||
NumPlace = NumIndep | NumAttr ;
|
||||
|
||||
oper
|
||||
yksiN = co
|
||||
(nhn (mkSubst "ä" "yksi" "yhde" "yhte" "yhtä" "yhteen" "yksi" "yksi"
|
||||
"yksien" "yksiä" "yksiin"))
|
||||
(ordN "ä" "yhdes") ; ---- ensimmäinen
|
||||
kymmenenN = co
|
||||
(nhn (mkSubst "ä" "kymmenen" "kymmene" "kymmene" "kymmentä"
|
||||
"kymmeneen" "kymmeni" "kymmeni" "kymmenien" "kymmeniä" "kymmeniin"))
|
||||
(ordN "ä" "kymmenes") ;
|
||||
sataN = co
|
||||
(nhn (sLukko "sata"))
|
||||
(ordN "a" "sadas") ;
|
||||
|
||||
tuhatN = co
|
||||
(nhn (mkSubst "a" "tuhat" "tuhanne" "tuhante" "tuhatta" "tuhanteen"
|
||||
"tuhansi" "tuhansi" "tuhansien" "tuhansia" "tuhansiin"))
|
||||
(ordN "a" "tuhannes") ;
|
||||
|
||||
kymmentaN =
|
||||
{s = table {
|
||||
NCard (NCase Sg Nom) => "kymmentä" ;
|
||||
k => kymmenenN.s ! k
|
||||
}
|
||||
} ;
|
||||
|
||||
sataaN : {s : Number => CardOrd => Str} = {s = table {
|
||||
Sg => sataN.s ;
|
||||
Pl => table {
|
||||
NCard (NCase Sg Nom) => "sataa" ;
|
||||
k => sataN.s ! k
|
||||
}
|
||||
}
|
||||
} ;
|
||||
|
||||
tuhattaN = {s = table {
|
||||
Sg => tuhatN.s ;
|
||||
Pl => table {
|
||||
NCard (NCase Sg Nom) => "tuhatta" ;
|
||||
k => tuhatN.s ! k
|
||||
}
|
||||
}
|
||||
} ;
|
||||
|
||||
lin pot01 = mkNum "one" "eleven" "ten" "first" ** {n = Sg} ;
|
||||
lin pot0 d = d ** {n = Pl} ;
|
||||
lin pot110 = regCardOrd "ten" ** {n = Pl} ;
|
||||
lin pot111 = regCardOrd "eleven" ** {n = Pl} ;
|
||||
lin pot1to19 d = {s = d.s ! teen} ** {n = Pl} ;
|
||||
lin pot0as1 n = {s = n.s ! unit} ** {n = n.n} ;
|
||||
lin pot1 d = {s = d.s ! ten} ** {n = Pl} ;
|
||||
lin pot1plus d e = {
|
||||
s = \\c => d.s ! ten ! NCard ++ "-" ++ e.s ! unit ! c ; n = Pl} ;
|
||||
lin pot1as2 n = n ;
|
||||
lin pot2 d = {s = \\c => d.s ! unit ! NCard ++ mkCard c "hundred"} ** {n = Pl} ;
|
||||
lin pot2plus d e = {
|
||||
s = \\c => d.s ! unit ! NCard ++ "hundred" ++ "and" ++ e.s ! c ; n = Pl} ;
|
||||
lin pot2as3 n = n ;
|
||||
lin pot3 n = {
|
||||
s = \\c => n.s ! NCard ++ mkCard c "thousand" ; n = Pl} ;
|
||||
lin pot3plus n m = {
|
||||
s = \\c => n.s ! NCard ++ "thousand" ++ m.s ! c ; n = Pl} ;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,22 +1,20 @@
|
||||
concrete QuestionFin of Question = CatFin ** open ResFin in {
|
||||
concrete QuestionFin of Question = CatFin ** open ResFin, Prelude in {
|
||||
|
||||
flags optimize=all_subs ;
|
||||
|
||||
lin
|
||||
|
||||
QuestCl cl = {
|
||||
s = \\t,a,p =>
|
||||
let cls = cl.s ! t ! a ! p
|
||||
in table {
|
||||
QDir => cls ! OQuest ;
|
||||
QIndir => "if" ++ cls ! ODir
|
||||
} ---- "whether" in ExtFin
|
||||
s = \\t,a,p => cl.s ! t ! a ! p ! SQuest
|
||||
} ;
|
||||
|
||||
QuestVP qp vp =
|
||||
let cl = mkClause (qp.s ! Nom) {n = qp.n ; p = P3} vp
|
||||
in {s = \\t,a,b,_ => cl.s ! t ! a ! b ! ODir} ;
|
||||
|
||||
QuestVP ip vp =
|
||||
let
|
||||
cl = mkClause (ip.s ! vp.sc) (agrP3 ip.n) vp
|
||||
in {
|
||||
s = \\t,a,p => cl.s ! t ! a ! p ! SDecl
|
||||
} ;
|
||||
{-
|
||||
QuestSlash ip slash = {
|
||||
s = \\t,a,p =>
|
||||
let
|
||||
@@ -27,28 +25,23 @@ concrete QuestionFin of Question = CatFin ** open ResFin in {
|
||||
QIndir => who ++ cls ! ODir
|
||||
}
|
||||
} ;
|
||||
|
||||
-}
|
||||
QuestIAdv iadv cl = {
|
||||
s = \\t,a,p =>
|
||||
let
|
||||
cls = cl.s ! t ! a ! p ;
|
||||
why = iadv.s
|
||||
in table {
|
||||
QDir => why ++ cls ! OQuest ;
|
||||
QIndir => why ++ cls ! ODir
|
||||
}
|
||||
s = \\t,a,p => iadv.s ++ cl.s ! t ! a ! p ! SDecl
|
||||
} ;
|
||||
|
||||
PrepIP p ip = {s = p.s ++ ip.s ! Nom} ;
|
||||
PrepIP p ip = {s =
|
||||
appCompl True Pos p (ip ** {a = agrP3 ip.n ; isPron = False})} ;
|
||||
|
||||
AdvIP ip adv = {
|
||||
s = \\c => ip.s ! c ++ adv.s ;
|
||||
n = ip.n
|
||||
} ;
|
||||
|
||||
{-
|
||||
IDetCN idet num ord cn = {
|
||||
s = \\c => idet.s ++ num.s ++ ord.s ++ cn.s ! idet.n ! c ;
|
||||
n = idet.n
|
||||
} ;
|
||||
-}
|
||||
|
||||
}
|
||||
|
||||
@@ -5,7 +5,8 @@ concrete RelativeFin of Relative = CatFin ** open ResFin in {
|
||||
lin
|
||||
|
||||
RelCl cl = {
|
||||
s = \\t,a,p,_ => "such" ++ "that" ++ cl.s ! t ! a ! p ! ODir
|
||||
s = \\t,a,p,_ => "siten" ++ "että" ++ cl.s ! t ! a ! p ! SDecl
|
||||
---- sellainen
|
||||
} ;
|
||||
|
||||
RelVP rp vp = {
|
||||
@@ -15,11 +16,11 @@ concrete RelativeFin of Relative = CatFin ** open ResFin in {
|
||||
RNoAg => ag ;
|
||||
RAg a => a
|
||||
} ;
|
||||
cl = mkClause (rp.s ! Nom) agr vp
|
||||
cl = mkClause (rp.s ! agr.n ! vp.sc) agr vp
|
||||
in
|
||||
cl.s ! t ! ant ! b ! ODir
|
||||
cl.s ! t ! ant ! b ! SDecl
|
||||
} ;
|
||||
|
||||
{-
|
||||
RelSlash rp slash = {
|
||||
s = \\t,a,p,_ => slash.c2 ++ rp.s ! Acc ++ slash.s ! t ! a ! p ! ODir
|
||||
} ;
|
||||
@@ -30,5 +31,5 @@ concrete RelativeFin of Relative = CatFin ** open ResFin in {
|
||||
} ;
|
||||
|
||||
IdRP = mkIP "which" "which" "whose" Sg ** {a = RNoAg} ;
|
||||
|
||||
-}
|
||||
}
|
||||
|
||||
@@ -60,6 +60,7 @@ oper
|
||||
NPAcc => Gen -- appCompl does the job
|
||||
} ;
|
||||
|
||||
|
||||
--2 For $Verb$
|
||||
|
||||
-- A special form is needed for the negated plural imperative.
|
||||
@@ -96,8 +97,7 @@ param
|
||||
|
||||
--2 For $Numeral$
|
||||
|
||||
CardOrd = NCard | NOrd ;
|
||||
DForm = unit | teen | ten ;
|
||||
CardOrd = NCard NForm | NOrd NForm ;
|
||||
|
||||
--2 Transformations between parameter types
|
||||
|
||||
@@ -287,35 +287,6 @@ oper
|
||||
questPart : Str -> Str = \on -> on ++ BIND ++ "ko" ; ----
|
||||
|
||||
|
||||
|
||||
{-
|
||||
-- For $Numeral$.
|
||||
|
||||
mkNum : Str -> Str -> Str -> Str -> {s : DForm => CardOrd => Str} =
|
||||
\two, twelve, twenty, second ->
|
||||
{s = table {
|
||||
unit => table {NCard => two ; NOrd => second} ;
|
||||
teen => \\c => mkCard c twelve ;
|
||||
ten => \\c => mkCard c twenty
|
||||
}
|
||||
} ;
|
||||
|
||||
regNum : Str -> {s : DForm => CardOrd => Str} =
|
||||
\six -> mkNum six (six + "teen") (six + "ty") (regOrd six) ;
|
||||
|
||||
regCardOrd : Str -> {s : CardOrd => Str} = \ten ->
|
||||
{s = table {NCard => ten ; NOrd => regOrd ten}} ;
|
||||
|
||||
mkCard : CardOrd -> Str -> Str = \c,ten ->
|
||||
(regCardOrd ten).s ! c ;
|
||||
|
||||
regOrd : Str -> Str = \ten ->
|
||||
case last ten of {
|
||||
"y" => init ten + "ieth" ;
|
||||
_ => ten + "th"
|
||||
} ;
|
||||
-}
|
||||
|
||||
-- The definitions below were moved here from $MorphoFin$ so that we the
|
||||
-- auxiliary of predication can be defined.
|
||||
|
||||
|
||||
@@ -17,23 +17,33 @@ concrete VerbFin of Verb = CatFin ** open Prelude, ResFin in {
|
||||
ComplVA v ap = insertObj (ap.s) (predV v) ;
|
||||
ComplV2A v np ap =
|
||||
insertObj (\\_ => v.c2 ++ np.s ! Acc ++ ap.s ! np.a) (predV v) ;
|
||||
|
||||
UseComp comp = insertObj comp.s (predAux auxBe) ;
|
||||
|
||||
AdvVP vp adv = insertObj (\\_ => adv.s) vp ;
|
||||
|
||||
--- This rule destroys parsing...
|
||||
---- AdVVP adv vp = insertAdV adv.s vp ;
|
||||
|
||||
ReflV2 v = insertObj (\\a => v.c2 ++ reflPron ! a) (predV v) ;
|
||||
|
||||
PassV2 v = insertObj (\\_ => v.s ! VPPart) (predAux auxBe) ;
|
||||
|
||||
UseVS, UseVQ = \vv -> {s = vv.s ; c2 = [] ; isRefl = vv.isRefl} ; -- no "to"
|
||||
|
||||
CompAP ap = ap ;
|
||||
CompNP np = {s = \\_ => np.s ! Acc} ;
|
||||
CompAdv a = {s = \\_ => a.s} ;
|
||||
-}
|
||||
|
||||
UseComp comp =
|
||||
insertObj (\\_ => comp.s) (predV (verbOlla ** {sc = NPCase Nom})) ;
|
||||
|
||||
AdvVP vp adv = insertObj (\\_,_ => adv.s) vp ;
|
||||
|
||||
---- AdVVP adv vp = insertAdV adv.s vp ;
|
||||
|
||||
-- ReflV2 v = insertObj (\\a => v.c2 ++ reflPron ! a) (predV v) ;
|
||||
|
||||
-- PassV2 v = insertObj (\\_ => v.s ! VPPart) (predAux auxBe) ;
|
||||
|
||||
-- UseVS, UseVQ = \vv -> {s = vv.s ; c2 = [] ; isRefl = vv.isRefl} ; -- no "to"
|
||||
|
||||
CompAP ap = {
|
||||
s = \\agr =>
|
||||
let
|
||||
n = agr.n ;
|
||||
c = case agr.n of {
|
||||
Sg => Nom ; -- minä olen iso
|
||||
Pl => Part -- me olemme isoja
|
||||
} --- definiteness of NP ?
|
||||
in ap.s ! False ! AN (NCase agr.n c)
|
||||
} ;
|
||||
CompNP np = {s = \\_ => np.s ! NPCase Nom} ;
|
||||
CompAdv a = {s = \\_ => a.s} ;
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user