Romainian in next-lib

This commit is contained in:
ra.monique
2009-02-23 13:29:42 +00:00
parent 0296492f9d
commit ef8b8aa1a3
9 changed files with 3875 additions and 0 deletions

View File

@@ -0,0 +1,188 @@
resource BeschRon = open Prelude, MorphoRon,CatRon in {
flags optimize=noexpand ; -- faster and smaller than =all
oper VerbeN = {s: VForm => Str } ;
oper mkNV : Verbe -> V = \ve -> {s = ve ; lock_V = <> } ;
oper mkRV : Verbe -> V = \ve -> {s = ve ; lock_V = <>} ;
-- for Group 1 - verbs ending in a (last sylablle) - the default behaviour is conjugation with "ez"
-- with small mutation, depending on the second last letter (80 % verbs - especially neological)
-- for Group 2 - verbs ending in ea - there are relatively few verbs, most of them irregular
-- default behavior - covers almost 25 %
-- for Group 3 - verbs ending in e - most verbs have phonetical mutations in the stem, for different
-- tenses, difficult to find a pattern that describes this behavior
-- default conjugation - covers almost 20%
-- for Group 4 - verbs ending in i/î - the default behaviour is the conjugation with "sc", which
-- characterizes almost 75 % of the verbs
-- in general : Group 1 + Group 4 are the most frequent for verbs
-- the smart paradigm covers (60-70% cases for a reasonably big database)
-- (statistical tests also needed)
oper regV : Str -> Verbe = \s ->
case s of
{ x + ("chea"|"ghea") => mkV61 s ;
x + "ea" => mkV69 s ;
x + "ca" => mkV8 s ;
x + "ga" => mkV9 s ;
x + "eia" => mkV11 s;
x + "ia" => mkV10 s;
x + "a" => mkV6 s ;
x + "e" => mkV79 s ;
x + "ui" => mkV121 s ;
x + "ii" => mkV120 s ;
x + "i" => mkV119 s ;
x + "î" => mkV141 s
};
oper mkV : Str -> V = \s -> mkNV (regV s) ;
oper conj : Str -> Verbe = mkV6 ;
oper v_besch6 : Str -> VerbeN = \s -> mkNV (mkV6 s) ;
oper v_besch7 : Str -> VerbeN = \s -> mkNV (mkV7 s) ;
oper v_besch8 : Str -> VerbeN = \s -> mkNV (mkV8 s) ;
oper v_besch9 : Str -> VerbeN = \s -> mkNV (mkV9 s) ;
oper v_besch10 : Str -> VerbeN = \s -> mkNV (mkV10 s) ;
oper v_besch11 : Str -> VerbeN = \s -> mkNV (mkV11 s) ;
oper v_besch12 : Str -> VerbeN = \s -> mkNV (mkV12 s) ;
oper v_besch13 : Str -> VerbeN = \s -> mkNV (mkV13 s) ;
oper v_besch14 : Str -> VerbeN = \s -> mkNV (mkV14 s) ;
oper v_besch15 : Str -> VerbeN = \s -> mkNV (mkV15 s) ;
oper v_besch16 : Str -> VerbeN = \s -> mkNV (mkV16 s) ;
oper v_besch17 : Str -> VerbeN = \s -> mkNV (mkV17 s) ;
oper v_besch18 : Str -> VerbeN = \s -> mkNV (mkV18 s) ;
oper v_besch19 : Str -> VerbeN = \s -> mkNV (mkV19 s) ;
oper v_besch20 : Str -> VerbeN = \s -> mkNV (mkV20 s) ;
oper v_besch21 : Str -> VerbeN = \s -> mkNV (mkV21 s) ;
oper v_besch22 : Str -> VerbeN = \s -> mkNV (mkV22 s) ;
oper v_besch23 : Str -> VerbeN = \s -> mkNV (mkV23 s) ;
oper v_besch24 : Str -> VerbeN = \s -> mkNV (mkV24 s) ;
oper v_besch25 : Str -> VerbeN = \s -> mkNV (mkV25 s) ;
oper v_besch26 : Str -> VerbeN = \s -> mkNV (mkV26 s) ;
oper v_besch27 : Str -> VerbeN = \s -> mkNV (mkV27 s) ;
oper v_besch28 : Str -> VerbeN = \s -> mkNV (mkV28 s) ;
oper v_besch29 : Str -> VerbeN = \s -> mkNV (mkV29 s) ;
oper v_besch30 : Str -> VerbeN = \s -> mkNV (mkV30 s) ;
oper v_besch31 : Str -> VerbeN = \s -> mkNV (mkV31 s) ;
oper v_besch32 : Str -> VerbeN = \s -> mkNV (mkV32 s) ;
oper v_besch33 : Str -> VerbeN = \s -> mkNV (mkV33 s) ;
oper v_besch34 : Str -> VerbeN = \s -> mkNV (mkV34 s) ;
oper v_besch35 : Str -> VerbeN = \s -> mkNV (mkV35 s) ;
oper v_besch36 : Str -> VerbeN = \s -> mkNV (mkV36 s) ;
oper v_besch37 : Str -> VerbeN = \s -> mkNV (mkV37 s) ;
oper v_besch38 : Str -> VerbeN = \s -> mkNV (mkV38 s) ;
oper v_besch39 : Str -> VerbeN = \s -> mkNV (mkV39 s) ;
oper v_besch40 : Str -> VerbeN = \s -> mkNV (mkV40 s) ;
oper v_besch41 : Str -> VerbeN = \s -> mkNV (mkV41 s) ;
oper v_besch42 : Str -> VerbeN = \s -> mkNV (mkV42 s) ;
oper v_besch43 : Str -> VerbeN = \s -> mkNV (mkV43 s) ;
oper v_besch44 : Str -> VerbeN = \s -> mkNV (mkV44 s) ;
oper v_besch45 : Str -> VerbeN = \s -> mkNV (mkV45 s) ;
oper v_besch46 : Str -> VerbeN = \s -> mkNV (mkV46 s) ;
oper v_besch47 : Str -> VerbeN = \s -> mkNV (mkV47 s) ;
oper v_besch48 : Str -> VerbeN = \s -> mkNV (mkV48 s) ;
oper v_besch49 : Str -> VerbeN = \s -> mkNV (mkV49 s) ;
oper v_besch50 : Str -> VerbeN = \s -> mkNV (mkV50 s) ;
oper v_besch51 : Str -> VerbeN = \s -> mkNV (mkV51 s) ;
oper v_besch52 : Str -> VerbeN = \s -> mkNV (mkV52 s) ;
oper v_besch53 : Str -> VerbeN = \s -> mkNV (mkV53 s) ;
oper v_besch54 : Str -> VerbeN = \s -> mkNV (mkV54 s) ;
oper v_besch55 : Str -> VerbeN = \s -> mkNV (mkV55 s) ;
oper v_besch56 : Str -> VerbeN = \s -> mkNV (mkV56 s) ;
oper v_besch57 : Str -> VerbeN = \s -> mkNV (mkV57 s) ;
oper v_besch58 : Str -> VerbeN = \s -> mkNV (mkV58 s) ;
oper v_besch59 : Str -> VerbeN = \s -> mkNV (mkV59 s) ;
oper v_besch60 : Str -> VerbeN = \s -> mkNV (mkV60 s) ;
oper v_besch61 : Str -> VerbeN = \s -> mkNV (mkV61 s) ;
oper v_besch62 : Str -> VerbeN = \s -> mkNV (mkV62 s) ;
--oper v_besch63 : Str -> VerbeN = \s -> mkNV (mkV63 s) ;
oper v_besch64 : Str -> VerbeN = \s -> mkNV (mkV64 s) ;
oper v_besch65 : Str -> VerbeN = \s -> mkNV (mkV65 s) ;
oper v_besch66 : Str -> VerbeN = \s -> mkNV (mkV66 s) ;
oper v_besch67 : Str -> VerbeN = \s -> mkNV (mkV67 s) ;
oper v_besch68 : Str -> VerbeN = \s -> mkNV (mkV68 s) ;
oper v_besch69 : Str -> VerbeN = \s -> mkNV (mkV69 s) ;
oper v_besch70 : Str -> VerbeN = \s -> mkNV (mkV70 s) ;
oper v_besch71 : Str -> VerbeN = \s -> mkNV (mkV71 s) ;
oper v_besch72 : Str -> VerbeN = \s -> mkNV (mkV72 s) ;
oper v_besch73 : Str -> VerbeN = \s -> mkNV (mkV73 s) ;
oper v_besch74 : Str -> VerbeN = \s -> mkNV (mkV74 s) ;
--oper v_besch75 : Str -> VerbeN = \s -> mkNV (mkV75 s) ;
oper v_besch76 : Str -> VerbeN = \s -> mkNV (mkV76 s) ;
oper v_besch77 : Str -> VerbeN = \s -> mkNV (mkV77 s) ;
oper v_besch78 : Str -> VerbeN = \s -> mkNV (mkV78 s) ;
oper v_besch79 : Str -> VerbeN = \s -> mkNV (mkV79 s) ;
oper v_besch80 : Str -> VerbeN = \s -> mkNV (mkV80 s) ;
oper v_besch81 : Str -> VerbeN = \s -> mkNV (mkV81 s) ;
oper v_besch82 : Str -> VerbeN = \s -> mkNV (mkV82 s) ;
oper v_besch83 : Str -> VerbeN = \s -> mkNV (mkV83 s) ;
oper v_besch84 : Str -> VerbeN = \s -> mkNV (mkV84 s) ;
oper v_besch85 : Str -> VerbeN = \s -> mkNV (mkV85 s) ;
oper v_besch86 : Str -> VerbeN = \s -> mkNV (mkV86 s) ;
oper v_besch87 : Str -> VerbeN = \s -> mkNV (mkV87 s) ;
oper v_besch88 : Str -> VerbeN = \s -> mkNV (mkV88 s) ;
oper v_besch89 : Str -> VerbeN = \s -> mkNV (mkV89 s) ;
oper v_besch90 : Str -> VerbeN = \s -> mkNV (mkV90 s) ;
oper v_besch91 : Str -> VerbeN = \s -> mkNV (mkV91 s) ;
oper v_besch92 : Str -> VerbeN = \s -> mkNV (mkV92 s) ;
oper v_besch93 : Str -> VerbeN = \s -> mkNV (mkV93 s) ;
oper v_besch94 : Str -> VerbeN = \s -> mkNV (mkV94 s) ;
oper v_besch95 : Str -> VerbeN = \s -> mkNV (mkV95 s) ;
oper v_besch96 : Str -> VerbeN = \s -> mkNV (mkV96 s) ;
oper v_besch97 : Str -> VerbeN = \s -> mkNV (mkV97 s) ;
oper v_besch98 : Str -> VerbeN = \s -> mkNV (mkV98 s) ;
oper v_besch99 : Str -> VerbeN = \s -> mkNV (mkV99 s) ;
oper v_besch100 : Str -> VerbeN = \s -> mkNV (mkV100 s) ;
oper v_besch101 : Str -> VerbeN = \s -> mkNV (mkV101 s) ;
oper v_besch102 : Str -> VerbeN = \s -> mkNV (mkV102 s) ;
oper v_besch103 : Str -> VerbeN = \s -> mkNV (mkV103 s) ;
oper v_besch104 : Str -> VerbeN = \s -> mkNV (mkV104 s) ;
oper v_besch105 : Str -> VerbeN = \s -> mkNV (mkV105 s) ;
oper v_besch106 : Str -> VerbeN = \s -> mkNV (mkV106 s) ;
--oper v_besch107 : Str -> VerbeN = \s -> mkNV (mkV107 s) ;
oper v_besch108 : Str -> VerbeN = \s -> mkNV (mkV108 s) ;
oper v_besch109 : Str -> VerbeN = \s -> mkNV (mkV109 s) ;
oper v_besch110 : Str -> VerbeN = \s -> mkNV (mkV110 s) ;
--oper v_besch111 : Str -> VerbeN = \s -> mkNV (mkV111 s) ;
oper v_besch112 : Str -> VerbeN = \s -> mkNV (mkV112 s) ;
oper v_besch113 : Str -> VerbeN = \s -> mkNV (mkV113 s) ;
--oper v_besch114 : Str -> VerbeN = \s -> mkNV (mkV114 s) ;
oper v_besch115 : Str -> VerbeN = \s -> mkNV (mkV115 s) ;
oper v_besch116 : Str -> VerbeN = \s -> mkNV (mkV116 s) ;
oper v_besch117 : Str -> VerbeN = \s -> mkNV (mkV117 s) ;
oper v_besch118 : Str -> VerbeN = \s -> mkNV (mkV118 s) ;
oper v_besch119 : Str -> VerbeN = \s -> mkNV (mkV119 s) ;
oper v_besch120 : Str -> VerbeN = \s -> mkNV (mkV120 s) ;
oper v_besch121 : Str -> VerbeN = \s -> mkNV (mkV121 s) ;
oper v_besch122 : Str -> VerbeN = \s -> mkNV (mkV122 s) ;
oper v_besch123 : Str -> VerbeN = \s -> mkNV (mkV123 s) ;
oper v_besch124 : Str -> VerbeN = \s -> mkNV (mkV124 s) ;
oper v_besch125 : Str -> VerbeN = \s -> mkNV (mkV125 s) ;
oper v_besch126 : Str -> VerbeN = \s -> mkNV (mkV126 s) ;
oper v_besch127 : Str -> VerbeN = \s -> mkNV (mkV127 s) ;
oper v_besch128 : Str -> VerbeN = \s -> mkNV (mkV128 s) ;
oper v_besch129 : Str -> VerbeN = \s -> mkNV (mkV129 s) ;
oper v_besch130 : Str -> VerbeN = \s -> mkNV (mkV130 s) ;
oper v_besch131 : Str -> VerbeN = \s -> mkNV (mkV131 s) ;
oper v_besch132 : Str -> VerbeN = \s -> mkNV (mkV132 s) ;
oper v_besch133 : Str -> VerbeN = \s -> mkNV (mkV133 s) ;
oper v_besch134 : Str -> VerbeN = \s -> mkNV (mkV134 s) ;
oper v_besch135 : Str -> VerbeN = \s -> mkNV (mkV135 s) ;
oper v_besch136 : Str -> VerbeN = \s -> mkNV (mkV136 s) ;
oper v_besch137 : Str -> VerbeN = \s -> mkNV (mkV137 s) ;
oper v_besch138 : Str -> VerbeN = \s -> mkNV (mkV138 s) ;
oper v_besch139 : Str -> VerbeN = \s -> mkNV (mkV139 s) ;
oper v_besch140 : Str -> VerbeN = \s -> mkNV (mkV140 s) ;
oper v_besch141 : Str -> VerbeN = \s -> mkNV (mkV141 s) ;
oper v_besch142 : Str -> VerbeN = \s -> mkNV (mkV142 s) ;
oper v_besch143 : Str -> VerbeN = \s -> mkNV (mkV143 s) ;
oper v_besch144 : Str -> VerbeN = \s -> mkNV (mkV144 s) ;
oper v_have : VerbeN = mkNV (mkV1 "avea") ;
}

View File

@@ -0,0 +1,70 @@
--# -path=.:../Romance:../common:../abstract:../common:prelude
concrete CatRon of Cat =
CommonX - [Temp,TTAnt,Tense,TPres,TPast,TFut,TCond]
** open Prelude, ResRon, (R = ParamX) in {
flags optimize=all_subs ;
lincat
-- Verb
-- VP = ResRon.VP ;
-- VPSlash = ResRon.VP ** {c2 : Compl} ;
-- Comp = {s : Agr => Str} ;
-- Adjective
AP = {s : AForm => Str ; isPre : Bool} ;
-- Noun
CN = {s : Number => Str ; g : Gender} ;
-- Pron = Pronoun ;
-- NP = NounPhrase ;
-- Det = {
-- s : Gender => Case => Str ;
-- n : Number ;
-- s2 : Str ; -- -ci
-- sp : Gender => Case => Str -- substantival: mien, mienne
-- } ;
-- Quant = {
-- s : Bool => Number => Gender => Case => Str ;
-- s2 : Str ;
-- sp : Number => Gender => Case => Str
Ord = {s : AForm => Str ; isPre : Bool} ;
-- Numeral
Numeral = {s : ACase => CardOrd => NumF => Str ; size : Size } ;
Digits = {s : CardOrd => Str ; n : Size ; isDig : Bool} ;
-- Structural
Conj = {s1,s2 : Str ; n : Number} ;
Subj = {s : Str ; m : Mood} ;
Prep = {s : Str ; c : NCase ; isDir : Bool} ;
-- Open lexical classes, e.g. Lexicon
Verb = {s : VForm => Str } ;
V ={s : VForm => Str } ;
VQ, VA = V ;
V2, VV, V2S, V2Q = V ** {c2 : Compl} ;
V3, V2A, V2V = V ** {c2,c3 : Compl} ;
VS = V ** {m : Polarity => Mood} ;
A = {s : Degree => AForm => Str ; isPre : Bool} ;
A2 = {s : Degree => AForm => Str ; c2 : Compl} ;
N = Noun ;
N2 = Noun ** {c2 : Compl} ;
N3 = Noun ** {c2,c3 : Compl} ;
PN = {s : ACase => Str ; g : Gender ; n : Number} ;
}

View File

@@ -0,0 +1,9 @@
--# -path=.:../romance:../abstract:../common:prelude
concrete GrammarRon of Grammar =
NumeralRon,
** {
flags startcat = Phr ; unlexer = text ; lexer = text ;
} ;

View File

@@ -0,0 +1,10 @@
--# -path=.:../romance:../abstract:../common
concrete LangRon of Lang =
GrammarRon,
LexiconRon
** {
flags startcat = Phr ; unlexer = text ; lexer = text ;
} ;

View File

@@ -0,0 +1,366 @@
--# -path=.:../romance:../common:../abstract:../../prelude
concrete LexiconRon of Lexicon = CatRon **
open ParadigmsRon,BeschRon,MorphoRon in {
flags
optimize=values ;
lin
airplane_N = mkN "avion" ;
answer_V2S = mkV2S (mkV "rãspunde") (noPrep Da) ;
apartment_N = mkN "apartament";
apple_N = mkN "mãr";
art_N = mkN "artã" ;
ask_V2Q = mkV2Q (v_besch29 "întreba") (noPrep Ac) ;
baby_N = mkAnim (mkN "bebeluº" masculine) ;
bad_A = mk4A "rãu" "rea" "rãi" "rele" ;
bank_N = mkN "bancã" "bãnci" ;
beautiful_A = mkRMut "frumos" ;
become_VA = mkVA (v_besch136 "deveni") ;
beer_N = mkN "bere" ;
beg_V2V = mkV2V (v_besch48 "ruga") (noPrep Ac) (noPrep Da) ;
big_A = regA "mare" ;
bike_N = mkN "bicicletã" ;
bird_N = mkN "pasãre" "pãsãri" ;
black_A = mkRMut "negru" ;
blue_A = regA "albastru" ;
boat_N = mkN "vapor" neuter ;
book_N = mkN "carte" "cãrþi" ;
boot_N = mkN "cizmã" ;
boss_N = mkAnim (mkN "ºef" masculine) ;
boy_N = mkAnim (mkN "bãiat" "bãieþi") ;
bread_N = mkN "pâine";
break_V2 = dirV2 (v_besch97 "sparge") ;
broad_A = regA "larg" ;
brother_N2 = mkN2 (mkAnim(mkN "frate" masculine)) (noPrep Ge) ;
brown_A = invarA "maro" ;
butter_N = mkNR "unt";
buy_V2 = dirV2 (v_besch35 "cumpãra");
camera_N = compN (mkN "aparat" neuter) ["foto"] ;
cap_N = mkN "ºapcã" "ºepci" ;
car_N = mkN "maºinã" ;
carpet_N = mkN "covor" neuter ;
cat_N = mkN "pisicã" ;
ceiling_N = mkN "plafon" ;
chair_N = mkN "scaun" ;
cheese_N = mkN "brânzã" "brânzeturi" "brânze" ;
child_N = mkAnim (mkN "copil" "copii" ) ;
church_N = mkN "bisericã" ;
city_N = mkN "oraº" ;
clean_A = regA "curat" ;
clever_A = regA "deºtept" ;
close_V2 = dirV2 (mkV "închide") ;
coat_N = mkN "hainã" ;
cold_A = regA "rece" ;
come_V = v_besch136 "veni" ;
computer_N = mkN "calculator" neuter ;
country_N = mkN "þarã" "þãri" ;
cousin_N = mkAnim (mkN "vãr" masculine) ;
cow_N = mkN "vacã" "vaci" ;
die_V = v_besch129 "muri" ;
dirty_A = regA "murdar" ;
distance_N3 = mkN3 (mkN "distanþã") (mkPrep "de la" Ac) (mkPrep "la" Ac) ;
doctor_N = mkAnim (mkN "doctor") ;
dog_N = mkN "câine" masculine ;
door_N = mkN "uºã" "uºi" ;
drink_V2 = dirV2 (v_besch73 "bea") ;
easy_A2V = mkA2V (mkRMut "uºor") (noPrep Ac) (noPrep Ac) ;
eat_V2 = dirV2 (v_besch52 "mânca") ;
empty_A = mkSMut "gol" ;
enemy_N = mkAnim (mkN "duºman" masculine) ;
factory_N = mkN "fabricã" ;
father_N2 = mkN2 (mkN "tatã" "taþi" masculine) (noPrep Ge);
fear_VS = mkVS (v_besch100 "teme") ;
fear_V2 = mmkV2 (mkRV (mkV100 "teme")) (mkPrep "de" Ac) ;
find_V2 = dirV2 (mkV "gãsi") ;
fish_N = mkN "peºte" masculine ;
floor_N = mkN "podea" ;
forget_V2 = dirV2 (v_besch18 "uita") ;
fridge_N = mkN "frigider" ;
friend_N = mkAnim (mkN "prieten") ;
fruit_N = mkN "fruct" ;
fun_AV = mkAV (regA "distractiv") (noPrep Ac) ;
garden_N = mkN "gradinã" ;
girl_N = mkAnim (mkN "fatã" "fete") ;
glove_N = mkN "mãnuºã" "mãnuºi" ;
gold_N = mkNR "aur" ;
good_A = mk5A "bun" "bunã" "buni" "bune" "bine" ;
go_V = v_besch90 "merge" ;
green_A = regA "verde" ;
harbour_N = mkNR "port" ;
hate_V2 = dirV2 (mkV "urî") ;
hat_N = mkN "pãlãrie" ;
have_V2 = dirV2 (v_have) ;
hear_V2 = dirV2 (v_besch127 "auzi") ;
hill_N = mkNR "deal" ;
hope_VS = mkVS (v_besch17 "spera") ;
horse_N = mkN "cal" "cai" ;
hot_A = regA "cald" ;
house_N = mkN "casã" ;
important_A = regA "important" ;
industry_N = mkN "industrie" ;
iron_N = mkN "fier" masculine ;
king_N = mkAnim (mkN "rege" masculine) ;
know_V2 = dirV2 (v_besch122 "ºti") ;
know_VS = mkVS (v_besch109 "cunoaºte") ;
lake_N = mkNR "lac" ;
lamp_N = mkN "lampã" "lãmpi" ;
learn_V2 = dirV2(v_besch45 "învãþa") ;
leather_N = mkN "piele" "piei" ;
leave_V2 = dirV2 (mkV "pãrãsi") ;
like_V2 = dirV2 (v_besch71 "plãcea") ;
listen_V2 = dirV2 (v_besch18 "asculta") ;
live_V = mkV "trãi" ;
long_A = regA "lung" ;
lose_V2 = dirV2 (v_besch113 "pierde") ;
love_N = mkN "iubire" ;
love_V2 = dirV2 (mkV "iubi") ;
man_N = mkAnim (mkN "om" "oameni") ;
married_A2 = mkA2 (regA "cãsãtorit") (mkPrep "cu" Ac) ;
meat_N = mkN "carne" "cãrnuri" "cãrni" ;
milk_N = mkN "lapte" masculine ;
moon_N = mkN "lunã" "luni" ;
mother_N2 = mkN2 (chV "mamã" (mkAnim (mkN "mamã"))) (noPrep Ge) ;
mountain_N = mkN "munte" masculine ;
music_N = mkN "muzicã" ;
narrow_A = regA "îngust" ;
new_A = mk4A "nou" "nouã" "noi" "noi" ;
newspaper_N = mkN "ziar" ;
oil_N = mkNR "ulei" ;
old_A = regA "vechi" ;
open_V2 = dirV2 (mkV "deshide") ;
paint_V2A = mkV2A (mkV "picta") (noPrep Ac) (mkPrep "cu" Ac) ;
paper_N = mkN "hârtie" ;
paris_PN = mkPN "Paris" ;
peace_N = mkN "pace" "pãci" ;
pen_N = mkNR "stilou" ;
planet_N = mkN "planetã" ;
plastic_N = mkN "plastic" ;
play_V2 = dirV2 (v_besch48 "juca") ;
policeman_N = mkAnim (mkN "poliþist" masculine) ;
priest_N = mkAnim (mkN "preot" masculine) ;
probable_AS = mkAS (regA "probabil") ;
queen_N = mkAnim (mkN "reginã" "regine") ;
radio_N = mkNR "radio";
--rain_V0 = mkV0 (v_besch54 "ploua") ;
read_V2 = dirV2 (mkV "citi") ;
red_A = mk4A "roºu" "roºie" "roºii" "roºii" ;
religion_N = mkN "religie" ;
restaurant_N = mkN "restaurant" ;
river_N = mkN "fluviu" masculine ;
rock_N = mkN "piatrã" "pietre" ;
roof_N = mkNR "acoperiº";
rubber_N = mkNR "cauciuc";
run_V = v_besch126 "fugi" ;
say_VS = mkVS (v_besch76 "spune") ;
school_N = mkN "ºcoala" "ºcoli" ;
science_N = mkN "ºtiinþã" ;
sea_N = mkN "mare" "mãri" ;
seek_V2 = dirV2 (v_besch24 "cãuta") ;
see_V2 = dirV2 (v_besch67 "vedea") ;
sell_V3 = dirV3 (v_besch112 "vinde") ;
send_V3 = dirV3 (v_besch82 "trimite") ;
sheep_N = mkN "oaie" ;
ship_N = mkN "vapor" neuter ;
shirt_N = mkN "cãmaºã" "cãmãºi" ;
shoe_N = mkN "pantof" masculine ;
shop_N = mkN "magazin" ;
short_A = regA "scurt" ;
silver_N = mkN "argint" masculine ;
sister_N = mkAnim (mkN "sorã" "surori") ;
sleep_V = v_besch128 "dormi" ;
small_A = mk4A "mic" "micã" "mici" "mici" ;
snake_N = mkN "ºarpe" "ºerpi" masculine ;
sock_N = mkN "ºosetã" ;
speak_V2 = dirV2 (mkV "vorbi") ;
star_N = mkN "stea" ;
steel_N = mkNR "oþel" ;
stone_N = mkN "piatrã" "pietre" ;
stove_N = mkN "sobã" ;
student_N = mkAnim (mkN "student" masculine) ;
stupid_A = regA "stupid" ;
sun_N = mkN "soare" "sori" masculine ;
switch8off_V2 = dirV2 (v_besch77 "stinge") ;
switch8on_V2 = dirV2 (mkV "aprinde") ;
table_N = mkN "masã" "mese" ;
talk_V3 = mmkV3 (mkV "vorbi") (noPrep Ac) (mkPrep "cu" Ac) ;
teacher_N = mkAnim (mkN "profesor") ;
teach_V2 = dirV2 (v_besch57 "preda") ;
television_N = mkN "televiziune" ;
thick_A = mkRMut "gros" ;
thin_A = regA "subþire" ;
train_N = mkNR "tren";
travel_V = mkV "cãlãtori" ;
tree_N = mkN "copac" masculine ;
--trousers_N = mkN "pantalon" masculine ;
ugly_A = regA "urât" ;
understand_V2 = dirV2 (v_besch83 "înþelege") ;
university_N = mkN "universitate" ;
village_N = mkN "sat" neuter ;
wait_V2 = dirV2 (v_besch30 "aºtepta") ;
walk_V = v_besch90 "merge" ;
warm_A = regA "calduþ" ;
war_N = mkN "rãzboi" neuter ;
watch_V2 = dirV2 (mkV "privi") ;
water_N = mkN "apã" ;
white_A = regA "alb" ;
window_N = mkN "fereastrã" "ferestre" ;
wine_N = mkNR "vin" ;
win_V2 = dirV2 (v_besch17 "câºtiga") ;
woman_N = chV "femeie" (mkAnim (mkN "femeie")) ;
wonder_VQ = mkVQ (mkRV (regV "minuna")) ;
wood_N = mkN "lemn" ;
write_V2 = dirV2 (v_besch117 "scrie") ;
yellow_A = regA "galben" ;
young_A = mk5A "tânãr" "tânãrã" "tineri" "tinere" "tinereºte" ;
do_V2 = dirV2 (v_besch115 "face") ;
now_Adv = mkAdv "acum" ;
already_Adv = mkAdv "deja" ;
song_N = mkN "cântec" ;
add_V3 = dirV3 (v_besch23 "adãuga") ;
number_N = mkN "numãr" ;
put_V2 = dirV2 (v_besch76 "pune") ;
stop_V = mkRV (regV "opri") ;
jump_V = v_besch118 "sãri" ;
left_Ord = mkOrd (regA "stâng") ;
right_Ord = mkOrd (mkRMut "drept") ;
far_Adv = mkAdv "departe" ;
correct_A = regA "corect" ;
dry_A = regA "uscat" ;
dull_A = regA "monoton";
full_A = regA "plin" ;
heavy_A = mk4A "greu" "grea" "grei" "grele";
near_A = regA "apropiat" ;
rotten_A = regA "stricat" ;
round_A = regA "rotund" ;
sharp_A = regA "ascuþit" ;
smooth_A = regA "neted" ;
straight_A = mkRMut "drept" ;
wet_A = regA "ud" ;
wide_A = regA "adânc" ;
animal_N = mkN "animal" ;
ashes_N = mkN "cenuºã" "cenuºi" ;
back_N = mkN "spate" "spate" neuter ;
bark_N = mkNR "lãtrat" ;
belly_N = mkN "pântec" ;
blood_N = mkNR "sânge" ;
bone_N = mkN "os" ;
breast_N = mkNR "piept" ;
cloud_N = mkN "nor" ;
day_N = mkN "zi" feminine ;
dust_N = mkNR "praf" ;
ear_N = mkN "ureche" ;
earth_N = mkNR "pãmânt" ;
egg_N = mkN "ou" "ouã" neuter ;
eye_N = mkN "ochi" masculine ;
fat_N = mkN "grãsime" ;
feather_N = mkN "panã" "pene" ;
fingernail_N = mkN "unghie" ;
fire_N = mkNR "foc" ;
flower_N = mkN "floare" "flori" ;
fog_N = mkN "ceaþã" "ceþuri" "ceþi" ;
foot_N = mkN "picior" neuter ;
forest_N = mkN "pãdure" ;
grass_N = mkN "iarbã" "ierburi" "ierbi" ;
guts_N = mkN "intestin" ;
hair_N = mkN "pãr" masculine ;
hand_N = mkN "mânã" "mâini" ;
head_N = mkN "cap" "capete" neuter ;
heart_N = mkN "inimã" ;
horn_N = mkNR "corn" ;
husband_N = mkAnim (mkN "soþ" masculine) ;
ice_N = mkN "gheaþã" "gheþuri" "gheþi" ;
knee_N = mkN "genunchi" masculine ;
leaf_N = mkN "frunzã" ;
leg_N = mkN "picior" neuter ;
liver_N = mkN "ficat" ;
louse_N = mkN "pãduche" masculine ;
mouth_N = mkN "gurã" ;
name_N = mkN "nume" "nume" neuter ;
neck_N = mkNR "gât" ;
night_N = mkN "noapte" "nopþi" ;
nose_N = mkNR "nas" ;
person_N = mkAnim (mkN "persoanã") ;
rain_N = mkN "ploaie" ;
road_N = mkNR "drum" ;
root_N = mkN "rãdãcinã" ;
rope_N = mkN "sfoarã" "sfori" ;
salt_N = mkN "sare" "sãruri" "sãri";
sand_N = mkNR "nisip" ;
seed_N = mkN "sãmânþã" "seminþe" ;
skin_N = mkN "piele" "pieli" "piei" ;
sky_N = mkNR "cer" ;
smoke_N = mkNR "fum" ;
snow_N = mkN "zãpadã" "zãpezi" ;
stick_N = mkN "bãþ" ;
tail_N = mkN "coadã" "cozi" ; -- mkN "coadã" feminine - certain kind of tails
tongue_N = mkN "limbã" "limbi";
tooth_N = mkN "dinte" masculine ;
wife_N = mkAnim (mkN "soþie");
wind_N = mkNR "vânt" ;
wing_N = mkN "aripã" ;
worm_N = mkN "vierme" masculine;
year_N = mkN "an" masculine;
bite_V2 = dirV2 (v_besch22 "muºca") ;
blow_V = v_besch55 "sufla" ;
breathe_V = v_besch17 "respira" ;
burn_V = mkV "arde" ;
count_V2 = dirV2 (v_besch35 "numãra" ) ;
cut_V2 = dirV2(v_besch14 "tãia") ;
dig_V = v_besch23 "sãpa" ;
fall_V = v_besch65 "cãdea" ;
fight_V2 = dirV2 (v_besch18 "lupta") ;
float_V = mkV "pluti" ;
flow_V = v_besch89 "curge" ;
fly_V = v_besch48 "zbura" ;
freeze_V = v_besch29 "îngheþa" ;
give_V3 = dirV3 (v_besch60 "da") ;
hit_V2 = dirV2 (mkV "lovi") ;
hunt_V2 = dirV2 (mkV "vâna") ;
kill_V2 = dirV2 (v_besch81 "ucide") ;
laugh_V = v_besch91 "râde" ;
lie_V = mkRV (regV "întinde") ;
play_V = mkNV (mkV48 "juca") ;
pull_V2 = dirV2 (v_besch78 "trage") ;
push_V2 = dirV2 (v_besch77 "împinge") ;
rub_V2 = dirV2 (v_besch29 "freca") ;
scratch_V2 = dirV2 (v_besch23 "scãrpina") ;
sew_V = v_besch110 "coase" ;
sing_V = v_besch18 "cânta" ;
sit_V = mkRV (mkV41 "aºeza") ;
smell_V = v_besch133 "mirosi" ;
spit_V = v_besch17 "scuipa" ;
squeeze_V2 = dirV2 (v_besch88 "stoarce") ;
stab_V2 = dirV2 (v_besch12 "înjunghia") ;
stand_V = v_besch17 "ridica" ;
suck_V2 = dirV2 (v_besch95 "suge") ;
swell_V = v_besch55 "umfla" ;
swim_V = v_besch32 "înota" ;
think_V = mkV "gândi" ;
throw_V2 = dirV2 (v_besch17 "arunca") ;
tie_V2 = dirV2 (v_besch29 "lega") ;
turn_V = v_besch88 "întoarce" ;
vomit_V = v_besch18 "vomita" ;
wash_V2 = dirV2 (v_besch45 "spãla") ;
wipe_V2 = dirV2 (v_besch83 "ºterge") ;
hold_V2 = dirV2 (v_besch108 "þine") ;
split_V2 = dirV2 (v_besch134 "despãrþi");
-- sit_V = v_besch41 "aºeza" ;
grammar_N = mkN "gramaticã" ;
language_N = mkN "limbã" "limbi" ;
rule_N = mkN "regulã" "reguli" ;
john_PN = mkPN "Ion" ;
question_N = mkN "întrebare" ;
ready_A = regA "pregãtit" ;
reason_N = mkN "motiv" ;
today_Adv = mkAdv "astãzi" ;
uncertain_A = regA "nesigur" ;
} ;

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,249 @@
concrete NumeralRon of Numeral = CatRon **
open MorphoRon, CatRon, Prelude in {
param DForm = unit | teen | ten | teen_inf | attr;
lincat Digit = {s : CardOrd => DForm => Str ; size : Size} ;
lincat Sub10 = {s : CardOrd => DForm => Str ; size : Size} ;
lincat Sub100 = {s : CardOrd => NumF => Str ; size : Size} ;
lincat Sub1000 = {s : CardOrd => NumF => Str ; size : Size} ;
lincat Sub1000000 = { s : CardOrd => NumF => Str; size : Size } ;
oper mkOrdinalForm : Str -> Gender -> Str =
\two, g -> case g of
{ Masc => case two of
{x+"t" => two+"ulea";
x + "ie" => x + "iilea";
_ => two+"lea"
};
Fem => case two of
{ x + "a" => two ;
x + ("ã"|"u") => x +"a";
x + "ei" => two + "a";
x + "ii" => x + "ia" ;
x + "i" => x + "ea";
x + "ie" => x +"a" ;
_ => two +"a"
}
};
oper mkOrdinal : Str -> Gender -> ACase -> Str =
\two, g, fl -> mkOrd (mkOrdinalForm two g) g fl;
oper mkOrd : Str -> Gender -> ACase -> Str =
\two, g, fl -> let cc = variants{(artPos g Sg)++ two ;
(artDem g Sg ANomAcc) ++ "de-"+(artPos g Sg) ++ two
} in
case fl of
{ ANomAcc => cc ;
AGenDat => (artDem g Sg AGenDat)++"de-"+(artPos g Sg)++ two ;
AVoc => cc
};
oper mkNum : Str -> Str -> Str -> Str -> Digit =
\two -> \twelve -> \twenty -> \doispe -> mkNumVSpc two twelve twelve twenty two doispe doispe (mkOrdinalForm two Masc) (mkOrdinalForm two Fem) two two;
oper mkNumVSpc : Str -> Str -> Str -> Str -> Str -> Str -> Str -> Str -> Str -> Str -> Str -> Digit =
\two -> \twelve -> \douasprezece -> \twenty -> \dou -> \doispe -> \douaspe -> \doilea -> \doua ->
\unu -> \una ->
{s = table {
NCard Masc => table {unit => two ; teen => twelve ;
ten => twenty ; teen_inf => doispe ; attr => unu
} ;
NCard Fem => table {unit => dou ; teen => douasprezece ;
ten => twenty ; teen_inf => douaspe ; attr => una
} ;
NOrd Masc => table {unit => doilea ;
teen => mkOrdinalForm twelve Masc ;
ten => mkOrdinalForm twenty Masc ;
teen_inf => mkOrdinalForm doispe Masc ;
attr => mkOrdinalForm unu Masc
} ;
NOrd Fem => table {unit => doua ;
teen => mkOrdinalForm douasprezece Fem ;
ten => mkOrdinalForm twenty Fem ;
teen_inf => mkOrdinalForm douaspe Fem ;
attr => mkOrdinalForm una Fem
}
} ;
size = less20 ;
lock_Digit = <>
} ;
oper regNum : Str -> Digit =
\trei -> mkNum trei (trei + "sprezece") (trei + "zeci") (trei + "ºpe") ;
oper mkMidF : Str -> Str -> Sub100 =
\unsprezece, unspe ->
{ s = table {NCard g => table { Formal => unsprezece ;
Informal => unspe
};
NOrd g => table {Formal => mkOrdinalForm unsprezece g;
Informal => mkOrdinalForm unspe g
}
};
size = less20 ;
lock_Sub100 = <>
};
lin num = \d ->
{ s = \\cse => table { NCard g => \\f => d.s ! (NCard g) ! f ;
NOrd g => \\f => let ss = d.s ! (NOrd g) ! f
in
case d.size of
{ sg => (artDem g Sg cse) ++ ss ;
_ => mkOrd ss g cse
}
};
size = d.size
} ;
-- Latin A Supplement chars
lin n2 = mkNumVSpc "doi" "doispreze" "douãsprezece" "douãzeci" "douã" "doiºpe" "douãºpe" "doilea" "doua" "doi" "douã";
lin n3 = regNum "trei";
lin n4 = mkNum "patru" "paisprezece" "patruzeci" "paiºpe";
lin n5 = mkNum "cinci" "cinsprezece" "cincizeci" "cinºpe";
lin n6 = mkNum "ºase" "ºaisprezece" "ºaizeci" "ºaiºpe";
lin n7 = mkNum "ºapte" "ºaptesprezece" "ºaptezeci" "ºaptiºpe";
lin n8 = mkNum "opt" "optsprezece" "optzeci" "optiºpe";
lin n9 = regNum "nouã";
lin pot01 = let num = mkNumVSpc "un" "unsprezece" "unsprezece" "zece" "o" "unºpe" "unºpe" "dintâi" "dintâi" "unu" "una"
in
{ s = \\o,c => num.s ! o ! c ;
size = sg
};
lin pot0 d = { s = \\o, c => d.s ! o ! c ;
size = less20
};
lin pot110 = mkMidF "zece" "zece" ;
lin pot111 = mkMidF "unsprezece" "unºpe" ;
lin pot1to19 = \d ->
{s = \\c => table { Formal => d.s ! c ! teen ;
Informal => d.s ! c ! teen_inf
};
size = less20
};
lin pot0as1 = \d ->
{s = \\c,_ => d.s ! c ! unit ;
size = d.size
};
lin pot1 = \d ->
{s = \\c,_ => d.s ! c ! ten ;
size = pl
};
lin pot1plus d e =
{s = table {
NCard g => \\_ => d.s ! (NCard g) ! ten ++ "ºi" ++ e.s ! (NCard g) ! attr ;
NOrd g => \\_ => d.s ! (NCard g) ! ten ++ "ºi" ++ e.s ! (NOrd g) ! attr
};
size = pl
};
lin pot1as2 n = n ;
lin pot2 d =
{s = table {
NCard g => \\_ => d.s ! (NCard Fem) ! unit ++ (mksute d.size) ;
NOrd g => \\_ => d.s ! (NCard Fem) ! unit ++ (mkSute d.size g)
};
size = pl} ;
lin pot2plus d e =
{s = \\c,f => d.s ! (NCard Fem) ! unit ++ (mksute d.size) ++ e.s ! c ! f ;
size = pl} ;
lin pot2as3 n = n ;
lin pot3 n =
{s = table {
NCard g => \\f => mkmie n.size (n.s ! (NCard Fem) ! f ) ;
NOrd g => \\f => mkMie n.size g (n.s ! (NCard Fem) ! f )
};
size = pl
} ;
lin pot3plus n m =
{s = \\c, f => mkmie n.size (n.s ! (NCard Fem) ! f ) ++ m.s ! c ! f ;
size = pl
};
oper mksute : Size -> Str = \sz -> table {sg => "sutã" ; _ => "sute" } ! sz ;
oper mkSute : Size -> Gender -> Str = \sz, g ->
table {sg => mkOrdinalForm "sutã" g ;
_ => mkOrdinalForm "sute" g } ! sz ;
oper mkmie : Size -> Str -> Str = \sz, attr ->
table {sg => "o" ++ "mie" ;
less20 => attr ++ "mii" ;
pl => attr ++ "de" ++ "mii"} ! sz ;
oper mkMie : Size -> Gender -> Str -> Str = \sz, g, attr ->
table { sg => "o" ++ mkOrdinalForm "mie" g ;
less20 => attr ++ mkOrdinalForm "mii" g ;
pl => attr ++ "de" ++ mkOrdinalForm "mii" g } ! sz ;
--numerals as sequences of digits :
lincat
Dig = {s : CardOrd => Str; n : Size ; isDig : Bool} ;
lin
IDig d = d ;
IIDig d i = {
s = \\o => d.s ! NCard Masc ++ i.s ! o ;
n = case d.n of
{ sg => if_then_else Size (i.isDig) less20 pl ;
_ => pl
};
isDig = False
} ;
lin
D_0 = mkDig "0" ;
D_1 = mk3Dig "1" "1ul" "1a" sg ;
D_2 = mkDig "2";
D_3 = mkDig "3" ;
D_4 = mkDig "4" ;
D_5 = mkDig "5" ;
D_6 = mkDig "6" ;
D_7 = mkDig "7" ;
D_8 = mkDig "8" ;
D_9 = mkDig "9" ;
oper mkDig : Str -> Dig = \c -> mk3Dig c (c + "lea") (c + "a") less20 ;
oper mk3Dig : Str -> Str -> Str-> Size -> Dig = \c,u,o,n -> {
s = table {NCard g => c ; NOrd Masc => u ; NOrd Fem => o } ;
n = n;
isDig = True ;
lock_Dig = <>
} ;
TDigit = {s : CardOrd => Str; n : Size ; isDig : Bool} ;
}

View File

@@ -0,0 +1,395 @@
--# -path=.:../romance:../common:../abstract:../../prelude
--1 Romanian Lexical Paradigms
--
-- Ramona Enache 2008 - 2009
--
resource ParadigmsRon =
open
(Predef=Predef),
Prelude,
MorphoRon,
CatRon in {
flags optimize=all ;
--2 Parameters
--
-- To abstract over gender names, we define the following identifiers.
oper
NGender : Type ;
masculine : NGender ;
feminine : NGender ;
neuter : NGender ;
Gender : Type ;
Masculine : Gender ;
Feminine : Gender ;
--To abstract over animacy, we define the following :
Anim : Type ;
animate : Anim ;
inanimate : Anim;
-- To abstract over number names, we define the following.
Number : Type ;
singular : Number ;
plural : Number ;
-- prepositions which require cases :
Preposition : Type ;
NCase : Type ;
Acc : NCase ;
Dat : NCase ;
Gen : NCase ;
mkPrep : Str -> NCase -> Prep ;
noPrep : NCase -> Prep ;
--2 Nouns
--3 Relational nouns
--
-- Relational nouns need a noun and a preposition.
mkN2 : N -> Prep -> N2 ;
mkN2 n p = n ** {lock_N2 = <> ; c2 = p};
-- Three-place relational nouns need two prepositions.
mkN3 : N -> Prep -> Prep -> N3 ;
mkN3 n p q = n ** {lock_N3 = <> ; c2 = p ; c3 = q };
--3 Proper names and noun phrases
--
-- Proper names need a string and a gender. If no gender is given, the
-- feminine is used for strings ending with "e", the masculine for other strings.
mkPN = overload {
mkPN : Str -> PN = mkPropN ;
mkPN : Str -> Gender -> PN = mkPropNoun ;
mkPN : Str -> Gender -> Number -> PN = mkProperNoun;
} ;
mkPropN : Str -> PN = \Ion ->
case last Ion of
{ "a" => mkPropNoun Ion Feminine ;
_ => mkPropNoun Ion Masculine
};
mkPropNoun : Str -> Gender -> PN = \Ion, gen ->
mkProperNoun Ion gen singular ;
mkProperNoun : Str -> Gender -> Number -> PN = \Ion, gen, num ->
{s = table {ANomAcc => Ion;
AGenDat => case <last Ion,gen> of
{ <"a",Fem> => init Ion + "ei" ;
_ => "lui" ++ Ion
};
AVoc => Ion
};
g = gen ;
n = num ;
lock_PN = <>
};
--3 Two-place adjectives
--
-- Two-place adjectives need a preposition for their second argument.
mkA2 : A -> Prep -> A2 ;
mkA2 a p = a ** {c2 = p ; lock_A2 = <>} ;
--.
--2 Definitions of the paradigms
--
-- The definitions should not bother the user of the API. So they are
-- hidden from the document.
NGender = MorphoRon.NGender ;
Number = MorphoRon.Number ;
Anim = MorphoRon.Animacy ;
Gender = MorphoRon.Gender ;
NCase = MorphoRon.NCase ;
masculine = NMasc ;
feminine = NFem ;
neuter = NNeut ;
singular = Sg ;
plural = Pl ;
animate = Animate ;
inanimate = Inanimate ;
Masculine = Masc ;
Feminine = Fem ;
Acc = Ac ;
Dat = Da ;
Gen = Ge ;
Preposition = Compl ;
mkPrep ss cc = {s = ss ; c = cc; isDir = True; lock_Prep = <>} ;
noPrep cc = mkPrep [] cc ;
compN : N -> Str -> N ;
compN x y = composeN x y ** {lock_N = <>} ;
ccompN : N -> Str -> N ;
ccompN x y = ccompose x y ** {lock_N = <>} ;
mkNI : Str -> Str -> NGender -> N;
mkNI s ss g = mkIn (mkNomIrreg s ss g) ** {lock_N = <>} ;
regN : Str -> NGender -> N ;
regN s g = mkIn (mkNomReg s g) ** {lock_N = <>};
mkVI : Str -> Str -> Str -> N;
mkVI s ss sss = mkIn (mkNomVIrreg s ss sss) ** {lock_N = <>} ;
mkIn : N -> N ;
mkIn n = mkInanimate n ** {lock_N = <> };
mkAnim : N -> N ;
mkAnim n = mkAnimate n ** {lock_N = <> };
chV : Str -> N -> N ;
chV s n = mkVocc n s ** {lock_N = <> } ;
--smart paradigm for inferring the gender of the nouns
--partly based on the paper
--"COVERT SEMANTIC AND MORPHOPHONEMIC CATEGORIES IN THE ROMANIAN GENDER SYSTEM"
-- by Jan Louis Perkowski, Emil Vrabie
mkSPN : Str -> N ;
mkSPN s = case s of
{ x + ("ã"|"e"|"a") => regN s feminine ;
x + ("el"|"mp"|"mb"|"en"|"id"|"at"|"ete"|"ol"|"et"|"or") => regN s masculine ;
_ => regN s neuter
};
mkNN : Str -> Str -> N ;
mkNN s ss = case s of
{ x + ("ã"|"e"|"a") => mkNI s ss feminine ;
_ => case ss of
{x + "uri" => mkNI s ss neuter ;
x + "e" => mkNI s ss neuter ;
_ => mkNI s ss masculine
}
};
mkN = overload {
mkN : Str -> Str -> NGender -> N = mkNI; -- worst case - we need Singular + Plural form + gender
mkN : Str -> Str -> Str -> N = mkVI; -- very irregular nouns - feminine
mkN : Str -> Str -> N = mkNN; -- needed Singular + Plural form, infers gender
mkN : Str -> NGender -> N = regN; -- needed Singular + gender, infers Plural form
mkN : Str -> N = mkSPN; -- needed Singular form, infers gender and Plural form
} ;
--because the plurals ending in "uri" are becoming less and less frequent for neuter nouns,
--and because there is no way of infering the plural form by looking at the structure of the word
--we treat this case separately :
mkNR : Str -> N;
mkNR s = mkIn (mkNomNeut s) ** {lock_N = <>} ;
--------------------------------------------------------------------
mk4A : Str -> Str -> Str -> Str -> A;
mk4A a b c d =
let adj = mkAdjSpec a b c d in
{s = table { Posit => adj.s ;
Compar => \\f => "mai" ++ (adj.s ! f) ++ "decât";
Superl => table {AF g n a c => artDem g n c ++ "mai" ++ adj.s ! (AF g n Indef c) ;
AA => artDem Masc Sg ANomAcc ++ "mai" ++ adj.s ! AA
}
}; isPre = False ; lock_A = <>} ;
mk5A : Str -> Str -> Str -> Str -> Str -> A ;
mk5A a b c d e =
let adj = mkAdjSSpec a b c d e in
{s = table { Posit => adj.s ;
Compar => \\f => "mai" ++ (adj.s ! f) ++ "decât";
Superl => table {AF g n a c => artDem g n c ++ "mai" ++ adj.s ! (AF g n Indef c);
AA => artDem Masc Sg ANomAcc ++ "mai" ++ adj.s ! AA
}
}; isPre = False ; lock_A = <>} ;
regA : Str -> A = \auriu -> let adj = mkAdjReg auriu in
{s = table {Posit => adj.s ;
Compar => \\f => "mai" ++ (adj.s ! f) ++ "decât";
Superl => table {AF g n a c => artDem g n c ++ "mai" ++ adj.s ! (AF g n Indef c);
AA => artDem Masc Sg ANomAcc ++ "mai" ++ adj.s ! AA
}
}; isPre = False ; lock_A = <> } ;
invarA : Str -> A = \auriu ->
let adj =mkAdjInvar auriu in
{s = table { Posit => adj.s ;
Compar => \\f => "mai" ++ (adj.s ! f) ++ "decât";
Superl => table {AF g n a c => artDem g n c ++ "mai" ++ adj.s ! (AF g n Indef c);
AA => artDem Masc Sg ANomAcc ++ "mai" ++ adj.s ! AA
}
}; isPre = False ; lock_A = <>} ;
mkRMut : Str -> A = \auriu ->
let adj = mkRegMut auriu in
{s = table { Posit => adj.s ;
Compar => \\f => "mai" ++ (adj.s ! f) ++ "decât";
Superl => table {AF g n a c => artDem g n c ++ "mai" ++ adj.s ! (AF g n Indef c);
AA => artDem Masc Sg ANomAcc ++ "mai" ++ adj.s ! AA
}
}; isPre = False ; lock_A = <>} ;
mkSMut : Str -> A = \auriu ->
let adj = mkSpecMut auriu in
{s = table { Posit => adj.s ;
Compar => \\f => "mai" ++ (adj.s ! f) ++ "decât";
Superl => table {AF g n a c => artDem g n c ++ "mai" ++ adj.s ! (AF g n Indef c);
AA => artDem Masc Sg ANomAcc ++ "mai" ++ adj.s ! AA
}
}; isPre = False ; lock_A = <>} ;
mkADeg : A -> A -> A ;
noComp : A -> A ;
prefA : A -> A ;
mkADeg a b =
{s = table {Posit => a.s ! Posit ; _ => b.s ! Posit} ; isPre = a.isPre ; lock_A = <>} ;
noComp a =
{s = \\_ => a.s ! Posit ;
isPre = a.isPre ;
lock_A = <>} ;
prefA a = {s = a.s ; isPre = True ; lock_A = <>} ;
--Adverbs :
mkAdv : Str -> Adv ;
mkAdV : Str -> AdV ;
mkAdA : Str -> AdA ;
mkAdv x = ss x ** {lock_Adv = <>} ;
mkAdV x = ss x ** {lock_AdV = <>} ;
mkAdA x = ss x ** {lock_AdA = <>} ;
mkV2S : V -> Prep -> V2S ;
-- mkVV : V -> VV ;
mkV2V : V -> Prep -> Prep -> V2V ;
mkVA : V -> VA ;
mkV2A : V -> Prep -> Prep -> V2A ;
mkVQ : V -> VQ ;
mkV2Q : V -> Prep -> V2Q ;
mkAS : A -> AS ;
mkA2S : A -> Prep -> A2S ;
mkAV : A -> Prep -> AV ;
mkA2V : A -> Prep -> Prep -> A2V ;
mmkV3 : V -> Prep -> Prep -> V3;
mmkV3 v p q = v ** {c2 = p ; c3 = q ; lock_V3 = <>} ;
dirV3 : V -> V3 ;
dirV3 v = mmkV3 v (noPrep Ac) (noPrep Da) ;
mkV3 = overload {
mkV3 : V -> V3 = dirV3 ;
mkV3 : V -> Prep -> Prep -> V3 = mmkV3
} ;
V0 : Type = V ;
AS, AV : Type = A ;
A2S, A2V : Type = A2 ;
mkV0 : V -> V0 ;
mkV0 v = v ** {lock_V0 = <>} ;
mmkV2 : V -> Prep -> V2 ;
mmkV2 v p = v ** {c2 = p ; lock_V2 = <>} ;
dirV2 : V -> V2 ;
dirV2 v = mmkV2 v (noPrep Ac) ;
mmkV3 : V -> Prep -> Prep -> V3 ;
mmkV3 v p q = v ** {c2 = p ; c3 = q ; lock_V3 = <>} ;
mkVS : V -> VS ;
mkVS v = v ** {m = \\_ => Indic ; lock_VS = <>} ;
mkV2S v p = mmkV2 v p ** {mn,mp = Indic ; lock_V2S = <>} ;
-- mkVV v = v ** {c2 = complAcc ; lock_VV = <>} ;
-- deVV v = v ** {c2 = complGen ; lock_VV = <>} ;
--aVV v = v ** {c2 = complDat ; lock_VV = <>} ;
mkV2V v p q = mmkV3 v p q ** {lock_V2V = <>} ;
mkVA v = v ** {lock_VA = <>} ;
mkV2A v p q = mmkV3 v p q ** {lock_V2A = <>} ;
mkVQ : V -> VQ ;
mkVQ v = v ** {lock_VQ = <>} ;
mkV2Q : V -> Prep -> V2Q ;
mkV2Q v p = mmkV2 v p ** {lock_V2Q = <>} ;
mkAS v = v ** {lock_AS = <>} ; ---- more moods
mkA2S v p = mkA2 v p ** {lock_A2S = <>} ;
mkAV v p = v ** {c = p.p1 ; s2 = p.p2 ; lock_AV = <>} ;
mkA2V v p q = mkA2 v p ** {s3 = q.p2 ; c3 = q.p1 ; lock_A2V = <>} ;
mkOrd : A -> Ord ;
mkOrd a = {s = a.s ! Posit ; isPre = a.isPre ; lock_Ord = <>} ;
--mkComp a =
--let adj = a.s ! Posit in
--{ s = table {Posit => adj ;
-- Compar => \\f => "mai" ++ adj ! f ++ "decât";
-- Superl => table {AF g n a c => (artDem g n c) ++ "mai" ++ adj ! (AF g n a c);
-- AA => "cel"++"mai" ++ adj ! AA
-- }
-- };
-- isPre = a.isPre ;
-- lock_A = <>
-- };
} ;

View File

@@ -0,0 +1,160 @@
--1 Romance auxiliary operations.
--
resource ResRon = ParamX ** open Prelude in {
flags optimize=all ;
flags optimize=all ;
--2 Enumerated parameter types for morphology
--
-- These types are the ones found in school grammars.
-- Their parameter values are atomic.
param
Gender = Masc | Fem ;
NGender = NMasc | NFem | NNeut ;
Mood = Indic | Conjunct ;
Direct = DDir | DInv ;
NumF = Formal | Informal ;
Animacy = Animate | Inanimate ;
param Size = sg | less20 | pl ;
Case = Acc | Dat | Gen ;
-- Adjectives are inflected in number, gender, have specific form for enclitic determined
--article, and specific forms for Nom-Accusative/Dative-Genitive/Voccative
AForm = AF Gender Number Species ACase | AA ;
-- Gender is not morphologically determined for first and second person pronouns.
PronGen = PGen Gender | PNoGen ;
-- Cardinal numerals have gender, ordinal numerals have full number as well.
ACase = ANomAcc | AGenDat | AVoc ;
Species = Def | Indef ;
NCase = No | Da | Ac | Ge | Vo ;
CardOrd = NCard Gender | NOrd Gender;
--3 Verbs
-- the form we build on syntactical level, based on VForm
-- it represents the main verb forms in Romanian
param
Temps1 = TPresn | TImparf | TPComp | TPSimple | TPPerfect | TFutur ;
TSubj1 = TSPres | TSPast ;
-- TPart1 = TGer | TPPasse Gender Number Species ACase;
VerbForm = TInf
| TIndi Temps1 Number Person
| TCondi Number Person
| TSubjo TSubj1 Number Person
| TImper NumPersI
| TGer
| TPPasse Gender Number Species ACase ;
-- the form we build on morphological level :
Temps = Presn | Imparf | PSimple | PPerfect ;
TSubj = SPres ;
--TPart = PPasse Gender Number Species ACase;
VForm = Inf
| Indi Temps Number Person
| Subjo TSubj Number Person
| Imper NumPersI
| Ger
| PPasse Gender Number Species ACase ;
-- form for compatibility with the other Romance languages, to be used in case that
-- Romanian will be integrated in the Romance category
param
VF =
VInfin Bool
| VFin TMood Number Person
| VImper NumPersI
| VPart Gender Number Species ACase
| VGer
;
TMood =
VPres Mood
| VImperf Mood --# notpresent
| VPasse --# notpresent
| VFut --# notpresent
| VCondit --# notpresent
;
NumPersI = SgP2 | PlP1 | PlP2 ;
VPForm =
VPFinite TMood Anteriority
| VPImperat
| VPGerund
| VPInfinit Anteriority Bool ;
RTense =
RPres
| RPast --# notpresent
| RPasse --# notpresent
| RFut --# notpresent
| RCond --# notpresent
;
-- Agreement of adjectives, verb phrases, and relative pronouns.
oper
AAgr : Type = {g : Gender ; n : Number} ;
Agr : Type = AAgr ** {p : Person} ;
param
RAgr = RAg {g : Gender ; n : Number} | RNoAg ; --- AAgr
oper
genForms : Str -> Str -> Gender => Str = \bon,bonne ->
table {
Masc => bon ;
Fem => bonne
} ;
aagrForms : (x1,_,_,x4 : Str) -> (AAgr => Str) = \tout,toute,tous,toutes ->
table {
{g = g ; n = Sg} => genForms tout toute ! g ;
{g = g ; n = Pl} => genForms tous toutes ! g
} ;
Noun = {s : Number => Species => ACase => Str; g : NGender; a : Animacy} ;
Adj = {s : AForm => Str} ;
-- A = {s : Degree => AForm => Str ; isPre : Bool} ;
Compl : Type = {s : Str ; c : NCase ; isDir : Bool} ;
-- complAcc : Compl = {s = [] ; c = Acc ; isDir = True} ;
-- complGen : Compl = {s = [] ; c = Gen ; isDir = True} ;
-- complDat : Compl = {s = [] ; c = Dat ; isDir = True} ;
}