summaryrefslogtreecommitdiff
path: root/old-lib/resource/spanish/MorphoSpa.gf
diff options
context:
space:
mode:
Diffstat (limited to 'old-lib/resource/spanish/MorphoSpa.gf')
-rw-r--r--old-lib/resource/spanish/MorphoSpa.gf121
1 files changed, 121 insertions, 0 deletions
diff --git a/old-lib/resource/spanish/MorphoSpa.gf b/old-lib/resource/spanish/MorphoSpa.gf
new file mode 100644
index 000000000..4868758df
--- /dev/null
+++ b/old-lib/resource/spanish/MorphoSpa.gf
@@ -0,0 +1,121 @@
+--# -path=.:../romance:../common:../../prelude
+
+--1 A Simple Spanish Resource Morphology
+--
+-- Aarne Ranta 2002 -- 2005
+--
+-- This resource morphology contains definitions needed in the resource
+-- syntax. To build a lexicon, it is better to use $ParadigmsSpa$, which
+-- gives a higher-level access to this module.
+
+resource MorphoSpa = CommonRomance, ResSpa **
+ open PhonoSpa, Prelude, Predef in {
+
+ flags optimize=all ;
+
+
+--2 Nouns
+--
+-- The following macro is useful for creating the forms of number-dependent
+-- tables, such as common nouns.
+
+oper
+ numForms : (_,_ : Str) -> Number => Str = \vino, vini ->
+ table {Sg => vino ; Pl => vini} ;
+
+-- For example:
+
+ nomVino : Str -> Number => Str = \vino ->
+ numForms vino (vino + "s") ;
+
+ nomPilar : Str -> Number => Str = \pilar ->
+ numForms pilar (pilar + "es") ;
+
+ nomTram : Str -> Number => Str = \tram ->
+ numForms tram tram ;
+
+-- Common nouns are inflected in number and have an inherent gender.
+
+ mkNoun : (Number => Str) -> Gender -> Noun = \mecmecs,gen ->
+ {s = mecmecs ; g = gen} ;
+
+ mkNounIrreg : Str -> Str -> Gender -> Noun = \mec,mecs ->
+ mkNoun (numForms mec mecs) ;
+
+ mkNomReg : Str -> Noun = \mec ->
+ case last mec of {
+ "o" | "e" => mkNoun (nomVino mec) Masc ;
+ "a" => mkNoun (nomVino mec) Fem ;
+ "z" => mkNounIrreg mec (init mec + "ces") Fem ;
+ _ => mkNoun (nomPilar mec) Masc
+ } ;
+
+--2 Adjectives
+--
+-- Adjectives are conveniently seen as gender-dependent nouns.
+-- Here are some patterns. First one that describes the worst case.
+
+ mkAdj : (_,_,_,_,_ : Str) -> Adj = \solo,sola,soli,sole,solamente ->
+ {s = table {
+ AF Masc n => numForms solo soli ! n ;
+ AF Fem n => numForms sola sole ! n ;
+ AA => solamente
+ }
+ } ;
+
+-- Then the regular and invariant patterns.
+
+ adjSolo : Str -> Adj = \solo ->
+ let
+ sol = Predef.tk 1 solo
+ in
+ mkAdj solo (sol + "a") (sol + "os") (sol + "as") (sol + "amente") ;
+
+ adjUtil : Str -> Str -> Adj = \util,utiles ->
+ mkAdj util util utiles utiles (util + "mente") ;
+
+ adjBlu : Str -> Adj = \blu ->
+ mkAdj blu blu blu blu blu ; ---
+
+ mkAdjReg : Str -> Adj = \solo ->
+ case last solo of {
+ "o" => adjSolo solo ;
+ "e" => adjUtil solo (solo + "s") ;
+ _ => adjUtil solo (solo + "es")
+---- _ => adjBlu solo
+ } ;
+
+--2 Personal pronouns
+--
+-- All the eight personal pronouns can be built by the following macro.
+-- The use of "ne" as atonic genitive is debatable.
+-- We follow the rule that the atonic nominative is empty.
+
+ mkPronoun : (_,_,_,_,_,_,_,_ : Str) ->
+ Gender -> Number -> Person -> Pronoun =
+ \il,le,lui,Lui,son,sa,ses,see,g,n,p ->
+ {s = table {
+ Ton Nom => il ;
+ Ton x => prepCase x ++ Lui ;
+ Aton Nom => strOpt il ; ---- [] ;
+ Aton Acc => le ;
+ Aton (CPrep P_a) => lui ;
+ Aton q => prepCase q ++ Lui ; ---- GF bug with c or p!
+ Poss Masc Sg => son ;
+ Poss Fem Sg => sa ;
+ Poss Masc Pl => ses ;
+ Poss Fem Pl => see
+ } ;
+ a = {g = g ; n = n ; p = p} ;
+ hasClit = True
+ } ;
+
+
+--2 Determiners
+--
+-- Determiners, traditionally called indefinite pronouns, are inflected
+-- in gender and number, like adjectives.
+
+ pronForms : Adj -> Gender -> Number -> Str = \tale,g,n -> tale.s ! AF g n ;
+
+}