added the rest of Romanian :-)

This commit is contained in:
krasimir
2009-09-10 17:23:29 +00:00
parent be3dc0ef9e
commit 7a13751a10
21 changed files with 2571 additions and 630 deletions

View File

@@ -0,0 +1,67 @@
incomplete concrete AdjectiveRon of Adjective =
CatRon ** open ResRon, Prelude in {
lin
PositA a = {
s = a.s ;
isPre = a.isPre
} ;
ComparA a np = {
s = \\af => more_CAdv.s ++ a.s ! af ++ conjThan ++ (np.s ! Ac).comp ;
isPre = False
} ;
CAdvAP ad ap np = {
s = \\af => case af of
{ AF g n sp c => artDem g n c ++ ad.s ++ ap.s ! (AF g n Indef c) ++ ad.p ++ (np.s ! No).comp ;
AA => ad.s ++ ap.s ! af ++ ad.p ++ (np.s ! No).comp
};
isPre = False
} ;
UseComparA a = {
s = \\af => more_CAdv.s ++ a.s ! af ;
isPre = False
} ;
AdjOrd ord = {
s = \\af => case af of {
AF g n sp c => ord.s ! n ! g ! (convACase c) ;
_ => ord.s ! Sg ! Masc ! No
} ;
isPre = True
} ;
-- $SuperlA$ belongs to determiner syntax in $Noun$.
ComplA2 adj np = {
s = \\af => adj.s ! af ++ appCompl adj.c2 np ;
isPre = False
} ;
ReflA2 adj = {
s = \\af => case af of
{ AF g n sp c => adj.s ! af ++ adj.c2.s ++
reflPron n P3 (convCase adj.c2.c) ++ reflPronHard g n P3;
AA => adj.s ! af ++ adj.c2.s ++ reflPron Sg P3 (convCase adj.c2.c) ++ reflPronHard Masc Sg P3
};
isPre = False
} ;
SentAP ap sc = {
s = \\a => ap.s ! a ++ sc.s ; --- mood
isPre = False
} ;
AdAP ada ap = {
s = \\a => ada.s ++ ap.s ! a ;
isPre = ap.isPre
} ;
UseA2 a = {
s = a.s ;
isPre = False
} ;
};

View File

@@ -0,0 +1,30 @@
incomplete concrete AdverbRon of Adverb =
CatRon ** open ResRon, Prelude in {
lin
PositAdvAdj a = {
s = a.s ! AA
} ;
ComparAdvAdj cadv a np = {
s = cadv.s ++ a.s ! AA ++ cadv.p ++ (np.s ! No).comp
} ;
ComparAdvAdjS cadv a s = {
s = cadv.s ++ a.s ! AA ++ cadv.p ++ s.s ! Indic
} ;
PrepNP prep np = {s = case prep.needIndef of
{False => prep.s ++ (np.s ! prep.c).comp;
_ => prep.s ++ np.indForm}
};
AdAdv ada adv = {s = ada.s ++ adv.s } ;
SubjS subj s = {
s = subj.s ++ s.s ! Indic
} ;
AdnCAdv cadv = {s = cadv.s ++ conjThan} ;
-- doesn't yield to a correct form for more_CAdv
}

View File

@@ -2,10 +2,10 @@ 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 = <>} ;
oper VerbeN = {s: VForm => Str ; isRefl : Agr => RAgr; nrClit : VClit} ;
oper mkNV : Verbe -> V = \ve -> {s = ve.s ; isRefl = \\_ => RNoAg ; nrClit = VNone ;lock_V = <> } ;
oper mkRVAcc : Verbe -> V = \ve -> {s = ve.s ; isRefl = \\a => aRefl a; nrClit = VRefl ;lock_V = <>} ;
oper mkRVDat : Verbe -> V = \ve -> {s = ve.s ; isRefl = \\a => dRefl a; nrClit = VRefl ;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)

View File

@@ -2,7 +2,7 @@
concrete CatRon of Cat =
CommonX - [Temp,TTAnt,Tense,TPres,TPast,TFut,TCond]
** open Prelude, ResRon, (R = ParamX) in {
** open Prelude, ResRon, MorphoRon,(R = ParamX) in {
flags optimize=all_subs ;
@@ -10,11 +10,47 @@ concrete CatRon of Cat =
lincat
-- Tensed/Untensed
S = {s : Mood => Str} ;
QS = {s : QForm => Str} ;
RS = {s : Mood => Agr => Str ; c : NCase} ;
SSlash = {
s : AAgr => Mood => Str ;
c2 : Compl
} ;
-- Sentence
Cl = {s : Direct => RTense => Anteriority => Polarity => Mood => Str} ;
ClSlash = {
s : AAgr => Direct => RTense => Anteriority => Polarity => Mood => Str ;
c2 : Compl
} ;
Imp = {s : Polarity => ImpForm => Gender => Str} ;
-- Relative
RCl = {
s : Agr => RTense => Anteriority => Polarity => Mood => Str ;
c : NCase
} ;
RP = {s : AAgr => NCase => Str ; a : AAgr ; hasAgr : Bool; hasRef : Bool} ;
-- Verb
-- VP = ResRon.VP ;
-- VPSlash = ResRon.VP ** {c2 : Compl} ;
VP = {
s : VForm => Str ;
isRefl : Agr => RAgr ;
nrClit : VClit ;
isFemSg : Bool ; -- needed for the correct placement of the Accusative clitic
neg : Polarity => Str ; -- ne-pas not needed - just "nu"
clAcc : RAgr ; -- le/se -- not needed if they are used in the noun
clDat : RAgr ; -- lui -- not needed if they are used in the noun
comp : Agr => Str ; -- content(e) ; à ma mère ; hier -
ext : Polarity => Str ; -- que je dors / que je dorme - so that it always comes after all the complements
} ;
VPSlash = VP ** {c2 : Compl; needAgr : Bool} ;
-- Comp = {s : Agr => Str} ;
-- Adjective
@@ -23,48 +59,113 @@ concrete CatRon of Cat =
-- Noun
lincat
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} ;
CN = {s : Number => Species => ACase => Str; g : NGender; a : Animacy } ;
Pron = {s : NCase => Str ;
c1, c2 : Clitics => Str ;
a : Agr ;
poss : Number => Gender => Str
} ;
NP = NounPhrase ;
--NCase because of the pronoun
Det = {s : Gender => NCase => Str ; n : Number ;
isDef : Bool ;
post : Gender => NCase => Str ;
sp : Gender => NCase => Str ; -- pentru Lexicon e aceeasi forma totusi ! posibil
-- probabil pentru ca orice Quant -> Det
size : Str ; --because of the numerals
hasRef : Bool
};
Predet = {s : AAgr => ACase => Str ; c : NCase} ;
-- Art = {s : Bool => Number => Gender => NCase => Str ; isDef : Bool } ;
Quant = {
s : Bool => Number => Gender => ACase => Str ;
sp : Number => Gender => ACase => Str ; -- diferente si in Lexicon, ex : acesta, aceasta
isDef : Bool ;
isPost : Bool ;
hasRef : Bool
};
-- Numeral
Numeral = {s : ACase => CardOrd => NumF => Str ; size : Size } ;
Digits = {s : CardOrd => Str ; n : Size ; isDig : Bool} ;
Numeral = {s : ACase => CardOrd => NumF => Str ;
sp : ACase => CardOrd => NumF => Str ; size : Size } ;
Digits = {s : CardOrd => Str ; n : Size ; isDig : Bool} ;
Num = {s : Gender => Str ; sp : Gender => Str ;
isNum : Bool ; n : Number; size : Str } ;
Card = {s : Gender => Str ; sp : Gender => Str ;
n : Number; size : Size} ;
Ord = {s : Number => Gender => NCase => Str; isPre : Bool} ;
--Question
-- Question
QCl = {s : RTense => Anteriority => Polarity => QForm => Str} ;
IComp = {s : AAgr => Str} ;
IDet = {s : Gender => ACase => Str ; n : Number} ;
IQuant = {s : Number => Gender => ACase => Str } ;
IP = {s : NCase => Str ; a : AAgr ; hasRef : Bool} ;
-- Structural
Conj = {s1,s2 : Str ; n : Number} ;
Subj = {s : Str ; m : Mood} ;
Prep = {s : Str ; c : NCase ; isDir : Bool} ;
Subj = {s : Str} ; --they all need Indicative mood
Prep = {s : Str ; c : NCase ; isDir : PrepDir ; needIndef : Bool ; prepDir : Str} ;
-- 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} ;
--Verb = {s : VForm => Str } ;
V ={s : VForm => Str ; isRefl : Agr => RAgr; nrClit : VClit} ;
VQ, VA = V ;
V2,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} ;
VV = V ** {c2 : Agr => Str} ;
A = {s : AForm => Str ; isPre : Bool} ;
A2 = {s : AForm => Str ; c2 : Compl} ;
N = Noun ;
N2 = Noun ** {c2 : Compl} ;
N3 = Noun ** {c2,c3 : Compl} ;
PN = {s : ACase => Str ; g : Gender ; n : Number} ;
PN = {s : NCase => Str ; g : Gender ; n : Number; a : Animacy} ;
Comp = {s : Agr => Str} ;
Temp = {s : Str ; t : RTense ; a : Anteriority} ;
Tense = {s : Str ; t : RTense} ;
lin
TTAnt t a = {s = a.s ++ t.s ; a = a.a ; t = t.t} ;
TPres = {s = []} ** {t = RPres} ;
TPast = {s = []} ** {t = RPast} ; --# notpresent
TFut = {s = []} ** {t = RFut} ; --# notpresent
TCond = {s = []} ** {t = RCond} ; --# notpresent
oper
aagr : Gender -> Number -> AAgr = \g,n ->
{g = g ; n = n} ;
agrP3 : Gender -> Number -> Agr = \g,n ->
aagr g n ** {p = P3} ;
conjGender : Gender -> Gender -> Gender = \m,n ->
case m of {
Fem => n ;
_ => Masc
} ;
conjAgr : Agr -> Agr -> Agr = \a,b -> {
g = conjGender a.g b.g ;
n = conjNumber a.n b.n ;
p = conjPerson a.p b.p
} ;
--Conjuctions
conjThan : Str = "decât" ;
conjThat : Str = "cã" ;
}

View File

@@ -0,0 +1,59 @@
incomplete concrete ConjunctionRon of Conjunction =
CatRon ** open ResRon, Coordination, Prelude in {
flags optimize=all_subs ;
lin
ConjS conj ss = conjunctDistrTable Mood conj ss ;
ConjAdv conj ss = conjunctDistrSS conj ss ;
ConjNP conj ss = heavyNP (conjunctDistrTable NCase conj ss ** {
a = {g = ss.a.g ; n = conjNumber conj.n ss.a.n ; p = ss.a.p} ;
hasClit = ss.hasClit;
ss = "" ---- fix this !!!!
}) ;
ConjAP conj ss = conjunctDistrTable AForm conj ss ** {
isPre = ss.isPre
} ;
ConjRS conj ss = conjunctDistrTable2 Mood Agr conj ss ** {
c = ss.c
} ;
-- These fun's are generated from the list cat's.
BaseS = twoTable Mood ;
ConsS = consrTable Mood comma ;
BaseAdv = twoSS ;
ConsAdv = consrSS comma ;
BaseNP x y = {
s1 = \\c => (x.s ! c).comp ;
s2 = \\c => (y.s ! c).comp ;
a = conjAgr x.a y.a;
hasClit = andB x.hasClit y.hasClit
} ;
ConsNP x xs = {
s1 = \\c => (x.s ! c).comp ++ comma ++ xs.s1 ! c ; ----e (conjunctCase c) ;
s2 = \\c => xs.s2 ! c ; ----e (conjunctCase c) ;
a = conjAgr x.a xs.a ;
hasClit = andB xs.hasClit x.hasClit
} ;
BaseAP x y = twoTable AForm x y ** {isPre = andB x.isPre y.isPre} ;
ConsAP xs x = consrTable AForm comma xs x ** {isPre = andB xs.isPre x.isPre} ;
BaseRS x y = twoTable2 Mood Agr x y ** {c = y.c} ;
ConsRS xs x = consrTable2 Mood Agr comma xs x ** {c = xs.c} ;
lincat
[S] = {s1,s2 : Mood => Str} ;
[Adv] = {s1,s2 : Str} ;
[NP] = {s1,s2 : NCase => Str ; a : Agr; hasClit : Bool} ;
[AP] = {s1,s2 : AForm => Str ; isPre : Bool} ;
[RS] = {s1,s2 : Mood => Agr => Str ; c : NCase} ;
};

View File

@@ -1,7 +1,20 @@
--# -path=.:../romance:../abstract:../common:prelude
concrete GrammarRon of Grammar =
NumeralRon
NounRon,
VerbRon,
AdjectiveRon,
AdverbRon,
NumeralRon,
SentenceRon,
IdiomRon,
QuestionRon,
RelativeRon,
ConjunctionRon,
PhraseRon,
TextX - [Temp,TTAnt,Tense,TPres,TPast,TFut,TCond], Coordination,
Prelude, MorphoRon, BeschRon,
StructuralRon
** {
flags startcat = Phr ; unlexer = text ; lexer = text ;

View File

@@ -0,0 +1,44 @@
incomplete concrete IdiomRon of Idiom =
-- CatRon ** open (P = ParamX), MorphoRon, ParadigmsRon,Prelude
CatRon ** open Prelude, ResRon
in {
flags optimize=all_subs ;
lin
ImpersCl vp = mkClause "" True (agrP3 Masc Sg) vp ;
GenericCl vp = mkClause "" True (agrP3 Masc Sg) vp ; -- an exact correspondent does not exist !
ExistNP np =
mkClause "" True np.a (insertSimpObj (\\ag => (np.s ! No ).comp) (UseV copula)) ;
-- v_besch20 "exista"
ExistIP ip = {
s = \\t,a,p,_ =>
ip.s ! No ++
(mkClause "" True (agrP3 (ip.a.g) (ip.a.n))
(UseV copula)).s
! DDir ! t ! a ! p ! Indic } ;
CleftNP np rs = mkClause "" True np.a
(insertSimpObj (\\_ => rs.s ! Indic ! np.a)
(insertSimpObj (\\_ => (np.s ! rs.c).comp) (predV copula))) ;
--need adverb for
CleftAdv ad s = mkClause "" True (agrP3 Masc Sg)
(insertSimpObj (\\_ => conjThat ++ s.s ! Indic)
(insertSimpObj (\\_ => ad.s) (predV copula))) ;
ProgrVP vp = vp; -- for the moment, since there is no particular way to express continuous action, except for the imperfect, which wouldn't work for all tenses
{-
ImpPl1 vpr = let vp = useVP vpr in {s =
(mkImperative False P1 vp).s ! Pos ! {n = Pl ; g = Masc} --- fem
} ;
-- insert clitics here also
-}
}

View File

@@ -1,4 +1,4 @@
--# -path=.:../romance:../abstract:../common
--# -path=.:../abstract:../common:../prelude
concrete LangRon of Lang =
GrammarRon,

View File

@@ -1,365 +1,366 @@
--# -path=.:../romance:../common:../abstract:../../prelude
concrete LexiconRon of Lexicon = CatRon **
open ParadigmsRon,BeschRon,MorphoRon in {
flags
optimize=values; coding=cp1250;
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 = mkA "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 = mkA "mare" ;
bike_N = mkN "bicicletã" ;
bird_N = mkN "pasãre" "pãsãri" ;
black_A = mkRMut "negru" ;
blue_A = mkA "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 = mkA "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 = mkA "curat" ;
clever_A = mkRMut "deºtept" ;
close_V2 = dirV2 (mkV "închide") ;
coat_N = mkN "hainã" ;
cold_A = mkA "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 = mkA "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 (mkA "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 = mkA "bun" "bunã" "buni" "bune" "bine" ;
go_V = v_besch90 "merge" ;
green_A = mkA "verde" ;
harbour_N = mkNR "port" ;
hate_V2 = dirV2 (mkV "urî") ;
hat_N = mkN "pãlãrie" ;
hear_V2 = dirV2 (v_besch127 "auzi") ;
hill_N = mkNR "deal" ;
hope_VS = mkVS (v_besch17 "spera") ;
horse_N = mkN "cal" "cai" ;
hot_A = mkA "cald" ;
house_N = mkN "ca" ;
important_A = mkA "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 = mkA "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 (mkA "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 = mkA "îngust" ;
new_A = mkA "nou" "nouã" "noi" "noi" ;
newspaper_N = mkN "ziar" ;
oil_N = mkNR "ulei" ;
old_A = mkA "vechi" "veche" "vechi" "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 (mkA "probabil") ;
queen_N = mkAnim (mkN "reginã" "regine") ;
radio_N = mkNR "radio";
--rain_V0 = mkV0 (v_besch54 "ploua") ;
read_V2 = dirV2 (mkV "citi") ;
red_A = mkA "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 = mkA "scurt" ;
silver_N = mkN "argint" masculine ;
sister_N = mkAnim (mkN "sorã" "surori") ;
sleep_V = v_besch128 "dormi" ;
small_A = mkA "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 = mkA "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 = mkA "subþire" ;
train_N = mkNR "tren";
travel_V = mkV "cãlãtori" ;
tree_N = mkN "copac" masculine ;
--trousers_N = mkN "pantalon" masculine ;
ugly_A = mkA "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 = mkA "calduþ" ;
war_N = mkN "rãzboi" neuter ;
watch_V2 = dirV2 (mkV "privi") ;
water_N = mkN "apã" ;
white_A = mkA "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 = mkA "galben" ;
young_A = mkA "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 = mkA "corect" ;
dry_A = mkA "uscat" ;
dull_A = mkA "monoton";
full_A = mkA "plin" ;
heavy_A = mkA "greu" "grea" "grei" "grele";
near_A = mkA "apropiat" ;
rotten_A = mkA "stricat" ;
round_A = mkA "rotund" ;
sharp_A = mkA "ascuþit" ;
smooth_A = mkA "neted" ;
straight_A = mkRMut "drept" ;
wet_A = mkA "ud" ;
wide_A = mkA "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 "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 = mkA "pregãtit" ;
reason_N = mkN "motiv" ;
today_Adv = mkAdv "astãzi" ;
uncertain_A = mkA "nesigur" ;
} ;
--# -path=.:../romance:../common:../abstract:../../prelude
concrete LexiconRon of Lexicon = CatRon **
open ParadigmsRon,MorphoRon,BeschRon 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 = mkA "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 = mkA "mare" ;
bike_N = mkN "bicicletã" ;
bird_N = mkN "pasãre" "pãsãri" ;
black_A = mkRMut "negru" ;
blue_A = mkA "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 = mkA "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 = mkA "curat" ;
clever_A = mkRMut "deºtept" ;
close_V2 = dirV2 (mkV "închide") ;
coat_N = mkN "hainã" ;
cold_A = mkA "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 = mkA "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 (mkRVAcc (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 (mkA "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 = mkA "bun" "bunã" "buni" "bune" "bine" ;
go_V = v_besch90 "merge" ;
green_A = mkA "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 = mkA "cald" ;
house_N = mkN "casã" ;
important_A = mkA "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 = mkA "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 (mkA "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 = mkA "îngust" ;
new_A = mkA "nou" "nouã" "noi" "noi" ;
newspaper_N = mkN "ziar" ;
oil_N = mkNR "ulei" ;
old_A = mkA "vechi" "veche" "vechi" "vechi" ;
open_V2 = dirV2 (mkV "deshide") ;
paint_V2A = mkV2A (mkV "picta") (noPrep Ac) (noPrep Ac) ;
paper_N = mkN "hârtie" ;
paris_PN = mkInAn(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 (mkA "probabil") ;
queen_N = mkAnim (mkN "reginã" "regine") ;
radio_N = mkNR "radio";
rain_V0 = mkV0 (v_besch54 "ploua") ;
read_V2 = dirV2 (mkV "citi") ;
red_A = mkA "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 = mkA "scurt" ;
silver_N = mkN "argint" masculine ;
sister_N = mkAnim (mkN "sorã" "surori") ;
sleep_V = v_besch128 "dormi" ;
small_A = mkA "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 = mkA "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") (mkPrep "cu" Ac) (mkPrep "despre" Ac);
teacher_N = mkAnim (mkN "profesor") ;
teach_V2 = dirV2 (v_besch57 "preda") ;
television_N = mkN "televiziune" ;
thick_A = mkRMut "gros" ;
thin_A = mkA "subþire" ;
train_N = mkNR "tren";
travel_V = mkV "cãlãtori" ;
tree_N = mkN "copac" masculine ;
--trousers_N = mkN "pantalon" masculine ;
ugly_A = mkA "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 = mkA "cãlduþ" "cãlduþã" "cãlduþi" "cãlduþe" "cãlduros";
war_N = mkN "rãzboi" neuter ;
watch_V2 = dirV2 (mkV "privi") ;
water_N = mkN "a" ;
white_A = mkA "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 (mkRVAcc (regV "minuna")) ;
wood_N = mkN "lemn" ;
write_V2 = dirV2 (v_besch117 "scrie") ;
yellow_A = mkA "galben" ;
young_A = mkA "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 = mkRVAcc (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 = mkA "corect" ;
dry_A = mkA "uscat" ;
dull_A = mkA "monoton";
full_A = mkA "plin" ;
heavy_A = mkA "greu" "grea" "grei" "grele";
near_A = mkA "apropiat" ;
rotten_A = mkA "stricat" ;
round_A = mkA "rotund" ;
sharp_A = mkA "ascuþit" ;
smooth_A = mkA "neted" ;
straight_A = mkRMut "drept" ;
wet_A = mkA "ud" ;
wide_A = mkA "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 = mkRVAcc (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 = mkRVAcc (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 = mkA "pregãtit" ;
reason_N = mkN "motiv" ;
today_Adv = mkAdv "astãzi" ;
uncertain_A = mkA "nesigur" ;
} ;

View File

@@ -1,10 +1,9 @@
--# -path=.:../Romance:../common:../../prelude
resource MorphoRon = ResRon **
open Prelude, Predef in {
open Prelude, Predef in {
flags
optimize=noexpand; coding=cp1250;
flags optimize=noexpand ;
---------------------------------------------------------------------------------
------------------------------ARTICLES-------------------------------------------
@@ -20,12 +19,12 @@ case <g,n,a> of
{ <Masc,Sg,ANomAcc> => case last bun of
{ "u" => bun + "l";
"e" => bun + "le";
"ã" => bun + "a";
"ã" => init bun + "a";
_ => bun + "ul"
};
<Masc,Sg,AGenDat> => case last bun of
{("u"|"e" ) => bun + "lui" ;
_ => bun + "ului"
{("u"|"e"|"ã" ) => bun + "lui" ;
_ => bun + "ului"
};
<Masc,Sg,AVoc> => case bun of
{ x+"u" => bun + "le";
@@ -68,15 +67,16 @@ case <g,n,a> of
<Fem,Sg,No> => "o"; <Fem,Sg,Ac> => "o"; <Fem,Sg,Da> => "unei"; <Fem,Sg,Ge> => "unei"
};
--Articles
--possesive article
-- used for Cardinals and for Genitive case
oper artPos : Gender -> Number -> Str = \g,n ->
case <g,n> of
{ <Masc,Sg> => "al";
<Masc,Pl> => "ai";
<Fem,Sg> => "a";
<Fem,Pl> => "ale"
oper artPos : Gender -> Number -> ACase -> Str = \g,n,c ->
case <g,n,c> of
{ <Masc,Sg,AGenDat> => "alui"; <Masc,Sg,_> => "al";
<Masc,Pl,AGenDat> => "alor"; <Masc,Pl,_> => "ai";
<Fem,Sg,AGenDat> => "alei"; <Fem,Sg,_> => "a";
<Fem,Pl,AGenDat> => "ale"; <Fem,Pl,_> => "ale"
};
@@ -93,6 +93,7 @@ oper artDem : Gender -> Number -> ACase -> Str = \g,n,c ->
};
--flexion forms of a noun without article
oper artUnf : Str -> Str -> Gender -> Number -> ACase -> Str = \buna,bune,g,n,a ->
@@ -222,7 +223,7 @@ mkVocc : Noun -> Str -> Noun = \n -> \vo ->
mkInanimate : Noun -> Noun = \n ->
{s = table { Sg => \\p,c => case c of
{AVoc => n.s ! Sg ! Indef ! ANomAcc ;
{AVoc => n.s ! Sg ! p ! ANomAcc ;
_ => n.s ! Sg ! p ! c
};
Pl => \\p, c => n.s ! Pl ! p ! c
@@ -540,12 +541,12 @@ mkSpecMut : Str -> Adj = \s ->
-- Gerund - 1 form
-- 2nd person Singular form for Imperative - 1 form
Verbe : Type = VForm => Str ;
Verbe : Type = { s : VForm => Str};
verbAffixes :
Str-> (a,b,c,d: Number => Person => Str) -> Str -> Adj -> Str -> Str -> Verbe =
\fi,pres, imperf, pSimple, pPerf, subj, adj, ger, imp ->
table {
let t = table {
Inf => fi ;
Indi Presn n p => pres ! n ! p ;
Indi Imparf n p => imperf ! n ! p;
@@ -558,7 +559,8 @@ mkSpecMut : Str -> Adj = \s ->
Imper PlP1 => pres ! Pl ! P1 ;
Ger => ger ;
PPasse g n a d => adj. s ! (AF g n a d)
} ;
} in
{s = t};
-- syntactical verb :
@@ -568,22 +570,40 @@ SVerbe : Type = VerbForm => Str ;
mkVerb : Verbe -> SVerbe = \vb ->
table {
TInf => "a" ++ vb ! Inf ;
TIndi TPresn n p => vb ! (Indi Presn n p) ;
TIndi TImparf n p => vb ! (Indi Imparf n p);
TIndi TPComp n p => pComp ! n ! p ++ vb ! (PPasse Masc Sg Indef ANomAcc) ;
TIndi TPSimple n p => vb ! (Indi PSimple n p) ;
TIndi TPPerfect n p => vb ! (Indi PPerfect n p) ;
TIndi TFutur n p => pFut ! n ! p ++ vb ! Inf ;
TSubjo TSPres n p => "sã" ++ vb ! (Subjo SPres n p) ;
TSubjo TSPast n p => "sã" ++ "fi" ++ vb ! (PPasse Masc Sg Indef ANomAcc) ;
TCondi n p => pCond ! n ! p ++ vb ! Inf ;
TImper PlP1 => "sã" ++ vb ! (Imper PlP1) ;
TImper p => vb ! (Imper p) ;
TGer => vb ! Ger ;
TPPasse g n a d => vb ! (PPasse g n a d)
TInf => "a" ++ vb.s ! Inf ;
TIndi TPresn n p => vb.s ! (Indi Presn n p) ;
TIndi TImparf n p => vb.s ! (Indi Imparf n p);
TIndi TPComp n p => pComp ! n ! p ++ vb.s ! (PPasse Masc Sg Indef ANomAcc) ;
TIndi TPSimple n p => vb.s ! (Indi PSimple n p) ;
TIndi TPPerfect n p => vb.s ! (Indi PPerfect n p) ;
TIndi TFutur n p => pFut ! n ! p ++ vb.s ! Inf ;
TSubjo TSPres n p => "sã" ++ vb.s ! (Subjo SPres n p) ;
TSubjo TSPast n p => "sã" ++ "fi" ++ vb.s ! (PPasse Masc Sg Indef ANomAcc) ;
TCondi n p => pCond ! n ! p ++ vb.s ! Inf ;
TImper PlP1 => "sã" ++ vb.s ! (Imper PlP1) ;
TImper p => vb.s ! (Imper p) ;
TGer => vb.s ! Ger ;
TPPasse g n a d => vb.s ! (PPasse g n a d)
};
mkVerbRefl : Verbe -> SVerbe = \vb ->
table {
TInf => "a" ++ "se" ++ vb.s ! Inf ;
TIndi TPresn n p => pronRefl ! n ! p ++ vb.s ! (Indi Presn n p) ;
TIndi TImparf n p => pronRefl !n ! p ++ vb.s ! (Indi Imparf n p);
TIndi TPComp n p => pronReflClit ! n ! p + "-" + pComp ! n ! p ++ vb.s ! (PPasse Masc Sg Indef ANomAcc) ;
TIndi TPSimple n p => pronRefl ! n ! p ++ vb.s ! (Indi PSimple n p) ;
TIndi TPPerfect n p => pronRefl ! n ! p ++ vb.s ! (Indi PPerfect n p) ;
TIndi TFutur n p => pronRefl ! n ! p ++ pFut ! n ! p ++ vb.s ! Inf ;
TSubjo TSPres n p => "sã" ++ pronRefl ! n ! p ++ vb.s ! (Subjo SPres n p) ;
TSubjo TSPast n p => "sã" ++ pronRefl ! n ! p ++ "fi" ++ vb.s ! (PPasse Masc Sg Indef ANomAcc) ;
TCondi n p => pronReflClit ! n ! p + "-" + pCond ! n ! p ++ vb.s ! Inf ;
TImper PlP1 => "sã" ++ pronRefl ! Pl ! P1 ++ vb.s ! (Imper PlP1) ;
TImper PlP2 => vb.s ! (Imper PlP2) + "-"+ pronRefl ! Pl ! P2 ;
TImper SgP2 => vb.s ! (Imper SgP2) + "-"+ pronRefl ! Sg ! P2 ;
TGer => vb.s ! Ger + "u" + "-" + pronRefl ! Sg ! P3 ;
TPPasse g n a d => vb.s ! (PPasse g n a d)
};
-- auxiliary for Past Composite (to have - as auxiliary) :
pComp : Number => Person => Str = table {Sg => table {P1 => "am" ; P2 => "ai" ; P3 => "a"} ;
@@ -605,24 +625,6 @@ pCond : Number => Person => Str = table {Sg => table {P1 => "a
-- make Reflexive verbe : ? with variants ?
-- syntactical category of reflexive verbs based on the primitive forms in Verbe
mkVerbRefl : Verbe -> SVerbe = \vb ->
table {
TInf => "a" ++ "se" ++ vb ! Inf ;
TIndi TPresn n p => pronRefl ! n ! p ++ vb ! (Indi Presn n p) ;
TIndi TImparf n p => pronRefl !n ! p ++ vb ! (Indi Imparf n p);
TIndi TPComp n p => pronReflClit ! n ! p + "-" + pComp ! n ! p ++ vb ! (PPasse Masc Sg Indef ANomAcc) ;
TIndi TPSimple n p => pronRefl ! n ! p ++ vb ! (Indi PSimple n p) ;
TIndi TPPerfect n p => pronRefl ! n ! p ++ vb ! (Indi PPerfect n p) ;
TIndi TFutur n p => pronRefl ! n ! p ++ pFut ! n ! p ++ vb ! Inf ;
TSubjo TSPres n p => "sã" ++ pronRefl ! n ! p ++ vb ! (Subjo SPres n p) ;
TSubjo TSPast n p => "sã" ++ pronRefl ! n ! p ++ "fi" ++ vb ! (PPasse Masc Sg Indef ANomAcc) ;
TCondi n p => pronReflClit ! n ! p + "-" + pCond ! n ! p ++ vb ! Inf ;
TImper PlP1 => "sã" ++ pronRefl ! Pl ! P1 ++ vb ! (Imper PlP1) ;
TImper PlP2 => vb ! (Imper PlP2) + "-"+ pronRefl ! Pl ! P2 ;
TImper SgP2 => vb ! (Imper SgP2) + "-"+ pronRefl ! Sg ! P2 ;
TGer => vb ! Ger + "u" + "-" + pronRefl ! Sg ! P3 ;
TPPasse g n a d => vb ! (PPasse g n a d)
};
-- reflexive pronouns - full form
@@ -664,7 +666,7 @@ table {Sg => table {P1 => "m" ; P2 => "te" ; P3 => "s"};
-}
-- This is a conversion to the type in $CommonRomance$.
{-
oper
vvf : (VerbForm => Str) -> (VF => Str) = \aller -> table {
VInfin _ => aller ! TInf ;
@@ -679,7 +681,7 @@ oper
VPart g n a d => aller ! TPPasse g n a d ;
VGer => aller ! TGer
} ;
-}
-- vowells in Romanian - used for clitics
@@ -1568,8 +1570,8 @@ mkV68 : Str -> Verbe = \putea ->
r = root + "o"
in
verbAffixes vrea (mkTab root (root+"eau") (root+"ei")(root +"ea") (init root + "or") affixPlGr24)
(mkFromAffix r affixSgII affixPlII) (mkFromAffix root affixSgPS3 affixPlPS3)
(mkFromAffix root affixSgPP4 affixPlPP4) (root +"ea") (mkAdjReg (r + "ut"))
(mkFromAffix r affixSgI2 affixPlI2) (mkFromAffix root affixSgPS3 affixPlPS3)
(mkFromAffix root affixSgPP4 affixPlPP4) (root +"ea") (mkAdjReg (root + "ut"))
(root + "ând") (root + "ei") ;
----------------------------------------------------------------------
@@ -2424,5 +2426,31 @@ let root = init fi ;
in
verbAffixes fi pres (mkFromAffix "er" affixSgI affixPlI) ps pp
-}
} ;
-}
--------------Reflexive pronouns
oper reflPron : Number -> Person -> ACase -> Str =
\n,p,c -> case <n,p,c> of
{<Sg,P1,AGenDat> => "mie" ; <Sg,P1,_> => "mine";
<Sg,P2,AGenDat> => "þie" ; <Sg,P2,_> => "tine";
<_,P3,AGenDat> => "sieºi" ; <_,P3,_> => "sine" ;
<Pl,P1,AGenDat> => "nouã" ; <Pl,P1,_> => "noi" ;
<Pl,P2,AGenDat> => "vouã" ; <Pl,P2,_> => "voi"
};
oper reflPronHard : Gender -> Number -> Person -> Str =
\g,n,p -> case <g,n,p> of
{<Masc,Sg,P1> => "însumi" ; <Fem,Sg,P1> => "însãmi";
<Masc,Sg,P2> => "însuþi" ; <Fem,Sg,P2> => "însãþi";
<Masc,Sg,P3> => "însuºi" ; <Fem,Sg,P3> => "însãºi";
<Masc,Pl,P1> => "înºine" ; <Fem,Pl,P1> => "însene";
<Masc,Pl,P2> => "înºivã"; <Fem,Pl,P2> => "înseva";
<Masc,Pl,P3> => "înºiºi"; <Fem,Pl,P3> => "înseºi"
};
};

322
lib/src/romanian/NounRon.gf Normal file
View File

@@ -0,0 +1,322 @@
incomplete concrete NounRon of Noun =
CatRon ** open ResRon,Prelude in {
flags optimize=all_subs ;
lin
DetCN det cn =
let
n = det.n;
gg = agrGender cn.g n ;
ag = agrP3 gg n ;
hr = andB (getClit cn.a) det.hasRef ;
st= if_then_else Species det.isDef Def Indef;
rs = if_then_else Species det.hasRef Def Indef
in
{s = \\c => case c of
{Vo =>
{comp = det.s ! gg ! No ++ det.size ++ cn.s ! n ! st ! ANomAcc ++ det.post ! gg ! No ;
clit = \\cs => if_then_Str hr ((genCliticsCase ag c).s ! cs) [] };
_ => {comp = det.s ! gg ! c ++ det.size ++ cn.s ! n ! st ! (convCase c) ++ det.post ! gg ! c ;
clit = \\cs => if_then_Str hr ((genCliticsCase ag c).s ! cs) [] }
};
a = ag ;
hasClit = hr ;
hasRef = hr ;
isPronoun = False ;
indForm = det.s ! gg ! No ++ det.size ++cn.s ! n ! rs ! ANomAcc
} ;
UsePN pn = let
g = pn.g ;
n = pn.n ;
ag = agrP3 g n ;
hc = getClit pn.a
in {
s = \\c => {comp = pn.s ! c ;
clit = \\cs => if_then_Str hc ((genCliticsCase ag c).s ! cs) [] } ;
a = ag;
hasClit = hc ;
hasRef = hc ;
isPronoun = False ;
indForm = pn.s ! No
} ;
UsePron p = {s = \\c =>{comp = p.s ! c ;
clit = (genCliticsCase p.a c).s } ;
hasClit = True;
hasRef = True ;
isPronoun = True ;
a = p.a;
indForm = p.s ! Ac
};
PredetNP pred np =
{s = \\c => {comp = pred.s ! aagr (np.a.g) (np.a.n) ! (convCase c) ++ (np.s ! pred.c).comp ;
clit = (np.s ! c).clit };
a = np.a ;
hasClit = np.hasClit ;
hasRef = False ;
isPronoun = False ;
indForm = pred.s ! aagr (np.a.g) (np.a.n) ! ANomAcc ++ (np.s ! pred.c).comp
} ;
PPartNP np v2 =
heavyNP {
s = \\c => (np.s ! c).comp ++ v2.s ! PPasse np.a.g np.a.n Indef (convCase c);
a = np.a ;
hasClit = np.hasClit;
ss = (np.s ! No).comp ++ v2.s ! PPasse np.a.g np.a.n Indef ANomAcc
} ;
RelNP np rs = heavyNP {
s = \\c => (np.s ! c).comp ++ rs.s ! Indic ! np.a ;
a = np.a ;
hasClit = False ;
ss = (np.s ! No).comp ++ rs.s ! Indic ! np.a
} ;
AdvNP np adv = heavyNP {
s = \\c => (np.s ! c).comp ++ adv.s ;
a = np.a ;
hasClit = False;
ss = (np.s ! No).comp ++adv.s ;
} ;
DetQuantOrd quant num ord = let n = num.n
in {
s = \\g,c => let s1 = if_then_Str quant.isDef (ord.s ! n ! g ! c) (ord.s ! n ! g ! No);
s2 = if_then_Str quant.isPost "" (quant.s ! num.isNum ! n ! g ! (convCase c) )
in
s2 ++ s1 ++ num.s ! g ;
sp = \\g,c => let
s1 = if_then_Str quant.isDef (ord.s ! n ! g ! c) (ord.s ! n ! g ! No) ;
s3 = if_then_Str quant.isPost (s1 ++ num.sp ! g ++ quant.sp ! n ! g ! ANomAcc) (quant.sp ! n ! g ! (convCase c) ++ s1 ++ num.sp ! g)
in
s3 ;
post = \\g,c => let s2 = if_then_Str quant.isPost (quant.s ! num.isNum ! n ! g ! (convCase c)) ""
in
s2 ;
n = num.n ;
isDef = False;
size = num.size;
hasRef = quant.hasRef
} ;
DetQuant quant num = let n = num.n ;
needDem = andB quant.isDef num.isNum
in {
s = \\g,c => let s1 = if_then_Str quant.isPost "" (quant.s ! num.isNum ! n ! g ! (convCase c)) ;
s2 = if_then_Str needDem (artDem g n (convCase c)) ""
in s2 ++ s1 ++ num.s ! g ;
sp = \\g,c => let s1 = if_then_Str needDem (artDem g n (convCase c)) "" ;
s2 = if_then_Str quant.isPost (s1 ++ num.sp ! g ++ quant.sp ! n ! g ! ANomAcc) (s1 ++ quant.sp ! n ! g ! (convCase c) ++ num.sp ! g)
in s2 ;
post = \\g,c => if_then_Str quant.isPost (quant.s ! num.isNum ! n ! g ! (convCase c)) "" ;
n = num.n ;
isDef = case num.isNum of
{True => False ;
_ => quant.isDef };
size = num.size ;
hasRef = quant.hasRef
} ;
-- consider fixing for possesive pronouns !
DetNP det =
let
g = Masc ;
n = det.n
in heavyNP {
s = \\c => det.sp ! g ! c ;
a = agrP3 g n ;
hasClit = True ;
ss = det.sp ! g ! No
} ;
-- assume that it refers to people
PossPron p = {
s = \\_,n,g,c => p.poss ! n ! g ;
sp = \\ n,g,c => artPos g n c ++ p.poss ! n ! g ;
isDef = True ;
isPost = True ;
hasRef = True
} ;
NumSg = {s = \\_ => [] ; sp = \\_ => [] ; isNum = False ; n = Sg ; size = ""} ;
NumPl = {s = \\_ => [] ; sp = \\_ => [] ; isNum = False ; n = Pl ; size = ""} ;
NumCard n = {s = n.s ; sp = n.sp ; size = getSize n.size ;
isNum = True; n = getNumber n.size
} ;
NumDigits nu = {s,sp = \\g => nu.s ! NCard g ;
size = nu.n; n = getNumber nu.n };
OrdDigits nu = {s = table{Sg => \\g,c => nu.s ! NOrd g ;
Pl => \\g,c => [] } ;
isPre = True
};
NumNumeral nu = {s = \\g => nu.s ! ANomAcc ! (NCard g) ! Formal ;
sp = \\g => nu.sp ! ANomAcc ! (NCard g) ! Formal ;
n = getNumber nu.size ; size = nu.size };
OrdNumeral nu = {s = table {Sg => \\g,c => nu.s ! (convCase c) ! NOrd g ! Formal;
Pl => \\g,c => []
};
isPre = True} ;
AdNum adn num = {s = \\a => adn.s ++ num.s ! a ;
sp = \\a => adn.s ++ num.sp ! a ;
isNum = num.isNum ; n = num.n; size = num.size} ;
OrdSuperl adj = {s = \\n,g,c => artDem g n (convCase c) ++ more_CAdv.s ++ adj.s ! AF g n Indef (convCase c);
isPre = True;
};
DefArt = {
s = \\b,n,g,c => [] ;
sp = \\n,g,c => [] ;
isDef = True ;
isPost = False ;
hasRef = False
} ;
IndefArt = {
s = \\b,n,g,c => if_then_Str b [] (artUndef g n (convACase c)) ;
sp = table {Sg => table {Masc => table {AGenDat => "unuia"; AVoc => [] ; _ => "unul" };
Fem => table {AGenDat => "uneia"; AVoc => [] ; _ => "una" }
};
Pl => table {Masc => table {AGenDat => "unora"; AVoc => "" ; _ => "unii"};
Fem => table {AGenDat => "unora"; AVoc => "" ; _ => "unele"}
}
};
isDef = False ;
isPost = False ;
hasRef = False
} ;
-- since mass noun phrases are not referential, it's no point keeping track of clitics
MassNP cn = let
g = case cn.g of
{NFem => Fem ;
_ => Masc} ;
hc = getClit cn.a ;
n = Sg
in {
s = \\c => {comp = cn.s ! n ! Indef ! (convCase c);
clit = \\cs => [] } ;
a = agrP3 g n ;
hasClit = hc ;
hasRef = False ;
isPronoun = False ;
poss = \\g,n => [] ;
indForm = cn.s ! n ! Indef ! ANomAcc
} ;
-- This is based on record subtyping.
UseN, UseN2 = \noun -> noun ;
Use2N3 f = f ;
Use3N3 f = f ** {c2 = f.c3} ;
ComplN2 f x = {
s = \\n,sp,c => f.s ! n ! sp ! c ++ appCompl f.c2 x ;
g = f.g ;
a = f.a
} ;
ComplN3 f x = {
s = \\n,sp,c => f.s ! n ! sp ! c ++ appCompl f.c2 x ;
g = f.g ;
c2 = f.c3;
a = f.a
} ;
AdjCN ap cn =
let
g = cn.g
in {
s = case ap.isPre of
{True => \\n => table {Def => \\c => case c of
{Voc => ap.s ! (AF (agrGender g n) n Def ANomAcc) ++ cn.s ! n ! Indef ! ANomAcc;
_ => ap.s ! (AF (agrGender g n) n Def c) ++ cn.s ! n ! Indef ! c
};
Indef => \\c => case c of
{Voc => ap.s ! (AF (agrGender g n) n Indef ANomAcc) ++ cn.s ! n ! Indef ! ANomAcc;
_ => ap.s ! (AF (agrGender g n) n Indef c) ++ cn.s ! n ! Indef ! c}};
False => \\n => table {Def => \\c => case c of
{Voc => cn.s ! n ! Indef ! ANomAcc ++ ap.s ! (AF (agrGender g n) n Indef ANomAcc);
_ => cn.s ! n ! Def ! c ++ ap.s ! (AF (agrGender g n) n Indef c)};
Indef => \\c => case c of
{Voc => cn.s ! n ! Indef ! ANomAcc ++ ap.s ! (AF (agrGender g n) n Indef ANomAcc);
_ => cn.s ! n ! Indef ! c ++ ap.s ! (AF (agrGender g n) n Indef c) }}
};
g = g ;
a = cn.a
} ;
RelCN cn rs = {
s = \\n,sp,c => cn.s ! n ! sp ! c ++ rs.s ! Indic ! agrP3 (agrGender cn.g n) n ;
g = cn.g ;
a = cn.a
} ;
SentCN cn sc = let g = cn.g in {
s = \\n,sp,c => cn.s ! n ! sp ! c ++ sc.s ;
g = g ;
a = cn.a
} ;
AdvCN cn sc = let g = cn.g in {
s = \\n,sp,c => cn.s ! n ! sp ! c ++ sc.s ;
g = g;
a = cn.a
} ;
ApposCN cn np = let g = cn.g in {
s = \\n,sp,c => cn.s ! n ! sp ! c ++ (np.s ! No).comp ;
g = g;
a = cn.a
} ;
oper
agrGender : NGender -> Number -> Gender =
\ng,n ->
case <ng,n> of
{<NMasc,_> => Masc ;
<NFem,_> => Fem ;
<NNeut, Sg> => Masc ;
_ => Fem
};
oper getNumber : Size -> Number =
\n -> case n of
{sg => Sg;
_ => Pl };
oper getClit : Animacy -> Bool =
\a -> case a of
{Animate => True;
_ => False};
};

View File

@@ -1,16 +1,14 @@
concrete NumeralRon of Numeral = CatRon **
open MorphoRon, CatRon, Prelude in {
flags
coding=cp1250;
param DForm = unit | teen | ten | teen_inf | attr;
param DForm = unit | teen | ten | teen_inf ;
param Place = indep | 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 } ;
lincat Sub10 = {s : CardOrd => DForm => Place => Str ; size : Size} ;
lincat Sub100 = {s : CardOrd => NumF => Place => Str ; size : Size} ;
lincat Sub1000 = {s : CardOrd => NumF => Place => Str ; size : Size} ;
lincat Sub1000000 = { s : CardOrd => NumF => Place => Str; size : Size } ;
@@ -22,10 +20,9 @@ oper mkOrdinalForm : Str -> Gender -> Str =
_ => two+"lea"
};
Fem => case two of
{ x + "a" => two ;
x + ("ã"|"u") => x +"a";
{ x + ("ã"|"u") => x +"a";
x + "ei" => two + "a";
x + "ii" => x + "ia" ;
x + "ii" => x + "ia" ;
x + "i" => x + "ea";
x + "ie" => x +"a" ;
_ => two +"a"
@@ -37,41 +34,37 @@ 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
\two, g, fl -> let cc = (artPos g Sg ANomAcc) ++ two
in
case fl of
{ ANomAcc => cc ;
AGenDat => (artDem g Sg AGenDat)++"de-"+(artPos g Sg)++ two ;
AGenDat => (artDem g Sg AGenDat)++"de-"+(artPos g Sg ANomAcc)++ 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;
\two -> \twelve -> \twenty -> \doispe -> mkNumVSpc two twelve twelve twenty two doispe doispe (mkOrdinalForm two Masc) (mkOrdinalForm two Fem);
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 ->
oper mkNumVSpc : Str -> Str -> Str -> Str -> Str -> Str -> Str -> Str -> Str -> Digit =
\two -> \twelve -> \douasprezece -> \twenty -> \dou -> \doispe -> \douaspe -> \doilea -> \doua ->
{s = table {
NCard Masc => table {unit => two ; teen => twelve ;
ten => twenty ; teen_inf => doispe ; attr => unu
ten => twenty ; teen_inf => doispe
} ;
NCard Fem => table {unit => dou ; teen => douasprezece ;
ten => twenty ; teen_inf => douaspe ; attr => una
ten => twenty ; teen_inf => douaspe
} ;
NOrd Masc => table {unit => doilea ;
teen => mkOrdinalForm twelve Masc ;
ten => mkOrdinalForm twenty Masc ;
teen_inf => mkOrdinalForm doispe Masc ;
attr => mkOrdinalForm unu Masc
teen_inf => mkOrdinalForm doispe Masc
} ;
NOrd Fem => table {unit => doua ;
teen => mkOrdinalForm douasprezece Fem ;
ten => mkOrdinalForm twenty Fem ;
teen_inf => mkOrdinalForm douaspe Fem ;
attr => mkOrdinalForm una Fem
teen_inf => mkOrdinalForm douaspe Fem
}
} ;
size = less20 ;
@@ -84,11 +77,11 @@ oper regNum : Str -> Digit =
oper mkMidF : Str -> Str -> Sub100 =
\unsprezece, unspe ->
{ s = table {NCard g => table { Formal => unsprezece ;
Informal => unspe
{ s = table {NCard g => table { Formal => \\_ => unsprezece ;
Informal => \\_ => unspe
};
NOrd g => table {Formal => mkOrdinalForm unsprezece g;
Informal => mkOrdinalForm unspe g
NOrd g => table {Formal => \\_ => mkOrdinalForm unsprezece g;
Informal => \\_ => mkOrdinalForm unspe g
}
};
@@ -98,34 +91,46 @@ oper mkMidF : Str -> Str -> 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
{ s = \\cse => table { NCard g => \\f => d.s ! (NCard g) ! f ! indep ;
NOrd g => \\f => let ss = d.s ! (NOrd g) ! f ! indep
in
case d.size of
{ sg => (artDem g Sg cse) ++ ss ;
_ => mkOrd ss g cse
}
};
};
sp = \\cse => table { NCard g => \\f => d.s ! (NCard g) ! f ! attr ;
NOrd g => \\f => let ss = d.s ! (NOrd g) ! f ! indep
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 n2 = mkNumVSpc "doi" "doispreze" "douãsprezece" "douãzeci" "douã" "doiºpe" "douãºpe" "doilea" "doua";
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 n7 = mkNum "ºapte" "ºaptesprezece" "ºaptezeci" "ºaptispe";
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"
lin pot01 = let num = mkNumVSpc "un" "unsprezece" "unsprezece" "zece" "o" "unºpe" "unºpe" "dintâi" "dintâi" ;
dep = mkNumVSpc "unu" "unsprezece" "unsprezece" "zece" "una" "unºpe" "unºpe" "unulea" "una"
in
{ s = \\o,c => num.s ! o ! c ;
{ s = \\o,c => table {indep => num.s ! o ! c ;
attr => dep.s ! o ! c
} ;
size = sg
};
lin pot0 d = { s = \\o, c => d.s ! o ! c ;
lin pot0 d = { s = \\o, c => \\_ => d.s ! o ! c ;
size = less20
};
@@ -134,19 +139,19 @@ 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
{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 ;
{s = \\c,_,p => d.s ! c ! unit ! p ;
size = d.size
};
lin pot1 = \d ->
{s = \\c,_ => d.s ! c ! ten ;
{s = \\c => \\_,_ => d.s ! c ! ten ;
size = pl
};
@@ -154,8 +159,8 @@ lin pot1 = \d ->
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
NCard g => \\_,_ => d.s ! (NCard g) ! ten ++ "ºi" ++ e.s ! (NCard g) ! unit ! attr ;
NOrd g => \\_,_ => d.s ! (NCard g) ! ten ++ "ºi" ++ e.s ! (NOrd g) ! unit ! attr
};
size = pl
};
@@ -164,29 +169,29 @@ 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)
NCard g => \\_,_ => d.s ! (NCard Fem) ! unit ! indep ++ (mksute d.size) ;
NOrd g => \\_,_ => d.s ! (NCard Fem) ! unit ! indep ++ (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 ;
{s = \\c,f,_ => d.s ! (NCard Fem) ! unit ! indep ++ (mksute d.size) ++ e.s ! c ! f ! attr ;
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 )
NCard g => \\f,p => mkmie n.size (n.s ! (NCard Fem) ! f ! indep) ;
NOrd g => \\f,p => mkMie n.size g (n.s ! (NCard Fem) ! f ! indep)
};
size = pl
} ;
lin pot3plus n m =
{s = \\c, f => mkmie n.size (n.s ! (NCard Fem) ! f ) ++ m.s ! c ! f ;
{s = \\c, f, p => mkmie n.size (n.s ! (NCard Fem) ! f ! indep) ++ m.s ! c ! f ! attr;
size = pl
};
@@ -226,7 +231,7 @@ lin
} ;
lin
D_0 = mkDig "0" ;
D_1 = mk3Dig "1" "1ul" "1a" sg ;
D_1 = mk3Dig "1" "1ul" "1a" sg ; ---- gender
D_2 = mkDig "2";
D_3 = mkDig "3" ;
D_4 = mkDig "4" ;

View File

@@ -54,9 +54,11 @@ oper
Acc : NCase ;
Dat : NCase ;
Gen : NCase ;
mkPrep : Str -> NCase -> Prep ;
noPrep : NCase -> Prep ;
mkPrep : overload {
mkPrep : Str -> NCase-> Bool -> Prep ;
mkPrep : Str -> NCase -> Prep;
};
noPrep : NCase -> Prep ;
--2 Nouns
@@ -73,7 +75,7 @@ oper
mkN3 : N -> Prep -> Prep -> N3 ;
mkN3 n p q = n ** {lock_N3 = <> ; c2 = p ; c3 = q };
--3 Proper names and noun phrases
@@ -83,11 +85,30 @@ mkN3 n p q = n ** {lock_N3 = <> ; c2 = p ; c3 = q };
mkPN = overload {
mkPN : Str -> PN = mkPropN ;
mkPN : Str -> Str -> Gender -> Number -> PN = mkPropNI ;
mkPN : Str -> Gender -> PN = mkPropNoun ;
mkPN : Str -> Gender -> Number -> PN = mkProperNoun;
} ;
mkPN : Str -> Gender -> Number -> PN = mkProperNoun;
} ;
mkInAn : PN -> PN = \romania ->
{s = table {No | Ac | Vo => romania.s ! No ;
_ => case romania.g of
{ Fem => romania.s ! Ge ;
Masc => romania.s ! No + "ului" }
};
g = romania.g; n = romania.n;
a = Inanimate;
lock_PN = <>
};
mkPropNI : Str -> Str -> Gender -> Number -> PN =
\romania, romaniei,g,n ->
{s = table {Ge | Da => romaniei;
_ => romania };
g = g; n = n;
a = Inanimate;
lock_PN = <>
};
mkPropN : Str -> PN = \Ion ->
case last Ion of
{ "a" => mkPropNoun Ion Feminine ;
@@ -98,15 +119,20 @@ 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
{s = table {No => Ion;
Ac => Ion;
Ge => case <last Ion,gen> of
{ <"a",Fem> => init Ion + "ei" ;
_ => "lui" ++ Ion
};
AVoc => Ion
Da => case <last Ion,gen> of
{ <"a",Fem> => init Ion + "ei" ;
_ => "lui" ++ Ion
};
Vo => Ion
};
g = gen ;
n = num ;
n = num ; a = Animate;
lock_PN = <>
};
@@ -152,9 +178,22 @@ lock_PN = <>
Preposition = Compl ;
mkPrep ss cc = {s = ss ; c = cc; isDir = True; lock_Prep = <>} ;
noPrep cc = mkPrep [] cc ;
mkPrep = overload {
mkPrep : Str -> NCase-> Bool -> Prep = mkPreposition;
mkPrep : Str -> NCase -> Prep = mkPrepos;
};
mkPreposition : Str -> NCase-> Bool -> Prep ;
mkPreposition ss cc b = {s = ss ; c = cc; isDir = NoDir; needIndef = b; prepDir = ""; lock_Prep = <>} ;
mkPrepos : Str -> NCase -> Prep ;
mkPrepos ss cc = mkPreposition ss cc False;
noPrep cc = case cc of
{Ac => {s = []; c = Ac ; isDir = Dir PAcc; needIndef = True; prepDir = "pe"; lock_Prep = <>};
Da => {s = []; c = Da ; isDir = Dir PDat; needIndef = False; prepDir = "" ; lock_Prep = <>};
_ => mkPreposition [] cc False
} ;
compN : N -> Str -> N ;
compN x y = composeN x y ** {lock_N = <>} ;
@@ -231,62 +270,33 @@ mkA = overload {
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 = <>} ;
{s = adj.s ;
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 = <>} ;
{s = adj.s ;
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 = <> } ;
{s = adj.s ;
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 = <>} ;
{s = adj.s ;
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 = <>} ;
{s = adj.s ;
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 = <>} ;
{s = adj.s ;
isPre = False ; lock_A = <>} ;
mkADeg : A -> A -> A ;
noComp : A -> A ;
@@ -295,10 +305,10 @@ let adj = mkSpecMut auriu in
prefA : A -> A ;
mkADeg a b =
{s = table {Posit => a.s ! Posit ; _ => b.s ! Posit} ; isPre = a.isPre ; lock_A = <>} ;
{s = a.s ; isPre = a.isPre ; lock_A = <>} ;
noComp a =
{s = \\_ => a.s ! Posit ;
{s = a.s ;
isPre = a.isPre ;
lock_A = <>} ;
@@ -306,49 +316,49 @@ prefA a = {s = a.s ; isPre = True ; lock_A = <>} ;
--Adverbs :
mkAdv : Str -> Adv ;
mkAdV : Str -> AdV ;
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 = <>} ;
--Verbs :
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) ;
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 ;
--Verbs :
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) ;
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;
@@ -359,7 +369,7 @@ oper mkV : Str -> V = \s -> mkNV (regV s) ;
mkV3 = overload {
mkV3 : V -> V3 = dirV3 ;
mkV3 : V -> Prep -> Prep -> V3 = mmkV3
mkV3 : V -> Prep -> Prep -> V3 = mmkV3
} ;
V0 : Type = V ;
@@ -371,25 +381,25 @@ oper mkV : Str -> V = \s -> mkNV (regV s) ;
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 = <>} ;
--mmkV3 : V -> Prep -> Prep -> Bool -> 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 = <>} ;
mkV2S v p = v ** {c2 = p ; mn,mp = Indic ; lock_V2S = <>} ;
mkVV : V -> VV ;
mkVV v = v ** {c2 = \\_ => "" ; lock_VV = <>} ;
mkV2V v p q = v ** {c2 = p; c3 = q; lock_V2V = <>} ;
mkVA v = v ** {lock_VA = <>} ;
mkV2A v p q = mmkV3 v p q ** {lock_V2A = <>} ;
mkV2A v p q = v ** {c2 = p; c3 = q; lock_V2A = <>} ;
mkVQ : V -> VQ ;
mkVQ v = v ** {lock_VQ = <>} ;
mkV2Q : V -> Prep -> V2Q ;
mkV2Q v p = mmkV2 v p ** {lock_V2Q = <>} ;
mkV2Q v p = v ** {c2 = p ; lock_V2Q = <>} ;
mkAS v = v ** {lock_AS = <>} ; ---- more moods
mkA2S v p = mkA2 v p ** {lock_A2S = <>} ;
@@ -400,7 +410,7 @@ oper mkV : Str -> V = \s -> mkNV (regV s) ;
mkOrd : A -> Ord ;
mkOrd a = {s = a.s ! Posit ; isPre = a.isPre ; lock_Ord = <>} ;
mkOrd a = {s = \\n,g,c => a.s ! AF g n Indef (convCase c) ; isPre = a.isPre ; lock_Ord = <>} ;
@@ -418,7 +428,128 @@ mkOrd a = {s = a.s ! Posit ; isPre = a.isPre ; lock_Ord = <>} ;
----
mkDet = overload {
mkDet : (_,_,_,_ : Str) -> Number -> Det = mkDetS ;
mkDet : (_,_,_,_,_,_,_,_ : Str) -> Number -> Det = mkD
} ;
mkDetS : (_,_,_,_ : Str) -> Number -> Det =
\orice, oricare,oricarui, oricarei,n ->
{s,sp = table { Masc => table {Da | Ge => oricarui ;
_ => orice } ;
Fem => table {Da | Ge => oricarei ;
_ => oricare }
};
post = \\g,c => ""; size = "";
n = n; isDef = False ; hasRef = False;
lock_Det = <>
};
mkD : (_,_,_,_,_,_,_,_ : Str) -> Number -> Det =
\multi, multe, multor, multorf,multiS,multeS, multora, multoraF, n ->
{ s = table { Masc => table {Da | Ge => multor ;
_ => multi } ;
Fem => table {Da | Ge => multorf ;
_ => multe }
};
sp = table { Masc => table {Da | Ge => multora ;
_ => multiS } ;
Fem => table {Da | Ge => multoraF ;
_ => multeS }
};
post = \\g,c => ""; size = "";
n = n; isDef = False ; hasRef = False;
lock_Det = <>
};
mkNP = overload {
mkNP : (_,_ : Str) -> Number -> Gender -> Bool -> NP = mkNPs ;
mkNP : (_,_,_ : Str) -> Number -> Gender -> Bool -> NP = mkNPa ;
mkNP : (_,_,_ : Str) -> Number -> Gender -> NP = mkNPspec
} ;
mkNPspec : Str -> Str -> Str -> Number -> Gender -> NP =
\cineva,cuiva,cinev, n, g -> let ag = agrP3 g n in
{ s = \\c => case c of
{Da => {clit = \\cs => ((genCliticsCase ag Da).s ! cs) ;
comp = cuiva
};
Ge => {clit = \\cs => [] ;
comp = cuiva};
Vo => {clit = \\cs => [] ;
comp = cinev
};
_ => {clit = \\cs => ((genCliticsCase ag c).s ! cs) ;
comp = cineva
}
};
a = ag ;
indForm = cineva ;
hasClit = True;
isPronoun = False ;
hasRef = True ;
lock_NP = <>
} ;
mkNPs : Str -> Str -> Number -> Gender -> Bool -> NP =
\cineva, cuiva, n, g, b -> let ag = agrP3 g n in
{s = \\c => case c of
{Da | Ge => {clit = \\cs => [] ;
comp = cuiva
};
_ => {clit = \\cs => [];
comp = cineva}
};
a = ag ;
indForm = cineva ;
hasClit = False;
isPronoun = False ;
hasRef = b ;
lock_NP = <>
};
mkNPa : Str -> Str -> Str -> Number -> Gender -> Bool -> NP =
\om,omului,omule, n, g, b -> let ag = agrP3 g n
in
{s = \\c => case c of
{Da | Ge => {clit = \\cs => [] ;
comp = omului
};
Vo => {clit = \\_ => [];
comp = omule};
_ => {clit = \\cs => [] ;
comp = om}
};
a = ag;
hasClit = False;
hasRef = b;
isPronoun = False ;
indForm = om ;
lock_NP = <>
};
mkPronoun :(_,_,_,_,_,_,_,_,_ : Str) -> Gender -> Number -> Person -> Pron =\eu, mine, mie, meu, euV, meuP, mea, mei, mele,g, n, p ->
{s = table
{No => eu ;
Ac => mine ;
Da => mie ;
Ge => meu;
Vo => euV
} ;
c1 = \\c => (cliticsAc g n p).s ! c ; c2 = \\c => (cliticsDa g n p).s ! c ;
a = {g = g ; n = n ; p = p} ;
poss = table {Sg => table {Masc => meuP ; Fem => mea};
Pl => table {Masc => mei ; Fem => mele}
};
lock_Pron = <>};
-- fix for Genitive, person 1 - 2
-- only problem is for genitive case demanded by prepositions (ex : beyond me), otherwise the possesive adjective is used.
-- in this case we add a case to the complement, so that the right gender is chosen.
} ;

View File

@@ -0,0 +1,28 @@
resource PhonoRon = open Prelude in {
flags coding=utf8 ;
oper
voyelle : Strs = strs {
"a" ; "?" ; "?" ; "e" ; "?" ; "?" ; "??" ;
"h" ;
"i" ; "?" ; "o" ; "?" ; "u" ; "?" ; "y"
} ;
elision : Str -> Str = \d -> d + pre {"e" ; "'" / voyelle} ;
-- The following morphemes are the most common uses of elision.
elisDe = elision "d" ;
elisLa = pre {"la" ; "l'" / voyelle} ;
elisLe = elision "l" ;
elisNe = elision "n" ;
elisQue = elision "qu" ;
-- The subjunction "si" has a special kind of elision. The rule is
-- only approximatively correct, for "si" is not really elided before
-- the string "il" in general, but before the pronouns "il" and "ils".
elisSi = pre {"si" ; "s'" / strs {"il"}} ;
}

View File

@@ -0,0 +1,27 @@
incomplete concrete PhraseRon of Phrase =
CatRon ** open ResRon, Prelude in {
flags optimize = all_subs ;
lin
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
UttS s = {s = s.s ! Indic} ;
UttQS qs = {s = qs.s ! QDir} ;
UttImpSg pol imp = {s = pol.s ++ imp.s ! pol.p ! ImpF Sg False ! Fem} ;
UttImpPl pol imp = {s = pol.s ++ imp.s ! pol.p ! ImpF Pl False ! Fem} ;
UttImpPol pol imp = {s = pol.s ++ imp.s ! pol.p ! ImpF Sg True ! Fem} ;
UttIP ip = {s = ip.s ! No} ; --- Acc also
UttIAdv iadv = iadv ;
UttNP np = {s = (np.s ! No).comp} ;
-- UttVP vp = {s = infVP vp (agrP3 Fem Sg)} ; --- Agr
UttAdv adv = adv ;
NoPConj = {s = []} ;
PConjConj conj = {s = conj.s2} ;
NoVoc = {s = []} ;
VocNP np = {s = "," ++ (np.s ! Vo).comp} ;
}

View File

@@ -0,0 +1,110 @@
incomplete concrete QuestionRon of Question =
CatRon ** open ResRon, Prelude in {
flags optimize=all_subs ;
lin
QuestCl cl = {
s = \\t,a,p =>
let cls = cl.s ! DDir ! t ! a ! p
in table {
QDir => cls ! Indic ;
QIndir => "dacã" ++ cls ! Indic
}
} ;
-- doesn't have clitics since it's subject of the phrase
QuestVP qp vp = {
s = \\t,a,b,_ =>
let
cl = mkClause (qp.s ! No) False (agrP3 qp.a.g qp.a.n) vp
in
cl.s ! DDir ! t ! a ! b ! Indic
} ;
QuestSlash ip slash = {
s = \\t,a,p =>
let
cls : Direct -> Str =
\d -> slash.s ! ip.a ! d ! t ! a ! p ! Indic ;
prep = if_then_Str ip.hasRef slash.c2.prepDir "" ;
who = prep ++ slash.c2.s ++ ip.s ! slash.c2.c
in table {
QDir => who ++ cls DInv ;
QIndir => who ++ cls DDir
}
} ;
QuestIAdv iadv cl = {
s = \\t,a,p,q =>
let
ord = case q of {
QDir => DInv ;
QIndir => DDir
} ;
cls = cl.s ! ord ! t ! a ! p ! Indic ;
why = iadv.s
in why ++ cls
} ;
QuestIComp icomp np = {
s = \\t,a,p,_ =>
let
vp = predV copula ;
cls = (mkClause (np.s ! No).comp np.hasClit np.a vp).s !
DInv ! t ! a ! p ! Indic ;
why = icomp.s ! {g = np.a.g ; n = np.a.n}
in why ++ cls
} ;
PrepIP p ip = {
s = p.s ++ ip.s ! p.c
} ;
AdvIP ip adv = {
s = \\c => ip.s ! c ++ adv.s ;
a = ip.a;
hasRef = ip.hasRef
} ;
IdetCN idet cn =
let
n = idet.n ;
g = agrGender cn.g n;
a = aagr g n
in {
s = \\c => idet.s ! g ! (convCase c) ++ cn.s ! n ! Indef ! (convCase c);
a = a;
hasRef = getClit cn.a
} ;
IdetIP idet =
let
g = Masc ;
n = idet.n ;
a = aagr g n
in {
s = \\c => idet.s ! g ! (convCase c) ;
a = a ;
hasRef = True
} ;
IdetQuant idet num =
let
n = num.n ;
in {
s = \\g,c => idet.s ! n ! g ! c ++ num.s ! g ;
n = n
} ;
CompIAdv a = {s = \\_ => a.s} ;
CompIP p = {s = \\_ => p.s ! No} ;
}

View File

@@ -0,0 +1,63 @@
incomplete concrete RelativeRon of Relative =
CatRon ** open Prelude, ResRon in {
flags optimize=all_subs ;
lin
RelCl cl = {
s = \\ag,t,a,p,m => therefore_PConj.s ++ conjThat ++
cl.s ! DDir ! t ! a ! p ! m ;
c = No
} ;
RelVP rp vp = case rp.hasAgr of {
True => {s = \\ag =>
(mkClause
(rp.s ! {g = ag.g ; n = ag.n} ! No) False
{g = rp.a.g ; n = rp.a.n ; p = P3}
vp).s ! DDir ; c = No} ;
False => {s = \\ag =>
(mkClause
(rp.s ! {g = ag.g ; n = ag.n} ! No) False
ag
vp).s ! DDir ; c = No
}
} ;
RelSlash rp slash = {
s = \\ag,t,a,p,m =>
let aag = {g = ag.g ; n = ag.n} --add Clitics in this case also !
in
slash.c2.s ++ slash.c2.prepDir ++ rp.s ! aag ! slash.c2.c ++
slash.s ! aag ! DInv ! t ! a ! p ! m ;
c = No
} ;
FunRP p np rp = let ss = (np.s ! No).comp
in {
s = \\a,c => ss ++ p.s ++ rp.s ! a ! p.c ;
a = {g = np.a.g ; n = np.a.n} ;
hasAgr = True;
hasRef = np.hasRef
} ;
-- Ac => if_then_Str p.isDir (ss ++ p.s ++ rp.s ! a ! p.c) (ss ++ p.s ++ rp.s ! a ! No)
IdRP = {
s = \\ag,c => case c of { Da | Ge => case <ag.g, ag.n > of
{<Fem,Sg> => "careia" ; <Masc,Sg> => "caruia" ;
<_Pl> => "carora"
};
_ => "care"
}
;
a = {g = Masc ; n = Sg} ;
hasAgr = False;
hasRef = True
} ;
}

View File

@@ -1,11 +1,11 @@
--1 Romance auxiliary operations.
--
resource ResRon = ParamX ** open Prelude in {
resource ResRon = ParamX - [Temp,TTAnt,Tense,TPres,TPast,TFut,TCond], PhonoRon ** open Prelude in {
flags optimize=all ;
flags optimize= all ;
flags optimize=all ;
--2 Enumerated parameter types for morphology
--
@@ -26,10 +26,18 @@ param
Animacy = Animate | Inanimate ;
param Size = sg | less20 | pl ;
-- Refl = NoRefl | ARefl | DRefl ;
-- Case = Acc | Dat | Gen ;
Clitics = Normal | Composite | Short | Vocative ;
Size = sg | less20 | pl ;
ParClit = PAcc | PDat ;
VClit = VNone | VOne ParClit | VRefl | VMany ;
PrepDir = Dir ParClit | NoDir ;
-- Adjectives are inflected in number, gender, have specific form for enclitic determined
--article, and specific forms for Nominative-Accusative/Dative-Genitive/Voccative
@@ -42,10 +50,9 @@ param
-- Cardinal numerals have gender, ordinal numerals have full number as well.
ACase = ANomAcc | AGenDat | AVoc ;
Species = Def | Indef ;
Species = Indef | Def ;
NCase = No | Da | Ac | Ge | Vo ;
CardOrd = NCard Gender | NOrd Gender;
@@ -88,7 +95,7 @@ param
-- 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
@@ -97,17 +104,18 @@ param
| VPart Gender Number Species ACase
| VGer
;
-}
TMood =
VPres Mood
| VImperf Mood --# notpresent
| VPasse --# notpresent
| VImperff --# notpresent
| VPasse Mood --# notpresent
| VFut --# notpresent
| VCondit --# notpresent
;
NumPersI = SgP2 | PlP1 | PlP2 ;
VPForm =
VPFinite TMood Anteriority
| VPImperat
@@ -117,7 +125,6 @@ param
RTense =
RPres
| RPast --# notpresent
| RPasse --# notpresent
| RFut --# notpresent
| RCond --# notpresent
;
@@ -127,18 +134,22 @@ param
oper
AAgr : Type = {g : Gender ; n : Number} ;
Agr : Type = AAgr ** {p : Person} ;
RAgr : Type = {s : Clitics => Str} ;
param
RAgr = RAg {g : Gender ; n : Number} | RNoAg ; --- AAgr
oper
-- clitics : Gender -> Number
genForms : Str -> Str -> Gender => Str = \bon,bonne ->
table {
Masc => bon ;
Fem => bonne
} ;
RNoAg : RAgr = genClit "" "" "" "";
aagrForms : (x1,_,_,x4 : Str) -> (AAgr => Str) = \tout,toute,tous,toutes ->
table {
{g = g ; n = Sg} => genForms tout toute ! g ;
@@ -147,19 +158,159 @@ param
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} ;
Compl : Type = {s : Str ; c : NCase ; isDir : PrepDir ; needIndef : Bool ; prepDir : Str} ;
-- complAcc : Compl = {s = [] ; c = Acc ; isDir = True} ;
-- complGen : Compl = {s = [] ; c = Gen ; isDir = True} ;
-- complDat : Compl = {s = [] ; c = Dat ; isDir = True} ;
oper
NounPhrase : Type = {
s : NCase => {comp : Str ;
clit : Clitics => Str} ;
a : Agr ;
indForm : Str ;
hasClit : Bool ;
hasRef : Bool ;
isPronoun : Bool
} ;
Pronoun : Type = {s : NCase => {comp, c1, c2 : Str};
a : Agr ;
poss : Number => Gender => Str
};
heavyNP : {s : NCase => Str ; a : Agr; hasClit : Bool; ss : Str} -> NounPhrase = \np -> {
s = \\c => {comp = np.s ! c ;
clit = \\cs => if_then_Str np.hasClit ((genCliticsCase np.a c).s ! cs) [] };
a = np.a ;
indForm = np.ss ;
hasClit = np.hasClit ;
isPronoun = False;
hasRef = False
} ;
appCompl : Compl -> NounPhrase -> Str = \comp,np ->
comp.s ++ (np.s ! comp.c).comp ;
oper convCase : NCase -> ACase =
\nc -> case nc of
{Da | Ge => AGenDat;
No | Ac => ANomAcc;
_ => AVoc} ;
oper convACase : ACase -> NCase =
\ac -> case ac of
{ANomAcc => No ;
AGenDat => Ge ;
_ => Vo};
--oper genRAgr : (x1,_,x3 : Str) -> RAgr = \ma,m,me -> genClit ma m me ** {hasClit = True};
oper genClit : (x1,_,_,x4 : Str) -> {s : Clitics => Str} = \ma, m, me, mma ->
{s = table {Normal => ma;
Short => m;
Composite => me ;
Vocative => mma
}};
oper genCliticsCase : Agr -> NCase -> {s : Clitics => Str} = \agr, c ->
case c of
{Da => cliticsDa agr.g agr.n agr.p ;
Ac => cliticsAc agr.g agr.n agr.p ;
_ => {s = \\_ => []}
};
oper aRefl : Agr -> RAgr =
\a -> case <a.g,a.n,a.p> of
{<_,_,P3> => {s = (genClit "se" "s-" "se" "").s } ;
_ => {s = (cliticsAc a.g a.n a.p).s }
};
oper dRefl : Agr -> RAgr =
\a -> case <a.g,a.n,a.p> of
{<_,_,P3> => {s = (genClit "îºi" "-ºi" "ºi" "").s } ;
_ => {s = (cliticsDa a.g a.n a.p).s }
};
oper cliticsAc : Gender -> Number -> Person -> {s: Clitics => Str} =
\g,n,p -> case <g,n,p> of
{<_,Sg,P1> => genClit "mã" "m-" "mã" "-mã"; <_,Pl,P1> => genClit "ne" "ne-" "ne" "-ne";
<_,Sg,P2> => genClit "te" "te-" "te" "-te"; <_,Pl,P2> => genClit "vã" "v-" "vã" "-vã";
<Masc,Sg,P3> => genClit "îl" "l-" "-l" "-l"; <Masc,Pl,P3> => genClit "îi" "i-" "-i" "-i";
<Fem,Sg,P3> => genClit "o" "-o" "-o" "-o"; <Fem,Pl,P3> => genClit "le" "le-" "le" "-le"
};
oper cliticsDa : Gender -> Number -> Person -> {s : Clitics => Str} =
\g,n,p -> case <g,n,p> of
{<_,Sg,P1> => genClit "îmi" "mi-" "mi" "-mi"; <_,Pl,P1> => genClit "ne" "ne-" "ni" "-ne";
<_,Sg,P2> => genClit "îþi" "þi-" "þi" "-þi"; <_,Pl,P2> => genClit "vã" "v-" "vi" "-vã";
<_,Sg,P3> => genClit "îi" "i-" "i" "-i"; <_,Pl,P3> => genClit "le" "le-" "li" "-le"
};
oper
VPC : Type = {
-- for conjunctive mood where the negation comes
s : VPForm => {
sa : Str ; -- sa
sv : Agr => Str -- merge
} ;
neg : Polarity => Str ;
clitAc : RAgr ;
clitDa : RAgr ;
clitRe : RAgr ;
nrClit : VClit ;
comp : Agr => Str ; -- content(e) ; à ma mère ; hier
ext : Polarity => Str ; -- que je dors / que je dorme
} ;
-- fix for Refl + Dat
flattenClitics : VClit -> RAgr -> RAgr -> RAgr -> Bool -> Bool -> {s1 : Str ; s2 : Str } =
\vc, clA, clD, clR, isFemSg, b ->
let par = if_then_else Clitics b Short Normal;
pcomb = if_then_else Clitics b Short Composite
in
case isFemSg of
{True => {s1 = clD.s ! par ++ clR.s ! par ; s2 = clA.s ! Short};
_ => case vc of
{VOne PAcc => {s1 = clA.s ! par ; s2 = ""};
VOne PDat => {s1 = clD.s ! par ; s2 = ""};
VRefl => {s1 = clR.s ! par ; s2 = ""};
_ => {s1 = clD.s ! Composite ++ clR.s ! pcomb ++ clA.s ! pcomb ; s2 = ""}
}
};
{-
{<False,_,False,_> => {s1 = clD.s ! par ; s2 = ""};
<False,False,_,_> => {s1 = clR.s ! par ; s2 = ""};
<_,_,_,True> => {s1 = clD.s ! par ++ clR.s ! par ; s2 = clA.s ! Short};
<_,False,False,_> => {s1 = clA.s ! par ; s2 = ""};
_ => {s1 = clD.s ! Composite ++ clR.s ! Composite ++ clA.s ! pcomb ; s2 = ""}
};
-}
flattenSimpleClitics : VClit -> RAgr -> RAgr -> RAgr -> Str =
\vc, clA, clD, clR ->case vc of
{VOne _ => clD.s ! Normal ++ clA.s ! Normal;
_ => clD.s ! Composite ++ clR.s ! Composite ++ clA.s ! Composite
};
-- we rely on the fact that there are not more than 2 clitics for a verb
oper getSize : Size -> Str =
\s -> case s of
{ pl => "de" ;
_ => ""
};
}

View File

@@ -0,0 +1,94 @@
incomplete concrete SentenceRon of Sentence =
CatRon ** open Prelude, ResRon in {
flags optimize=all_subs ;
lin
PredVP np vp = mkClause (np.s ! No).comp np.hasClit np.a vp ;
PredSCVP sc vp = mkClause sc.s False (agrP3 Masc Sg) vp ;
ImpVP vpr = let agSg = {n = Sg ; g = Masc ; p = P2 } ;
agPl = {n = Pl ; g = Masc ; p = P2 } ;
clDirSg = vpr.clDat.s ! Vocative ++ (vpr.isRefl ! agSg).s ! Vocative ++ vpr.clAcc.s ! Vocative ;
clDirPl = vpr.clDat.s ! Vocative ++ (vpr.isRefl ! agPl).s ! Vocative ++ vpr.clAcc.s ! Vocative ;
clNegSg = flattenSimpleClitics vpr.nrClit vpr.clAcc vpr.clDat (vpr.isRefl ! agSg) ;
clNegPl = flattenSimpleClitics vpr.nrClit vpr.clAcc vpr.clDat (vpr.isRefl ! agPl)
in
{
s = \\p,f,g =>
case <p,f> of {
<Pos,ImpF n False> => case n of
{ Sg => vpr.s ! Imper SgP2 ++ vpr.comp ! agSg ++ vpr.ext ! Pos;
_ => vpr.s ! Imper PlP2 ++ vpr.comp ! agPl ++ vpr.ext ! Pos
};
<Pos, ImpF n True> => case n of
{Sg => "sã" ++ clNegSg ++ conjVP vpr agSg ++ vpr.comp ! agSg ++ vpr.ext ! Pos;
Pl => "sã" ++ clNegPl ++ conjVP vpr agPl ++ vpr.comp ! agPl ++ vpr.ext ! Pos
};
<Neg, ImpF n b> => case n of
{Sg => "nu" ++ clNegSg ++ vpr.s ! Inf ++ vpr.comp ! agSg ++ vpr.ext ! Pos;
Pl => "nu" ++ clNegPl ++ vpr.s ! Inf ++ vpr.comp ! agPl ++ vpr.ext ! Pos
}
}
} ;
SlashVP np v2 =
{s = \\ag =>
let
vp = v2
in (mkClause (np.s ! No).comp np.hasClit np.a vp).s ;
c2 = v2.c2
} ;
AdvSlash slash adv = {
s = \\ag,d,t,a,b,m => slash.s ! ag ! d ! t ! a ! b ! m ++ adv.s ;
c2 = slash.c2
} ;
-- potentially overgenerating !! since the complements have a preposition already
SlashPrep cl prep = {
s = \\_ => cl.s ;
c2 = {s = prep.s ; c = prep.c ; isDir = NoDir; needIndef = prep.needIndef; prepDir = ""}
} ;
SlashVS np vs slash =
{s = \\ag =>
(mkClause
(np.s ! No).comp np.hasClit np.a
(insertExtrapos (\\b => conjThat ++ slash.s ! ag ! (vs.m ! b))
(predV vs))
).s ;
c2 = slash.c2
} ;
EmbedS s = {s = conjThat ++ s.s ! Indic} ;
EmbedQS qs = {s = qs.s ! QIndir} ;
-- EmbedVP vp = {s = infVP vp (agrP3 Masc Sg)} ; --- agr ---- compl
UseCl t p cl = {
s = \\o => t.s ++ p.s ++ cl.s ! DDir ! t.t ! t.a ! p.p ! o
} ;
UseQCl t p cl = {
s = \\q => t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p ! q
} ;
UseRCl t p cl = {
s = \\r,ag => t.s ++ p.s ++ cl.s ! ag ! t.t ! t.a ! p.p ! r ;
c = cl.c
} ;
UseSlash t p cl = {
s = \\ag,mo =>
t.s ++ p.s ++ cl.s ! ag ! DDir ! t.t ! t.a ! p.p ! mo ;
c2 = cl.c2
} ;
AdvS a s = {s = \\o => a.s ++ s.s ! o} ;
RelS s r = {
s = \\o => s.s ! o ++ "," ++ r.s ! Indic ! agrP3 Masc Sg
} ;
}

View File

@@ -0,0 +1,300 @@
--# -path=.:../abstract:../romance:../common:prelude
concrete StructuralRon of Structural = CatRon **
open MorphoRon, ParadigmsRon, BeschRon, Prelude,(X = ConstructX) in {
flags optimize=all ;
--coding=utf8 ;
lin
above_Prep = mkPrep "deasupra" Ge ;
after_Prep = mkPrep "după" Ac True;
all_Predet = {
s = \\a => table { AGenDat => aagrForms nonExist nonExist "tuturor" "tuturor" ! a ;
_ => aagrForms "tot" "toată" "toţi" "toate" ! a
};
c = No
} ;
almost_AdA, almost_AdN = ss "aproape" ;
always_AdV = ss "mereu" ;
although_Subj = ss "deşi" ;
and_Conj = {s1 = [] ; s2 = "şi" ; n = Pl} ;
because_Subj = ss "deoarece" ;
before_Prep = mkPrep "înaintea" Ge ;
behind_Prep = mkPrep "înapoia" Ge ;
between_Prep = mkPrep "între" Ac True ;
both7and_DConj = {s1,s2 = "şi" ; n = Pl} ;
but_PConj = ss "dar" ;
by8agent_Prep = mkPrep "de către" Ac True;
by8means_Prep = mkPrep "de" Ac True;
can8know_VV = mkVV (v_besch68 "putea") ;
can_VV = mkVV (v_besch68 "putea") ;
during_Prep = mkPrep "în timpul" Ge ;
either7or_DConj = {s1,s2 = "sau" ; n = Pl} ;
everybody_NP = mkNP "toţi" "tuturor" Pl Masc True; -- form for Fem needed also !
every_Det = mkDet "orice" "orice" "oricărui" "oricărei" "orice" "orice" "oricăruia" "oricăreia" Sg ;
everything_NP = mkNP "totul" nonExist Sg Masc False;
everywhere_Adv = ss "pretutindeni" ;
few_Det = mkDet "câţiva" "câteva" "câtorva" "câtorva" Pl ;
for_Prep = mkPrep "pentru" Ac True;
from_Prep = mkPrep "de la" Ac True;
he_Pron =
mkPronoun
"el" "el" "lui" "lui" [] "său" "sa" "săi" "sale" Masc Sg P3 ;
here7from_Adv = ss "de aici" ;
here7to_Adv = ss "până aici" ;
here_Adv = ss "aici" ;
how_IAdv = ss "cum" ;
how8many_IDet = {s = \\g,c => case <g,c> of
{ <Fem,AGenDat> => "câtor"; <Fem,_> => "câte" ;
<Masc,AGenDat> => "câtor" ; _ => "câţi"
};
n = Pl
} ;
if_Subj = ss "dacă" ;
in8front_Prep = mkPrep "în faţa" Ge ;
i_Pron = mkPronoun "eu" "mine" "mie" [] [] "meu" "mea" "mei" "mele" Masc Sg P1 ;
in_Prep = mkPrep "în" Ac True;
it_Pron =
mkPronoun
"" "el" "lui" "lui" [] "său" "sa" "săi" "sale" Masc Sg P3 ;
less_CAdv = X.mkCAdv "mai puţin" conjThan ;
many_Det = mkDet "mulţi" "multe" "multor" "multor" "mulţi" "multe" "multora" "multora" Pl;
more_CAdv = X.mkCAdv "mai" conjThan ;
most_Predet = {
s = \\a => table { AGenDat => "marii parţi a" ;
ANomAcc => "marea parte a";
AVoc => "mare parte a"
};
c = Ge
};
much_Det = mkDet "mult" "multă" nonExist nonExist Sg ;
must_VV = mkVV (v_besch140 "trebui") ;
no_Utt = ss "nu" ;
on_Prep = mkPrep "pe" Ac True;
only_Predet = {s = \\_,c => "doar" ; c = No} ;
or_Conj = {s1 = [] ; s2 = "sau" ; n = Sg} ;
otherwise_PConj = ss "altfel" ;
part_Prep = mkPrep "din" Ac True;
please_Voc = ss ["vă rog"] ;
possess_Prep = mkPrep "" Ge ; -- required forms for Fem Sg, Masc Pl and Fem Pl - maybe variants
quite_Adv = ss "chiar" ;
she_Pron =
mkPronoun
"ea" "ea" "ei" "ei" [] "său" "sa" "săi" "sale"
Fem Sg P3 ;
so_AdA = ss "aşa" ;
somebody_NP = mkNP "cineva" "cuiva" Sg Masc True;
somePl_Det = mkDet "unii" "unele" "unor" "unor" "unii" "unele" "unora" "unora" Pl ;
someSg_Det = mkDet "nişte" "nişte" "la nişte" "la nişte" Sg ;
something_NP = mkNP "ceva" "a ceva" Sg Masc False;
somewhere_Adv = ss ["undeva"] ; --- ne - pas
that_Quant = {
s = \\_ => table {
Sg => table {Masc => table { AGenDat => "acelui";
_ => "acel"
};
Fem => table {AGenDat => "acelei";
_ => "acea"
}
};
Pl => table { Masc => table {AGenDat => "acelor";
_ => "acei"
};
Fem => table {AGenDat => "acelor";
_ => "acele"
}
}
} ;
sp = table {
Sg => table {Masc => table { AGenDat => "aceluia";
_ => "acela"
};
Fem => table {AGenDat => "aceleia";
_ => "aceea"
}
};
Pl => table {Masc => table {AGenDat => "acelora";
_ => "aceia"
};
Fem => table {AGenDat => "acelora";
_ => "acelea"
}
}
};
isDef = False ; isPost = False ; hasRef = False
};
there7from_Adv = ss ["de acolo"] ;
there7to_Adv = ss "până acolo" ;
there_Adv = ss "acolo" ;
therefore_PConj = ss "astfel" ;
--these_NP = mkNP "aceştia" "acestora" Masc Pl True; --form for Fem needed also !
they_Pron = mkPronoun
"ei" "ei" "lor" "lor" [] "lor" "lor" "lor" "lor"
Masc Pl P3 ;
this_Quant = {
s = \\_ => table {
Sg => table {Masc => table { AGenDat => "acestui";
_ => "acest"
};
Fem => table {AGenDat => "acestei";
_ => "această"
}
};
Pl => table { Masc => table {AGenDat => "acestor";
_ => "aceşti"
};
Fem => table {AGenDat => "acestor";
_ => "aceste"
}
}
} ;
sp = table {
Sg => table {Masc => table { AGenDat => "acestuia";
_ => "acesta"
};
Fem => table {AGenDat => "acesteia";
_ => "aceasta"
}
};
Pl => table {Masc => table {AGenDat => "acestora";
_ => "aceştia"
};
Fem => table {AGenDat => "acestora";
_ => "acestea"
}
}
} ;
isDef = False ; isPost = False ; hasRef = False
};
through_Prep = mkPrep "prin" Ac True;
too_AdA = ss "prea" ;
to_Prep = mkPrep "la" Ac True;
under_Prep = mkPrep "sub" Ac True;
very_AdA = ss "foarte" ;
want_VV = mkVV (v_besch74 "vrea") ;
we_Pron = mkPronoun
"noi" "noi" "nouă" [] [] "nostru" "noastră" "noştri" "noastre"
Masc Pl P1 ;
whatSg_IP =
{s = \\c => case c of
{ Da => "căruia" ;
Ge => "a căruia" ;
_ => "ce" };
a = aagr Masc Sg;
hasRef = False
};
whatPl_IP =
{s = \\c => case c of
{ Da => "cărora" ;
Ge => "a cărora" ;
_ => "ce" };
a = aagr Masc Pl;
hasRef = False
};
when_IAdv = ss "când" ;
when_Subj = ss "când" ;
where_IAdv = ss "unde" ;
which_IQuant = {s = table {
Sg => table {Masc => table { AGenDat => "cărui";
_ => "care"
};
Fem => table {AGenDat => "cărei";
_ => "care"
}
};
Pl => \\g => table {AGenDat => "căror";
_ => "care"
}
};
isDef = False
};
whoPl_IP = {s = \\c => case c of
{ Da => "cui" ;
Ge => "a cui" ;
_ => "cine" };
a = aagr Masc Pl;
hasRef = True
};
whoSg_IP = {s = \\c => case c of
{ Da => "cui" ;
Ge => "a cui" ;
_ => "cine" };
a = aagr Masc Sg;
hasRef = True
};
why_IAdv = ss "de ce" ;
without_Prep = mkPrep "fără" Ac True;
with_Prep = mkPrep "cu" Ac ;
yes_Utt = ss "da" ;
youSg_Pron = mkPronoun
"tu" "tine" "ţie" [] "tu" "tău" "ta" "tăi" "tale"
Masc Sg P2 ;
youPl_Pron, youPol_Pron =
mkPronoun
"voi" "voi" "vouă" [] "voi" "vostru" "voastră" "voştri" "voastre"
Masc Pl P2 ;
not_Predet = {s = \\a,c => "nu" ; c = No} ;
no_Quant =
{
s = \\_ => table {
Sg => table {Masc => table { AGenDat => "niciunui";
_ => "niciun"
};
Fem => table {AGenDat => "niciunei";
_ => "nicio"
}
};
Pl => table { Masc => table {AGenDat => "niciunor";
_ => "niciunii"
};
Fem => table {AGenDat => "niciunor";
_ => "niciunele"
}
}
} ;
sp = table {
Sg => table {Masc => table { AGenDat => "nimănui";
_ => "nimeni"
};
Fem => table {AGenDat => "nimănui";
_ => "nimeni"
}
};
Pl => table {Masc => table {AGenDat => "niciunora";
_ => "niciunii"
};
Fem => table {AGenDat => "niciunora";
_ => "niciunele"
}
}
} ;
isDef = False ; isPost = False ; hasRef = False
};
if_then_Conj = {s1 = "dacă" ; s2 = "atunci" ; n = Sg ; lock_Conj = <>} ;
nobody_NP = mkNP "nimeni" "nimănui" Sg Masc True;
nothing_NP = mkNP "nimic" "nimicului" Sg Masc False;
at_least_AdN = ss "cel puţin" ;
at_most_AdN = ss "cel mult" ;
except_Prep = mkPrep "cu excepţia" Ge ;
as_CAdv = X.mkCAdv "la fel de" "ca" ;
}

367
lib/src/romanian/VerbRon.gf Normal file
View File

@@ -0,0 +1,367 @@
incomplete concrete VerbRon of Verb =
CatRon ** open Prelude, ResRon in {
flags optimize=all_subs ;
lin
UseV = \verb ->
{
s = verb.s ;
isRefl = verb.isRefl;
nrClit = verb.nrClit;
isFemSg = False ;
neg = table {Pos => ""; Neg => "nu"} ;
clAcc = RNoAg ; nrClit = verb.nrClit;
clDat = RNoAg ;
comp = \\a => [] ;
ext = \\p => [] ;
} ;
ComplVV v vp =insertSimpObj (\\a => "sã" ++ (flattenSimpleClitics vp.nrClit vp.clAcc vp.clDat (vp.isRefl ! a)) ++ conjVP vp a ++vp.comp ! a ++ vp.ext ! Pos) (UseV v) ;
ComplVS v s = insertExtrapos (\\b => conjThat ++ s.s ! (v.m ! b)) (predV v) ;
ComplVQ v q = insertExtrapos (\\_ => q.s ! QIndir) (predV v) ;
ComplVA v ap =
insertSimpObj (\\a => ap.s ! AF a.g a.n Indef ANomAcc) (UseV v) ;
SlashV2a verb = {s = verb.s ; isRefl = verb.isRefl; nrClit = verb.nrClit;
isFemSg = False ;
neg = table {Pos => ""; Neg => "nu"} ;
clAcc = RNoAg ;
clDat = RNoAg ;
comp = \\a => [] ;
ext = \\p => [] ;
c2 = verb.c2 ; needAgr = False ; lock_VP = <>};
Slash2V3 v np = let s1 = v.c2.s ++(np.s ! (v.c2.c)).comp ;
ss = if_then_Str np.hasRef (v.c2.prepDir ++ s1) s1;
sir = if_then_Str np.isPronoun "" ss ;
vcDa = if_then_else VClit np.hasRef (nextClit v.nrClit PDat) v.nrClit;
vcAc = if_then_else VClit np.hasRef (nextClit v.nrClit PAcc) v.nrClit
in
case v.c2.isDir of
{Dir PAcc => (insertObje (\\_ => sir) (clitFromNoun np Ac) RNoAg (isAgrFSg np.a) vcAc (UseV v)) ** {needAgr = False ; c2 = v.c3} ;
Dir PDat => (insertObje (\\_ => sir) RNoAg (clitFromNoun np Da) False vcDa (UseV v)) ** {needAgr = False ; c2 = v.c3};
_ => (insertSimpObj (\\_ => ss) (UseV v)) ** {needAgr = False ; c2 = v.c3}
};
Slash3V3 v np = let s1 = v.c3.s ++ (np.s ! (v.c3.c)).comp ;
ss = if_then_Str np.hasRef (v.c3.prepDir ++ s1) s1 ;
sir = if_then_Str np.isPronoun "" ss ;
vcDa = if_then_else VClit np.hasRef (nextClit v.nrClit PDat) v.nrClit;
vcAc = if_then_else VClit np.hasRef (nextClit v.nrClit PAcc) v.nrClit
in
case v.c3.isDir of
{Dir PAcc => (insertObje (\\_ => sir) (clitFromNoun np Ac) RNoAg (isAgrFSg np.a) vcAc (UseV v)) ** {needAgr = False ; c2 = v.c2} ;
Dir PDat => (insertObje (\\_ => sir) RNoAg (clitFromNoun np Da) False vcDa (UseV v)) ** {needAgr = False ; c2 = v.c2} ;
_ => (insertSimpObj (\\_ => ss) (UseV v)) ** {needAgr = False ; c2 = v.c2}
};
-- needs fixing - agreement for the added verb must be made accordingly to what we add in ComplSlash !!!
-- fixed with extra parameter !
SlashV2V v vp = (insertSimpObj (\\a => "sã" ++ (flattenSimpleClitics vp.nrClit vp.clAcc vp.clDat (vp.isRefl ! a)) ++ conjVP vp a ++ vp.comp ! a ++ vp.ext ! Pos) (UseV v)) ** {needAgr = True ;c2 = v.c2} ;
SlashV2S v s = (insertExtrapos (\\b => conjThat ++ s.s ! Indic) (UseV v)) ** {needAgr = False; c2 = v.c2};
SlashV2Q v q = (insertExtrapos (\\_ => q.s ! QIndir) (UseV v)) ** {needAgr = False ; c2 = v.c2 } ;
-- more usually the adverbial form is used, hence no agreement
SlashV2A v ap =
(insertSimpObj (\\a => v.c3.s ++ ap.s ! (AF Masc Sg Indef (convCase v.c3.c)))
(UseV v)) ** {needAgr = False ;c2 = v.c2} ;
ComplSlash vp np = let s1 = vp.c2.s ++(np.s ! (vp.c2.c)).comp ;
ss = if_then_Str np.hasRef (vp.c2.prepDir ++ s1) s1 ;
sir = if_then_Str np.isPronoun "" ss ;
vcDa = if_then_else VClit np.hasRef (nextClit vp.nrClit PDat) vp.nrClit;
vcAc = if_then_else VClit np.hasRef (nextClit vp.nrClit PAcc) vp.nrClit;
vpp = case vp.c2.isDir of
{Dir PAcc => insertObje (\\_ => sir) (clitFromNoun np Ac) RNoAg (isAgrFSg np.a) vcAc vp ;
Dir PDat => insertObje (\\_ => sir) RNoAg (clitFromNoun np Da) False vcDa vp;
_ => insertSimpObj (\\_ => ss) vp
}
in
{isRefl = vpp.isRefl;
s = vpp.s ; isFemSg = vpp.isFemSg ;
nrClit = vpp.nrClit; clAcc = vpp.clAcc ;
clDat = vpp.clDat ; neg = vpp.neg ;
comp = case vp.needAgr of
{True => \\a => vpp.comp ! (np.a);
_ => \\a => vpp.comp ! a
};
ext = vpp.ext ;
lock_VP = <> };
--add reflexive clitics
ReflVP v = {isRefl = case v.c2.c of
{Da => \\a => dRefl a;
_ => \\a => aRefl a
};
s = v.s ; isFemSg = v.isFemSg ;
nrClit = case v.nrClit of
{VNone => VRefl;
_ => VMany };
clAcc = v.clAcc ;
clDat = v.clDat ;
neg = v.neg ;
comp = v.comp ;
ext = v.ext ;
lock_VP = <>
};
SlashVV v vp =
insertObjc (\\a => "sã" ++ (flattenSimpleClitics vp.nrClit vp.clAcc vp.clDat (vp.isRefl ! a)) ++ conjVP vp a ++ vp.comp ! a ++ vp.ext ! Pos) ((UseV v) **{c2=vp.c2; needAgr= vp.needAgr ; lock_VPSlash = <>}) ;
{-
SlashV2VNP v np vp = let s1 = v.c2.s ++(np.s ! (v.c2.c)).comp ;
ss = if_then_Str np.hasRef (v.c2.prepDir ++ s1) s1;
sir = if_then_Str np.isPronoun "" ss ;
vcDa = if_then_else VClit np.hasRef (nextClit v.nrClit PDat) v.nrClit;
vcAc = if_then_else VClit np.hasRef (nextClit v.nrClit PAcc) v.nrClit ;
vcomp = (getConjComp vp np.a).s
in
case v.c2.isDir of
{Dir PAcc => (insertObje (\\a => sir ++ vcomp ! a) (clitFromNoun np Ac) RNoAg (isAgrFSg np.a) vcAc (UseV v)) ** {needAgr = vp.needAgr ; c2 = vp.c2} ;
Dir PDat => (insertObje (\\a => sir ++ vcomp ! a) RNoAg (clitFromNoun np Da) False vcDa (UseV v)) ** {needAgr = vp.needAgr ; c2 = vp.c2};
_ => (insertSimpObj (\\a => ss ++ vcomp ! a) (UseV v)) ** {needAgr = vp.needAgr ; c2 = vp.c2}
};
-}
UseComp comp = insertSimpObj comp.s (UseV copula) ;
CompAP ap = {s = \\ag => ap.s ! AF ag.g ag.n Indef ANomAcc} ;
CompNP np = {s = \\_ => (np.s ! No).comp} ;
CompAdv a = {s = \\_ => a.s} ;
AdvVP vp adv = insertAdv adv.s vp ;
AdVVP adv vp = insertAdv adv.s vp ;
PassV2 v = insertSimpObj (\\a => v.s ! PPasse a.g a.n Indef ANomAcc) (UseV auxPassive) ;
oper conjVP : VP -> Agr -> Str = \vp,agr ->
let
inf = vp.s ! Subjo SPres agr.n agr.p ;
neg = vp.neg ! Pos ;
in
neg ++ inf ;
insertAdv : Str -> VP -> VP = \co,vp -> {
s = vp.s ;
isRefl = vp.isRefl;
isFemSg = vp.isFemSg ;
clAcc = vp.clAcc ; nrClit = vp.nrClit ;
clDat = vp.clDat ;
neg = vp.neg ;
comp = \\a => vp.comp ! a ++ co ;
ext = vp.ext ;
lock_VP = <>
} ;
oper copula : V =
let t = table {Inf => "fi" ;
Indi Presn Sg P1 => "sunt" ; Indi Presn Sg P2 => "eºti" ; Indi Presn Sg P3 => "este" ;
Indi Presn Pl P1 => "suntem" ; Indi Presn Pl P2 => "sunteþi" ; Indi Presn Pl P3 => "sunt" ;
Indi PSimple Sg P1 => "fusei" ; Indi PSimple Sg P2 => "fuseºi" ; Indi PSimple Sg P3 => "fuse" ;
Indi PSimple Pl P1 => "fuserãm" ; Indi PSimple Pl P2 => "fuserãþi" ; Indi PSimple Pl P3 => "fuserã" ;
Indi Imparf Sg P1 => "eram" ; Indi Imparf Sg P2 => "erai" ; Indi Imparf Sg P3 => "era" ;
Indi Imparf Pl P1 => "eram" ; Indi Imparf Pl P2 => "eraþi" ; Indi Imparf Pl P3 => "erau" ;
Indi PPerfect Sg P1 => "fusesem" ; Indi PPerfect Sg P2 => "fuseseºi" ; Indi PPerfect Sg P3 => "fusese" ;
Indi PPerfect Pl P1 => "fusesem" ; Indi PPerfect Pl P2 => "fuseseþi" ; Indi PPerfect Pl P3 => "fuseserã" ;
Subjo SPres Sg P1 => "fiu" ; Subjo SPres Sg P2 => "fii" ; Subjo SPres Sg P3 => "fie" ;
Subjo SPres Pl P1 => "fim" ; Subjo SPres Pl P2 => "fiþi" ; Subjo SPres Pl P3 => "fie" ;
Imper SgP2 => "fii" ; Imper PlP2 => "fiþi" ; Imper PlP1 => "fim" ;
Ger => "fiind";
PPasse g n a d => (mkAdjReg "fost"). s ! (AF g n a d)
} in
{s = t; isRefl = \\_ => RNoAg; nrClit = VNone ; lock_V = <>} ;
predV : V -> VP = \verb ->
{
s = verb.s ;
isRefl = verb.isRefl;
isFemSg = False ;
nrClit = verb.nrClit ;
neg = table {Pos => ""; Neg => "nu"} ;
clAcc = RNoAg ;
clDat = RNoAg ;
comp = \\a => [] ;
ext = \\p => [] ; lock_VP = <>
} ;
useVP : VP -> VPC = \vp ->
let
verb = vp.s ;
vinf : Bool -> Str = \b -> verb ! Inf ;
vger = verb ! Ger ;
vimp : Agr -> Str = \a -> case <a.n,a.p> of
{<Sg,P2> => verb ! Imper SgP2 ;
<Pl,P2> => verb ! Imper PlP2 ;
_ => verb ! Subjo SPres a.n a.p
} ;
vf : Str -> (Agr -> Str) -> {
sa : Str ;
sv : Agr => Str
} =
\fin,inf -> {
sa = fin ;
sv = \\a => inf a
} ;
in {
s = table {
VPFinite tm Simul => case tm of
{VPres Indic => vf "" (\a -> verb ! Indi Presn a.n a.p) ;
VPres Conjunct => vf "sã" (\a -> verb ! Subjo SPres a.n a.p) ;
VImperff => vf "" (\a -> verb ! Indi Imparf a.n a.p) ;
VPasse Indic => vf "" (\a -> pComp ! a.n ! a.p ++ verb ! PPasse Masc Sg Indef ANomAcc) ;
VPasse Conjunct => vf "sã" (\a -> copula.s! Inf ++ verb ! PPasse Masc Sg Indef ANomAcc) ;
VFut => vf "" (\a -> pFut ! a.n ! a.p ++ verb ! Inf) ;
VCondit => vf "" (\a -> pCond ! a.n ! a.p ++ verb ! Inf)
} ;
VPFinite tm Anter => case tm of
{VPres Indic => vf "" (\a -> pComp ! a.n ! a.p ++ verb ! PPasse Masc Sg Indef ANomAcc) ;
(VPres Conjunct | VPasse Conjunct) => vf "sã" (\a -> copula.s! Inf ++ verb ! PPasse Masc Sg Indef ANomAcc) ;
VFut => vf "" (\a -> pFut !a.n ! a.p ++ copula.s! Inf ++ verb ! PPasse Masc Sg Indef ANomAcc) ;
VCondit => vf "" (\a -> pCond ! a.n ! a.p ++ copula.s ! Inf ++ verb ! PPasse Masc Sg Indef ANomAcc);
_ => vf "" (\a -> verb ! Indi PPerfect a.n a.p)
};
VPInfinit Anter b=> vf "a" (\a -> copula.s ! Inf ++ verb ! PPasse Masc Sg Indef ANomAcc);
VPImperat => vf "sã" (\a -> verb ! Subjo SPres a.n a.p) ; -- fix it later !
VPGerund => vf "" (\a -> vger) ;
VPInfinit Simul b => vf "a" (\a -> verb ! Inf)
} ;
agr = vp.agr ;
neg = vp.neg ;
clitAc = vp.clAcc ;
clitDa = vp.clDat ;
clitRe = RNoAg ;
nrClit = vp.nrClit ;
comp = vp.comp ;
ext = vp.ext
} ;
mkClause : Str -> Bool -> Agr -> VP ->
{s : Direct => RTense => Anteriority => Polarity => Mood => Str} =
\subj,hasClit,agr,vpr -> {
s = \\d,t,a,b,m =>
let
tm = case t of {
RPast => VPasse m ;
RFut => VFut ;
RCond => VCondit ;
RPres => VPres m
} ;
cmp = case <t,a,m> of
{<RPast,Simul,Indic> | <RPres, Anter,Indic> => True ;
<RCond, _, _> => True;
_ => False
} ;
vp = useVP vpr ;
vps = (vp.s ! VPFinite tm a).sv ;
sa = (vp.s ! VPFinite tm a ).sa ;
verb = vps ! agr ;
neg = vp.neg ! b ;
clpr = flattenClitics vpr.nrClit vpr.clAcc vpr.clDat (vpr.isRefl ! agr) (andB vpr.isFemSg cmp) cmp;
compl = vp.comp ! agr ++ vp.ext ! b
in
case d of {
DDir =>
subj ++ sa ++ neg ++ clpr.s1 ++ verb ++ clpr.s2;
DInv =>
sa ++ neg ++ clpr.s1 ++verb ++ clpr.s2 ++subj
}
++ compl
} ;
oper auxPassive = copula ;
mkVPSlash : Compl -> VP -> VP ** {c2 : Compl} = \c,vp -> vp ** {c2 = c; needAgr = False} ;
insertObje : (Agr => Str) -> RAgr -> RAgr -> Bool -> VClit -> VP -> VP = \obj,clA, clD, agg, vc, vp -> {
s = vp.s ; isRefl = vp.isRefl;
isFemSg= orB agg vp.isFemSg ;
nrClit = vc;
neg = table {Pos => ""; Neg => "nu"} ;
clAcc = {s = \\cs => vp.clAcc.s ! cs ++ clA.s ! cs };
clDat = {s = \\cs => vp.clDat.s ! cs ++ clD.s ! cs };
comp = \\a => vp.comp ! a ++ obj ! a ;
ext = vp.ext ; lock_VP = <>
};
insertSimpObj : (Agr => Str) -> VP -> VP = \obj,vp -> {
s = vp.s ; isRefl = vp.isRefl; isFemSg = vp.isFemSg ; neg = vp.neg ;
clAcc = vp.clAcc ; clDat = vp.clDat ;
nrClit = vp.nrClit ;
comp = \\a => vp.comp ! a ++ obj ! a ;
ext = vp.ext ; lock_VP = <>
};
insertObjc : (Agr => Str) -> VPSlash -> VPSlash = \obj,vp ->
insertSimpObj obj vp ** {c2 = vp.c2; needAgr = False ; lock_VPSlash = <>} ;
insertExtrapos : (Polarity => Str) -> VP -> VP = \co,vp -> {
s = vp.s ;
isFemSg = vp.isFemSg ;
clAcc = vp.clAcc ; isRefl = vp.isRefl;
clDat = vp.clDat ;
neg = vp.neg ;
comp = vp.comp ; nrClit = vp.nrClit ;
ext = \\p => vp.ext ! p ++ co ! p ;
lock_VP =<>
} ;
clitFromNoun : NP -> NCase -> RAgr = \np,nc ->
{s = (np.s ! nc).clit; hasClit = True};
isAgrFSg : Agr -> Bool = \ag ->
case <ag.n,ag.g,ag.p> of
{<Sg,Fem,P3> => True ;
_ => False
};
getConjComp : VP -> Agr -> {s: Agr => Str} = \vp,ag ->
{s = \\a => "sã" ++ (flattenSimpleClitics vp.nrClit vp.clAcc vp.clDat (vp.isRefl ! a)) ++ conjVP vp ag ++ vp.comp ! a ++ vp.ext ! Pos};
oper nextClit : VClit -> ParClit -> VClit = \vc,pc ->
case vc of
{ VNone => VOne pc;
_ => VMany
};
-- discuss example
-- l -table (ComplSlash (Slash3V3 sell_V3 (UsePN john_PN)) (UsePN paris_PN))
-- in English the direct object always comes first, which could lead to incorrect longer examples
-- while in French it always comes last
-- ?!?
};