This commit is contained in:
Aarne Ranta
2018-12-13 14:16:09 +02:00
41 changed files with 753 additions and 512 deletions

View File

@@ -58,7 +58,7 @@ categories.png: categories.dot
categories-imagemap.html: categories.dot categories-imagemap.html: categories.dot
rm -f $@ rm -f $@
echo '<img src="categories.png" usemap="#categories">' > $@ echo '<img src="categories.png" usemap="#categoriesmap" alt="RGL categories">' > $@
dot -Tcmapx $^ >> $@ dot -Tcmapx $^ >> $@
api-examples.gfs: api-examples.txt MkExx.hs api-examples.gfs: api-examples.txt MkExx.hs

View File

@@ -1,5 +1,5 @@
digraph categories { digraph categoriesmap {
size = "11,11" ; size = "11,11" ;
node [href="#\N"]; node [href="#\N"];

View File

@@ -13,18 +13,16 @@ to the relevant source files, which give more information. Some of the files hav
not yet been prepared so that the machine generated documentation has the nicest not yet been prepared so that the machine generated documentation has the nicest
possible format. possible format.
% These hardcoded TOC links (chapter 4 onwards) need to be updated as new languages are added.
The main contents are: The main contents are:
- [Chapter 1 #toc2]: categories, with links to the functions for - [Chapter 1 #toc2]: categories, with links to the functions for constructing trees in them.
constructing trees in them. - [Chapter 2 #toc5]: syntactic construction functions, with cross-links and examples.
- [Chapter 2 #toc5]: syntactic construction functions, with cross-links and - [Chapter 3 #toc85]: morphological (lexical) paradigms.
examples. - [Chapter 4 #toc121]: additional libraries.
- [Chapter 3 #toc85]: morphological paradigms. - [Chapter 5 #toc127]: how to "browse" the library by loading the grammars into the ``gf`` command editor.
- [Chapter 4 #toc120]: additional libraries. - [Chapter 6 #toc128]: a brief example of how application grammars can use the resource modules.
- [Chapter 5 #toc126]: how to "browse" the library by - [Detailed table of contents #toc129].
loading the grammars into the ``gf`` command editor.
- [Chapter 6 #toc127]: a brief example of how application grammars can
use the resource modules.
- [Detailed table of contents #toc128].
The [RGL Browser http://www.grammaticalframework.org/~john/rgl-browser/] tool allows you to interactively browse through The [RGL Browser http://www.grammaticalframework.org/~john/rgl-browser/] tool allows you to interactively browse through

View File

@@ -43,7 +43,7 @@ $endfor$
$if(title)$ $if(title)$
<header id="title-block-header"> <header id="title-block-header">
<a href="$rel-root$" title="Home"> <a href="$rel-root$" title="Home">
<img src="$rel-root$/doc/Logos/gf1.svg" height="200px" class="float-md-right ml-3 mb-3 bg-white" alt="GF Logo"> <img src="$rel-root$/doc/Logos/gf1.svg" height="200" class="float-md-right ml-3 mb-3 bg-white" alt="GF Logo">
</a> </a>
<h1 class="title">$title$</h1> <h1 class="title">$title$</h1>
$if(subtitle)$ $if(subtitle)$
@@ -113,8 +113,7 @@ $endif$
</div> </div>
<div class="col-6 col-sm-3"> <div class="col-6 col-sm-3">
<h6 class="text-muted">Contribute</i> <h6 class="text-muted">Contribute</h6>
</h6>
<ul class="list-unstyled"> <ul class="list-unstyled">
<li><a href="http://groups.google.com/group/gf-dev">Mailing List</a></li> <li><a href="http://groups.google.com/group/gf-dev">Mailing List</a></li>
<li><a href="https://github.com/GrammaticalFramework/gf-core/issues">Issue Tracker</a></li> <li><a href="https://github.com/GrammaticalFramework/gf-core/issues">Issue Tracker</a></li>
@@ -129,8 +128,8 @@ $endif$
<a href="https://github.com/GrammaticalFramework/gf-rgl">RGL</a> · <a href="https://github.com/GrammaticalFramework/gf-rgl">RGL</a> ·
<a href="https://github.com/GrammaticalFramework/gf-contrib">Contributions</a> <a href="https://github.com/GrammaticalFramework/gf-contrib">Contributions</a>
</div> </div>
<div> </div>
<div> </div>
</footer> </footer>
$for(include-after)$ $for(include-after)$
$include-after$ $include-after$

View File

@@ -6,8 +6,16 @@ oper
vow : pattern Str = #("َ" | "ِ" | "ُ" | "ً" | "ٍ" | "ٌ") ; vow : pattern Str = #("َ" | "ِ" | "ُ" | "ً" | "ٍ" | "ٌ") ;
vstar : pattern Str = #("َ"|"ِ"|"ُ"|"ً"|"ٍ"|"ٌ"|"ْ"|"ا"|"ي"|"و") ; -- long or short vowels
astar : pattern Str = #("َ"|"ً"|"ا") ; -- a: short, nunated or long
istar : pattern Str = #("ِ"|"ي"|"يْ") ; -- i: short, long or long with sukun
ustar : pattern Str = #("ُ"|"و"|"وْ") ; -- u: short, long or long with sukun
weak : pattern Str = #("و"|"ي") ; weak : pattern Str = #("و"|"ي") ;
hamzaseat : pattern Str = #("أ"|"ؤ"|"ئ") ;
-- "Sun letters": assimilate with def. article -- "Sun letters": assimilate with def. article
sun : pattern Str = #("ت"|"ث"|"د"|"ذ"|"ر"|"ز"|"س"|"ش"|"ص"|"ض"|"ط"|"ظ"|"ل"|"ن") ; sun : pattern Str = #("ت"|"ث"|"د"|"ذ"|"ر"|"ز"|"س"|"ش"|"ص"|"ض"|"ط"|"ظ"|"ل"|"ن") ;
@@ -30,19 +38,19 @@ oper
rectifyHmz : Str -> Str = \word -> rectifyHmz : Str -> Str = \word ->
case word of { case word of {
l@(""|"ال") + ("أ"|"أَ") + #hamza + "ْ" + tail => l + "آ" + tail; l@(""|"ل"|"ال") + ("أ"|"أَ") + #hamza + "ْ" + tail => l + "آ" + tail;
l@(""|"ال") + ("أ"|"أَ") + #hamza + tail => l + "آ" + tail; l@(""|"ل"|"ال") + ("أ"|"أَ") + #hamza + tail => l + "آ" + tail;
l@(""|"ال") + #hamza + v@("َ"|"ُ") + tail => l + "أ" + v + tail; l@(""|"ال") + #hamza + v@("َ"|"ُ") + tail => l + "أ" + v + tail;
l@(""|"ال") + #hamza + v@("ِ") + tail => l + "إ" + v + tail; l@(""|"ال") + #hamza + v@("ِ") + tail => l + "إ" + v + tail;
head + v1@(#vow|"ْ"|"ا"|"ي"|"و") head + v1@#vstar
+ #hamza + v2@(#vow|"ْ") + tail => + #hamza + v2@(#vow|"ْ") + tail =>
case v2 of { "ْ" => head + v1 + bHmz v1 v2 + tail ; -- unsure about this /IL case v2 of { "ْ" => head + v1 + bHmz v1 v2 + tail ; -- unsure about this /IL
_ => head + v1 + bHmz v1 v2 + v2 + tail } ; _ => head + v1 + bHmz v1 v2 + v2 + tail } ;
head + v1@(#vow|"ْ"|"ا"|"ي"|"و") -- the same but it ends in vowel head + v1@#vstar -- the same but it ends in vowel
+ #hamza + v2@(#vow|"ْ") => + #hamza + v2@(#vow|"ْ") =>
case v2 of { "ْ" => head + v1 + tHmz v1 ; case v2 of { "ْ" => head + v1 + tHmz v1 ;
_ => head + v1 + tHmz v1 + v2 } ; _ => head + v1 + tHmz v1 + v2 } ;
head + v1@(#vow|"ْ"|"ا"|"ي"|"و") -- the same but it ends without vowel head + v1@#vstar -- the same but it ends without vowel
+ #hamza => head + v1 + tHmz v1 ; + #hamza => head + v1 + tHmz v1 ;
head + #hamza + tail => head + (bHmz (dp 2 head) (take 2 tail)) + tail; --last head , take 1 tail head + #hamza + tail => head + (bHmz (dp 2 head) (take 2 tail)) + tail; --last head , take 1 tail
@@ -57,11 +65,12 @@ oper
}; };
--hamza in middle of word (body) --hamza in middle of word (body)
-- relaxing the pattern matching, so that we can call it from ResAra.sing /IL
bHmz : Str -> Str -> Str = \d1,d2 -> bHmz : Str -> Str -> Str = \d1,d2 ->
case <d1,d2> of { case <d1,d2> of {
<"ِ",_> | <_,"ِ"> => "ئ"; <_+#istar,_> | <_,#istar> => "ئ";
<"ُ",_> | <_,"ُ"> => "ؤ"; <_+#ustar,_> | <_,#ustar> => "ؤ";
<"َ",_> | <_,"َ"> => "أ"; <_+"َ" ,_> | <_,"َ"> => "أ"; -- #astar would allow double alif
_ => "ء" _ => "ء"
}; };
@@ -71,7 +80,7 @@ oper
"ِ" => "ئ"; "ِ" => "ئ";
"ُ" => "ؤ"; "ُ" => "ؤ";
"َ" => "أ"; "َ" => "أ";
"ْ"|"ا"|"و"|"ي" => "ء" _ => "ء" -- long vowels and sukun
}; };
} }

View File

@@ -530,12 +530,11 @@ resource ParadigmsAra = open
sdfN = sdfN =
\root,sg,gen,spec -> \root,sg,gen,spec ->
let { kalimaStr = mkWord sg root; let { kalimaStr = mkWord sg root;
kalimaRaw = sndf kalimaStr; kalimaRaw : NTable = case gen of {
kalima : NTable = \\n,d,c => case root of { Fem => sndf kalimaStr ;
_ + #hamza + _ Masc => sgMsndf kalimaStr } ;
=> rectifyHmz (kalimaRaw ! n ! d ! c); kalima : NTable = \\n,d,c =>
_ => kalimaRaw ! n ! d ! c rectifyHmz (kalimaRaw ! n ! d ! c)
};
} in mkFullN kalima gen spec; } in mkFullN kalima gen spec;
sdmN = sdmN =

View File

@@ -75,9 +75,9 @@ resource ResAra = PatternsAra ** open Prelude, Predef, OrthoAra, ParamX in {
-- a word, deducing which root consonant is weak -- a word, deducing which root consonant is weak
mkWeak : Pattern -> Root3 -> Str = \pat,fcl -> mkWeak : Pattern -> Root3 -> Str = \pat,fcl ->
case <fcl.f,fcl.c,fcl.l> of { case <fcl.f,fcl.c,fcl.l> of {
<_,_,("و"|"ي"|"ّ")> => mkDefective pat fcl; <_,_,#weak|"ّ"> => mkDefective pat fcl;
<_,("و"|"ي"),_> => mkHollow pat fcl; <_,#weak,_> => mkHollow pat fcl;
<("و"|"ي"),_,_> => mkAssimilated pat fcl <#weak,_,_> => mkAssimilated pat fcl
}; };
mkBilit : Pattern -> Root2 -> Str = \p,fcl -> mkBilit : Pattern -> Root2 -> Str = \p,fcl ->
@@ -990,12 +990,12 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf ->
APosit Masc n d c => case n of { APosit Masc n d c => case n of {
Sg => indeclN aHmar ! d ! c ; Sg => indeclN aHmar ! d ! c ;
Dl => dual aHmar ! d ! c ; Dl => dual aHmar ! d ! c ;
Pl => sing Humr ! d ! c Pl => brkPl Humr ! d ! c
}; };
APosit Fem n d c => case n of { APosit Fem n d c => case n of {
Sg => indeclN HamrA' ! d ! c; Sg => indeclN HamrA' ! d ! c;
Dl => dual ((tk 2 HamrA') + "و") ! d ! c; Dl => dual ((tk 2 HamrA') + "و") ! d ! c;
Pl => sing Humr ! d ! c Pl => brkPl Humr ! d ! c
}; };
AComp d c => indeclN aHmar ! d ! c AComp d c => indeclN aHmar ! d ! c
}; };
@@ -1011,7 +1011,7 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf ->
table { table {
Sg => sing kitAb ; Sg => sing kitAb ;
Dl => dual kitAb ; Dl => dual kitAb ;
Pl => sing kutub Pl => brkPl kutub
}; };
--takes the sound noun in singular and gives the --takes the sound noun in singular and gives the
@@ -1024,6 +1024,16 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf ->
Pl => plurF lawHa Pl => plurF lawHa
}; };
--takes the sound noun in singular and gives the
--complete noun inflection table of sound feminine plural
sgMsndf : Str -> NTable =
\lawHa ->
table {
Sg => sing lawHa ;
Dl => dual lawHa ;
Pl => singMplurF lawHa
};
--takes the sound noun in singular and gives the --takes the sound noun in singular and gives the
--complete inflection table of sound masculine plural nominals --complete inflection table of sound masculine plural nominals
sndm : Str -> NTable = sndm : Str -> NTable =
@@ -1034,14 +1044,16 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf ->
Pl => plurM muzAric Pl => plurM muzAric
}; };
-- takes a singular or broken plural word and tests the ending to -- takes a singular or broken plural word and tests the ending to
-- determine the declension and gives the corresponding inf table -- determine the declension and gives the corresponding inf table
sing : Str -> State => Case => Str = \word -> brkPl : Str -> State => Case => Str = \word ->
\\s,c => defArt s c (case word of { \\s,c => defArt s c (case word of {
lemma + "ِيّ" => fixShd word (decNisba ! s ! c) ; lemma + "ِيّ" => fixShd word (decNisba ! s ! c) ;
lemma + "ِي" => fixShd lemma (dec2sg ! s ! c) ; lemma + "ِي" => fixShd lemma (dec2sg ! s ! c) ;
_ + ("ا"|"ى") => fixShd word (dec3sg ! s ! c) ; _ + ("ا"|"ى") => fixShd word (dec3sg ! s ! c) ;
lemma + ("ء"|"أ"|"ئ"|"ؤ") => word + dec1sgNoDoubleAlif ! s ! c ; lemma + (#hamza|#hamzaseat)
=> word + dec1sgNoDoubleAlif ! s ! c ;
lemma + "ة" => case s of { lemma + "ة" => case s of {
Poss => lemma + "ت" + dec1sg ! s ! c ; Poss => lemma + "ت" + dec1sg ! s ! c ;
_ => word + dec1sgNoDoubleAlif ! s ! c _ => word + dec1sgNoDoubleAlif ! s ! c
@@ -1049,6 +1061,22 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf ->
_ => fixShd word (dec1sg ! s ! c) _ => fixShd word (dec1sg ! s ! c)
}) ; }) ;
sing : Str -> State => Case => Str = \word ->
\\s,c => case word of {
-- This only applies for singular indefinite
x + y@? + #hamza => defArt s c (
case <s,c> of { -- if hamza was last, it's now in the body
<Indef,Acc> =>
case y of {
#vstar => word + dec1sgNoDoubleAlif ! Indef ! Acc ;
_ => let an : Str = dec1sg ! Indef ! Acc ;
hmz : Str = bHmz x an ;
in x + y + hmz + an } ;
_ => word + dec1sg ! s ! c }) ;
-- The rest is identical with singulars and broken plurals
_ => brkPl word ! s ! c
} ;
-- takes a singular word and tests the ending to -- takes a singular word and tests the ending to
-- determine the declension and gives the corresponding dual inf table -- determine the declension and gives the corresponding dual inf table
@@ -1065,6 +1093,12 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf ->
\kalima -> \kalima ->
\\s,c => defArt s c (mkAt kalima) + f_pl ! s ! c ; \\s,c => defArt s c (mkAt kalima) + f_pl ! s ! c ;
-- takes a singular masculine word and gives the corresponding
-- sound plural feminine table
singMplurF : Str -> State => Case => Str =
\ijra' ->
\\s,c => defArt s c (mkAtMasc ijra') + f_pl ! s ! c ;
-- takes a singular word and gives the corresponding sound -- takes a singular word and gives the corresponding sound
--plural masculine table. FIXME: consider declension 3 --plural masculine table. FIXME: consider declension 3
plurM : Str -> State => Case => Str = plurM : Str -> State => Case => Str =
@@ -1196,6 +1230,12 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf ->
} }
}; };
mkAtMasc : Str -> Str = \x ->
case x of {
y + "ة" => y + "ات";
y + "ى" => y + "يَات"; -- TODO check does this happen?
_ => x + "ات"
};
mkAt : Str -> Str = \bayDo -> mkAt : Str -> Str = \bayDo ->
case bayDo of { case bayDo of {

View File

@@ -13,17 +13,19 @@ instance DiffCat of DiffRomance - [partAgr,vpAgrSubj,vpAgrClits] = open CommonRo
-------------------------------- --------------------------------
param param
Prepos = P_de | P_a ; Prepos = P_de | P_a | P_per ;
VType = VHabere | VRefl ; VType = VHabere | VRefl ;
oper oper
dative : Case = CPrep P_a ; dative : Case = CPrep P_a ;
genitive : Case = CPrep P_de ; genitive : Case = CPrep P_de ;
ablative : Case = CPrep P_per ;
prepCase = \c -> case c of { prepCase = \c -> case c of {
Nom => [] ; Nom => [] ;
Acc => [] ; Acc => [] ;
CPrep P_de => elisDe ; CPrep P_de => elisDe ;
CPrep P_per => "per" ;
CPrep P_a => "a" CPrep P_a => "a"
} ; } ;
@@ -32,12 +34,16 @@ oper
case <g,n,c> of { ---- TODO: check the NP forms case <g,n,c> of { ---- TODO: check the NP forms
<Masc,Sg, CPrep P_de> => pre {"del" ; ("de l'" ++ Predef.BIND) / vocalForta} ; <Masc,Sg, CPrep P_de> => pre {"del" ; ("de l'" ++ Predef.BIND) / vocalForta} ;
<Masc,Sg, CPrep P_a> => pre {"al" ; ("a l'" ++ Predef.BIND) / vocalForta} ; <Masc,Sg, CPrep P_a> => pre {"al" ; ("a l'" ++ Predef.BIND) / vocalForta} ;
<Masc,Sg, _> => elisEl ;
<Fem, Sg, _> => prepCase c ++ elisLa ;
<Masc,Pl, CPrep P_de> => "dels" ; <Masc,Pl, CPrep P_de> => "dels" ;
<Fem, Pl, CPrep P_de> => ["de les"] ; <Fem, Pl, CPrep P_de> => ["de les"] ;
<Masc,Sg, CPrep P_per> => "pel" ;
<Fem, Sg, CPrep P_per> => ["per la"] ;
<Masc,Pl, CPrep P_per> => "pels" ;
<Fem, Pl, CPrep P_per> => ["per les"] ;
<Masc,Pl, CPrep P_a> => "als" ; <Masc,Pl, CPrep P_a> => "als" ;
<Fem, Pl, CPrep P_a> => ["a les"] ; <Fem, Pl, CPrep P_a> => ["a les"] ;
<Masc,Sg, _> => elisEl ;
<Fem, Sg, _> => prepCase c ++ elisLa ;
<Masc, Pl, _ > => "els" ; <Masc, Pl, _ > => "els" ;
<Fem, Pl, _ > => "les" <Fem, Pl, _ > => "les"
} ; } ;

View File

@@ -45,8 +45,8 @@ lin
s1 = heading1 (nounHeading adjective_Category).s ; s1 = heading1 (nounHeading adjective_Category).s ;
s2 = frameTable ( s2 = frameTable (
tr (th "" ++ th (heading singular_Parameter) ++ th (heading plural_Parameter)) ++ tr (th "" ++ th (heading singular_Parameter) ++ th (heading plural_Parameter)) ++
tr (th (heading masculine_Parameter) ++ td (adj.s ! Posit ! (AF Masc Sg)) ++ td (adj.s ! Posit ! (AF Masc Pl))) ++ tr (th (heading masculine_Parameter) ++ td (adj.s ! Posit ! (genNum2Aform Masc Sg)) ++ td (adj.s ! Posit ! (genNum2Aform Masc Pl))) ++
tr (th (heading feminine_Parameter) ++ td (adj.s ! Posit ! (AF Fem Sg)) ++ td (adj.s ! Posit ! (AF Fem Pl))) tr (th (heading feminine_Parameter) ++ td (adj.s ! Posit ! (genNum2Aform Fem Sg)) ++ td (adj.s ! Posit ! (genNum2Aform Fem Pl)))
) )
} ; } ;

View File

@@ -1,7 +1,7 @@
--# -path=.:../romance:../common:../abstract:../../prelude --# -path=.:../romance:../common:../abstract:../../prelude
concrete LexiconCat of Lexicon = CatCat ** open concrete LexiconCat of Lexicon = CatCat ** open
(M=MorphoCat), ParadigmsCat, BeschCat in { (M=MorphoCat), ParadigmsCat, BeschCat, (D = DiffCat) in {
flags flags
coding=utf8 ; coding=utf8 ;
@@ -28,7 +28,7 @@ lin
become_VA = reflV (mkV "tornar") ; -- esdevenir become_VA = reflV (mkV "tornar") ; -- esdevenir
beer_N = regFN "cervesa" ; beer_N = regFN "cervesa" ;
beg_V2V = mkV2V (mkV "demanar") accusative dative ; beg_V2V = mkV2V (mkV "demanar") accusative dative ;
big_A = regADeg "gros" ; big_A = mkA "gros" "grossa" ;
bike_N = regFN "bicicleta" ; bike_N = regFN "bicicleta" ;
bird_N = regMN "ocell" ; bird_N = regMN "ocell" ;
black_A = compADeg (mkA "negre" "negra" "negres" "negres" "negrament") ; black_A = compADeg (mkA "negre" "negra" "negres" "negres" "negrament") ;
@@ -92,7 +92,7 @@ lin
girl_N = regFN "noia" ; girl_N = regFN "noia" ;
glove_N = regMN "guant" ; glove_N = regMN "guant" ;
gold_N = regMN "or" ; gold_N = regMN "or" ;
good_A = prefA (mkADeg (mkA "bo" "bona") (mkA "millor")) ; good_A = mkA (prefA "bo" "bon") (mkA "millor") ;
go_V = (verbV (anar_4 "anar")) ; go_V = (verbV (anar_4 "anar")) ;
green_A = regADeg "verd" ; green_A = regADeg "verd" ;
harbour_N = regMN "port" ; harbour_N = regMN "port" ;
@@ -361,7 +361,7 @@ lin
language_N = mkN "llengua" ; -- llengües language_N = mkN "llengua" ; -- llengües
rule_N = regFN "regla" ; rule_N = regFN "regla" ;
question_N = regFN "pregunta" ; question_N = regFN "pregunta" ;
ready_A = regA "preparat" ; ready_A = adjCopula (regA "preparat") D.estarCopula ;
reason_N = regFN "raó" ; reason_N = regFN "raó" ;
uncertain_A = regA "incert" ; uncertain_A = regA "incert" ;

View File

@@ -94,14 +94,19 @@ oper
-- Here are some patterns. First one that describes the worst case. -- Here are some patterns. First one that describes the worst case.
-- gcc M2.1 -- gcc M2.1
mkAdj : (_,_,_,_,_ : Str) -> Adj = \prim,prima,prims,primes,primament -> mkAdjFull : (x1,_,_,_,_,x6 : Str) -> Adj = \bon,bo,prima,prims,primes,primament ->
{s = table { {s = table {
AF Masc n => numForms prim prims ! n ; ASg Masc AAttr => bon ;
AF Fem n => numForms prima primes ! n ; ASg Masc APred => bo ;
ASg Fem _ => prima ;
APl Masc => prims ;
APl Fem => primes ;
AA => primament AA => primament
} }
} ; } ;
mkAdj : (x1,_,_,_,x5 : Str) -> Adj = \a,b,c,d,e -> mkAdjFull a a b c d e ;
--- Then the regular and invariant patterns. --- Then the regular and invariant patterns.
adjPrim : Str -> Adj = \prim -> adjPrim : Str -> Adj = \prim ->
@@ -116,16 +121,15 @@ oper
let fond = Predef.tk 1 fondo let fond = Predef.tk 1 fondo
in adjBlau fondo (fond + "a") ; in adjBlau fondo (fond + "a") ;
adjBo : Str -> Adj = \bo -> adjBo : (bo,bon : Str) -> Adj = \bo,bon ->
mkAdj bo (bo + "na") (bo + "ns") (bo + "nes") (bo + "nament") ; mkAdjFull bon bo (bon + "a") (bon + "s") (bon + "es") (bon + "ament") ;
adjFidel : Str -> Adj = \fidel -> adjFidel : Str -> Adj = \fidel ->
let fidels : Str = case (last fidel) of { let fidels : Str = case (last fidel) of {
_ + ("s"|"ç"|"x") => fidel + "os" ; --feliç; capaç _ + ("s"|"ç"|"x") => fidel + "os" ; --feliç; capaç
_ => fidel + "s" _ => fidel + "s"
} ; } ;
in mkAdj fidel fidel fidels fidels in mkAdj fidel fidel fidels fidels (fidel + "ment") ;
(fidel + "ment") ;
--boig, boja, bojos, boges --boig, boja, bojos, boges
--lleig, lletja, lletjos, lletges --lleig, lletja, lletjos, lletges
@@ -300,6 +304,6 @@ oper unaccent : Str -> Str = \vocal ->
-- Determiners, traditionally called indefinite pronouns, are inflected -- Determiners, traditionally called indefinite pronouns, are inflected
-- in gender and number, like adjectives. -- in gender and number, like adjectives.
pronForms : Adj -> Gender -> Number -> Str = \tal,g,n -> tal.s ! AF g n ; pronForms : Adj -> Gender -> Number -> Str = \tal,g,n -> tal.s ! genNum2Aform g n ;
} }

View File

@@ -154,7 +154,10 @@ oper
-- In the worst case, two separate adjectives are given: -- In the worst case, two separate adjectives are given:
-- the positive ("bo"), and the comparative ("millor"). -- the positive ("bo"), and the comparative ("millor").
mkA : (bo : A) -> (millor : A) -> A -- special comparison (default with "mas") mkA : (bo : A) -> (millor : A) -> A ; -- special comparison (default with "mas")
mkA : A -> CopulaType -> A -- force copula type
} ; } ;
-- The functions above create postfix adjectives. To switch -- The functions above create postfix adjectives. To switch
@@ -164,6 +167,7 @@ oper
-- JS: What about vi bo -> bon vi ? -- JS: What about vi bo -> bon vi ?
prefixA : A -> A ; -- adjective before noun (default: after) prefixA : A -> A ; -- adjective before noun (default: after)
adjCopula : A -> CopulaType -> A ; -- force copula type
--3 Two-place adjectives --3 Two-place adjectives
@@ -324,19 +328,23 @@ oper
makeNP x g n = {s = (pn2np (mk2PN x g)).s; a = agrP3 g n ; hasClit = False ; isPol = False ; isNeg = False} ** {lock_NP = <>} ; makeNP x g n = {s = (pn2np (mk2PN x g)).s; a = agrP3 g n ; hasClit = False ; isPol = False ; isNeg = False} ** {lock_NP = <>} ;
mk5A a b c d e = mk5A a b c d e =
compADeg {s = \\_ => (mkAdj a b c d e).s ; isPre = False ; lock_A = <>} ; compADeg {s = \\_ => (mkAdj a b c d e).s ; isPre = False ; copTyp = serCopula ; lock_A = <>} ;
mk2A a b = compADeg {s = \\_ => (mkAdj2Reg a b).s ; isPre = False ; lock_A = <>} ; mk2A a b = compADeg {s = \\_ => (mkAdj2Reg a b).s ; isPre = False ; copTyp = serCopula ; lock_A = <>} ;
regA a = compADeg {s = \\_ => (mkAdjReg a).s ; isPre = False ; lock_A = <>} ; regA a = compADeg {s = \\_ => (mkAdjReg a).s ; isPre = False ; copTyp = serCopula ; lock_A = <>} ;
prefA a = {s = a.s ; isPre = True ; lock_A = <>} ; prefA = overload {
prefA : A -> A = \a -> a ** {isPre = True} ;
prefA : Str -> Str -> A = \bo,bon ->
compADeg (lin A {s = \\_ => (adjBo bo bon).s ; isPre = True ; copTyp = serCopula}) ;
} ;
mkA2 a p = a ** {c2 = p ; lock_A2 = <>} ; mkA2 a p = a ** {c2 = p ; lock_A2 = <>} ;
mkADeg a b = mkADeg a b =
{s = table {Posit => a.s ! Posit ; _ => b.s ! Posit} ; {s = table {Posit => a.s ! Posit ; _ => b.s ! Posit} ;
isPre = a.isPre ; lock_A = <>} ; isPre = a.isPre ; copTyp = serCopula ; lock_A = <>} ;
compADeg a = compADeg a =
{s = table {Posit => a.s ! Posit ; _ => \\f => "més" ++ a.s ! Posit ! f} ; {s = table {Posit => a.s ! Posit ; _ => \\f => "més" ++ a.s ! Posit ! f} ;
isPre = a.isPre ; isPre = a.isPre ; copTyp = a.copTyp ;
lock_A = <>} ; lock_A = <>} ;
regADeg a = compADeg (regA a) ; regADeg a = compADeg (regA a) ;
@@ -425,7 +433,7 @@ oper
special_ppV ve pa = { special_ppV ve pa = {
s = table { s = table {
VPart g n => (regA pa).s ! Posit ! AF g n ; VPart g n => (regA pa).s ! Posit ! genNum2Aform g n ;
p => ve.s ! p p => ve.s ! p
} ; } ;
lock_V = <> ; lock_V = <> ;
@@ -496,6 +504,7 @@ oper
mkA : (lleig,lletja : Str) -> A = mk2A ; mkA : (lleig,lletja : Str) -> A = mk2A ;
mkA : (fort,forta,forts,fortes,fortament : Str) -> A = mk5A ; mkA : (fort,forta,forts,fortes,fortament : Str) -> A = mk5A ;
mkA : (bo : A) -> (millor : A) -> A = mkADeg ; mkA : (bo : A) -> (millor : A) -> A = mkADeg ;
mkA : A -> CopulaType -> A = adjCopula ;
} ; } ;
mk5A : (fort,forta,forts,fortes,fortament : Str) -> A ; mk5A : (fort,forta,forts,fortes,fortament : Str) -> A ;
@@ -504,8 +513,12 @@ oper
mkADeg : A -> A -> A ; mkADeg : A -> A -> A ;
compADeg : A -> A ; compADeg : A -> A ;
regADeg : Str -> A ; regADeg : Str -> A ;
prefA : A -> A ; prefA : overload {
prefA : A -> A ; -- gran
prefA : (bo,bon : Str) -> A -- predicative masc, attributive masc
} ;
prefixA = prefA ; prefixA = prefA ;
adjCopula a cop = a ** {copTyp = cop} ;
mkV = overload { mkV = overload {
mkV : (cantar : Str) -> V = \x -> verbV (regV x) ; mkV : (cantar : Str) -> V = \x -> verbV (regV x) ;

View File

@@ -455,6 +455,9 @@ mkInterj : Str -> Interj
mkOrd : Str -> Ord = \x -> lin Ord { s = regGenitiveS x}; mkOrd : Str -> Ord = \x -> lin Ord { s = regGenitiveS x};
invarA : Str -> A ;
invarA a = mkAdjective a a a a ;
mk2A a b = mkAdjective a a a b ; mk2A a b = mkAdjective a a a b ;
regA a = case a of { regA a = case a of {
_ + ("a" | "e" | "i" | "o" | "u" | "y") + ? + _ + _ + ("a" | "e" | "i" | "o" | "u" | "y") + ? + _ +

View File

@@ -45,8 +45,8 @@ lin
s1 = heading1 (nounHeading adjective_Category).s ; s1 = heading1 (nounHeading adjective_Category).s ;
s2 = frameTable ( s2 = frameTable (
tr (th "" ++ th (heading singular_Parameter) ++ th (heading plural_Parameter)) ++ tr (th "" ++ th (heading singular_Parameter) ++ th (heading plural_Parameter)) ++
tr (th (heading masculine_Parameter) ++ td (adj.s ! Posit ! (AF Masc Sg)) ++ td (adj.s ! Posit ! (AF Masc Pl))) ++ tr (th (heading masculine_Parameter) ++ td (adj.s ! Posit ! (genNum2Aform Masc Sg)) ++ td (adj.s ! Posit ! (genNum2Aform Masc Pl))) ++
tr (th (heading feminine_Parameter) ++ td (adj.s ! Posit ! (AF Fem Sg)) ++ td (adj.s ! Posit ! (AF Fem Pl))) tr (th (heading feminine_Parameter) ++ td (adj.s ! Posit ! (genNum2Aform Fem Sg)) ++ td (adj.s ! Posit ! (genNum2Aform Fem Pl)))
) )
} ; } ;

View File

@@ -18,7 +18,7 @@ lin
bad_A = prefA (mkADeg (regA "mauvais") (regA "pire")) ; bad_A = prefA (mkADeg (regA "mauvais") (regA "pire")) ;
bank_N = regGenN "banque" feminine ; bank_N = regGenN "banque" feminine ;
beautiful_A = beautiful_A =
prefA (compADeg (mkA (pre {voyelle => "bel" ; _ => "beau" }) "belle" "beaux" "bellement")) ; prefA (compADeg (mkA "beau" "bel" "beaux" "belle" "bellement")) ;
become_VA = mkVA devenir_V ; become_VA = mkVA devenir_V ;
beer_N = regGenN "bière" feminine ; beer_N = regGenN "bière" feminine ;
beg_V2V = mkV2V (regV "demander") accusative dative ; beg_V2V = mkV2V (regV "demander") accusative dative ;
@@ -129,11 +129,11 @@ lin
music_N = regGenN "musique" feminine ; music_N = regGenN "musique" feminine ;
narrow_A = regA "étroit" ; narrow_A = regA "étroit" ;
new_A = new_A =
prefA (compADeg (mkA (pre {voyelle => "nouvel" ; _ => "nouveau" }) "nouvelle" "nouveaux" "nouvellement")) ; prefA (compADeg (mkA "nouveau" "nouvel" "nouveaux" "nouvelle" "nouvellement")) ;
newspaper_N = regGenN "journal" masculine ; newspaper_N = regGenN "journal" masculine ;
oil_N = regGenN "huile" feminine ; oil_N = regGenN "huile" feminine ;
old_A = old_A =
prefA (compADeg (mkA (pre {voyelle => "vieil" ; _ => "vieux" }) "vieille" "vieux" "vieillement")) ; prefA (compADeg (mkA "vieux" "vieil" "vieux" "vieille" "vieillement")) ;
open_V2 = ouvrir_V2 ; open_V2 = ouvrir_V2 ;
paint_V2A = mkV2A (v2V peindre_V2) accusative (mkPrep "en") ; paint_V2A = mkV2A (v2V peindre_V2) accusative (mkPrep "en") ;
paper_N = regGenN "papier" masculine ; paper_N = regGenN "papier" masculine ;

View File

@@ -72,14 +72,19 @@ oper
-- Adjectives are conveniently seen as gender-dependent nouns. -- Adjectives are conveniently seen as gender-dependent nouns.
-- Here are some patterns. First one that describes the worst case. -- Here are some patterns. First one that describes the worst case.
mkAdj : (_,_,_,_ : Str) -> Adj = \vieux,vieuxs,vieille,vieillement -> mkAdj' : (_,_,_,_,_ : Str) -> Adj ;
{s = table { mkAdj' vieux vieil vieuxs vieille vieillement = {
AF Masc n => numForms vieux vieuxs ! n ; s = table {
AF Fem n => nomReg vieille ! n ; ASg Masc _ => pre {#voyelle => vieil ; "h" => vieil ; _ => vieux} ;
ASg Fem _ => vieille ;
APl g => genForms vieuxs (vieille + "s") ! g ;
AA => vieillement AA => vieillement
} }
} ; } ;
mkAdj : (_,_,_,_ : Str) -> Adj ;
mkAdj bleu bleus bleue bleuement = mkAdj' bleu bleu bleus bleue bleuement ;
-- Then the regular and invariant patterns. -- Then the regular and invariant patterns.
adjReg : Str -> Gender => Number => Str = \bu -> table { adjReg : Str -> Gender => Number => Str = \bu -> table {

View File

@@ -160,15 +160,21 @@ oper
mkA : (banal,banale,banaux : Str) -> A ; mkA : (banal,banale,banaux : Str) -> A ;
-- This is the worst-case paradigm for the positive forms. -- This is the worst-case paradigm for the positive forms, except for "vieux/vieil".
mkA : (banal,banale,banaux,banalement : Str) -> A ; -- worst-case adjective mkA : (banal,banale,banaux,banalement : Str) -> A ; -- almost worst-case adjective
-- This is the worst-case paradigm for the positive forms, used for "vieux/vieil".
mkA : (vieux,vieil,vieille,vieuxs,vieuxment : Str) -> A ; -- worst-case adjetive
-- If comparison forms are irregular (i.e. not formed by "plus", e.g. -- If comparison forms are irregular (i.e. not formed by "plus", e.g.
-- "bon-meilleur"), the positive and comparative can be given as separate -- "bon-meilleur"), the positive and comparative can be given as separate
-- adjectives. -- adjectives.
mkA : A -> A -> A -- irregular comparison, e.g. bon-meilleur mkA : A -> A -> A ; -- irregular comparison, e.g. bon-meilleur
mkA : A -> CopulaType -> A -- force copula type
} ; } ;
-- The functions create by default postfix adjectives. To switch -- The functions create by default postfix adjectives. To switch
@@ -387,9 +393,11 @@ oper
mkPN : N -> PN = \x -> lin PN {s = x.s ! Sg ; g = x.g} ; mkPN : N -> PN = \x -> lin PN {s = x.s ! Sg ; g = x.g} ;
} ; } ;
mk4A a b c d = compADeg {s = \\_ => (mkAdj a c b d).s ; isPre = False ; lock_A = <>} ; mk4A a b c d = mk5A a a b c d ;
regA a = compADeg {s = \\_ => (mkAdjReg a).s ; isPre = False ; lock_A = <>} ; mk5A a b c d e = compADeg {s = \\_ => (mkAdj' a b c d e).s ; isPre = False ; copTyp = serCopula ; lock_A = <>} ;
prefA a = {s = a.s ; isPre = True ; lock_A = <>} ; regA a = compADeg {s = \\_ => (mkAdjReg a).s ; isPre = False ; copTyp = serCopula ; lock_A = <>} ;
prefA a = {s = a.s ; isPre = True ; copTyp = a.copTyp ; lock_A = <>} ;
adjCopula a cop = a ** {copTyp = cop} ;
mkA2 a p = a ** {c2 = p ; lock_A2 = <>} ; mkA2 a p = a ** {c2 = p ; lock_A2 = <>} ;
@@ -398,10 +406,12 @@ oper
mkA : (sec,seche : Str) -> A = \sec,seche -> mk4A sec seche (sec + "s") (seche + "ment") ; mkA : (sec,seche : Str) -> A = \sec,seche -> mk4A sec seche (sec + "s") (seche + "ment") ;
mkA : (banal,banale,banaux : Str) -> A = \sec,seche,secs -> mk4A sec seche secs (seche + "ment") ; mkA : (banal,banale,banaux : Str) -> A = \sec,seche,secs -> mk4A sec seche secs (seche + "ment") ;
mkA : (banal,banale,banaux,banalement : Str) -> A = mk4A ; mkA : (banal,banale,banaux,banalement : Str) -> A = mk4A ;
mkA : A -> A -> A = mkADeg mkA : (vieux,vieil,vieille,vieuxs,vieuxment : Str) -> A = mk5A ;
mkA : A -> A -> A = mkADeg ;
mkA : A -> CopulaType -> A = adjCopula ;
}; };
prefixA a = {s = a.s ; isPre = True ; lock_A = <>} ; prefixA a = {s = a.s ; isPre = True ; copTyp = a.copTyp ; lock_A = <>} ;
mkAdv x = ss x ** {lock_Adv = <>} ; mkAdv x = ss x ** {lock_Adv = <>} ;
mkAdV x = ss x ** {lock_AdV = <>} ; mkAdV x = ss x ** {lock_AdV = <>} ;
@@ -471,16 +481,18 @@ oper
regA : Str -> A ; regA : Str -> A ;
mk4A : (banal,banale,banaux,banalement : Str) -> A ; mk4A : (banal,banale,banaux,banalement : Str) -> A ;
mk5A : (vieux,vieil,vieille,vieuxs,vieuxment : Str) -> A ; -- worst-case adjetive
prefA : A -> A ; prefA : A -> A ;
adjCopula : A -> CopulaType -> A ;
mkADeg a b = mkADeg a b =
{s = table {Posit => a.s ! Posit ; _ => b.s ! Posit} ; isPre = a.isPre ; lock_A = <>} ; {s = table {Posit => a.s ! Posit ; _ => b.s ! Posit} ; isPre = a.isPre ; copTyp = a.copTyp ; lock_A = <>} ;
compADeg a = compADeg a =
{s = table {Posit => a.s ! Posit ; _ => \\f => "plus" ++ a.s ! Posit ! f} ; {s = table {Posit => a.s ! Posit ; _ => \\f => "plus" ++ a.s ! Posit ! f} ;
isPre = a.isPre ; isPre = a.isPre ;
copTyp = a.copTyp ;
lock_A = <>} ; lock_A = <>} ;
prefA a = {s = a.s ; isPre = True ; lock_A = <>} ;
mkV = overload { mkV = overload {
mkV : Str -> V = regV ; mkV : Str -> V = regV ;

View File

@@ -13,9 +13,9 @@ in {
lin backen_V = irregV "backen" "bäckt" "backt" "backt" "gebacken" ; lin backen_V = irregV "backen" "bäckt" "backt" "backt" "gebacken" ;
lin backen_u_V = irregV "backen" "bäckt" "buk" "buke" "gebacken" ; lin backen_u_V = irregV "backen" "bäckt" "buk" "buke" "gebacken" ;
lin befehlen_V = irregV "befehlen" "befiehlt" "befahl" "beföhle" "befähle)" ; lin befehlen_V = irregV "befehlen" "befiehlt" "befahl" "beföhle" "befähle" ;
lin beginnen_V = irregV "beginnen" "beginnt" "begann" "begönne" "begänne)" ; lin beginnen_V = irregV "beginnen" "beginnt" "begann" "begönne" "begänne" ;
lin beißen_V = irregV "beißen" "beißt" "biß" "bisse" "gebissen" ; lin beißen_V = irregV "beißen" "beißt" "biss" "bisse" "gebissen" ;
lin bergen_V = irregV "bergen" "birgt" "barg" "bärge" "geborgen" ; lin bergen_V = irregV "bergen" "birgt" "barg" "bärge" "geborgen" ;
lin bersten_V = irregV "bersten" "birst" "barst" "bärste" "geborsten" ; lin bersten_V = irregV "bersten" "birst" "barst" "bärste" "geborsten" ;
lin bewegen_V = irregV "bewegen" "bewegt" "bewog" "bewöge" "bewogen" ; lin bewegen_V = irregV "bewegen" "bewegt" "bewog" "bewöge" "bewogen" ;
@@ -52,8 +52,8 @@ in {
lin flechten_V = irregV "flechten" "flicht" "flocht" "flöchte" "geflochten" ; lin flechten_V = irregV "flechten" "flicht" "flocht" "flöchte" "geflochten" ;
lin fliegen_V = irregV "fliegen" "fliegt" "flog" "flöge" "geflogen" ; lin fliegen_V = irregV "fliegen" "fliegt" "flog" "flöge" "geflogen" ;
lin fliehen_V = irregV "fliehen" "flieht" "floh" "flöhe" "geflohen" ; lin fliehen_V = irregV "fliehen" "flieht" "floh" "flöhe" "geflohen" ;
lin fließen_V = irregV "fließen" "fließt" "floß" "flösse" "geflossen" ; lin fließen_V = irregV "fließen" "fließt" "floss" "flösse" "geflossen" ;
lin fressen_V = irregV "fressen" "frißt" "fraß" "fräße" "gefressen" ; lin fressen_V = irregV "fressen" "frisst" "fraß" "fräße" "gefressen" ;
lin frieren_V = irregV "frieren" "friert" "fror" "fröre" "gefroren" ; lin frieren_V = irregV "frieren" "friert" "fror" "fröre" "gefroren" ;
lin gären_V = irregV "gären" "gärt" "gärte" "göre" "gegoren" ; lin gären_V = irregV "gären" "gärt" "gärte" "göre" "gegoren" ;
lin gären_o_V = irregV "gären" "gärt" "gor" "göre" "gegoren" ; lin gären_o_V = irregV "gären" "gärt" "gor" "göre" "gegoren" ;
@@ -65,11 +65,11 @@ in {
lin gelten_V = irregV "gelten" "gilt" "galt" "galte" "gegolten" ; lin gelten_V = irregV "gelten" "gilt" "galt" "galte" "gegolten" ;
lin gelten_o_V = irregV "gelten" "gilt" "galt" "golte" "gegolten" ; lin gelten_o_V = irregV "gelten" "gilt" "galt" "golte" "gegolten" ;
lin genesen_V = irregV "genesen" "genest" "genas" "genäse" "genesen" ; lin genesen_V = irregV "genesen" "genest" "genas" "genäse" "genesen" ;
lin genießen_V = irregV "genießen" "genießt" "genoß" "genösse" "genossen" ; lin genießen_V = irregV "genießen" "genießt" "genoss" "genösse" "genossen" ;
lin geschehen_V = irregV "geschehen" "geschieht" "geschah" "geschehen" "geschähe" ; lin geschehen_V = irregV "geschehen" "geschieht" "geschah" "geschehen" "geschähe" ;
lin gewinnen_V = irregV "gewinnen" "gewinnt" "gewann" "gewänne" "gewonnen" ; lin gewinnen_V = irregV "gewinnen" "gewinnt" "gewann" "gewänne" "gewonnen" ;
lin gewinnen_o_V = irregV "gewinnen" "gewinnt" "gewann" "gewönne" "gewonnen" ; lin gewinnen_o_V = irregV "gewinnen" "gewinnt" "gewann" "gewönne" "gewonnen" ;
lin gießen_V = irregV "gießen" "gießt" "goß" "gösse" "gegossen" ; lin gießen_V = irregV "gießen" "gießt" "goss" "gösse" "gegossen" ;
lin gleichen_V = irregV "gleichen" "gleicht" "glich" "gliche" "geglichen" ; lin gleichen_V = irregV "gleichen" "gleicht" "glich" "gliche" "geglichen" ;
lin gleiten_V = irregV "gleiten" "gleitet" "glitt" "glitte" "geglitten" ; lin gleiten_V = irregV "gleiten" "gleitet" "glitt" "glitte" "geglitten" ;
lin glimmen_V = irregV "glimmen" "glimmt" "glomm" "glimmte" "glömme" ; lin glimmen_V = irregV "glimmen" "glimmt" "glomm" "glimmte" "glömme" ;
@@ -94,7 +94,7 @@ in {
lin kriechen_V = irregV "kriechen" "kriecht" "kroch" "kröche" "gekrochen" ; lin kriechen_V = irregV "kriechen" "kriecht" "kroch" "kröche" "gekrochen" ;
lin küren_V = irregV "küren" "kürt" "kürte" "kor" "gekürt" ; lin küren_V = irregV "küren" "kürt" "kürte" "kor" "gekürt" ;
lin laden_V = irregV "laden" "lädt" "lud" "lüde" "geladen" ; lin laden_V = irregV "laden" "lädt" "lud" "lüde" "geladen" ;
lin lassen_V = irregV "lassen" "läßt" "ließ" "ließe" "gelassen" ; lin lassen_V = irregV "lassen" "lässt" "ließ" "ließe" "gelassen" ;
lin laufen_V = irregV "laufen" "läuft" "lief" "liefe" "gelaufen" ; lin laufen_V = irregV "laufen" "läuft" "lief" "liefe" "gelaufen" ;
lin leiden_V = irregV "leiden" "leidt" "litt" "litte" "gelitten" ; lin leiden_V = irregV "leiden" "leidt" "litt" "litte" "gelitten" ;
lin leihen_V = irregV "leihen" "leiht" "lieh" "liehe" "geliehen" ; lin leihen_V = irregV "leihen" "leiht" "lieh" "liehe" "geliehen" ;
@@ -104,14 +104,15 @@ in {
lin mahlen_V = irregV "mahlen" "mahlt" "mahlte" "mahlte" "gemahlen" ; lin mahlen_V = irregV "mahlen" "mahlt" "mahlte" "mahlte" "gemahlen" ;
lin meiden_V = irregV "meiden" "meidt" "mied" "miede" "gemieden" ; lin meiden_V = irregV "meiden" "meidt" "mied" "miede" "gemieden" ;
lin melken_V = irregV "melken" "milkt" "molk" "mölke" "gemolken" ; lin melken_V = irregV "melken" "milkt" "molk" "mölke" "gemolken" ;
lin messen_V = irregV "messen" "mißt" "maß" "mäße" "gemessen" ; lin messen_V = irregV "messen" "misst" "maß" "mäße" "gemessen" ;
lin mißlingen_V = irregV "mißlingen" "mißlingt" "mißlang" "mißlungen" "mißlänge" ; lin mißlingen_V = irregV "misslingen" "misslingt" "misslang" "misslungen" "misslänge" ; -- old spelling
lin misslingen_V = irregV "misslingen" "misslingt" "misslang" "misslungen" "misslänge" ;
lin mögen_V = lin V (M.mkV "mögen" "mag" "magst" "mag" "mögt" "mög" lin mögen_V = lin V (M.mkV "mögen" "mag" "magst" "mag" "mögt" "mög"
"mochte" "mochtest" "mochten" "mochtet" "mochte" "mochtest" "mochten" "mochtet"
"möchte" "gemocht" [] M.VHaben) ; "möchte" "gemocht" [] M.VHaben) ;
lin müssen_V = lin V (M.mkV "müssen" "muß" "mußt" "muß" "müßt" "müß" lin müssen_V = lin V (M.mkV "müssen" "muss" "musst" "muss" "müsst" "müss"
"mußte" "mußtest" "mußten" "mußtet" "musste" "musstest" "mussten" "musstet"
"müßte" "gemußt" [] M.VHaben) ; "müsste" "gemusst" [] M.VHaben) ;
lin nehmen_V = mk6V "nehmen" "nimmt" "nimm" "nahm" "nähme" "genommen" ; lin nehmen_V = mk6V "nehmen" "nimmt" "nimm" "nahm" "nähme" "genommen" ;
lin nennen_V = irregV "nennen" "nennt" "nannte" "nennte" "genannt" ; lin nennen_V = irregV "nennen" "nennt" "nannte" "nennte" "genannt" ;
lin pfeifen_V = irregV "pfeifen" "pfeift" "pfiff" "pfiffe" "gepfiffen" ; lin pfeifen_V = irregV "pfeifen" "pfeift" "pfiff" "pfiffe" "gepfiffen" ;
@@ -119,7 +120,7 @@ in {
lin quellen_V = irregV "quellen" "quillt" "quoll" "quölle" "gequollen" ; lin quellen_V = irregV "quellen" "quillt" "quoll" "quölle" "gequollen" ;
lin raten_V = irregV "raten" "rät" "riet" "riete" "geraten" ; lin raten_V = irregV "raten" "rät" "riet" "riete" "geraten" ;
lin reiben_V = irregV "reiben" "reibt" "rieb" "riebe" "gerieben" ; lin reiben_V = irregV "reiben" "reibt" "rieb" "riebe" "gerieben" ;
lin reißen_V = irregV "reißen" "reißt" "riß" "riße" "gerissen" ; lin reißen_V = irregV "reißen" "reißt" "riss" "risse" "gerissen" ;
lin reiten_V = irregV "reiten" "reitet" "ritt" "ritte" "geritten" ; lin reiten_V = irregV "reiten" "reitet" "ritt" "ritte" "geritten" ;
lin rennen_V = irregV "rennen" "rennt" "rannte" "rennte" "gerannt" ; lin rennen_V = irregV "rennen" "rennt" "rannte" "rennte" "gerannt" ;
lin riechen_V = irregV "riechen" "riecht" "roch" "röche" "gerochen" ; lin riechen_V = irregV "riechen" "riecht" "roch" "röche" "gerochen" ;
@@ -132,20 +133,20 @@ in {
lin schaffen_V = irregV "schaffen" "schafft" "schuf" "schüfe" "geschaffen" ; lin schaffen_V = irregV "schaffen" "schafft" "schuf" "schüfe" "geschaffen" ;
lin scheiden_V = irregV "scheiden" "scheidt" "schied" "schiede" "geschieden" ; lin scheiden_V = irregV "scheiden" "scheidt" "schied" "schiede" "geschieden" ;
lin scheinen_V = irregV "scheinen" "scheint" "schien" "schiene" "geschienen" ; lin scheinen_V = irregV "scheinen" "scheint" "schien" "schiene" "geschienen" ;
lin scheißen_V = irregV "scheißen" "scheißt" "schiß" "schiße" "geschissen" ; lin scheißen_V = irregV "scheißen" "scheißt" "schiss" "schisse" "geschissen" ;
lin schelten_V = irregV "schelten" "schilt" "schalt" "schölte" "gescholten" ; lin schelten_V = irregV "schelten" "schilt" "schalt" "schölte" "gescholten" ;
lin scheren_V = irregV "scheren" "schert" "schor" "schöre" "geschoren" ; lin scheren_V = irregV "scheren" "schert" "schor" "schöre" "geschoren" ;
lin schieben_V = irregV "schieben" "schiebt" "schob" "schöbe" "geschoben" ; lin schieben_V = irregV "schieben" "schiebt" "schob" "schöbe" "geschoben" ;
lin schießen_V = irregV "schießen" "schießt" "schoß" "schösse" "geschossen" ; lin schießen_V = irregV "schießen" "schießt" "schoss" "schösse" "geschossen" ;
lin schinden_V = irregV "schinden" "schindt" "schund" "schunde" "geschunden" ; lin schinden_V = irregV "schinden" "schindt" "schund" "schunde" "geschunden" ;
lin schlafen_V = irregV "schlafen" "schläft" "schlief" "schliefe" "geschlafen" ; lin schlafen_V = irregV "schlafen" "schläft" "schlief" "schliefe" "geschlafen" ;
lin schlagen_V = irregV "schlagen" "schlägt" "schlug" "schlüge" "geschlagen" ; lin schlagen_V = irregV "schlagen" "schlägt" "schlug" "schlüge" "geschlagen" ;
lin schleichen_V = irregV "schleichen" "schleicht" "schlich" "schliche" "geschlichen" ; lin schleichen_V = irregV "schleichen" "schleicht" "schlich" "schliche" "geschlichen" ;
lin schleifen_V = irregV "schleifen" "schleift" "schliff" "schliffe" "geschliffen" ; lin schleifen_V = irregV "schleifen" "schleift" "schliff" "schliffe" "geschliffen" ;
lin schleißen_V = irregV "schleißen" "schleißt" "schliß" "schliß" "geschlissen" ; lin schleißen_V = irregV "schleißen" "schleißt" "schliss" "schliss" "geschlissen" ;
lin schließen_V = irregV "schließen" "schließt" "schloß" "schlösse" "geschlossen" ; lin schließen_V = irregV "schließen" "schließt" "schloss" "schlösse" "geschlossen" ;
lin schlingen_V = irregV "schlingen" "schlingt" "schlang" "schlünge" "geschlungen" ; lin schlingen_V = irregV "schlingen" "schlingt" "schlang" "schlünge" "geschlungen" ;
lin schmeißen_V = irregV "schmeißen" "schmeißt" "schmiß" "schmiße" "geschmissen" ; lin schmeißen_V = irregV "schmeißen" "schmeißt" "schmiss" "schmisse" "geschmissen" ;
lin schmelzen_V = irregV "schmelzen" "schmilzt" "schmolz" "schmölze" "geschmolzen" ; lin schmelzen_V = irregV "schmelzen" "schmilzt" "schmolz" "schmölze" "geschmolzen" ;
lin schneiden_V = irregV "schneiden" "schneidet" "schnitt" "schnitte" "geschnitten" ; lin schneiden_V = irregV "schneiden" "schneidet" "schnitt" "schnitte" "geschnitten" ;
lin schreiben_V = irregV "schreiben" "schreibt" "schrieb" "schriebe" "geschrieben" ; lin schreiben_V = irregV "schreiben" "schreibt" "schrieb" "schriebe" "geschrieben" ;
@@ -173,9 +174,9 @@ in {
lin speien_V = irregV "speien" "speit" "spie" "spie" "gespien" ; lin speien_V = irregV "speien" "speit" "spie" "spie" "gespien" ;
lin spinnen_V = irregV "spinnen" "spinnt" "spann" "spänne" "gesponnen" ; lin spinnen_V = irregV "spinnen" "spinnt" "spann" "spänne" "gesponnen" ;
lin spinnen_o_V = irregV "spinnen" "spinnt" "spann" "spönne" "gesponnen" ; lin spinnen_o_V = irregV "spinnen" "spinnt" "spann" "spönne" "gesponnen" ;
lin spleißen_V = irregV "spleißen" "spleißt" "spliß" "spliße" "gesplissen" ; lin spleißen_V = irregV "spleißen" "spleißt" "spliss" "splisse" "gesplissen" ;
lin sprechen_V = irregV "sprechen" "spricht" "sprach" "spräche" "gesprochen" ; lin sprechen_V = irregV "sprechen" "spricht" "sprach" "spräche" "gesprochen" ;
lin sprießen_V = irregV "sprießen" "sprießt" "sproß" "sprösse" "gesprossen" ; lin sprießen_V = irregV "sprießen" "sprießt" "spross" "sprösse" "gesprossen" ;
lin springen_V = irregV "springen" "springt" "sprang" "spränge" "gesprungen" ; lin springen_V = irregV "springen" "springt" "sprang" "spränge" "gesprungen" ;
lin stechen_V = irregV "stechen" "sticht" "stach" "stäche" "gestochen" ; lin stechen_V = irregV "stechen" "sticht" "stach" "stäche" "gestochen" ;
lin stehen_V = irregV "stehen" "steht" "stand" "stände" "gestanden" ; lin stehen_V = irregV "stehen" "steht" "stand" "stände" "gestanden" ;
@@ -200,7 +201,7 @@ in {
"tat" "tatest" "taten" "tatet" "tat" "tatest" "taten" "tatet"
"täte" "getan" [] M.VHaben) ; "täte" "getan" [] M.VHaben) ;
lin verderben_V = irregV "verderben" "verdirbt" "verdarb" "verdarbe" "verdorben" ; lin verderben_V = irregV "verderben" "verdirbt" "verdarb" "verdarbe" "verdorben" ;
lin vergessen_V = irregV "vergessen" "vergißt" "vergaß" "vergäße" "vergessen" ; lin vergessen_V = irregV "vergessen" "vergisst" "vergaß" "vergäße" "vergessen" ;
lin verlieren_V = irregV "verlieren" "verliert" "verlor" "verlöre" "verloren" ; lin verlieren_V = irregV "verlieren" "verliert" "verlor" "verlöre" "verloren" ;
lin wachsen_V = irregV "wachsen" "wächst" "wuchs" "wüchse" "gewachsen" ; lin wachsen_V = irregV "wachsen" "wächst" "wuchs" "wüchse" "gewachsen" ;
lin wägen_V = irregV "wägen" "wägt" "wog" "woge" "gewogen" ; lin wägen_V = irregV "wägen" "wägt" "wog" "woge" "gewogen" ;
@@ -229,4 +230,28 @@ in {
lin ziehen_V = irregV "ziehen" "zieht" "zog" "zöge" "gezogen" ; lin ziehen_V = irregV "ziehen" "zieht" "zog" "zöge" "gezogen" ;
lin zwingen_V = irregV "zwingen" "zwingt" "zwang" "zwänge" "gezwungen" ; lin zwingen_V = irregV "zwingen" "zwingt" "zwang" "zwänge" "gezwungen" ;
-- old spellings, before the German orthography reform
-- see https://en.wikipedia.org/wiki/German_orthography_reform_of_1996
lin beißen_old_V = irregV "beißen" "beißt" "biß" "bisse" "gebissen" ;
lin fließen_old_V = irregV "fließen" "fließt" "floß" "flösse" "geflossen" ;
lin fressen_old_V = irregV "fressen" "frißt" "fraß" "fräße" "gefressen" ;
lin genießen_old_V = irregV "genießen" "genießt" "genoß" "genösse" "genossen" ;
lin gießen_old_V = irregV "gießen" "gießt" "goß" "gösse" "gegossen" ;
lin lassen_old_V = irregV "lassen" "läßt" "ließ" "ließe" "gelassen" ;
lin messen_old_V = irregV "messen" "mißt" "maß" "mäße" "gemessen" ;
lin mißlingen_old_V = irregV "mißlingen" "mißlingt" "mißlang" "mißlungen" "mißlänge" ;
lin müssen_old_V = lin V (M.mkV "müssen" "muß" "mußt" "muß" "müßt" "müß"
"mußte" "mußtest" "mußten" "mußtet"
"müßte" "gemußt" [] M.VHaben) ;
lin reißen_old_V = irregV "reißen" "reißt" "riß" "riße" "gerissen" ;
lin scheißen_old_V = irregV "scheißen" "scheißt" "schiß" "schiße" "geschissen" ;
lin schießen_old_V = irregV "schießen" "schießt" "schoß" "schösse" "geschossen" ;
lin schleißen_old_V = irregV "schleißen" "schleißt" "schliß" "schliß" "geschlissen" ;
lin schließen_old_V = irregV "schließen" "schließt" "schloß" "schlösse" "geschlossen" ;
lin schmeißen_old_V = irregV "schmeißen" "schmeißt" "schmiß" "schmiße" "geschmissen" ;
lin spleißen_old_V = irregV "spleißen" "spleißt" "spliß" "spliße" "gesplissen" ;
lin sprießen_old_V = irregV "sprießen" "sprießt" "sproß" "sprösse" "gesprossen" ;
lin vergessen_old_V = irregV "vergessen" "vergißt" "vergaß" "vergäße" "vergessen" ;
} }

View File

@@ -89,7 +89,8 @@ abstract IrregGerAbs = Cat ** {
fun meiden_V : V ; fun meiden_V : V ;
fun melken_V : V ; fun melken_V : V ;
fun messen_V : V ; fun messen_V : V ;
fun mißlingen_V : V ; fun mißlingen_V : V ; -- old spelling
fun misslingen_V : V ;
fun mögen_V : V ; fun mögen_V : V ;
fun müssen_V : V ; fun müssen_V : V ;
fun nehmen_V : V ; fun nehmen_V : V ;
@@ -193,4 +194,27 @@ abstract IrregGerAbs = Cat ** {
fun zeihen_V : V ; fun zeihen_V : V ;
fun ziehen_V : V ; fun ziehen_V : V ;
fun zwingen_V : V ; fun zwingen_V : V ;
-- old spellings, before the German orthography reform
-- see https://en.wikipedia.org/wiki/German_orthography_reform_of_1996
fun beißen_old_V : V ;
fun fließen_old_V : V ;
fun fressen_old_V : V ;
fun genießen_old_V : V ;
fun gießen_old_V : V ;
fun lassen_old_V : V ;
fun messen_old_V : V ;
fun mißlingen_old_V : V ;
fun müssen_old_V : V ;
fun reißen_old_V : V ;
fun scheißen_old_V : V ;
fun schießen_old_V : V ;
fun schleißen_old_V : V ;
fun schließen_old_V : V ;
fun schmeißen_old_V : V ;
fun spleißen_old_V : V ;
fun sprießen_old_V : V ;
fun vergessen_old_V : V ;
} }

View File

@@ -45,8 +45,8 @@ lin
s1 = heading1 (nounHeading adjective_Category).s ; s1 = heading1 (nounHeading adjective_Category).s ;
s2 = frameTable ( s2 = frameTable (
tr (th "" ++ th (heading singular_Parameter) ++ th (heading plural_Parameter)) ++ tr (th "" ++ th (heading singular_Parameter) ++ th (heading plural_Parameter)) ++
tr (th (heading masculine_Parameter) ++ td (adj.s ! Posit ! (AF Masc Sg)) ++ td (adj.s ! Posit ! (AF Masc Pl))) ++ tr (th (heading masculine_Parameter) ++ td (adj.s ! Posit ! (genNum2Aform Masc Sg)) ++ td (adj.s ! Posit ! (genNum2Aform Masc Pl))) ++
tr (th (heading feminine_Parameter) ++ td (adj.s ! Posit ! (AF Fem Sg)) ++ td (adj.s ! Posit ! (AF Fem Pl))) tr (th (heading feminine_Parameter) ++ td (adj.s ! Posit ! (genNum2Aform Fem Sg)) ++ td (adj.s ! Posit ! (genNum2Aform Fem Pl)))
) )
} ; } ;

View File

@@ -15,7 +15,7 @@ oper
mkPredet = overload { mkPredet = overload {
mkPredet : A -> Predet = \adj -> lin Predet { mkPredet : A -> Predet = \adj -> lin Predet {
s = \\a,c => prepCase c ++ adj.s ! Posit ! AF a.g a.n ; s = \\a,c => prepCase c ++ adj.s ! Posit ! genNum2Aform a.g a.n ;
c = Nom ; c = Nom ;
a = PNoAg a = PNoAg
} ; } ;

View File

@@ -78,8 +78,10 @@ oper
mkAdj : (_,_,_,_,_ : Str) -> Adj = \solo,sola,soli,sole,solamente -> mkAdj : (_,_,_,_,_ : Str) -> Adj = \solo,sola,soli,sole,solamente ->
{s = table { {s = table {
AF Masc n => numForms solo soli ! n ; ASg Masc _ => solo ;
AF Fem n => numForms sola sole ! n ; ASg Fem _ => sola ;
APl Masc => soli ;
APl Fem => sole ;
AA => solamente AA => solamente
} }
} ; } ;
@@ -189,6 +191,6 @@ oper
-- Determiners, traditionally called indefinite pronouns, are inflected -- Determiners, traditionally called indefinite pronouns, are inflected
-- in gender and number, like adjectives. -- in gender and number, like adjectives.
pronForms : Adj -> Gender -> Number -> Str = \tale,g,n -> tale.s ! AF g n ; pronForms : Adj -> Gender -> Number -> Str = \tale,g,n -> tale.s ! genNum2Aform g n ;
} }

View File

@@ -165,7 +165,9 @@ oper
-- With irregular comparison, there are as it were two adjectives: -- With irregular comparison, there are as it were two adjectives:
-- the positive ("buono") and the comparative ("migliore"). -- the positive ("buono") and the comparative ("migliore").
mkA : A -> A -> A -- special comparison, e.g. buono - migliore mkA : A -> A -> A ; -- special comparison, e.g. buono - migliore
mkA : A -> CopulaType -> A -- force copula type
} ; } ;
-- All the functions above create postfix adjectives. To switch -- All the functions above create postfix adjectives. To switch
@@ -367,18 +369,19 @@ oper
makeNP x g n = {s = (pn2np (mk2PN x g)).s; a = agrP3 g n ; hasClit = False ; isPol = False ; isNeg = False} ** {lock_NP = <>} ; makeNP x g n = {s = (pn2np (mk2PN x g)).s; a = agrP3 g n ; hasClit = False ; isPol = False ; isNeg = False} ** {lock_NP = <>} ;
mk5A a b c d e = mk5A a b c d e =
compADeg {s = \\_ => (mkAdj a b c d e).s ; isPre = False ; lock_A = <>} ; compADeg {s = \\_ => (mkAdj a b c d e).s ; isPre = False ; copTyp = serCopula ; lock_A = <>} ;
regA a = compADeg {s = \\_ => (mkAdjReg a).s ; isPre = False ; lock_A = <>} ; regA a = compADeg {s = \\_ => (mkAdjReg a).s ; isPre = False ; copTyp = serCopula ; lock_A = <>} ;
prefA a = {s = a.s ; isPre = True ; lock_A = <>} ; prefA a = {s = a.s ; isPre = True ; copTyp = a.copTyp ; lock_A = <>} ;
adjCopula a cop = a ** {copTyp = cop} ;
mkA2 a p = a ** {c2 = p ; lock_A2 = <>} ; mkA2 a p = a ** {c2 = p ; lock_A2 = <>} ;
mkADeg a b = mkADeg a b =
{s = table {Posit => a.s ! Posit ; _ => b.s ! Posit} ; {s = table {Posit => a.s ! Posit ; _ => b.s ! Posit} ;
isPre = a.isPre ; lock_A = <>} ; isPre = a.isPre ; copTyp = serCopula ; lock_A = <>} ;
compADeg a = compADeg a =
{s = table {Posit => a.s ! Posit ; _ => \\f => "più" ++ a.s ! Posit ! f} ; {s = table {Posit => a.s ! Posit ; _ => \\f => "più" ++ a.s ! Posit ! f} ;
isPre = a.isPre ; isPre = a.isPre ; copTyp = a.copTyp ;
lock_A = <>} ; lock_A = <>} ;
regADeg a = compADeg (regA a) ; regADeg a = compADeg (regA a) ;
@@ -510,11 +513,13 @@ oper
mkA = overload { mkA = overload {
mkA : (bianco : Str) -> A = regA ; mkA : (bianco : Str) -> A = regA ;
mkA : (solo,sola,soli,sole, solamente : Str) -> A = mk5A ; mkA : (solo,sola,soli,sole, solamente : Str) -> A = mk5A ;
mkA : A -> A -> A = mkADeg mkA : A -> A -> A = mkADeg ;
mkA : A -> CopulaType -> A = adjCopula ;
} ; } ;
mk5A : (solo,sola,soli,sole, solamente : Str) -> A ; mk5A : (solo,sola,soli,sole, solamente : Str) -> A ;
regA : Str -> A ; regA : Str -> A ;
prefA : A -> A ; prefA : A -> A ;
adjCopula : A -> CopulaType -> A ;
mkADeg : A -> A -> A ; mkADeg : A -> A -> A ;
compADeg : A -> A ; compADeg : A -> A ;
regADeg : Str -> A ; regADeg : Str -> A ;

View File

@@ -45,8 +45,8 @@ lin
s1 = heading1 (nounHeading adjective_Category).s ; s1 = heading1 (nounHeading adjective_Category).s ;
s2 = frameTable ( s2 = frameTable (
tr (th "" ++ th (heading singular_Parameter) ++ th (heading plural_Parameter)) ++ tr (th "" ++ th (heading singular_Parameter) ++ th (heading plural_Parameter)) ++
tr (th (heading masculine_Parameter) ++ td (adj.s ! Posit ! (AF Masc Sg)) ++ td (adj.s ! Posit ! (AF Masc Pl))) ++ tr (th (heading masculine_Parameter) ++ td (adj.s ! Posit ! (genNum2Aform Masc Sg)) ++ td (adj.s ! Posit ! (genNum2Aform Masc Pl))) ++
tr (th (heading feminine_Parameter) ++ td (adj.s ! Posit ! (AF Fem Sg)) ++ td (adj.s ! Posit ! (AF Fem Pl))) tr (th (heading feminine_Parameter) ++ td (adj.s ! Posit ! (genNum2Aform Fem Sg)) ++ td (adj.s ! Posit ! (genNum2Aform Fem Pl)))
) )
} ; } ;

View File

@@ -127,7 +127,7 @@ concrete ExtendPor of Extend =
} ; } ;
ICompAP ap = { ICompAP ap = {
s =\\a => "o quão" ++ ap.s ! AF a.g a.n ; s =\\a => "o quão" ++ ap.s ! (genNum2Aform a.g a.n) ;
cop = serCopula cop = serCopula
} ; } ;
@@ -142,7 +142,8 @@ concrete ExtendPor of Extend =
lin lin
PresPartAP vp = { PresPartAP vp = {
s = \\af => gerVP vp (aform2aagr af ** {p = P3}) ; s = \\af => gerVP vp (aform2aagr af ** {p = P3}) ;
isPre = False isPre = False ;
copTyp = serCopula
} ; } ;
PastPartAP vps = pastPartAP vps [] ; PastPartAP vps = pastPartAP vps [] ;
@@ -165,12 +166,12 @@ concrete ExtendPor of Extend =
ComplBareVS = ComplVS ; ComplBareVS = ComplVS ;
AdjAsCN ap = { AdjAsCN ap = {
s =\\n => ap.s ! AF Masc n ; s =\\n => ap.s ! (genNum2Aform Masc n) ;
g = Masc g = Masc
} ; } ;
AdjAsNP ap = heavyNP { AdjAsNP ap = heavyNP {
s = \\_c => ap.s ! AF Masc Sg ; s = \\_c => ap.s ! ASg Masc APred ;
a = Ag Masc Sg P3 a = Ag Masc Sg P3
} ; } ;
@@ -178,7 +179,8 @@ concrete ExtendPor of Extend =
pastPartAP : VPSlash -> Str -> AP ; pastPartAP : VPSlash -> Str -> AP ;
pastPartAP vps agent = lin AP { pastPartAP vps agent = lin AP {
s = \\af => vps.comp ! (aform2aagr af ** {p = P3}) ++ vps.s.s ! VPart (aform2gender af) (aform2number af) ++ agent ; s = \\af => vps.comp ! (aform2aagr af ** {p = P3}) ++ vps.s.s ! VPart (aform2gender af) (aform2number af) ++ agent ;
isPre = False isPre = False ;
copTyp = serCopula
} ; } ;
passVPSlash : VPSlash -> Str -> VP ; passVPSlash : VPSlash -> Str -> VP ;
@@ -200,12 +202,11 @@ concrete ExtendPor of Extend =
} ; } ;
CompoundAP noun adj = { CompoundAP noun adj = {
s = \\af => case af of { s = \\af => case (aform2aagr af) of {
AF g n => adj.s ! Posit ! AF noun.g n ++ "de" ++ noun.s ! n ; {n = n} => adj.s ! Posit ! (genNum2Aform noun.g n) ++ "de" ++ noun.s ! n
-- do I need do(s)/da(s)?
_ => adj.s ! Posit ! AF noun.g Sg ++ "de" ++ noun.s ! Sg
} ; } ;
isPre = adj.isPre isPre = adj.isPre ;
copTyp = adj.copTyp
} ; } ;
GerundCN vp = { GerundCN vp = {

View File

@@ -52,4 +52,12 @@ concrete IdiomPor of Idiom = CatPor **
mkImperative False P1 vp ! RPos ! Masc ! Pl ; --- fem mkImperative False P1 vp ! RPos ! Masc ! Pl ; --- fem
} ; } ;
} ImpP3 np vp = {
s = "deixe" ++ (np.s ! Nom).ton ++ infVP vp np.a ;
} ;
SelfAdvVP vp = vp ;
SelfAdVVP vp = vp ;
SelfNP np = np ;
} ;

View File

@@ -1,7 +1,7 @@
--# -path=.:../romance:../common:../abstract:../../prelude --# -path=.:../romance:../common:../abstract:../../prelude
concrete LexiconPor of Lexicon = CatPor ** open concrete LexiconPor of Lexicon = CatPor ** open
(M=MorphoPor), ParadigmsPor, BeschPor, Prelude in { (M=MorphoPor), ParadigmsPor, BeschPor, Prelude, (D = DiffPor) in {
flags flags
optimize=values ; optimize=values ;
@@ -39,7 +39,7 @@ lin
near_A = mkA "perto" ; near_A = mkA "perto" ;
new_A = prefA (mkA "novo") ; new_A = prefA (mkA "novo") ;
old_A = prefA (mkA "velho") ; old_A = prefA (mkA "velho") ;
ready_A = mkA "pronto" ; ready_A = adjCopula (mkA "pronto") D.estarCopula ;
red_A = mkA "vermelho" ; red_A = mkA "vermelho" ;
rotten_A = mkA "podre" ; rotten_A = mkA "podre" ;
round_A = mkA "redondo" ; round_A = mkA "redondo" ;
@@ -82,7 +82,7 @@ lin
belly_N = mkN "barriga" ; belly_N = mkN "barriga" ;
bike_N = mkN "bicicleta" ; bike_N = mkN "bicicleta" ;
bird_N = mkN "pássaro" ; bird_N = mkN "pássaro" ;
blood_N = mkN "sangue" nonExist ; blood_N = mkN "sangue" "sangues" ;
boat_N = mkN "bote" ; boat_N = mkN "bote" ;
bone_N = mkN "osso" ; bone_N = mkN "osso" ;
book_N = mkN "livro" ; book_N = mkN "livro" ;
@@ -113,7 +113,7 @@ lin
doctor_N = mkN "médico" ; -- médica doctor_N = mkN "médico" ; -- médica
dog_N = mkN "cachorro" ; -- cadela dog_N = mkN "cachorro" ; -- cadela
door_N = mkN "porta" ; door_N = mkN "porta" ;
dust_N = mkN "poeira" nonExist ; dust_N = mkN "poeira" "poeiras" ;
ear_N = mkN "orelha" ; ear_N = mkN "orelha" ;
earth_N = mkN "terra" ; earth_N = mkN "terra" ;
egg_N = mkN "ovo" ; egg_N = mkN "ovo" ;
@@ -125,7 +125,7 @@ lin
fingernail_N = mkN "unha" ; fingernail_N = mkN "unha" ;
fire_N = mkN "fogo" ; fire_N = mkN "fogo" ;
fish_N = mkN "peixe" ; fish_N = mkN "peixe" ;
floor_N = mkN "chão" nonExist ; -- piso floor_N = mkN "piso" "pisos" ; -- piso
flower_N = mkN "flor" feminine ; flower_N = mkN "flor" feminine ;
fog_N = mkN "névoa" ; fog_N = mkN "névoa" ;
foot_N = mkN "pé" ; foot_N = mkN "pé" ;
@@ -136,11 +136,11 @@ lin
garden_N = mkN "jardim" ; garden_N = mkN "jardim" ;
girl_N = mkN "menina" ; girl_N = mkN "menina" ;
glove_N = mkN "luva" ; glove_N = mkN "luva" ;
gold_N = mkN "ouro" nonExist ; gold_N = mkN "ouro" "ouros" ;
grammar_N = mkN "gramática" ; grammar_N = mkN "gramática" ;
grass_N = mkN "grama" nonExist ; grass_N = mkN "grama" "gramas" ;
guts_N = mkN "tripa" ; guts_N = mkN "tripa" ;
hair_N = mkN "cabelo" nonExist ; hair_N = mkN "cabelo" "cabelos" ;
hand_N = mkN "mão" "mãos" feminine ; hand_N = mkN "mão" "mãos" feminine ;
harbour_N = mkN "porto" ; harbour_N = mkN "porto" ;
hat_N = mkN "chapéu" ; hat_N = mkN "chapéu" ;
@@ -160,7 +160,7 @@ lin
lamp_N = mkN "lâmpada" ; lamp_N = mkN "lâmpada" ;
language_N = mkN "linguagem" ; language_N = mkN "linguagem" ;
leaf_N = mkN "folha" ; leaf_N = mkN "folha" ;
leather_N = mkN "couro" nonExist ; leather_N = mkN "couro" "couros" ;
leg_N = mkN "perna" ; leg_N = mkN "perna" ;
liver_N = mkN "fígado" ; liver_N = mkN "fígado" ;
louse_N = mkN "piolho" ; louse_N = mkN "piolho" ;
@@ -203,7 +203,7 @@ lin
rubber_N = mkN "borracha" ; rubber_N = mkN "borracha" ;
rule_N = mkN "regra" ; rule_N = mkN "regra" ;
salt_N = mkN "sal" ; salt_N = mkN "sal" ;
sand_N = mkN "areia" nonExist ; sand_N = mkN "areia" "areias" ;
school_N = mkN "escola" ; school_N = mkN "escola" ;
science_N = mkN "ciência" ; science_N = mkN "ciência" ;
sea_N = mkN "mar" ; sea_N = mkN "mar" ;
@@ -213,17 +213,17 @@ lin
shirt_N = mkN "camisa" ; shirt_N = mkN "camisa" ;
shoe_N = mkN "sapato" ; shoe_N = mkN "sapato" ;
shop_N = mkN "loja" ; shop_N = mkN "loja" ;
silver_N = mkN "prata" nonExist ; silver_N = mkN "prata" "pratas" ;
sister_N = mkN "irmã" ; sister_N = mkN "irmã" ;
skin_N = mkN "pele" feminine ; skin_N = mkN "pele" feminine ;
sky_N = mkN "céu" ; sky_N = mkN "céu" ;
smoke_N = mkN "fumaça" nonExist ; smoke_N = mkN "fumaça" "fumaças" ;
snake_N = mkN "cobra" ; snake_N = mkN "cobra" ;
snow_N = mkN "neve" nonExist feminine ; snow_N = mkN "neve" "neves" feminine ;
sock_N = mkN "meia" ; sock_N = mkN "meia" ;
song_N = mkN "canção" "canções" feminine ; song_N = mkN "canção" "canções" feminine ;
star_N = mkN "estrela" ; star_N = mkN "estrela" ;
steel_N = mkN "aço" nonExist ; steel_N = mkN "aço" "aços" ;
stick_N = mkN "bastão" "bastões" ; stick_N = mkN "bastão" "bastões" ;
stone_N = mkN "pedra" ; stone_N = mkN "pedra" ;
stove_N = mkN "forno" ; stove_N = mkN "forno" ;

View File

@@ -118,8 +118,8 @@ oper
mkAdj : (_,_,_,_,_ : Str) -> Adj = mkAdj : (_,_,_,_,_ : Str) -> Adj =
\burro,burra,burros,burras,burramente -> \burro,burra,burros,burras,burramente ->
{s = table { {s = table {
AF Masc n => numForms burro burros ! n ; ASg g _ => genForms burro burra ! g ;
AF Fem n => numForms burra burras ! n ; APl g => genForms burros burras ! g ;
AA => burramente AA => burramente
} }
} ; } ;
@@ -129,7 +129,8 @@ oper
adj = mkAdjReg aj adj = mkAdjReg aj
in { in {
s = table { s = table {
AF g n => adj.s ! AF g n ; ASg g _ => adj.s ! ASg g APred ;
APl g => adj.s ! APl g ;
AA => av AA => av
} }
} ; } ;
@@ -245,11 +246,11 @@ oper
-- inflected in gender and number, like adjectives. -- inflected in gender and number, like adjectives.
pronForms : Adj -> Gender -> Number -> Str = pronForms : Adj -> Gender -> Number -> Str =
\tale,g,n -> tale.s ! AF g n ; \tale,g,n -> tale.s ! (genNum2Aform g n) ;
mkOrdinal : A -> Ord = \adj -> mkOrdinal : A -> Ord = \adj ->
lin Ord { lin Ord {
s = \\ag => adj.s ! Posit ! AF ag.g ag.n ; s = \\ag => adj.s ! Posit ! (genNum2Aform ag.g ag.n) ;
} ; } ;
mkQuantifier : (esse,essa,esses,essas : Str) -> Quant = \esse,essa,esses,essas-> mkQuantifier : (esse,essa,esses,essas : Str) -> Quant = \esse,essa,esses,essas->

View File

@@ -184,10 +184,14 @@ oper
--2 Adjectives --2 Adjectives
compADeg : A -> A ; compADeg : A -> A ;
compADeg a = {s = table {Posit => a.s ! Posit ; compADeg a = lin A {
_ => \\f => "mais" ++ s = table {
a.s ! Posit ! f} ; Posit => a.s ! Posit ;
isPre = a.isPre ; lock_A = <>} ; _ => \\f => "mais" ++ a.s ! Posit ! f
} ;
isPre = a.isPre ;
copTyp = a.copTyp
} ;
{- superlADeg : A -> A ; {- superlADeg : A -> A ;
superlADeg a = {s = table {Posit => a.s ! Posit ; superlADeg a = {s = table {Posit => a.s ! Posit ;
@@ -200,24 +204,32 @@ oper
-- regADeg a = compADeg (regA a) ; -- regADeg a = compADeg (regA a) ;
regA : Str -> A ; regA : Str -> A ;
regA a = compADeg {s = \\_ => (mkAdjReg a).s ; isPre = False ; regA a = compADeg (lin A {s = \\_ => (mkAdjReg a).s ; isPre = False ; copTyp = serCopula}) ;
lock_A = <>} ;
mk2A : (único,unicamente : Str) -> A ; mk2A : (único,unicamente : Str) -> A ;
mk2A adj adv = compADeg {s = \\_ => (mkAdj2 adj adv).s ; isPre = False ; mk2A adj adv = compADeg {s = \\_ => (mkAdj2 adj adv).s ; isPre = False ;
copTyp = serCopula ;
lock_A = <>} ; lock_A = <>} ;
mk5A : (preto,preta,pretos,pretas,pretamente : Str) -> A ; mk5A : (preto,preta,pretos,pretas,pretamente : Str) -> A ;
mk5A a b c d e = compADeg {s = \\_ => (mkAdj a b c d e).s ; mk5A a b c d e = compADeg {s = \\_ => (mkAdj a b c d e).s ;
isPre = False ; lock_A = <>} ; isPre = False ; copTyp = serCopula ;
lock_A = <>} ;
adjCopula : A -> CopulaType -> A ;
adjCopula a cop = a ** {copTyp = cop} ;
mkADeg : A -> A -> A ; mkADeg : A -> A -> A ;
mkADeg a b = {s = table {Posit => a.s ! Posit ; mkADeg a b = lin A {
s = table {
Posit => a.s ! Posit ;
_ => b.s ! Posit _ => b.s ! Posit
-- Compar => b.s ! Posit ; -- Compar => b.s ! Posit ;
-- Superl => "o" ++ b.s ! Posit ; -- Superl => "o" ++ b.s ! Posit ;
} ; } ;
isPre = a.isPre ; lock_A = <>} ; isPre = a.isPre ;
copTyp = a.copTyp
} ;
mkNonInflectA : A -> Str -> A ; mkNonInflectA : A -> Str -> A ;
mkNonInflectA = \blanco,hueso -> blanco ** {s = \\x,y => blanco.s ! x ! y ++ hueso } ; mkNonInflectA = \blanco,hueso -> blanco ** {s = \\x,y => blanco.s ! x ! y ++ hueso } ;
@@ -246,6 +258,9 @@ oper
mkA : (blanco : A) -> (hueso : Str) -> A -- noninflecting component after the adjective mkA : (blanco : A) -> (hueso : Str) -> A -- noninflecting component after the adjective
= mkNonInflectA ; = mkNonInflectA ;
mkA : A -> CopulaType -> A -- force copula type
= adjCopula ;
} ; } ;
-- The functions above create postfix adjectives. To switch them to -- The functions above create postfix adjectives. To switch them to
@@ -256,7 +271,7 @@ oper
prefixA = prefA ; prefixA = prefA ;
prefA : A -> A ; prefA : A -> A ;
prefA a = {s = a.s ; isPre = True ; lock_A = <>} ; prefA a = lin A {s = a.s ; isPre = True ; copTyp = a.copTyp} ;
--3 Two-place adjectives --3 Two-place adjectives
-- --
@@ -320,7 +335,7 @@ oper
"or" | "ôr" => pôr_Besch ; "or" | "ôr" => pôr_Besch ;
_ => comprar_Besch -- hole _ => comprar_Besch -- hole
} }
in verboV (paradigm v) ; in lin V (verboV (paradigm v)) ;
mkV = overload { mkV = overload {
--- [ ] update --- [ ] update
@@ -345,8 +360,8 @@ oper
-- "Bescherelle" book. To use them in the category $V$, wrap them with -- "Bescherelle" book. To use them in the category $V$, wrap them with
-- the function -- the function
mkV : Verbum -> V = -- import verb constructed with BeschPor mkV : Verbum -> V = \v -> -- import verb constructed with BeschPor
verboV ; lin V (verboV v) ;
-- particle verb -- particle verb
mkV : V -> Str -> V = mkV : V -> Str -> V =
@@ -366,7 +381,7 @@ oper
-- deviant past participle, e.g. abrir - aberto -- deviant past participle, e.g. abrir - aberto
special_ppV ve pa = { special_ppV ve pa = {
s = table { s = table {
VPart g n => (adjPreto pa).s ! AF g n ; VPart g n => (adjPreto pa).s ! (genNum2Aform g n) ;
p => ve.s ! p p => ve.s ! p
} ; } ;
lock_V = <> ; lock_V = <> ;
@@ -516,6 +531,6 @@ oper
isPol = False ; isPol = False ;
isNeg = False} ** {lock_NP = <>} ; isNeg = False} ** {lock_NP = <>} ;
reflVerboV : Verbum -> V = \ve -> reflV (verboV ve) ; reflVerboV : Verbum -> V = \ve -> reflV (lin V (verboV ve)) ;
} ; } ;

View File

@@ -5,60 +5,68 @@ incomplete concrete AdjectiveRomance of Adjective =
PositA a = { PositA a = {
s = a.s ! Posit ; s = a.s ! Posit ;
isPre = a.isPre isPre = a.isPre ;
copTyp = a.copTyp
} ; } ;
ComparA a np = { ComparA a np = {
s = \\af => a.s ! Compar ! af ++ conjThan ++ (np.s ! Nom).ton ; s = \\af => a.s ! Compar ! af ++ conjThan ++ (np.s ! Nom).ton ;
isPre = False isPre = False ;
copTyp = a.copTyp
} ; } ;
CAdvAP ad ap np = { CAdvAP ad ap np = {
s = \\af => ad.s ++ ap.s ! af ++ ad.p ++ (np.s ! Nom).ton ; s = \\af => ad.s ++ ap.s ! af ++ ad.p ++ (np.s ! Nom).ton ;
isPre = False isPre = False ;
copTyp = ap.copTyp
} ; } ;
UseComparA a = { UseComparA a = {
s = \\af => a.s ! Compar ! af ; s = \\af => a.s ! Compar ! af ;
isPre = a.isPre isPre = a.isPre ;
copTyp = a.copTyp
} ; } ;
AdjOrd ord = { AdjOrd ord = {
s = \\af => ord.s ! (case af of { s = \\af => ord.s ! aform2aagr af ; ----
AF g n => aagr g n ; isPre = False ; ----
_ => aagr Masc Sg ---- copTyp = serCopula
}) ;
isPre = False ----
} ; } ;
-- $SuperlA$ belongs to determiner syntax in $Noun$. -- $SuperlA$ belongs to determiner syntax in $Noun$.
ComplA2 adj np = { ComplA2 adj np = {
s = \\af => adj.s ! Posit ! af ++ appCompl adj.c2 np ; s = \\af => adj.s ! Posit ! af ++ appCompl adj.c2 np ;
isPre = False isPre = False ;
copTyp = serCopula
} ; } ;
ReflA2 adj = { ReflA2 adj = {
s = \\af => s = \\af =>
adj.s ! Posit ! af ++ adj.s ! Posit ! af ++
adj.c2.s ++ prepCase adj.c2.c ++ reflPron Sg P3 Nom ; --- agr adj.c2.s ++ prepCase adj.c2.c ++ reflPron Sg P3 Nom ; --- agr
isPre = False isPre = False ;
copTyp = serCopula
} ; } ;
SentAP ap sc = { SentAP ap sc = {
s = \\a => ap.s ! a ++ sc.s ! dative ; -- prête à dormir --- mood s = \\a => ap.s ! a ++ sc.s ! dative ; -- prête à dormir --- mood
isPre = False isPre = False ;
copTyp = ap.copTyp
} ; } ;
AdAP ada ap = { AdAP ada ap = {
s = \\a => ada.s ++ ap.s ! a ; s = \\a => ada.s ++ ap.s ! a ;
isPre = ap.isPre isPre = ap.isPre ;
copTyp = ap.copTyp
} ; } ;
UseA2 a = { UseA2 a = {
s = a.s ! Posit ; s = a.s ! Posit ;
isPre = False ---- A2 has no isPre isPre = False ; ---- A2 has no isPre
copTyp = serCopula ---- A2 has no copTyp (yet)
} ; } ;
AdvAP ap adv = { AdvAP ap adv = {
s = \\a => ap.s ! a ++ adv.s ; s = \\a => ap.s ! a ++ adv.s ;
isPre = False isPre = False ;
copTyp = ap.copTyp
} ; } ;

View File

@@ -55,7 +55,7 @@ incomplete concrete CatRomance of Cat = CommonX - [SC,Pol]
-- Adjective -- Adjective
AP = {s : AForm => Str ; isPre : Bool} ; AP = {s : AForm => Str ; isPre : Bool ; copTyp : CopulaType} ;
-- Noun -- Noun
@@ -105,7 +105,7 @@ incomplete concrete CatRomance of Cat = CommonX - [SC,Pol]
V3, V2A, V2V = Verb ** {c2,c3 : Compl} ; V3, V2A, V2V = Verb ** {c2,c3 : Compl} ;
VS = Verb ** {m : RPolarity => Mood} ; VS = Verb ** {m : RPolarity => Mood} ;
A = {s : Degree => AForm => Str ; isPre : Bool} ; A = {s : Degree => AForm => Str ; isPre : Bool ; copTyp : CopulaType} ;
A2 = {s : Degree => AForm => Str ; c2 : Compl} ; A2 = {s : Degree => AForm => Str ; c2 : Compl} ;
N = Noun ; N = Noun ;
@@ -134,8 +134,8 @@ incomplete concrete CatRomance of Cat = CommonX - [SC,Pol]
NP = \np -> (np.s ! Nom).comp ; NP = \np -> (np.s ! Nom).comp ;
Conj = \c -> c.s2 ; Conj = \c -> c.s2 ;
A = \a -> a.s ! Posit ! AF Masc Sg ; A = \a -> a.s ! Posit ! ASg Masc APred ;
A2 = \a -> a.s ! Posit ! AF Masc Sg ++ a.c2.s ; A2 = \a -> a.s ! Posit ! ASg Masc APred ++ a.c2.s ;
N = \n -> n.s ! Sg ; N = \n -> n.s ! Sg ;
N2 = \n -> n.s ! Sg ++ n.c2.s ; N2 = \n -> n.s ! Sg ++ n.c2.s ;

View File

@@ -30,7 +30,9 @@ param
-- Comparative adjectives are moreover inflected in degree -- Comparative adjectives are moreover inflected in degree
-- (which in Romance is usually syntactic, though). -- (which in Romance is usually syntactic, though).
AForm = AF Gender Number | AA ; AForm = ASg Gender APosition | APl Gender | AA ;
APosition = AAttr | APred ;
-- Gender is not morphologically determined for first and second person pronouns. -- Gender is not morphologically determined for first and second person pronouns.
@@ -49,18 +51,44 @@ oper
} ; } ;
-- genderpos2gender : GenderPosition -> {p1:Gender,p2:Number} = \gp -> case gp of {
-- MascSg _ => <Masc,Sg> ;
-- MascPl => <Masc,Pl> ;
-- FemSg => <Fem,Sg> ;
-- FemPl => <Fem,Pl>
-- } ;
aform2gender : AForm -> Gender = \a -> case a of { aform2gender : AForm -> Gender = \a -> case a of {
AF g _ => g ; ASg g _ => g ;
APl g => g ;
_ => Masc -- "le plus lentement" _ => Masc -- "le plus lentement"
} ; } ;
aform2number : AForm -> Number = \a -> case a of { aform2number : AForm -> Number = \a -> case a of {
AF _ n => n ; APl _ => Pl ;
_ => Sg -- "le plus lentement" _ => Sg -- "le plus lentement"
} ; } ;
aform2aagr : AForm -> AAgr = \a -> case a of { aform2aagr : AForm -> AAgr = \a -> case a of {
AF g n => aagr g n ; ASg g _ => aagr g Sg ;
APl g => aagr g Pl ;
_ => aagr Masc Sg -- "le plus lentement" _ => aagr Masc Sg -- "le plus lentement"
} ; } ;
aagr2aform : AAgr -> AForm = \gn -> case gn of {
{g=g ; n=Sg} => ASg g APred ;
{g=g ; n=Pl} => APl g
} ;
genNum2Aform : Gender -> Number -> AForm ;
genNum2Aform g n = case n of {
Sg => ASg g APred ;
Pl => APl g
} ;
genNumPos2Aform : Gender -> Number -> Bool -> AForm ;
genNumPos2Aform g n isPre = case n of {
Sg => ASg g (if_then_else APosition isPre AAttr APred) ;
Pl => APl g
} ;
conjGender : Gender -> Gender -> Gender = \m,n -> conjGender : Gender -> Gender -> Gender = \m,n ->
case m of { case m of {
@@ -236,7 +264,7 @@ oper
oper oper
mkOrd : {s : Degree => AForm => Str} -> {s : AAgr => Str} ; mkOrd : {s : Degree => AForm => Str} -> {s : AAgr => Str} ;
mkOrd x = {s = \\ag => x.s ! Posit ! AF ag.g ag.n} ; mkOrd x = {s = \\ag => x.s ! Posit ! aagr2aform ag } ;
-- This is used in Spanish and Italian to bind clitics with preceding verb. -- This is used in Spanish and Italian to bind clitics with preceding verb.

View File

@@ -14,7 +14,8 @@ incomplete concrete ConjunctionRomance of Conjunction =
hasClit = False ; isNeg = ss.isNeg hasClit = False ; isNeg = ss.isNeg
}) ; }) ;
ConjAP conj ss = conjunctDistrTable AForm conj ss ** { ConjAP conj ss = conjunctDistrTable AForm conj ss ** {
isPre = ss.isPre isPre = ss.isPre ;
copTyp = ss.copTyp
} ; } ;
ConjRS conj ss = conjunctDistrTable2 Mood Agr conj ss ** { ConjRS conj ss = conjunctDistrTable2 Mood Agr conj ss ** {
c = ss.c c = ss.c
@@ -40,8 +41,8 @@ incomplete concrete ConjunctionRomance of Conjunction =
s2 = \\c => xs.s2 ! c ; ----e (conjunctCase c) ; s2 = \\c => xs.s2 ! c ; ----e (conjunctCase c) ;
a = conjAgr x.a xs.a ; isNeg = orB x.isNeg xs.isNeg a = conjAgr x.a xs.a ; isNeg = orB x.isNeg xs.isNeg
} ; } ;
BaseAP x y = twoTable AForm x y ** {isPre = andB x.isPre y.isPre} ; BaseAP x y = twoTable AForm x y ** {isPre = andB x.isPre y.isPre ; copTyp = y.copTyp} ;
ConsAP xs x = consrTable AForm comma xs x ** {isPre = andB xs.isPre x.isPre} ; ConsAP x xs = consrTable AForm comma x xs ** {isPre = andB x.isPre xs.isPre ; copTyp = xs.copTyp} ;
BaseRS x y = twoTable2 Mood Agr x y ** {c = y.c} ; BaseRS x y = twoTable2 Mood Agr x y ** {c = y.c} ;
ConsRS xs x = consrTable2 Mood Agr comma xs x ** {c = xs.c} ; ConsRS xs x = consrTable2 Mood Agr comma xs x ** {c = xs.c} ;
BaseIAdv = twoSS ; BaseIAdv = twoSS ;
@@ -55,7 +56,7 @@ incomplete concrete ConjunctionRomance of Conjunction =
[AdV] = {s1,s2 : Str} ; [AdV] = {s1,s2 : Str} ;
[IAdv] = {s1,s2 : Str} ; [IAdv] = {s1,s2 : Str} ;
[NP] = {s1,s2 : Case => Str ; a : Agr ; isNeg : Bool} ; [NP] = {s1,s2 : Case => Str ; a : Agr ; isNeg : Bool} ;
[AP] = {s1,s2 : AForm => Str ; isPre : Bool} ; [AP] = {s1,s2 : AForm => Str ; isPre : Bool ; copTyp : CopulaType} ;
[RS] = {s1,s2 : Mood => Agr => Str ; c : Case} ; [RS] = {s1,s2 : Mood => Agr => Str ; c : Case} ;
[CN] = {s1,s2 : Number => Str ; g : Gender} ; [CN] = {s1,s2 : Number => Str ; g : Gender} ;

View File

@@ -101,9 +101,9 @@ incomplete concrete NounRomance of Noun =
AdNum adn num = {s = \\a => adn.s ++ num.s ! a ; isNum = num.isNum ; n = num.n} ; AdNum adn num = {s = \\a => adn.s ++ num.s ! a ; isNum = num.isNum ; n = num.n} ;
OrdSuperl adj = {s = \\a => adj.s ! Superl ! AF a.g a.n} ; OrdSuperl adj = {s = \\a => adj.s ! Superl ! genNum2Aform a.g a.n} ;
OrdNumeralSuperl num adj = {s = \\a => num.s ! NOrd a.g a.n ++ adj.s ! Superl ! AF a.g a.n} ; -- la terza più grande OrdNumeralSuperl num adj = {s = \\a => num.s ! NOrd a.g a.n ++ adj.s ! Superl ! genNum2Aform a.g a.n} ; -- la terza più grande
---- could be discontinuous: la terza città più grande ---- could be discontinuous: la terza città più grande
DefArt = { DefArt = {
@@ -153,7 +153,7 @@ incomplete concrete NounRomance of Noun =
let let
g = cn.g g = cn.g
in { in {
s = \\n => preOrPost ap.isPre (ap.s ! (AF g n)) (cn.s ! n) ; s = \\n => preOrPost ap.isPre (ap.s ! genNumPos2Aform g n ap.isPre) (cn.s ! n) ;
g = g ; g = g ;
} ; } ;
@@ -190,7 +190,7 @@ incomplete concrete NounRomance of Noun =
a = np.a ** {n = det.n} } ; a = np.a ** {n = det.n} } ;
AdjDAP det ap = { AdjDAP det ap = {
s = \\g => det.s ! g ++ ap.s ! AF g det.n ; s = \\g => det.s ! g ++ ap.s ! genNum2Aform g det.n ;
n = det.n ; n = det.n ;
} ; } ;

View File

@@ -18,7 +18,7 @@ incomplete concrete PhraseRomance of Phrase =
UttVP vp = {s = infVP vp (agrP3 Fem Sg)} ; --- Agr UttVP vp = {s = infVP vp (agrP3 Fem Sg)} ; --- Agr
UttAdv adv = adv ; UttAdv adv = adv ;
UttCN n = {s = n.s ! Sg} ; UttCN n = {s = n.s ! Sg} ;
UttAP ap = {s = ap.s ! AF Masc Sg} ; UttAP ap = {s = ap.s ! genNum2Aform Masc Sg} ;
UttCard n = {s = n.s ! Masc} ; UttCard n = {s = n.s ! Masc} ;
UttInterj i = i ; UttInterj i = i ;

View File

@@ -11,7 +11,7 @@ incomplete concrete VerbRomance of Verb =
ComplVS v s = insertExtrapos (\\b => conjThat ++ s.s ! (v.m ! b)) (predV v) ; ComplVS v s = insertExtrapos (\\b => conjThat ++ s.s ! (v.m ! b)) (predV v) ;
ComplVQ v q = insertExtrapos (\\_ => q.s ! QIndir) (predV v) ; ComplVQ v q = insertExtrapos (\\_ => q.s ! QIndir) (predV v) ;
ComplVA v ap = ComplVA v ap =
insertComplement (\\a => let agr = complAgr a in ap.s ! AF agr.g agr.n) (predV v) ; insertComplement (\\a => let agr = complAgr a in ap.s ! genNum2Aform agr.g agr.n) (predV v) ;
SlashV2a v = mkVPSlash v.c2 (predV v) ; SlashV2a v = mkVPSlash v.c2 (predV v) ;
@@ -40,13 +40,13 @@ incomplete concrete VerbRomance of Verb =
SlashV2A v ap = SlashV2A v ap =
let af = case v.c3.isDir of { let af = case v.c3.isDir of {
True => AF np.a.g np.a.n ; -- ... bleues True => genNum2Aform np.a.g np.a.n ; -- ... bleues
_ => AF Masc Sg -- il les peint en bleu _ => genNum2Aform Masc Sg -- il les peint en bleu
} }
-} -}
SlashV2A v ap = SlashV2A v ap =
let af = AF Masc Sg let af = genNum2Aform Masc Sg
in in
mkVPSlash v.c2 mkVPSlash v.c2
(insertComplement (insertComplement
@@ -91,7 +91,13 @@ incomplete concrete VerbRomance of Verb =
UseCopula = predV copula ; UseCopula = predV copula ;
CompAP ap = {s = \\ag => let agr = complAgr ag in ap.s ! AF agr.g agr.n ; cop = serCopula} ; CompAP ap = {
s = \\ag =>
let
agr = complAgr ag
in ap.s ! genNum2Aform agr.g agr.n ;
cop = ap.copTyp
} ;
CompCN cn = { s = \\ag => CompCN cn = { s = \\ag =>
let agr = complAgr ag in let agr = complAgr ag in
artIndef False cn.g agr.n Nom ++ cn.s ! agr.n ; artIndef False cn.g agr.n Nom ++ cn.s ! agr.n ;
@@ -115,5 +121,5 @@ incomplete concrete VerbRomance of Verb =
VPSlashPrep vp prep = vp ** { VPSlashPrep vp prep = vp ** {
c2 = {s = prep.s ; c = prep.c ; isDir = False} c2 = {s = prep.s ; c = prep.c ; isDir = False}
} ; } ;
}
} ;

View File

@@ -45,8 +45,8 @@ lin
s1 = heading1 (nounHeading adjective_Category).s ; s1 = heading1 (nounHeading adjective_Category).s ;
s2 = frameTable ( s2 = frameTable (
tr (th "" ++ th (heading singular_Parameter) ++ th (heading plural_Parameter)) ++ tr (th "" ++ th (heading singular_Parameter) ++ th (heading plural_Parameter)) ++
tr (th (heading masculine_Parameter) ++ td (adj.s ! Posit ! (AF Masc Sg)) ++ td (adj.s ! Posit ! (AF Masc Pl))) ++ tr (th (heading masculine_Parameter) ++ td (adj.s ! Posit ! genNum2Aform Masc Sg) ++ td (adj.s ! Posit ! (genNum2Aform Masc Pl))) ++
tr (th (heading feminine_Parameter) ++ td (adj.s ! Posit ! (AF Fem Sg)) ++ td (adj.s ! Posit ! (AF Fem Pl))) tr (th (heading feminine_Parameter) ++ td (adj.s ! Posit ! genNum2Aform Fem Sg) ++ td (adj.s ! Posit ! (genNum2Aform Fem Pl)))
) )
} ; } ;

View File

@@ -1,7 +1,7 @@
--# -path=.:../romance:../common:../abstract:../../prelude --# -path=.:../romance:../common:../abstract:../../prelude
concrete LexiconSpa of Lexicon = CatSpa ** open concrete LexiconSpa of Lexicon = CatSpa ** open
(M=MorphoSpa), ParadigmsSpa, BeschSpa in { (M=MorphoSpa), ParadigmsSpa, (D = DiffSpa), BeschSpa in {
flags flags
coding=utf8 ; coding=utf8 ;
@@ -233,6 +233,7 @@ lin
correct_A = regA "correcto" ; correct_A = regA "correcto" ;
dry_A = regA "seco" ; dry_A = regA "seco" ;
dull_A = regA "desafilado" ; dull_A = regA "desafilado" ;
ready_A = adjCopula (mkA "listo") D.estarCopula ;
full_A = regA "lleno" ; full_A = regA "lleno" ;
heavy_A = regA "pesado" ; heavy_A = regA "pesado" ;
near_A = regA "cercano" ; near_A = regA "cercano" ;

View File

@@ -57,10 +57,14 @@ oper
-- Adjectives are conveniently seen as gender-dependent nouns. -- Adjectives are conveniently seen as gender-dependent nouns.
-- Here are some patterns. First one that describes the worst case. -- Here are some patterns. First one that describes the worst case.
mkAdj : (_,_,_,_,_ : Str) -> Adj = \solo,sola,soli,sole,solamente -> mkAdj : (x1,_,_,_,_,_,x7 : Str) -> Adj = \buen,solo,gran,sola,solos,solas,solamente ->
{s = table { {s = table {
AF Masc n => numForms solo soli ! n ; ASg Masc AAttr => buen ;
AF Fem n => numForms sola sole ! n ; ASg Masc APred => solo ;
ASg Fem AAttr => gran ;
ASg Fem APred => sola ;
APl Masc => solos ;
APl Fem => solas ;
AA => solamente AA => solamente
} }
} ; } ;
@@ -71,26 +75,36 @@ oper
let let
sol = Predef.tk 1 solo sol = Predef.tk 1 solo
in in
mkAdj solo (sol + "a") (sol + "os") (sol + "as") (sol + "amente") ; mkAdj solo solo (sol + "a") (sol + "a")
(sol + "os") (sol + "as") (sol + "amente") ;
-- masculine and feminine are identical: -- masculine and feminine are identical:
-- adjectives ending with -e, -a and many but not all that end in a consonant -- adjectives ending with -e, -a and many but not all that end in a consonant
adjUtil : Str -> Str -> Adj = \util,utiles -> adjUtil : Str -> Str -> Adj = \util,utiles ->
mkAdj util util utiles utiles (util + "mente") ; mkAdj util util util util
utiles utiles (util + "mente") ;
-- adjectives that end in consonant but have different masc and fem forms -- adjectives that end in consonant but have different masc and fem forms
-- español, hablador ... -- español, hablador ...
adjEspanol : Str -> Str -> Adj = \espanol,espanola -> adjEspanol : Str -> Str -> Adj = \espanol,espanola ->
mkAdj espanol espanola (espanol + "es") (espanol + "as") (espanola + "mente") ; mkAdj espanol espanol espanola espanola
(espanol + "es") (espanol + "as") (espanola + "mente") ;
adjBlu : Str -> Adj = \blu -> adjBueno : Str -> Adj = \bueno ->
mkAdj blu blu blu blu blu ; --- let buen = init bueno in
mkAdj buen bueno (buen + "a") (buen + "a")
(buen + "os") (buen + "as") (buen + "amente") ;
adjGrande : Str -> Str -> Adj = \gran,grande ->
mkAdj gran grande gran grande
(grande + "s") (grande + "s") (grande + "mente") ;
-- francés francesa franceses francesas -- francés francesa franceses francesas
adjEs : Str -> Adj = \francEs -> adjEs : Str -> Adj = \francEs ->
let franc : Str = Predef.tk 2 francEs ; let franc : Str = Predef.tk 2 francEs ;
frances : Str = franc + "es" ; frances : Str = franc + "es" ;
in mkAdj francEs (frances + "a") (frances + "es") (frances + "as") (frances + "amente") ; in mkAdj francEs francEs (frances + "a") (frances + "a")
(frances + "es") (frances + "as") (frances + "amente") ;
-- alemán alemana alemanes alemanas -- alemán alemana alemanes alemanas
@@ -106,11 +120,13 @@ oper
"ú" => "u" "ú" => "u"
} ; } ;
alemVn : Str = alem + V + "n" ; alemVn : Str = alem + V + "n" ;
in mkAdj alemAn (alemVn + "a") (alemVn + "es") in mkAdj alemAn alemAn (alemVn + "a") (alemVn + "a")
(alemVn + "as") (alemVn + "amente") ; (alemVn + "es") (alemVn + "as") (alemVn + "amente") ;
mkAdjReg : Str -> Adj = \solo -> mkAdjReg : Str -> Adj = \solo ->
case solo of { case solo of {
"grande" => adjGrande "gran" "grande" ;
"bueno" => adjBueno solo ;
_ + "o" => adjSolo solo ; _ + "o" => adjSolo solo ;
_ + ("e" | "a") => adjUtil solo (solo + "s") ; _ + ("e" | "a") => adjUtil solo (solo + "s") ;
_ + "és" => adjEs solo ; _ + "és" => adjEs solo ;
@@ -153,11 +169,11 @@ oper
-- Determiners, traditionally called indefinite pronouns, are inflected -- Determiners, traditionally called indefinite pronouns, are inflected
-- in gender and number, like adjectives. -- in gender and number, like adjectives.
pronForms : Adj -> Gender -> Number -> Str = \tale,g,n -> tale.s ! AF g n ; pronForms : Adj -> Gender -> Number -> Str = \tale,g,n -> tale.s ! genNum2Aform g n ;
mkOrdinal : A -> Ord = \adj-> mkOrdinal : A -> Ord = \adj->
lin Ord { lin Ord {
s = \\ag => adj.s ! Posit ! AF ag.g ag.n ; s = \\ag => adj.s ! Posit ! genNum2Aform ag.g ag.n ;
} ; } ;
mkQuantifier : (ese,esa,esos,esas : Str) -> Quant = \ese,esa,esos,esas-> mkQuantifier : (ese,esa,esos,esas : Str) -> Quant = \ese,esa,esos,esas->

View File

@@ -156,14 +156,18 @@ oper
-- One-place adjectives compared with "mas" need five forms in the worst -- One-place adjectives compared with "mas" need five forms in the worst
-- case (masc and fem singular, masc plural, adverbial). -- case (masc and fem singular, masc plural, adverbial).
mkA : (solo,sola,solos,solas,solamente : Str) -> A ; -- worst-case mkA : (solo,sola,solos,solas,solamente : Str) -> A ; -- almost worst-case, except for buen/bueno gran/grande
mkA : (gran,grande,gran,grande,grandes,grandes,solamente : Str) -> A ; -- worst-case
-- In the worst case, two separate adjectives are given: -- In the worst case, two separate adjectives are given:
-- the positive ("bueno"), and the comparative ("mejor"). -- the positive ("bueno"), and the comparative ("mejor").
mkA : (bueno : A) -> (mejor : A) -> A ; -- special comparison (default with "mas") mkA : (bueno : A) -> (mejor : A) -> A ; -- special comparison (default with "mas")
mkA : (blanco : A) -> (hueso : Str) -> A -- noninflecting component after the adjective mkA : (blanco : A) -> (hueso : Str) -> A ; -- noninflecting component after the adjective
mkA : A -> CopulaType -> A -- force copula type
} ; } ;
-- The functions above create postfix adjectives. To switch -- The functions above create postfix adjectives. To switch
@@ -354,23 +358,25 @@ oper
makeNP x g n = {s = (pn2np (mk2PN x g)).s; a = agrP3 g n ; hasClit = False ; isPol = False ; isNeg = False} ** {lock_NP = <>} ; makeNP x g n = {s = (pn2np (mk2PN x g)).s; a = agrP3 g n ; hasClit = False ; isPol = False ; isNeg = False} ** {lock_NP = <>} ;
mk5A a b c d e = mk7A a b c d e f g =
compADeg {s = \\_ => (mkAdj a b c d e).s ; isPre = False ; lock_A = <>} ; compADeg {s = \\_ => (mkAdj a b c d e f g).s ; isPre = False ; copTyp = serCopula ; lock_A = <>} ;
mk2A a b = mk5A a b c d e = mk7A a a b b c d e ;
compADeg {s = \\_ => (adjEspanol a b).s ; isPre = False ; lock_A = <>} ;
regA a = compADeg {s = \\_ => (mkAdjReg a).s ; isPre = False ; lock_A = <>} ; mk2A a b = compADeg {s = \\_ => (adjEspanol a b).s ; isPre = False ; copTyp = serCopula ; lock_A = <>} ;
prefA a = {s = a.s ; isPre = True ; lock_A = <>} ;
regA a = compADeg {s = \\_ => (mkAdjReg a).s ; isPre = False ; copTyp = serCopula ; lock_A = <>} ;
adjCopula a cop = a ** {copTyp = cop} ;
prefA a = {s = a.s ; isPre = True ; copTyp = a.copTyp ; lock_A = <>} ;
mkA2 a p = a ** {c2 = p ; lock_A2 = <>} ; mkA2 a p = a ** {c2 = p ; lock_A2 = <>} ;
mkADeg a b = mkADeg a b =
{s = table {Posit => a.s ! Posit ; _ => b.s ! Posit} ; {s = table {Posit => a.s ! Posit ; _ => b.s ! Posit} ;
isPre = a.isPre ; lock_A = <>} ; isPre = a.isPre ; copTyp = a.copTyp ; lock_A = <>} ;
compADeg a = compADeg a =
{s = table {Posit => a.s ! Posit ; _ => \\f => "más" ++ a.s ! Posit ! f} ; {s = table {Posit => a.s ! Posit ; _ => \\f => "más" ++ a.s ! Posit ! f} ;
isPre = a.isPre ; isPre = a.isPre ; copTyp = a.copTyp ;
lock_A = <>} ; lock_A = <>} ;
regADeg a = compADeg (regA a) ; regADeg a = compADeg (regA a) ;
@@ -407,7 +413,7 @@ oper
special_ppV ve pa = { special_ppV ve pa = {
s = table { s = table {
VPart g n => (adjSolo pa).s ! AF g n ; VPart g n => (adjSolo pa).s ! genNum2Aform g n ;
p => ve.s ! p p => ve.s ! p
} ; } ;
lock_V = <> ; lock_V = <> ;
@@ -508,14 +514,19 @@ oper
mkA : (util : Str) -> A = regA ; mkA : (util : Str) -> A = regA ;
mkA : (espanol,espanola : Str) -> A = mk2A ; mkA : (espanol,espanola : Str) -> A = mk2A ;
mkA : (solo,sola,solos,solas,solamente : Str) -> A = mk5A ; mkA : (solo,sola,solos,solas,solamente : Str) -> A = mk5A ;
mkA : (_,_,_,_,_,_,_ : Str) -> A = mk7A ;
mkA : (bueno : A) -> (mejor : A) -> A = mkADeg ; mkA : (bueno : A) -> (mejor : A) -> A = mkADeg ;
mkA : (blanco : A) -> (hueso : Str) -> A = \blanco,hueso -> blanco ** mkA : (blanco : A) -> (hueso : Str) -> A = \blanco,hueso -> blanco **
{ s = \\x,y => blanco.s ! x ! y ++ hueso } ; { s = \\x,y => blanco.s ! x ! y ++ hueso } ;
mkA : A -> CopulaType -> A =
adjCopula ;
} ; } ;
mk7A : (_,_,_,_,_,_,_ : Str) -> A ;
mk5A : (solo,sola,solos,solas,solamente : Str) -> A ; mk5A : (solo,sola,solos,solas,solamente : Str) -> A ;
mk2A : (espanol,espanola : Str) -> A ; mk2A : (espanol,espanola : Str) -> A ;
regA : Str -> A ; regA : Str -> A ;
adjCopula : A -> CopulaType -> A ;
mkADeg : A -> A -> A ; mkADeg : A -> A -> A ;
compADeg : A -> A ; compADeg : A -> A ;
regADeg : Str -> A ; regADeg : Str -> A ;

View File

@@ -89,7 +89,8 @@ lin
PastPartAP v = { PastPartAP v = {
s = table { s = table {
AF g n => v.s ! VPart g n ; ASg g _ => v.s ! VPart g Sg ;
APl g _ => v.s ! VPart g Pl ;
_ => v.s ! VPart Masc Sg ---- the adverb form _ => v.s ! VPart Masc Sg ---- the adverb form
} ; } ;
isPre = True isPre = True