1
0
forked from GitHub/gf-core

resource fixes

This commit is contained in:
aarne
2005-09-17 16:01:52 +00:00
parent 60d7223d34
commit 37f0795288
16 changed files with 119 additions and 278 deletions

View File

@@ -28,10 +28,11 @@ fun
--3 Special forms of expression
-- These expression forms are typical of mathematical texts.
-- This expression form is typical of mathematical texts.
-- It is realized with different constructs in different languages, typically
-- some kind of 3rd person imperative of the verb "be".
LetCN : String -> CN -> Imp ; -- Let x be a number.
LetNumCN : SymbList -> Num -> CN -> Imp ; -- Let x and y be (2) numbers.
LetImp : NP -> NP -> Imp ; -- let x be a number
-- This rule is slightly overgenerating: "there exists every number x".
-- The problem seems to be of semantic nature. By this we avoid having many rules.

View File

@@ -24,13 +24,7 @@ lin
SymbTwo = infixSS "and" ;
SymbMore = infixSS "," ;
LetCN x cn = {
s = \\_ => "let" ++ x.s ++ "be" ++ (indefNounPhrase singular cn).s ! NomP
} ;
LetNumCN x nu cn = {
s = \\_ => "let" ++ x.s ++ "be" ++ (indefNounPhraseNum plural nu cn).s ! NomP
} ;
LetImp x np = {s = \\_ => "let" ++ x.s ! NomP ++ "be" ++ np.s ! NomP} ;
ExistNP np = predVerbClause
(nameNounPhraseN (fromAgr np.a).n (nameReg "there" Neutr))
(regV "exist")

View File

@@ -1195,7 +1195,7 @@ oper
questClause : Clause -> Question = \cl ->
{s = \\b,c => table {
DirQ => cl.s ! Inv ! b ! c ;
IndirQ => cl.s ! Dir ! b ! c
IndirQ => "if" ++ cl.s ! Dir ! b ! c
}
} ;
{- --vg

View File

@@ -148,16 +148,18 @@ concrete ClauseFin of Clause = CategoriesFin **
) ;
-- QPredProgVP
-}
QPredAP subj adj =
sats2quest (mkSatsCopula (intNounPhrase subj) (adj.s ! AF subj.g subj.n)) ;
sats2quest (mkSatsCopula (intNounPhrase subj) (complAdjPhrase subj.n adj)) ;
QPredCN subj cn =
sats2quest (mkSatsCopula (intNounPhrase subj) (indefNoun subj.n cn)) ;
sats2quest (mkSatsCopula (intNounPhrase subj) (complCommNoun subj.n cn)) ;
QPredNP subj np =
sats2quest (mkSatsCopula (intNounPhrase subj) (np.s ! stressed nominative)) ;
sats2quest (mkSatsCopula (intNounPhrase subj) (np.s ! NPCase Nom)) ;
QPredAdv subj adv =
sats2quest (mkSatsCopula (intNounPhrase subj) adv.s) ;
{-
QPredProgVP np vp = sats2quest (progressiveSats (intNounPhrase np) vp) ;
-}
@@ -176,9 +178,20 @@ concrete ClauseFin of Clause = CategoriesFin **
RPredAdv subj adv =
sats2rel (mkSatsCopulaRel subj adv.s) ;
IPredV v =
mkClauseInf v ;
IPredV2 verb y =
insertObjectInf (mkClauseInf verb) verb.c verb.s3 verb.p y ;
IPredV3 verb y z =
insertObjectInf
(insertObjectInf (mkClauseInf verb) verb.c verb.s3 verb.p y)
verb.c2 verb.s5 verb.p2 z ;
IPredVS verb sent =
insertComplementInf (mkClauseInf verb) sent.s ;
IPredVQ verb quest =
insertComplementInf (mkClauseInf verb) quest.s ;
{-
IPredV a v =
sats2verbPhrase a (mkSats pronImpers v) ;
IPredV2 a v y =
sats2verbPhrase a (mkSatsObject pronImpers v y) ;
IPredAP a adj =

View File

@@ -3,9 +3,9 @@
concrete MathFin of Math = CategoriesFin ** open Prelude, SyntaxFin, ParadigmsFin in {
lin
SymbPN i = {s = \\c => i.s} ; --- case endings often needed
IntPN i = {s = \\c => i.s} ;
IntNP cn i = nameNounPhrase {
SymbPN i = symbProperName i.s ; --- case ending not always correct
IntPN i = symbProperName i.s ; --- case ending not always correct
IntNP cn i = nameNounPhrase { -- here the CN gets the (correct) ending
s = \\c => cn.s ! False ! Sg ! c ++ i.s
} ;
@@ -23,14 +23,9 @@ lin
SymbTwo = infixSS "ja" ;
SymbMore = infixSS "," ;
LetCN x cn = {
s = \\_ => "olkoon" ++ x.s ++ (indefNounPhrase singular cn).s !
NPCase Nom
} ;
LetNumCN x nu cn = {
s = \\_ => "olkoot" ++ x.s ++ (nounPhraseNum False nu cn).s
! NPCase Part
LetImp x np = {
s = \\_ =>
verbOlla.s ! ImperP3 x.n ++ x.s ! NPCase Nom ++ np.s ! NPCase Nom
} ;
ExistNP np =

View File

@@ -699,6 +699,33 @@ vowelHarmony : Str -> Str = \liitin ->
mkProperName : CommonNoun -> ProperName = \jussi ->
{s = \\c => jussi.s ! NCase Sg c} ;
-- An ending given to a symbol cannot really be decided
-- independently. The string $a$ gives the vowel harmony.
-- Only some South-West dialects have the generally valid
-- Illative form.
caseEnding : Str -> Case -> Str = \a,c -> case c of {
Nom => [] ;
Gen => "n" ;
Part => a ; ---
Transl => "ksi" ;
Ess => "n" + a ;
Iness => "ss" + a ;
Elat => "st" + a ;
Illat => "sse" ; ---
Adess => "ll" + a ;
Ablat => "lt" + a ;
Allat => "lle" ;
Abess => "tt" + a
} ;
symbProperName : Str -> ProperName = \x ->
{s = table {
Nom => x ;
c => glue x (":" + caseEnding "a" c)
}
} ;
--2 Pronouns
--
-- Here we define personal and relative pronouns.

View File

@@ -147,7 +147,7 @@ lin
ImperOne = imperUtterance singular ;
ImperMany = imperUtterance plural ;
---- AdvCl = advClause ;
AdvCl cl adv = insertComplement cl adv.s ;
---- AdvVPI = advVerbPhrase ;
AdCPhr = advSentence ;

View File

@@ -532,77 +532,8 @@ oper
Sats : Type = Clause ;
sats2clause : Sats -> Clause = \sats -> sats ;
----
{-
Clause : Type = {s,s2 : Bool => SForm => Str ; s1 : Str} ;
Sats : Type = {v : Bool => SForm => Str => {fin,inf : Str} ; s1 : Str} ;
sats2clause : Sats -> Clause = \sats -> {
s = \\b,sf => (sats.v ! b ! sf).fin ;
s2 = \\b,sf => (sats.v ! b ! sf).inf ;
s1 = sats.s1
}
-}
----
{-
Sats : Type = {
subj : Str ;
pred : Bool => SForm => {
fin : Str ;
inf : Str
} ;
obj : Bool => SVIForm => Str ;
comp : Str
} ;
sats2clause : Sats -> Clause = \sats ->
let
subj = sats.subj ;
pred = sats.pred ;
in
{s = subj ;
s1 = \\b,sf => (pred ! b ! sf).fin ;
s2 = \\b,sf => (pred ! b ! sf).inf ++ sats.obj ! b ! (SCl sf) ;
s3 = sats.comp
} ;
sats2verbClause : {s : Str ; a : Anteriority} -> Sats -> VerbPhraseInf = \a,sats ->
{s = \\b,vi =>
let
inf = sats.vpi.s ! b ! vi ;
obj = sats.obj ! b ! (SVI vi) ;
comp = sats.comp
in
a.s ++ inf ++ obj ++ comp ;
sc = sats.vpi.sc
} ;
-}
questPart : Str -> Str = \s -> glueParticle s "ko" ; --- "kö"
{-
mkSats : NounPhrase -> Verb1 -> Sats = \subj,verb -> {s =
\\st,b,sf =>
let
sc = verb.sc ;
np = case sc of {
Nom => <subj.n, np2Person subj.p> ;
_ => <Sg, P3>
} ;
su = subj.s ! NPCase sc ;
vi = inflectVerb verb np.p1 np.p2 b sf ;
inf = vi.inf ;
fin = vi.fin ;
in case st of {
SQuest => questPart fin ++ su ++ inf ;
_ => su ++ fin ++ inf
}
} ;
-}
----
-- This is for questions with $IP$, thus with normal word order and no "ko".
@@ -664,41 +595,6 @@ oper
fininf ! nsu ! psu
} ;
{- ----
mkSats : NounPhrase -> Verb1 -> Sats = \subj,verb ->
let
sc = verb.sc ;
np = case sc of {
Nom => <subj.n, np2Person subj.p> ;
_ => <Sg, P3>
} ;
vi = inflectVerb verb np.p1 np.p2
in
{subj = subj.s ! NPCase sc ; -- "minusta tulee poliisi"
pred = \\b,sf => vi b (SCl sf) ;
obj = \\_,_ => [] ;
comp = []
} ;
progressiveSats : NounPhrase -> VerbPhraseInf -> Sats = \subj,vp ->
let
np = case vp.sc of {
Nom => <subj.n, np2Person subj.p> ;
_ => <Sg, P3>
} ;
vi = inflectVerb verbOlla np.p1 np.p2
in
{subj = subj.s ! NPCase vp.sc ; -- "minusta on tulossa poliisi"
pred = \\b,sf => vi b (SCl sf) ;
obj = \\_,_ => [] ;
comp = vp.s ! True ! VIInf3Iness ;
vpi = \\b => {
s = \\f => let vv = vi b (SVI f) in vv.fin ++ vv.inf ;
sc = Nom
}
} ;
-}
mkSatsObject : NounPhrase -> TransVerb -> NounPhrase -> Sats = \subj,verb,obj ->
insertObject (mkSats subj verb) verb.c verb.s3 verb.p obj ;
mkSatsObjectRel : RelPron -> TransVerb -> NounPhrase -> Number -> Sats =
@@ -724,27 +620,53 @@ oper
comp
} ;
{-
insertObject : Sats -> ComplCase -> Str -> Bool -> NounPhrase -> Sats =
\sats, c, prep, pos, obj ->
{subj = sats.subj ;
pred = \\b,sf =>
let spred = sats.pred ! b ! sf in
{fin = spred.fin ;
inf = spred.inf
} ;
obj = \\b,f => sats.obj ! b ! f ++ pPosit prep pos (obj.s ! complCase b c f) ;
comp = sats.comp
} ;
insertComplement : Sats -> Str -> Sats =
\sats, comp ->
{subj = sats.subj ;
pred = sats.pred ;
obj = sats.obj ;
comp = sats.comp ++ comp
-- This is for infinitive clauses, $VCl$.
mkClauseInf : Verb1 -> VerbClauseInf = \verb -> {
s = \\b,ant,i,n =>
let
part = verb.s ! PastPartAct (AN (NCase n Nom)) ;
vi = case i of {
VIInfinit => Inf ;
VIImperat => Imper n ;
VIInf3Iness => Inf3Iness ;
VIInf3Elat => Inf3Elat ;
VIInf3Illat => Inf3Illat ;
VIInf3Adess => Inf3Adess ;
VIInf3Abess => Inf3Abess
}
in
case <b,ant,i,n> of {
<False,Simul,VIImperat,Sg> => "älä" ++ verb.s ! Imper Sg ;
<False,Simul,VIImperat,Pl> => "älkää" ++ verb.s ! ImpNegPl ;
<True, Simul,_,_> => verb.s ! vi ;
<False,Simul,_,_> => verbOlla.s ! vi ++ verb.s ! Inf3Abess ;
<False,Anter,VIImperat,Sg> => "älä" ++ "ole" ++ part ;
<False,Anter,VIImperat,Pl> => "älkää" ++ "olko" ++ part ;
<True, Anter,_,_> => verbOlla.s ! vi ++ part ;
<False,Anter,_,_> => verbOlla.s ! vi ++ "olematta" ++ part
} ;
-}
sc = verb.sc
} ;
insertObjectInf :
VerbClauseInf -> ComplCase -> Str -> Bool -> NounPhrase -> VerbClauseInf =
\sats, c, prep, pos, obj -> {s =
\\b,a,i,n =>
sats.s ! b ! a ! i ! n ++
pPosit prep pos (obj.s ! complCase b c (SVI i)) ;
sc = sats.sc
} ;
insertComplementInf : VerbClauseInf -> Str -> VerbClauseInf =
\sats, comp -> {s =
\\b,a,i,n =>
sats.s ! b ! a ! i ! n ++
comp ;
sc = sats.sc
} ;
complCase : Bool -> ComplCase -> SVIForm -> NPForm = \b,c,v -> case c of {
CCase k => case <k,b> of {
@@ -760,104 +682,6 @@ oper
}
} ;
{-
inflectVerb : Verb -> Number -> Person -> Bool -> SForm -> {fin, inf : Str} =
\verb,n,p,b,sf ->
let
vs : VAuxForm => Str = \\f => verb.s ! verbAuxForm f ;
olla = verbAuxOlla ;
fei = verbAuxNegEi ! APres n p ;
at : Tense -> VAuxForm = \t -> case t of {
Past => AImpf n p ;
Conditional => ACond n p ;
_ => ANF (APres n p) ---- inc. Present, Future
} ;
nat : Tense -> VAuxForm = \t -> case t of {
Past => APastPart n ;
Conditional => ACond Sg P3 ;
_ => ANF (AImper Sg)
} ;
pverb = vs ! APastPart n ;
in
case <b,sf> of {
<True, VFinite t Simul> => {fin = vs ! (at t) ; inf = []} ;
<False, VFinite t Simul> => {fin = fei ; inf = vs ! (nat t)} ;
<True, VFinite t Anter> => {fin = olla ! (at t) ; inf = pverb} ;
<False, VFinite t Anter> => {fin = fei ; inf = olla ! (nat t) ++ pverb}
} ;
----
inflectVerb : Verb -> Number -> Person -> Bool -> SVIForm -> {fin, inf : Str} =
\verb,n,p,b,sf ->
let
vs : VAuxForm => Str = \\f => verb.s ! verbAuxForm f ;
olla = verbAuxOlla ;
tulla = table {ANF f => verbAuxNegTulla ! f ; _ => []} ;
eis = table {ANF f => verbAuxNegEi ! f ; _ => []} ;
part = APastPart n ;
abess = vs ! AInf3Abess ;
illat = vs ! AInf3Illat ;
ei : Anteriority -> VAuxForm -> VAuxForm -> {fin,inf : Str} =
\a,vf,neg -> case <b,a> of {
<True, Simul> => {fin = vs ! vf ; inf = []} ;
<True, Anter> => {fin = olla ! vf ; inf = vs ! part} ;
<False,Simul> => {fin = eis ! vf ; inf = vs ! neg} ;
<False,Anter> => {fin = eis ! vf ; inf = olla ! neg ++ vs ! part}
} ;
fut : Anteriority -> VAuxForm -> VAuxForm -> {fin,inf : Str} =
\a,vf,neg -> case <b,a> of {
<True, Simul> => {fin = tulla ! vf ; inf = illat} ;
<True, Anter> => {fin = olla ! vf ; inf = tulla ! part ++ illat} ;
<False,Simul> => {fin = eis ! vf ; inf = tulla ! neg ++ illat} ;
<False,Anter> => {fin = eis ! vf ;
inf = olla ! neg ++ tulla ! part ++ illat}
} ;
inf : VIForm -> Anteriority -> {fin,inf : Str} =
\if,a ->
let i = AInf ---- is this ever needed?
{ -
case if of {
VIInf3Iness => Inf3Iness ;
VIInf3Elat => Inf3Elat ;
VIInf3Illat => Inf3Illat ;
VIInf3Adess => Inf3Adess ;
VIInf3Abess => Inf3Abess ;
_ => Inf --- not used for imperative
}
- }
in
case <b,a> of {
<True, Simul> => {fin = vs ! i ; inf = []} ;
<True, Anter> => {fin = olla ! i ; inf = vs ! part} ;
<False,Simul> => {fin = olla ! i ; inf = abess} ;
<False,Anter> => {fin = olla ! i ; inf = olla ! part ++ abess}
} ;
älä : Number -> {fin,inf : Str} =
\nu -> case b of {
True => {fin = vs ! ANF (AImper nu) ; inf = []} ;
False => {fin = eis ! ANF (AImper nu) ;
inf = vs ! case nu of {
Sg => ANF (AImper n) ;
Pl => AImpNegPl}
}
} ;
in case sf of {
SCl (VFinite Present a) => ei a (ANF (APres n p)) (ANF (AImper Sg)) ;
SCl (VFinite Past a) => ei a (AImpf n p) (part) ;
SCl (VFinite Conditional a) => ei a (ACond n p) (ACond Sg P3) ;
SCl (VFinite Future a) => fut a (ANF (APres n p)) (ANF (AImper Sg)) ;
SVI (VIImperat ) => älä n ;
SVI i => inf i Simul ---- Anter
} ;
-}
--- these are the only forms needed in auxiliary positions.
param

View File

@@ -6,7 +6,8 @@ concrete LangFre of Lang =
StructuralFre,
BasicFre,
TimeFre,
CountryFre
CountryFre,
MathFre
** open Prelude, ParadigmsFre in {

View File

@@ -6,7 +6,8 @@ concrete LangIta of Lang =
StructuralIta,
BasicIta,
TimeIta,
CountryIta
CountryIta,
MathIta
** open Prelude, ParadigmsIta in {

View File

@@ -6,7 +6,8 @@ concrete LangNor of Lang =
StructuralNor,
BasicNor,
TimeNor,
CountryNor
CountryNor,
MathNor
** open Prelude, ParadigmsNor in {

View File

@@ -26,13 +26,9 @@ lin
SymbMore = infixSS "," ;
LetCN x cn = {
s = \\_,_ => copula.s ! VFin (VPres Con) Sg P3 ++ x.s ++ (indefNounPhrase singular cn).s !
unstressed nominative
} ;
LetNumCN x nu cn = {
s = \\_,_ => copula.s ! VFin (VPres Con) Pl P3 ++ x.s ++ (indefNounPhraseNum nu cn).s
! unstressed nominative
LetImp x cn = {
s = \\_,_ => copula.s ! VFin (VPres Con) x.n P3 ++
x.s ! unstressed nominative ++ cn.s ! unstressed nominative
} ;
--- to be replaced by "il existe", "esiste", etc.

View File

@@ -26,14 +26,8 @@ lin
SymbMore = infixSS "," ;
LetCN x cn = {
s = \\_ => letImp ++ x.s ++ verbVara.s ! VI (Inf Act) ++ (indefNounPhrase singular cn).s !
PNom
} ;
LetNumCN x nu cn = {
s = \\_ => letImp ++ x.s ++ verbVara.s ! VI (Inf Act) ++
(indefNounPhraseNum plural nu cn).s
! PNom
LetImp x np = {
s = \\_ => letImp ++ x.s ! PNom ++ verbVara.s ! VI (Inf Act) ++ np.s ! PNom
} ;
--- to be replaced by "det existerar", etc.

View File

@@ -9,14 +9,6 @@ lin
UseN = noun2CommNounPhrase ;
UsePN = nameNounPhrase ;
SymbPN i = {s = \\_ => i.s ; g = NNeutr} ;
SymbCN cn s =
{s = \\n => cn.s ! n ++ s.s ;
g = cn.g} ;
IntCN cn i =
{s = \\n => cn.s ! n ++ i.s ;
g = cn.g} ;
IndefOneNP = indefNounPhrase singular ;
IndefNumNP = indefNounPhraseNum plural ;

View File

@@ -6,7 +6,8 @@ concrete LangSpa of Lang =
StructuralSpa,
BasicSpa,
TimeSpa,
CountrySpa
CountrySpa,
MathSpa
** open Prelude, ParadigmsSpa in {

View File

@@ -6,7 +6,8 @@ concrete LangSwe of Lang =
StructuralSwe,
BasicSwe,
TimeSwe,
CountrySwe
CountrySwe,
MathSwe
** open Prelude, ResourceSwe, ParadigmsSwe in {