mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-05-11 20:22:51 -06:00
312 lines
10 KiB
Plaintext
312 lines
10 KiB
Plaintext
-- ResMlt.gf: Language-specific parameter types, morphology, VP formation
|
|
--
|
|
-- Maltese Resource Grammar Library
|
|
-- John J. Camilleri, 2012
|
|
-- Licensed under LGPL
|
|
|
|
--# -path=.:../abstract:../common:../prelude
|
|
|
|
{-
|
|
Verb types summary:
|
|
===================
|
|
- Strong verb: none of radicals are semi-vowels eg ĦAREĠ (Ħ-R-Ġ)
|
|
- Defective verb: third radical is semivowel GĦ eg QATA' (Q-T-GĦ)
|
|
- Weak verb: third radical is semivowel J eg MEXA (M-X-J)
|
|
- Hollow verb: long A or IE btw radicals 1 & 3 eg QAL (Q-W-L) or SAB (S-J-B)
|
|
- Double/Geminated verb: radicals 2 & 3 identical eg ĦABB (Ħ-B-B)
|
|
- Quadriliteral verb: 4 radicals eg QARMEĊ (Q-R-M-Ċ)
|
|
-}
|
|
|
|
|
|
resource ResMlt = PatternsMlt ** open Prelude in {
|
|
|
|
flags coding=utf8 ;
|
|
|
|
param
|
|
|
|
-- Used in the NumeralMlt module
|
|
CardOrd = NCard | NOrd ;
|
|
DTail = T1 | T2 | T3 ; -- This is already defined in ParamX...
|
|
Num_Number =
|
|
NumSg
|
|
| NumDual
|
|
| NumPl
|
|
;
|
|
DForm =
|
|
Unit -- 0..10
|
|
| Teen -- 11-19
|
|
--| TeenIl -- 11-19
|
|
| Ten -- 20-99
|
|
| Hund -- 100..999
|
|
--| Thou -- 1000+
|
|
;
|
|
Num_Case =
|
|
NumNominative
|
|
| NumAdjectival ;
|
|
|
|
|
|
{-
|
|
Note: NNQ = Non-numerically quantifiable
|
|
|
|
Nouns can have the following forms:
|
|
o Singular
|
|
- Singulative (1, >10)
|
|
- Collective (NNQ)
|
|
o Dual (2)
|
|
o Plural
|
|
- Determinate (2-10)
|
|
- Indeterminate (NNQ)
|
|
- Sound
|
|
- Broken
|
|
- Plural of Plural
|
|
|
|
Typical combinations thereof (* marks base form):
|
|
- Singulative, no plural!
|
|
- Singulative*, Plural
|
|
- Singulative* (1), Dual (2), Plural (>2)
|
|
- Singulative (1, >10), Collective* (NNQ), Determinate Plural (2-10)
|
|
- Singulative, Collective*, Determinate Plural, Indeterminate Plural -> very few nouns have these 4 forms
|
|
-}
|
|
Noun_Sg_Type =
|
|
Singulative -- eg ĦUTA
|
|
| Collective -- eg ĦUT
|
|
;
|
|
Noun_Pl_Type =
|
|
Determinate -- eg ĦUTIET
|
|
| Indeterminate -- eg ĦWIET
|
|
;
|
|
Noun_Number =
|
|
Singular Noun_Sg_Type -- eg ĦUTA / ĦUT
|
|
| Dual -- eg WIDNEJN
|
|
| Plural Noun_Pl_Type -- eg ĦUTIET / ĦWIET
|
|
;
|
|
|
|
{-
|
|
Noun_PluralType =
|
|
Sound -- External (affix), eg FERGĦA -> FERGĦAT
|
|
| Broken -- Internal, eg FERGĦA -> FRIEGĦI
|
|
| Irregular -- eg MARA -> NISA
|
|
| PluralOfPlural -- eg TARF -> TRUF -> TRUFIJIET
|
|
| Foreign -- eg KARTI, PRATTIĊI, TELEVIXINS
|
|
;
|
|
-}
|
|
|
|
Gender = Masc | Fem ;
|
|
|
|
Animacy =
|
|
Animate
|
|
| Inanimate
|
|
;
|
|
|
|
Definiteness =
|
|
Definite -- eg IL-KARTA. In this context same as Determinate
|
|
| Indefinite -- eg KARTA
|
|
;
|
|
|
|
{-
|
|
-- CASE AS DEFINED BY GRAMMATIKA MALTIJA, p132
|
|
-- Noun cases
|
|
Case =
|
|
Nominative -- referent as subject, eg IT-TARBIJA ...
|
|
| Genitive -- referent as possessor, eg ... TAT-TARBIJA
|
|
| Accusative -- referent as direct object
|
|
| Dative -- referent as indirect object, eg ... LIT-TARBIJA
|
|
| Ablative -- referent as instrument, cause, location, source or time, eg ... MINN TARBIJA
|
|
| Vocative -- referent being adressed, eg AA TARBIJA (lol)
|
|
;
|
|
-}
|
|
{-
|
|
-- CASE AS DEFINED BY ME
|
|
-- Noun cases (note my examples include DEFINITE ARTICLE)
|
|
-- Commented lines mean that noun iflection is unchanged, not that the case does not occur in Maltese!
|
|
Case =
|
|
-- Absessive -- lack or absence of referent (MINGĦAJR)
|
|
-- | Ablative -- referent as instrument, cause, location, source or time
|
|
-- | Absolutive -- subject of intransitive or object of transitive verb (in ergative-absolutive languages)
|
|
-- | Accusative -- referent as direct object (in nominative-accusative languages)
|
|
-- | Allative -- motion towards referent (LEJN)
|
|
-- | Additive -- synonym of Allative (above)
|
|
Benefactive -- referent as recipient, eg GĦAT-TARBIJA. cf Dative.
|
|
-- | Causative -- referent as the cause of a situation (MINĦABBA)
|
|
| Comitative -- with, eg MAT-TARBIJA
|
|
| Dative -- referent as indirect object, eg LIT-TARBIJA. cf Benefactive.
|
|
-- | Delative -- motion downward from referent
|
|
| Elative -- motion away from referent, eg MIT-TARBIJA
|
|
| Equative -- likeness or identity, eg BĦAT-TARBIJA
|
|
-- | Ergative -- subject of transitive verb (in ergative-absolutive languages)
|
|
-- | Essive -- temporary state / while / in capacity of (BĦALA)
|
|
| Genitive -- referent as possessor, eg TAT-TARBIJA
|
|
-- | Illative -- motion into / towards referent, eg SAT-TARBIJA. cf Allative.
|
|
| Inessive -- within referent, eg ĠOT-TARBIJA, FIT-TARBIJA
|
|
| Instrumental -- referent as instrument, eg BIT-TARBIJA. cf Ablative.
|
|
| Lative -- motion up to referent, eg SAT-TARBIJA
|
|
-- | Locative -- location at referent
|
|
| Nominative -- referent as subject, eg IT-TARBIJA
|
|
-- | Partitive -- partial nature of referent
|
|
-- | Prolative -- motion along / beside referent
|
|
-- | Superessive -- on / upon (FUQ)
|
|
-- | Translative -- referent noun or adjective as result of process of change
|
|
-- | Vocative -- referent being adressed, eg AA TARBIJA (lol)
|
|
;
|
|
-}
|
|
-- Person = P1 | P2 | P3 ;
|
|
-- State = Def | Indef | Const ;
|
|
-- Mood = Ind | Cnj | Jus ;
|
|
-- Voice = Act | Pas ;
|
|
Origin =
|
|
Semitic
|
|
| Romance
|
|
| English
|
|
;
|
|
-- Order = Verbal | Nominal ;
|
|
|
|
-- Just for my own use
|
|
-- Mamma = Per3 Sg Masc ;
|
|
|
|
-- Shortcut type
|
|
-- GenNum = gn Gender Number2 ;
|
|
|
|
|
|
Person_Number = Sg | Pl ;
|
|
|
|
-- Agreement features
|
|
Agr =
|
|
Per1 Person_Number -- Jiena, Aħna
|
|
| Per2 Person_Number -- Inti, Intom
|
|
| Per3Sg Gender -- Huwa, Hija
|
|
| Per3Pl -- Huma
|
|
;
|
|
|
|
-- Possible tenses
|
|
Tense =
|
|
Perf -- Perfect tense, eg SERAQ
|
|
| Impf -- Imperfect tense, eg JISRAQ
|
|
| Imp -- Imperative, eg ISRAQ
|
|
-- | PresPart -- Present Particible. Intransitive and 'motion' verbs only, eg NIEŻEL
|
|
-- | PastPart -- Past Particible. Both verbal & adjectival function, eg MISRUQ
|
|
-- | VerbalNoun -- Verbal Noun, eg SERQ
|
|
;
|
|
|
|
-- Possible verb forms (tense + person)
|
|
VForm =
|
|
VPerf Agr -- Perfect tense in all pronoun cases
|
|
| VImpf Agr -- Imperfect tense in all pronoun cases
|
|
| VImp Person_Number -- Imperative is always Per2, Sg & Pl
|
|
-- | VPresPart GenNum -- Present Particible for Gender/Number
|
|
-- | VPastPart GenNum -- Past Particible for Gender/Number
|
|
-- | VVerbalNoun -- Verbal Noun
|
|
;
|
|
|
|
-- Possible verb types
|
|
VType =
|
|
Strong -- Strong verb: none of radicals are semi-vowels eg ĦAREĠ (Ħ-R-Ġ)
|
|
| Defective -- Defective verb: third radical is semivowel GĦ eg QATA' (Q-T-GĦ)
|
|
| Weak -- Weak verb: third radicl is semivowel J eg MEXA (M-X-J)
|
|
| Hollow -- Hollow verb: long A or IE btw radicals 1 & 3 eg QAL (Q-W-L) or SAB (S-J-B)
|
|
| Double -- Double/Geminated verb: radicals 2 & 3 identical eg ĦABB (Ħ-B-B)
|
|
| Quad -- Quadliteral verb eg KARKAR (K-R-K-R), MAQDAR (M-Q-D-R), LEMBEB (L-M-B-B)
|
|
;
|
|
|
|
oper
|
|
|
|
-- Roots & Patterns
|
|
Pattern : Type = {v1, v2 : Str} ; -- vowel1, vowel2
|
|
-- Root3 : Type = {K, T, B : Str} ;
|
|
-- Root4 : Type = Root3 ** {L : Str} ;
|
|
Root : Type = {K, T, B, L : Str} ;
|
|
|
|
-- Some classes. I need to include "c" because currently "ċ" gets downgraded to "c" in input :/
|
|
Consonant : pattern Str = #( "b" | "c" | "ċ" | "d" | "f" | "ġ" | "g" | "għ" | "ħ" | "h" | "j" | "k" | "l" | "m" | "n" | "p" | "q" | "r" | "s" | "t" | "v" | "w" | "x" | "ż" | "z" );
|
|
CoronalConsonant : pattern Str = #( "c" | "ċ" | "d" | "n" | "r" | "s" | "t" | "x" | "ż" | "z" ); -- "konsonanti xemxin"
|
|
LiquidCons : pattern Str = #( "l" | "m" | "n" | "r" | "għ" );
|
|
Vowel : pattern Str = #( "a" | "e" | "i" | "o" | "u" );
|
|
Digraph : pattern Str = #( "ie" );
|
|
SemiVowel : pattern Str = #( "għ" | "j" );
|
|
|
|
{- ===== Type declarations ===== -}
|
|
|
|
-- VP = {
|
|
-- v : Verb ;
|
|
-- clit : Str ;
|
|
-- clitAgr : ClitAgr ;
|
|
-- obj : Agr => Str
|
|
-- } ;
|
|
|
|
-- NP = {
|
|
-- s : Case => {clit,obj : Str ; isClit : Bool} ;
|
|
-- a : Agr
|
|
-- } ;
|
|
|
|
{-
|
|
Noun : Type = {
|
|
s : Number5 => Str ;
|
|
g : Gender ;
|
|
} ;
|
|
-}
|
|
Noun : Type = {
|
|
s : Noun_Number => Str ;
|
|
g : Gender ;
|
|
} ;
|
|
|
|
Adj : Type = {
|
|
s : Gender => Person_Number => Str ;
|
|
-- isPre : Bool ;
|
|
} ;
|
|
|
|
Verb : Type = {
|
|
s : VForm => Str ; -- Give me the form (tense, person etc) and I'll give you the string
|
|
t : VType ; -- Inherent - Strong/Hollow etc
|
|
o : Origin ; -- Inherent - a verb of Semitic or Romance origins?
|
|
} ;
|
|
|
|
|
|
{- ===== Useful helper functions ===== -}
|
|
|
|
addDefinitePreposition : Str -> Str -> Str = \prep,n -> (getDefinitePreposition prep n) ++ n ;
|
|
addDefiniteArticle = addDefinitePreposition "il" ;
|
|
getDefiniteArticle = getDefinitePreposition "il" ;
|
|
|
|
-- Correctly inflect definite preposition
|
|
-- A more generic version of getDefiniteArticle
|
|
-- Params:
|
|
-- preposition (eg TAL, MAL, BĦALL)
|
|
-- noun
|
|
-- NOTE trying to call this with a runtime string will cause a world of pain. Design around it.
|
|
getDefinitePreposition : Str -> Str -> Str = \prep,noun ->
|
|
let
|
|
-- Remove either 1 or 2 l's
|
|
prepStem : Str = case prep of {
|
|
_ + "ll" => Predef.tk 2 prep ;
|
|
_ + "l" => Predef.tk 1 prep ;
|
|
_ => prep -- this should never happen, I don't think
|
|
}
|
|
in
|
|
case noun of {
|
|
("s"|#LiquidCons) + #Consonant + _ => prep + "-i" ; -- L-ISKOLA
|
|
("għ" | #Vowel) + _ => case prep of { -- L-GĦATBA...
|
|
("fil"|"bil") => (Predef.take 1 prep) + "l-" ;
|
|
"il" => "l" + "-" ;
|
|
_ => prep + "-"
|
|
};
|
|
K@#CoronalConsonant + _ => prepStem + K + "-" ; -- IĊ-ĊISK
|
|
#Consonant + _ => prep + "-" ; -- IL-QADDIS
|
|
_ => [] -- ?
|
|
} ;
|
|
|
|
definiteArticle : Str =
|
|
pre {
|
|
"il-" ;
|
|
"l-" / strs { "a" ; "e" ; "i" ; "o" ; "u" ; "h" ; "għ" } ;
|
|
"iċ-" / strs { "ċ" } ;
|
|
"id-" / strs { "d" } ;
|
|
"in-" / strs { "n" } ;
|
|
"ir-" / strs { "r" } ;
|
|
"is-" / strs { "s" } ;
|
|
"it-" / strs { "t" } ;
|
|
"ix-" / strs { "x" } ;
|
|
"iż-" / strs { "ż" } ;
|
|
"iz-" / strs { "z" }
|
|
} ;
|
|
|
|
}
|