fix the word order for superlatives

This commit is contained in:
Krasimir Angelov
2023-11-04 15:04:15 +01:00
parent 14825b5617
commit e97205e04d
23 changed files with 91 additions and 51 deletions

View File

@@ -6,6 +6,6 @@ concrete CompatibilityCat of Compatibility = CatCat ** open Prelude, CommonRoman
lin
NumInt n = {s = \\_ => n.s ; isNum = True ; n = Pl} ;
OrdInt n = {s = \\_ => n.s ++ SOFT_BIND ++ "."} ; ---
OrdInt n = {s = \\_ => n.s ++ SOFT_BIND ++ "." ; s2 = \\_ => []} ; ---
}

View File

@@ -228,4 +228,7 @@ oper
param
HasArt = NoArt | UseArt ;
oper
superlCanBePost = False ;
}

View File

@@ -33,13 +33,13 @@ lin
every_Det = {
s,sp = \\_,_ => "cada";
spn =\\c => prepCase c ++ "tot" ;
n = Sg ; s2 = [] ; isNeg = False} ;
n = Sg ; s2 = \\g => [] ; isNeg = False} ;
everything_NP = pn2np (mkPN "tot" Masc) ;
everywhere_Adv = ss ["a tot arreu"] ;
few_Det = {
s,sp = \\g,c => prepCase c ++ genForms "pocs" "poques" ! g ;
spn = \\c => prepCase c ++ "pocs" ;
n = Pl ; s2 = [] ; isNeg = False} ;
n = Pl ; s2 = \\g => [] ; isNeg = False} ;
--- first_Ord = {s = \\ag => (regA "primer").s ! Posit ! AF ag.g ag.n} ;
for_Prep = mkPrep ["per a"] ;
from_Prep = complGen ; ---
@@ -71,14 +71,14 @@ lin
many_Det = {
s,sp = \\g,c => prepCase c ++ genForms "molts" "moltes" ! g ;
spn = \\c => prepCase c ++ "molts" ;
n = Pl ; s2 = [] ; isNeg = False} ;
n = Pl ; s2 = \\g => [] ; isNeg = False} ;
more_CAdv = X.mkCAdv "més" conjThan ;
most_Predet = {s = \\_,c => prepCase c ++ ["la majoria"] ; c = CPrep P_de ;
a = PNoAg} ;
much_Det = {
s,sp = \\g,c => prepCase c ++ genForms "molt" "molta" ! g ;
spn = \\c => prepCase c ++ "molt" ;
n = Sg ; s2 = [] ; isNeg = False} ;
n = Sg ; s2 = \\g => [] ; isNeg = False} ;
must_VV = deVV (verbV (haver_59 "haver" True)) ;
no_Utt = ss "no" ;
on_Prep = mkPrep "sobre" ;
@@ -101,11 +101,11 @@ lin
somePl_Det = {
s,sp = \\g,c => prepCase c ++ genForms "alguns" "algunes" ! g ;
spn = \\c => prepCase c ++ "alguns" ;
n = Pl ; s2 = [] ; isNeg = False} ;
n = Pl ; s2 = \\g => [] ; isNeg = False} ;
someSg_Det = {
s,sp = \\g,c => prepCase c ++ genForms "algun" "alguna" ! g ;
spn = \\c => prepCase c ++ "quelcom" ;
n = Sg ; s2 = [] ; isNeg = False} ;
n = Sg ; s2 = \\g => [] ; isNeg = False} ;
something_NP = pn2np (mkPN ["quelcom"] Masc) ;
somewhere_Adv = ss ["a algun lloc"] ;
that_Quant =

View File

@@ -6,6 +6,6 @@ concrete CompatibilityFre of Compatibility = CatFre ** open Prelude, CommonRoman
lin
NumInt n = {s = \\_ => n.s ; isNum = True ; n = Pl} ;
OrdInt n = {s = \\_ => n.s ++ SOFT_BIND ++ "."} ; ---
OrdInt n = {s = \\_ => n.s ++ SOFT_BIND ++ "." ; s2 = \\_ => []} ; ---
}

View File

@@ -341,4 +341,7 @@ instance DiffFre of DiffRomance - [
param
HasArt = NoArt | UseArt | AlwaysArt ;
oper
superlCanBePost = False ;
} ;

View File

@@ -77,7 +77,7 @@ concrete ExtraFre of ExtraFreAbs = ExtraRomanceFre **
s,sp = \\g,c => prepCase c ++ genForms "tout" "toute" ! g ;
spn= \\c => prepCase c ++ "tout" ;
n = Sg ;
s2 = [] ;
s2 = \\c => [] ;
isNeg = False
} ;

View File

@@ -42,12 +42,12 @@ oper
mkDet : Str -> Det = \s -> lin Det {
s,sp = \\_,c => prepCase c ++ s ;
spn = \\c => prepCase c ++ s ;
n = Sg ; s2 = [] ; isNeg = False
n = Sg ; s2 = \\g => [] ; isNeg = False
} ;
mkDet : Str -> Str -> Number -> Det = \m,f,n -> lin Det {
s,sp = \\g,c => prepCase c ++ case g of {Masc => m ; Fem => f} ;
spn = \\c => prepCase c ++ m ;
n = n ; s2 = [] ; isNeg = False
n = n ; s2 = \\g => [] ; isNeg = False
} ;
} ;

View File

@@ -38,7 +38,7 @@ lin
sp = \\g,c => prepCase c ++ genForms "chacun" "chacune" ! g ;
spn= \\c => prepCase c ++ "tout" ;
n = Sg ;
s2 = [] ;
s2 = \\g => [] ;
isNeg = False
} ;
everything_NP = pn2np (mkPN ["tout"] Masc) ;
@@ -46,7 +46,7 @@ lin
few_Det = {
s,sp = \\g,c => prepCase c ++ "peu" ++ elisDe ;
spn = \\c => prepCase c ++ "peu" ++ elisDe ;
n = Pl ; s2 = [] ; isNeg = False} ;
n = Pl ; s2 = \\g => [] ; isNeg = False} ;
--- DEPREC first_Ord = {s = \\ag => (regA "premier").s ! Posit ! AF ag.g ag.n} ;
for_Prep = mkPreposition "pour" ;
from_Prep = complGen ; ---
@@ -75,12 +75,12 @@ lin
many_Det = {
s,sp = \\_,c => prepCase c ++ "plusieurs" ;
spn = \\c => prepCase c ++ "plusieurs" ;
n = Pl ; s2 = [] ; isNeg = False} ;
n = Pl ; s2 = \\g => [] ; isNeg = False} ;
more_CAdv = X.mkCAdv "plus" conjThan ;
most_Predet = {s = \\_,c => prepCase c ++ ["la plupart"] ; c = CPrep P_de ; a = PNoAg} ;
much_Det = {s,sp = \\_,c => prepCase c ++ "beaucoup" ++ elisDe ;
spn = \\c => prepCase c ++ "beaucoup" ++ elisDe ;
n = Pl ; s2 = [] ; isNeg = False} ;
n = Pl ; s2 = \\g => [] ; isNeg = False} ;
must_VV = mkVV (devoir_V2 ** {lock_V = <>}) ;
---b no_Phr = ss "non" ;
no_Utt = ss "non" ;
@@ -103,11 +103,11 @@ lin
somePl_Det = {
s,sp = \\_,c => prepCase c ++ "quelques" ;
spn = \\c => prepCase c ++ "quelque chose" ;
n = Pl ; s2 = [] ; isNeg = False} ; ---- sp
n = Pl ; s2 = \\g => [] ; isNeg = False} ; ---- sp
someSg_Det = {
s,sp = \\_,c => prepCase c ++ "quelque" ;
spn = \\c => prepCase c ++ "quelque chose" ;
n = Sg ; s2 = [] ; isNeg = False} ; ----sp
n = Sg ; s2 = \\g => [] ; isNeg = False} ; ----sp
something_NP = pn2np (mkPN ["quelque chose"] Masc) ;
somewhere_Adv = ss ["quelque part"] ; --- ne - pas

View File

@@ -6,6 +6,6 @@ concrete CompatibilityIta of Compatibility = CatIta ** open Prelude, CommonRoman
lin
NumInt n = {s = \\_ => n.s ; isNum = True ; n = Pl} ;
OrdInt n = {s = \\_ => n.s ++ SOFT_BIND ++ "."} ; ---
OrdInt n = {s = \\_ => n.s ++ SOFT_BIND ++ "." ; s2 = \\_ => []} ; ---
}

View File

@@ -254,4 +254,7 @@ instance DiffIta of DiffRomance - [contractInf] = open CommonRomance, PhonoIta,
param
HasArt = NoArt | UseArt ;
oper
superlCanBePost = True ;
}

View File

@@ -66,7 +66,7 @@ oper
s,sp = \\_,_ => piu ;
spn = \\_ => piu ;
n = n ;
s2 = [] ;
s2 = \\g => [] ;
isNeg = False
} ;
-- Inflects for number
@@ -77,7 +77,7 @@ oper
} ;
spn = \\_ => alcuni ;
n = n ;
s2 = [] ;
s2 = \\g => [] ;
isNeg = False
} ;
} ;

View File

@@ -34,13 +34,13 @@ lin
every_Det = {
s,sp = \\_,_ => "ogni" ;
spn = \\c => prepCase c ++ "tutto" ;
n = Sg ; s2 = [] ; isNeg = False} ;
n = Sg ; s2 = \\g => [] ; isNeg = False} ;
everything_NP = pn2np (mkPN ["tutto"] Masc) ;
everywhere_Adv = ss "dappertutto" ;
few_Det = {
s,sp = \\g,c => prepCase c ++ genForms "pochi" "poche" ! g ;
spn = \\c => prepCase c ++ "pochi" ;
n = Pl ; s2 = [] ; isNeg = False} ;
n = Pl ; s2 = \\g => [] ; isNeg = False} ;
---- first_Ord = {s = \\ag => (regA "primo").s ! Posit ! AF ag.g ag.n} ;
for_Prep = mkPrep "per" ;
from_Prep = da_Prep ;
@@ -69,14 +69,14 @@ lin
many_Det = {
s,sp = \\g,c => prepCase c ++ genForms "molti" "molte" ! g ;
spn = \\c => prepCase c ++ "molto" ;
n = Pl ; s2 = [] ; isNeg = False} ;
n = Pl ; s2 = \\g => [] ; isNeg = False} ;
more_CAdv = X.mkCAdv "più" conjThan ;
most_Predet = {s = \\_,c => prepCase c ++ ["la maggior parte"] ; c = CPrep P_di ;
a = PNoAg} ;
much_Det = {
s,sp = \\g,c => prepCase c ++ genForms "molto" "molta" ! g ;
spn = \\c => prepCase c ++ "molto" ;
n = Sg ; s2 = [] ; isNeg = False} ;
n = Sg ; s2 = \\g => [] ; isNeg = False} ;
must_VV = mkVV (verboV (dovere_47 "dovere")) ;
no_Utt = ss "no" ;
on_Prep = {s = [] ; c = CPrep P_su ; isDir = False} ;
@@ -98,11 +98,11 @@ lin
somePl_Det = {
s,sp = \\_,c => prepCase c ++ "qualche" ;
spn = \\c => prepCase c ++ "qualche cosa" ;
n = Pl ; s2 = [] ; isNeg = False} ;
n = Pl ; s2 = \\g => [] ; isNeg = False} ;
someSg_Det = {
s,sp = \\_,c => prepCase c ++ "qualche" ;
spn = \\c => prepCase c ++ "qualche cosa" ;
n = Sg ; s2 = [] ; isNeg = False} ;
n = Sg ; s2 = \\g => [] ; isNeg = False} ;
something_NP = pn2np (mkPN ["qualche cosa"] Masc) ;
somewhere_Adv = ss ["qualche parte"] ;
that_Quant = let

View File

@@ -6,6 +6,6 @@ concrete CompatibilityPor of Compatibility = CatPor ** open Prelude, CommonRoman
lin
NumInt n = {s = \\_ => n.s ; isNum = True ; n = Pl} ;
OrdInt n = {s = \\_ => n.s ++ SOFT_BIND ++ "."} ; ---
OrdInt n = {s = \\_ => n.s ++ SOFT_BIND ++ "." ; s2 = \\_ => []} ; ---
}

View File

@@ -294,4 +294,7 @@ instance DiffPor of DiffRomance - [iAdvQuestionInv,chooseTA,otherInv,partAgr,sta
param
HasArt = NoArt | UseArt ;
oper
superlCanBePost = False ;
} ;

View File

@@ -252,6 +252,7 @@ oper
mkOrdinal : A -> Ord = \adj ->
lin Ord {
s = \\ag => adj.s ! genNum2Aform ag.g ag.n ;
s2 = \\_ => []
} ;
mkQuantifier : (esse,essa,esses,essas,esso : Str) -> Quant = \esse,essa,esses,essas,esso->
@@ -273,7 +274,7 @@ oper
s,sp = \\g,c => prepCase c ++ genForms muito muita ! g ;
spn = \\c => prepCase c ++ muito ;
n = number;
s2 = [] ;
s2 = \\g => [] ;
isNeg = neg
} ;

View File

@@ -65,7 +65,7 @@ incomplete concrete CatRomance of Cat = CommonX - [SC,Pol,MU]
Det,DAP = {
s : Gender => Case => Str ;
n : Number ;
s2 : Str ; -- -ci
s2 : Gender => Str ; -- -ci
sp : Gender => Case => Str ; -- substantival: mien, mienne
spn: Case => Str ;
isNeg : Bool -- negative element, e.g. aucun
@@ -84,7 +84,7 @@ incomplete concrete CatRomance of Cat = CommonX - [SC,Pol,MU]
} ;
Num = {s : Gender => Str ; isNum : Bool ; n : Number} ;
Card = {s : Gender => Str ; n : Number} ;
Ord = {s : AAgr => Str} ;
Ord = {s, s2 : AAgr => Str} ;
-- Numeral
@@ -146,6 +146,9 @@ incomplete concrete CatRomance of Cat = CommonX - [SC,Pol,MU]
A = \a -> a.s ! genNum2Aform Masc Sg ;
A2 = \a -> a.s ! genNum2Aform Masc Sg ++ a.c2.s ;
Det = \d -> d.s ! Masc ! Nom ++ d.s2 ! Masc ;
Ord = \o -> o.s ! aagr Masc Sg ++ o.s2 ! aagr Masc Sg ;
N = \n -> n.s ! Sg ;
N2 = \n -> n.s ! Sg ++ n.c2.s ;
N3 = \n -> n.s ! Sg ++ n.c2.s ++ n.c3.s ;

View File

@@ -64,7 +64,7 @@ interface DiffRomance = open CommonRomance, Prelude in {
-- e.g. un bon amic (Cat), una gran parte (Spa) vs. predicative bo/bona, grande
oper AForm : PType ;
oper Adj : Type = {s : AForm => Str} ;
oper mkOrd : Adj -> {s : AAgr => Str} = \x -> {s = \\ag => x.s ! aagr2aform ag} ;
oper mkOrd : Adj -> {s,s2 : AAgr => Str} = \x -> {s = \\ag => x.s ! aagr2aform ag; s2 = \\_ => []} ;
oper aform2aagr : AForm -> AAgr ;
oper aform2gender : AForm -> Gender = \af -> (aform2aagr af).g ;
@@ -222,4 +222,7 @@ oper
param HasArt ;
oper
superlCanBePost : Bool ;
} ;

View File

@@ -9,7 +9,7 @@ incomplete concrete NounRomance of Noun =
g = cn.g ;
n = det.n
in heavyNPpol det.isNeg {
s = \\c => det.s ! g ! c ++ cn.s ! n ++ det.s2 ;
s = \\c => det.s ! g ! c ++ cn.s ! n ++ det.s2 ! g ;
a = agrP3 g n ;
hasClit = False
} ;
@@ -53,11 +53,13 @@ incomplete concrete NounRomance of Noun =
} ;
DetQuantOrd quant num ord = {
s,sp = \\g,c => quant.s ! num.isNum ! num.n ! g ! c ++ num.s ! g ++
s = \\g,c => quant.s ! num.isNum ! num.n ! g ! c ++ num.s ! g ++
ord.s ! aagr g num.n ;
spn = \\c => quant.s ! num.isNum ! num.n ! Masc ! c ++ num.s ! Masc ++
ord.s ! aagr Masc num.n ;
s2 = quant.s2 ;
s2 = \\g => quant.s2 ++ ord.s2 ! aagr g num.n ;
sp = \\g,c => quant.s ! num.isNum ! num.n ! g ! c ++ num.s ! g ++
ord.s ! aagr g num.n ++ ord.s2 ! aagr g num.n ;
spn = \\c => quant.s ! num.isNum ! num.n ! Masc ! c ++ num.s ! Masc ++
ord.s ! aagr Masc num.n ++ ord.s2 ! aagr Masc num.n ;
n = num.n ;
isNeg = quant.isNeg
} ;
@@ -72,7 +74,7 @@ incomplete concrete NounRomance of Noun =
True => quant.s ! True ! num.n ! Masc ! c ++ num.s ! Masc ;
False => quant.spn ! c ++ num.s ! Masc
} ;
s2 = quant.s2 ;
s2 = \\_ => quant.s2 ;
n = num.n ;
isNeg = quant.isNeg
} ;
@@ -101,25 +103,40 @@ incomplete concrete NounRomance of Noun =
NumCard n = n ** {isNum = True} ;
NumDigits nu = {s = \\g => nu.s ! NCard g ; n = nu.n} ;
OrdDigits nu = {s = \\a => nu.s ! NOrd a.g a.n} ;
OrdDigits nu = {s = \\a => nu.s ! NOrd a.g a.n ; s2 = \\_ => []} ;
NumDecimal nu = {s = \\g => nu.s ! NCard g ; n = nu.n} ;
NumNumeral nu = {s = \\g => nu.s ! NCard g ; n = nu.n} ;
OrdNumeral nu = {s = \\a => nu.s ! NOrd a.g a.n} ;
OrdNumeral nu = {s = \\a => nu.s ! NOrd a.g a.n ; s2 = \\_ => []} ;
AdNum adn num = {s = \\a => adn.s ++ num.s ! a ; isNum = num.isNum ; n = num.n} ;
OrdSuperl adj = {
s = \\a => case adj.isDeg of {
True => adj.compar ! aagr2compar a ;
False => piuComp ++ adj.s ! genNum2Aform a.g a.n }
OrdSuperl adj =
case <adj.isDeg, superlCanBePost> of {
<True, _> => { s = \\a => adj.compar ! aagr2compar a ;
s2 = \\_ => []
} ;
<False, True> => { s = \\_ => [] ;
s2 = \\a => piuComp ++ adj.s ! genNum2Aform a.g a.n
} ;
<False, False> => { s = \\a => piuComp ++ adj.s ! genNum2Aform a.g a.n ;
s2 = \\_ => []
}
} ;
OrdNumeralSuperl num adj =
let ordSuperl : Ord = OrdSuperl adj
in {s = \\a => num.s ! NOrd a.g a.n ++ ordSuperl.s ! a} ; -- la terza più grande
---- could be discontinuous: la terza città più grande
case <adj.isDeg, superlCanBePost> of {
<True, _> => { s = \\a => num.s ! NOrd a.g a.n ++ adj.compar ! aagr2compar a ;
s2 = \\_ => []
} ;
<False, True> => { s = \\a => num.s ! NOrd a.g a.n ;
s2 = \\a => piuComp ++ adj.s ! genNum2Aform a.g a.n
} ;
<False, False> => { s = \\a => num.s ! NOrd a.g a.n ++ piuComp ++ adj.s ! genNum2Aform a.g a.n ;
s2 = \\_ => []
}
} ;
DefArt = {
s = \\_,n,g,c => artDef False g n c ;

View File

@@ -25,7 +25,7 @@ lin
SymbS sy = {s = \\_ => sy.s} ;
SymbNum n = {s = \\_ => n.s ; isNum = True ; n = Pl} ;
SymbOrd n = {s = \\_ => n.s ++ BIND ++ "º"} ; -- feminine variant ª, also variants 1.º and 1.ª
SymbOrd n = {s = \\_ => n.s ++ BIND ++ "º"; s2 = \\_ => []} ; -- feminine variant ª, also variants 1.º and 1.ª
lincat

View File

@@ -6,6 +6,6 @@ concrete CompatibilitySpa of Compatibility = CatSpa ** open Prelude, CommonRoman
lin
NumInt n = {s = \\_ => n.s ; isNum = True ; n = Pl} ;
OrdInt n = {s = \\_ => n.s ++ SOFT_BIND ++ "."} ; ---
OrdInt n = {s = \\_ => n.s ++ SOFT_BIND ++ "." ; s2 = \\_ => []} ; ---
}

View File

@@ -240,4 +240,7 @@ instance DiffSpa of DiffRomance - [iAdvQuestionInv,otherInv,partAgr,stare_V,vpAg
param
HasArt = NoArt | UseArt ;
oper
superlCanBePost = True ;
}

View File

@@ -60,7 +60,7 @@ oper
s,sp = \\_,c => prepCase c ++ piu ;
spn = \\c => prepCase c ++ piu ;
n = n ;
s2 = [] ;
s2 = \\g => [] ;
isNeg = False
} ;
-- Inflects for number
@@ -68,7 +68,7 @@ oper
s,sp = \\g,c => prepCase c ++ genForms alcuni alcune ! g ;
spn = \\c => prepCase c ++ alcuni ;
n = n ;
s2 = [] ;
s2 = \\g => [] ;
isNeg = False
} ;
} ;

View File

@@ -237,6 +237,7 @@ oper
mkOrdinal : A -> Ord = \adj->
lin Ord {
s = \\ag => adj.s ! genNum2Aform ag.g ag.n ;
s2 = \\_ => []
} ;
mkQuantifier : (ese,esa,esos,esas,eso : Str) -> Quant = \ese,esa,esos,esas,eso->
@@ -261,7 +262,7 @@ oper
s,sp = \\g,c => prepCase c ++ genForms mucho mucha ! g ;
spn = \\c => prepCase c ++ mucho ;
n = number;
s2 = [] ;
s2 = \\c => [] ;
isNeg = neg
} ;