mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-12 22:39:31 -06:00
Significant advances in Maltese verb morphology
This commit is contained in:
@@ -6,6 +6,44 @@
|
||||
|
||||
concrete AdjectiveMlt of Adjective = CatMlt ** open ResMlt, Prelude in {
|
||||
|
||||
-- AP
|
||||
lin
|
||||
|
||||
-- A -> AP
|
||||
PositA a = {
|
||||
s = \\gn => a.s ! (APosit gn) ;
|
||||
isPre = True -- TO CHECK
|
||||
} ;
|
||||
|
||||
-- A -> NP -> AP
|
||||
ComparA a np = {
|
||||
s = \\gn => case a.hasComp of {
|
||||
True => a.s ! ACompar ;
|
||||
_ => compMore ++ a.s ! (APosit gn)
|
||||
}
|
||||
++ conjThan ++ np.s ! Nom ;
|
||||
isPre = False -- TO CHECK
|
||||
} ;
|
||||
|
||||
-- A -> AP
|
||||
UseComparA a = {
|
||||
s = \\gn => case a.hasComp of {
|
||||
True => a.s ! ACompar ;
|
||||
_ => compMore ++ a.s ! (APosit gn)
|
||||
} ;
|
||||
isPre = False -- TO CHECK
|
||||
} ;
|
||||
|
||||
-- Ord -> AP
|
||||
-- AdjOrd ord = {
|
||||
-- s = \\_ => ord.s ! Nom ;
|
||||
-- isPre = True
|
||||
-- } ;
|
||||
|
||||
oper
|
||||
-- TODO: Don't know where these should go
|
||||
compMore : Str = "iktar" | "iżjed" ;
|
||||
compLess : Str = "inqas" ;
|
||||
conjThan : Str = "minn" ;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -4,63 +4,115 @@
|
||||
-- John J. Camilleri, 2012
|
||||
-- Licensed under LGPL
|
||||
|
||||
--concrete CatMlt of Cat = CommonX ** open ResMlt, Prelude, ParamX in {
|
||||
{-
|
||||
All code in comments was copied from CatEng.gf and may need to be corrected for Maltese.
|
||||
The same overall structure should be maintained.
|
||||
-}
|
||||
|
||||
concrete CatMlt of Cat = CommonX ** open ResMlt, Prelude in {
|
||||
|
||||
flags optimize=all_subs ;
|
||||
|
||||
flags
|
||||
optimize=all_subs ;
|
||||
|
||||
lincat
|
||||
-- S = {s : Str} ;
|
||||
-- Cl = {s : ResMlt.Tense => Bool => Str} ;
|
||||
-- NP = ResMlt.NP ; -- {s : Case => {clit,obj : Str ; isClit : Bool} ; a : Agr} ;
|
||||
-- VP = ResMlt.VP ; -- {v : Verb ; clit : Str ; clitAgr : ClitAgr ; obj : Agr => Str} ;
|
||||
-- AP = {s : Gender => Number => Str ; isPre : Bool} ;
|
||||
-- CN = ResMlt.Noun ; -- {s : Number => Str ; g : Gender} ;
|
||||
-- Det = {s : Gender => Case => Str ; n : Number} ;
|
||||
N = ResMlt.Noun ;
|
||||
N2 = ResMlt.Noun ;
|
||||
N3 = ResMlt.Noun ;
|
||||
A = ResMlt.Adj ;
|
||||
V = ResMlt.Verb ;
|
||||
-- V2 = ResMlt.Verb ** {c : Case} ;
|
||||
-- AdA = {s : Str} ;
|
||||
-- Pol = {s : Str ; b : Bool} ;
|
||||
-- Tense = {s : Str ; t : ResMlt.Tense} ;
|
||||
-- Conj = {s : Str ; n : Number} ;
|
||||
|
||||
-- Tensed/Untensed
|
||||
|
||||
-- Cardinal or ordinal in WORDS (not digits)
|
||||
-- S = {s : Str} ;
|
||||
-- QS = {s : QForm => Str} ;
|
||||
-- RS = {s : Agr => Str ; c : NPCase} ; -- c for it clefts
|
||||
-- SSlash = {s : Str ; c2 : Str} ;
|
||||
|
||||
-- Sentence
|
||||
|
||||
-- Cl = {s : ResMlt.Tense => Anteriority => Polarity => Order => Str} ;
|
||||
-- ClSlash = {
|
||||
-- s : ResMlt.Tense => Anteriority => Polarity => Order => Str ;
|
||||
-- c2 : Str
|
||||
-- } ;
|
||||
-- Imp = {s : Polarity => ImpForm => Str} ;
|
||||
|
||||
-- Question
|
||||
|
||||
-- QCl = {s : ResMlt.Tense => Anteriority => Polarity => QForm => Str} ;
|
||||
-- IP = {s : NPCase => Str ; n : Number} ;
|
||||
-- IComp = {s : Str} ;
|
||||
-- IDet = {s : Str ; n : Number} ;
|
||||
-- IQuant = {s : Number => Str} ;
|
||||
|
||||
-- Relative
|
||||
|
||||
-- RCl = {
|
||||
-- s : ResMlt.Tense => Anteriority => Polarity => Agr => Str ;
|
||||
-- c : NPCase
|
||||
-- } ;
|
||||
-- RP = {s : RCase => Str ; a : RAgr} ;
|
||||
|
||||
-- Verb
|
||||
|
||||
-- VP = ResMlt.VP ;
|
||||
-- VPSlash = ResMlt.VP ** {c2 : Str} ;
|
||||
-- Comp = {s : Agr => Str} ;
|
||||
|
||||
-- Adjective
|
||||
|
||||
-- AP = {s : Agr => Str ; isPre : Bool} ;
|
||||
AP = {s : GenNum => Str ; isPre : Bool} ;
|
||||
|
||||
-- Noun
|
||||
|
||||
CN = Noun ;
|
||||
NP = {s : NPCase => Str ; a : Agr} ;
|
||||
-- Pron = {s : NPCase => Str ; sp : Case => Str ; a : Agr} ;
|
||||
Det = {s : Str ; n : Num_Number ; hasNum : Bool} ;
|
||||
-- Det = {s : Str ; sp : NPCase => Str ; n : Number ; hasNum : Bool} ;
|
||||
-- Predet = {s : Str} ;
|
||||
-- Ord = { s : Case => Str } ;
|
||||
Num = {s : Num_Case => Str ; n : Num_Number ; hasCard : Bool} ;
|
||||
-- Card = {s : Case => Str ; n : Number} ;
|
||||
-- Quant = {s : Bool => Number => Str ; sp : Bool => Number => NPCase => Str} ;
|
||||
Quant = {s : Bool => Num_Number => Str} ;
|
||||
|
||||
-- Numeral
|
||||
|
||||
-- Cardinal or ordinal in WORDS (not digits) [JJC]
|
||||
Numeral = {
|
||||
s : CardOrd => Num_Case => Str ;
|
||||
n : Num_Number
|
||||
} ;
|
||||
|
||||
-- Cardinal or ordinal in DIGITS (not words)
|
||||
-- Cardinal or ordinal in DIGITS (not words) [JJC]
|
||||
Digits = {
|
||||
s : Str ; -- No need for CardOrd, i.e. no 1st, 2nd etc in Maltese
|
||||
n : Num_Number ;
|
||||
tail : DTail
|
||||
};
|
||||
|
||||
{-
|
||||
-- These below are just examples, I believe they came form Italian.
|
||||
S = {s : Str} ;
|
||||
Cl = {s : ResMlt.Tense => Bool => Str} ;
|
||||
NP = {s : Case => {clit,obj : Str ; isClit : Bool} ; a : Agr} ;
|
||||
VP = {v : Verb ; clit : Str ; clitAgr : ClitAgr ; obj : Agr => Str} ;
|
||||
AP = {s : Gender => Number => Str ; isPre : Bool} ;
|
||||
CN = {s : Number => Str ; g : Gender} ;
|
||||
Det = {s : Gender => Case => Str ; n : Number} ;
|
||||
N = {s : Number => Str ; g : Gender} ;
|
||||
N2 = {s : Number => Str ; g : Gender} ;
|
||||
A = {s : Number => Str ; isPre : Bool} ;
|
||||
V = ResMlt.Verb ;
|
||||
V2 = ResMlt.Verb ** {c : Case} ;
|
||||
AdA = {s : Str} ;
|
||||
Pol = {s : Str ; b : Bool} ;
|
||||
Tense = {s : Str ; t : ResMlt.Tense} ;
|
||||
Conj = {s : Str ; n : Number} ;
|
||||
-}
|
||||
|
||||
-- Structural
|
||||
|
||||
-- Conj = {s1,s2 : Str ; n : Number} ;
|
||||
-- ---b Conj = {s : Str ; n : Number} ;
|
||||
-- ---b DConj = {s1,s2 : Str ; n : Number} ;
|
||||
-- Subj = {s : Str} ;
|
||||
Prep = {s : Str} ;
|
||||
|
||||
-- Open lexical classes, e.g. Lexicon
|
||||
|
||||
V, VS, VQ, VA = Verb ; -- = {s : VForm => Str} ;
|
||||
V2, V2A, V2Q, V2S = Verb ** {c2 : Str} ;
|
||||
V3 = Verb ** {c2, c3 : Str} ;
|
||||
-- VV = {s : VVForm => Str ; typ : VVType} ;
|
||||
-- V2V = Verb ** {c2,c3 : Str ; typ : VVType} ;
|
||||
|
||||
-- [JJC]
|
||||
A = Adjective ** {hasComp : Bool} ; -- Does the adjective have a comparative form (e.g. ISBAĦ)?
|
||||
-- A2 = Adjective ** {c2 : Str} ;
|
||||
|
||||
-- [JJC]
|
||||
N, N3 = Noun ;
|
||||
N2 = Noun ** {c2 : Str} ;
|
||||
-- N3 = Noun ** {c2,c3 : Str} ;
|
||||
PN = ProperNoun ;
|
||||
|
||||
}
|
||||
|
||||
@@ -6,9 +6,5 @@
|
||||
|
||||
concrete IdiomMlt of Idiom = CatMlt ** open Prelude, ResMlt in {
|
||||
|
||||
-- Cl
|
||||
-- QCl
|
||||
-- VP
|
||||
-- Utt
|
||||
|
||||
}
|
||||
|
||||
@@ -7,390 +7,357 @@
|
||||
--# -path=.:../abstract:../common:../prelude
|
||||
|
||||
concrete LexiconMlt of Lexicon = CatMlt **
|
||||
--open ParadigmsMlt, ResMlt, Prelude in {
|
||||
open ParadigmsMlt, IrregMlt, ResMlt in {
|
||||
open Prelude, ParadigmsMlt, IrregMlt in {
|
||||
|
||||
flags optimize=values ; coding=utf8 ;
|
||||
flags
|
||||
optimize=values ;
|
||||
coding=utf8 ;
|
||||
|
||||
lin
|
||||
|
||||
{- ===== My Verbs ===== -}
|
||||
|
||||
{-
|
||||
cut_V2 = mkVerb "qata'" "aqta'" "aqtgħu" ;
|
||||
write_V2 = mkVerb "kiteb" ;
|
||||
break_V2 = mkVerb "kiser" ;
|
||||
find_V2 = mkVerb "sab" ;
|
||||
throw_V2 = mkVerb "tefa'" ;
|
||||
hear_V2 = mkVerb "sama'" "isma'" "isimgħu" ;
|
||||
fear_V2 = mkVerb "beża'" ;
|
||||
pray_V = mkVerb "talab" "itlob" "itolbu" ;
|
||||
understand_V2 = mkVerb "fehem" ;
|
||||
pull_V2 = mkVerb "ġibed" ;
|
||||
walk_V = mkVerb "mexa'" ;
|
||||
-}
|
||||
-- die_V = mkVerb "miet" ;
|
||||
die_V = mkVerb "qarmeċ" ;
|
||||
|
||||
|
||||
{- ===== My Nouns ===== -}
|
||||
|
||||
--airplane_N = mkNoun "ajruplan" Masc ;
|
||||
airplane_N = mkNoun "ajruplan" ;
|
||||
--apple_N = mkNoun "tuffieħa" Fem ;
|
||||
apple_N = mkNounColl "tuffieħ" ;
|
||||
|
||||
bench_N = mkNoun "bank" "bankijiet" ;
|
||||
|
||||
|
||||
|
||||
{- ===== Required by RGL ===== -}
|
||||
|
||||
|
||||
-- add_V3
|
||||
-- alas_Interj
|
||||
-- already_Adv
|
||||
animal_N = mkNoun "annimal" ;
|
||||
animal_N = mkN "annimal" ;
|
||||
-- answer_V2S
|
||||
apartment_N = mkNoun "appartament" ;
|
||||
art_N = mkNounNoPlural "arti" Fem ;
|
||||
-- ashes_N = mkNoun "rmied" ;
|
||||
apartment_N = mkN "appartament" ;
|
||||
art_N = mkNNoPlural "arti" feminine ;
|
||||
-- ashes_N = mkN "rmied" ;
|
||||
-- ask_V2Q
|
||||
baby_N = mkNoun "tarbija" "trabi" ;
|
||||
back_N = mkNoun "dahar" "dhur" ;
|
||||
-- bad_A
|
||||
bank_N = mkNoun "bank" "bankijiet" ; -- BANEK is for lotto booths!
|
||||
bark_N = mkNoun "qoxra" "qoxriet" ;
|
||||
-- beautiful_A
|
||||
baby_N = mkN "tarbija" "trabi" ;
|
||||
back_N = mkN "dahar" "dhur" ; -- pronSuffix
|
||||
bad_A = brokenA "ħażin" "hżiena" "agħar" ;
|
||||
bank_N = mkN "bank" "bankijiet" ; -- BANEK is for lotto booths!
|
||||
bark_N = mkN "qoxra" "qoxriet" ;
|
||||
beautiful_A = brokenA "sabiħ" "sbieħ" "isbaħ" ;
|
||||
-- become_VA
|
||||
beer_N = mkNoun "birra" "birer" ;
|
||||
beer_N = mkN "birra" "birer" ;
|
||||
-- beg_V2V
|
||||
belly_N = mkNoun "żaqq" "żquq" ;
|
||||
-- big_A
|
||||
bike_N = mkNoun "rota" ;
|
||||
bird_N = mkNoun "għasfur" "għasafar" ; -- what about GĦASFURA?
|
||||
belly_N = mkN "żaqq" "żquq" ; -- pronSuffix
|
||||
big_A = brokenA "kbir" "kbar" "ikbar" ;
|
||||
bike_N = mkN "rota" ;
|
||||
bird_N = mkN "għasfur" "għasafar" ; -- what about GĦASFURA?
|
||||
-- bite_V2
|
||||
-- black_A
|
||||
blood_N = mkNoun [] "demm" [] "dmija" [] ;
|
||||
black_A = mkA "iswed" "sewda" "suwed" ;
|
||||
blood_N = mkN [] "demm" [] "dmija" [] ; -- pronSuffix
|
||||
-- blow_V
|
||||
-- blue_A
|
||||
boat_N = mkNoun "dgħajsa" "dgħajjes" ;
|
||||
bone_N = mkNounColl "għadam" ;
|
||||
book_N = mkNoun "ktieb" "kotba" ;
|
||||
boot_N = mkNoun "żarbun" "żraben" ; -- what about ŻARBUNA?
|
||||
boss_N = mkNoun "mgħallem" "mgħallmin" ;
|
||||
boy_N = mkNoun "tifel" "tfal" ;
|
||||
bread_N = mkNounColl "ħobż" ;
|
||||
blue_A = sameA "blu" ;
|
||||
boat_N = mkN "dgħajsa" "dgħajjes" ;
|
||||
bone_N = mkNColl "għadam" ;
|
||||
book_N = mkN "ktieb" "kotba" ;
|
||||
boot_N = mkN "żarbun" "żraben" ; -- what about ŻARBUNA?
|
||||
boss_N = mkN "mgħallem" "mgħallmin" ;
|
||||
boy_N = mkN "tifel" "tfal" ;
|
||||
bread_N = mkNColl "ħobż" ;
|
||||
-- break_V2
|
||||
breast_N = mkNoun "sider" "sdur" ; -- also ISDRA
|
||||
breast_N = mkN "sider" "sdur" ; -- also ISDRA -- pronSuffix
|
||||
-- breathe_V
|
||||
-- broad_A
|
||||
brother_N2 = mkNoun "ħu" "aħwa" ;
|
||||
-- brown_A
|
||||
broad_A = mkA "wiesgħa" "wiesgħa" "wiesgħin" ;
|
||||
brother_N2 = mkN2 (mkN "ħu" "aħwa") (mkPrep "ta'") ; -- pronSuffix
|
||||
brown_A = sameA "kannella" ;
|
||||
-- burn_V
|
||||
butter_N = mkNoun [] "butir" [] "butirijiet" [] ;
|
||||
butter_N = mkN [] "butir" [] "butirijiet" [] ;
|
||||
-- buy_V2
|
||||
camera_N = mkNoun "kamera" "kameras" ;
|
||||
cap_N = mkNoun "beritta" ;
|
||||
car_N = mkNoun "karozza" ;
|
||||
carpet_N = mkNoun "tapit" ; -- TAPITI or TWAPET ?
|
||||
cat_N = mkNoun "qattus" "qtates" ; -- what about QATTUSA ?
|
||||
ceiling_N = mkNoun "saqaf" "soqfa";
|
||||
chair_N = mkNoun "siġġu" "siġġijiet" ;
|
||||
cheese_N = mkNounColl "ġobon" ;
|
||||
-- child_N = mkNoun "tfajjel" ; -- Not an easy one...
|
||||
church_N = mkNoun "knisja" "knejjes" ;
|
||||
city_N = mkNoun "belt" "bliet" Fem ;
|
||||
-- clean_A
|
||||
-- clever_A
|
||||
camera_N = mkN "kamera" "kameras" ;
|
||||
cap_N = mkN "beritta" ;
|
||||
car_N = mkN "karozza" ;
|
||||
carpet_N = mkN "tapit" ; -- TAPITI or TWAPET ?
|
||||
cat_N = mkN "qattus" "qtates" ; -- what about QATTUSA ?
|
||||
ceiling_N = mkN "saqaf" "soqfa";
|
||||
chair_N = mkN "siġġu" "siġġijiet" ;
|
||||
cheese_N = mkNColl "ġobon" ;
|
||||
-- child_N = mkN "tfajjel" ; -- Not an easy one...
|
||||
church_N = mkN "knisja" "knejjes" ;
|
||||
city_N = mkN "belt" "bliet" feminine ; -- pronSuffix
|
||||
clean_A = brokenA "nadif" "nodfa" ;
|
||||
clever_A = regA "bravu" ;
|
||||
-- close_V2
|
||||
cloud_N = mkNounColl "sħab" ;
|
||||
coat_N = mkNoun "kowt" "kowtijiet" ;
|
||||
-- cold_A
|
||||
cloud_N = mkNColl "sħab" ;
|
||||
coat_N = mkN "kowt" "kowtijiet" ;
|
||||
cold_A = mkA "kiesaħ" "kiesħa" "kesħin" ;
|
||||
-- come_V
|
||||
computer_N = mkNoun "kompjuter" "kompjuters" ;
|
||||
-- correct_A
|
||||
computer_N = mkN "kompjuter" "kompjuters" ;
|
||||
correct_A = regA "korrett" ;
|
||||
-- count_V2
|
||||
country_N = mkNoun "pajjiż" ;
|
||||
cousin_N = mkNoun "kuġin" ;
|
||||
cow_N = mkNoun "baqra" "baqar" "baqartejn" [] [] ;
|
||||
country_N = mkN "pajjiż" ; -- pronSuffix
|
||||
cousin_N = mkN "kuġin" ; -- pronSuffix
|
||||
cow_N = mkN "baqra" "baqar" "baqartejn" [] [] ;
|
||||
-- cut_V2
|
||||
day_N = mkNoun "ġurnata" "ġranet" ;
|
||||
day_N = mkN "ġurnata" "ġranet" ;
|
||||
-- dig_V
|
||||
-- dirty_A
|
||||
distance_N3 = mkNoun "distanza" ;
|
||||
dirty_A = regA "maħmuġ" ;
|
||||
distance_N3 = mkN "distanza" ;
|
||||
-- do_V2
|
||||
doctor_N = mkNoun "tabib" "tobba" ; -- what about TABIBA ?
|
||||
dog_N = mkNoun "kelb" "klieb" ;
|
||||
door_N = mkNoun "bieb" "bibien" ; -- what about BIEBA ?
|
||||
doctor_N = mkN "tabib" "tobba" ; -- what about TABIBA ?
|
||||
dog_N = mkN "kelb" "klieb" ;
|
||||
door_N = mkN "bieb" "bibien" ; -- what about BIEBA ?
|
||||
-- drink_V2
|
||||
-- dry_A
|
||||
-- dull_A
|
||||
dust_N = mkNounColl "trab" ; -- not sure but sounds right
|
||||
ear_N = mkNounDual "widna" ;
|
||||
earth_N = mkNoun "art" "artijiet" Fem ;
|
||||
dry_A = regA "niexef" ;
|
||||
dull_A = sameA "tad-dwejjaq" ;
|
||||
dust_N = mkNColl "trab" ; -- not sure but sounds right
|
||||
ear_N = mkNDual "widna" ; -- pronSuffix
|
||||
earth_N = mkN "art" "artijiet" feminine ;
|
||||
-- easy_A2V
|
||||
-- eat_V2
|
||||
egg_N = mkNounColl "bajd" ;
|
||||
-- empty_A
|
||||
enemy_N = mkNoun "għadu" "għedewwa" ;
|
||||
eye_N = mkNounWorst "għajn" [] "għajnejn" "għajnejn" "għejun" Fem ;
|
||||
factory_N = mkNoun "fabbrika" ;
|
||||
egg_N = mkNColl "bajd" ;
|
||||
empty_A = mkA "vojt" "vojta" "vojta" ;
|
||||
enemy_N = mkN "għadu" "għedewwa" ;
|
||||
eye_N = mk5N "għajn" [] "għajnejn" "għajnejn" "għejun" feminine ; -- pronSuffix
|
||||
factory_N = mkN "fabbrika" ;
|
||||
-- fall_V
|
||||
-- far_Adv
|
||||
fat_N = mkNounColl "xaħam" ;
|
||||
father_N2 = mkNoun "missier" "missierijiet" ;
|
||||
fat_N = mkNColl "xaħam" ;
|
||||
father_N2 = mkN2 (mkN "missier" "missierijiet") (mkPrep "ta'") ; -- pronSuffix
|
||||
-- fear_V2
|
||||
-- fear_VS
|
||||
feather_N = mkNounColl "rix" ;
|
||||
feather_N = mkNColl "rix" ;
|
||||
-- fight_V2
|
||||
-- find_V2
|
||||
fingernail_N = mkNoun "difer" [] "difrejn" "dwiefer" [] ;
|
||||
fire_N = mkNoun "nar" "nirien" ;
|
||||
fish_N = mkNounColl "ħut" ;
|
||||
fingernail_N = mkN "difer" [] "difrejn" "dwiefer" [] ; -- pronSuffix
|
||||
fire_N = mkN "nar" "nirien" ;
|
||||
fish_N = mkNColl "ħut" ;
|
||||
-- float_V
|
||||
earth_N = mkNoun "art" "artijiet" Fem ;
|
||||
earth_N = mkN "art" "artijiet" feminine ;
|
||||
-- flow_V
|
||||
flower_N = mkNoun "fjura" ;
|
||||
flower_N = mkN "fjura" ;
|
||||
-- fly_V
|
||||
fog_N = mkNoun [] "ċpar" [] [] [] ;
|
||||
foot_N = mkNounWorst "sieq" [] "saqajn" "saqajn" [] Fem ;
|
||||
forest_N = mkNoun "foresta" ; -- also MASĠAR
|
||||
fog_N = mkN [] "ċpar" [] [] [] ;
|
||||
foot_N = mk5N "sieq" [] "saqajn" "saqajn" [] feminine ; -- pronSuffix
|
||||
forest_N = mkN "foresta" ; -- also MASĠAR
|
||||
-- forget_V2
|
||||
-- freeze_V
|
||||
fridge_N = mkNoun "friġġ" "friġġijiet" ;
|
||||
friend_N = mkNoun "ħabib" "ħbieb" ;
|
||||
fruit_N = mkNounColl "frott" ;
|
||||
-- full_A
|
||||
fridge_N = mkN "friġġ" "friġġijiet" ;
|
||||
friend_N = mkN "ħabib" "ħbieb" ; -- pronSuffix
|
||||
fruit_N = mkNColl "frott" ;
|
||||
full_A = regA "mimli" ;
|
||||
-- fun_AV
|
||||
garden_N = mkNoun "ġnien" "ġonna" ;
|
||||
girl_N = mkNoun "tifla" "tfal" ;
|
||||
garden_N = mkN "ġnien" "ġonna" ;
|
||||
girl_N = mkN "tifla" "tfal" ;
|
||||
-- give_V3
|
||||
glove_N = mkNoun "ingwanta" ;
|
||||
glove_N = mkN "ingwanta" ;
|
||||
-- go_V
|
||||
gold_N = mkNoun [] "deheb" [] "dehbijiet" [] ;
|
||||
-- good_A
|
||||
grammar_N = mkNoun "grammatika" ;
|
||||
grass_N = mkNounWorst "ħaxixa" "ħaxix" [] [] "ħxejjex" Masc ; -- Dict says ĦAXIX = n.koll.m.s., f. -a, pl.ind. ĦXEJJEX
|
||||
-- green_A
|
||||
guts_N = mkNoun "musrana" [] [] "musraniet" "msaren" ;
|
||||
hair_N = mkNoun "xagħar" [] [] "xagħariet" "xgħur" ;
|
||||
hand_N = mkNounWorst "id" [] "idejn" "idejn" [] Fem ;
|
||||
harbour_N = mkNoun "port" "portijiet" ;
|
||||
hat_N = mkNoun "kappell" "kpiepel" ;
|
||||
gold_N = mkN [] "deheb" [] "dehbijiet" [] ;
|
||||
good_A = mkA "tajjeb" "tajba" "tajbin" ;
|
||||
grammar_N = mkN "grammatika" ;
|
||||
grass_N = mk5N "ħaxixa" "ħaxix" [] [] "ħxejjex" masculine ; -- Dict says ĦAXIX = n.koll.m.s., f. -a, pl.ind. ĦXEJJEX
|
||||
green_A = mkA "aħdar" "ħadra" "ħodor" ;
|
||||
guts_N = mkN "musrana" [] [] "musraniet" "msaren" ; -- pronSuffix
|
||||
hair_N = mkN "xagħar" [] [] "xagħariet" "xgħur" ; -- pronSuffix
|
||||
hand_N = mk5N "id" [] "idejn" "idejn" [] feminine ; -- pronSuffix
|
||||
harbour_N = mkN "port" "portijiet" ;
|
||||
hat_N = mkN "kappell" "kpiepel" ;
|
||||
-- hate_V2
|
||||
head_N = mkNoun "ras" "rjus" Fem ;
|
||||
head_N = mkN "ras" "rjus" feminine ; -- pronSuffix
|
||||
-- hear_V2
|
||||
heart_N = mkNoun "qalb" "qlub" Fem ;
|
||||
-- heavy_A
|
||||
hill_N = mkNoun "għolja" "għoljiet" ;
|
||||
heart_N = mkN "qalb" "qlub" feminine ; -- pronSuffix
|
||||
heavy_A = brokenA "tqil" "tqal" "itqal" ;
|
||||
hill_N = mkN "għolja" "għoljiet" ;
|
||||
-- hit_V2
|
||||
-- hold_V2
|
||||
-- hope_VS
|
||||
horn_N = mkNoun "ħorn" "ħornijiet" ;
|
||||
horse_N = mkNoun "żiemel" "żwiemel" ;
|
||||
-- hot_A
|
||||
house_N = mkNoun "dar" "djar" Fem ;
|
||||
horn_N = mkN "ħorn" "ħornijiet" ;
|
||||
horse_N = mkN "żiemel" "żwiemel" ;
|
||||
hot_A = brokenA "sħun" "sħan" ;
|
||||
house_N = mkN "dar" "djar" feminine ;
|
||||
-- hunt_V2
|
||||
husband_N = mkNoun "raġel" "rġiel" ;
|
||||
ice_N = mkNoun "silġ" "silġiet" ;
|
||||
-- important_A
|
||||
industry_N = mkNoun "industrija" ;
|
||||
iron_N = mkNounWorst "ħadida" "ħadid" [] "ħadidiet" "ħdejjed" Masc ;
|
||||
husband_N = mkN "raġel" "rġiel" ; -- pronSuffix ŻEWĠI
|
||||
ice_N = mkN "silġ" "silġiet" ;
|
||||
important_A = sameA "importanti" ;
|
||||
industry_N = mkN "industrija" ;
|
||||
iron_N = mk5N "ħadida" "ħadid" [] "ħadidiet" "ħdejjed" masculine ;
|
||||
-- john_PN
|
||||
-- jump_V
|
||||
-- kill_V2
|
||||
king_N = mkNoun "re" "rejjiet" ;
|
||||
knee_N = mkNoun "rkoppa" [] "rkopptejn" "rkoppiet" [] ; -- TODO use mkNounDual
|
||||
king_N = mkN "re" "rejjiet" ;
|
||||
knee_N = mkN "rkoppa" [] "rkopptejn" "rkoppiet" [] ; -- TODO use mkNDual -- pronSuffix
|
||||
-- know_V2
|
||||
-- know_VQ
|
||||
-- know_VS
|
||||
lake_N = mkNoun "għadira" "għadajjar" ;
|
||||
lamp_N = mkNoun "lampa" ;
|
||||
language_N = mkNoun "lingwa" ; -- lsien?
|
||||
lake_N = mkN "għadira" "għadajjar" ;
|
||||
lamp_N = mkN "lampa" ;
|
||||
language_N = mkN "lingwa" ; -- lsien?
|
||||
-- laugh_V
|
||||
leaf_N = mkNoun "werqa" "weraq" "werqtejn" "werqiet" [] ;
|
||||
leaf_N = mkN "werqa" "weraq" "werqtejn" "werqiet" [] ;
|
||||
-- learn_V2
|
||||
leather_N = mkNoun "ġilda" "ġild" [] "ġildiet" "ġlud" ; -- mkNounColl "ġild" ;
|
||||
leather_N = mkN "ġilda" "ġild" [] "ġildiet" "ġlud" ; -- mkNColl "ġild" ;
|
||||
-- leave_V2
|
||||
-- left_Ord
|
||||
leg_N = mkNoun "riġel" [] "riġlejn" [] [] ; -- sieq?
|
||||
leg_N = mkN "riġel" [] "riġlejn" [] [] ; -- sieq? -- pronSuffix
|
||||
-- lie_V
|
||||
-- like_V2
|
||||
-- listen_V2
|
||||
-- live_V
|
||||
liver_N = mkNoun "fwied" [] [] [] "ifdwa" ;
|
||||
-- long_A
|
||||
liver_N = mkN "fwied" [] [] [] "ifdwa" ; -- pronSuffix
|
||||
long_A = brokenA "twil" "twal" "itwal" ;
|
||||
-- lose_V2
|
||||
louse_N = mkNoun "qamla" "qamliet" ;
|
||||
love_N = mkNoun "mħabba" "mħabbiet" ; -- hmmm
|
||||
louse_N = mkN "qamla" "qamliet" ;
|
||||
love_N = mkN "mħabba" "mħabbiet" ; -- hmmm
|
||||
-- love_V2
|
||||
man_N = mkNoun "raġel" "rġiel" ;
|
||||
man_N = mkN "raġel" "rġiel" ;
|
||||
-- married_A2
|
||||
meat_N = mkNoun "laħam" [] [] "laħmiet" "laħmijiet" ;
|
||||
milk_N = mkNoun [] "ħalib" [] "ħalibijiet" "ħlejjeb" ;
|
||||
moon_N = mkNoun "qamar" "oqmra" ; -- qmura?
|
||||
mother_N2 = mkNoun "omm" "ommijiet" Fem ;
|
||||
mountain_N = mkNoun "muntanja" ;
|
||||
mouth_N = mkNoun "ħalq" "ħluq" ;
|
||||
music_N = mkNoun "musika" ; -- plural?
|
||||
name_N = mkNoun "isem" "ismijiet" ;
|
||||
-- narrow_A
|
||||
-- near_A
|
||||
neck_N = mkNoun "għonq" "għenuq" ;
|
||||
-- new_A
|
||||
newspaper_N = mkNoun "gazzetta" ;
|
||||
night_N = mkNoun "lejl" "ljieli" ;
|
||||
nose_N = mkNoun "mnieħer" "mniħrijiet" ;
|
||||
meat_N = mkN "laħam" [] [] "laħmiet" "laħmijiet" ;
|
||||
milk_N = mkN [] "ħalib" [] "ħalibijiet" "ħlejjeb" ;
|
||||
moon_N = mkN "qamar" "oqmra" ; -- qmura?
|
||||
mother_N2 = mkN2 (mkN "omm" "ommijiet" feminine) (mkPrep "ta'") ; -- pronSuffix
|
||||
mountain_N = mkN "muntanja" ;
|
||||
mouth_N = mkN "ħalq" "ħluq" ; -- pronSuffix
|
||||
music_N = mkN "musika" ; -- plural?
|
||||
name_N = mkN "isem" "ismijiet" ; -- pronSuffix
|
||||
narrow_A = mkA "dejjaq" "dejqa" "dojoq" "idjaq" ;
|
||||
near_A = regA "viċin" ;
|
||||
neck_N = mkN "għonq" "għenuq" ; -- pronSuffix
|
||||
new_A = brokenA "ġdid" "ġodda" ;
|
||||
newspaper_N = mkN "gazzetta" ;
|
||||
night_N = mkN "lejl" "ljieli" ;
|
||||
nose_N = mkN "mnieħer" "mniħrijiet" ; -- pronSuffix
|
||||
-- now_Adv
|
||||
number_N = mkNoun "numru" ;
|
||||
oil_N = mkNoun "żejt" "żjut" ;
|
||||
-- old_A
|
||||
number_N = mkN "numru" ;
|
||||
oil_N = mkN "żejt" "żjut" ;
|
||||
old_A = brokenA "qadim" "qodma" "eqdem" ;
|
||||
-- open_V2
|
||||
-- paint_V2A
|
||||
paper_N = mkNoun "karta" ;
|
||||
paper_N = mkN "karta" ;
|
||||
-- paris_PN
|
||||
peace_N = mkNoun "paċi" "paċijiet" Fem ;
|
||||
pen_N = mkNoun "pinna" "pinen" ;
|
||||
person_N = mkNounWorst [] "persuna" [] "persuni" [] Masc ;
|
||||
planet_N = mkNoun "pjaneta" ;
|
||||
plastic_N = mkNounNoPlural "plastik" ;
|
||||
peace_N = mkN "paċi" "paċijiet" feminine ;
|
||||
pen_N = mkN "pinna" "pinen" ;
|
||||
person_N = mk5N [] "persuna" [] "persuni" [] masculine ;
|
||||
planet_N = mkN "pjaneta" ;
|
||||
plastic_N = mkNNoPlural "plastik" ;
|
||||
-- play_V
|
||||
-- play_V2
|
||||
policeman_N = mkNounNoPlural "pulizija" ;
|
||||
priest_N = mkNoun "qassis" "qassisin" ;
|
||||
policeman_N = mkNNoPlural "pulizija" ;
|
||||
priest_N = mkN "qassis" "qassisin" ;
|
||||
-- probable_AS
|
||||
-- pull_V2
|
||||
-- push_V2
|
||||
-- put_V2
|
||||
queen_N = mkNoun "reġina" "rġejjen" ;
|
||||
question_N = mkNoun "mistoqsija" "mistoqsijiet" ; -- domanda?
|
||||
radio_N = mkNoun "radju" "radjijiet" ;
|
||||
rain_N = mkNounNoPlural "xita" ;
|
||||
queen_N = mkN "reġina" "rġejjen" ;
|
||||
question_N = mkN "mistoqsija" "mistoqsijiet" ; -- domanda?
|
||||
radio_N = mkN "radju" "radjijiet" ;
|
||||
rain_N = mkNNoPlural "xita" ;
|
||||
-- rain_V0
|
||||
-- read_V2
|
||||
-- ready_A
|
||||
reason_N = mkNoun "raġun" "raġunijiet" ;
|
||||
-- red_A
|
||||
religion_N = mkNoun "reliġjon" "reliġjonijiet" ;
|
||||
restaurant_N = mkNoun "restorant" ;
|
||||
ready_A = regA "lest" ;
|
||||
reason_N = mkN "raġun" "raġunijiet" ;
|
||||
red_A = mkA "aħmar" "ħamra" "ħomor" ;
|
||||
religion_N = mkN "reliġjon" "reliġjonijiet" ;
|
||||
restaurant_N = mkN "restorant" ;
|
||||
-- right_Ord
|
||||
river_N = mkNoun "xmara" "xmajjar" ;
|
||||
road_N = mkNounWorst "triq" [] [] "triqat" "toroq" Fem ;
|
||||
rock_N = mkNoun "blata" "blat" [] "blatiet" "blajjiet" ; -- in dictionary BLAT and BLATA are separate!
|
||||
roof_N = mkNoun "saqaf" "soqfa" ;
|
||||
root_N = mkNoun "qħerq" "qħeruq" ;
|
||||
rope_N = mkNoun "ħabel" "ħbula" ;
|
||||
-- rotten_A
|
||||
-- round_A
|
||||
river_N = mkN "xmara" "xmajjar" ;
|
||||
road_N = mk5N "triq" [] [] "triqat" "toroq" feminine ;
|
||||
rock_N = mkN "blata" "blat" [] "blatiet" "blajjiet" ; -- in dictionary BLAT and BLATA are separate!
|
||||
roof_N = mkN "saqaf" "soqfa" ;
|
||||
root_N = mkN "qħerq" "qħeruq" ;
|
||||
rope_N = mkN "ħabel" "ħbula" ;
|
||||
rotten_A = mkA "mħassar" "mħassra" "mħassrin" ;
|
||||
round_A = regA "tond" ;
|
||||
-- rub_V2
|
||||
rubber_N = mkNoun "gomma" "gomom" ;
|
||||
rule_N = mkNoun "regola" ;
|
||||
rubber_N = mkN "gomma" "gomom" ;
|
||||
rule_N = mkN "regola" ;
|
||||
-- run_V
|
||||
salt_N = mkNoun "melħ" "melħiet" ;
|
||||
sand_N = mkNoun "ramla" "ramel" [] "ramliet" "rmiel" ;
|
||||
salt_N = mkN "melħ" "melħiet" ;
|
||||
sand_N = mkN "ramla" "ramel" [] "ramliet" "rmiel" ;
|
||||
-- say_VS
|
||||
school_N = mkNoun "skola" "skejjel" ;
|
||||
science_N = mkNoun "xjenza" ;
|
||||
school_N = mkN "skola" "skejjel" ;
|
||||
science_N = mkN "xjenza" ;
|
||||
-- scratch_V2
|
||||
sea_N = mkNoun "baħar" [] "baħrejn" "ibħra" [] ;
|
||||
sea_N = mkN "baħar" [] "baħrejn" "ibħra" [] ;
|
||||
-- see_V2
|
||||
seed_N = mkNoun "żerriegħa" "żerrigħat" ;
|
||||
seed_N = mkN "żerriegħa" "żerrigħat" ;
|
||||
-- seek_V2
|
||||
-- sell_V3
|
||||
-- send_V3
|
||||
-- sew_V
|
||||
-- sharp_A
|
||||
sheep_N = mkNoun "nagħġa" "nagħaġ" [] "nagħġiet" [] ;
|
||||
ship_N = mkNoun "vapur" ;
|
||||
shirt_N = mkNoun "qmis" "qomos" Fem ;
|
||||
shoe_N = mkNoun "żarbun" "żraben" ;
|
||||
shop_N = mkNoun "ħanut" "ħwienet" ;
|
||||
-- short_A
|
||||
silver_N = mkNoun "fidda" "fided" ;
|
||||
sharp_A = mkA "jaqta" "taqta" "jaqtgħu" ; -- TODO: apostrophe?
|
||||
sheep_N = mkN "nagħġa" "nagħaġ" [] "nagħġiet" [] ;
|
||||
ship_N = mkN "vapur" ;
|
||||
shirt_N = mkN "qmis" "qomos" feminine ;
|
||||
shoe_N = mkN "żarbun" "żraben" ;
|
||||
shop_N = mkN "ħanut" "ħwienet" ;
|
||||
short_A = brokenA "qasir" "qosra" "iqsar" ;
|
||||
silver_N = mkN "fidda" "fided" ;
|
||||
-- sing_V
|
||||
sister_N = mkNoun "oħt" "aħwa" Fem ;
|
||||
sister_N = mkN "oħt" "aħwa" feminine ; -- pronSuffix
|
||||
-- sit_V
|
||||
skin_N = mkNoun "ġilda" "ġildiet" ;
|
||||
sky_N = mkNoun "sema" "smewwiet" Masc ;
|
||||
skin_N = mkN "ġilda" "ġildiet" ;
|
||||
sky_N = mkN "sema" "smewwiet" masculine ;
|
||||
-- sleep_V
|
||||
-- small_A
|
||||
small_A = brokenA "zgħir" "zgħar" "iżgħar" ;
|
||||
-- smell_V
|
||||
smoke_N = mkNoun "duħħan" "dħaħen" ;
|
||||
-- smooth_A
|
||||
snake_N = mkNoun "serp" "sriep" ;
|
||||
snow_N = mkNoun [] "borra" [] [] [] ;
|
||||
sock_N = mkNoun "kalzetta" ;
|
||||
song_N = mkNoun "kanzunetta" ;
|
||||
smoke_N = mkN "duħħan" "dħaħen" ;
|
||||
smooth_A = regA "lixx" ;
|
||||
snake_N = mkN "serp" "sriep" ;
|
||||
snow_N = mkN [] "borra" [] [] [] ;
|
||||
sock_N = mkN "kalzetta" ;
|
||||
song_N = mkN "kanzunetta" ;
|
||||
-- speak_V2
|
||||
-- spit_V
|
||||
-- split_V2
|
||||
-- squeeze_V2
|
||||
-- stab_V2
|
||||
-- stand_V
|
||||
star_N = mkNoun "stilla" "stilel" ;
|
||||
steel_N = mkNounNoPlural "azzar" ;
|
||||
stick_N = mkNoun "lasta" ;
|
||||
stone_N = mkNoun "ġebla" "ġebel" [] "ġebliet" "ġbiel" ;
|
||||
star_N = mkN "stilla" "stilel" ;
|
||||
steel_N = mkNNoPlural "azzar" ;
|
||||
stick_N = mkN "lasta" ;
|
||||
stone_N = mkN "ġebla" "ġebel" [] "ġebliet" "ġbiel" ;
|
||||
-- stop_V
|
||||
stove_N = mkNoun "kuker" "kukers" ; -- fuklar?
|
||||
-- straight_A
|
||||
student_N = mkNoun "student" ;
|
||||
-- stupid_A
|
||||
stove_N = mkN "kuker" "kukers" ; -- fuklar?
|
||||
straight_A = regA "dritt" ;
|
||||
student_N = mkN "student" ;
|
||||
stupid_A = mkA "iblah" "belha" "boloh" ; -- these are really nouns...
|
||||
-- suck_V2
|
||||
sun_N = mkNoun "xemx" "xmux" Fem ;
|
||||
sun_N = mkN "xemx" "xmux" feminine ;
|
||||
-- swell_V
|
||||
-- swim_V
|
||||
-- switch8off_V2
|
||||
-- switch8on_V2
|
||||
table_N = mkNoun "mejda" "mwejjed" ;
|
||||
tail_N = mkNoun "denb" "dnieb" ;
|
||||
table_N = mkN "mejda" "mwejjed" ;
|
||||
tail_N = mkN "denb" "dnieb" ; -- pronSuffix
|
||||
-- talk_V3
|
||||
-- teach_V2
|
||||
teacher_N = mkNoun "għalliem" "għalliema" ; -- għalliema ?
|
||||
television_N = mkNoun "televixin" "televixins" ;
|
||||
-- thick_A
|
||||
-- thin_A
|
||||
teacher_N = mkN "għalliem" "għalliema" ; -- għalliema ?
|
||||
television_N = mkN "televixin" "televixins" ;
|
||||
thick_A = mkA "oħxon" "ħoxna" "ħoxnin" "eħxen" ;
|
||||
thin_A = brokenA "irqiq" "irqaq" "irqaq" ;
|
||||
-- think_V
|
||||
-- throw_V2
|
||||
-- tie_V2
|
||||
-- today_Adv
|
||||
tongue_N = mkNoun "lsien" "ilsna" ;
|
||||
tooth_N = mkNoun "sinna" [] [] "sinniet" "snien" ; -- darsa?
|
||||
train_N = mkNoun "ferrovija" ;
|
||||
tongue_N = mkN "lsien" "ilsna" ; -- pronSuffix
|
||||
tooth_N = mkN "sinna" [] [] "sinniet" "snien" ; -- darsa? -- pronSuffix
|
||||
train_N = mkN "ferrovija" ;
|
||||
-- travel_V
|
||||
tree_N = mkNoun "siġra" "siġar" [] "siġriet" [] ;
|
||||
tree_N = mkN "siġra" "siġar" [] "siġriet" [] ;
|
||||
-- turn_V
|
||||
-- ugly_A
|
||||
-- uncertain_A
|
||||
ugly_A = mkA "ikrah" "kerha" "koroh" ; -- ikreh?
|
||||
uncertain_A = regA "inċert" ;
|
||||
-- understand_V2
|
||||
university_N = mkNoun "università" "universitàjiet" ;
|
||||
village_N = mkNoun "raħal" "rħula" ; -- villaġġ ?
|
||||
university_N = mkN "università" "universitàjiet" ;
|
||||
village_N = mkN "raħal" "rħula" ; -- villaġġ ? -- pronSuffix
|
||||
-- vomit_V
|
||||
-- wait_V2
|
||||
-- walk_V
|
||||
war_N = mkNoun "gwerra" "gwerrer" ;
|
||||
-- warm_A
|
||||
war_N = mkN "gwerra" "gwerrer" ;
|
||||
warm_A = hot_A ;
|
||||
-- wash_V2
|
||||
-- watch_V2
|
||||
water_N = mkNoun "ilma" "ilmijiet" Masc ;
|
||||
-- wet_A
|
||||
-- white_A
|
||||
-- wide_A
|
||||
wife_N = mkNoun "mara" "nisa" ;
|
||||
water_N = mkN "ilma" "ilmijiet" masculine ;
|
||||
wet_A = mkA "imxarrab" "imxarrba" "imxarrbin" ;
|
||||
white_A = mkA "abjad" "bajda" "bojod" ;
|
||||
wide_A = broad_A ;
|
||||
wife_N = mkN "mara" "nisa" ; -- pronSuffix MARTI
|
||||
-- win_V2
|
||||
wind_N = mkNoun "riħ" [] [] "rjieħ" "rjiħat" ;
|
||||
window_N = mkNoun "tieqa" "twieqi" ;
|
||||
wine_N = mkNoun [] "nbid" [] [] "nbejjed" ;
|
||||
wing_N = mkNoun "ġewnaħ" "ġwienaħ" ;
|
||||
wind_N = mkN "riħ" [] [] "rjieħ" "rjiħat" ;
|
||||
window_N = mkN "tieqa" "twieqi" ;
|
||||
wine_N = mkN [] "nbid" [] [] "nbejjed" ;
|
||||
wing_N = mkN "ġewnaħ" "ġwienaħ" ;
|
||||
-- wipe_V2
|
||||
woman_N = mkNoun "mara" "nisa" ;
|
||||
woman_N = mkN "mara" "nisa" ;
|
||||
-- wonder_VQ
|
||||
wood_N = mkNoun "injam" "injamiet" ;
|
||||
worm_N = mkNoun "dudu" "dud" [] "dudiet" "dwied" ; -- duda
|
||||
wood_N = mkN "injam" "injamiet" ;
|
||||
worm_N = mkN "dudu" "dud" [] "dudiet" "dwied" ; -- duda
|
||||
-- write_V2
|
||||
year_N = mkNoun "sena" [] "sentejn" "snin" [] ;
|
||||
-- yellow_A
|
||||
-- young_A
|
||||
year_N = mkN "sena" [] "sentejn" "snin" [] ; -- pronSuffix SNINI (only plural though!)
|
||||
yellow_A = mkA "isfar" "safra" "sofor" ;
|
||||
young_A = small_A ;
|
||||
|
||||
} ;
|
||||
|
||||
@@ -5,7 +5,49 @@
|
||||
-- Licensed under LGPL
|
||||
|
||||
concrete NounMlt of Noun = CatMlt ** open ResMlt, Prelude in {
|
||||
flags optimize=noexpand ;
|
||||
|
||||
flags
|
||||
optimize=noexpand ;
|
||||
|
||||
lin
|
||||
-- Det -> CN -> NP
|
||||
DetCN det cn = {
|
||||
s = \\c => det.s ++ cn.s ! numnum2nounnum det.n ! NRegular ;
|
||||
a = case (numnum2nounnum det.n) of {
|
||||
Singular _ => AgP3Sg cn.g ;
|
||||
_ => AgP3Pl
|
||||
}
|
||||
-- s = \\c => det.s ++ cn.s ! det.n ! npcase2case c ;
|
||||
-- a = agrgP3 det.n cn.g
|
||||
} ;
|
||||
|
||||
-- Quant -> Num -> Det
|
||||
DetQuant quant num = {
|
||||
s = quant.s ! num.hasCard ! num.n ++ num.s ! NumNominative;
|
||||
-- sp = \\c => case num.hasCard of {
|
||||
-- False => quant.sp ! num.hasCard ! num.n ! c ++ num.s ! Nom ;
|
||||
-- True => quant.sp ! num.hasCard ! num.n ! npNom ++ num.s ! npcase2case c
|
||||
-- } ;
|
||||
n = num.n ;
|
||||
hasNum = num.hasCard
|
||||
} ;
|
||||
|
||||
-- Quant
|
||||
DefArt = {
|
||||
s = \\hasCard,n => artDef ;
|
||||
-- sp = \\hasCard,n => case <n,hasCard> of {
|
||||
-- <Sg,False> => table { NCase Gen => "its"; _ => "it" } ;
|
||||
-- <Pl,False> => table { NCase Nom => "they"; NPAcc => "them"; NCase Gen => "theirs" } ;
|
||||
-- _ => \\c => artDef
|
||||
-- }
|
||||
} ;
|
||||
|
||||
-- Num
|
||||
NumSg = {s = \\c => []; n = Num_Sg ; hasCard = False} ;
|
||||
NumPl = {s = \\c => []; n = Num_Pl ; hasCard = False} ;
|
||||
|
||||
UseN n = n ;
|
||||
UseN2 n = n ;
|
||||
|
||||
-- Card
|
||||
-- CN
|
||||
|
||||
@@ -79,18 +79,18 @@ concrete NumeralMlt of Numeral = CatMlt [Numeral,Digits] ** open Prelude,ResMlt
|
||||
-- adjectival, eg ŻEWĠ
|
||||
-- teen, eg TNAX
|
||||
-- ten, eg GĦOXRIN
|
||||
-- number, eg NumDual
|
||||
-- number, eg Num_Dl
|
||||
--mkNum : Str -> Str -> Str -> Str -> Str -> Str -> Str -> Num_Number -> Form1 = \unit,ordunit,adjectival,teen,ten,hundred,thousand,num -> {
|
||||
mkNum : Str -> Str -> Str -> Str -> Str -> Num_Number -> Form1 = \unit,ordunit,adjectival,teen,ten,num ->
|
||||
let
|
||||
hundred = case num of {
|
||||
NumSg => "mija" ;
|
||||
NumDual => "mitejn" ;
|
||||
Num_Sg => "mija" ;
|
||||
Num_Dl => "mitejn" ;
|
||||
_ => adjectival
|
||||
} ;
|
||||
thousand = case num of {
|
||||
NumSg => "wieħed" ;
|
||||
NumDual => "elfejn" ;
|
||||
Num_Sg => "wieħed" ;
|
||||
Num_Dl => "elfejn" ;
|
||||
_ => case adjectival of {
|
||||
_ + "'" => (init adjectival) + "t" ; -- eg SEBA' -> SEBAT
|
||||
_ + "t" => adjectival ; -- eg SITT -> SITT
|
||||
@@ -104,7 +104,7 @@ concrete NumeralMlt of Numeral = CatMlt [Numeral,Digits] ** open Prelude,ResMlt
|
||||
NumNominative => unit ; -- eg TNEJN
|
||||
NumAdjectival => adjectival -- eg ŻEWĠ
|
||||
} ;
|
||||
NOrd => \\numcase => definiteArticle ++ ordunit -- eg IT-TIENI
|
||||
NOrd => \\numcase => artDef ++ ordunit -- eg IT-TIENI
|
||||
} ;
|
||||
Teen => table {
|
||||
NCard => table {
|
||||
@@ -112,35 +112,35 @@ concrete NumeralMlt of Numeral = CatMlt [Numeral,Digits] ** open Prelude,ResMlt
|
||||
NumAdjectival => teen + "-il" -- eg TNAX-IL
|
||||
} ;
|
||||
NOrd => table {
|
||||
NumNominative => definiteArticle ++ teen ; -- eg IT-TNAX
|
||||
NumAdjectival => definiteArticle ++ (teen + "-il") -- eg IT-TNAX-IL
|
||||
NumNominative => artDef ++ teen ; -- eg IT-TNAX
|
||||
NumAdjectival => artDef ++ (teen + "-il") -- eg IT-TNAX-IL
|
||||
}
|
||||
} ;
|
||||
Ten => table {
|
||||
NCard => \\numcase => ten ; -- eg TLETIN
|
||||
NOrd => \\numcase => definiteArticle ++ ten -- eg IT-TLETIN
|
||||
NOrd => \\numcase => artDef ++ ten -- eg IT-TLETIN
|
||||
} ;
|
||||
Hund => table {
|
||||
NCard => case num of {
|
||||
NumSg => table {
|
||||
Num_Sg => table {
|
||||
NumNominative => "mija" ; -- ie MIJA
|
||||
NumAdjectival => "mitt" -- ie MITT suldat
|
||||
} ;
|
||||
NumDual => \\numcase => hundred ; -- ie MITEJN
|
||||
Num_Dl => \\numcase => hundred ; -- ie MITEJN
|
||||
_ => table {
|
||||
NumNominative => hundred ++ "mija" ; -- eg MIJA, SEBA' MIJA
|
||||
NumAdjectival => hundred ++ "mitt" -- eg MITT, SEBA' MITT suldat
|
||||
}
|
||||
} ;
|
||||
NOrd => case num of {
|
||||
NumSg => table {
|
||||
NumNominative => definiteArticle ++ "mija" ; -- ie IL-MIJA
|
||||
NumAdjectival => definiteArticle ++ "mitt" -- ie IL-MITT suldat
|
||||
Num_Sg => table {
|
||||
NumNominative => artDef ++ "mija" ; -- ie IL-MIJA
|
||||
NumAdjectival => artDef ++ "mitt" -- ie IL-MITT suldat
|
||||
} ;
|
||||
NumDual => \\numcase => definiteArticle ++ hundred ; -- ie IL-MITEJN, IL-MITEJN suldat
|
||||
Num_Dl => \\numcase => artDef ++ hundred ; -- ie IL-MITEJN, IL-MITEJN suldat
|
||||
_ => table {
|
||||
NumNominative => definiteArticle ++ hundred ++ "mija" ; -- eg IS-SEBA' MIJA
|
||||
NumAdjectival => definiteArticle ++ hundred ++ "mitt" -- eg IS-SEBA' MITT suldat
|
||||
NumNominative => artDef ++ hundred ++ "mija" ; -- eg IS-SEBA' MIJA
|
||||
NumAdjectival => artDef ++ hundred ++ "mitt" -- eg IS-SEBA' MITT suldat
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -152,14 +152,14 @@ concrete NumeralMlt of Numeral = CatMlt [Numeral,Digits] ** open Prelude,ResMlt
|
||||
|
||||
lin
|
||||
-- Unit Ord.Unit Adjectival Teen Ten Number
|
||||
n2 = mkNum "tnejn" "tieni" "żewġ" "tnax" "għoxrin" NumDual ;
|
||||
n3 = mkNum "tlieta" "tielet" "tlett" "tlettax" "tletin" NumPl ; -- TODO tlett / tliet ?
|
||||
n4 = mkNum "erbgħa" "raba'" "erba'" "erbatax" "erbgħin" NumPl ;
|
||||
n5 = mkNum "ħamsa" "ħames" "ħames" "ħmistax" "ħamsin" NumPl ;
|
||||
n6 = mkNum "sitta" "sitt" "sitt" "sittax" "sittin" NumPl ;
|
||||
n7 = mkNum "sebgħa" "seba'" "seba'" "sbatax" "sebgħin" NumPl ;
|
||||
n8 = mkNum "tmienja" "tmin" "tmin" "tmintax" "tmenin" NumPl ;
|
||||
n9 = mkNum "disgħa" "disa'" "disa'" "dsatax" "disgħin" NumPl ;
|
||||
n2 = mkNum "tnejn" "tieni" "żewġ" "tnax" "għoxrin" Num_Dl ;
|
||||
n3 = mkNum "tlieta" "tielet" "tlett" "tlettax" "tletin" Num_Pl ; -- TODO tlett / tliet ?
|
||||
n4 = mkNum "erbgħa" "raba'" "erba'" "erbatax" "erbgħin" Num_Pl ;
|
||||
n5 = mkNum "ħamsa" "ħames" "ħames" "ħmistax" "ħamsin" Num_Pl ;
|
||||
n6 = mkNum "sitta" "sitt" "sitt" "sittax" "sittin" Num_Pl ;
|
||||
n7 = mkNum "sebgħa" "seba'" "seba'" "sbatax" "sebgħin" Num_Pl ;
|
||||
n8 = mkNum "tmienja" "tmin" "tmin" "tmintax" "tmenin" Num_Pl ;
|
||||
n9 = mkNum "disgħa" "disa'" "disa'" "dsatax" "disgħin" Num_Pl ;
|
||||
|
||||
oper
|
||||
-- Helper functions for below
|
||||
@@ -173,7 +173,7 @@ concrete NumeralMlt of Numeral = CatMlt [Numeral,Digits] ** open Prelude,ResMlt
|
||||
} ;
|
||||
--thou = card ;
|
||||
thou = { s = card ; treatAs = form } ;
|
||||
n = NumPl ;
|
||||
n = Num_Pl ;
|
||||
f = form ;
|
||||
} ;
|
||||
|
||||
@@ -186,13 +186,13 @@ concrete NumeralMlt of Numeral = CatMlt [Numeral,Digits] ** open Prelude,ResMlt
|
||||
} ;
|
||||
--NOrd => \\numcase => addDefiniteArticle ord
|
||||
NOrd => table {
|
||||
NumNominative => definiteArticle ++ ord ;
|
||||
NumAdjectival => definiteArticle ++ adj
|
||||
NumNominative => artDef ++ ord ;
|
||||
NumAdjectival => artDef ++ adj
|
||||
}
|
||||
} ;
|
||||
--thou = thousand ;
|
||||
thou = { s = thousand ; treatAs = form } ;
|
||||
n = NumPl ;
|
||||
n = Num_Pl ;
|
||||
f = form ;
|
||||
} ;
|
||||
|
||||
@@ -206,7 +206,7 @@ concrete NumeralMlt of Numeral = CatMlt [Numeral,Digits] ** open Prelude,ResMlt
|
||||
} ;
|
||||
treatAs = form ;
|
||||
} ;
|
||||
n = NumPl ;
|
||||
n = Num_Pl ;
|
||||
f = form ;
|
||||
} ;
|
||||
|
||||
@@ -219,10 +219,10 @@ concrete NumeralMlt of Numeral = CatMlt [Numeral,Digits] ** open Prelude,ResMlt
|
||||
|
||||
-- Sub10 ; 1
|
||||
-- Unit Ord.Unit Adjectival Teen Ten Number
|
||||
pot01 = mkNum "wieħed" "ewwel" "wieħed" [] [] NumSg ;
|
||||
pot01 = mkNum "wieħed" "ewwel" "wieħed" [] [] Num_Sg ;
|
||||
|
||||
-- Digit -> Sub10 ; d * 1
|
||||
pot0 d = d ** {n = case d.n of { NumDual => NumDual ; _ => NumPl } } ;
|
||||
pot0 d = d ** {n = case d.n of { Num_Dl => Num_Dl ; _ => Num_Pl } } ;
|
||||
|
||||
-- Sub100 ; 10, 11
|
||||
-- Cardinal Ordinal Adjectival Thousand Form
|
||||
@@ -241,7 +241,7 @@ concrete NumeralMlt of Numeral = CatMlt [Numeral,Digits] ** open Prelude,ResMlt
|
||||
NCard => "għaxart" ;
|
||||
NOrd => addDefiniteArticle "għaxart"
|
||||
} ;
|
||||
n = NumPl ;
|
||||
n = Num_Pl ;
|
||||
f = Ten ;
|
||||
} ;
|
||||
-}
|
||||
@@ -273,7 +273,7 @@ concrete NumeralMlt of Numeral = CatMlt [Numeral,Digits] ** open Prelude,ResMlt
|
||||
let unit = (n.s ! Unit ! NCard ! NumNominative) in
|
||||
mkForm2
|
||||
(unit ++ "u" ++ (d.s ! Ten ! NCard ! NumNominative))
|
||||
(definiteArticle ++ unit ++ "u" ++ (d.s ! Ten ! NCard ! NumNominative))
|
||||
(artDef ++ unit ++ "u" ++ (d.s ! Ten ! NCard ! NumNominative))
|
||||
Ten
|
||||
;
|
||||
|
||||
@@ -285,13 +285,13 @@ concrete NumeralMlt of Numeral = CatMlt [Numeral,Digits] ** open Prelude,ResMlt
|
||||
s = m.s ! Hund ;
|
||||
thou = {
|
||||
s = case m.n of {
|
||||
NumSg => "mitt" ; -- Special case for "mitt elf"
|
||||
NumDual => "mitejn" ; -- Special case for "mitejn elf"
|
||||
Num_Sg => "mitt" ; -- Special case for "mitt elf"
|
||||
Num_Dl => "mitejn" ; -- Special case for "mitejn elf"
|
||||
_ => m.thou.s
|
||||
} ;
|
||||
treatAs = Hund ;
|
||||
} ;
|
||||
n = NumPl ;
|
||||
n = Num_Pl ;
|
||||
f = Hund ;
|
||||
} ;
|
||||
|
||||
@@ -306,18 +306,18 @@ concrete NumeralMlt of Numeral = CatMlt [Numeral,Digits] ** open Prelude,ResMlt
|
||||
NumAdjectival => hund ++ "u" ++ n.s ! NCard ! NumAdjectival
|
||||
} ;
|
||||
NOrd => table {
|
||||
NumNominative => definiteArticle ++ hund ++ "u" ++ n.s ! NCard ! NumNominative ;
|
||||
NumAdjectival => definiteArticle ++ hund ++ "u" ++ n.s ! NCard ! NumAdjectival
|
||||
NumNominative => artDef ++ hund ++ "u" ++ n.s ! NCard ! NumNominative ;
|
||||
NumAdjectival => artDef ++ hund ++ "u" ++ n.s ! NCard ! NumAdjectival
|
||||
}
|
||||
} ;
|
||||
thou = {
|
||||
s = hund ++ "u" ++ n.thou.s ;
|
||||
treatAs = case n.n of {
|
||||
NumSg => Ten ; -- specific case for mija u wiehed elf
|
||||
Num_Sg => Ten ; -- specific case for mija u wiehed elf
|
||||
_ => n.f -- eg So that "106,000" is treated as "6,000"
|
||||
} ;
|
||||
} ;
|
||||
n = NumPl ;
|
||||
n = Num_Pl ;
|
||||
f = Hund ;
|
||||
} ;
|
||||
|
||||
@@ -328,18 +328,18 @@ concrete NumeralMlt of Numeral = CatMlt [Numeral,Digits] ** open Prelude,ResMlt
|
||||
pot3 m = {
|
||||
s =
|
||||
case <m.n, m.thou.treatAs> of {
|
||||
<NumSg ,_> => numTable "elf" ; -- 1 * 1000
|
||||
<NumDual,_> => numTable "elfejn" ; -- 2 * 2000
|
||||
<NumPl ,Unit> => numTable m.thou.s "elef" ; -- 3-10 * 1000
|
||||
<NumPl ,_> => numTable m.thou.s "elf" -- 11+ * 1000
|
||||
<Num_Sg ,_> => numTable "elf" ; -- 1 * 1000
|
||||
<Num_Dl,_> => numTable "elfejn" ; -- 2 * 2000
|
||||
<Num_Pl ,Unit> => numTable m.thou.s "elef" ; -- 3-10 * 1000
|
||||
<Num_Pl ,_> => numTable m.thou.s "elf" -- 11+ * 1000
|
||||
} ;
|
||||
{-
|
||||
case m.f of {
|
||||
Unit => numTable m.thou "elef" ; --
|
||||
_ => case m.n of {
|
||||
NumSg => numTable "elf" ; --
|
||||
NumDual => numTable "elfejn" ; --
|
||||
NumPl => numTable m.thou "elf" --
|
||||
Num_Sg => numTable "elf" ; --
|
||||
Num_Dl => numTable "elfejn" ; --
|
||||
Num_Pl => numTable m.thou "elf" --
|
||||
}
|
||||
} ;
|
||||
-}
|
||||
@@ -347,7 +347,7 @@ concrete NumeralMlt of Numeral = CatMlt [Numeral,Digits] ** open Prelude,ResMlt
|
||||
s = m.thou.s ;
|
||||
treatAs = m.f ;
|
||||
} ;
|
||||
n = NumPl ;
|
||||
n = Num_Pl ;
|
||||
f = Hund ; -- NOT IMPORTANT
|
||||
} ;
|
||||
|
||||
@@ -361,15 +361,15 @@ concrete NumeralMlt of Numeral = CatMlt [Numeral,Digits] ** open Prelude,ResMlt
|
||||
}
|
||||
in
|
||||
case <m.n, m.thou.treatAs> of {
|
||||
<NumSg ,_> => numTable "elf" ukemm ;
|
||||
<NumDual,_> => numTable "elfejn" ukemm ;
|
||||
<NumPl ,Unit> => numTable (m.thou.s ++ "elef") ukemm ;
|
||||
<NumPl ,_> => numTable (m.thou.s ++ "elf") ukemm
|
||||
<Num_Sg ,_> => numTable "elf" ukemm ;
|
||||
<Num_Dl,_> => numTable "elfejn" ukemm ;
|
||||
<Num_Pl ,Unit> => numTable (m.thou.s ++ "elef") ukemm ;
|
||||
<Num_Pl ,_> => numTable (m.thou.s ++ "elf") ukemm
|
||||
} ;
|
||||
{-
|
||||
NumSg => elf2 "elf" ukemm ;
|
||||
NumDual => elf2 "elfejn" ukemm ;
|
||||
NumPl => case m.f of {
|
||||
Num_Sg => elf2 "elf" ukemm ;
|
||||
Num_Dl => elf2 "elfejn" ukemm ;
|
||||
Num_Pl => case m.f of {
|
||||
Unit => elf2 m.thou ("elef" ++ ukemm) ;
|
||||
_ => elf2 m.thou ("elf" ++ ukemm)
|
||||
}
|
||||
@@ -378,7 +378,7 @@ concrete NumeralMlt of Numeral = CatMlt [Numeral,Digits] ** open Prelude,ResMlt
|
||||
s = m.thou.s ;
|
||||
treatAs = m.f ;
|
||||
} ;
|
||||
n = NumPl ;
|
||||
n = Num_Pl ;
|
||||
f = Hund ; -- NOT IMPORTANT
|
||||
} ;
|
||||
|
||||
@@ -388,12 +388,12 @@ concrete NumeralMlt of Numeral = CatMlt [Numeral,Digits] ** open Prelude,ResMlt
|
||||
|
||||
numTable : Str -> (CardOrd => Num_Case => Str) = \thou -> table {
|
||||
NCard => \\numcase => thou ;
|
||||
NOrd => \\numcase => definiteArticle ++ thou
|
||||
NOrd => \\numcase => artDef ++ thou
|
||||
} ;
|
||||
|
||||
numTable : Str -> Str -> (CardOrd => Num_Case => Str) = \thou,attach -> table {
|
||||
NCard => \\numcase => thou ++ attach ;
|
||||
NOrd => \\numcase => definiteArticle ++ thou ++ attach
|
||||
NOrd => \\numcase => artDef ++ thou ++ attach
|
||||
} ;
|
||||
|
||||
numTable : Str -> (Num_Case => Str) -> (CardOrd => Num_Case => Str) = \thou,attach -> table {
|
||||
@@ -402,8 +402,8 @@ concrete NumeralMlt of Numeral = CatMlt [Numeral,Digits] ** open Prelude,ResMlt
|
||||
NumAdjectival => thou ++ (attach ! NumAdjectival)
|
||||
} ;
|
||||
NOrd => table {
|
||||
NumNominative => definiteArticle ++ thou ++ (attach ! NumNominative) ;
|
||||
NumAdjectival => definiteArticle ++ thou ++ (attach ! NumAdjectival)
|
||||
NumNominative => artDef ++ thou ++ (attach ! NumNominative) ;
|
||||
NumAdjectival => artDef ++ thou ++ (attach ! NumAdjectival)
|
||||
}
|
||||
} ;
|
||||
|
||||
@@ -447,7 +447,7 @@ concrete NumeralMlt of Numeral = CatMlt [Numeral,Digits] ** open Prelude,ResMlt
|
||||
mkDig : Dig = overload {
|
||||
mkDig : Str -> Dig = \digit -> lin Dig {
|
||||
s = digit ;
|
||||
n = NumPl
|
||||
n = Num_Pl
|
||||
} ;
|
||||
mkDig : Str -> Num_Number -> Dig = \digit,num -> lin Dig {
|
||||
s = digit ;
|
||||
@@ -468,8 +468,8 @@ concrete NumeralMlt of Numeral = CatMlt [Numeral,Digits] ** open Prelude,ResMlt
|
||||
|
||||
lin
|
||||
D_0 = mkDig "0" ;
|
||||
D_1 = mkDig "1" NumSg ;
|
||||
D_2 = mkDig "2" NumDual ;
|
||||
D_1 = mkDig "1" Num_Sg ;
|
||||
D_2 = mkDig "2" Num_Dl ;
|
||||
D_3 = mkDig "3" ;
|
||||
D_4 = mkDig "4" ;
|
||||
D_5 = mkDig "5" ;
|
||||
@@ -484,7 +484,7 @@ concrete NumeralMlt of Numeral = CatMlt [Numeral,Digits] ** open Prelude,ResMlt
|
||||
-- Create Digits from combining Dig with Digits
|
||||
IIDig d i = {
|
||||
s = d.s ++ (commaIf i.tail) ++ i.s ;
|
||||
n = NumPl ;
|
||||
n = Num_Pl ;
|
||||
tail = inc i.tail
|
||||
} ;
|
||||
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
-- Maltese Resource Grammar Library
|
||||
-- John J. Camilleri, 2012
|
||||
-- Licensed under LGPL
|
||||
|
||||
resource OrthoMlt = open Prelude, Predef in {
|
||||
flags coding=utf8 ;
|
||||
|
||||
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -6,32 +6,31 @@
|
||||
|
||||
--# -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 {
|
||||
resource ResMlt = ParamX - [Tense] ** open Prelude, Predef in {
|
||||
|
||||
flags coding=utf8 ;
|
||||
|
||||
param
|
||||
|
||||
-- Used in the NumeralMlt module
|
||||
Gender = Masc | Fem ;
|
||||
|
||||
NPCase = Nom | Gen ;
|
||||
|
||||
{- Numerals -}
|
||||
|
||||
CardOrd = NCard | NOrd ;
|
||||
DTail = T1 | T2 | T3 ; -- This is already defined in ParamX...
|
||||
|
||||
Num_Number =
|
||||
NumSg
|
||||
| NumDual
|
||||
| NumPl
|
||||
Num_Sg
|
||||
| Num_Dl
|
||||
| Num_Pl
|
||||
;
|
||||
|
||||
-- oper
|
||||
-- Num_Number : Type = { n : Number ; isDual : Bool } ;
|
||||
|
||||
param
|
||||
|
||||
DForm =
|
||||
Unit -- 0..10
|
||||
| Teen -- 11-19
|
||||
@@ -41,32 +40,11 @@ resource ResMlt = PatternsMlt ** open Prelude in {
|
||||
--| Thou -- 1000+
|
||||
;
|
||||
Num_Case =
|
||||
NumNominative
|
||||
| NumAdjectival ;
|
||||
NumNominative -- TNEJN, ĦAMSA, TNAX, MIJA
|
||||
| NumAdjectival ; -- ŻEWĠ, ĦAMES, TNAX-IL, MITT
|
||||
|
||||
{- Nouns -}
|
||||
|
||||
{-
|
||||
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
|
||||
@@ -81,17 +59,13 @@ resource ResMlt = PatternsMlt ** open Prelude in {
|
||||
| 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
|
||||
;
|
||||
-}
|
||||
NForm =
|
||||
NRegular -- WIĊĊ
|
||||
| NPronSuffix Agr ; -- WIĊĊU
|
||||
|
||||
Gender = Masc | Fem ;
|
||||
{- Other... -}
|
||||
|
||||
GenNum = GSg Gender | GPl ; -- masc/fem/plural, e.g. adjective inflection
|
||||
|
||||
Animacy =
|
||||
Animate
|
||||
@@ -101,167 +75,194 @@ resource ResMlt = PatternsMlt ** open Prelude in {
|
||||
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
|
||||
AgP1 Number -- Jiena, Aħna
|
||||
| AgP2 Number -- Inti, Intom
|
||||
| AgP3Sg Gender -- Huwa, Hija
|
||||
| AgP3Pl -- Huma
|
||||
;
|
||||
|
||||
-- Agr : Type = {g : Gender ; n : Number ; p : Person} ;
|
||||
-- Ag : Gender -> Number -> Person -> Agr = \g,n,p -> {g = g ; n = n ; p = p} ;
|
||||
-- agrP1 : Number -> Agr = \n -> Ag {} n P1 ;
|
||||
-- agrP3 : Gender -> Number -> Agr = \g,n -> Ag g n P3 ;
|
||||
|
||||
-- Possible tenses
|
||||
Tense =
|
||||
Perf -- Perfect tense, eg SERAQ
|
||||
| Impf -- Imperfect tense, eg JISRAQ
|
||||
| Imp -- Imperative, eg ISRAQ
|
||||
-- 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
|
||||
| VImp Number -- Imperative is always P2, 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)
|
||||
VDerivedForm =
|
||||
FormI
|
||||
| FormII
|
||||
| FormIII
|
||||
| FormIV
|
||||
| FormV
|
||||
| FormVI
|
||||
| FormVII
|
||||
| FormVIII
|
||||
| FormXI
|
||||
| FormX
|
||||
;
|
||||
|
||||
-- Verb classification
|
||||
VClass =
|
||||
Strong VStrongClass
|
||||
| Weak VWeakClass
|
||||
| Loan --- temporary
|
||||
-- | Romance
|
||||
-- | English
|
||||
;
|
||||
|
||||
VStrongClass =
|
||||
Regular
|
||||
| LiquidMedial
|
||||
| Reduplicative
|
||||
| Quad
|
||||
;
|
||||
|
||||
VWeakClass =
|
||||
Assimilative
|
||||
| Hollow
|
||||
| WeakFinal
|
||||
| Defective
|
||||
| QuadWeakFinal
|
||||
;
|
||||
|
||||
-- VQuadClass =
|
||||
-- BiradicalBase
|
||||
-- | RepeatedC3
|
||||
-- | RepeatedC1
|
||||
-- | AdditionalC4
|
||||
-- ;
|
||||
|
||||
VRomanceClass =
|
||||
Integrated
|
||||
| NonIntegrated
|
||||
;
|
||||
|
||||
-- Inflection of verbs for pronominal suffixes
|
||||
VSuffixForm =
|
||||
VNone -- eg FTAĦT
|
||||
| VDir Agr -- eg FTAĦTU
|
||||
| VInd Agr -- eg FTAĦTLU
|
||||
| VDirInd Agr Agr -- eg FTAĦTHULU
|
||||
;
|
||||
|
||||
-- For Adjectives
|
||||
AForm =
|
||||
-- AF Degree GenNum
|
||||
APosit GenNum
|
||||
| ACompar
|
||||
| ASuperl
|
||||
;
|
||||
|
||||
oper
|
||||
|
||||
-- Roots & Patterns
|
||||
Pattern : Type = {v1, v2 : Str} ; -- vowel1, vowel2
|
||||
Pattern : Type = {V1, V2 : Str} ;
|
||||
-- Root3 : Type = {K, T, B : Str} ;
|
||||
-- Root4 : Type = Root3 ** {L : Str} ;
|
||||
Root : Type = {K, T, B, L : Str} ;
|
||||
Root : Type = {C1, C2, C3, C4 : 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"
|
||||
mkRoot : Root = overload {
|
||||
mkRoot : Root =
|
||||
{ C1=[] ; C2=[] ; C3=[] ; C4=[] } ;
|
||||
mkRoot : Str -> Root = \root ->
|
||||
let root = toLower root in
|
||||
case (charAt 1 root) of {
|
||||
"-" => { C1=(charAt 0 root) ; C2=(charAt 2 root) ; C3=(charAt 4 root) ; C4=(charAt 6 root) } ; -- "k-t-b"
|
||||
_ => { C1=(charAt 0 root) ; C2=(charAt 1 root) ; C3=(charAt 2 root) ; C4=(charAt 3 root) } -- "ktb"
|
||||
} ;
|
||||
mkRoot : Str -> Str -> Str -> Root = \c1,c2,c3 ->
|
||||
{ C1=c1 ; C2=c2 ; C3=c3 ; C4=[] } ;
|
||||
mkRoot : Str -> Str -> Str -> Str -> Root = \c1,c2,c3,c4 ->
|
||||
{ C1=c1 ; C2=c2 ; C3=c3 ; C4=c4 } ;
|
||||
} ;
|
||||
|
||||
mkPattern : Pattern = overload {
|
||||
mkPattern : Pattern =
|
||||
{ V1=[] ; V2=[] } ;
|
||||
mkPattern : Str -> Pattern = \v1 ->
|
||||
{ V1=v1 ; V2=[] } ;
|
||||
mkPattern : Str -> Str -> Pattern = \v1,v2 ->
|
||||
{ V1=v1 ; V2=v2 } ;
|
||||
} ;
|
||||
|
||||
-- Some character classes
|
||||
Consonant : pattern Str = #( "b" | "ċ" | "d" | "f" | "ġ" | "g" | "għ" | "ħ" | "h" | "j" | "k" | "l" | "m" | "n" | "p" | "q" | "r" | "s" | "t" | "v" | "w" | "x" | "ż" | "z" );
|
||||
CoronalCons : pattern Str = #( "ċ" | "d" | "n" | "r" | "s" | "t" | "x" | "ż" | "z" ); -- "konsonanti xemxin"
|
||||
ImpfDoublingCons : pattern Str = #( "d" | "ġ" | "s" | "t" | "ż" ); -- require doubling in imperfect, eg (inti) IDDUM, IĠĠOR, ISSIB, ITTIR, IŻŻID. --- only used in hollow paradigm (?)
|
||||
LiquidCons : pattern Str = #( "l" | "m" | "n" | "r" | "għ" );
|
||||
WeakCons : pattern Str = #( "j" | "w" );
|
||||
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 ;
|
||||
s : Noun_Number => NForm => Str ;
|
||||
g : Gender ;
|
||||
-- anim : Animacy ; -- is the noun animate? e.g. TABIB
|
||||
} ;
|
||||
|
||||
Adj : Type = {
|
||||
s : Gender => Person_Number => Str ;
|
||||
-- isPre : Bool ;
|
||||
ProperNoun : Type = {
|
||||
s : Str ;
|
||||
g : Gender ;
|
||||
} ;
|
||||
|
||||
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?
|
||||
s : VForm => Str ;
|
||||
-- s : VForm => VSuffixForm => Str ;
|
||||
c : VClass ;
|
||||
} ;
|
||||
|
||||
Adjective : Type = {
|
||||
s : AForm => Str ;
|
||||
} ;
|
||||
|
||||
{- ===== Conversions ===== -}
|
||||
|
||||
numnum2nounnum : Num_Number -> Noun_Number = \n ->
|
||||
case n of {
|
||||
Num_Sg => Singular Singulative ;
|
||||
_ => Plural Determinate
|
||||
} ;
|
||||
|
||||
|
||||
{- ===== Useful helper functions ===== -}
|
||||
|
||||
-- Get the character at the specific index (0-based).
|
||||
-- Negative indexes behave as 0 (first character). Out of range indexes return the empty string.
|
||||
charAt : Int -> Str -> Str ;
|
||||
charAt i s = take 1 (drop i s) ;
|
||||
|
||||
addDefinitePreposition : Str -> Str -> Str = \prep,n -> (getDefinitePreposition prep n) ++ n ;
|
||||
addDefiniteArticle = addDefinitePreposition "il" ;
|
||||
getDefiniteArticle = getDefinitePreposition "il" ;
|
||||
@@ -288,12 +289,14 @@ resource ResMlt = PatternsMlt ** open Prelude in {
|
||||
"il" => "l" + "-" ;
|
||||
_ => prep + "-"
|
||||
};
|
||||
K@#CoronalConsonant + _ => prepStem + K + "-" ; -- IĊ-ĊISK
|
||||
K@#CoronalCons + _ => prepStem + K + "-" ; -- IĊ-ĊISK
|
||||
#Consonant + _ => prep + "-" ; -- IL-QADDIS
|
||||
_ => [] -- ?
|
||||
} ;
|
||||
|
||||
definiteArticle : Str =
|
||||
artIndef = [] ;
|
||||
|
||||
artDef : Str =
|
||||
pre {
|
||||
"il-" ;
|
||||
"l-" / strs { "a" ; "e" ; "i" ; "o" ; "u" ; "h" ; "għ" } ;
|
||||
@@ -308,4 +311,113 @@ resource ResMlt = PatternsMlt ** open Prelude in {
|
||||
"iz-" / strs { "z" }
|
||||
} ;
|
||||
|
||||
{- ===== Worst-case functions ===== -}
|
||||
|
||||
-- Noun: Takes all forms and a gender
|
||||
-- Params:
|
||||
-- Singulative, eg KOXXA
|
||||
-- Collective, eg KOXXOX
|
||||
-- Double, eg KOXXTEJN
|
||||
-- Determinate Plural, eg KOXXIET
|
||||
-- Indeterminate Plural
|
||||
-- Gender
|
||||
-- mkNoun : (_,_,_,_,_ : NForm => Str) -> Gender -> Noun = \sing,coll,dual,det,ind,gen -> {
|
||||
-- s = table {
|
||||
-- Singular Singulative => sing ;
|
||||
-- Singular Collective => coll ;
|
||||
-- Dual => dual ;
|
||||
-- Plural Determinate => det ;
|
||||
-- Plural Indeterminate => ind
|
||||
-- } ;
|
||||
-- g = gen ;
|
||||
-- -- anim = Inanimate ;
|
||||
-- } ;
|
||||
|
||||
-- Make a noun animate
|
||||
animateNoun : Noun -> Noun ;
|
||||
animateNoun = \n -> n ** {anim = Animate} ;
|
||||
|
||||
-- Build an empty pronominal suffix table
|
||||
nullSuffixTable : Str -> (NForm => Str) ;
|
||||
nullSuffixTable = \s -> table {
|
||||
NRegular => s ;
|
||||
NPronSuffix _ => []
|
||||
} ;
|
||||
|
||||
-- Build a noun's pronominal suffix table
|
||||
mkSuffixTable : (NForm => Str) = overload {
|
||||
|
||||
mkSuffixTable : (_ : Str) -> (NForm => Str) = \wicc ->
|
||||
table {
|
||||
NRegular => wicc ;
|
||||
NPronSuffix (AgP1 Sg) => wicc + "i" ;
|
||||
NPronSuffix (AgP2 Sg) => wicc + "ek" ;
|
||||
NPronSuffix (AgP3Sg Masc) => wicc + "u" ;
|
||||
NPronSuffix (AgP3Sg Fem) => wicc + "ha" ;
|
||||
NPronSuffix (AgP1 Pl) => wicc + "na" ;
|
||||
NPronSuffix (AgP2 Pl) => wicc + "kom" ;
|
||||
NPronSuffix (AgP3Pl) => wicc + "hom"
|
||||
} ;
|
||||
|
||||
mkSuffixTable : (_,_,_,_,_,_,_,_ : Str) -> (NForm => Str) = \isem,ismi,ismek,ismu,isimha,isimna,isimkom,isimhom ->
|
||||
table {
|
||||
NRegular => isem ;
|
||||
NPronSuffix (AgP1 Sg) => ismi ;
|
||||
NPronSuffix (AgP2 Sg) => ismek ;
|
||||
NPronSuffix (AgP3Sg Masc) => ismu ;
|
||||
NPronSuffix (AgP3Sg Fem) => isimha ;
|
||||
NPronSuffix (AgP1 Pl) => isimna ;
|
||||
NPronSuffix (AgP2 Pl) => isimkom ;
|
||||
NPronSuffix (AgP3Pl) => isimhom
|
||||
} ;
|
||||
|
||||
} ;
|
||||
|
||||
-- mkNoun = overload {
|
||||
|
||||
-- mkNoun : (_,_,_,_,_ : Str) -> Gender -> Noun = \sing,coll,dual,det,ind,gen -> {
|
||||
-- s = table {
|
||||
-- Singular Singulative => (nullSuffixTable sing) ;
|
||||
-- Singular Collective => (nullSuffixTable coll) ;
|
||||
-- Dual => (nullSuffixTable dual) ;
|
||||
-- Plural Determinate => (nullSuffixTable det) ;
|
||||
-- Plural Indeterminate => (nullSuffixTable ind)
|
||||
-- } ;
|
||||
-- g = gen ;
|
||||
-- -- anim = Inanimate ;
|
||||
-- } ;
|
||||
|
||||
mkNoun : (_,_,_,_,_ : NForm => Str) -> Gender -> Noun = \sing,coll,dual,det,ind,gen -> {
|
||||
s = table {
|
||||
Singular Singulative => sing ;
|
||||
Singular Collective => coll ;
|
||||
Dual => dual ;
|
||||
Plural Determinate => det ;
|
||||
Plural Indeterminate => ind
|
||||
} ;
|
||||
g = gen ;
|
||||
-- anim = Inanimate ;
|
||||
} ;
|
||||
|
||||
-- } ;
|
||||
|
||||
-- Adjective: Takes all forms (except superlative)
|
||||
-- Params:
|
||||
-- Masculine, eg SABIĦ
|
||||
-- Feminine, eg SABIĦA
|
||||
-- Plural, eg SBIEĦ
|
||||
-- Comparative, eg ISBAĦ
|
||||
mkAdjective : (_,_,_,_ : Str) -> Adjective = \masc,fem,plural,compar -> {
|
||||
s = table {
|
||||
APosit gn => case gn of {
|
||||
GSg Masc => masc ;
|
||||
GSg Fem => fem ;
|
||||
GPl => plural
|
||||
} ;
|
||||
ACompar => compar ;
|
||||
ASuperl => addDefiniteArticle compar
|
||||
} ;
|
||||
} ;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,10 @@
|
||||
concrete StructuralMlt of Structural = CatMlt **
|
||||
open MorphoMlt, ResMlt, ParadigmsMlt, Prelude in {
|
||||
|
||||
flags optimize=all ; coding=utf8 ;
|
||||
flags
|
||||
optimize=all ;
|
||||
coding=utf8 ;
|
||||
|
||||
lin language_title_Utt = ss "Malti" ;
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user