Merge remote-tracking branch 'upstream/master'

This commit is contained in:
Herbert Lange
2019-06-03 13:40:27 +02:00
104 changed files with 81563 additions and 5378 deletions

BIN
doc/rgl-tutorial/Syntax.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 143 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

BIN
doc/rgl-tutorial/arav.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
doc/rgl-tutorial/engdut.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

BIN
doc/rgl-tutorial/hindi.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 KiB

3209
doc/rgl-tutorial/index.t2t Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

BIN
doc/rgl-tutorial/parse.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 254 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

View File

@@ -41,8 +41,8 @@ abstract functions and their Universal Dependency labels
- [Minibar http://cloud.grammaticalframework.org/minibar/minibar.html]: - [Minibar http://cloud.grammaticalframework.org/minibar/minibar.html]:
find resource grammar expressions by parsing (select Grammar: LibraryBrowser) find resource grammar expressions by parsing (select Grammar: LibraryBrowser)
or test translations between all languages (select Grammar: ResourceDemo) or test translations between all languages (select Grammar: ResourceDemo)
- [Resource Grammar Tutorial http://www.grammaticalframework.org/doc/gf-lrec-2010.pdf] - [Resource Grammar Tutorial http://www.grammaticalframework.org/lib/doc/rgl-tutorial/index.html],
as presented in LREC-2010. as previously presented in LREC-2010.
- Paper "The GF Resource Grammar Library" by A. Ranta - Paper "The GF Resource Grammar Library" by A. Ranta
(//Linguistic Issues in Language Technology//, 2 (2), 2009). An overview of (//Linguistic Issues in Language Technology//, 2 (2), 2009). An overview of
the library with linguistic motivations. the library with linguistic motivations.

View File

@@ -22,7 +22,7 @@ Ice,Icelandic,icelandic,,,,,,n,,y
Ina,Interlingua,interlingua,,,y,,n,n,,n Ina,Interlingua,interlingua,,,y,,n,n,,n
Ita,Italian,italian,Romance,,y,,,,y,y Ita,Italian,italian,Romance,,y,,,,y,y
Jpn,Japanese,japanese,,,,,,,,y Jpn,Japanese,japanese,,,,,,,,y
Lat,Latin,latin,,,y,,n,n,,n Lat,Latin,latin,,,,,y,n,n,y
Lav,Latvian,latvian,,,,,,,y,y Lav,Latvian,latvian,,,,,,,y,y
Mlt,Maltese,maltese,,,,,,,,y Mlt,Maltese,maltese,,,,,,,,y
Mon,Mongolian,mongolian,,,,,,n,,y Mon,Mongolian,mongolian,,,,,,n,,y
1 Code Name Directory Functor Unlexer Present All Try Symbolic Compatibility Synopsis
22 Ina Interlingua interlingua y n n n
23 Ita Italian italian Romance y y y
24 Jpn Japanese japanese y
25 Lat Latin latin y n y n n n y
26 Lav Latvian latvian y y
27 Mlt Maltese maltese y
28 Mon Mongolian mongolian n y

View File

@@ -117,6 +117,7 @@ abstract Extend = Cat ** {
-- generalisation of existential, with adverb as a parameter -- generalisation of existential, with adverb as a parameter
AdvIsNP : Adv -> NP -> Cl ; -- here is the tree / here are the trees AdvIsNP : Adv -> NP -> Cl ; -- here is the tree / here are the trees
AdvIsNPAP : Adv -> NP -> AP -> Cl ; -- here are the instructions documented
-- infinitive for purpose AR 21/8/2013 -- infinitive for purpose AR 21/8/2013
@@ -144,6 +145,16 @@ abstract Extend = Cat ** {
AdjAsCN : AP -> CN ; -- a green one ; en grön (Swe) AdjAsCN : AP -> CN ; -- a green one ; en grön (Swe)
AdjAsNP : AP -> NP ; -- green (is good) AdjAsNP : AP -> NP ; -- green (is good)
-- infinitive complement for IAdv
PredIAdvVP : IAdv -> VP -> QCl ; -- how to walk?
-- alternative to EmbedQS. For English, EmbedQS happens to work,
-- because "what" introduces question and relative. The default linearization
-- could be e.g. "the thing we did (was fun)".
EmbedSSlash : SSlash -> SC ; -- what we did (was fun)
-- reflexive noun phrases: a generalization of Verb.ReflVP, which covers just reflexive pronouns -- reflexive noun phrases: a generalization of Verb.ReflVP, which covers just reflexive pronouns
-- This is necessary in languages like Swedish, which have special reflexive possessives. -- This is necessary in languages like Swedish, which have special reflexive possessives.
-- However, it is also needed in application grammars that want to treat "brush one's teeth" as a one-place predicate. -- However, it is also needed in application grammars that want to treat "brush one's teeth" as a one-place predicate.
@@ -211,6 +222,8 @@ abstract Extend = Cat ** {
UseComp_estar : Comp -> VP ; -- (Cat, Spa, Por) "está cheio" instead of "é cheio" UseComp_estar : Comp -> VP ; -- (Cat, Spa, Por) "está cheio" instead of "é cheio"
SubjRelNP : NP -> RS -> NP ; -- Force RS in subjunctive: lo que les *resulte* mejor
iFem_Pron : Pron ; -- I (Fem) iFem_Pron : Pron ; -- I (Fem)
youFem_Pron : Pron ; -- you (Fem) youFem_Pron : Pron ; -- you (Fem)
weFem_Pron : Pron ; -- we (Fem) weFem_Pron : Pron ; -- we (Fem)

View File

@@ -1,3 +1,3 @@
--# -path=.:../latin:../common:../abstract:../prelude --# -path=.:../latin:../common:../abstract:../prelude
resource TryLat = SyntaxLat, LexiconLat, ParadigmsLat - [mkAdv,mkAdN,mkOrd] ; resource TryLat = SyntaxLat, LexiconLat, ParadigmsLat - [mkAdv,mkAdN,mkOrd,mkNum] ;

View File

@@ -6,6 +6,7 @@ lincat
[S] = {s1,s2 : Order => Str} ; [S] = {s1,s2 : Order => Str} ;
[Adv] = {s1,s2 : Str} ; [Adv] = {s1,s2 : Str} ;
[NP] = {s1,s2 : Case => Str ; a : Agr ; empty : Str; isHeavy : Bool} ; [NP] = {s1,s2 : Case => Str ; a : Agr ; empty : Str; isHeavy : Bool} ;
[CN] = {s1,s2 : NTable ; g : Gender ; h : Species ; isDual : Bool ; np : Case => Str ; isHeavy : Bool} ;
[AP] = {s1,s2 : Species => Gender => Number => State => Case => Str} ; [AP] = {s1,s2 : Species => Gender => Number => State => Case => Str} ;
lin lin
@@ -34,8 +35,17 @@ lin
ConsAP = consrTable5 Species Gender Number State Case comma ; ConsAP = consrTable5 Species Gender Number State Case comma ;
ConjAP = conjunctDistrTable5 Species Gender Number State Case ; ConjAP = conjunctDistrTable5 Species Gender Number State Case ;
BaseCN cn1 cn2 = leanCN cn1 ** twoTable3 Number State Case (leanCN cn1) (leanCN cn2) ;
ConsCN cn cns = leanCN cn ** consrTable3 Number State Case comma (leanCN cn) cns ;
ConjCN conj cns = cns ** conjunctDistrTable3 Number State Case conj cns ;
oper oper
leanCN : CN -> CN = \cn -> cn ** {
np = \\_ => [] ;
s = \\n,s,c => cn2str cn n s c
} ;
conjAgr : Agr -> Agr -> Agr = \a,b -> { conjAgr : Agr -> Agr -> Agr = \a,b -> {
isPron = False ; isPron = False ;
pgn = let gnA = pgn2gn a.pgn ; gnB = pgn2gn b.pgn in pgn = let gnA = pgn2gn a.pgn ; gnB = pgn2gn b.pgn in

View File

@@ -5,7 +5,8 @@ concrete ExtendAra of Extend =
GenNP, ApposNP, ICompAP, DetNPMasc, DetNPFem, GenNP, ApposNP, ICompAP, DetNPMasc, DetNPFem,
EmptyRelSlash, PredAPVP, EmptyRelSlash, PredAPVP,
ComplDirectVS, ComplDirectVQ, -- because of Utt ComplDirectVS, ComplDirectVQ, -- because of Utt
VPS, MkVPS, PredVPS, BaseVPS, ConsVPS, ConjVPS VPS, MkVPS, PredVPS, BaseVPS, ConsVPS, ConjVPS,
EmbedSSlash, AdjAsNP
] ]
with (Grammar=GrammarAra) with (Grammar=GrammarAra)
** open ** open
@@ -42,10 +43,22 @@ lin
DetNPMasc det = emptyNP ** {s = det.s ! NoHum ! Masc} ; DetNPMasc det = emptyNP ** {s = det.s ! NoHum ! Masc} ;
DetNPFem det = emptyNP ** {s = det.s ! NoHum ! Fem} ; DetNPFem det = emptyNP ** {s = det.s ! NoHum ! Fem} ;
-- : AP -> NP
AdjAsNP ap =
let adjAsN : Noun = {
s = ap.s ! NoHum ! Masc ;
s2 = emptyNTable ;
g = Masc ;
h = NoHum ;
isDual = False } ;
in MassNP (UseN adjAsN) ;
-- : ClSlash -> RCl -- he lives in -- : ClSlash -> RCl -- he lives in
EmptyRelSlash = RelSlash (IdRP ** {s = \\_ => []}) ; EmptyRelSlash = RelSlash (IdRP ** {s = \\_ => []}) ;
-- : SSlash -> SC
EmbedSSlash = Grammar.EmbedS ;
lincat lincat
VPS = {s : PerGenNum => Str} ; -- finite VP's with tense and polarity VPS = {s : PerGenNum => Str} ; -- finite VP's with tense and polarity
[VPS] = {s1,s2 : PerGenNum => Str} ; [VPS] = {s1,s2 : PerGenNum => Str} ;

View File

@@ -577,8 +577,9 @@ oper
predVP : NP -> VP -> Cl = \np,vp -> { predVP : NP -> VP -> Cl = \np,vp -> {
s = \\t,p,o => s = \\t,p,o =>
let pgn = let pgn =
case <o,np.a.isPron> of { case <o,vp.vtype,np.a.isPron> of {
<Verbal, False> => verbalAgr np.a.pgn; <Verbal, Copula, False> => np.a.pgn;
<Verbal, _, False> => verbalAgr np.a.pgn;
_ => np.a.pgn _ => np.a.pgn
}; };

View File

@@ -42,7 +42,7 @@ concrete SentenceAra of Sentence = CatAra ** open
-- SlashVS np vs sslash = TODO -- SlashVS np vs sslash = TODO
EmbedS s = {s = "أَنْ" ++ s.s ! Verbal} ; EmbedS s = {s = "مَا" ++ s.s ! Verbal} ;
EmbedQS qs = {s = qs.s ! QIndir} ; EmbedQS qs = {s = qs.s ! QIndir} ;
EmbedVP vp = {s = uttVP VPPerf vp ! Masc} ; -- TODO: use VPGer once it's more stable EmbedVP vp = {s = uttVP VPPerf vp ! Masc} ; -- TODO: use VPGer once it's more stable

File diff suppressed because it is too large Load Diff

View File

@@ -201,7 +201,7 @@ oper
haver_V, auxPassive : Verb = verbBeschH (estar_54 "estar") ; haver_V, auxPassive : Verb = verbBeschH (estar_54 "estar") ;
essere_V, copula = verbBeschH (ser_52 "ser") ; essere_V, copula = verbBeschH (ser_52 "ser" True) ;
stare_V, estar_V = verbBeschH (estar_54 "estar") ; stare_V, estar_V = verbBeschH (estar_54 "estar") ;
verbBeschH : Verbum -> Verb = \v -> verbBesch v ** {vtyp = VHabere ; p = []} ; verbBeschH : Verbum -> Verb = \v -> verbBesch v ** {vtyp = VHabere ; p = []} ;

View File

@@ -82,6 +82,6 @@ lin
} ; } ;
ExistsNP np = ExistsNP np =
mkClause [] True False np.a (insertComplement (\\_ => (np.s ! Nom).ton) (predV (mkV (complir_25 "existir")))) ; mkClause [] True False np.a (insertComplement (\\_ => (np.s ! Nom).ton) (predV (mkV (complir_25 "existir" True)))) ;
} }

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,7 @@
--# -path=.:../romance:../common:../abstract:../../prelude --# -path=.:../romance:../common:../abstract:../../prelude
concrete LexiconCat of Lexicon = CatCat ** open concrete LexiconCat of Lexicon = CatCat ** open
(M=MorphoCat), ParadigmsCat, BeschCat, (D = DiffCat) in { Prelude, (M=MorphoCat), ParadigmsCat, BeschCat, (D = DiffCat) in {
flags flags
coding=utf8 ; coding=utf8 ;
@@ -16,7 +16,7 @@ oper
lin lin
airplane_N = regMN "avió" ; airplane_N = regMN "avió" ;
answer_V2S = mkV2S (verbV (compondre_26 "respondre")) dative ; answer_V2S = mkV2S (verbV (compondre_26 "respondre" True)) dative ;
apartment_N = regMN "pis" ; apartment_N = regMN "pis" ;
apple_N = regFN "poma" ; apple_N = regFN "poma" ;
art_N = regMN "art" ; art_N = regMN "art" ;
@@ -61,7 +61,7 @@ lin
close_V2 = dirV2 (verbV (trencar_112 "tancar")) ; close_V2 = dirV2 (verbV (trencar_112 "tancar")) ;
coat_N = regMN "abric" ; coat_N = regMN "abric" ;
cold_A = regADeg "fred" ; cold_A = regADeg "fred" ;
come_V = verbV (venir_117 "venir") ; come_V = verbV (venir_117 "venir" True) ;
computer_N = regMN "ordinador" ; computer_N = regMN "ordinador" ;
country_N = mkN "país" "països" masculine ; country_N = mkN "país" "països" masculine ;
cousin_N = regMN "cosí" ; cousin_N = regMN "cosí" ;
@@ -93,7 +93,7 @@ lin
glove_N = regMN "guant" ; glove_N = regMN "guant" ;
gold_N = regMN "or" ; gold_N = regMN "or" ;
good_A = mkA (prefA "bo" "bon") (mkA "millor") ; good_A = mkA (prefA "bo" "bon") (mkA "millor") ;
go_V = (verbV (anar_4 "anar")) ; go_V = (verbV (anar_4 "anar" 0)) ;
green_A = regADeg "verd" ; green_A = regADeg "verd" ;
harbour_N = regMN "port" ; harbour_N = regMN "port" ;
hate_V2 = dirV2 (verbV (canviar_16 "odiar")) ; hate_V2 = dirV2 (verbV (canviar_16 "odiar")) ;
@@ -159,14 +159,14 @@ lin
rock_N = regFN "roca" ; rock_N = regFN "roca" ;
roof_N = regFN "teulada" ; roof_N = regFN "teulada" ;
rubber_N = regFN "goma" ; rubber_N = regFN "goma" ;
run_V = verbV (córrer_30 "córrer") ; run_V = verbV (córrer_30 "córrer" True) ;
say_VS = mkVS (verbV (dir_41 "dir")) ; say_VS = mkVS (verbV (dir_41 "dir")) ;
school_N = regFN "escola" ; school_N = regFN "escola" ;
science_N = regFN "ciència" ; science_N = regFN "ciència" ;
sea_N = regMN "mar" ; -- masc & fem sea_N = regMN "mar" ; -- masc & fem
seek_V2 = dirV2 (verbV (trencar_112 "buscar")) ; seek_V2 = dirV2 (verbV (trencar_112 "buscar")) ;
see_V2 = dirV2 (verbV (veure_118 "veure")) ; see_V2 = dirV2 (verbV (veure_118 "veure" 0)) ;
sell_V3 = dirV3 (verbV (vendre_116 "vendre")) dative ; sell_V3 = dirV3 (verbV (vendre_116 "vendre" True)) dative ;
send_V3 = dirV3 (verbV (canviar_16 "enviar")) dative ; send_V3 = dirV3 (verbV (canviar_16 "enviar")) dative ;
sheep_N = regFN "ovella" ; -- xai sheep_N = regFN "ovella" ; -- xai
ship_N = regMN "vaixell" ; ship_N = regMN "vaixell" ;
@@ -218,7 +218,7 @@ lin
woman_N = regFN "dona" ; woman_N = regFN "dona" ;
wonder_VQ = mkVQ (reflV (mkV "preguntar")) ; wonder_VQ = mkVQ (reflV (mkV "preguntar")) ;
wood_N = regFN "fusta" ; wood_N = regFN "fusta" ;
write_V2 = dirV2 (verbV (escriure_50 "escriure")) ; write_V2 = dirV2 (verbV (escriure_50 "escriure" True)) ;
yellow_A = compADeg (mkA "groc" "groga" "grocs" "grogues" "grogament") ; yellow_A = compADeg (mkA "groc" "groga" "grocs" "grogues" "grogament") ;
young_A = compADeg (mkA "jove" "jove" "joves" "joves" "jovement") ; young_A = compADeg (mkA "jove" "jove" "joves" "joves" "jovement") ;
do_V2 = dirV2 (verbV (fer_56 "fer")) ; do_V2 = dirV2 (verbV (fer_56 "fer")) ;
@@ -319,16 +319,16 @@ lin
fear_V2 = dirV2 (verbV (témer_107 "témer")) ; fear_V2 = dirV2 (verbV (témer_107 "témer")) ;
fight_V2 = dirV2 (mkV "lluitar") ; fight_V2 = dirV2 (mkV "lluitar") ;
float_V = mkV "surar" ; float_V = mkV "surar" ;
flow_V = verbV (reduir_94 "fluir") ; -- also: mkV "circular" flow_V = verbV (reduir_94 "fluir" True) ; -- also: mkV "circular"
fly_V = mkV "volar" ; fly_V = mkV "volar" ;
freeze_V = mkV "congelar" ; freeze_V = mkV "congelar" ;
give_V3 = dirdirV3 (verbV (donar_43 "donar")) ; give_V3 = dirdirV3 (verbV (donar_43 "donar" True)) ;
hit_V2 = dirV2 (verbV (trencar_112 "picar")) ; hit_V2 = dirV2 (verbV (trencar_112 "picar")) ;
hold_V2 = dirV2 (verbV (obtenir_78 "sostenir")) ; hold_V2 = dirV2 (verbV (obtenir_78 "sostenir" True)) ;
hunt_V2 = dirV2 (verbV (començar_22 "caçar")) ; hunt_V2 = dirV2 (verbV (començar_22 "caçar")) ;
kill_V2 = dirV2 (mkV "matar") ; kill_V2 = dirV2 (mkV "matar") ;
laugh_V = verbV (riure_96 "riure") ; laugh_V = verbV (riure_96 "riure") ;
lie_V = reflV (verbV (jeure_62 "jeure")) ; lie_V = reflV (verbV (jeure_62 "jeure" True)) ;
play_V = verbV (pregar_86 "jugar") ; play_V = verbV (pregar_86 "jugar") ;
pull_V2 = dirV2 (mkV "tibar") ; pull_V2 = dirV2 (mkV "tibar") ;
push_V2 = dirV2 (verbV (atènyer_59 "empènyer")) ; push_V2 = dirV2 (verbV (atènyer_59 "empènyer")) ;
@@ -336,7 +336,7 @@ lin
scratch_V2 = dirV2 (mkV "gratar") ; scratch_V2 = dirV2 (mkV "gratar") ;
sew_V = verbV (cosir_31 "cosir") ; sew_V = verbV (cosir_31 "cosir") ;
sing_V = mkV "cantar" ; sing_V = mkV "cantar" ;
sit_V = reflV (verbV (seure_102 "seure")) ; sit_V = reflV (verbV (seure_102 "seure" True)) ;
smell_V = mkV "ensumar" ; smell_V = mkV "ensumar" ;
spit_V = verbV (escopir_49 "escopir") ; spit_V = verbV (escopir_49 "escopir") ;
split_V2 = dirV2 (mkV "separar") ; -- dividir,) ; split_V2 = dirV2 (mkV "separar") ; -- dividir,) ;

View File

@@ -28,6 +28,7 @@ resource ParadigmsCat =
open open
(Predef=Predef), (Predef=Predef),
Prelude, Prelude,
DiffCat,
MorphoCat, MorphoCat,
BeschCat, BeschCat,
CatCat in { CatCat in {
@@ -64,6 +65,9 @@ oper
mkPrep : Str -> Prep ; -- other preposition mkPrep : Str -> Prep ; -- other preposition
CopulaType : Type ;
serCopula : CopulaType ;
estarCopula : CopulaType ;
--2 Nouns --2 Nouns
@@ -295,10 +299,13 @@ oper
Gender = MorphoCat.Gender ; Gender = MorphoCat.Gender ;
Number = MorphoCat.Number ; Number = MorphoCat.Number ;
CopulaType = DiffCat.CopulaType ;
masculine = Masc ; masculine = Masc ;
feminine = Fem ; feminine = Fem ;
singular = Sg ; singular = Sg ;
plural = Pl ; plural = Pl ;
serCopula = DiffCat.serCopula ;
estarCopula = DiffCat.estarCopula ;
accusative = complAcc ** {lock_Prep = <>} ; accusative = complAcc ** {lock_Prep = <>} ;
genitive = complGen ** {lock_Prep = <>} ; genitive = complGen ** {lock_Prep = <>} ;
@@ -360,12 +367,12 @@ oper
"çar" => començar_22 x ; "çar" => començar_22 x ;
"gir" => fugir_58 x ; "gir" => fugir_58 x ;
"ure" => beure_11 x ; "ure" => beure_11 x ;
"xer" => créixer_33 x ; --conèixer,aparèixer with regAltV "xer" => créixer_33 x True ; --conèixer,aparèixer with regAltV
_ + "re" => perdre_83 x ; _ + "re" => perdre_83 x ;
_ + "er" => verbEr x ; --handles accents in infinitives and c/ç, g/j _ + "er" => verbEr x ; --handles accents in infinitives and c/ç, g/j
_ + "ir" => dormir_44 x ; --inchoative verbs with regAltV _ + "ir" => dormir_44 x ; --inchoative verbs with regAltV
_ + "ur" => dur_45 x ; _ + "ur" => dur_45 x True ;
_ => cantar_15 x } ; _ => cantar_15 x } ;
regAltV x y = regAltV x y =
@@ -377,15 +384,15 @@ oper
<"ure",_+"c"> => regV x ; --caure,viure etc. with non-smart paradigms <"ure",_+"c"> => regV x ; --caure,viure etc. with non-smart paradigms
--small set of irregular verbs that have unique P1 Sg --small set of irregular verbs that have unique P1 Sg
<_+"ir","tinc"> => tenir_108 x ; --tenir, obtenir, ... <_+"ir","tinc"> => tenir_108 x 0 ; --tenir, obtenir, ...
<_+"ir","vinc"> => venir_117 x ; --venir, prevenir, ... <_+"ir","vinc"> => venir_117 x True ; --venir, prevenir, ...
<_+"er",_+"ig"> => fer_56 x ; <_+"er",_+"ig"> => fer_56 x ;
<_+"re",_+"ig"> => veure_118 x ; <_+"re",_+"ig"> => veure_118 x 0 ;
<_+"ar",_+"ig"> => anar_4 x ; <_+"ar",_+"ig"> => anar_4 x 0 ;
<"xer" ,_+ "c"> => conèixer_27 x ; --créixer, merèixer with regV <"xer" ,_+ "c"> => conèixer_27 x ; --créixer, merèixer with regV
<_+"er",_+ "c"> => valer_114 x ; <_+"er",_+ "c"> => valer_114 x True ;
<_+"re",_+ "c"> => doldre_42 x ; --participles of type dolgut <_+"re",_+ "c"> => doldre_42 x True ; --participles of type dolgut
--for absolt, pres, ... use mk3V --for absolt, pres, ... use mk3V
<_ ,_> => regV x } ; <_ ,_> => regV x } ;
@@ -399,25 +406,25 @@ oper
--if these are overfitting, just comment out. --if these are overfitting, just comment out.
--still doesn't catch creure, seure; mk4V with creiem as 4th arg? --still doesn't catch creure, seure; mk4V with creiem as 4th arg?
<"ure",_, "uit"> => coure_32 x ; --coure coem cuit <"ure",_, "uit"> => coure_32 x ; --coure coem cuit
<"ure",_,_+"it"> => escriure_50 x ; --escriure escrivim escrit <"ure",_,_+"it"> => escriure_50 x True ; --escriure escrivim escrit
<"ure",_,_+"et"> => treure_113 x ; --treure traiem tret <"ure",_,_+"et"> => treure_113 x True ; --treure traiem tret
<"ure",_,_+"st"> => veure_118 x ; --veure veiem vist <"ure",_,_+"st"> => veure_118 x 0 ; --veure veiem vist
<"ure",_, "cut"> => viure_119 x ; --viure vivim viscut <"ure",_, "cut"> => viure_119 x ; --viure vivim viscut
<"dre",_,_+"st"> => compondre_26 x ; --compondre compost <"dre",_,_+"st"> => compondre_26 x True ; --compondre compost
<"rir", _+"ixo",_+"rt"> => cobrir_20 x ; --cob|rir cob|ert <"rir", _+"ixo",_+"rt"> => cobrir_20 x True ; --cob|rir cob|ert
<_+"ir",_+"ixo",_+"rt"> => complir_25 x ; --compl|ir compl|ert <_+"ir",_+"ixo",_+"rt"> => complir_25 x True ; --compl|ir compl|ert
<_+"ir",_+"ixo",_+"ït"> => lluir_64 x ; --lluir lluïm lluït <_+"ir",_+"ixo",_+"ït"> => lluir_64 x 0 ; --lluir lluïm lluït
<"dre",_,"nut"> => vendre_116 x ; <"dre",_,"nut"> => vendre_116 x True ;
<_+"re",_+"c",_+"t"> => absoldre_1 x ; --c in sgP1 and subj, not in part <_+"re",_+"c",_+"t"> => absoldre_1 x ; --c in sgP1 and subj, not in part
<_+"re",_,_+"es"> => prendre_87 x ; <_+"re",_,_+"es"> => prendre_87 x ;
<_+"re",_,_+"ès"> => atendre_8 x ; <_+"re",_,_+"ès"> => atendre_8 x ;
<_+"re",_,_+"as"> => raure_91 x ; <_+"re",_,_+"as"> => raure_91 x True ;
<_+"re",_,_+"às"> => romandre_97 x ; <_+"re",_,_+"às"> => romandre_97 x ;
<_+"re",_,_+"os"> => cloure_19 x ; <_+"re",_,_+"os"> => cloure_19 x ;
<_+"re",_,_+"ós"> => confondre_28 x ; <_+"re",_,_+"ós"> => confondre_28 x ;

View File

@@ -165,7 +165,7 @@ lin
Masc Sg P3 ; Masc Sg P3 ;
not_Predet = {s = \\a,c => prepCase c ++ "no pas" ; c = Nom ; not_Predet = {s = \\a,c => prepCase c ++ "no pas" ; c = Nom ;
a = PNoAg} ; a = PNoAg} ;
have_V2 = dirV2 (verbV (tenir_108 "tenir")) ; have_V2 = dirV2 (verbV (tenir_108 "tenir" 0)) ;
oper oper
etConj : {s : Str ; n : MorphoCat.Number} = {s = "i" } ** {n = Pl} ; etConj : {s : Str ; n : MorphoCat.Number} = {s = "i" } ** {n = Pl} ;

View File

@@ -54,7 +54,8 @@ lin
ExistCN cn = ExistNP (DetCN (DetQuant IndefArt NumSg) cn) ; ExistCN cn = ExistNP (DetCN (DetQuant IndefArt NumSg) cn) ;
ExistMassCN cn = ExistNP (MassNP cn) ; ExistMassCN cn = ExistNP (MassNP cn) ;
ExistPluralCN cn = ExistNP (DetCN (DetQuant IndefArt NumPl) cn) ; ExistPluralCN cn = ExistNP (DetCN (DetQuant IndefArt NumPl) cn) ;
AdvIsNP adv np = PredVP np (UseComp (CompAdv adv)) ; -- here is the tree / here are the trees AdvIsNP adv np = PredVP np (UseComp (CompAdv adv)) ; -- here is the tree / here are the trees ; DEFAULT the tree is here
AdvIsNPAP adv np ap = PredVP np (AdvVP (UseComp (CompAP ap)) adv) ; -- here are the instructions documented ; DEFAULT the instructions are documented here
PurposeVP = variants {} ; -- VP -> Adv ; -- to become happy PurposeVP = variants {} ; -- VP -> Adv ; -- to become happy
ComplBareVS = ComplVS ; -- VS -> S -> VP ; -- say she runs ; DEFAULT say that she runs ComplBareVS = ComplVS ; -- VS -> S -> VP ; -- say she runs ; DEFAULT say that she runs
SlashBareV2S = SlashV2S ; -- V2S -> S -> VPSlash ; -- answer (to him) it is good ; DEFAULT answer that it is good SlashBareV2S = SlashV2S ; -- V2S -> S -> VPSlash ; -- answer (to him) it is good ; DEFAULT answer that it is good
@@ -63,6 +64,8 @@ lin
FrontComplDirectVS = variants {} ; -- NP -> VS -> Utt -> Cl ; -- "I am here", she said FrontComplDirectVS = variants {} ; -- NP -> VS -> Utt -> Cl ; -- "I am here", she said
FrontComplDirectVQ = variants {} ; -- NP -> VQ -> Utt -> Cl ; -- "where", she asked FrontComplDirectVQ = variants {} ; -- NP -> VQ -> Utt -> Cl ; -- "where", she asked
PredAPVP ap vp = ImpersCl (UseComp (CompAP (SentAP ap (EmbedVP vp)))) ; -- DEFAULT it is (good to walk) PredAPVP ap vp = ImpersCl (UseComp (CompAP (SentAP ap (EmbedVP vp)))) ; -- DEFAULT it is (good to walk)
PredIAdvVP iadv vp = QuestIAdv iadv (GenericCl vp) ; -- DEFAULT how does one walk
EmbedSSlash = variants {} ; -- SSlash -> SC ; -- what we did (was fun)
AdjAsCN = variants {} ; -- AP -> CN ; -- a green one ; en grön (Swe) AdjAsCN = variants {} ; -- AP -> CN ; -- a green one ; en grön (Swe)
AdjAsNP = variants {} ; -- AP -> NP ; -- green (is good) AdjAsNP = variants {} ; -- AP -> NP ; -- green (is good)
ReflRNP = variants {} ; -- VPSlash -> RNP -> VP ; -- love my family and myself ReflRNP = variants {} ; -- VPSlash -> RNP -> VP ; -- love my family and myself
@@ -96,7 +99,7 @@ lin
DetNPMasc = DetNP ; DetNPMasc = DetNP ;
DetNPFem = DetNP ; DetNPFem = DetNP ;
SubjRelNP = RelNP ;
UseComp_estar = UseComp ; -- DEFAULT UseComp UseComp_estar = UseComp ; -- DEFAULT UseComp
iFem_Pron = i_Pron ; -- DEFAULT I (masc) iFem_Pron = i_Pron ; -- DEFAULT I (masc)
youFem_Pron = youSg_Pron ; -- DEFAULT you (masc) youFem_Pron = youSg_Pron ; -- DEFAULT you (masc)

View File

@@ -15,7 +15,7 @@ concrete ExtendEng of Extend =
FocusAP, FocusAdV, FocusAdv, FocusObj, GenIP, GenModIP, GenModNP, GenNP, GenRP, FocusAP, FocusAdV, FocusAdv, FocusObj, GenIP, GenModIP, GenModNP, GenNP, GenRP,
GerundAdv, GerundCN, GerundNP, IAdvAdv, ICompAP, InOrderToVP, MkVPS, NominalizeVPSlashNP, GerundAdv, GerundCN, GerundNP, IAdvAdv, ICompAP, InOrderToVP, MkVPS, NominalizeVPSlashNP,
PassAgentVPSlash, PassVPSlash, PastPartAP, PastPartAgentAP, PositAdVAdj, PredVPS, PredVPSVV, PredetRNP, PrepCN, PassAgentVPSlash, PassVPSlash, PastPartAP, PastPartAgentAP, PositAdVAdj, PredVPS, PredVPSVV, PredetRNP, PrepCN,
PresPartAP, PurposeVP, ReflPoss, ReflPron, ReflRNP, SlashBareV2S, SlashV2V, StrandQuestSlash, StrandRelSlash, EmbedSSlash, PredIAdvVP, PresPartAP, PurposeVP, ReflPoss, ReflPron, ReflRNP, SlashBareV2S, SlashV2V, StrandQuestSlash, StrandRelSlash,
UncontractedNeg, UttAccIP, UttAccNP, UttAdV, UttDatIP, UttDatNP, UttVPShort, WithoutVP, BaseVPS2, ConsVPS2, ConjVPS2, ComplVPS2, MkVPS2 UncontractedNeg, UttAccIP, UttAccNP, UttAdV, UttDatIP, UttDatNP, UttVPShort, WithoutVP, BaseVPS2, ConsVPS2, ConjVPS2, ComplVPS2, MkVPS2
] ]
with with
@@ -191,6 +191,9 @@ concrete ExtendEng of Extend =
ByVP vp = {s = "by" ++ (GerundAdv (lin VP vp)).s} ; ByVP vp = {s = "by" ++ (GerundAdv (lin VP vp)).s} ;
PredIAdvVP iadv vp = {s = \\t,a,p,q => iadv.s ++ infVP VVInf vp False Simul CPos (agrP3 Sg)} ;
EmbedSSlash s = {s = \\_ => "what" ++ s.s ++ s.c2} ;
NominalizeVPSlashNP vpslash np = NominalizeVPSlashNP vpslash np =
let vp : ResEng.VP = insertObjPre (\\_ => vpslash.c2 ++ np.s ! NPAcc) vpslash ; let vp : ResEng.VP = insertObjPre (\\_ => vpslash.c2 ++ np.s ! NPAcc) vpslash ;

View File

@@ -84,6 +84,9 @@ oper
mkAdv : Str -> Adv ; mkAdv : Str -> Adv ;
mkAdV : Str -> AdV ;
mkAdN : Str -> AdN ;
mkAdA : Str -> AdA ;
mkConj : overload { mkConj : overload {
mkConj : Str -> Conj ; -- just one word, default number Sg: e.g. "ja" mkConj : Str -> Conj ; -- just one word, default number Sg: e.g. "ja"
@@ -204,6 +207,7 @@ oper
mkV3 : overload { mkV3 : overload {
mkV3 : V -> Prep -> Prep -> V3 ; -- e.g. rääkima, allative, elative mkV3 : V -> Prep -> Prep -> V3 ; -- e.g. rääkima, allative, elative
mkV3 : V -> V3 ;
mkV3 : Str -> V3 ; -- string, default cases accusative + allative mkV3 : Str -> V3 ; -- string, default cases accusative + allative
} ; } ;
dirV3 : V -> Case -> V3 ; -- liigutama, (accusative), illative dirV3 : V -> Case -> V3 ; -- liigutama, (accusative), illative
@@ -304,6 +308,9 @@ oper
mkAdv : Str -> Adv = \str -> {s = str ; lock_Adv = <>} ; mkAdv : Str -> Adv = \str -> {s = str ; lock_Adv = <>} ;
mkAdV : Str -> AdV = \str -> {s = str ; lock_AdV = <>} ;
mkAdN : Str -> AdN = \str -> {s = str ; lock_AdN = <>} ;
mkAdA : Str -> AdA = \str -> {s = str ; lock_AdA = <>} ;
@@ -831,6 +838,9 @@ oper
mkV3 = overload { mkV3 = overload {
mkV3 : V -> Prep -> Prep -> V3 = \v,p,q -> v ** {c2 = p ; c3 = q ; lock_V3 = <>} ; mkV3 : V -> Prep -> Prep -> V3 = \v,p,q -> v ** {c2 = p ; c3 = q ; lock_V3 = <>} ;
mkV2 : V -> V3 = \v -> v ** {c2 = accPrep ;
c3 = (casePrep allative) ;
lock_V3 = <>} ;
mkV2 : Str -> V3 = \str -> (mkV str) ** {c2 = accPrep ; mkV2 : Str -> V3 = \str -> (mkV str) ** {c2 = accPrep ;
c3 = (casePrep allative) ; c3 = (casePrep allative) ;
lock_V3 = <>} ; lock_V3 = <>} ;
@@ -864,17 +874,22 @@ oper
-- mkV2S v p = mk2V2 v p ** {lock_V2S = <>} ; -- mkV2S v p = mk2V2 v p ** {lock_V2S = <>} ;
mkV2V = overload { mkV2V = overload {
mkV2V : V -> Prep -> V2V = \v,p -> mkV2Vf v p infMa ; mkV2V : V -> Prep -> V2V = \v,p -> mkV2Vf v p infMa ;
mkV2V : V -> V2V = \v -> mkV2Vf v (casePrep genitive) infMa ;
mkV2V : Str -> V2V = \str -> mkV2Vf (mkV str) (casePrep genitive) infMa ; mkV2V : Str -> V2V = \str -> mkV2Vf (mkV str) (casePrep genitive) infMa ;
} ; } ;
mkV2Vf v p f = mk2V2 v p ** {vi = f ; lock_V2V = <>} ; mkV2Vf v p f = mk2V2 v p ** {vi = f ; lock_V2V = <>} ;
mkVA = overload { mkVA = overload {
mkVA : V -> Prep -> VA = \v,p -> v ** {c2 = p ; lock_VA = <>} ; mkVA : V -> Prep -> VA = \v,p -> v ** {c2 = p ; lock_VA = <>} ;
mkVA : V -> VA = \v -> v ** {c2 = casePrep translative ; lock_VA = <>} ;
mkVA : Str -> VA = \str -> (mkV str) ** {c2 = casePrep translative ; lock_VA = <>} ; mkVA : Str -> VA = \str -> (mkV str) ** {c2 = casePrep translative ; lock_VA = <>} ;
} ; } ;
mkV2A = overload { mkV2A = overload {
mkV2A : V -> Prep -> Prep -> V2A = \v,p,q -> v ** {c2 = p ; c3 = q ; lock_V2A = <>} ; mkV2A : V -> Prep -> Prep -> V2A = \v,p,q -> v ** {c2 = p ; c3 = q ; lock_V2A = <>} ;
mkV2A : V -> V2A = \v -> v ** {c2 = casePrep genitive ;
c3 = casePrep translative ;
lock_V2A = <>} ;
mkV2A : Str -> V2A = \str -> (mkV str) ** {c2 = casePrep genitive ; mkV2A : Str -> V2A = \str -> (mkV str) ** {c2 = casePrep genitive ;
c3 = casePrep translative ; c3 = casePrep translative ;
lock_V2A = <>} ; lock_V2A = <>} ;

View File

@@ -5,7 +5,7 @@ concrete ExtendFin of Extend =
VPI2,VPS2,MkVPS,MkVPS2,ConjVPS2,ComplVPS2, ConsVPS, BaseVPS, ListVPS, VPS, ConjVPS,PredVPS, VPI2,VPS2,MkVPS,MkVPS2,ConjVPS2,ComplVPS2, ConsVPS, BaseVPS, ListVPS, VPS, ConjVPS,PredVPS,
MkVPI2,ConjVPI2,ComplVPI2,ComplVPIVV MkVPI2,ConjVPI2,ComplVPI2,ComplVPIVV
,ExistCN, ExistMassCN, ICompAP, ByVP ,ExistCN, ExistMassCN, ICompAP, ByVP
,CompoundN, GenNP, GenIP, AdvIsNP ,CompoundN, GenNP, GenIP, AdvIsNP, EmbedSSlash
] ]
with with
(Grammar = GrammarFin) ** (Grammar = GrammarFin) **
@@ -149,4 +149,15 @@ lin
ByVP vp = lin Adv {s = S.infVP vp.s.sc Pos (Ag Sg P3) vp Inf3Adess} ; ---- Agr ? ByVP vp = lin Adv {s = S.infVP vp.s.sc Pos (Ag Sg P3) vp Inf3Adess} ; ---- Agr ?
AdvIsNP adv np = S.mkClause (\_ -> adv.s) np.a (UseComp (CompNP np)) ; AdvIsNP adv np = S.mkClause (\_ -> adv.s) np.a (UseComp (CompNP np)) ;
-- : SSlash -> SC
EmbedSSlash ss =
let it_NP : NP = UsePron it_Pron ;
thatWhich : NP = it_NP ** {
s = \\nc => it_NP.s ! NPSep ++ case nc of {
NPCase c => mikaInt ! Sg ! c ;
NPAcc => mikaInt ! Sg ! Gen ;
NPSep => mikaInt ! Sg ! Nom }
} ;
in {s = appCompl True Pos ss.c2 thatWhich ++ ss.s} ;
} }

View File

@@ -89,4 +89,7 @@ concrete CatLat of Cat = CommonX-[Adv] ** open ResLat, ParamX, Prelude in {
linref linref
NP = \np -> np.preap.s ! Ag np.g np.n Nom ++ np.s ! Nom ++ np.postap.s ! Ag np.g np.n Nom ; NP = \np -> np.preap.s ! Ag np.g np.n Nom ++ np.s ! Nom ++ np.postap.s ! Ag np.g np.n Nom ;
VP = \vp -> vp.adv ++ vp.inf ! VInfActPres ++ vp.obj ++ vp.compl ! Ag Masc Sg Nom ; VP = \vp -> vp.adv ++ vp.inf ! VInfActPres ++ vp.obj ++ vp.compl ! Ag Masc Sg Nom ;
S = \s -> combineSentence s ! SPreO ! PreO ! SOV ;
} }

View File

@@ -53,12 +53,22 @@ concrete ConjunctionLat of Conjunction =
-- --
-- BaseS : S -> S -> ListS -- BaseS : S -> S -> ListS
-- TO FIX -- BaseS x y = {
-- BaseS x y = { l = \\c => twoStr (x.s ! PreS) (y.s ! PreS) } ; -- l = \\c => { s1 = x ; s2 = y } ;
-- } ;
-- ConsS : S -> ListS -> ListS -- ConsS : S -> ListS -> ListS
-- TO FIX -- TO FIX
-- ConsS x xs = { l = \\_ => consrSS bindComma (ss (x.s ! PreS)) (xs.l ! Comma) }; -- ConsS x xs = { l = \\_ => consrSS bindComma (ss (x.s ! PreS)) (xs.l ! Comma) };
-- ConsS s ss = {
-- l = \\c =>
-- { s1 = ss.s1 ++
-- table {
-- And => and_Conj
-- } ! c
-- ++ ss.s2 ;
-- s2 = s }
-- } ;
-- BaseAdv : Adv -> Adv -> ListAdv -- BaseAdv : Adv -> Adv -> ListAdv
BaseAdv x y = { l = \\c => twoSS (ss (x.s ! Posit)) (ss (y.s ! Posit)) } ; BaseAdv x y = { l = \\c => twoSS (ss (x.s ! Posit)) (ss (y.s ! Posit)) } ;
@@ -101,7 +111,7 @@ concrete ConjunctionLat of Conjunction =
{ l = \\_ => consrTable Agr and_Conj.s2 x (xs.l ! Comma ) } ; { l = \\_ => consrTable Agr and_Conj.s2 x (xs.l ! Comma ) } ;
-- --
lincat lincat
-- [S] = { l : Coordinator => {s1,s2 : Str} } ; -- TO FIX -- [S] = { l : Coordinator => {s1,s2 : S} } ; -- TO FIX
[Adv] = { l: Coordinator => {s1,s2 : Str}} ; [Adv] = { l: Coordinator => {s1,s2 : Str}} ;
[NP] = {l : Coordinator => {s1,s2 : Case => Str} ; g : Gender ; n : Number ; p : Person ; adv : Str ; preap : AP ; postap : AP ; isBase : Bool } ; [NP] = {l : Coordinator => {s1,s2 : Case => Str} ; g : Gender ; n : Number ; p : Person ; adv : Str ; preap : AP ; postap : AP ; isBase : Bool } ;
[AP] = {l : Coordinator => {s1,s2 : Agr => Str } } ; [AP] = {l : Coordinator => {s1,s2 : Agr => Str } } ;

View File

@@ -0,0 +1,5 @@
--# -path=.:api
concrete ConstructionLat of Construction = CatLat **
open SyntaxLat, SymbolicLat, ParadigmsLat,
(L = LexiconLat), (E = ExtraLat), (G = GrammarLat), (I = IrregLat), (R = ResLat), (N = NounLat), Prelude in {
}

View File

@@ -1 +0,0 @@
dict/DictLat.gf

34819
src/latin/DictLat.gf Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1 +0,0 @@
dict/DictLatAbs.gf

37214
src/latin/DictLatAbs.gf Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,2 @@
concrete DocumentationLat of Documentation = {
}

1
src/latin/ExtendLat.gf Normal file
View File

@@ -0,0 +1 @@
concrete ExtendLat of Extend = ExtendFunctor with (Grammar=GrammarLat);

View File

@@ -1,5 +1,5 @@
concrete ExtraLat of ExtraLatAbs = concrete ExtraLat of ExtraLatAbs =
CatLat, ConjunctionLat ** CatLat, ExtraLexiconLat, ConjunctionLat **
open ResLat, ParadigmsLat, Coordination, Prelude in { open ResLat, ParadigmsLat, Coordination, Prelude in {
lincat CS = Str ; lincat CS = Str ;
lin lin

View File

@@ -1,5 +1,5 @@
abstract ExtraLatAbs = abstract ExtraLatAbs =
Extra, Conjunction Extra, ExtraLexiconLatAbs, Conjunction
** { ** {
cat CS ; cat CS ;
fun fun

453
src/latin/ExtraLexCaesar.gf Normal file
View File

@@ -0,0 +1,453 @@
concrete ExtraLexCaesar of ExtraLexCaesarAbs = CatLat ** open Prelude,ParadigmsLat,ResLat, IrregLat, LexiconLat,StructuralLat in {
lin
a_Prep = mkPrep "a" Abl ;
ab_Prep = mkPrep "ab" Abl ;
abdere_V = mkV "abdere" "abdo" "abdidi" "abditum";
abducere_V = mkV "abducere" "abduco" "abduxi" "abductum" ; -- prefixVerb "ab" ducere_V; -- ab + ducere, missing abduci (inf VInfPassPres : abduceri)
abesse_V = prefixVerb "ab" be_V; -- ab + esse, missing absente?
abicere_V = mkV "abicere" "abicio" "abieci" "abiectum"; -- prefixVerb "ab" iacere_V; -- ab + iacere
abscisus_A = mkA "abscisus";
absens_A = mkA "absens" "absentis"; -- missing absente
absimilis_A = mkA "absimilis" "absimile"; -- missing absimili (s Posit (Ag Masc Sg Dat) : absimii)
abstinere_V2 = mkV2 (mkV "abstinere"); -- prefixVerb2 "ab" tenere_V2 ; -- -- ab + tenere
abstrahere_V2 = mkV2 (mkV "abstrahere" "abstraho" "abstraxi" "abstractum");-- prefixVerb2 "ab" trahere_V2 ; -- ab + trahere
-- ac_Conj = mkConj "" "ac" Sg ;
accedere_V = mkV "adcedere" "adcedo" "adcessi" "adcessum"; -- prefixVerb "ad" cedere_V ; -- ad + cedere
accendere_V = mkV "accendere" "accendo" "accendi" "accensum";
accidere_V = mkV "accidere" "accido" "accidi" "accisum"; -- ad + caedere?
accipere_V = mkV "accipere" "accipio" "accepi" "acceptum"; -- prefixVerb "ad" capere_V; -- ad + capere
acclivis_A = mkA "acclivis" "acclive" ;
acclivitas_N = mkN "acclivitas" "acclivitatis" feminine;
accommodare_V = mkV "accommodare" ;
accommodatus_A = mkA "accommodatus" ;
accurrere_V = mkV "accurrere" "accurro" "accucurri" "accursum"; -- prefixVerb "ad" currere_V; -- ad + currere
accusare_V = mkV "accusare";
acervus_N = mkN "acervus" ;
acies_N = mkN "acies" ;
acriter_Adv = ss "acriter"; -- comparison???
ad_Prep = mkPrep "ad" Acc;
adaequare_V = mkV "adaequare"; -- ad + aequare?
adamare_V2 = mkV2 (mkV "adamare"); -- prefixVerb2 "ad" love_V2; -- ad + amare, missing adamassent (act (VAct VAnt (VImpf VConj) Pl P3) : adamavissent)?
adducere_V = mkV "adducere" "adduco" "adduxi" "adductum"; -- prefixVerb "ad" ducere_V; -- ad + ducere, missing adduci
adequitare_V = mkV "adequitare"; -- prefixVerb "ad" equitare_V; -- ad + equitare
adesse_V = prefixVerb "ad" be_V; -- ad + esse
adferre_V = prefixVerb "ad" ferre_V;-- ad + ferre
adfectus_A = mkA "adfectus";
adfectus_N = mkN "adfectus" "adfectus" masculine;
adficere_V = mkV " adficere" "adfico" "adfeci" "adfectum"; -- ad + facere?, missing adficiebantur
adfigere_V = mkV " adfigere" "adfixi" "adfixum"; -- ad + figere?, missing adfixae
adfinitas_N = mkN "adfinitas" "adfinitatis" feminine;
adflictare_V = mkV "adflictare";
adflictus_A = mkA "adflictus";
adgredi_V = mkV "adgredi" "adgredior" "adgressus"; -- ad + gradior?, missing adgressi, adgressus
adgregare_V = mkV "adgregare"; -- ad + gregare?
adhibere_V = mkV "adhibere"; -- ad + habere?
adhuc_Adv = ss "adhuc";
Adiatunnus_PN = mkPN (lin N (singularN (mkN "Adiatunnus")));
adicere_V = mkV "adicere" "adieci" "adiectum"; -- ad + iacere?, missing adiecta
adigere_V = mkV "adigere" "adigo" "adegi" "adactum"; -- ad + agere?, missing adigi
adire_V = mkV "adire" "adeo" "" ""; -- prefixVerb "ad" ire_V; -- ad + ire, missing adiisset, aditus?
aditus_N = mkN "aditus" "aditus" masculine;
adiungere_V = mkV "adiungere" "adiungo" "adiunxi" "adiunctum"; -- ad + iungere?
adiuvare_V = mkV "adiuvare"; -- ad + iuvare?
administrare_V = mkV "administrare"; -- ad + ministrare
admirari_V = mkV "admirari" "admiror" "admiratus"; -- ad + mirari?
admittere_V = mkV "admittere" "admitto" "admisi" "admissum"; -- ad + mittere?
admodum_Adv = ss "admodum";
adoriri_V = mkV "adoriri" "adorior" "adortus"; -- ad + oriri?, missing adorti, adortum, adortus
adpellere_V = mkV "adpellere" "adpello" "adpuli" "adpulsum"; -- ad + pelere?
adpetere_V = mkV "adpetere" "adpeto" "adpetivi" "adpetitum"; -- ad + petere?, missing adpetierit, adpetisse, adpetissent
adpropinquare_V = mkV " adpropinquare"; -- ad + propinquare?
-- adpulsare_V = mkV "adpulsare";
adsciscere_V = mkV "adsciscere" "adscisco" "adscivi" "ascitum"; -- ad + sciscere?
adsuere_V = mkV "adsuere" "adsuo" "adsui" "adsutum"; -- ad + suere?, missing adsue
adsuefacere_V = mkV "adsuefacere" "adsuefacio" "adsuefeci" "adsuefactum"; -- possibly problematic
-- adtectus ???
adulescentia_N = mkN "adulescentia";
adulescentulus_N = mkN "adulescentulus";
advenire_V = mkV "advenire" "advenio" "adveni" "adventum"; -- prefixVerb "ad" venire_V; -- ad + venire
advertere_V = mkV "advertere" "adverto" "adverti" "adversum"; -- ad + vertere?
adventus_N = mkN "adventus" "adventus" masculine;
aedificare_V = mkV "aedificare";
aedificium_N = mkN "aedificium";
aeger_A = mkA "aeger";
aegre_Adv = ss "aegre"; -- comparison?
Aemilius_PN = mkPN (lin N (singularN (mkN "Aemilius")));
aequaliter_Adv = ss "aequaliter";
aequare_V = mkV " aequare";
aequinoctium_N = mkN "aequinoctium";
aequitas_N = mkN "aequitas" "aequitatis" feminine;
aequum_N = mkN "aequum";
aequus_A = mkA "aequus";
aerarius_A = mkA "aerarius";
aerarius_N = mkN "aerarius";
aer_f_N = mkN "aer" "aeris" feminine;
aer_m_N = mkN "aer" "aeris" masculine;
aes_N = mkN "aer" "aeris" neuter;
aestas_N = mkN "aestas" "aestatis" feminine;
aestimare_V = mkV "aestimare";
aestuarium_N = mkN "aestuarium";
aestus_N = mkN "aestus" "aestus" masculine;
aetas_N = mkN "aetas" "aetatis" feminine;
ager_N = mkN "ager";
agere_V = mkV "agere" "ago" "egi" "actum";
agger_N = mkN "agger" "aggeris" masculine;
agmen_N = mkN "agmen" "agminis" neuter;
alacer_A = mkA "alacer" "alacris";
alacritas_N = mkN "alacritas" "alacritatis" feminine;
alarius_A = mkA "alarius";
-- alduas_??? = ???;
alere_1_V = mkV "alere" "alo" "alui" "altum";
alere_2_V = mkV "alere" "alo" "alui" "alitum";
alienus_A = mkA "alienus";
-- alii_Conj = mkConj "alii" "alii" Sg ;
aliquam_Adv = ss "aliquam";
aliquanto_Adv = ss "aliquanto";
--aliqui_Pron = mkPron ???;
-- aliquis_Pron = aliquis;
aliter_Adv = ss "aliter";
alium_N = mkN "alium";
alius_A = mkA (mkN "alius") (mkN "alia") (mkN "aliud" "alius" neuter);
Allobroges_PN = mkPN (lin N (pluralN (mkNoun "" "" "" "" "" "" "Allobroges" "Allobroges" "Allobrogum" "Allobrogibus" masculine))); -- missing Allobrogas
Alpes_PN = mkPN (lin N (pluralN (mkNoun "" "" "" "" "" "" "Alpes" "Alpes" "Alpium" "Alpibus" feminine)));
alter_A = mkA (mkN "alter") (mkN "altera") (mkN "alterum"); -- missing alterius
alterare_V = mkV "alterare";
altitudo_N = mkN "altitudo" "altitudinis" feminine;
altus_A = mkA "altus";
aluta_N = mkN "aluta";
Ambarri_PN = mkPN (lin N (pluralN (mkN "Ambarrus")));
Ambiani_PN = mkPN (lin N (pluralN (mkN "Ambianus")));
Ambiliati_PN = mkPN (lin N (pluralN (mkN "Ambiliatus")));
Ambivariti_PN = mkPN (lin N (pluralN (mkN "Ambivaritus")));
amentia_N = mkN "amentia";
amicitia_N = mkN "amicitia";
amicus_A = mkA "amicus";
amittere_V = mkV "amittere" "amitto" "amisi" "amissum";
amplificare_V = mkV "amplificare";
amplitudo_N = mkN "amplitudo" "amplitudinis" feminine;
amplus_A = mkA "amplus";
anceps_A = mkA "anceps" "ancipitis";
ancora_N = mkN "ancora";
Andebrogius_PN = mkPN (lin N (singularN (mkN "Andebrogius")));
--Andes_PN = ???
angustia_N = mkN "angustia";
angustiare_V = mkV "angustiare";
-- an_Conj = mkConj "" "an" Sg;
-- an_an_Conj = mkConj "an" "an" Sg;
animadvertere_V = mkV "animadvertere" "animadverto" "animadverti" "animadversum";
animus_N = mkN "animus";
annuus_A = mkA "annuus";
ante_Adv = ss "ante";
ante_Prep = mkPrep "ante" Acc;
antea_Adv = ss "antea";
antecedere_V = mkV "antecedere" "antecedo" "antecessi" "antecessum"; -- ante + cedere?
antemna_N = mkN "antemna";
anteponere_V = mkV "anteponere" "antepono" "anteposui" "antepositum"; -- prefixVerb2 "ante" put_V2; -- ante + ponere
antiquitus_Adv = ss "antiquitus";
antiquus_A = mkA "antiquus"; -- missing antiquissimum
aperire_V = mkV "aperire" "aperio" "aperui" "apertum"; -- missing aperta, apertis, apertissimis, apertissimo, aperto, apertum, apertus
apertare_V = mkV "apertare";
Aprilis_PN = mkPN (lin N (singularN (mkN "Aprilis" "Aprilis" masculine))); -- missing Apr, April
appellare_V = mkV "appellare";
aptus_A = mkA "aptus";
apud_Prep = mkPrep "apud" Acc;
aquatio_N = mkN "aquatio" "aquationis" feminine;
aquila_N = mkN "aquila";
Aquileia_PN = mkPN (lin N (singularN (mkN "Aquileia")));
Aquitania_PN = mkPN (lin N (singularN (mkN "Aquitania")));
Aquitanus_N = mkN "Aquitanus";
Arar_PN = mkPN (lin N (singularN (mkN "Arar" "Araris" masculine))); -- missing Ararim
arbitrari_V = mkV "arbitrari";
arbitrium_N = mkN "arbitrium";
arcessere_V = mkV "arcessere" "arcesso" "arcessivi" "arcessitum";
arduus_A = mkA "arduus";
aries_N = mkN "aries" "arietis" masculine;
Ariovistus_PN = mkPN (lin N (singularN (mkN "Ariovistus")));
armatus_A = mkA "armatus";
arma_N = lin N (pluralN (mkNoun "" "" "" "" "" "" "arma" "arma" "armorum" "armis" neuter));
armamentum_N = mkN "armamentum";
armare_V = mkV "armare";
armatura_N = mkN "armatura";
armus_N = mkN "armus";
arroganter_Adv = ss "arroganter"; -- comparison?
arrogantia_N = mkN "arrogantia";
artus_A = mkA "artus";
Arverni_PN = mkPN (lin N (pluralN (mkN "Arvernus")));
arx_N = mkN "arx" "arcis" feminine;
ascendere_V = mkV "ascendere" "ascendo" "ascendi" "ascensum";
-- at_Conj = mkConj "at" "" Sg ;
-- atque_Conj = mkConj "atque" "" Sg ;
Atrebates_PN = mkPN (mkN "Atrebas" "Atrebatis" masculine);
attingere_V = mkV "attingere" "attingo" "attigi" "attactum"; -- ad + tangere?
attribuere_V = mkV "attribuere" "attribuo" "attribui" "attributum"; -- ad + tribuere?, missing attribuant
-- auctibus ???
auctor_N = mkN "auctor" "auctoris" masculine;
auctorare_V = mkV "auctorare";
auctoritas_N = mkN "auctoritas" "auctoritatis" feminine;
auctus_A = mkA "auctus";
audacter_Adv = ss "audacter"; -- comparison?
audax_A = mkA "audax" "audacis";
audere_V = mkV "audere"; -- semi-deponent?, missing ausos
audire_V = mkV "audire" ; -- missing audierant, audierit
auditio_N = mkN "auditio" "auditionis" feminine;
augere_V = mkV "augere"; -- missing auxisse
Atuatuci_PN = mkPN (lin N (pluralN (mkN "Atuatucus")));
Aulerci_PN = mkPN (lin N (pluralN (mkN "Aulercus")));
Auriga_PN = mkPN (mkN "Auriga");
Aurunculeius_PN = mkPN (lin N (singularN (mkN "Aurunculeius")));
Ausci_PN = mkPN (lin N (pluralN (mkN "Auscus")));
-- aut_Conj = mkConj "aut" "" Sg ;
-- autem_Conj = mkConj "autem" "" Sg ;
auxiliare_V = mkV "auxiliare";
auxilium_N = mkN "auxilium";
avaritia_N = mkN "avaritia";
avertere_V = mkV "avertere" "averto" "averti" "aversum"; -- ab + vertere?, missing aventu (noun sg supine neut dat)
avus_N = mkN "avus";
Axona_PN = mkPN (lin N (singularN (mkN "Axona")));
baculus_N = mkN "baculus";
Baleares_PN = mkPN (lin N (pluralN (mkN "Balear" "Balearis" masculine)));
barbarus_A = mkA "barbarus";
barbarus_N = mkN "barbarus";
batavus_A = mkA "batavus";
Belgae_PN = mkPN (lin N (pluralN (mkN "Belga"))); -- missing Belgos
bellare_V = mkV "bellare";
bellicosus_A = mkA "bellicosus";
Bellovaci_PN = mkPN (lin N (pluralN (mkN "Bellovacus")));
bellum_N = mkN "bellum";
bellus_A = mkA "bellus";
bene_Adv = ss "bene"; -- comparison?
beneficium_N = mkN "beneficium";
Bibrax_PN = mkPN (lin N (singularN (mkN "Bibrax" "Bibractis" masculine)));
biduum_N = mkN "biduum";
biduus_A = mkA "biduus";
biennis_A = mkA "biennis" "bienne"; -- missing biennium
biennium_N = mkN "biennium";
binus_A = mkA "binus";
bipedalis_A = mkA "bipedalis" "bipedale"; -- missing bipedalibus
bipertitus_A = mkA "bipertitus";
bis_Adv = ss "bis";
Biturix_PN = mkPN (lin N (pluralN (mkN "Biturix" "Biturigis" masculine)));
-- boc ???
Boduognatus_PN = mkPN (lin N (singularN (mkN "Boduognatus")));
Boi_PN = mkPN (lin N (pluralN (mkN "Boius"))); -- missing Boi
bonitas_N = mkN "bonitas" "bonitatis" feminine;
bracchium_N = mkN "bracchium";
Bratuspantium_PN = mkPN (lin N (singularN (mkN "Bratuspantium")));
brevi_Adv = ss "brevi";
breviare_V = mkV "breviare";
brevis_A = mkA "brevis" "breve"; -- missing brevi
brevitas_N = mkN "brevitas" "brevitatis" feminine;
Britannia_PN = mkPN (mkN "Britannia");
britannus_A = mkA "britannus";
Brutus_PN = mkPN (lin N (singularN (mkN "Brutus")));
cadaver_N = mkN "cadaver" "cadaveris" neuter;
cadere_V = mkV "cadere" "cado" "cecidi" "casum";
Caesar_PN = mkPN (lin N (singularN (mkN "Caesar" "Caesaris" masculine))); -- missing Caesare
caespes_N = mkN "caespes" "caespitis" masculine;
calamitas_N = mkN "calamitas" "calamitatis" feminine;
calare_V = mkV "calare";
calo_N = mkN "calo" "calonis" masculine;
campus_N = mkN "campus";
capere_V = mkV "capere" "capio" "cepi" "captum"; -- missing capi
captivus_A = mkA "captivus";
captivus_N = mkN "captivus";
captus_N = mkN "captus" "captus" masculine;
carina_N = mkN "carina";
carpere_V = mkV "carpere" "carpio" "carpsi" "carptum";
carrus_N = mkN "carrus";
castellum_N = mkN "castellum";
castra_N = lin N (pluralN (mkNoun "" "" "" "" "" "" "castra" "castra" "castrorum" "castris" neuter));
casus_N = mkN "casus" "casus" masculine;
catena_N = mkN "catena";
causa_N = mkN "causa";
causa_Prep = mkPostp "causa" Gen;
cavare_V = mkV "cavare";
cavere_V = mkV "cavere";
cedere_V = mkV "cedere" "cedo" "cessi" "cessum";
celare_V = mkV "celare";
celer_A = mkA "celer" "celeris"; -- strange?
celeritas_N = mkN "celeritas" "celeritatis" feminine;
celeriter_Adv = ss "celeriter"; -- comparison? missing celerius, celerrime
census_N = mkN "census" "census" masculine;
censere_V = mkV "censere";
centuriare_V = mkV "centuriare";
centurio_N = mkN "centurio" "centurionis" masculine;
cernere_V = mkV "cernere" "cerno" "crevi" "cretum";
certare_V = mkV "certare";
certamen_N = mkN "certamen" "certaminis" neuter;
certus_A = mkA "certus";
ceterus_A = mkA "ceterus";
cibarius_A = mkA "cibarius";
cibus_N = mkN "cibus";
ciere_V = mkV "ciere" "cio" "civi" "citum";
cingere_V = mkV "cingere" "cingo" "cingi" "cinctum";
circinare_V = mkV "circinare";
circinus_N = mkN "circinus";
circiter_Adv = ss "circiter";
circiter_Prep = mkPrep "circiter" Acc;
circuitus_N = mkN "circuitus" "circuitus" masculine;
circum_Adv = ss "circum";
circum_Prep = mkPrep "circum" Acc;
circumdare_V = mkV "circumdare" "circumdo" "circumdedi" "circumdatum"; -- prefixVerb "circum" dare_V; -- circum + dare, missing circumdederant, circumdederunt
circumducere_V = mkV "circumducere" "circumduco" "circumduxi" "circumductum"; -- prefixVerb "circum" ducere_V; circum + ducere
circumiectus_A = mkA "circumiectus";
circumire_V = prefixVerb "circum" ire_V;
circummunire_V = mkV "circummunire";
circumsistere_1_V = mkV "circumsistere" "circumsisto" "circumstiti" "circumstatum" ; -- prefixVerb "circum" sistere_1_V; -- circum + sistere
-- circumsistere_2_V = prefixVerb "circum" sistere_2_V; -- circum + sistere
circumvenire_V = mkV "circumvenire" ; -- prefixVerb "circum" venire_V; -- circum + venire
cis_Prep = mkPrep "cis" Acc;
citare_V = mkV "citare";
citer_A = mkA "citer"; -- missing citeriore, citeriorem, citerioris
citra_Adv = ss "citra";
citus_A = mkA "citus";
civitas_N = mkN "civitas" "civitatis" feminine;
colere_V = mkV "colere" "colo" "colui" "cultum";
cooriri_V = mkV "cooriri" "coorior" "coortus"; -- prefixVerb "con" oriri_V; -- con + oriri, missing coorta
conferre_V = prefixVerb "con" ferre_V; -- con + ferre
---
conspicere_V = mkV "conspicere" "conspicio" "conspexi" "conspectum"; -- prefixVerb "con" specere_V; -- con + specere
conspirare_V = mkV "conspirare"; -- con + spirare?
constanter_Adv = ss "constanter"; -- comparison
constantia_N = mkN "constantia";
constare_V = mkV "constare"; -- prefixVerb "con" stare_V; -- con + stare, missing constiterant, constiterat, constiterunt, constitissent, constitisset, constitit
-- consternare_V = mkV "consternare"; -- con + sternere ?
consternere_V = mkV "consternere" "consterno" "constravi" "constratum"; -- con + sternere?
constituere_V = mkV "constituere" "constituo" "constitui" "constitutum"; -- prefixVerb "con" statuere_V; -- con + statuere
constitutum_N = mkN "constitutum";
consuere_V = mkV "consuere" "consuo" "consui" "consustum";
consuescere_V = mkV "consuescere" "consuesco" "consuevi" "consuetum"; -- con + suescere?, missing consuesse, consuessent?
consuetudo_N = mkN "consuetudo" "consuetudinis" feminine;
consul_N = mkN "consul" "consulis" masculine;
consulatus_N = mkN "consulatus" "consulatus" masculine;
consulere_V = mkV "consulere" "consulo" "consului" "consultum";
consultare_V = mkV "consultare";
consultum_N = mkN "consultum";
contemptio_N = mkN "contemptio" "contemptionis" feminine;
contemptus_A = mkA "contemptus";
contemptus_N = mkN "contemptus" "contemptus" masculine;
contentio_N = mkN "contentio" "contentionis" feminine;
contendere_V = mkV "contendere" "contendo" "contendi" "contentum";
contexere_V = mkV "contexere" "contexo" "contexui" "contextum"; -- prefixVerb "con" texere_V; -- con + texere
continens_N = mkN "continens" "continentis" feminine;
continenter_Adv = ss "continenter";
continere_V2 = mkV2 (mkV "continere"); -- prefixVerb2 "con" tenere_V2; con + tenere
contingere_V = mkV "contingere" "contingo" "contigi" "contectum"; -- con + tangere?
continuatio_N = mkN "continuatio" "continuationis" feminine;
continuus_A = mkA "continuus";
contra_Adv = ss "contra";
-- contrahere_V2 = -- prefixVerb2 "con" trahere_V2; -- con + trahere
contrarius_A = mkA "contrarius";
contumelia_N = mkN "contumelia";
convallis_N = mkN "convallis" "convallis" feminine;
convenire_V = prefixVerb "con" venire_V; -- missing convenerant, convenerat, convenerunt, convenisse, convenissent, convenisset, conventu, conventus
conversare_V = mkV "conversare";
convertere_V = prefixVerb "con" vertere_V; -- con + vertere
convincere_V = prefixVerb "con" vincere_V; -- con + vincere
convocare_V = prefixVerb "con" vocare_V; -- con + vocare
copia_N = mkN "copia";
copiosus_A = mkA "copiosus";
copula_N = mkN "copula";
cora_N = mkN "cora";
corona_N = mkN "corona";
corpus_N = mkN "corpus" "corporis" neuter;
cos_N = mkN "cos" "cotis" feminine;
cotidianus_A = mkA "cotidianus";
cotidie_Adv = ss "cotidie";
Cotta_PN = mkPN (lin N (singularN (mkN "Cotta")));
crassitudo_N = mkN "crassitudo" "crassitudinis" feminine;
Crassus_PN = mkPN (lin N (singularN (mkN "Crassus")));
cratis_N = mkN "cratis" "cratis" feminine;
creare_V = mkV "creare";
creber_A = mkA "creber";
credere_V = mkV "credere" "credo" "credidi" "creditum";
cremare_V = mkV "cremare";
crescere_V = mkV "crescere" "cresco" "crevi" "cretum";
Creta_N = mkN "Creta";
cruciare_V = mkV "cruciare";
cruciatus_N = mkN "cruciatus" "cruciatus" masculine;
crudelitas_N = mkN "crudelitas" "crudelitatis" feminine;
crudeliter_Adv = ss "crudeliter"; -- comparison?
culmen_N = mkN "culmen" "culminis" neuter;
culpa_N = mkN "culpa";
cultura_N = mkN "cultura";
cultus_N = mkN "cultus" "cultus" masculine;
cum_Prep = mkPrep "cum" Abl;
cunctari_V = mkV "cunctari";
cunctatio_N = mkN "cunctatio" "cunctationis" feminine;
cunctus_A = mkA "cunctus";
cuniculus_N = mkN "cuniculus";
cupere_V = mkV "cupere" "cupio" "cupivi" "cupitum";
cupiditas_N = mkN "cupiditas" "cupiditatis" feminine;
cupidus_A = mkA "cupidus";
cur_Adv = ss "cur";
cura_N = mkN "cura";
curare_V = mkV "curare"; -- missing curasset
currere_V = mkV "currere" "curro" "cucurri" "cursum";
currus_N = mkN "currus" "currus" masculine;
custodia_N = mkN "custodia";
damnare_V = mkV "damnare";
damnatus_A = mkA "damnatus";
dare_V = mkV "dare" "do" "dedi" "datum";
datum_N = mkN "datum";
de_Prep = mkPrep "de" Abl;
debere_VV = StructuralLat.must_VV;
ducere_V = mkV "ducere" "duco" "duxi" "ductum" ;
equitare_V = mkV "equitare";
ferre_V = fixFerre (mkVerb "ferre" "fer" "fer" "fera" "fereba" "ferre" "fere" "fer" "tul" "tul" "tuleri" "tulera" "tulisse" "tuleri" "lat");
iacere_V = mkV "iacere" "iacio" "ieci" "iactum";
ire_V = LexiconLat.go_V;
-- ne_an_Conj = mkConj (BIND ++ "ne") "an" Sg;
-- nonne_an_Conj = mkConj "nonne" "an" Sg;
-- num_an_Conj = mkConj "num" "an" Sg;
oriri_V = mkV "oriri" "orior" nonExist "ortus";
qui_IP = StructuralLat.whatSg_IP;
sistere_1_V = mkV "sistere" "sisto" "stiti" "statum";
sistere_2_V = mkV "sistere" "sisto" "steti" "statum";
specere_V = mkV "specere" "speco" "spexi" "spectum";
stare_V = LexiconLat.stand_V;
statuere_V = mkV "statuere" "statuo" "statui" "statutum";
tenere_V2 = LexiconLat.hold_V2;
texere_V = mkV "texere" "texo" "texui" "textum";
trahere_V2 = LexiconLat.pull_V2;
-- utrum_an_Conj = mkConj "utrum" "an" Sg;
venire_V = LexiconLat.come_V;
vertere_V = mkV "vertere" "verto" "verti" "versum";
vincere_V = mkV "vincere" "vinco" "vici" "victum";
vocare_V = mkV "vocare";
oper
fixFerre : Verb -> Verb =
\ferre ->
{
act = table
{
(VAct VSim (VPres VInd) Sg P2) => "fers";
(VAct VSim (VPres VInd) Sg P3) => "fert";
(VAct VSim (VPres VInd) Pl P1) => "ferimus";
(VAct VSim (VPres VInd) Pl P2) => "fertis";
rest => ferre.act ! rest
};
ger = ferre.ger;
geriv = ferre.geriv;
imp = table
{
(VImp1 Sg) => "fer";
(VImp1 Pl) => "ferte";
(VImp2 Sg P2) => "ferto";
(VImp2 Sg P3) => "ferto";
(VImp2 Pl P2) => "fertote";
rest => ferre.imp ! rest
};
inf = ferre.inf;
part = ferre.part;
pass = table
{
VPass (VPres VInd) Sg P2 => "ferris";
VPass (VPres VInd) Sg P3 => "fertur";
rest => ferre.pass ! rest
};
sup = ferre.sup;
} ;
}

View File

@@ -0,0 +1,417 @@
abstract ExtraLexCaesarAbs = Cat ** {
fun
a_Prep : Prep;
ab_Prep : Prep;
abdere_V : V;
abducere_V : V;
abesse_V : V;
abicere_V : V;
abscisus_A : A;
absens_A : A;
absimilis_A : A;
abstinere_V2 : V2;
abstrahere_V2 : V2;
ac_Conj : Conj ;
accedere_V : V;
accendere_V : V;
accidere_V : V;
accipere_V : V;
acclivis_A : A;
acclivitas_N : N;
accommodare_V : V;
accommodatus_A : A;
accurrere_V : V;
accusare_V : V;
acervus_N : N;
acies_N : N;
acriter_Adv : Adv;
ad_Prep : Prep;
adaequare_V : V;
adamare_V2 : V2;
adducere_V : V;
adequitare_V : V;
adesse_V : V;
adferre_V : V;
adfectus_A : A;
adfectus_N : N;
adficere_V : V;
adfigere_V : V;
adfinitas_N : N;
adflictare_V : V;
adflictus_A : A;
adgredi_V : V;
adgregare_V : V;
adhibere_V : V;
adhuc_Adv : Adv;
Adiatunnus_PN : PN;
adicere_V : V;
adigere_V : V;
adire_V : V;
aditus_N : N;
adiungere_V : V;
adiuvare_V : V;
administrare_V : V;
admirari_V : V;
admittere_V : V;
admodum_Adv : Adv;
adoriri_V : V;
adpellere_V : V;
adpetere_V : V;
adpropinquare_V : V;
adpulsare_V : V;
adsciscere_V : V;
adsuere_V : V;
adsuefacere_V : V;
adulescentia_N : N;
adulescentulus_N : N;
advenire_V : V;
adventus_N : N;
advertere_V : V;
aedificare_V : V;
aedificium_N : N;
aeger_A : A;
aegre_Adv : Adv;
Aemilius_PN : PN;
aequaliter_Adv : Adv;
aequare_V : V;
aequinoctium_N : N;
aequitas_N : N;
aequum_N : N;
aequus_A : A;
aerarius_A : A;
aerarius_N : N;
aer_f_N : N;
aer_m_N : N;
aes_N : N;
aestas_N : N;
aestimare_V : V;
aestuarium_N : N;
aestus_N : N;
aetas_N : N;
-- afferre_V : V;
ager_N : N;
agere_V : V;
agger_N : N;
agmen_N : N;
alacer_A : A;
alacritas_N : N;
alarius_A : A;
-- alduas_??? : ???;
alere_1_V : V;
alere_2_V : V;
alienus_A : A;
alii_Conj : Conj;
aliquam_Adv : Adv;
aliquanto_Adv : Adv;
-- aliqui_Pron : Pron;
aliquis_Pron : Pron;
aliter_Adv : Adv;
alium_N : N;
alius_A : A;
Allobroges_PN : PN;
Alpes_PN : PN;
alter_A : A;
alterare_V : V;
altitudo_N : N;
altus_A : A;
aluta_N : N;
Ambarri_PN : PN;
Ambiani_PN : PN;
Ambiliati_PN : PN;
Ambivariti_PN : PN;
amentia_N : N;
amicitia_N : N;
amicus_A : A;
amittere_V : V;
amplificare_V : V;
amplitudo_N : N;
amplus_A : A;
an_Conj : Conj;
an_an_Conj : Conj;
anceps_A : A;
ancora_N : N;
Andebrogius_PN : PN;
Andes_PN : PN;
angustiare_V : V;
angustia_N : N;
animadvertere_V : V;
animus_N : N;
annuus_A : A;
ante_Adv : Adv;
ante_Prep : Prep;
antea_Adv : Adv;
antecedere_V : V;
antemna_N : N;
anteponere_V : V;
antiquitus_Adv : Adv;
antiquus_A : A;
aperire_V : V;
apertare_V : V;
appellare_V : V;
Aprilis_PN : PN;
aptus_A : A;
apud_Prep : Prep;
aquatio_N : N;
aquila_N : N;
Aquileia_PN : PN;
Aquitanus_N : N;
Aquitania_PN : PN;
Arar_PN : PN;
arbitrari_V : V;
arbitrium_N : N;
arcessere_V : V;
arduus_A : A;
aries_N : N;
Ariovistus_PN : PN;
armatus_A : A;
arma_N : N;
armamentum_N : N;
armare_V : V;
armatura_N : N;
armus_N : N;
arroganter_Adv : Adv;
arrogantia_N : N;
artus_A : A;
Arverni_PN : PN;
arx_N : N;
ascendere_V : V;
at_Conj : Conj;
atque_Conj : Conj ;
Atrebates_PN : PN;
attingere_V : V;
attribuere_V : V;
Atuatuci_PN : PN;
auctor_N : N;
auctorare_V : V;
auctoritas_N : N;
auctus_A : A;
audacter_Adv : Adv;
audax_A : A;
audere_V : V;
audire_V : V;
auditio_N : N;
augere_V : V;
Aulerci_PN : PN;
Auriga_PN : PN;
Aurunculeius_PN : PN;
Ausci_PN : PN;
aut_Conj : Conj;
autem_Conj : Conj;
auxiliare_V : V;
auxilium_N : N;
avaritia_N : N;
avertere_V : V;
avus_N : N;
Axona_PN : PN;
baculus_N : N;
Baleares_PN : PN;
barbarus_A : A;
barbarus_N : N;
batavus_A : A;
Belgae_PN : PN;
bellare_V : V;
bellicosus_A : A;
Bellovaci_PN : PN;
bellum_N : N;
bellus_A : A;
bene_Adv : Adv;
beneficium_N : N;
Bibrax_PN : PN;
biduum_N : N;
biduus_A : A;
biennis_A : A;
biennium_N : N;
binus_A : A;
bipedalis_A : A;
bipertitus_A :A;
bis_Adv : Adv;
Biturix_PN : PN;
-- boc ???
Boduognatus_PN : PN;
Boi_PN : PN;
bonitas_N : N;
bracchium_N : N;
Bratuspantium_PN : PN;
brevi_Adv : Adv;
breviare_V : V;
brevis_A : A;
brevitas_N : N;
Britannia_PN : PN;
britannus_A : A;
Brutus_PN : PN;
cadaver_N : N;
cadere_V : V;
Caesar_PN : PN;
caespes_N : N;
calamitas_N : N;
calare_V : V;
calo_N : N;
campus_N : N;
capere_V : V;
captivus_A : A;
captivus_N : N;
captus_N : N;
carina_N : N;
carpere_V : V;
carrus_N : N;
castellum_N : N;
castra_N : N;
casus_N : N;
catena_N : N;
causa_N : N;
causa_Prep : Prep; -- Postposition
cavare_V : V;
cavere_V : V;
cedere_V : V;
celare_V : V;
celer_A : A;
celeritas_N : N;
celeriter_Adv : Adv;
censere_V : V;
census_N : N;
centuriare_V : V;
centurio_N : N;
cernere_V : V;
certare_V : V;
certamen_N : N;
certus_A : A;
ceterus_A : A;
cibarius_A : A;
cibus_N : N;
ciere_V : V;
cingere_V : V;
circinare_V : V;
circinus_N : N;
circiter_Adv : Adv;
circiter_Prep : Prep;
circuitus_N : N;
circum_Adv : Adv;
circum_Prep : Prep;
circumdare_V : V;
circumducere_V : V;
circumiectus_A : A;
circumire_V : V;
circummunire_V : V;
circumsistere_1_V : V;
-- circumsistere_2_V : V;
circumvenire_V : V;
cis_Prep : Prep;
citare_V : V;
citer_A : A;
citra_Adv : Adv;
citus_A : A;
civitas_N : N;
colere_V : V;
conferre_V : V;
---
conspicere_V : V;
conspirare_V : V;
constanter_Adv : Adv;
constantia_N : N;
constare_V : V;
-- consternare_V : V;
consternere_V : V;
constituere_V : V;
constitutum_N : N;
consuere_V : V;
consuescere_V : V;
consuetudo_N : N;
consul_N : N;
consulatus_N : N;
consulere_V : V;
consultare_V : V;
consultum_N : N;
contemptio_N : N;
contemptus_A : A;
contemptus_N : N;
contendere_V : V;
contentio_N : N;
contexere_V : V;
continens_N : N;
continenter_Adv : Adv;
continere_V2 : V2;
contingere_V : V;
continuatio_N : N;
continuus_A : A;
contra_Adv : Adv;
contrahere_V2 : V2;
contrarius_A : A;
contumelia_N : N;
convallis_N : N;
convenire_V : V;
conversare_V : V;
convertere_V : V;
convincere_V : V;
convocare_V : V;
cooriri_V : V;
copia_N : N;
copiosus_A : A;
copula_N : N;
cora_N : N;
corona_N : N;
corpus_N : N;
cos_N : N;
cotidianus_A : A;
cotidie_Adv : Adv;
Cotta_PN : PN;
crassitudo_N : N;
Crassus_PN : PN;
cratis_N : N;
creare_V : V;
creber_A : A;
credere_V : V;
cremare_V : V;
crescere_V : V;
Creta_N : N;
cruciare_V : V;
cruciatus_N : N;
crudelitas_N : N;
crudeliter_Adv : Adv;
culmen_N : N;
culpa_N : N;
cultura_N : N;
cultus_N : N;
cum_Prep : Prep;
cunctari_V : V;
cunctatio_N : N;
cunctus_A : A;
cuniculus_N : N;
cupere_V : V;
cupiditas_N : N;
cupidus_A : A;
cur_Adv : Adv;
cura_N : N;
curare_V : V;
currere_V : V;
currus_N : N;
custodia_N : N;
damnare_V : V;
damnatus_A : A;
dare_V : V;
datum_N : N;
de_Prep : Prep;
debere_VV : VV;
ducere_V : V;
equitare_V : V;
ferre_V : V;
iacere_V : V;
ire_V : V;
ne_an_Conj : Conj;
nonne_an_Conj : Conj;
num_an_Conj : Conj;
oriri_V : V;
qui_IP : IP;
sistere_1_V : V;
sistere_2_V : V;
specere_V : V;
stare_V : V;
statuere_V : V;
tenere_V2 : V2;
texere_V : V;
trahere_V2 : V2;
utrum_an_Conj : Conj;
venire_V : V;
vertere_V : V;
vincere_V : V;
vocare_V : V;
}

View File

@@ -0,0 +1,28 @@
concrete ExtraLexiconLat of ExtraLexiconLatAbs = CatLat ** open ParadigmsLat in {
lin
friend_Fem_N = mkN "amica" ; -- -i/-ae m./f. (Langenscheidts)
baby_Fem_N = mkN "infans" "infantis" feminine ; -- Ranta; -antis m./f. (Langenscheidts)
blue_Var_A = mkA "caeruleus" ; -- 3 (Langenscheidts)
boss_Fem_N = mkN "dux" "ducis" feminine ; -- ducis m./f. (Langenscheidts)
bread_Neutr_N = mkN "pane" "panis" neuter ; -- -is m./n. (Langenscheidts)
cat_Var_N = mkN "felis" "felis" feminine ; -- -is f. (Langenscheidts)
cousin_Fem_N = mkN "consobrina" ; -- -i/-ae m./f. (Langenscheidts)
cow_Fem_N = mkN "bos" "bovis" feminine ; -- bovis (gen. pl. boum, dat./abl. pl. bobus/bubus) m./f. (Langenscheidts)
dog_Fem_N = mkN "canis" "canis" feminine ; -- -is m./f. (Langenscheidts)
enemy_Fem_N = mkN "hostis" "hostis" feminine ; -- -is m./f. (Langenscheidts)
policeman_Fem_N = mkN "custos" "custodis" feminine ; -- -odis m./f. (Langenscheidts)
priest_Fem_N = mkN "sacerdos" "sacerdotis" feminine ; -- -dotis m./f. (Langenscheidts)
snake_Fem_N = mkN "serpens" "serpentis" feminine ; -- -entis m./f. (Langenscheidts)
student_Fem_N = mkN "discipula" ; -- -i/-ae m./f. (Langenscheidts)
switch8on_Var_V2 = mkV2 (mkV "exstinguere" ) ; -- -ingo, -inxi, -inctum 3 (Langenscheidts)
bark_Fem_N = mkN "cortex" "corticis" feminine ; -- -icis m./(f.) (Langenscheidts)
blood_Var_N = mkN "sangis" "sanginis" masculine ; -- -inis m. (Langenscheidts)
day_Fem_N = mkN "dies" "diei" feminine ; -- -ei m./f. (Langenscheidts)
horn_Var_N = mkN "cornu" "cornus" neuter ; -- -us n. (Langenscheidts)
liver_Var_N = mkN "iocur" "iocineris" neuter ; -- iecoris/iocineris n. (Langenscheidts)
louse_Fem_N = mkN "pedis" "pedis" feminine ; -- -is m./f. (Langenscheidts)
nose_Neutr_N = mkN "nasum" ; -- -i m./n. (Langenscheidts)
rope_Fem_N = mkN "funis" "funis" feminine ; -- -is m.(/f.) (Langenscheidts)
salt_Neutr_N = mkN "sal" "salis" neuter ; -- salis m./n. (Langenscheidts)
stick_Neutr_N = mkN "baculum" ; -- -i n./m.
};

View File

@@ -0,0 +1,29 @@
abstract ExtraLexiconLatAbs = Cat, Lexicon, ExtraLexCaesarAbs ** {
fun
-- Ambigous entries from main lexicon
friend_Fem_N : N ;
baby_Fem_N : N ;
blue_Var_A : A ;
boss_Fem_N : N ;
bread_Neutr_N : N ;
cat_Var_N : N ;
cousin_Fem_N : N ;
cow_Fem_N : N ;
dog_Fem_N : N ;
enemy_Fem_N : N ;
policeman_Fem_N : N ;
priest_Fem_N : N ;
snake_Fem_N : N ;
student_Fem_N : N ;
switch8on_Var_V2 : V2 ;
bark_Fem_N : N ;
blood_Var_N : N ;
day_Fem_N : N ;
horn_Var_N : N ;
liver_Var_N : N ;
louse_Fem_N : N ;
nose_Neutr_N : N ;
rope_Fem_N : N ;
salt_Neutr_N : N ;
stick_Neutr_N : N ;
};

View File

@@ -1 +1,155 @@
-- temporary definitions to enable the compilation of RGL API -- temporary definitions to enable the compilation of RGL API
oper AdNum : AdN -> Card -> Card = notYet "AdNum" ;
oper AdvCN : CN -> Adv -> CN = notYet "AdvCN" ;
oper AdvIAdv : IAdv -> Adv -> IAdv = notYet "AdvIAdv" ;
oper AdvIP : IP -> Adv -> IP = notYet "AdvIP" ;
oper AdvSlash : ClSlash -> Adv -> ClSlash = notYet "AdvSlash" ;
oper BaseRS : RS -> RS -> ListRS = notYet "BaseRS" ;
oper BaseS : S -> S -> ListS = notYet "BaseS" ;
oper CleftAdv : Adv -> S -> Cl = notYet "CleftAdv" ;
oper CleftNP : NP -> RS -> Cl = notYet "CleftNP" ;
oper CompIP : IP -> IComp = notYet "CompIP" ;
oper ComplN2 : N2 -> NP -> CN = notYet "ComplN2" ;
oper ComplN3 : N3 -> NP -> N2 = notYet "ComplN3" ;
oper ConjRS : Conj -> ListRS -> RS = notYet "ConjRS" ;
oper ConjS : Conj -> ListS -> S = notYet "ConjS" ;
oper ConsRS : RS -> ListRS -> ListRS = notYet "ConsRS" ;
oper ConsS : S -> ListS -> ListS = notYet "ConsS" ;
oper DetQuantOrd : Quant -> Num -> Ord -> Det = notYet "DetQuantOrd" ;
oper EmbedQS : QS -> SC = notYet "EmbedQS" ;
oper EmbedS : S -> SC = notYet "EmbedS" ;
oper EmbedVP : VP -> SC = notYet "EmbedVP" ;
oper ExistIP : IP -> QCl = notYet "ExistIP" ;
oper ExistNP : NP -> Cl = notYet "ExistNP" ;
oper FunRP : Prep -> NP -> RP -> RP = notYet "FunRP" ;
oper GenericCl : VP -> Cl = notYet "GenericCl" ;
oper IdetCN : IDet -> CN -> IP = notYet "IdetCN" ;
oper IdetIP : IDet -> IP = notYet "IdetIP" ;
oper IdetQuant : IQuant -> Num -> IDet = notYet "IdetQuant" ;
oper IdRP : RP = notYet "IdRP" ;
oper ImpersCl : VP -> Cl = notYet "ImpersCl" ;
oper ImpPl1 : VP -> Utt = notYet "ImpPl1" ;
oper ImpVP : VP -> Imp = notYet "ImpVP" ;
oper NumDigits : Digits -> Card = notYet "NumDigits" ;
oper OrdDigits : Digits -> Ord = notYet "OrdDigits" ;
oper OrdSuperl : A -> Ord = notYet "OrdSuperl" ;
oper PossPron : Pron -> Quant = notYet "PossPron" ;
oper pot1 : Digit -> Sub100 = notYet "pot1" ;
oper pot110 : Sub100 = notYet "pot110" ;
oper pot111 : Sub100 = notYet "pot111" ;
oper pot1plus : Digit -> Sub10 -> Sub100 = notYet "pot1plus" ;
oper pot1to19 : Digit -> Sub100 = notYet "pot1to19" ;
oper pot2 : Sub10 -> Sub1000 = notYet "pot2" ;
oper pot2plus : Sub10 -> Sub100 -> Sub1000 = notYet "pot2plus" ;
oper pot3 : Sub1000 -> Sub1000000 = notYet "pot3" ;
oper pot3plus : Sub1000 -> Sub1000 -> Sub1000000 = notYet "pot3plus" ;
oper PPartNP : NP -> V2 -> NP = notYet "PPartNP" ;
oper PredSCVP : SC -> VP -> Cl = notYet "PredSCVP" ;
oper PrepIP : Prep -> IP -> IAdv = notYet "PrepIP" ;
oper ProgrVP : VP -> VP = notYet "ProgrVP" ;
oper QuestCl : Cl -> QCl = notYet "QuestCl" ;
oper QuestIAdv : IAdv -> Cl -> QCl = notYet "QuestIAdv" ;
oper QuestIComp : IComp -> NP -> QCl = notYet "QuestIComp" ;
oper QuestSlash : IP -> ClSlash -> QCl = notYet "QuestSlash" ;
oper QuestVP : IP -> VP -> QCl = notYet "QuestVP" ;
oper ReflVP : VPSlash -> VP = notYet "ReflVP" ;
oper RelCl : Cl -> RCl = notYet "RelCl" ;
oper RelCN : CN -> RS -> CN = notYet "RelCN" ;
oper RelSlash : RP -> ClSlash -> RCl = notYet "RelSlash" ;
oper RelVP : RP -> VP -> RCl = notYet "RelVP" ;
oper SentCN : CN -> SC -> CN = notYet "SentCN" ;
oper SlashV2S : V2S -> S -> VPSlash = notYet "SlashV2S" ;
oper SlashV2V : V2V -> VP -> VPSlash = notYet "SlashV2V" ;
oper SlashV2VNP : V2V -> NP -> VPSlash -> VPSlash = notYet "SlashV2VNP" ;
oper SlashVS : NP -> VS -> SSlash -> ClSlash = notYet "SlashVS" ;
oper SlashVV : VV -> VPSlash -> VPSlash = notYet "SlashVV" ;
oper Use2N3 : N3 -> N2 = notYet "Use2N3" ;
oper UseQCl : Temp -> Pol -> QCl -> QS = notYet "UseQCl" ;
oper UseRCl : Temp -> Pol -> RCl -> RS = notYet "UseRCl" ;
oper UseSlash : Temp -> Pol -> ClSlash -> SSlash = notYet "UseSlash" ;
oper AddAdvQVP : QVP -> IAdv -> QVP = notYet "AddAdvQVP" ;
oper AdjDAP : DAP -> AP -> DAP = notYet "AdjDAP" ;
oper AdNum : AdN -> Card -> Card = notYet "AdNum" ;
oper AdvCN : CN -> Adv -> CN = notYet "AdvCN" ;
oper AdvIAdv : IAdv -> Adv -> IAdv = notYet "AdvIAdv" ;
oper AdvIP : IP -> Adv -> IP = notYet "AdvIP" ;
oper AdvQVP : VP -> IAdv -> QVP = notYet "AdvQVP" ;
oper AdvSlash : ClSlash -> Adv -> ClSlash = notYet "AdvSlash" ;
oper BaseAdV : AdV -> AdV -> ListAdV = notYet "BaseAdV" ;
oper BaseCN : CN -> CN -> ListCN = notYet "BaseCN" ;
oper BaseDAP : DAP -> DAP -> ListDAP = notYet "BaseDAP" ;
oper BaseIAdv : IAdv -> IAdv -> ListIAdv = notYet "BaseIAdv" ;
oper BaseRS : RS -> RS -> ListRS = notYet "BaseRS" ;
oper BaseS : S -> S -> ListS = notYet "BaseS" ;
oper CompIP : IP -> IComp = notYet "CompIP" ;
oper ComplN2 : N2 -> NP -> CN = notYet "ComplN2" ;
oper ComplN3 : N3 -> NP -> N2 = notYet "ComplN3" ;
oper ComplSlashIP : VPSlash -> IP -> QVP = notYet "ComplSlashIP" ;
oper ConjAdV : Conj -> ListAdV -> AdV = notYet "ConjAdV" ;
oper ConjCN : Conj -> ListCN -> CN = notYet "ConjCN" ;
oper ConjDet : Conj -> ListDAP -> Det = notYet "ConjDet" ;
oper ConjIAdv : Conj -> ListIAdv -> IAdv = notYet "ConjIAdv" ;
oper ConjRS : Conj -> ListRS -> RS = notYet "ConjRS" ;
oper ConjS : Conj -> ListS -> S = notYet "ConjS" ;
oper ConsAdV : AdV -> ListAdV -> ListAdV = notYet "ConsAdV" ;
oper ConsCN : CN -> ListCN -> ListCN = notYet "ConsCN" ;
oper ConsDAP : DAP -> ListDAP -> ListDAP = notYet "ConsDAP" ;
oper ConsIAdv : IAdv -> ListIAdv -> ListIAdv = notYet "ConsIAdv" ;
oper ConsRS : RS -> ListRS -> ListRS = notYet "ConsRS" ;
oper ConsS : S -> ListS -> ListS = notYet "ConsS" ;
oper CountNP : Det -> NP -> NP = notYet "CountNP" ;
oper DetDAP : Det -> DAP = notYet "DetDAP" ;
oper DetQuantOrd : Quant -> Num -> Ord -> Det = notYet "DetQuantOrd" ;
oper EmbedQS : QS -> SC = notYet "EmbedQS" ;
oper EmbedS : S -> SC = notYet "EmbedS" ;
oper EmbedVP : VP -> SC = notYet "EmbedVP" ;
oper ExtAdvS : Adv -> S -> S = notYet "ExtAdvS" ;
oper ExtAdvVP : VP -> Adv -> VP = notYet "ExtAdvVP" ;
oper IdetCN : IDet -> CN -> IP = notYet "IdetCN" ;
oper IdetIP : IDet -> IP = notYet "IdetIP" ;
oper IdetQuant : IQuant -> Num -> IDet = notYet "IdetQuant" ;
oper ImpVP : VP -> Imp = notYet "ImpVP" ;
oper NumDigits : Digits -> Card = notYet "NumDigits" ;
oper OrdDigits : Digits -> Ord = notYet "OrdDigits" ;
oper OrdNumeralSuperl : Numeral -> A -> Ord = notYet "OrdNumeralSuperl" ;
oper OrdSuperl : A -> Ord = notYet "OrdSuperl" ;
oper PartNP : CN -> NP -> CN = notYet "PartNP" ;
oper PossNP : CN -> NP -> CN = notYet "PossNP" ;
oper PossPron : Pron -> Quant = notYet "PossPron" ;
oper pot1 : Digit -> Sub100 = notYet "pot1" ;
oper pot110 : Sub100 = notYet "pot110" ;
oper pot111 : Sub100 = notYet "pot111" ;
oper pot1plus : Digit -> Sub10 -> Sub100 = notYet "pot1plus" ;
oper pot1to19 : Digit -> Sub100 = notYet "pot1to19" ;
oper pot2 : Sub10 -> Sub1000 = notYet "pot2" ;
oper pot2plus : Sub10 -> Sub100 -> Sub1000 = notYet "pot2plus" ;
oper pot3 : Sub1000 -> Sub1000000 = notYet "pot3" ;
oper pot3plus : Sub1000 -> Sub1000 -> Sub1000000 = notYet "pot3plus" ;
oper PPartNP : NP -> V2 -> NP = notYet "PPartNP" ;
oper PredSCVP : SC -> VP -> Cl = notYet "PredSCVP" ;
oper PrepIP : Prep -> IP -> IAdv = notYet "PrepIP" ;
oper QuestCl : Cl -> QCl = notYet "QuestCl" ;
oper QuestIAdv : IAdv -> Cl -> QCl = notYet "QuestIAdv" ;
oper QuestIComp : IComp -> NP -> QCl = notYet "QuestIComp" ;
oper QuestQVP : IP -> QVP -> QCl = notYet "QuestQVP" ;
oper QuestSlash : IP -> ClSlash -> QCl = notYet "QuestSlash" ;
oper QuestVP : IP -> VP -> QCl = notYet "QuestVP" ;
oper ReflVP : VPSlash -> VP = notYet "ReflVP" ;
oper RelCN : CN -> RS -> CN = notYet "RelCN" ;
oper RelS : S -> RS -> S = notYet "RelS" ;
oper SentCN : CN -> SC -> CN = notYet "SentCN" ;
oper SlashV2S : V2S -> S -> VPSlash = notYet "SlashV2S" ;
oper SlashV2V : V2V -> VP -> VPSlash = notYet "SlashV2V" ;
oper SlashV2VNP : V2V -> NP -> VPSlash -> VPSlash = notYet "SlashV2VNP" ;
oper SlashVS : NP -> VS -> SSlash -> ClSlash = notYet "SlashVS" ;
oper SlashVV : VV -> VPSlash -> VPSlash = notYet "SlashVV" ;
oper SSubjS : S -> Subj -> S -> S = notYet "SSubjS" ;
oper Use2N3 : N3 -> N2 = notYet "Use2N3" ;
oper Use3N3 : N3 -> N2 = notYet "Use3N3" ;
oper UseQCl : Temp -> Pol -> QCl -> QS = notYet "UseQCl" ;
oper UseRCl : Temp -> Pol -> RCl -> RS = notYet "UseRCl" ;
oper UseSlash : Temp -> Pol -> ClSlash -> SSlash = notYet "UseSlash" ;
oper VPSlashPrep : VP -> Prep -> VPSlash = notYet "VPSlashPrep" ;
}

View File

@@ -0,0 +1,5 @@
resource MissingTranslateLat = open GrammarLat, Prelude in {
-- temporary definitions to enable the compilation of RGL Translate
}

View File

@@ -20,6 +20,7 @@ lin
-- a = agrgP3 Sg cn.g -- a = agrgP3 Sg cn.g
-- } ; -- } ;
-- --
SymbS sy = { s = \\_ => sy.s ; neg = \\_ => "" ; o = \\_ => "" ; p = PPos ; sadv = ss "" ; t = TPres ; v = \\_ => "" } ; SymbS sy = { s = \\_ => sy.s ; neg = \\_ => "" ; o = \\_ => "" ; p = PPos ; sadv = ss "" ; t = TPres ; v = \\_ => "" } ;
-- --
-- SymbNum sy = {s = sy.s ; n = Pl ; hasCard = True} ; -- SymbNum sy = {s = sy.s ; n = Pl ; hasCard = True} ;

View File

@@ -1,33 +0,0 @@
Aarne Ranta 2017-01-19
A script for building a Latin dictionary from William Whitaker's Words
Source: http://archives.nd.edu/whitaker/dictpage.zip
See also: https://en.wikipedia.org/wiki/William_Whitaker's_Words
License: BSD for the script. Unknown for the source, therefore not redistributed here.
Usage:
runghc MkLatin.hs
Output:
DictLatAbs.gf
DictLat.gf
Uses Herbert Lange's RGL implementation of Latin (darcs version of 2017-01-19 with ParadigmsLat.mkAdv added by AR)
Coverage of first version: 90%; 3938 missing out of 39227 entries. Marked with leading "--"
Reasons for uncovered entries
- uncommon category (e.g. structural words)
- missing case in ParadigmsLat.gf, e.g. deponent verbs
Matching for adjectives (A) uncertain, because we only use ParadigmsLat.gf.mkA : Str -> A
Verb subcat information is uncertain, too. It is based on the src's TRANS and INTRANS flags.

View File

@@ -1,6 +1,8 @@
concrete DictLav of DictLavAbs = CatLav ** open ResLav, ParadigmsLav in { concrete DictLav of DictLavAbs = CatLav ** open ResLav, ParadigmsLav in {
flags coding = utf8 ; flags
optimize=values ;
coding = utf8 ;
lin 'abarkasis_N' = mkN "abarkasis" masculine D2 ; lin 'abarkasis_N' = mkN "abarkasis" masculine D2 ;
lin 'abate_N' = mkN "abate" feminine D5 ; lin 'abate_N' = mkN "abate" feminine D5 ;
@@ -3030,7 +3032,6 @@ lin 'apsekojums_N' = mkN "apsekojums" masculine D1 ;
lin 'apsekot_V' = mkV "apsekot" second_conjugation ; lin 'apsekot_V' = mkV "apsekot" second_conjugation ;
lin 'apsērsnot_V' = mkV "apsērsnot" second_conjugation ; lin 'apsērsnot_V' = mkV "apsērsnot" second_conjugation ;
lin 'apsērst_V' = mkV "apsērs" "apsērš" "apsērs" ; lin 'apsērst_V' = mkV "apsērs" "apsērš" "apsērs" ;
lin 'apsēst_V' = mkV "apsēst" ;
lin 'apsēstība_N' = mkN "apsēstība" feminine D4 ; lin 'apsēstība_N' = mkN "apsēstība" feminine D4 ;
lin 'apsēsties_V' = mkV "apsēs" "apsēž,apsēst" "apsēd" ; lin 'apsēsties_V' = mkV "apsēs" "apsēž,apsēst" "apsēd" ;
lin 'apsēt_V' = mkV "apsē" "apsēj" "apsēj" ; lin 'apsēt_V' = mkV "apsē" "apsēj" "apsēj" ;
@@ -39719,7 +39720,6 @@ lin 'piesārņojums_N' = mkN "piesārņojums" masculine D1 ;
lin 'piesārņot_V' = mkV "piesārņot" second_conjugation ; lin 'piesārņot_V' = mkV "piesārņot" second_conjugation ;
lin 'piesārņotība_N' = mkN "piesārņotība" feminine D4 ; lin 'piesārņotība_N' = mkN "piesārņotība" feminine D4 ;
lin 'piesārņoties_V' = mkV "piesārņoties" second_conjugation ; lin 'piesārņoties_V' = mkV "piesārņoties" second_conjugation ;
lin 'piesārst_V' = mkV "piesārst" ;
lin 'piesārtums_N' = mkN "piesārtums" masculine D1 ; lin 'piesārtums_N' = mkN "piesārtums" masculine D1 ;
lin 'piesātinājums_N' = mkN "piesātinājums" masculine D1 ; lin 'piesātinājums_N' = mkN "piesātinājums" masculine D1 ;
lin 'piesātināt_V' = mkV "piesātināt" third_conjugation ; lin 'piesātināt_V' = mkV "piesātināt" third_conjugation ;

View File

@@ -3030,7 +3030,6 @@ fun 'apsekojums_N' : N ;
fun 'apsekot_V' : V ; fun 'apsekot_V' : V ;
fun 'apsērsnot_V' : V ; fun 'apsērsnot_V' : V ;
fun 'apsērst_V' : V ; fun 'apsērst_V' : V ;
fun 'apsēst_V' : V ;
fun 'apsēstība_N' : N ; fun 'apsēstība_N' : N ;
fun 'apsēsties_V' : V ; fun 'apsēsties_V' : V ;
fun 'apsēt_V' : V ; fun 'apsēt_V' : V ;
@@ -39719,7 +39718,6 @@ fun 'piesārņojums_N' : N ;
fun 'piesārņot_V' : V ; fun 'piesārņot_V' : V ;
fun 'piesārņotība_N' : N ; fun 'piesārņotība_N' : N ;
fun 'piesārņoties_V' : V ; fun 'piesārņoties_V' : V ;
fun 'piesārst_V' : V ;
fun 'piesārtums_N' : N ; fun 'piesārtums_N' : N ;
fun 'piesātinājums_N' : N ; fun 'piesātinājums_N' : N ;
fun 'piesātināt_V' : V ; fun 'piesātināt_V' : V ;

View File

@@ -3,23 +3,23 @@ concrete AdjectivePes of Adjective = CatPes ** open ResPes, Prelude in {
flags coding = utf8; flags coding = utf8;
lin lin
PositA a = a ; PositA a = a ** {s = a.s ! Positive} ;
UseComparA a = a ; UseComparA a = a ** {s = a.s ! Comparative} ;
ComparA a np = a ** { ComparA a np = a ** {
s = \\m => a.s ! m ++ "تر" ++ "از" ++ np2str np ; s = \\m => a.s ! Comparative ! m ++ "تر" ++ "از" ++ np2str np ;
adv = a.adv ++ "تر" ++ "از" ++ np2str np ; adv = a.adv ++ "تر" ++ "از" ++ np2str np ;
} ; } ;
---- $SuperlA$ belongs to determiner syntax in $Noun$. ---- $SuperlA$ belongs to determiner syntax in $Noun$.
ComplA2 a np = a ** { ComplA2 a np = a ** {
s = \\m => np2str np ++ a.c2 ++ a.s ! m ; s = \\m => a.c2 ++ np2str np ++ a.s ! Positive ! m ;
adv = np2str np ++ a.c2 ++ a.adv adv = np2str np ++ a.c2 ++ a.adv
} ; } ;
ReflA2 a = a ** { ReflA2 a = a ** {
s = \\m => a.s ! m ++ reflPron ! defaultAgr ! Bare ; ---- need to be fixed s = \\m => a.s ! Positive ! m ++ reflPron ! defaultAgr ! Bare ; ---- s needs to be an inflection table from Agr to string, to choose the right reflexive pronoun
adv = a.adv ++ reflPron ! defaultAgr ! Bare adv = a.adv ++ reflPron ! defaultAgr ! Bare
} ; } ;
@@ -33,7 +33,7 @@ concrete AdjectivePes of Adjective = CatPes ** open ResPes, Prelude in {
adv = ada.s ++ ap.adv ; adv = ada.s ++ ap.adv ;
} ; } ;
UseA2 a = a ; UseA2 = PositA ;
CAdvAP cadv ap np = ap ** { CAdvAP cadv ap np = ap ** {
s = \\m => cadv.s ++ np2str np ++ ap.s ! m ; s = \\m => cadv.s ++ np2str np ++ ap.s ! m ;
@@ -43,7 +43,8 @@ concrete AdjectivePes of Adjective = CatPes ** open ResPes, Prelude in {
AdjOrd ord = { AdjOrd ord = {
s = \\_ => ord.s ; s = \\_ => ord.s ;
adv = ord.s ; adv = ord.s ;
isPre = ord.isPre isPre = ord.isPre ;
afterPrefix = False ;
} ; } ;
AdvAP ap adv = ap ** { AdvAP ap adv = ap ** {

View File

@@ -11,12 +11,17 @@ concrete AdverbPes of Adverb = CatPes ** open ResPes, Prelude in {
s = a.adv ++ cadv.p ++ cadv.s ++ s.s ! Indic; s = a.adv ++ cadv.p ++ cadv.s ++ s.s ! Indic;
} ; } ;
PrepNP prep np = {s = prep.s ++ np.s ! Bare } ; PrepNP prep np = {s = appComp prep np.s} ;
AdAdv ada adv = { s = ada.s ++ adv.s} ; AdAdv ada adv = { s = ada.s ++ adv.s} ;
-- SubjS = cc2 ; -- SubjS = cc2 ;
SubjS sub snt = {s = sub.s ++ "که" ++ snt.s ! sub.compl} ; SubjS sub snt = {
s = case sub.relpron of {
Ke => sub.s ++ conjThat ++ snt.s ! sub.compl ;
Ance => "آنچه" ++ snt.s ! sub.compl }
} ;
AdnCAdv cadv = {s = cadv.s ++ "از"} ; AdnCAdv cadv = {s = cadv.s ++ "از"} ;
} }

View File

@@ -18,7 +18,7 @@ concrete CatPes of Cat = CommonX ** open ResPes, Prelude in {
vp : ResPes.TAnt => Polarity => Order => Str ; vp : ResPes.TAnt => Polarity => Order => Str ;
c2 : ResPes.Compl c2 : ResPes.Compl
} ; } ;
Imp = {s : Polarity => ImpForm => Str} ; Imp = {s : Polarity => Number => Str} ;
---- Question ---- Question
QCl = {s : ResPes.TAnt => Polarity => Str} ; QCl = {s : ResPes.TAnt => Polarity => Str} ;
@@ -46,7 +46,7 @@ concrete CatPes of Cat = CommonX ** open ResPes, Prelude in {
---- Adjective ---- Adjective
AP = ResPes.Adjective ; AP = ResPes.AP ;
---- Noun ---- Noun
@@ -71,12 +71,18 @@ concrete CatPes of Cat = CommonX ** open ResPes, Prelude in {
Conj = {s1,s2 : Str ; n : Number} ; Conj = {s1,s2 : Str ; n : Number} ;
-----b Conj = {s : Str ; n : Number} ; -----b Conj = {s : Str ; n : Number} ;
-----b DConj = {s1,s2 : Str ; n : Number} ; -----b DConj = {s1,s2 : Str ; n : Number} ;
Subj = {s : Str ; compl : VVForm} ; -- subjunctive or indicative Subj = {
s : Str ;
compl : VVForm ; -- subjunctive or indicative
relpron : RelPron -- choose between که and آنچه
} ;
VS = ResPes.Verb ** {compl : VVForm} ; -- subjunctive or indicative
V2S = ResPes.Verb ** {c2 : Compl ; compl : VVForm} ;
Prep = Compl ; Prep = Compl ;
---- Open lexical classes, e.g. Lexicon ---- Open lexical classes, e.g. Lexicon
V, VS, VQ = ResPes.Verb ; V, VQ = ResPes.Verb ;
V2, VA, V2A, V2Q, V2S = ResPes.Verb ** {c2 : Compl} ; V2, VA, V2A, V2Q = ResPes.Verb ** {c2 : Compl} ;
V3 = ResPes.Verb ** {c2, c3 : Compl} ; V3 = ResPes.Verb ** {c2, c3 : Compl} ;
VV = ResPes.VV ; VV = ResPes.VV ;
V2V = ResPes.VV ** {c2 : Compl} ; V2V = ResPes.VV ** {c2 : Compl} ;
@@ -85,8 +91,8 @@ concrete CatPes of Cat = CommonX ** open ResPes, Prelude in {
N = ResPes.Noun ; N = ResPes.Noun ;
N2 = ResPes.Noun ** {c2 : Str ; compl : Str}; -- when N3 is made to N2, need to retain compl N2 = ResPes.Noun ** {c2 : Compl ; compl : Str}; -- when N3 is made to N2, need to retain compl
N3 = ResPes.Noun ** {c2 : Str ; c3 : Str} ; N3 = ResPes.Noun ** {c2 : Compl ; c3 : Compl} ;
PN = {s : Str ; animacy : Animacy} ; PN = {s : Str ; animacy : Animacy} ;
} }

View File

@@ -35,11 +35,25 @@ concrete ConjunctionPes of Conjunction =
BaseAP x y = y ** twoTable Mod x y ; BaseAP x y = y ** twoTable Mod x y ;
ConsAP xs x = xs ** consrTable Mod comma xs x ; -- Table3 Number Gender Case comma xs x ;-- ** {isPre = andB xs.isPre x.isPre} ; ConsAP xs x = xs ** consrTable Mod comma xs x ; -- Table3 Number Gender Case comma xs x ;-- ** {isPre = andB xs.isPre x.isPre} ;
BaseCN cn1 cn2 = leanCN cn1 ** twoTable2 Number Mod (leanCN cn1) (leanCN cn2) ;
ConsCN cn cns = leanCN cn ** consrTable2 Number Mod comma (leanCN cn) cns ;
ConjCN conj cns = cns ** conjunctDistrTable2 Number Mod conj cns ;
lincat lincat
[S] = {s1,s2 : VVForm => Str} ; [S] = {s1,s2 : VVForm => Str} ;
[Adv] = {s1,s2 : Str} ; [Adv] = {s1,s2 : Str} ;
[NP] = {s1,s2 : Mod => Str} ** BaseNP ; [NP] = {s1,s2 : Mod => Str} ** BaseNP ;
[AP] = {s1,s2 : Mod => Str ; adv : Str ; isPre : Bool} ; [CN] = {s1,s2 : Number => Mod => Str ;
animacy : Animacy ;
isCmpd : CmpdStatus;
hasAdj : Bool ;
compl : Number => Str} ;
[AP] = {s1,s2 : Mod => Str ; adv : Str ; isPre,afterPrefix : Bool} ;
[RS] = {s1,s2 : Agr => Str ; rp : RelPron => Str} ; [RS] = {s1,s2 : Agr => Str ; rp : RelPron => Str} ;
oper
leanCN : CN -> CN = \cn -> cn ** {
compl = \\n => [] ;
s = \\n,m => cn.s ! n ! m ++ cn.compl ! n ;
} ;
} }

View File

@@ -2,15 +2,15 @@
concrete ExtendPes of Extend = concrete ExtendPes of Extend =
CatPes ** ExtendFunctor - [ CatPes ** ExtendFunctor - [
GenNP, ApposNP, ICompAP, AdvIsNP GenNP, ApposNP, ICompAP, AdvIsNP, InOrderToVP, ByVP, AdjAsNP, ComplBareVS
,GerundNP,GerundCN,GerundAdv,EmbedPresPart ,GerundNP,GerundCN,GerundAdv,EmbedPresPart,EmbedSSlash
] ]
with (Grammar=GrammarPes) with (Grammar=GrammarPes)
** open Prelude, ResPes in { ** open Prelude, ResPes in {
lin lin
-- NP -> Quant ; -- this man's -- NP -> Quant ; -- this man's
GenNP np = np ** { GenNP np = makeQuant [] [] Ezafe False ** np ** {
mod = Ezafe ; -- the possessed will get Ezafe mod = Ezafe ; -- the possessed will get Ezafe
s = \\num,cmpd => np2str np -- possesser is unmarked; https://sites.la.utexas.edu/persian_online_resources/language-specific-grammar/ezfe/ s = \\num,cmpd => np2str np -- possesser is unmarked; https://sites.la.utexas.edu/persian_online_resources/language-specific-grammar/ezfe/
} ; } ;
@@ -20,19 +20,41 @@ lin
s = \\m => np1.s ! m ++ np2.s ! m s = \\m => np1.s ! m ++ np2.s ! m
} ; } ;
-- : AP -> NP
AdjAsNP ap = emptyNP ** ap ;
-- : VS -> S -> VP
ComplBareVS vs s = embComp (s.s ! vs.compl) (predV vs) ;
ICompAP ap = {s = "چقدر" ++ ap.s ! Bare} ; ICompAP ap = {s = "چقدر" ++ ap.s ! Bare} ;
-- : VP -> CN ; -- publishing of the document (can get a determiner) -- : VP -> CN ; -- publishing of the document (can get a determiner)
GerundCN vp = useN (indeclN (showVPH Inf defaultAgr vp)) ; GerundCN vp = useN (indeclN (infVP vp)) ;
-- : VP -> NP ; -- publishing the document (by nature definite) -- : VP -> NP ; -- publishing the document (by nature definite)
GerundNP vp = indeclNP (showVPH Inf defaultAgr vp) ; GerundNP vp = indeclNP (infVP vp) ;
-- : VP -> Adv ; -- publishing the document (prepositionless adverb) -- : VP -> Adv ; -- publishing the document (prepositionless adverb)
GerundAdv vp = lin Adv {s = showVPH Inf defaultAgr vp} ; GerundAdv vp = lin Adv {s = infVP vp} ;
-- : VP -> SC ; -- : VP -> SC ;
EmbedPresPart vp = lin SC {s = showVPH Inf defaultAgr vp} ; EmbedPresPart vp = lin SC {s = infVP vp} ;
-- : SSlash -> SC
-- Not optimal: complement with آن should go after subject, but SSlash is already fixed.
-- You can get the more idiomatic word order by using other RGL functions, so it's
-- less critical to tweak this function and SSlash (pretty marginal category). /IL
EmbedSSlash ss = {s = "آنچه" ++ appComp ss.c2 (\\_ => "آن") ++ ss.s ! Indic} ;
-- : Adv -> NP -> Cl -- here is the car / here are the cars -- : Adv -> NP -> Cl -- here is the car / here are the cars
AdvIsNP adv np = mkClause (indeclNP adv.s ** {a = np.a}) (UseComp (CompNP np)) ; AdvIsNP adv np = mkClause (indeclNP adv.s ** {a = np.a}) (UseComp (CompNP np)) ;
-- : VP -> Adv ; -- by publishing the document
ByVP vp = lin Adv {s = with_Prep.s ++ showVPH' VO False VVPres Inf defaultAgr vp } ;
-- : VP -> Adv ; -- (in order) to publish the document
InOrderToVP vp = lin Adv {s = for_Prep.s
++ case vp.lightverb of {
Kardan => showVPH PerfStem defaultAgr <vp ** {s = \\vf => []} : VP> ; -- only show prefix
_ => showVPH PerfStem defaultAgr vp}
} ;
} }

View File

@@ -1,4 +1,4 @@
concrete IdiomPes of Idiom = CatPes ** open Prelude,ParadigmsPes,ResPes in { concrete IdiomPes of Idiom = CatPes ** open Prelude,ParadigmsPes,ResPes,(N=NounPes) in {
flags optimize=all_subs ; flags optimize=all_subs ;
flags coding = utf8; flags coding = utf8;
@@ -17,20 +17,14 @@ lin
ExistNP np = ExistNP np =
mkSClause [] (agrP3 (fromAgr np.a).n) mkSClause [] (agrP3 (fromAgr np.a).n)
(insertComp (\\_ => np2str np) (predV existVerb)) ; (complSlash (predVc existVerb) np) ;
ExistNPAdv np adv =
mkSClause [] (agrP3 (fromAgr np.a).n)
(insertComp (\\_ => np2str np ++ adv.s)
(predV existVerb)
) ;
ExistNPAdv np adv = ExistNP (N.AdvNP np adv) ;
ExistIP ip = ExistIP ip =
let cl = mkSClause ip.s (agrP3 ip.n) (predV beVerb); let cl = mkSClause ip.s (agrP3 ip.n) (predV beVerb);
in {s = \\t,p => cl.s ! t ! p ! ODir}; in {s = \\t,p => cl.s ! t ! p ! ODir};
ProgrVP vp = predProg vp ; ProgrVP vp = predProg vp ;
ImpPl1 vp = let a = agrP1 Pl in ImpPl1 vp = let a = agrP1 Pl in
@@ -39,6 +33,6 @@ lin
{s = "بگذارید" ++ np2str np ++ showVPH (VSubj Pos np.a) np.a vp}; {s = "بگذارید" ++ np2str np ++ showVPH (VSubj Pos np.a) np.a vp};
oper oper
existVerb = mkV "وجود" haveVerb ; existVerb : V2 = mkV2 (mkV "وجود" haveVerb) noPrep ;
} }

View File

@@ -10,7 +10,7 @@ concrete LexiconPes of Lexicon = CatPes **
lin lin
airplane_N = mkN01 "هواپیما" inanimate ; airplane_N = mkN01 "هواپیما" inanimate ;
answer_V2S = mkV2 (compoundV "جواب" giveVerb) "به" False; answer_V2S = mkV2S (mkV2 (compoundV "جواب" giveVerb) "به" False) ;
apartment_N = mkN01 "آپارتمان" inanimate; apartment_N = mkN01 "آپارتمان" inanimate;
apple_N = mkN01 "سیب" inanimate; apple_N = mkN01 "سیب" inanimate;
art_N = mkN01 "هنر" inanimate; art_N = mkN01 "هنر" inanimate;
@@ -65,7 +65,7 @@ concrete LexiconPes of Lexicon = CatPes **
cow_N = mkN01 "گاو" animate; cow_N = mkN01 "گاو" animate;
die_V = mkV "مردن" "میر" ; die_V = mkV "مردن" "میر" ;
dirty_A = mkA "کثیف" ; dirty_A = mkA "کثیف" ;
distance_N3 = (mkN "فاصله" "فواصل" inanimate ) ** {c2="از" ; c3 = "تا"}; distance_N3 = mkN3 (mkN "فاصله" "فواصل" inanimate ) "از" "تا" ;
doctor_N = mkN01 "دکتر" animate; -- has variant "پزشک", but only a doctor in medicine doctor_N = mkN01 "دکتر" animate; -- has variant "پزشک", but only a doctor in medicine
dog_N = mkN01 "سگ" animate; dog_N = mkN01 "سگ" animate;
door_N = mkN01 "در" inanimate; door_N = mkN01 "در" inanimate;
@@ -76,7 +76,7 @@ concrete LexiconPes of Lexicon = CatPes **
enemy_N = mkN02 "دشمن" animate; enemy_N = mkN02 "دشمن" animate;
factory_N = mkN01 "کارخانه" inanimate; factory_N = mkN01 "کارخانه" inanimate;
father_N2 = mkN2 (mkN02 "پدر" animate) []; father_N2 = mkN2 (mkN02 "پدر" animate) [];
fear_VS = mkV_1 "ترسیدن"; fear_VS = mkVS (mkV_1 "ترسیدن") ;
find_V2 = mkV2 (compoundV "پیدا" doVerb) "را"; find_V2 = mkV2 (compoundV "پیدا" doVerb) "را";
fish_N = mkN01 "ماهی" animate; fish_N = mkN01 "ماهی" animate;
floor_N = mkN01 "زمین" inanimate; -- Note: floor in persian can have 3 different translations floor_N = mkN01 "زمین" inanimate; -- Note: floor in persian can have 3 different translations
@@ -89,7 +89,7 @@ concrete LexiconPes of Lexicon = CatPes **
girl_N = mkN02 "دختر" animate; girl_N = mkN02 "دختر" animate;
glove_N = mkN01 "دستکش" inanimate; glove_N = mkN01 "دستکش" inanimate;
gold_N = mkN01 "طلا" inanimate; gold_N = mkN01 "طلا" inanimate;
good_A = mkA "خوب" ; good_A = mkA "خوب" "بهتر" "خوب" ;
go_V = mkV "رفتن" "رو"; go_V = mkV "رفتن" "رو";
green_A = mkA "سبز" ; green_A = mkA "سبز" ;
harbour_N = mkN "بندر" "بنادر" inanimate; harbour_N = mkN "بندر" "بنادر" inanimate;
@@ -97,7 +97,7 @@ concrete LexiconPes of Lexicon = CatPes **
hat_N = mkN01 "کلاه" inanimate; hat_N = mkN01 "کلاه" inanimate;
hear_V2 = mkV2 (mkV "شنیدن" "شنو") "را" ; hear_V2 = mkV2 (mkV "شنیدن" "شنو") "را" ;
hill_N = mkN01 "تپه" inanimate; hill_N = mkN01 "تپه" inanimate;
hope_VS = compoundV "امیدوار" beVerb; hope_VS = mkVS (compoundV "امیدوار" beVerb) ;
horse_N = mkN01 "اسب" animate; horse_N = mkN01 "اسب" animate;
hot_A = mkA "داغ" ["داغ داغ"] ; hot_A = mkA "داغ" ["داغ داغ"] ;
house_N = mkN01 "خانه" inanimate; house_N = mkN01 "خانه" inanimate;
@@ -106,7 +106,7 @@ concrete LexiconPes of Lexicon = CatPes **
iron_N = mkN01 "آهن" inanimate; iron_N = mkN01 "آهن" inanimate;
king_N = mkN "پادشاه" "پادشاهان" animate; king_N = mkN "پادشاه" "پادشاهان" animate;
know_V2 = mkV2 (mkV "شناختن" "شناس") "را"; know_V2 = mkV2 (mkV "شناختن" "شناس") "را";
know_VS = (mkV_1 "دانستن") ; -- danestan -> dan ; needs explicit mkV_1 know_VS = mkVS (mkV_1 "دانستن") ; -- danestan -> dan ; needs explicit mkV_1
know_VQ = (mkV_1 "دانستن") ; know_VQ = (mkV_1 "دانستن") ;
lake_N = mkN01 "دریاچه" inanimate; lake_N = mkN01 "دریاچه" inanimate;
lamp_N = mkN01 "چراغ" inanimate; -- also "لامپ", but they have different usage lamp_N = mkN01 "چراغ" inanimate; -- also "لامپ", but they have different usage
@@ -157,7 +157,7 @@ concrete LexiconPes of Lexicon = CatPes **
roof_N = mkN01 "بام" inanimate; -- has variant "سقف" roof_N = mkN01 "بام" inanimate; -- has variant "سقف"
rubber_N = mkN01 "پاککن" inanimate; -- also "لاستیک" rubber_N = mkN01 "پاککن" inanimate; -- also "لاستیک"
run_V = mkV_1 "دویدن" ; run_V = mkV_1 "دویدن" ;
say_VS = mkV "گفتن" "گوی" ; say_VS = mkVS (mkV "گفتن" "گوی") ;
school_N = mkN "مدرسه" "مدارس" inanimate; school_N = mkN "مدرسه" "مدارس" inanimate;
science_N = mkN "علم" "علوم" inanimate; -- also "دانش" science_N = mkN "علم" "علوم" inanimate; -- also "دانش"
sea_N = mkN01 "دریا" inanimate; sea_N = mkN01 "دریا" inanimate;
@@ -215,7 +215,7 @@ concrete LexiconPes of Lexicon = CatPes **
woman_N = mkN02 "زن" animate; woman_N = mkN02 "زن" animate;
wonder_VQ = compoundV "متعجب" beVerb ; wonder_VQ = compoundV "متعجب" beVerb ;
wood_N = mkN01 "چوب" inanimate; wood_N = mkN01 "چوب" inanimate;
write_V2 = mkV2 (mkV "نوشتن" "نویس") "را" ; write_V2 = mkV2 (mkV "نوشتن" "نویس") ; -- would need ra with a definite object, but better rule of thumb to go without ra /NM
yellow_A = mkA "زرد" ; yellow_A = mkA "زرد" ;
young_A = mkA "جوان""جوانانه" ; young_A = mkA "جوان""جوانانه" ;
do_V2 = mkV2 (compoundV "انجام" giveVerb) "را"; do_V2 = mkV2 (compoundV "انجام" giveVerb) "را";
@@ -369,7 +369,6 @@ concrete LexiconPes of Lexicon = CatPes **
uncertain_A = mkA "نامعلوم" ["با تردید"]; uncertain_A = mkA "نامعلوم" ["با تردید"];
oper oper
doVerb = mkV "کردن" "کن" ;
takeVerb = mkV "گرفتن" "گیر" ; takeVerb = mkV "گرفتن" "گیر" ;
hitVerb = mkV "زدن" "زن" ; hitVerb = mkV "زدن" "زن" ;
giveVerb = mkV "دادن" "ده" ; giveVerb = mkV "دادن" "ده" ;

View File

@@ -25,6 +25,10 @@ oper
-- fatha : Str = "َ" ; -- fatha : Str = "َ" ;
kasre,fatha : Str = [] ; kasre,fatha : Str = [] ;
-- for appComp
-- runtimeKasre : Str -> Str = \s -> glue s kasre ;
runtimeKasre : Str -> Str = \s -> s ;
---- Nouns ---- Nouns
param param
@@ -32,6 +36,7 @@ param
Mod = Bare | Ezafe | Clitic | Poss ; Mod = Bare | Ezafe | Clitic | Poss ;
Agr = Ag Number Person ; Agr = Ag Number Person ;
CmpdStatus = IsCmpd | NotCmpd ; CmpdStatus = IsCmpd | NotCmpd ;
Degr = Positive | Comparative ;
------------------------------------------ ------------------------------------------
-- Agreement transformations -- Agreement transformations
@@ -97,6 +102,16 @@ oper
Clitic => mkEnclic str ; Clitic => mkEnclic str ;
Poss => mkPossStem str } ; Poss => mkPossStem str } ;
-- Can happen that a complement (of N2, or e.g. PossNP) wants one form
-- and determiner wants another form. Heuristic: whichever wants Bare loses.
-- Will have to see if this works 100%, the grammar books I've seen
-- aren't very clear about this, just basing on some data. /IL
replaceBare : Mod -> (Mod=>Str) -> (Mod=>Str) = \m,tbl ->
table {
Bare => tbl ! m ;
mod => tbl ! mod
} ;
Noun = { Noun = {
s : Number => Mod => Str ; s : Number => Mod => Str ;
animacy : Animacy ; animacy : Animacy ;
@@ -119,7 +134,10 @@ oper
--Determiners --Determiners
-------------------- --------------------
BaseQuant : Type = { BaseQuant : Type = {
mod : Mod } ; mod : Mod ;
isNeg : Bool ;
isDef : Bool
} ;
Determiner : Type = BaseQuant ** { Determiner : Type = BaseQuant ** {
s : Str ; s : Str ;
@@ -131,33 +149,47 @@ oper
Quant : Type = BaseQuant ** { Quant : Type = BaseQuant ** {
s : Number => CmpdStatus => Str} ; s : Number => CmpdStatus => Str} ;
makeDet : Str -> Number -> Bool -> Determiner = \str,n,b -> { makeDet : Str -> Number -> (isNum, isNeg : Bool) -> Determiner = \str,n,isNum,isNeg -> {
s,sp = str; s,sp = str;
isNum = b; isNum = isNum ;
isNeg = isNeg ;
isDef = True ;
mod = Bare ; mod = Bare ;
n = n n = n
}; };
makeQuant : Str -> Str -> Quant = \sg,pl -> { makeQuant : Str -> Str -> Mod -> (isNeg : Bool) -> Quant = \sg,pl,mod,isNeg -> {
s = table {Sg => \\_ => sg ; Pl => \\_ => pl} ; s = table {Sg => \\_ => sg ; Pl => \\_ => pl} ;
mod = Bare ; mod = mod ;
isNeg = isNeg ;
isDef = True
}; };
--------------------------- ---------------------------
-- Adjectives -- Adjectives
-------------------------- --------------------------
Adjective : Type = { BaseAdjective : Type = {
s : Mod => Str ;
adv : Str ; adv : Str ;
isPre : Bool isPre : Bool ; -- as attributive
afterPrefix : Bool ; -- as predicative, does it go between the prefix and the light verb
} ; } ;
Adjective : Type = BaseAdjective ** {
s : Degr => Mod => Str } ;
AP : Type = BaseAdjective ** {
s : Mod => Str } ;
mkAdj = overload {
mkAdj : Str -> Str -> Adjective = \adj,adv -> { mkAdj : Str -> Str -> Adjective = \adj,adv -> {
s = table { Bare => adj; s = table { Positive => modTable adj ;
Ezafe => mkEzafe adj ; Comparative => modTable (adj + "تر") -- Regular comparative.
Clitic => mkEnclic adj ;
Poss => mkPossStem adj
} ; } ;
adv = adv ; isPre = False adv = adv ; isPre = False ; afterPrefix = True } ;
mkAdj : Str -> Str -> Str -> Adjective = \pos,cmp,adv -> {
s = table { Positive => modTable pos ;
Comparative => modTable cmp -- Irregular comparative, e.g. xub-behtar
} ;
adv = adv ; isPre = False ; afterPrefix = True }
} ; } ;
------------------------------------------------------------------ ------------------------------------------------------------------
@@ -177,12 +209,35 @@ param
| VImp Polarity Number -- bekon,bekonid/nakon,nakonid | VImp Polarity Number -- bekon,bekonid/nakon,nakonid
; ;
-- Affects clitic placement and passive
LightVerb = NotLight | Light -- ateš zadan -> ateš zade šodan
| Kardan ; -- gom kardan -> gom ∅ šodan
oper oper
impRoot : Str -> Str = \root -> case root of { impRoot : Str -> Str = \root -> case root of {
st + "ی" => st ; st + "ی" => st ;
_ => root _ => root
}; };
modifyFiniteForms : (Str -> Str) -> Verb -> Verb = \f,v -> v ** {s =
table {
vf@(VAor _ _
| VPerf _ _
| VPast _ _
| VSubj _ _
| VImp _ _)
=> f (v.s ! vf) ;
vf => v.s ! vf }
} ;
addClitic : LightVerb -> Str -> Verb -> Verb = \light,cl,v -> v ** {s =
let f : Str -> Str = case light of {
NotLight => \s -> glue s cl ;
_ => \s -> BIND ++ cl ++ s } -- hack: put clitic before the verb, so it attaches to the prefix
in table {
Inf => glue (v.s ! Inf) cl ;
vf => (modifyFiniteForms f v).s ! vf }
} ;
mkVerb : (inf,pres : Str) -> Verb = \kardan,kon -> { mkVerb : (inf,pres : Str) -> Verb = \kardan,kon -> {
s = table { s = table {
Inf => kardan ; Inf => kardan ;
@@ -198,10 +253,11 @@ oper
VSubj Pos agr => addBh (imperfectSuffixD agr kon) ; VSubj Pos agr => addBh (imperfectSuffixD agr kon) ;
VSubj Neg agr => addN (imperfectSuffixD agr kon) ; VSubj Neg agr => addN (imperfectSuffixD agr kon) ;
VImp Pos Sg => addBh imp ; VImp Pos Sg => addBh imp ;
VImp Pos Pl => addBh imp + "ید" ; VImp Pos Pl => addBh kon + "ید" ;
VImp Neg Sg => addN imp ; VImp Neg Sg => addN imp ;
VImp Neg Pl => addN imp + "ید" } ; VImp Neg Pl => addN kon + "ید" } ;
prefix = [] -- For compound verbs prefix = [] ;-- For compound verbs
lightverb = NotLight ;
} where { } where {
kard = tk 1 kardan ; kard = tk 1 kardan ;
kardeh = kard + "ه" ; kardeh = kard + "ه" ;
@@ -225,7 +281,7 @@ oper
} ; } ;
-- --
oper oper
Verb = {s : VerbForm => Str ; prefix : Str} ; Verb = {s : VerbForm => Str ; prefix : Str ; lightverb : LightVerb} ;
-- Verbs that end in یدن, ادن or ودن -- Verbs that end in یدن, ادن or ودن
-- Also some verbs that don't: دانستن with stem دان -- Also some verbs that don't: دانستن with stem دان
@@ -310,6 +366,8 @@ oper
haveVerb : Verb = haveRegV ** {s = table { haveVerb : Verb = haveRegV ** {s = table {
ImpPrefix _ => [] ; ImpPrefix _ => [] ;
VAor Neg agr => imperfectSuffixD agr (addN "دار") ;
VSubj pol agr => haveRegV.s ! VPerf pol agr ;
vf => haveRegV.s ! vf } vf => haveRegV.s ! vf }
} where { haveRegV = mkVerb "داشتن" "دار" } ; } where { haveRegV = mkVerb "داشتن" "دار" } ;
@@ -326,4 +384,16 @@ oper
vf => beRegV.s ! vf } vf => beRegV.s ! vf }
} where { beRegV = mkVerb "بودن" "باش" } ; } where { beRegV = mkVerb "بودن" "باش" } ;
doVerb : Verb = doRegV ** {s = table {
VSubj pol agr => addN pol (imperfectSuffixD agr "کن") ;
VImp Pos Sg => "کن" ;
VImp Pos Pl => "کنید" ;
VImp Neg Sg => "نکن" ;
VImp Neg Pl => "نکنید" ;
vf => doRegV.s ! vf } ;
lightverb = Kardan
} where { doRegV = mkVerb "کردن" "کن" } ;
becomeVerb : Verb = mkVerb "شدن" "شو" ;
} }

View File

@@ -16,12 +16,21 @@ concrete NounPes of Noun = CatPes ** open ResPes, Prelude in {
IsCmpd => det.sp } ; -- full form IsCmpd => det.sp } ; -- full form
in case mod of { in case mod of {
Bare => detStr ++ cn.s ! num ! m ++ cn.compl ! det.n ; -- det doesn't require a special form, keep the Mod=>Str table Bare => detStr ++ cn.s ! num ! m ++ cn.compl ! det.n ; -- det doesn't require a special form, keep the Mod=>Str table
x => cn.s ! num ! x ++ detStr ++ cn.compl ! det.n } ; -- det requires a special form Clitic => detStr ++ cn.s ! num ! Clitic ++ cn.compl ! det.n ; -- In RGL this is only for no_Quant. If other determiners with different word order take Clitic, will change. /IL
a = agrP3 det.n x => cn.s ! num ! x ++ detStr ++ cn.compl ! det.n } ; -- Ezafe or Poss: comes after noun, Mod table is overwritten to the given form
a = agrP3 det.n ;
takesYeAsComp = False ; -- TODO: some rule with det.isDef and cn.hasAdj
isNeg = det.isNeg ; -- affects polarity in Cl: "*nothing is real" -> "nothing isn't real"
} ; } ;
UsePN pn = emptyNP ** pn ** {s = \\_ => pn.s} ; UsePN pn = emptyNP ** pn ** {s = \\_ => pn.s} ;
UsePron p = emptyNP ** p ** {s = \\_ => p.s ; animacy = Animate} ; UsePron p = emptyNP ** p ** {
s = \\_ => p.s ;
clitic = p.ps ;
isClitic = case p.a of {
Ag Sg P3 => True ;
_ => False } ;
animacy = Animate} ;
PredetNP pred np = np ** { PredetNP pred np = np ** {
s = \\ez => pred.s ++ np.s ! ez s = \\ez => pred.s ++ np.s ! ez
@@ -41,20 +50,29 @@ concrete NounPes of Noun = CatPes ** open ResPes, Prelude in {
s = \\ez => np.s ! Ezafe ++ adv.s s = \\ez => np.s ! Ezafe ++ adv.s
} ; } ;
DetQuantOrd quant num ord = { DetQuantOrd quant num ord =
s = quant.s ! num.n ! NotCmpd ++ num.s ++ ord.s ; let cs : CmpdStatus => Str = case <num.isNum,num.n,quant.isDef> of {
sp = quant.s ! num.n ! IsCmpd ++ num.s ++ ord.s ; -- only matters for PossPron <True,Sg,False> => \\_ => num.s ++ ord.s ; -- to prevent "a 1"
_ => \\c => quant.s ! num.n ! c ++ num.s ++ ord.s} ;
in quant ** {
s = cs ! NotCmpd ;
sp = cs ! IsCmpd ; -- only matters for PossPron
isNum = orB num.isNum ord.isNum ; isNum = orB num.isNum ord.isNum ;
mod = quant.mod ; mod = quant.mod ;
n = num.n n = case quant.isNeg of {True => Sg ; _ => num.n} ;
} ; } ;
DetQuant quant num = { DetQuant quant num =
s = quant.s ! num.n ! NotCmpd ++ num.s ; let cs : CmpdStatus => Str = case <num.isNum,num.n,quant.isDef> of {
sp = quant.s ! num.n ! IsCmpd ++ num.s ; -- only matters for PossPron <True,Sg,False> => \\_ => num.s ; -- to prevent "a 1"
_ => \\c => quant.s ! num.n ! c ++ num.s } ;
in quant ** {
s = cs ! NotCmpd ;
sp = cs ! IsCmpd ; -- only matters for PossPron
isNum = num.isNum; isNum = num.isNum;
mod = quant.mod ; mod = quant.mod ;
n = num.n n = case quant.isNeg of {True => Sg ; _ => num.n} ;
} ; } ;
DetNP det = emptyNP ** { DetNP det = emptyNP ** {
@@ -62,10 +80,11 @@ concrete NounPes of Noun = CatPes ** open ResPes, Prelude in {
a = agrP3 det.n ; a = agrP3 det.n ;
hasAdj = False ; hasAdj = False ;
animacy = Inanimate ; animacy = Inanimate ;
--TODO: isClitic, clitic
relpron = Ance -- TODO check if this works for all Dets relpron = Ance -- TODO check if this works for all Dets
} ; } ;
PossPron p = { PossPron p = DefArt ** {
s = \\_ => table { s = \\_ => table {
NotCmpd => BIND ++ p.ps ; NotCmpd => BIND ++ p.ps ;
IsCmpd => p.s } ; -- is a compound IsCmpd => p.s } ; -- is a compound
@@ -85,14 +104,15 @@ concrete NounPes of Noun = CatPes ** open ResPes, Prelude in {
-- to here -- to here
AdNum adn num = num ** {s = adn.s ++ num.s} ; AdNum adn num = num ** {s = adn.s ++ num.s} ;
OrdSuperl a = {s = a.s ! Bare ++ taryn; n = Sg ; isNum=False ; isPre = True} ; -- check the form of adjective OrdSuperl a = {s = a.s ! Comparative ! Bare ++ BIND ++ "ین" ; n = Sg ; isNum=False ; isPre = True} ;
DefArt = {s = \\_,_ => [] ; mod = Bare} ; DefArt = makeQuant [] [] Bare False ;
IndefArt = {s = table {Sg => \\_ => IndefArticle ; Pl => \\_ => []} ; mod = Bare} ; IndefArt = makeQuant IndefArticle [] Bare False ** {isDef = False} ;
MassNP cn = emptyNP ** cn ** { MassNP cn = emptyNP ** cn ** {
s = \\m => cn.s ! Sg ! m ++ cn.compl ! Sg ; s = \\m => cn.s ! Sg ! m ++ cn.compl ! Sg ;
a = agrP3 Sg ; a = agrP3 Sg ;
takesYeAsComp = cn.hasAdj ;
} ; } ;
UseN, UseN,
@@ -109,20 +129,20 @@ concrete NounPes of Noun = CatPes ** open ResPes, Prelude in {
} ; } ;
ComplN2 n2 np = n2 ** { ComplN2 n2 np = n2 ** {
s = \\n,m => n2.s ! n ! Ezafe ; s = \\n => replaceBare n2.c2.mod (n2.s ! n) ;
compl = \\_ => n2.compl ++ n2.c2 ++ np2str np ; compl = \\_ => n2.compl ++ n2.c2.s ++ np2str np ;
hasAdj = False hasAdj = False
}; };
ComplN3 n3 np = n3 ** { ComplN3 n3 np = n3 ** {
s = \\n,m => n3.s ! n ! Ezafe ; s = \\n => replaceBare n3.c2.mod (n3.s ! n) ;
compl = n3.c2 ++ np2str np ; compl = n3.c2.s ++ np2str np ;
c = n3.c3; c = n3.c3;
} ; } ;
AdjCN ap cn = cn ** { AdjCN ap cn = cn ** {
s = \\n,m => case ap.isPre of { s = \\n,m => case ap.isPre of {
True => ap.s ! Bare ++ cn.s ! n ! m ; -- TODO check mod of ap True => ap.s ! Bare ++ cn.s ! n ! m ;
False => cn.s ! n ! Ezafe ++ ap.s ! m } ; False => cn.s ! n ! Ezafe ++ ap.s ! m } ;
hasAdj = True hasAdj = True
} ; } ;
@@ -144,6 +164,6 @@ concrete NounPes of Noun = CatPes ** open ResPes, Prelude in {
-- : CN -> NP -> CN ; -- house of Paris, house of mine -- : CN -> NP -> CN ; -- house of Paris, house of mine
PossNP cn np = cn ** { PossNP cn np = cn ** {
s = \\n,m => cn.s ! n ! Ezafe ; -- TODO or here for "<house of mine> <on the hill>" s = \\n => replaceBare Ezafe (cn.s ! n) ; -- alternative: place np2str np here for "<house of mine> <on the hill>"
compl = \\n => cn.compl ! n ++ np2str np } ; -- "<house> <on the hill of mine>" compl = \\n => cn.compl ! n ++ np2str np } ; -- "<house> <on the hill of mine>"
} }

View File

@@ -72,7 +72,7 @@ lin pot3plus n m = {
} ; } ;
-} -}
D_0 = mkDig "0" ; D_0 = mkDig "0" ;
D_1 = mk3Dig "1" "" Pl; D_1 = mk3Dig "1" "" Sg ;
D_2 = mk2Dig "2" ""; D_2 = mk2Dig "2" "";
D_3 = mk2Dig "3" "سوم" ; D_3 = mk2Dig "3" "سوم" ;
D_4 = mkDig "4" ; D_4 = mkDig "4" ;

View File

@@ -42,11 +42,13 @@ oper
} ; } ;
mkN2 : overload { mkN2 : overload {
mkN2 : (key : N) -> (to : Str) -> N2 -- Takes a noun and a complementiser, returns a N2. mkN2 : (key : N) -> (to : Str) -> N2 ; -- Takes a noun and a complementiser as a string, returns a N2.
mkN2 : (key : N) -> (to : Prep) -> N2 -- Takes a noun and a complementiser as a Prep, returns a N2.
} ; } ;
mkN3 : overload { mkN3 : overload {
mkN3 : (distance : N) -> (from,to : Str) -> N3 -- Takes a noun and two complementisers, returns a N3. mkN3 : (distance : N) -> (from,to : Str) -> N3 ; -- Takes a noun and two complementisers as strings, returns a N3.
mkN3 : (distance : N) -> (from,to : Prep) -> N3 -- Takes a noun and two complementisers as Preps, returns a N3.
} ; } ;
-- Compound Nouns -- Compound Nouns
@@ -58,7 +60,7 @@ oper
= mkCmpdNoun2 ; -- e.g. مأمور پلیس '/officer/ police'. = mkCmpdNoun2 ; -- e.g. مأمور پلیس '/officer/ police'.
cmpdN : N -> N -> N -- Compound noun with ezafe (Nی N) cmpdN : N -> N -> N -- Compound noun with ezafe (Nی N)
= \n1,n2 -> n1 ** { = \n1,n2 -> n1 ** {
s = \\n,m => n1.s ! n ! Ezafe ++ n2.s ! n ! m ; s = \\n,m => n1.s ! n ! Ezafe ++ n2.s ! Sg ! m ;
isCmpd = IsCmpd} ; isCmpd = IsCmpd} ;
} ; } ;
@@ -70,11 +72,13 @@ oper
mkDet = overload { mkDet = overload {
mkDet : Str -> Number -> Det -- Takes a string, number (sg/pl) and returns a det which is not a numeral mkDet : Str -> Number -> Det -- Takes a string, number (sg/pl) and returns a det which is not a numeral
= \s,n -> lin Det (makeDet s n False); = \s,n -> lin Det (makeDet s n False False);
mkDet : Str -> Number -> Bool -> Det -- As above + a Boolean for whether the det is a numeral mkDet : Str -> Number -> (isNum : Bool) -> Det -- As above + a Boolean for whether the det is a numeral
= \s,n,b -> lin Det (makeDet s n b) ; = \s,n,b -> lin Det (makeDet s n b False) ;
mkDet : Str -> Number -> Bool -> Mod -> Det -- As above + Mod for which form the determiner expects its argument to be (default bare) mkDet : Str -> Number -> (isNum, isNeg : Bool) -> Det -- As above + a Boolean for whether the det is negative
= \s,n,b,m -> lin Det (makeDet s n b ** {mod=m}) = \s,n,nu,ne -> lin Det (makeDet s n nu ne) ;
mkDet : Str -> Number -> (isNum, isNeg : Bool) -> Mod -> Det -- As above + Mod for which form the determiner expects its argument to be (default bare)
= \s,n,nu,ne,m -> lin Det (makeDet s n nu ne ** {mod=m})
}; };
{- {-
@@ -88,6 +92,7 @@ oper
mkA : Str -> A ; -- Regular adjective, same form for adjective and adverb. mkA : Str -> A ; -- Regular adjective, same form for adjective and adverb.
mkA : (adj,adv : Str) -> A -- Different forms for adjective and adverb. mkA : (adj,adv : Str) -> A -- Different forms for adjective and adverb.
} ; } ;
prefixA : A -> A ; -- Adjective that comes before the noun
mkA2 : (married,to : Str) -> A2 -- Takes string and complementiser, returns A2. mkA2 : (married,to : Str) -> A2 -- Takes string and complementiser, returns A2.
= \a,c -> lin A2 (mkAdj a a ** {c2 = c}) ; = \a,c -> lin A2 (mkAdj a a ** {c2 = c}) ;
@@ -112,6 +117,8 @@ oper
= lin V M.haveVerb ; = lin V M.haveVerb ;
beVerb : V -- The verb "be", to be used for light verb constructions: e.g. compoundV "عاشق" beVerb. beVerb : V -- The verb "be", to be used for light verb constructions: e.g. compoundV "عاشق" beVerb.
= lin V M.beVerb ; = lin V M.beVerb ;
doVerb : V -- The verb "do", to be used for light verb constructions. In passive, is replaced by شدن.
= lin V M.doVerb ;
mkV2 : overload { mkV2 : overload {
mkV2 : Str -> V2 ; -- Predictable V2 out of string. No preposition, را for direct object. mkV2 : Str -> V2 ; -- Predictable V2 out of string. No preposition, را for direct object.
@@ -121,7 +128,7 @@ oper
mkV3 = overload { mkV3 = overload {
mkV3 : Str -> V3 -- Predictable V3, را for direct object, no prepositions. mkV3 : Str -> V3 -- Predictable V3, را for direct object, no prepositions.
= \s -> lin V3 (regV s ** {c2 = prepOrRa "را" ; c3 = prepOrRa []}) ; = \s -> lin V3 (regV s ** {c2 = prepOrRa "را" ; c3 = noPrep}) ;
mkV3 : V -> (dir,indir : Str) -> V3 -- Takes a verb and two prepositions or را as strings (can be empty). mkV3 : V -> (dir,indir : Str) -> V3 -- Takes a verb and two prepositions or را as strings (can be empty).
= \v,p,q -> lin V3 (v ** {c2 = prepOrRa p ; c3 = prepOrRa q}) ; = \v,p,q -> lin V3 (v ** {c2 = prepOrRa p ; c3 = prepOrRa q}) ;
mkV3 : V -> (dir,indir : Prep) -> V3 -- Takes a verb and two prepositions mkV3 : V -> (dir,indir : Prep) -> V3 -- Takes a verb and two prepositions
@@ -137,18 +144,20 @@ oper
mkVA = overload { mkVA = overload {
mkVA : Str -> VA -- predictable verb with adjective complement mkVA : Str -> VA -- predictable verb with adjective complement
= \s -> lin VA (regV s ** {c2 = prepOrRa []}) ; = \s -> lin VA (regV s ** {c2 = noPrep}) ;
mkVA : V -> VA -- VA out of a verb mkVA : V -> VA -- VA out of a verb
= \v -> lin VA (v ** {c2 = prepOrRa []}) ; = \v -> lin VA (v ** {c2 = noPrep}) ;
mkVA : V -> Prep -> VA -- VA out of a verb and preposition mkVA : V -> Prep -> VA -- VA out of a verb and preposition
= \v,p -> lin VA (v ** {c2 = p}) ; = \v,p -> lin VA (v ** {c2 = p}) ;
} ; } ;
mkVS = overload { mkVS = overload {
mkVS : Str -> VS -- predictable verb with sentence complement mkVS : Str -> VS -- predictable verb with sentence complement in subjunctive.
= \s -> lin VS (regV s) ; = \s -> lin VS (regV s ** {compl=subjunctive}) ;
mkVS : V -> VS -- VS out of a verb mkVS : V -> VS -- VS out of a verb, sentence complement in subjunctive.
= \v -> lin VS v = \v -> lin VS (v ** {compl=subjunctive}) ;
mkVS : VVForm -> V -> VS -- sentence complement given as argument
= \vvf,v -> lin VS (v ** {compl=vvf}) ;
} ; } ;
mkVV = overload { mkVV = overload {
@@ -162,6 +171,21 @@ oper
= \isAux,vvf,v -> v ** {isAux = isAux ; compl = vvf ; isDef = False} = \isAux,vvf,v -> v ** {isAux = isAux ; compl = vvf ; isDef = False}
} ; } ;
defVV : VV -> VV = \vv -> vv ** {isDef=True} ;
mkV2S = overload {
mkV2S : Str -> V2S -- predictable morphology, direct object with را, sentence complement in subjunctive.
= \s -> lin V2S (regV s ** {compl=subjunctive ; c2 = prepOrRa "را"}) ;
mkV2S : V -> V2S -- direct object with را, sentence complement in subjunctive.
= \v -> lin V2S (v ** {compl=subjunctive ; c2 = prepOrRa "را"}) ;
mkV2S : Prep -> VVForm -> V -> V2S -- direct object and mood for sentence complement as arguments.
= \prep,vvf,v -> lin V2S (v ** {compl=vvf ; c2 = prep}) ;
mkV2S : V2 -> V2S -- direct object given by V2, sentence complement in subjunctive.
= \v2 -> lin V2S (v2 ** {compl=subjunctive}) ;
mkV2S : VS -> V2S -- direct object with را, sentence complement given by VS.
= \vs -> lin V2S (vs ** {c2 = prepOrRa "را"})
} ;
mkV2V = overload { mkV2V = overload {
mkV2V : V -> (cN : Str) -> (isAux : Bool) -> V2V -- Verb, complementiser for the noun, whether it's auxiliary. mkV2V : V -> (cN : Str) -> (isAux : Bool) -> V2V -- Verb, complementiser for the noun, whether it's auxiliary.
= \v,s,b -> let vv : VV = mkVV b subjunctive v in = \v,s,b -> let vv : VV = mkVV b subjunctive v in
@@ -181,9 +205,9 @@ oper
mkPrep = overload { mkPrep = overload {
mkPrep : Str -> Prep -- Takes a string, returns a preposition. mkPrep : Str -> Prep -- Takes a string, returns a preposition.
= \str -> lin Prep {s = str ; ra = [] ; mod = Bare} ; = \str -> lin Prep (prepOrRa str) ;
mkPrep : Str -> Mod -> Prep -- Takes a string and Mod (so far only option is ezafe), returns a preposition. mkPrep : Str -> Mod -> Prep -- Takes a string and Mod (so far only option is ezafe), returns a preposition.
= \str,m -> lin Prep {s = str ; ra = [] ; mod=m} = \str,m -> lin Prep ((prepOrRa str) ** {mod=m})
} ; } ;
{- {-
@@ -209,11 +233,14 @@ oper
mkSubj = overload { mkSubj = overload {
mkSubj : Str -> Subj -- Takes its verbal complement in indicative. mkSubj : Str -> Subj -- Takes its verbal complement in indicative.
= \s -> lin Subj {s=s ; compl=indicative} ; = \s -> mkSubj' s ;
mkSubj : VVForm -> Str -> Subj -- Specify whether it takes complement in subjunctive or indicative. mkSubj : VVForm -> Str -> Subj -- Specify whether it takes complement in subjunctive or indicative.
= \vvf,s -> lin Subj {s=s ; compl=vvf} = \vvf,s -> mkSubj' s ** {compl=vvf}
} ; } ;
mkInterj : Str -> Interj
= \s -> lin Interj {s=s} ;
--. --.
--2 Definitions of paradigms --2 Definitions of paradigms
@@ -238,6 +265,13 @@ oper
Mod = ResPes.Mod ; Mod = ResPes.Mod ;
ezafe = ResPes.Ezafe ; ezafe = ResPes.Ezafe ;
mkSubj' : Str -> Subj ;
mkSubj' s = lin Subj (case s of {
"آن" => {s = [] ; relpron = Ance ; compl = indicative} ;
_ => {s = s ; relpron = Ke ; compl = indicative}
}) ;
-- Removed mkV_1, mkV_2, mkN01 and mkN02 from public API, still available for -- Removed mkV_1, mkV_2, mkN01 and mkN02 from public API, still available for
-- any applications that open ParadigmsPes. /IL 2019-02-08 -- any applications that open ParadigmsPes. /IL 2019-02-08
mkV_1 : Str -> V mkV_1 : Str -> V
@@ -292,12 +326,20 @@ oper
= \str -> lin A (mkAdj str str) ; = \str -> lin A (mkAdj str str) ;
mkA : Str-> Str -> A -- Takes adj and adv forms mkA : Str-> Str -> A -- Takes adj and adv forms
= \str,adv -> lin A (mkAdj str adv); = \str,adv -> lin A (mkAdj str adv);
mkA : (pos,compar,adv : Str) -> A -- positive, comparative and adverb
= \p,c,adv -> lin A (mkAdj p c adv);
mkA : Str -> Str -> A2 -- Takes string and complementiser, returns A2. Hidden from public API, confusing naming. /IL mkA : Str -> Str -> A2 -- Takes string and complementiser, returns A2. Hidden from public API, confusing naming. /IL
= \a,c -> lin A2 (mkAdj a a ** {c2 = c}) = \a,c -> lin A2 (mkAdj a a ** {c2 = c})
} ; } ;
-- Mostly for things that are not really adjectives, like adverbials /IL
invarA : Str -> A = \str ->
lin A (<mkAdj str str : Adjective> ** {s = \\_,_ => str}) ;
prefixA a = a ** {isPre=True};
preA : (adj,adv : Str) -> A = \adj,adv -> preA : (adj,adv : Str) -> A = \adj,adv ->
lin A ((mkAdj adj adv) ** {isPre=True}) ; lin A (<mkAdj adj adv:Adjective> ** {isPre=True}) ;
{- {-
-- Demonstrative Pronouns -- Demonstrative Pronouns
@@ -320,7 +362,10 @@ oper
-- hidden from public API -- hidden from public API
compoundV = overload { compoundV = overload {
compoundV : Str -> V -> V compoundV : Str -> V -> V
= \s,v -> v ** {prefix = s} ; = \s,v -> v ** {
prefix = s ;
lightverb = case v.lightverb of {Kardan => Kardan ; _ => Light}
} ;
compoundV : Str -> V2 -> V -- hidden from public API compoundV : Str -> V2 -> V -- hidden from public API
= \s,v -> lin V (v ** {prefix = s}) ; = \s,v -> lin V (v ** {prefix = s}) ;
}; };
@@ -343,39 +388,50 @@ oper
mkV2 : V -> Str -> V2 mkV2 : V -> Str -> V2
= \v,ra -> lin V2 (v ** {c2 = prepOrRa ra}) ; = \v,ra -> lin V2 (v ** {c2 = prepOrRa ra}) ;
mkV2 : V -> Str -> Bool -> V2 mkV2 : V -> Str -> Bool -> V2
= \v,p,b -> lin V2 (v ** {c2 = {ra = [] ; s = p ; mod=Bare}}) ; = \v,p,b -> lin V2 (v ** {c2 = prepOrRa p}) ;
} ; } ;
prepOrRa : Str -> Compl = \s -> case s of { prepOrRa : Str -> Compl = \s -> case s of {
"را" => {s = [] ; ra = "را" ; mod=Bare} ; ra@("را"|"")
prep => {s = prep ; ra = []; mod=Bare} => {s = [] ; ra = ra ; mod=Bare ; isPrep = False} ;
prep => {s = prep ; ra = [] ; mod=Bare ; isPrep = True}
} ; } ;
noPrep = prepOrRa [] ;
mkPost : Str -> Prep = \s -> lin Prep {s=[] ; ra=s ; mod=Bare} ; -- NB. The 'mod' field has different meaning for verbs and N2s.
ezafeForN2 = {s = [] ; ra = [] ; mod=Ezafe ; isPrep = False} ;
mkPost : Str -> Prep = \s -> lin Prep {s=[] ; ra=s ; mod=Bare ; isPrep = False} ;
mkN2 = overload { mkN2 = overload {
mkN2 : Str -> N2 -- Predictable N2 without complement mkN2 : Str -> N2 -- Predictable N2 without complement
= \s -> lin N2 (mkN01 s inanimate ** {c2,compl = []}) ; = \s -> lin N2 (mkN01 s inanimate ** {c2 = ezafeForN2 ; compl = []}) ;
mkN2 : N -> N2 -- N2 from without complement mkN2 : N -> N2 -- N2 from without complement
= \n -> lin N2 (n ** {c2,compl = []}) ; = \n -> lin N2 (n ** {c2 = ezafeForN2 ; compl = []}) ;
mkN2 : N -> Str -> N2 mkN2 : N -> Str -> N2
= \n,c -> lin N2 (n ** {c2 = c ; compl = []}) ; = \n,c -> lin N2 (n ** {c2 = prepOrRa c ; compl = []}) ;
mkN2 : N -> Prep -> Str -> N2 -- hidden from puclic API mkN2 : N -> Prep -> Str -> N2 -- hidden from puclic API
= \n,p,c -> lin N2 (n ** {c2 = p.s; compl = []}) = \n,p,c -> lin N2 (n ** {c2 = p; compl = []})
} ; } ;
mkN3 = overload { mkN3 = overload {
mkN3 : N -> Str -> Str -> N3 mkN3 : N -> Str -> Str -> N3
= \n,p,q -> lin N3 (n ** {c2 = prepOrRa p ; c3 = prepOrRa q}) ;
mkN3 : N -> Prep -> Prep -> N3
= \n,p,q -> lin N3 (n ** {c2 = p ; c3 = q}) ; = \n,p,q -> lin N3 (n ** {c2 = p ; c3 = q}) ;
mkN3 : N -> Prep -> Str -> Str -> N3 -- hidden from public API mkN3 : N -> Prep -> Str -> Str -> N3 -- hidden from public API
= \n,p,q,r -> lin N3 (n ** {c2 = p.s ; c3 = q ; c4 = r}) -- there is no c4 = \n,p,q,r -> lin N3 (n ** {c2 = p ; c3 = prepOrRa q ; c4 = r}) -- there is no c4
} ; } ;
mkQuant = overload { mkQuant = overload {
-- mkQuant : Pron -> Quant = \p -> {s = \\_,_,c => p.s!c ;a = p.a ; lock_Quant = <>}; -- mkQuant : Pron -> Quant = \p -> {s = \\_,_,c => p.s!c ;a = p.a ; lock_Quant = <>};
mkQuant : Str -> Str -> Quant -- hidden from public API mkQuant : Str -> Str -> Quant -- hidden from public API
= \sg,pl -> makeQuant sg pl; = \sg,pl -> makeQuant sg pl Bare False;
mkQuant : Str -> Str -> (isNeg : Bool) -> Quant -- hidden from public API
= \sg,pl,isneg -> makeQuant sg pl Bare isneg;
mkQuant : Str -> Str -> Mod -> (isNeg : Bool) -> Quant -- hidden from public API
= \sg,pl,mod,isneg -> makeQuant sg pl mod isneg;
} ; } ;
} }

View File

@@ -3,9 +3,9 @@ concrete PhrasePes of Phrase = CatPes ** open Prelude, ResPes in {
lin lin
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ; PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
UttS s = {s = s.s ! Indic} ; UttS s = {s = s.s ! Indic} ;
UttImpSg pol imp = {s = pol.s ++ imp.s ! pol.p ! ImpF Sg False} ; UttImpSg pol imp = {s = pol.s ++ imp.s ! pol.p ! Sg} ;
UttImpPl pol imp = {s = pol.s ++ imp.s ! pol.p ! ImpF Pl False} ; UttImpPl pol imp = {s = pol.s ++ imp.s ! pol.p ! Pl} ;
UttImpPol pol imp = {s = pol.s ++ imp.s ! pol.p ! ImpF Sg True} ; UttImpPol pol imp = {s = pol.s ++ imp.s ! pol.p ! Pl} ;
UttIP, --- Acc also UttIP, --- Acc also
UttQS, UttQS,
@@ -16,7 +16,7 @@ concrete PhrasePes of Phrase = CatPes ** open Prelude, ResPes in {
UttNP np = {s = np2str np} ; UttNP np = {s = np2str np} ;
UttCN cn = {s = cn2str cn}; UttCN cn = {s = cn2str cn};
UttAP ap = {s = ap.s ! Bare} ; UttAP ap = {s = ap.s ! Bare} ;
UttVP vp = {s = showVPH Inf defaultAgr vp} ; UttVP vp = {s = infVP vp} ;
PConjConj conj = {s = conj.s2} ; PConjConj conj = {s = conj.s2} ;

View File

@@ -15,6 +15,7 @@ resource ResPes = MorphoPes ** open Prelude,Predef in {
CardOrd = NCard | NOrd ; CardOrd = NCard | NOrd ;
RAgr = RNoAg | RAg Agr ; RAgr = RNoAg | RAg Agr ;
RelPron = Ance | Ke ; -- https://en.wiktionary.org/wiki/%D8%A2%D9%86%DA%86%D9%87 RelPron = Ance | Ke ; -- https://en.wiktionary.org/wiki/%D8%A2%D9%86%DA%86%D9%87
WordOrder = OV | VO ; -- for showVPH
oper oper
CN : Type = Noun ** { CN : Type = Noun ** {
@@ -29,8 +30,11 @@ resource ResPes = MorphoPes ** open Prelude,Predef in {
BaseNP : Type = { BaseNP : Type = {
a : Agr ; a : Agr ;
hasAdj : Bool ; -- to get the right form when NP is a predicate isNeg : Bool ; -- negative determiner forces negation in Cl and S
takesYeAsComp : Bool ; -- to get the right form when NP is a predicate
animacy : Animacy ; -- to get the right pronoun in FunRP animacy : Animacy ; -- to get the right pronoun in FunRP
isClitic : Bool ; -- if isPron, becomes clitic as a direct object
clitic : Str ;
relpron : RelPron ; -- contraction for "that which" relpron : RelPron ; -- contraction for "that which"
empty : Str -- to prevent metavariables in case of rel.pron. contraction empty : Str -- to prevent metavariables in case of rel.pron. contraction
} ; } ;
@@ -39,8 +43,11 @@ resource ResPes = MorphoPes ** open Prelude,Predef in {
emptyNP : NP = { emptyNP : NP = {
s = \\_ => [] ; s = \\_ => [] ;
a = defaultAgr ; a = defaultAgr ;
hasAdj = False ; isNeg = False ;
takesYeAsComp = False ;
animacy = Inanimate ; animacy = Inanimate ;
isClitic = False ;
clitic = [] ;
relpron = Ke ; relpron = Ke ;
empty = [] empty = []
} ; } ;
@@ -67,16 +74,23 @@ resource ResPes = MorphoPes ** open Prelude,Predef in {
----------------------- -----------------------
param param
VVType = NoVV | FullVV | DefVV ; VVType = NoVV | FullVV | DefVV ;
VVForm = Indic | Subj ; VVForm = Indic | Subj ; ---| SubjPast ; -- TODO extend this to VV, VS and Subj
VVTense = VVPres | VVPerf | VVPast ; -- VVPast Anteriority ??? VVTense = VVPres | VVPast VVForm ;
TAnt = TA Tense Anteriority ; TAnt = Ind Tense Anteriority | Sub Anteriority ;
oper oper
-- TODO: all forms -- VVPast Subj is another possibility, used in constructions such as
ta2vvt : TAnt -> VVTense = \ta -> case ta of { -- قاتل نمی توانسته آنجا بوده باشد، چون او آن زمان در پاریس بوده
TA Pres Anter => VVPerf ; -- The form is created in complVV, but not currently used in other functions. /IL
TA Past _ => VVPast ; ta2vvt : TAnt -> VVType -> VVTense = \ta,vvtype -> case ta of {
Ind Pres Anter |
Ind Past _ => VVPast Indic ;
Ind Cond Simul => VVPres ;
Ind Cond Anter =>
case vvtype of {
DefVV => VVPast Indic ;
_ => VVPres } ;
_ => VVPres } ; _ => VVPres } ;
VV : Type = Verb ** { VV : Type = Verb ** {
@@ -86,31 +100,40 @@ oper
} ; } ;
VPH : Type = Verb ** { VPH : Type = Verb ** {
comp : Agr => Str; -- complements of a verb, agr for ReflVP "I/you see myself/yourself" and CompCN "I am human/we are humans" comp : Agr => WordOrder => Str; -- complements of a verb, agr for ReflVP "I/you see myself/yourself" and CompCN "I am human/we are humans"
vComp : Agr => VVTense => Str; -- when a verb is used as a complement of an auxiliary verb. Unlike comp or obj, this type of complement follows the auxiliary verb. vComp : Agr => VVTense => Str; -- when a verb is used as a complement of an auxiliary verb. Unlike comp or obj, this type of complement follows the auxiliary verb.
obj : Str ; -- object of a verb; so far only used for A ("paint it black") obj : Str ; -- object of a verb; so far only used for A ("paint it black")
ad : Str ; ad : Str ;
isNeg : Bool ; -- whether the object is a negative NP: "*there is nothing" -> "there isn't nothing"
embComp : Str ; -- when a declarative or interrogative sentence is used as a complement of a verb. embComp : Str ; -- when a declarative or interrogative sentence is used as a complement of a verb.
vvtype : VVType ; -- no VV, fully inflecting VV or defective VV vvtype : VVType ; -- no VV, fully inflecting VV or defective VV
} ; } ;
showVPH = overload { showVPH = overload {
showVPH : VerbForm -> Agr -> VPH -> Str = showVPH' VVPres ; showVPH : VerbForm -> Agr -> VPH -> Str = showVPH' OV False VVPres ;
showVPH : VVTense -> VerbForm -> Agr -> VPH -> Str = showVPH' showVPH : VVTense -> VerbForm -> Agr -> VPH -> Str = showVPH' OV False
} ; } ;
showVPH' : VVTense -> VerbForm -> Agr -> VPH -> Str = showVPHwithImpPrefix = showVPH' OV True VVPres ;
\ant,vf,agr,vp -> vp.ad ++ vp.comp ! agr ++ vp.obj infVP = overload {
++ vp.prefix ++ vp.s ! vf infVP : VPH -> Str = showVPH' VO False VVPres Inf defaultAgr ; -- word order VO, VerbForm infinitive
infVP : VerbForm -> VPH -> Str = \vf,vp -> showVPH' VO False VVPres vf defaultAgr vp -- VO as word order, but VerbForm can be any (e.g. present participle or perfect stem)
} ;
showVPH' : WordOrder -> Bool -> VVTense -> VerbForm -> Agr -> VPH -> Str =
\wo,showImpPref,ant,vf,agr,vp ->
let impPref = case showImpPref of {
True => vp.s ! ImpPrefix Pos ;
False => [] }
in case wo of {
OV => vp.ad ++ vp.comp ! agr ! wo ++ vp.obj
++ vp.prefix ++ impPref ++ vp.s ! vf
++ vp.vComp ! agr ! ant ++ vp.embComp ; ++ vp.vComp ! agr ! ant ++ vp.embComp ;
VO => vp.prefix ++ vp.s ! vf ++ vp.ad
++ vp.comp ! agr ! wo ++ vp.obj ++ impPref
++ vp.vComp ! agr ! ant ++ vp.embComp } ;
-- A hack: we reuse the obj field for the VP complement in Compl : Type = {s : Str ; ra : Str ; mod : Mod ; isPrep : Bool} ;
-- SlashV2V and this is needed to get the right word order for complVV.
showVPHvv : VerbForm -> Agr -> VPH -> Str = \vf,agr,vp ->
vp.comp ! agr ++ vp.prefix ++ vp.s ! vf -- vp.ad is missing on purpose! we add it in insertVV.
++ vp.obj ++ vp.vComp ! agr ! VVPres ++ vp.embComp ;
Compl : Type = {s : Str ; ra : Str ; mod : Mod} ;
VPHSlash : Type = VPH ** { VPHSlash : Type = VPH ** {
c2 : Compl ; -- prep or ra for the complement c2 : Compl ; -- prep or ra for the complement
@@ -125,34 +148,50 @@ oper
obj, obj,
embComp = []; embComp = [];
vvtype = NoVV ; vvtype = NoVV ;
comp = \\_ => [] ; isNeg = False ;
comp = \\_,_ => [] ;
vComp = \\_,_ => [] } ; vComp = \\_,_ => [] } ;
predVc : (Verb ** {c2 : Compl}) -> VPHSlash = \verb -> predVc : (Verb ** {c2 : Compl}) -> VPHSlash = \verb ->
predV verb ** vs verb.c2 ; predV verb ** vs verb.c2 ;
--------------------- passV : Verb -> VPH = \v -> passVP (predV v) ;
passVP : VPH -> VPH = \vp -> vp ** {
s = becomeVerb.s ;
prefix = case vp.lightverb of {
Kardan => vp.prefix ;
_ => vp.s ! PerfStem ++ vp.prefix
} ;
} ;
-- ---------------------
-- VP complementation -- VP complementation
--------------------- ---------------------
appComp : Compl -> (Mod=>Str) -> Str = \c2,obj -> appCompVP : Compl -> (Mod=>Str) -> (WordOrder=>Str) = \c2,obj ->
c2.s ++ obj ! c2.mod ++ c2.ra ; \\wo => let ra = case wo of {VO => [] ; OV => c2.ra} in
case c2.mod of {
Ezafe => runtimeKasre c2.s ++ obj ! Bare ++ ra ;
_ => c2.s ++ obj ! c2.mod ++ ra } ;
-- for use outside VP, word order is redundant, ra should be retained.
appComp : Compl -> (Mod=>Str) -> Str = \c2,obj -> appCompVP c2 obj ! OV ;
insertComp : (Agr => Str) -> VPH -> VPH = \obj,vp -> vp ** { insertComp : (Agr => Str) -> VPH -> VPH = \obj,vp -> vp ** {
comp = \\a => vp.comp ! a ++ obj ! a comp = \\a,wo => vp.comp ! a ! wo ++ obj ! a
} ; } ;
insertCompPre : (Agr=>Mod=>Str) -> VPHSlash -> VPH = \obj,vp -> vp ** { insertCompPre : (Agr=>Mod=>Str) -> VPHSlash -> VPH = \obj,vp -> vp ** {
comp = \\a => appComp vp.c2 (obj ! a) ++ vp.comp ! a comp = \\a,wo => appCompVP vp.c2 (obj ! a) ! wo ++ vp.comp ! a ! wo
} ; } ;
insertCompPost : (Agr=>Mod=>Str) -> VPHSlash -> VPH = \obj,vp -> vp ** { insertCompPost : (Agr=>Mod=>Str) -> VPHSlash -> VPH = \obj,vp -> vp ** {
comp = \\a => vp.comp ! a ++ appComp vp.c2 (obj ! a) comp = \\a,wo => vp.comp ! a ! wo ++ appCompVP vp.c2 (obj ! a) ! wo
} ; } ;
insertVV : VV -> VPH -> VPH = \vv,vp -> predV vv ** { insertVV : VV -> VPH -> VPH = \vv,vp -> predV vv ** {
vComp = \\a,t => vp.vComp ! a ! t ++ complVV vv vp ! a ! t ; vComp = \\a,t => vp.vComp ! a ! t ++ complVV vv vp ! a ! t ;
vvType = case vv.isDef of {True => DefVV ; _ => FullVV} ; vvtype = case vv.isDef of {True => DefVV ; _ => FullVV} ;
ad = vp.ad -- because complVV doesn't include ad! for word order.
} ; } ;
embComp : Str -> VPH -> VPH = \str,vp -> vp ** { embComp : Str -> VPH -> VPH = \str,vp -> vp ** {
@@ -164,8 +203,23 @@ oper
} ; } ;
complSlash : VPHSlash -> NP -> VPH = \vp,np -> vp ** { complSlash : VPHSlash -> NP -> VPH = \vp,np -> vp ** {
comp = \\a => appComp vp.c2 np.s ++ vp.comp ! a ; comp = \\a,wo =>
obj = vp.obj ++ vp.agrObj ! np.a -- "beg her to buy", buy agrees with her case <np.isClitic,vp.c2.isPrep> of {
<True,False> => [] ; -- clitic is attached to the verb or prefix
<True,True> => appCompVP vp.c2 (\\_ => BIND ++ np.clitic) ! wo ++ vp.comp ! a ! wo ;
_ => let nps : Mod=>Str = np.s ;
-- case np.takesYeAsComp of { True => replaceBare Clitic np.s ; -- TODO: later make a better rule, related to definiteness, when NP takes a clitic.
-- _ => np.s } ;
in appCompVP vp.c2 nps ! wo ++ vp.comp ! a ! wo
} ;
s = case <np.isClitic,vp.c2.isPrep> of {
<True,False> -- if it has no prep, the clitic is attached to the verb (or prefix, if it's a light verb).
=> (addClitic vp.lightverb np.clitic vp).s ;
_ => vp.s
} ;
obj = vp.obj ++ vp.agrObj ! np.a ; -- "beg her to buy", buy agrees with her
isNeg = np.isNeg
} ; } ;
---- AR 14/9/2017 trying to fix isAux = True case by inserting conjThat ---- AR 14/9/2017 trying to fix isAux = True case by inserting conjThat
@@ -174,19 +228,23 @@ oper
\\agr,ant => if_then_Str vv.isAux conjThat [] ++ \\agr,ant => if_then_Str vv.isAux conjThat [] ++
case <ant,vv.isDef,vv.compl> of { case <ant,vv.isDef,vv.compl> of {
-- Auxiliaries with defective inflection: complement inflects in tense -- Auxiliaries with defective inflection: complement inflects in tense
<VVPast,True,_> => showVPHvv (VPast Pos agr) agr vp ; <VVPast Indic,True,> => showVPHwithImpPrefix (VPast Pos agr) agr vp ;
-- <VVPast Anter> => showVPH PerfStem agr vp ++ pluperfAux Pos agr ; -- TODO do we need this? <VVPast Indic,_,_> => showVPH (VPast Pos agr) agr vp ;
<VVPerf,True,_> => showVPHvv PerfStem agr vp ++ subjAux Pos agr ; <VVPast Subj> => showVPH PerfStem agr vp ++ subjAux Pos agr ;
-- Auxiliaries that take indicative (full or defective inflection) -- Auxiliaries that take indicative (full or defective inflection)
<VVPres,_,Indic> => showVPHvv (VAor Pos agr) agr vp ; <VVPres,_,Indic> => showVPH (VAor Pos agr) agr vp ;
-- Default: complement in subjunctive -- Default: complement in subjunctive
_ => showVPHvv (VSubj Pos agr) agr vp ---- TODO more forms ? _ => showVPH (VSubj Pos agr) agr vp
} ;
insertAdv : Str -> VPH -> VPH = \ad,vp -> vp ** {
ad = vp.ad ++ ad ;
} ; } ;
insertAdV : Str -> VPH -> VPH = \ad,vp -> vp ** { insertAdV : Str -> VPH -> VPH = \ad,vp -> vp ** {
ad = vp.ad ++ ad ; ad = ad ++ vp.ad ;
} ; } ;
conjThat : Str = "که" ; conjThat : Str = "که" ;
@@ -198,31 +256,25 @@ oper
SlClause : Type = {quest : Order => Str ; subj : Str ; vp : TAnt => Polarity => Order => Str} ; SlClause : Type = {quest : Order => Str ; subj : Str ; vp : TAnt => Polarity => Order => Str} ;
---- AR 18/9/2017 intermediate SClause to preserve SOV in e.g. QuestionPes.QuestSlash ---- AR 18/9/2017 intermediate SClause to preserve SOV in e.g. QuestionPes.QuestSlash
-- TODO: check the VV forms with defective verbs
clTable : VPH -> (Agr => TAnt => Polarity => Str) = \vp -> clTable : VPH -> (Agr => TAnt => Polarity => Str) = \vp ->
\\agr,vt,pol => vp.prefix ++ case vt of { \\agr,vt,pol => vp.prefix ++ case vt of {
TA Pres Simul => vp.s ! ImpPrefix pol ++ vp.s ! VAor pol agr ; -- for reg. verbs, VAor pol is invariant and negation comes in ImpPrefix. Ind Pres Simul => vp.s ! ImpPrefix pol ++ vp.s ! VAor pol agr ; -- for reg. verbs, VAor pol is invariant and negation comes in ImpPrefix.
TA Pres Anter => vp.s ! VPerf pol agr ; Ind Pres Anter => vp.s ! VPerf pol agr ;
TA Past Simul => vp.s ! VPast pol agr ; Ind Past Simul => vp.s ! VPast pol agr ; -- Past Simul: simple past
TA Past Anter => Ind Past Anter | Ind Cond _ => -- Past Anter & Cond _: continuous past
case vp.vvtype of { case vp.vvtype of {
DefVV => vp.s ! ImpPrefix pol ++ vp.s ! VAor pol agr ; DefVV => vp.s ! VPast pol agr ;
_ => vp.s ! PerfStem ++ pluperfAux pol agr } ; _ => vp.s ! ImpPrefix pol ++ vp.s ! VPast Pos agr } ;
TA Fut Simul => Ind Fut Simul =>
case vp.vvtype of { case vp.vvtype of {
DefVV => vp.s ! ImpPrefix pol ++ vp.s ! VAor pol agr ; DefVV => vp.s ! ImpPrefix pol ++ vp.s ! VAor pol agr ;
_ => futAux pol agr ++ vp.s ! PastStem _ => futAux pol agr ++ vp.s ! PastStem
} ; -- PastStem is, despite the name, used for future too. /IL } ; -- PastStem is, despite the name, used for future too. /IL
TA Fut Anter => Ind Fut Anter =>
case vp.vvtype of { case vp.vvtype of {
DefVV => vp.s ! VPerf pol agr ; DefVV => vp.s ! VPerf pol agr ;
_ => "خواسته" ++ pluperfAux pol agr ++ vp.s ! PastStem _ => futAux pol agr ++ vp.s ! PastStem } ;
} ; -- verb form need to be confirmed Sub _ => vp.s ! VSubj pol agr -- TODO: anterior subjunctive ?
TA Cond Simul => vp.s ! VSubj pol agr ;
TA Cond Anter =>
case vp.vvtype of {
DefVV => vp.s ! VSubj pol agr ;
_ => vp.s ! PerfStem ++ subjAux pol agr } -- verb form to be confirmed
} ; } ;
mkClause : NP -> VPH -> Clause = \np,vp -> mkClause : NP -> VPH -> Clause = \np,vp ->
@@ -235,20 +287,25 @@ oper
OQuest => "آیا" } ; OQuest => "آیا" } ;
subj = np2str np ; subj = np2str np ;
vp = \\ta,p,ord => vp = \\ta,p,ord =>
let vps = clTable vp ! np.a ! ta ! p ; let pol = case orB np.isNeg vp.isNeg of {True => Neg ; _ => p} ;
vvt = ta2vvt ta ; vps = clTable vp ! np.a ! ta ! pol ;
in vp.ad ++ vp.comp ! np.a ++ vp.obj ++ vps vvt = ta2vvt ta vp.vvtype ;
++ vp.vComp ! np.a ! vvt ++ vp.embComp in case vp.vvtype of {
DefVV
=> vps ++ vp.ad ++ vp.comp ! np.a ! OV ++ vp.obj
++ vp.vComp ! np.a ! vvt ++ vp.embComp ;
_ => vp.ad ++ vp.comp ! np.a ! OV ++ vp.obj ++ vps
++ vp.vComp ! np.a ! vvt ++ vp.embComp }
}; };
--Clause : Type = {s : TAnt => Polarity => Order => Str} ; --Clause : Type = {s : TAnt => Polarity => Order => Str} ;
mkSClause : Str -> Agr -> VPH -> Clause = \subj,agr,vp -> { mkSClause : Str -> Agr -> VPH -> Clause = \subj,agr,vp -> {
s = \\ta,p,ord => s = \\ta,p,ord =>
let vps = clTable vp ! agr ! ta ! p ; let pol = case vp.isNeg of {True => Neg ; _ => p} ;
vps = clTable vp ! agr ! ta ! pol ;
quest = case ord of { ODir => [] ; OQuest => "آیا" } ; quest = case ord of { ODir => [] ; OQuest => "آیا" } ;
vvt = ta2vvt ta ; vvt = ta2vvt ta vp.vvtype ;
in quest ++ subj ++ vp.ad ++ vp.comp ! agr ++ vp.obj in quest ++ subj ++ vp.ad ++ vp.comp ! agr ! OV ++ vp.obj
-- in quest ++ vp.ad ++ subj ++ vp.comp ! agr ++ vp.obj -- TODO check which word order is better /IL
++ vps ++ vp.vComp ! agr ! vvt ++ vp.embComp ++ vps ++ vp.vComp ! agr ! vvt ++ vp.embComp
}; };

View File

@@ -7,15 +7,15 @@ concrete SentencePes of Sentence = CatPes ** open Prelude, ResPes,Predef in {
PredVP np vp = mkClause np vp ; PredVP np vp = mkClause np vp ;
PredSCVP sc vp = mkSClause ("این" ++ sc.s) defaultAgr vp ; PredSCVP sc vp = mkSClause sc.s defaultAgr vp ;
ImpVP vp = { ImpVP vp = {
s = \\pol,n => s = \\pol,n =>
let agr = Ag (numImp n) P2 ; let agr = Ag n P2 ;
vps = vp.prefix ++ vp.s ! VImp pol (numImp n) vps = vp.prefix ++ vp.s ! VImp pol n
in case vp.vvtype of { in case vp.vvtype of {
NoVV => vp.ad ++ vp.comp ! agr ++ vp.obj ++ vp.vComp ! agr ! VVPres ++ vps ++ vp.embComp ; NoVV => vp.ad ++ vp.comp ! agr ! OV ++ vp.obj ++ vp.vComp ! agr ! VVPres ++ vps ++ vp.embComp ;
_ => vps ++ vp.ad ++ vp.comp ! agr ++ vp.obj ++ vp.vComp ! agr ! VVPres ++ vp.embComp } _ => vps ++ vp.ad ++ vp.comp ! agr ! OV {-TODO check if legit-} ++ vp.obj ++ vp.vComp ! agr ! VVPres ++ vp.embComp }
} ; } ;
SlashVP np vp = SlashVP np vp =
@@ -38,27 +38,27 @@ concrete SentencePes of Sentence = CatPes ** open Prelude, ResPes,Predef in {
EmbedS s = {s = conjThat ++ s.s ! Indic} ; EmbedS s = {s = conjThat ++ s.s ! Indic} ;
EmbedQS qs = qs ; EmbedQS qs = qs ;
EmbedVP vp = {s = showVPH Inf defaultAgr vp} ; --- agr EmbedVP vp = {s = infVP vp} ; --- agr
UseCl temp p cl = { UseCl temp p cl = {
s = \\vvf => temp.s ++ p.s ++ case vvf of { s = \\vvf => temp.s ++ p.s ++ case vvf of {
Indic => cl.s ! TA temp.t temp.a ! p.p ! ODir ; Indic => cl.s ! Ind temp.t temp.a ! p.p ! ODir ;
Subj => cl.s ! TA Cond temp.a ! p.p ! ODir } Subj => cl.s ! Sub temp.a ! p.p ! ODir }
} ; } ;
UseQCl temp p qcl = let vt = TA temp.t temp.a in { UseQCl temp p qcl = let vt = Ind temp.t temp.a in {
s = temp.s ++ p.s ++ qcl.s ! vt ! p.p ; s = temp.s ++ p.s ++ qcl.s ! vt ! p.p ;
} ; } ;
UseRCl temp p rcl = let vt = TA temp.t temp.a in rcl ** { UseRCl temp p rcl = let vt = Ind temp.t temp.a in rcl ** {
s = \\a => temp.s ++ p.s ++ rcl.s ! vt ! p.p ! a s = \\a => temp.s ++ p.s ++ rcl.s ! vt ! p.p ! a
} ; } ;
UseSlash temp p cls = cls ** { UseSlash temp p cls = cls ** {
s = \\vvf => temp.s ++ p.s ++ cls.subj ++ case vvf of { s = \\vvf => temp.s ++ p.s ++ cls.subj ++ case vvf of {
Indic => cls.vp ! TA temp.t temp.a ! p.p ! ODir ; Indic => cls.vp ! Ind temp.t temp.a ! p.p ! ODir ;
Subj => cls.vp ! TA Cond temp.a ! p.p ! ODir } Subj => cls.vp ! Sub temp.a ! p.p ! ODir }
} ; } ;
AdvS a s = {s = \\vvf => a.s ++ s.s ! vvf} ; AdvS a s = {s = \\vvf => a.s ++ s.s ! vvf} ;

View File

@@ -7,7 +7,7 @@ concrete StructuralPes of Structural = CatPes **
lin lin
above_Prep = mkPrep "بالای" ; above_Prep = mkPrep "بالای" ;
after_Prep = mkPrep ["بعد از"] ; after_Prep = mkPrep ["بعد از"] ;
all_Predet = ss ["همه ی"] ; all_Predet = ss (zwnj "همه" "ی") ;
almost_AdA, almost_AdN = ss "تقریباً" ; almost_AdA, almost_AdN = ss "تقریباً" ;
although_Subj = mkSubj "با وجود این" ; although_Subj = mkSubj "با وجود این" ;
always_AdV = ss "همیشه" ; always_AdV = ss "همیشه" ;
@@ -21,12 +21,12 @@ concrete StructuralPes of Structural = CatPes **
by8agent_Prep = mkPrep "توسط" ; by8agent_Prep = mkPrep "توسط" ;
by8means_Prep = mkPrep "با" ; by8means_Prep = mkPrep "با" ;
-- can8know_VV,can_VV = mkVV (mkV "سکن") ; -- can8know_VV,can_VV = mkVV (mkV "سکن") ;
can_VV = mkVV (mkV_1 "توانستن") ; ---- AR can_VV = let isAux = False in mkVV isAux subjunctive (mkV_1 "توانستن") ; ---- AR
during_Prep = mkPrep ["در طول"] ; during_Prep = mkPrep ["در طول"] ;
either7or_DConj = sd2 "یا" "یا" ** {n = Sg} ; either7or_DConj = sd2 "یا" "یا" ** {n = Sg} ;
-- everybody_NP = R.indeclNP "هر کwی"; -- everybody_NP = R.indeclNP "هر کwی";
every_Det = mkDet "هر" Sg ; every_Det = mkDet "هر" Sg ;
-- everything_NP = R.indeclNP ["هر XE"])); everything_NP = DetCN (mkDet "همه" Sg) (UseN (mkN "چیز")) ;
everywhere_Adv = ss ["هر جا"] ; everywhere_Adv = ss ["هر جا"] ;
few_Det = mkDet ["تعداد کمی"] Pl True; -- check few_Det = mkDet ["تعداد کمی"] Pl True; -- check
for_Prep = mkPrep "برای" Ezafe ; for_Prep = mkPrep "برای" Ezafe ;
@@ -44,7 +44,7 @@ concrete StructuralPes of Structural = CatPes **
in_Prep = mkPrep "در" ; in_Prep = mkPrep "در" ;
it_Pron = R.agr2pron ! Ag Sg P3; it_Pron = R.agr2pron ! Ag Sg P3;
less_CAdv = {s = "کمتر" ; p = ""} ; less_CAdv = {s = "کمتر" ; p = ""} ;
many_Det = mkDet "بسیار" Pl False Ezafe ; many_Det = let isNum, isNeg = False in mkDet "بسیار" Pl isNum isNeg Ezafe ;
more_CAdv = {s = "بیشتر" ; p = "" } ; more_CAdv = {s = "بیشتر" ; p = "" } ;
most_Predet = ss "اکثر"; most_Predet = ss "اکثر";
much_Det = mkDet ["مقدار زیادی"] Pl ; much_Det = mkDet ["مقدار زیادی"] Pl ;
@@ -57,9 +57,9 @@ concrete StructuralPes of Structural = CatPes **
only_Predet = ss "فقط" ; only_Predet = ss "فقط" ;
or_Conj = sd2 [] "یا" ** {n = Sg} ; or_Conj = sd2 [] "یا" ** {n = Sg} ;
otherwise_PConj = ss ["درغیراین صورت"] ; otherwise_PConj = ss ["درغیراین صورت"] ;
part_Prep = mkPrep "از" ; -- TODO: the object following it should be in Ezafa form part_Prep = mkPrep "از" Ezafe ;
please_Voc = ss "لطفاً" ; please_Voc = ss "لطفاً" ;
possess_Prep = mkPrep "" ; -- will be handeled in Ezafeh possess_Prep = mkPrep [] Ezafe ;
quite_Adv = ss "کاملاً" ; quite_Adv = ss "کاملاً" ;
she_Pron = R.agr2pron ! Ag Sg P3 ; she_Pron = R.agr2pron ! Ag Sg P3 ;
so_AdA = ss "بسیار" ; so_AdA = ss "بسیار" ;
@@ -101,12 +101,12 @@ concrete StructuralPes of Structural = CatPes **
youSg_Pron = R.agr2pron ! Ag Sg P2 ; youSg_Pron = R.agr2pron ! Ag Sg P2 ;
youPl_Pron = R.agr2pron ! Ag Pl P2 ; youPl_Pron = R.agr2pron ! Ag Pl P2 ;
youPol_Pron = R.agr2pron ! Ag Pl P2 ; youPol_Pron = R.agr2pron ! Ag Pl P2 ;
-- no_Quant = demoPN "هیچ" ; no_Quant = mkQuant "هیچ" "هیچ" Clitic True ;
not_Predet = {s="نه"} ; not_Predet = {s="نه"} ;
if_then_Conj = sd2 "اگر" "آنگاه" ** {n = Sg} ; if_then_Conj = sd2 "اگر" "آنگاه" ** {n = Sg} ;
at_least_AdN = ss "حداقل" ; at_least_AdN = ss "حداقل" ;
at_most_AdN = ss "حداکثر"; at_most_AdN = ss "حداکثر";
nothing_NP = R.indeclNP "هیچ" ; nothing_NP = R.indeclNP "هیچ چیز" ** {isNeg = True} ;
except_Prep = mkPrep ["به جز"] ; except_Prep = mkPrep ["به جز"] ;
nobody_NP = R.indeclNP "هیچ کس"; nobody_NP = R.indeclNP "هیچ کس";
@@ -114,7 +114,7 @@ concrete StructuralPes of Structural = CatPes **
---- have_V2 = mkV2 (mkV "داشتن" "دار") "را" ; ---- have_V2 = mkV2 (mkV "داشتن" "دار") "را" ;
language_title_Utt = ss "پeرسن" ; language_title_Utt = ss "فارسی" ;
---- AR from Nasrin ---- AR from Nasrin
@@ -126,12 +126,7 @@ have_V2 = haveVerb ** {
VImp Pos Pl => "داشته باشید" ; VImp Pos Pl => "داشته باشید" ;
VImp Neg Sg => "نداشته باش" ; VImp Neg Sg => "نداشته باش" ;
VImp Neg Pl => "نداشته باشید" ; VImp Neg Pl => "نداشته باشید" ;
VSubj _ (Ag Sg P1) => "داشته باشم" ; VSubj p agr => "داشته" ++ subjAux p agr ;
VSubj _ (Ag Sg P2) => "داشته باشی" ;
VSubj _ (Ag Sg P3) => "داشته باشد" ;
VSubj _ (Ag Pl P1) => "داشته باشیم" ;
VSubj _ (Ag Pl P2) => "داشته باشید" ;
VSubj _ (Ag Pl P3) => "داشته باشند" ;
x => haveVerb.s ! x } ; x => haveVerb.s ! x } ;
c2 = prepOrRa [] -- "را" ; ---- AR 18/9/2017: usually no ra acc. to Nasrin, but this is tricky c2 = prepOrRa [] -- "را" ; ---- AR 18/9/2017: usually no ra acc. to Nasrin, but this is tricky
} ; } ;

View File

@@ -25,7 +25,7 @@ concrete SymbolPes of Symbol = CatPes ** open Prelude, ResPes in {
SymbS sy = {s = \\_ => sy.s} ; SymbS sy = {s = \\_ => sy.s} ;
SymbNum sy = {s = sy.s ; n = Pl} ; SymbNum sy = {s = sy.s ; n = Pl} ;
SymbOrd sy = { s = sy.s ++ "wN" ; n = Pl; isNum,isPre=False} ; SymbOrd sy = {s = sy.s ; n = Sg ; isNum,isPre=False} ;
lincat lincat

View File

@@ -13,13 +13,17 @@ concrete VerbPes of Verb = CatPes ** open ResPes,Prelude in {
ComplSlash = complSlash ; ComplSlash = complSlash ;
ComplVV = insertVV ; ComplVV = insertVV ;
ComplVS v s = embComp (conjThat ++ s.s ! Indic) (predV v) ; ComplVS v s = embComp (conjThat ++ s.s ! v.compl) (predV v) ;
ComplVQ v q = embComp (conjThat ++ q.s) (predV v) ; ComplVQ v q = embComp (conjThat ++ q.s) (predV v) ;
ComplVA v ap = insertObj (appComp v.c2 ap.s) (predV v) ; -- check form of adjective ComplVA v ap = let adjStr = appComp v.c2 ap.s in
case ap.afterPrefix of {
True => predV (v ** {prefix = v.prefix ++ adjStr}) ;
False => insertObj adjStr (predV v) -- check form of adjective
} ;
SlashVV vv vps = vps ** ComplVV vv vps ; SlashVV vv vps = vps ** ComplVV vv vps ;
SlashV2S v s = predVc v ** embComp (conjThat ++ s.s ! Indic) (predV v) ; SlashV2S v s = predVc v ** ComplVS v s ;
SlashV2Q v q = predVc v ** embComp q.s (predV v) ; SlashV2Q v q = predVc v ** ComplVQ v q ;
SlashV2A v ap = predVc v ** insertObj (appComp v.c2 ap.s) (predV v) ; ---- paint it red , check form of adjective SlashV2A v ap = predVc v ** insertObj (appComp v.c2 ap.s) (predV v) ; ---- paint it red , check form of adjective
-- : V2V -> VP -> VPSlash ; -- beg (her) to go -- : V2V -> VP -> VPSlash ; -- beg (her) to go
@@ -35,8 +39,8 @@ concrete VerbPes of Verb = CatPes ** open ResPes,Prelude in {
-- : V2V -> NP -> VPSlash -> VPSlash ; -- beg me to buy -- : V2V -> NP -> VPSlash -> VPSlash ; -- beg me to buy
SlashV2VNP v2v np vps = predVc v2v ** { SlashV2VNP v2v np vps = predVc v2v ** {
comp = \\a => if_then_Str v2v.isAux conjThat [] -- that comp = \\a,wo => if_then_Str v2v.isAux conjThat [] -- that
++ appComp v2v.c2 np.s ; -- I ++ appCompVP v2v.c2 np.s ! wo ; -- I
-- ∅ is placed in comp -- ∅ is placed in comp
vComp = \\_,_ => showVPH (case v2v.compl of { -- buy vComp = \\_,_ => showVPH (case v2v.compl of { -- buy
Subj => VSubj Pos np.a ; Subj => VSubj Pos np.a ;
@@ -50,16 +54,17 @@ concrete VerbPes of Verb = CatPes ** open ResPes,Prelude in {
VPSlashPrep vp prep = vp ** vs prep ; VPSlashPrep vp prep = vp ** vs prep ;
AdvVP vp adv = insertAdV adv.s vp ; AdvVP vp adv = insertAdv adv.s vp ;
AdVVP adv vp = insertAdV adv.s vp ; AdVVP adv vp = insertAdV adv.s vp ;
ReflVP v = insertCompPre reflPron v ; ReflVP = insertCompPre reflPron ;
PassV2 v = predV v ; -- need to be fixed PassV2 = passV ;
UseComp comp = insertComp comp.s (predV beVerb) ; UseComp comp = insertComp comp.s (predV beVerb) ;
CompAP ap = {s = \\_ => ap.s ! Bare} ; -- check form of adjective CompAP ap = {s = \\_ => ap.s ! Bare} ; -- check form of adjective
CompAdv adv = {s = \\_ => adv.s} ; CompAdv adv = {s = \\_ => adv.s} ;
-- see https://sites.la.utexas.edu/persian_online_resources/nouns/noun-in-a-predicative-position/ -- see https://sites.la.utexas.edu/persian_online_resources/nouns/noun-in-a-predicative-position/
-- TODO: extend this to all verbs, when NP is indefinite
CompCN cn = { CompCN cn = {
s = \\a => cn.s ! giveNumber a s = \\a => cn.s ! giveNumber a
! case cn.hasAdj of { ! case cn.hasAdj of {
@@ -68,7 +73,7 @@ concrete VerbPes of Verb = CatPes ** open ResPes,Prelude in {
} ; } ;
CompNP np = { CompNP np = {
s = \\a => np.s ! case np.hasAdj of { s = \\a => np.s ! case np.takesYeAsComp of {
False => Bare ; False => Bare ;
True => Clitic } True => Clitic }
} ; } ;

View File

@@ -238,7 +238,7 @@ instance DiffPor of DiffRomance - [iAdvQuestionInv,chooseTA,otherInv,partAgr,sta
<RCond,Simul> => <verb ! VFin VCondit n p, []> ; --# notpresent <RCond,Simul> => <verb ! VFin VCondit n p, []> ; --# notpresent
<RCond,Anter> => <vaux ! VFin VCondit n p, part> ; --# notpresent <RCond,Anter> => <vaux ! VFin VCondit n p, part> ; --# notpresent
<RPasse,Simul> => <verb ! VFin VPasse n p, []> ; --# notpresent <RPasse,Simul> => <verb ! VFin VPasse n p, []> ; --# notpresent
<RPasse,Anter> => <vaux ! VFin VPasse n p, part> ; --# notpresent <RPasse,Anter> => <vaux ! VFin (VPres m) n p, part> ; --# notpresent
<RPres,Anter> => <verb ! VFin VPasse n p, []> ; --# notpresent <RPres,Anter> => <verb ! VFin VPasse n p, []> ; --# notpresent
<RPres,Simul> => <verb ! VFin (VPres m) n p, []> <RPres,Simul> => <verb ! VFin (VPres m) n p, []>
} ; } ;

View File

@@ -8,6 +8,7 @@ concrete ExtendPor of Extend = CatPor ** ExtendRomanceFunctor -
GenRP, GenRP,
ICompAP, ICompAP,
InOrderToVP, InOrderToVP,
EmbedSSlash,
WithoutVP, WithoutVP,
iFem_Pron, iFem_Pron,
theyFem_Pron, theyFem_Pron,
@@ -60,6 +61,9 @@ concrete ExtendPor of Extend = CatPor ** ExtendRomanceFunctor -
exist_V : V ; exist_V : V ;
exist_V = mkV "existir" ; exist_V = mkV "existir" ;
lin
EmbedSSlash s = {s = \\_ => "o que" ++ s.s ! {g = Masc ; n = Sg} ! Indic} ;
lin lin
CompoundN noun noun2 = { -- order is different because that's needed for correct translation from english CompoundN noun noun2 = { -- order is different because that's needed for correct translation from english
s = \\n => noun2.s ! n s = \\n => noun2.s ! n

View File

@@ -35,6 +35,7 @@ resource ParadigmsPor =
Prelude, Prelude,
MorphoPor, MorphoPor,
BeschPor, BeschPor,
DiffPor,
CatPor in { CatPor in {
flags optimize=all ; flags optimize=all ;
@@ -79,6 +80,18 @@ oper
dative : Prep ; -- preposition "a" and its contractions dative : Prep ; -- preposition "a" and its contractions
dative = lin Prep complDat ; dative = lin Prep complDat ;
CopulaType : Type ;
CopulaType = DiffPor.CopulaType ;
serCopula : CopulaType ;
serCopula = DiffPor.serCopula ;
estarCopula : CopulaType ;
estarCopula = DiffPor.estarCopula ;
ficarCopula : CopulaType ;
ficarCopula = DiffPor.ficarCopula ;
mkPrep = overload { mkPrep = overload {
mkPrep : Str -> Prep -- other preposition mkPrep : Str -> Prep -- other preposition
= \p -> lin Prep {s = p ; c = Acc ; isDir = False} ; = \p -> lin Prep {s = p ; c = Acc ; isDir = False} ;

View File

@@ -34,7 +34,7 @@ incomplete concrete AdjectiveRomance of Adjective =
ComplA2 adj np = { ComplA2 adj np = {
s = \\af => adj.s ! Posit ! af ++ appCompl adj.c2 np ; s = \\af => adj.s ! Posit ! af ++ appCompl adj.c2 np ;
isPre = False ; isPre = False ;
copTyp = serCopula copTyp = adj.copTyp
} ; } ;
ReflA2 adj = { ReflA2 adj = {
@@ -42,7 +42,7 @@ incomplete concrete AdjectiveRomance of Adjective =
adj.s ! Posit ! af ++ adj.s ! Posit ! af ++
adj.c2.s ++ prepCase adj.c2.c ++ reflPron Sg P3 Nom ; --- agr adj.c2.s ++ prepCase adj.c2.c ++ reflPron Sg P3 Nom ; --- agr
isPre = False ; isPre = False ;
copTyp = serCopula copTyp = adj.copTyp
} ; } ;
SentAP ap sc = { SentAP ap sc = {
@@ -60,7 +60,7 @@ incomplete concrete AdjectiveRomance of Adjective =
UseA2 a = { UseA2 a = {
s = a.s ! Posit ; s = a.s ! Posit ;
isPre = False ; ---- A2 has no isPre isPre = False ; ---- A2 has no isPre
copTyp = serCopula ---- A2 has no copTyp (yet) copTyp = a.copTyp
} ; } ;
AdvAP ap adv = { AdvAP ap adv = {

View File

@@ -106,7 +106,7 @@ incomplete concrete CatRomance of Cat = CommonX - [SC,Pol]
VS = Verb ** {m : RPolarity => Mood} ; VS = Verb ** {m : RPolarity => Mood} ;
A = {s : Degree => AForm => Str ; isPre : Bool ; copTyp : CopulaType} ; A = {s : Degree => AForm => Str ; isPre : Bool ; copTyp : CopulaType} ;
A2 = {s : Degree => AForm => Str ; c2 : Compl} ; A2 = {s : Degree => AForm => Str ; c2 : Compl ; copTyp : CopulaType} ;
N = Noun ; N = Noun ;
N2 = Noun ** {c2 : Compl} ; N2 = Noun ** {c2 : Compl} ;

View File

@@ -51,7 +51,11 @@ incomplete concrete ExtendRomanceFunctor of Extend =
-- s = \\agr,t,a,p,m => cls.s ! agr ! DDir ! t ! a ! p ! m ++ cls.c2.s ; -- s = \\agr,t,a,p,m => cls.s ! agr ! DDir ! t ! a ! p ! m ++ cls.c2.s ;
-- c = Nom -- c = Nom
-- } ; -- } ;
SubjRelNP np rs = heavyNPpol np.isNeg {
s = \\c => (np.s ! c).ton ++ rs.s ! Conjunct ! np.a ;
a = np.a ;
hasClit = False
} ;
lin lin
PredVPS np vpi = { PredVPS np vpi = {
s = \\m => (np.s ! Nom).comp ++ vpi.s ! m ! np.a ! np.isNeg s = \\m => (np.s ! Nom).comp ++ vpi.s ! m ! np.a ! np.isNeg
@@ -119,6 +123,12 @@ incomplete concrete ExtendRomanceFunctor of Extend =
ExistMassCN cn = ExistNP (MassNP cn) ; ExistMassCN cn = ExistNP (MassNP cn) ;
ExistPluralCN cn = ExistNP (DetCN (DetQuant IndefArt NumPl) cn) ; ExistPluralCN cn = ExistNP (DetCN (DetQuant IndefArt NumPl) cn) ;
AdvIsNP adv np = mkClause adv.s False False np.a (UseComp_estar (CompNP np)) ; AdvIsNP adv np = mkClause adv.s False False np.a (UseComp_estar (CompNP np)) ;
AdvIsNPAP adv np ap = -- <aquí:Adv> está <documentada:AP> <la examinación:NP>
let emptyN : N = lin N {s = \\_ => [] ; g = np.a.g} ; -- To match the gender of the N
indef : Quant = IndefArt ** {s = \\b,n,g,c => []} ;
det : Det = case np.a.n of {Sg => DetQuant indef NumSg ; Pl => DetQuant indef NumPl} ;
apAsNP : NP = DetCN det (AdjCN ap (UseN emptyN)) ; -- NP where the string comes only from AP
in AdvIsNP adv (ApposNP apAsNP np) ;
lin lin
ComplBareVS = ComplVS ; -- VS -> S -> VP ; -- say she runs ; DEFAULT say that she runs ComplBareVS = ComplVS ; -- VS -> S -> VP ; -- say she runs ; DEFAULT say that she runs
@@ -186,6 +196,8 @@ incomplete concrete ExtendRomanceFunctor of Extend =
InOrderToVP = variants {} ; -- VP -> Adv ; -- (in order) to publish the document InOrderToVP = variants {} ; -- VP -> Adv ; -- (in order) to publish the document
PredIAdvVP iadv vp = {s = \\_,_,_,_ => iadv.s ++ infStr vp} ;
ApposNP np1 np2 = np1 ** { ApposNP np1 np2 = np1 ** {
s = \\c => { s = \\c => {
c1 = (np1.s ! c).c1 ++ (np2.s ! c).c1 ; c1 = (np1.s ! c).c1 ++ (np2.s ! c).c1 ;
@@ -217,7 +229,15 @@ incomplete concrete ExtendRomanceFunctor of Extend =
lin lin
DetNPMasc = DetNP ; DetNPMasc = DetNP ;
DetNPFem = DetNP ; DetNPFem det =
let
g = Fem ;
n = det.n
in heavyNPpol det.isNeg {
s = det.sp ! g ;
a = agrP3 g n ;
hasClit = False
} ;
lin lin
iFem_Pron = i_Pron ; -- DEFAULT I (masc) iFem_Pron = i_Pron ; -- DEFAULT I (masc)

View File

@@ -1,5 +1,6 @@
--# -path=.:../abstract:../common:../prelude --# -path=.:../abstract:../common:../prelude
concrete AllSlv of AllSlvAbs = concrete AllSlv of AllSlvAbs =
LangSlv LangSlv,
ExtendSlv
** {} ; ** {} ;

View File

@@ -0,0 +1,61 @@
--# -path=.:../abstract:../common:prelude
concrete ExtendSlv of Extend = CatSlv ** open ResSlv, ParadigmsSlv, GrammarSlv in {
lin
iFem_Pron = mkPron "jàz" "méne" "méne" "méni" "méni" ("menój"|"máno")
"mój" "mòjega" "mòjemu" ("mòj"|"mòjega") "mòjem" "mòjim"
"mòja" "mòjih" "mòjima" "mòja" "mòjih" "mòjima"
"mòji" "mòjih" "mòjim" "mòje" "mòjih" "mòjimi"
"mòja" "mòje" "mòji" "mòjo" "mòji" "mòjo"
"mòji" "mòjih" "mòjima" "mòji" "mòjih" "mòjima"
"mòje" "mòjih" "mòjim" "mòje" "mòjih" "mòjimi"
"mòje" "mòjega" "mòjemu" "mòjo" "mòjem" "mòjim"
"mòji" "mòjih" "mòjima" "mòji" "mòjih" "mòjima"
"mòja" "mòjih" "mòjim" "mòja" "mòjih" "mòjimi" Fem Sg P1 ;
youFem_Pron = mkPron "tí" "tébe" "tébe" "tébi" "tébi" ("tebój"|"tábo")
"tvój" "tvòjega" "tvòjemu" ("tvòj"|"tvòjega") "tvòjem" "tvòjim"
"tvòja" "tvòjih" "tvòjima" "tvòja" "tvòjih" "tvòjima"
"tvòji" "tvòjih" "tvòjim" "tvòje" "tvòjih" "tvòjimi"
"tvòja" "tvòje" "tvòji" "tvòjo" "tvòji" "tvòjo"
"tvòji" "tvòjih" "tvòjima" "tvòji" "tvòjih" "tvòjima"
"tvòje" "tvòjih" "tvòjim" "tvòje" "tvòjih" "tvòjimi"
"tvòje" "tvòjega" "tvòjemu" "tvòjo" "tvòjem" "tvòjim"
"tvòji" "tvòjih" "tvòjima" "tvòji" "tvòjih" "tvòjima"
"tvòja" "tvòjih" "tvòjim" "tvòja" "tvòjih" "tvòjimi" Fem Sg P2 ;
weFem_Pron = mkPron "mí" "nàs" "nàs" "nàm" "nàs" "nàmi"
"nàš" "nášega" "nášemu" ("náši"|"nášega") "nášem" "nášim"
"náša" "náših" "nášima" "náša" "náših" "nášima"
"náši" "náših" "nášim" "náše" "náših" "nášimi"
"náša" "náše" "náši" "nášo" "náši" "nášo"
"náši" "náših" "nášima" "náši" "náših" "nášima"
"náše" "náših" "nášim" "náše" "náših" "nášimi"
"náše" "nášega" "nášemu" "náše" "nášem" "nášim"
"náši" "náših" "nášima" "náši" "náših" "nášima"
"náša" "náših" "nášim" "náša" "náših" "nášimi" Fem Pl P1 ;
youPlFem_Pron = mkPron "ví" "vàs" "vàs" "vàm" "vàs" "vàmi"
"vàš" "vášega" "vášemu" ("váši"|"vášega") "vášem" "vášim"
"váša" "váših" "vášima" "váša" "váših" "vášima"
"váši" "váših" "vášim" "váše" "váših" "vášimi"
"váša" "váše" "váši" "vášo" "váši" "vášo"
"váši" "váših" "vášima" "váši" "váših" "vášima"
"váše" "váših" "vášim" "váše" "váših" "vášimi"
"váše" "vášega" "vášemu" "váše" "vášem" "vášim"
"váši" "váših" "vášima" "váši" "váših" "vášima"
"váša" "váših" "vášim" "váša" "váših" "vášimi" Fem Pl P2 ;
theyFem_Pron = mkPron "ôni" "njìh" "njìh" "njìm" "njìh" "njími"
"njíhov" "njíhovega" "njíhovemu" ("njíhov"|"njíhovega") "njíhovem" "njíhovim"
"njíhova" "njíhovih" "njíhovima" "njíhova" "njíhovih" "njíhovima"
"njíhovi" "njíhovih" "njíhovim" "njíhove" "njíhovih" "njíhovimi"
"njíhova" "njíhove" "njíhovi" "njíhovo" "njíhovi" "njíhovo"
"njíhovi" "njíhovih" "njíhovima" "njíhovi" "njíhovih" "njíhovima"
"njíhove" "njíhovih" "njíhovim" "njíhove" "njíhovih" "njíhovimi"
"njíhove" "njíhovega" "njíhovemu" "njíhovo" "njíhovem" "njíhovim"
"njíhovi" "njíhovih" "njíhovima" "njíhovi" "njíhovih" "njíhovima"
"njíhova" "njíhovih" "njíhovim" "njíhova" "njíhovih" "njíhovimi" Fem Pl P3 ;
youPolFem_Pron = youPlFem_Pron ;
youPolPl_Pron = youPol_Pron ;
youPolPlFem_Pron = youPlFem_Pron ;
}

View File

@@ -71,7 +71,7 @@ concrete CatSom of Cat = CommonX - [Adv] ** open ResSom, Prelude in {
Det = ResSom.Determiner ; Det = ResSom.Determiner ;
Predet = {s : Str} ; Predet = {s : Str} ;
Quant = ResSom.Quant ; Quant = ResSom.Quant ;
Num = { s : Str ; n : Number ; isNum : Bool } ; Num = ResSom.Num ;
Card, Ord = {s : Str ; n : Number} ; Card, Ord = {s : Str ; n : Number} ;
DAP = ResSom.Determiner ; DAP = ResSom.Determiner ;
@@ -100,8 +100,7 @@ concrete CatSom of Cat = CommonX - [Adv] ** open ResSom, Prelude in {
-- additional lexicon modules. -- additional lexicon modules.
V, V,
V2, -- TODO: eventually proper lincats
V3,
VV, -- verb-phrase-complement verb e.g. "want" VV, -- verb-phrase-complement verb e.g. "want"
VS, -- sentence-complement verb e.g. "claim" VS, -- sentence-complement verb e.g. "claim"
VQ, -- question-complement verb e.g. "wonder" VQ, -- question-complement verb e.g. "wonder"
@@ -111,6 +110,9 @@ concrete CatSom of Cat = CommonX - [Adv] ** open ResSom, Prelude in {
V2Q, -- verb with NP and Q complement e.g. "ask" V2Q, -- verb with NP and Q complement e.g. "ask"
V2A = ResSom.Verb ; -- verb with NP and AP complement e.g. "paint" V2A = ResSom.Verb ; -- verb with NP and AP complement e.g. "paint"
V2 = ResSom.Verb2 ;
V3 = ResSom.Verb3 ;
A = ResSom.Adjective ; A = ResSom.Adjective ;
A2 = ResSom.Adjective2 ; A2 = ResSom.Adjective2 ;

View File

@@ -95,7 +95,7 @@ lin city_N = mkN "magaalo" ;
-- lin doctor_N = mkN "" ; -- lin doctor_N = mkN "" ;
-- lin dog_N = mkN "" ; -- lin dog_N = mkN "" ;
-- lin door_N = mkN "" ; -- lin door_N = mkN "" ;
-- lin drink_V2 = mkV2 "" ; lin drink_V2 = mkV2 "cab" ;
-- lin dry_A = mkA "" ; -- lin dry_A = mkA "" ;
-- lin dull_A = mkA "" ; -- lin dull_A = mkA "" ;
-- lin dust_N = mkN "" ; -- lin dust_N = mkN "" ;
@@ -118,7 +118,7 @@ lin city_N = mkN "magaalo" ;
-- lin fall_V = mkV "" ; -- lin fall_V = mkV "" ;
-- lin far_Adv = mkA "" ; -- lin far_Adv = mkA "" ;
-- lin fat_N = mkN "" ; -- lin fat_N = mkN "" ;
-- lin father_N2 = mkN "" ; lin father_N2 = mkN2 (shortPossN (mkN "aabbe")) noPrep ;
-- lin fear_V2 = mkV2 "" ; -- lin fear_V2 = mkV2 "" ;
-- lin fear_VS = mkVS "" ; -- lin fear_VS = mkVS "" ;
-- lin feather_N = mkN "" ; -- lin feather_N = mkN "" ;
@@ -148,7 +148,7 @@ lin city_N = mkN "magaalo" ;
-- lin garden_N = mkN "" ; -- lin garden_N = mkN "" ;
lin girl_N = mkN "gabadh" "gabdho" fem ; lin girl_N = mkN "gabadh" "gabdho" fem ;
-- lin give_V3 = mkV3 "" ; lin give_V3 = mkV3 "bixiyo" ;
-- lin glove_N = mkN "" ; -- lin glove_N = mkN "" ;
-- lin go_V = joan_V ; -- lin go_V = joan_V ;
-- lin gold_N = mkN "" ; -- lin gold_N = mkN "" ;
@@ -227,7 +227,7 @@ lin man_N = mkN "nin" ;
-- lin meat_N = mkN "" ; -- lin meat_N = mkN "" ;
-- lin milk_N = mkN "" ; -- lin milk_N = mkN "" ;
-- lin moon_N = mkN "" ; -- lin moon_N = mkN "" ;
-- lin mother_N2 = mkN "" ; lin mother_N2 = mkN2 (shortPossN (mkN "hooyo")) noPrep ;
-- lin mountain_N = mkN "" ; -- lin mountain_N = mkN "" ;
-- lin mouth_N = mkN "" ; -- lin mouth_N = mkN "" ;
-- lin music_N = mkN "" ; -- lin music_N = mkN "" ;
@@ -235,7 +235,7 @@ lin man_N = mkN "nin" ;
---- ----
-- N -- N
-- lin name_N = mkN "" ; lin name_N = mkN "magac" ;
-- lin narrow_A = mkA "" ; -- lin narrow_A = mkA "" ;
-- lin near_A = mkA "" ; -- lin near_A = mkA "" ;
-- lin neck_N = mkN "" ; -- lin neck_N = mkN "" ;
@@ -333,7 +333,7 @@ lin small_A = mkA "yar" ;
-- lin snow_N = mkN "" ; -- lin snow_N = mkN "" ;
-- lin sock_N = mkN "" ; -- lin sock_N = mkN "" ;
-- lin song_N = mkN "" ; -- lin song_N = mkN "" ;
-- lin speak_V2 = mkV2 "" ; lin speak_V2 = mkV2 "hadlo" ;
-- lin spit_V = mkV "" ; -- lin spit_V = mkV "" ;
-- lin split_V2 = mkV2 "" ; -- lin split_V2 = mkV2 "" ;
-- lin squeeze_V2 = mkV2 "" ; -- lin squeeze_V2 = mkV2 "" ;

View File

@@ -6,26 +6,29 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in {
--2 Noun phrases --2 Noun phrases
-- The three main types of noun phrases are
-- - common nouns with determiners
-- - proper names
-- - pronouns
-- : Det -> CN -> NP -- : Det -> CN -> NP
DetCN det cn = useN cn ** { DetCN det cn = useN cn ** {
s = \\c => s = sTable ;
a = getAgr det.d cn.g ;
sp = sTable ! Nom }
where {
sTable : Case => Str = \\c =>
let nfc : {nf : NForm ; c : Case} = let nfc : {nf : NForm ; c : Case} =
case <c,cn.hasMod,det.d> of { case <c,cn.hasMod,det.d> of {
<Nom,True, Indef Sg> => {nf=Indef Sg ; c=Abs} ;
<Nom,False,Indef Sg> => {nf=IndefNom ; c=Nom} ; -- special form for fem. nouns <Nom,False,Indef Sg> => {nf=IndefNom ; c=Nom} ; -- special form for fem. nouns
<Nom,True,Def x vA> => {nf=Def x vA ; c=Abs} ; <Nom,False,Def x NA> => {nf=Def x vU ; c=Nom} ; -- special case for DefArt
<Nom,False,Def x vA> => {nf=Def x vU ; c=Nom} ; <Nom,True,_> => {nf=det.d ; c=Abs} ; -- If cn has modifier, the Nom ending attaches to the modifier
_ => {nf=det.d ; c=c} _ => {nf=det.d ; c=c}
} ; } ;
in cn.s ! nfc.nf detStr : Str =
++ det.s ! nfc.c case <det.isPoss,cn.shortPoss> of {
++ cn.mod ! getNum (getAgr det.d Masc) ! c ; <True,True> => det.shortPoss ;
a = getAgr det.d cn.g _ => det.s ! nfc.c
} ;
in det.pref -- if det is numeral. TODO find out if gender/case/other distinction.
++ cn.s ! nfc.nf
++ detStr -- non-numeral det
++ cn.mod ! getNum (getAgr det.d Masc) ! c
} ; } ;
-- : PN -> NP ; -- : PN -> NP ;
@@ -37,7 +40,6 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in {
-- : Pron -> NP ; -- : Pron -> NP ;
UsePron pron = lin NP pron ; UsePron pron = lin NP pron ;
-- : Predet -> NP -> NP ; -- only the man -- : Predet -> NP -> NP ; -- only the man
PredetNP predet np = np ** { PredetNP predet np = np ** {
s = \\c => predet.s ++ np.s ! c ---- ? s = \\c => predet.s ++ np.s ! c ---- ?
@@ -80,13 +82,25 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in {
-- quantifier and an optional numeral can be discerned. -- quantifier and an optional numeral can be discerned.
-- : Quant -> Num -> Det ; -- : Quant -> Num -> Det ;
-- DetQuant quant num = quant ** DetQuant quant num = quant ** {
-- { } ; pref = num.s ;
sp = \\g => case <num.n,g> of {
<Sg,Masc> => quant.sp ! SgMasc ;
<Sg,Fem> => quant.sp ! SgFem ;
<Pl,_> => quant.sp ! InvarPl } ;
d = case <num.isNum,quant.st> of {
<True,_> => Numerative ;
<False,Definite> => Def num.n quant.v ;
<False,Indefinite> => Indef num.n } ;
} ;
-- : Quant -> Num -> Ord -> Det ; -- these five best -- : Quant -> Num -> Ord -> Det ; -- these five best
-- DetQuantOrd quant num ord = DetQuantOrd quant num ord =
-- let theseFive = DetQuant quant num let theseFive = DetQuant quant num in theseFive ** {
-- in theseFive ** { s = \\c,ph => theseFive.s ! c ! ph ++ ord.s } ; --TODO: dummy implementation s = \\c => theseFive.s ! c ++ ord.s ;
sp = \\g,c => theseFive.sp ! g ! c ++ ord.s
} ;
-- Whether the resulting determiner is singular or plural depends on the -- Whether the resulting determiner is singular or plural depends on the
-- cardinal. -- cardinal.
@@ -94,10 +108,10 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in {
-- All parts of the determiner can be empty, except $Quant$, which is -- All parts of the determiner can be empty, except $Quant$, which is
-- the "kernel" of a determiner. It is, however, the $Num$ that determines -- the "kernel" of a determiner. It is, however, the $Num$ that determines
-- the inherent number. -- the inherent number.
{-
NumSg = {s = [] ; n = Sg ; isNum = False} ; NumSg = {s = [] ; n = Sg ; isNum = False} ;
NumPl = {s = [] ; n = Pl ; isNum = False} ; NumPl = {s = [] ; n = Pl ; isNum = False} ;
{-
-- : Card -> Num ; -- : Card -> Num ;
NumCard card = (card ** { isNum = True }) ; NumCard card = (card ** { isNum = True }) ;
@@ -117,27 +131,37 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in {
OrdNumeral num = num ; OrdNumeral num = num ;
-- : A -> Ord ; -- : A -> Ord ;
OrdSuperl a = { } ; -- why force Sg? OrdSuperl a = { } ;
-- One can combine a numeral and a superlative. -- One can combine a numeral and a superlative.
-- : Numeral -> A -> Ord ; -- third largest -- : Numeral -> A -> Ord ; -- third largest
OrdNumeralSuperl num a = num ** { } ; OrdNumeralSuperl num a = num ** { } ;
-}
-- : Quant -- : Quant
DefArt = { } ; DefArt = defQuant "a" "kan" "tan" "kuwan" NA ;
-- : Quant -- : Quant
IndefArt = { s = artDef ; IndefArt = indefQuant ** {sp = \\gn,c => "1"} ; -- TODO sp forms
indep = False ;
pref = [] ;
isDef = False } ; --has suffix, but turns into partitive in negative!
-- : Pron -> Quant -- : Pron -> Quant
PossPron pron = { s = artDef ; PossPron pron =
indep = True ; let p = pron.poss ;
pref = pron.s ! Gen ; gntbl = gnTable (BIND ++ p.sp ! SgMasc)
isDef = True } ; (BIND ++ p.sp ! SgFem)
-} (BIND ++ p.sp ! InvarPl)
in DefArt ** {
shortPoss = BIND ++ p.s ;
isPoss = True ;
s = \\c => let casevow = case c of {Nom => "u" ; Abs => "a"}
in gntbl ! SgMasc ++ BIND ++ casevow ;
sp = \\gn,c => let prefix = case gn of {SgFem => "t" ; _ => "k"} ;
casevow = case c of {Nom => "u" ; Abs => "a"}
in prefix ++ gntbl ! gn ++ BIND ++ casevow ;
v = p.v
} ;
--2 Common nouns --2 Common nouns
-- : N -> CN -- : N -> CN

View File

@@ -1,4 +1,4 @@
resource ParadigmsSom = open CatSom, ResSom, Prelude in { resource ParadigmsSom = open CatSom, ResSom, ParamSom, Prelude in {
oper oper
@@ -30,6 +30,7 @@ oper
ku : Preposition ; ku : Preposition ;
la : Preposition ; la : Preposition ;
u : Preposition ; u : Preposition ;
noPrep : Preposition ;
--2 Nouns --2 Nouns
@@ -41,6 +42,12 @@ oper
--mkN : N -> Gender -> N ; -- Otherwise predictable but not gender (TODO does this even happen?) --mkN : N -> Gender -> N ; -- Otherwise predictable but not gender (TODO does this even happen?)
} ; } ;
mkN2 : overload {
mkN2 : Str -> N2 ; -- Predictable N2, no preposition
mkN2 : Str -> Preposition -> N2 ; -- Predictable N2, given preposition
mkN2 : N -> Preposition -> N2 -- N2 out of noun and preposition
} ;
mkPN : overload { mkPN : overload {
mkPN : Str -> PN ; -- Proper noun, default agr. P3 Sg Masc. mkPN : Str -> PN ; -- Proper noun, default agr. P3 Sg Masc.
mkPN : Str -> Agr -> PN -- Proper noun, another agr. mkPN : Str -> Agr -> PN -- Proper noun, another agr.
@@ -72,6 +79,12 @@ oper
mkV2 : V -> Preposition -> V2 ; -- Already constructed verb with preposition mkV2 : V -> Preposition -> V2 ; -- Already constructed verb with preposition
} ; } ;
mkV3 : overload {
mkV3 : (sug : Str) -> V3 ; -- Predictable verb: imperative form, no preposition
mkV3 : (sug : Str) -> (_,_ : Preposition) -> V2 ; -- Regular verb, imperative and preposition
mkV3 : V -> (_,_ : Preposition) -> V2 ; -- Already constructed verb with preposition
} ;
-- TODO: actual constructors -- TODO: actual constructors
-- mkVA : Str -> VA = \s -> lin VA (mkVerb s) ; -- mkVA : Str -> VA = \s -> lin VA (mkVerb s) ;
-- --
@@ -138,6 +151,7 @@ oper
ku = ResSom.ku ; ku = ResSom.ku ;
la = ResSom.la ; la = ResSom.la ;
u = ResSom.u ; u = ResSom.u ;
noPrep = ResSom.noPrep ;
------------------------ ------------------------
mkN = overload { mkN = overload {
@@ -147,6 +161,15 @@ oper
--mkN : N -> Gender -> N = \n,g -> n ** {g = g } --mkN : N -> Gender -> N = \n,g -> n ** {g = g }
} ; } ;
shortPossN : N -> N -- force N to take short form of possessive suffix, e.g. family members
= \n -> n ** {shortPoss = True} ;
mkN2 = overload {
mkN2 : Str -> N2 = \s -> lin N2 (mkN1 s ** {c2 = noPrep}) ;
mkN2 : Str -> Preposition -> N2 = \s,p -> lin N2 (mkN1 s ** {c2 = p}) ;
mkN2 : N -> Preposition -> N2 = \n,p -> lin N2 (n ** {c2=p})
} ;
mkPN = overload { mkPN = overload {
mkPN : Str -> PN = \s -> lin PN (mkPNoun s sgMasc) ; mkPN : Str -> PN = \s -> lin PN (mkPNoun s sgMasc) ;
mkPN : Str -> Agr -> PN = \s,a -> lin PN (mkPNoun s a) mkPN : Str -> Agr -> PN = \s,a -> lin PN (mkPNoun s a)
@@ -166,7 +189,7 @@ oper
copula = ResSom.copula ; copula = ResSom.copula ;
regV : Str -> Verb = \s -> case s of { regV : Str -> Verb = \s -> case s of {
-- _ + g@#c + s@#c + "o" => cJoogso s ; _ + #c + #c + "o" => cJoogso s ;
_ + "o" => cQaado s ; ---- _ + "o" => cQaado s ; ----
_ + "i" => cKari s ; _ + "i" => cKari s ;
_ + "ee" => cYaree s ; _ + "ee" => cYaree s ;
@@ -178,6 +201,12 @@ oper
mkV2 : Str -> Preposition -> V2 = \s,p -> lin V2 (regV s ** {c2 = p}) ; mkV2 : Str -> Preposition -> V2 = \s,p -> lin V2 (regV s ** {c2 = p}) ;
mkV2 : V -> Preposition -> V2 = \v,p -> lin V2 (v ** {c2 = p}) ; mkV2 : V -> Preposition -> V2 = \v,p -> lin V2 (v ** {c2 = p}) ;
} ; } ;
mkV3 = overload {
mkV3 : (sug : Str) -> V3 = \s -> lin V3 (regV s ** {c2,c3 = noPrep}) ;
mkV3 : (sug : Str) -> (_,_ : Preposition) -> V3 = \s,p,q -> lin V3 (regV s ** {c2 = p ; c3 = q}) ;
mkV3 : V -> (_,_ : Preposition) -> V2 = \v,p,q -> lin V3 (v ** {c2 = p ; c3 = q}) ;
} ;
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
} }

View File

@@ -25,6 +25,7 @@ oper
param param
Morpheme = mO | mKa | mTa ; Morpheme = mO | mKa | mTa ;
-- | mKii | mTii ; -- TODO check if needed
oper oper
allomorph : Morpheme -> Str -> Str = \x,stem -> allomorph : Morpheme -> Str -> Str = \x,stem ->
@@ -34,18 +35,24 @@ oper
"c"|"g"|"i"|"j"|"x"|"s" => "yo" ; "c"|"g"|"i"|"j"|"x"|"s" => "yo" ;
_ => "o" } ; _ => "o" } ;
-- Based on the table on page 21--TODO find generalisations in patterns mTa => case stem of { -- Saeed p. 29
mTa => case stem of { _ + ("dh") => "dha" ; ---- ???
_ + ("dh") => "a" ; ---- ??? just guessing _ + (#v|"'"|"c"|"d"|"h"|"kh"|"q"|"w"|"x"|"y") => "da" ;
_ + ("d"|"c"|"h"|"x"|"q"|"'"|"i"|"y"|"w") => "da" ;
_ + "l" => "sha" ; _ + "l" => "sha" ;
_ => "ta" } ; _ {- b,f,g,n,r,s -} => "ta" } ;
mKa => case stem of { mKa => case stem of { -- Saeed p. 28-29
_ + ("g"|"aa"|"i"|"y"|"w") => "ga" ; _ + ("r"|"g"|"w"|"y"|"i"|"u"|"aa"|"oo"|"uu") => "ga" ;
_ + ("c"|"h"|"x"|"q"|"'") => "a" ; _ + ("q"|"'"|"kh"|"x"|"c"|"h") => "a" ;
_ + ("e"|"o") => "ha" ; _ + ("e"|"o") => "ha" ;
_ => "ka" } _ {- b,d,dh,f,j,l,n,r,sh-} => "ka" }
{-- TODO check if needed/implement elsewhere:
mKii => case stem of {
_+ #vv + #c => init (allomorph mKa stem) ++ "ii" ; -- Should not change stem vowel
_ + ("'"|"x"|"c") => "ii" ; -- Should change stem vowel
_ => init (allomorph mKa stem) ++ "ii" } ;
mTii => init (allomorph mTa stem) ++ "ii" -}
} ; } ;
@@ -55,7 +62,8 @@ oper
param param
Case = Nom | Abs ; Case = Nom | Abs ;
Gender = Masc | Fem ; Gender = Masc | Fem ;
Vowel = vA | vE | vI | vO | vU ; -- For vowel assimilation Vowel = vA | vE | vI | vO | vU | NA ; -- For vowel assimilation
GenNum = SgMasc | SgFem | InvarPl ; -- For Quant
Inclusion = Excl | Incl ; Inclusion = Excl | Incl ;
Agreement = Agreement =
@@ -67,6 +75,8 @@ param
| Pl3 | Pl3
| Impers ; -- Verb agrees with Sg3, but needed for preposition contraction | Impers ; -- Verb agrees with Sg3, but needed for preposition contraction
State = Definite | Indefinite ;
NForm = NForm =
Indef Number Indef Number
| Def Number Vowel -- Stems for definite and determinative suffixes | Def Number Vowel -- Stems for definite and determinative suffixes

View File

@@ -4,7 +4,7 @@ resource ResSom = ParamSom ** open Prelude, Predef, ParamSom in {
-- Nouns -- Nouns
oper oper
Noun : Type = {s : NForm => Str ; g : Gender} ; Noun : Type = {s : NForm => Str ; g : Gender ; shortPoss : Bool} ;
Noun2 : Type = Noun ** {c2 : Preposition} ; Noun2 : Type = Noun ** {c2 : Preposition} ;
Noun3 : Type = Noun2 ** {c3 : Preposition} ; Noun3 : Type = Noun2 ** {c3 : Preposition} ;
@@ -23,11 +23,11 @@ oper
Masc => wiil } ; Masc => wiil } ;
defStems : Str -> Vowel => Str = \s -> case s of { defStems : Str -> Vowel => Str = \s -> case s of {
ilk + "aha" => ilk + "aha" =>
table { vA => ilk+"ah" ; table { vE => ilk+"eh" ;
vE => ilk+"eh" ;
vI => ilk+"ih" ; vI => ilk+"ih" ;
vO => ilk+"oh" ; vO => ilk+"oh" ;
vU => ilk+"uh" vU => ilk+"uh" ;
_ => ilk+"ah"
} ; } ;
_ => table { _ => init s } _ => table { _ => init s }
} ; } ;
@@ -39,7 +39,8 @@ oper
Numerative => bisadood ; Numerative => bisadood ;
Def Sg vow => defStems wiilka ! vow ; Def Sg vow => defStems wiilka ! vow ;
Def Pl vow => defStems wiilasha ! vow } ; Def Pl vow => defStems wiilasha ! vow } ;
g = gender } ; g = gender ;
shortPoss = False} ;
------------------------- -------------------------
-- Regular noun paradigms -- Regular noun paradigms
@@ -55,10 +56,11 @@ oper
-- 3) Masculine, plural with duplication -- 3) Masculine, plural with duplication
nMas mas = let s = last mas ; nMas mas = let s = last mas ;
a = last (init mas) ;
ka = allomorph mKa mas ; ka = allomorph mKa mas ;
ta = allomorph mTa mas ; ta = allomorph mTa mas ;
sha = case ta of {"sha" => ta ; _ => s + ta } in sha = case ta of {"sha" => ta ; _ => s + ta } in
mkNoun mas (mas + ka) (mas + "a" + s) (mas + "a" + sha) Masc ; mkNoun mas (mas + ka) (mas + a + s) (mas + a + sha) Masc ;
-- 4a) Feminine, plural with ó -- 4a) Feminine, plural with ó
nUl ul = let o = case last ul of { "i" => "yo" ; _ => "o" } ; nUl ul = let o = case last ul of { "i" => "yo" ; _ => "o" } ;
@@ -139,29 +141,69 @@ oper
-- keenna teenna kuweenna (1 pl. inkl.) -- keenna teenna kuweenna (1 pl. inkl.)
-- kiinna tiinna kuwiinna -- kiinna tiinna kuwiinna
-- kooda tooda kuwooda -- kooda tooda kuwooda
Pronoun : Type = NounPhrase ; Pronoun : Type = NounPhrase ** {
poss : { -- for PossPron : Pron -> Quant
--s, -- possessive suffix
sp : GenNum => Str ; -- independent forms
s : Str ; -- special case: e.g. family members, name
v : Vowel}
} ;
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
-- Det, Quant, Card, Ord -- Det, Quant, Card, Ord
Quant : Type = SS ; ---- TODO
Determiner : Type = { BaseQuant : Type = {
s : Case => Str ; s : Case => Str ;
sp : Gender => Case => Str ; isPoss : Bool ;
d : NForm shortPoss : Str ; -- short form of possessive, e.g. family members
} ; } ;
mkDeterminer : (x1,_,x3 : Str) -> NForm -> Determiner = \an,kani,tani,nf -> Determiner : Type = BaseQuant ** {
let ani : Str = case an of { _ + #c => an+"i" ; pref : Str ; -- Numerals ?
_ => case nf of { Def _ _ => "u" ; sp : Gender => Case => Str ;
_ => [] } d : NForm -- a combination of number, state and vowel
} ; } ;
bind : Str -> Str = \x -> case x of { "" => [] ; _ => BIND ++ x } ;
in { s = table { Nom => bind ani ; Abs => bind an } ; Quant : Type = BaseQuant ** {
sp = table { Fem => table { Nom => tani ; Abs => init tani } ; sp : GenNum => Case => Str ;
Masc => table { Nom => kani ; Abs => init kani } st : State ;
v : Vowel ;
} ; } ;
d = nf
Num : Type = {
s : Str ; -- TODO check if enough
n : Number ; -- singular or plural
isNum : Bool -- whether to choose Numerative as the value of NForm
} ;
baseQuant : BaseQuant = {
s = \\_ => [] ;
isPoss = False ;
shortPoss = []
} ;
defQuant = defQuantBind True ;
defQuantBind : (bind : Bool) -> (s, kan, tan, kuwan : Str) -> Vowel -> Quant = \b,s,spm,spf,spp,v ->
let bind : Str -> Str = \x -> case b of {False => x ; True => BIND ++ x} ;
in baseQuant ** {
s = \\c =>
let nom = case v of {NA => "u" ; _ => s + "i"}
in case c of {Abs => bind s ; Nom => bind nom} ;
sp = \\gn,c =>
let i = case c of {Nom => "i"; Abs => []}
in gnTable (spm + i) (spf + i) (spp + i) ! gn ;
st = Definite ;
v = v ;
} ;
gnTable : (m,f,p : Str) -> (GenNum => Str) = \m,f,p ->
table {SgMasc => m ; SgFem => f ; _ => p} ;
indefQuant : Quant = baseQuant ** {
sp = \\gn,c => [] ;
st = Indefinite ;
v = NA ; -- Will be ignored in DetQuant
} ; } ;
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
@@ -305,7 +347,7 @@ oper
_ => arki + "n" } ; -- otherwise add n. _ => arki + "n" } ; -- otherwise add n.
-- Some predictable sound changes -- Some predictable sound changes
t : Str = case arag of { -- kari+seen, noq+deen, (sug|joogsa|qaada)+teen, t : Str = case arag of { -- kari+seen, bixi noq+deen, (sug|joogsa|qaada)+teen,
_ + ("i"|"y") => "s" ; -- t changes into s in front of i/y _ + ("i"|"y") => "s" ; -- t changes into s in front of i/y
_ + ("x"|"q"|"c") => "d" ; -- t changes into d in front of x/q/c _ + ("x"|"q"|"c") => "d" ; -- t changes into d in front of x/q/c
_ => "t" } ; _ => "t" } ;
@@ -364,7 +406,7 @@ oper
in mkVerb joogso (joogsa + "d") joogsa ; in mkVerb joogso (joogsa + "d") joogsa ;
cQaado qaado = cQaado qaado =
let qaa = drop 2 qaado let qaa = init (init qaado)
in mkVerb qaado -- Imperative sg, with the vowel in mkVerb qaado -- Imperative sg, with the vowel
(qaa + "t") -- Per1 Sg, Per3 Pl and Per3 Sg Masc (qaa + "t") -- Per1 Sg, Per3 Pl and Per3 Sg Masc
(qaa + "da") ; -- Per2 Pl and others (qaa + "da") ; -- Per2 Pl and others

View File

@@ -69,11 +69,11 @@ lin somePl_Det = R.indefDet "" pl ;
lin someSg_Det = R.indefDet "" sg ; lin someSg_Det = R.indefDet "" sg ;
lin no_Quant = mkPrep no_Quant lin no_Quant = mkPrep no_Quant
-}
lin that_Quant = R.defDet [] sg ** { s = R.quantHori } ; lin that_Quant = defQuant "aas" "kaas" "taas" "kuwaas" vA ;
lin this_Quant = R.defDet [] sg ** { s = R.quantHau } ; lin this_Quant = defQuant "an" "kan" "tan" "kuwan" vA ;
lin which_IQuant = R.defDet "" sg ** { s = R.artDef } ; --lin which_IQuant = defQuant
{-
----- -----
-- NP -- NP
@@ -123,30 +123,38 @@ lin with_Prep = prepTable ! la ;
i_Pron = { i_Pron = {
s = table {Nom => "aan" ; Abs => "i"} ; s = table {Nom => "aan" ; Abs => "i"} ;
a = Sg1 ; isPron = True ; sp = "aniga" ; a = Sg1 ; isPron = True ; sp = "aniga" ;
poss = {s = "ay" ; v = vA ; sp = gnTable "ayg" "ayd" "uwayg"}
} ; } ;
youPol_Pron, -- TODO check
youSg_Pron = { youSg_Pron = {
s = table {Nom => "aad" ; Abs => "ku"} ; s = table {Nom => "aad" ; Abs => "ku"} ;
a = Sg2 ; isPron = True ; sp = "adiga" ; a = Sg2 ; isPron = True ; sp = "adiga" ;
poss = {s = "aa" ; v = vA ; sp = gnTable "aag" "aad" "uwaag"}
} ; } ;
he_Pron = { he_Pron = {
s = table {Nom => "uu" ; Abs => []} ; s = table {Nom => "uu" ; Abs => []} ;
a = Sg3 Masc ; isPron = True ; sp = "isaga" ; a = Sg3 Masc ; isPron = True ; sp = "isaga" ;
poss = {s = "iis" ; v = vI ; sp = gnTable "iis" "iis" "uwiis"}
} ; } ;
she_Pron = { she_Pron = {
s = table {Nom => "ay" ; Abs => []} ; s = table {Nom => "ay" ; Abs => []} ;
a = Sg3 Fem ; isPron = True ; sp = "iyada" ; a = Sg3 Fem ; isPron = True ; sp = "iyada" ;
poss = {s = "eed" ; v = vE ; sp = gnTable "eed" "eed" "uweed"}
} ; } ;
we_Pron = { we_Pron = {
s = table {Nom => "aan" ; Abs => "na"} ; s = table {Nom => "aan" ; Abs => "na"} ;
a = Pl1 Incl ; isPron = True ; sp = "innaga" ; a = Pl1 Incl ; isPron = True ; sp = "innaga" ;
poss = {s = "een" ; v = vE ; sp = gnTable "eenn" "eenn" "uweenn"}
} ; } ;
youPl_Pron = { youPl_Pron = {
s = table {Nom => "aad" ; Abs => "idin"} ; s = table {Nom => "aad" ; Abs => "idin"} ;
a = Pl2 ; isPron = True ; sp = "idinka" ; a = Pl2 ; isPron = True ; sp = "idinka" ;
poss = {s = "iin" ; v = vI ; sp = gnTable "iinn" "iinn" "uwiinn"}
} ; } ;
they_Pron = { they_Pron = {
s = table {Nom => "ay" ; Abs => []} ; s = table {Nom => "ay" ; Abs => []} ;
a = Pl3 ; isPron = True ; sp = "iyaga" ; a = Pl3 ; isPron = True ; sp = "iyaga" ;
poss = {s = "ood" ; v = vO ; sp = gnTable "ood" "ood" "uwood"}
} ; } ;
{- {-
lin whatPl_IP = ; lin whatPl_IP = ;

File diff suppressed because it is too large Load Diff

View File

@@ -7932,6 +7932,7 @@ fun camarógrafo_N : N ;
fun camarón_N : N ; fun camarón_N : N ;
fun cambalache_N : N ; fun cambalache_N : N ;
fun cambiable_A : A ; fun cambiable_A : A ;
fun cambiador_N : N ;
fun cambiante_A : A ; fun cambiante_A : A ;
fun cambiar_N : N ; fun cambiar_N : N ;
fun cambiar_V : V ; fun cambiar_V : V ;
@@ -10310,6 +10311,7 @@ fun colmillo_N : N ;
fun colmo_N : N ; fun colmo_N : N ;
fun colocación_N : N ; fun colocación_N : N ;
fun colocación_de_minas_N : N ; fun colocación_de_minas_N : N ;
fun colocado_A : A ;
fun colocar_V : V ; fun colocar_V : V ;
fun colocar_burlete_V : V ; fun colocar_burlete_V : V ;
fun colocar_en_barracas_V : V ; fun colocar_en_barracas_V : V ;
@@ -14958,6 +14960,7 @@ fun doctrina_judicial_N : N ;
fun doctrinal_A : A ; fun doctrinal_A : A ;
fun documentación_N : N ; fun documentación_N : N ;
fun documentación_de_software_N : N ; fun documentación_de_software_N : N ;
fun documentado_A : A ;
fun documental_A : A ; fun documental_A : A ;
fun documental_N : N ; fun documental_N : N ;
fun documentar_V : V ; fun documentar_V : V ;
@@ -16833,6 +16836,7 @@ fun escapulario_N : N ;
fun escarabajo_N : N ; fun escarabajo_N : N ;
fun escarabajo_bombardero_N : N ; fun escarabajo_bombardero_N : N ;
fun escarabajo_del_frijol_N : N ; fun escarabajo_del_frijol_N : N ;
fun escaramujo_N : N ;
fun escaramuza_N : N ; fun escaramuza_N : N ;
fun escaramuzador_N : N ; fun escaramuzador_N : N ;
fun escaramuzar_V : V ; fun escaramuzar_V : V ;
@@ -17023,8 +17027,6 @@ fun esfera_N : N ;
fun esferómetro_N : N ; fun esferómetro_N : N ;
fun esfigmomanómetro_N : N ; fun esfigmomanómetro_N : N ;
fun esfinge_N : N ; fun esfinge_N : N ;
fun esfinter_N : N ;
fun esfinter_anal_N : N ;
fun esforzar_V : V ; fun esforzar_V : V ;
fun esforzarse_V : V ; fun esforzarse_V : V ;
fun esfuerza_N : N ; fun esfuerza_N : N ;
@@ -19726,6 +19728,8 @@ fun freno_N : N ;
fun freno_de_pies_N : N ; fun freno_de_pies_N : N ;
fun frenológico_A : A ; fun frenológico_A : A ;
fun frente_N : N ; fun frente_N : N ;
fun frente_1_N : N ; -- forehead
fun frente_2_N : N ; -- front
fun frente_de_onda_N : N ; fun frente_de_onda_N : N ;
fun frente_popular_N : N ; fun frente_popular_N : N ;
fun frenéticamente_Adv : Adv ; fun frenéticamente_Adv : Adv ;
@@ -23057,6 +23061,7 @@ fun individual_A : A ;
fun individualidad_N : N ; fun individualidad_N : N ;
fun individualismo_N : N ; fun individualismo_N : N ;
fun individualización_N : N ; fun individualización_N : N ;
fun individualizado_A : A ;
fun individualmente_Adv : Adv ; fun individualmente_Adv : Adv ;
fun individuo_N : N ; fun individuo_N : N ;
fun indivisible_A : A ; fun indivisible_A : A ;
@@ -23073,6 +23078,7 @@ fun indonesa_N : N ;
fun indonés_N : N ; fun indonés_N : N ;
fun inducir_V : V ; fun inducir_V : V ;
fun inductancia_N : N ; fun inductancia_N : N ;
fun inductivo_A : A ;
fun inductor_N : N ; fun inductor_N : N ;
fun indudable_A : A ; fun indudable_A : A ;
fun indudablemente_Adv : Adv ; fun indudablemente_Adv : Adv ;
@@ -27590,6 +27596,7 @@ fun moho_mucilaginoso_verdadero_N : N ;
fun mohoso_A : A ; fun mohoso_A : A ;
fun mohria_N : N ; fun mohria_N : N ;
fun mohín_N : N ; fun mohín_N : N ;
fun mojado_A : A ;
fun mojar_V : V ; fun mojar_V : V ;
fun mojave_N : N ; fun mojave_N : N ;
fun mojiganga_N : N ; fun mojiganga_N : N ;
@@ -30611,7 +30618,9 @@ fun parroquia_N : N ;
fun parsec_N : N ; fun parsec_N : N ;
fun parsimonia_N : N ; fun parsimonia_N : N ;
fun parsismo_N : N ; fun parsismo_N : N ;
fun parte_N : N ; fun parte_N : N ; -- parte_1_N is more common, this is an alias for it
fun parte_1_N : N ; -- part, section, portion
fun parte_2_N : N ; -- message, report, dispatch
fun parte_alícuota_A : A ; fun parte_alícuota_A : A ;
fun parte_anterior_N : N ; fun parte_anterior_N : N ;
fun parte_del_cuerpo_N : N ; fun parte_del_cuerpo_N : N ;
@@ -34572,7 +34581,6 @@ fun recibo_desprendible_N : N ;
fun reciclaje_N : N ; fun reciclaje_N : N ;
fun reciclar_V : V ; fun reciclar_V : V ;
fun nacido_N : N ; fun nacido_N : N ;
fun recien_nacido_N : N ;
fun reciente_A : A ; fun reciente_A : A ;
fun recinto_N : N ; fun recinto_N : N ;
fun recinto_natural_N : N ; fun recinto_natural_N : N ;
@@ -34587,11 +34595,12 @@ fun recirculación_N : N ;
fun recitador_N : N ; fun recitador_N : N ;
fun recitar_V : V ; fun recitar_V : V ;
fun recitar_una_rapsodia_V : V ; fun recitar_una_rapsodia_V : V ;
fun recién_N : N ;
fun recién_casada_N : N ; fun recién_casada_N : N ;
fun recién_casado_N : N ; fun recién_casado_N : N ;
fun recién_llegada_N : N ; fun recién_llegada_N : N ;
fun recién_llegado_N : N ; fun recién_llegado_N : N ;
fun recién_nacido_A : A ;
fun recién_nacido_N : N ;
fun reclamación_N : N ; fun reclamación_N : N ;
fun reclamar_V : V ; fun reclamar_V : V ;
fun reclamar_legalmente_V : V ; fun reclamar_legalmente_V : V ;
@@ -35255,6 +35264,7 @@ fun reproductivo_A : A ;
fun reproductor_A : A ; fun reproductor_A : A ;
fun reproductor_N : N ; fun reproductor_N : N ;
fun reproductor_de_casetes_N : N ; fun reproductor_de_casetes_N : N ;
fun reprogramar_V : V ;
fun repromulgar_V : V ; fun repromulgar_V : V ;
fun reptil_A : A ; fun reptil_A : A ;
fun reptil_N : N ; fun reptil_N : N ;
@@ -42558,4 +42568,91 @@ fun abstraer_V : V ;
fun abstener_V : V ; fun abstener_V : V ;
fun abrigar_V : V ; fun abrigar_V : V ;
fun abalanzar_V : V ; fun abalanzar_V : V ;
fun ecografía_N : N ;
fun entumecimiento_N : N ;
fun extractor_N : N ;
fun glóbulo_N : N ;
fun ante_Prep : Prep ;
fun traducido_A : A ;
fun irritado_A : A ;
fun mareo_A : A ;
fun web_N : N ;
fun almohadilla_N : N ;
fun descansa_N : N ;
fun aparencia_N : N ;
fun urocultivo_N : N ;
fun esterilla_N : N ;
fun puja_N : N ;
fun asir_N : N ;
fun ulcerado_A : A ;
fun coser_A : A ;
fun hinchazón_N : N ;
fun hinchado_A : A ;
fun capota_N : N ;
fun estresado_A : A ;
fun agrietado_A : A ;
fun tranquilizante_N : N ;
fun legaña_A : A ;
fun letargo_A : A ;
fun mucosa_N : N ;
fun girarse_V : V ;
fun esqueleto_N : N ;
fun electroencefalógrafo_N : N ;
fun sonrosado_A : A ;
fun miedo_A : A ;
fun enrojecimiento_N : N ;
fun policlínica_N : N ;
fun pigmentado_A : A ;
fun animoso_A : A ;
fun observador_A : A ;
fun pielonefritis_N : N ;
fun translucencia_N : N ;
fun sospecha_A : A ;
fun descontento_A : A ;
fun milimetro_N : N ;
fun milia_N : N ;
fun disuelto_A : A ;
fun liviano_A : A ;
fun calma_A : A ;
fun logopeda_N : N ;
fun fotosensibilidad_N : N ;
fun micción_N : N ;
fun admitido_A : A ;
fun inmunización_N : N ;
fun hemorroide_N : N ;
fun andador_N : N ;
fun túrbido_A : A ;
fun aprobado_A : A ;
fun brechar_V : V ;
fun sorprendido_A : A ;
fun engrandecido_A : A ;
fun resfrío_N : N ;
fun coyuntura_N : N ;
fun uroflujometría_N : N ;
fun flanco_N : N ;
fun merendar_V : V ;
fun mal_A : A ;
fun involucrado_A : A ;
fun tembloroso_A : A ;
fun sangrado_N : N ;
fun azulado_A : A ;
fun antihipertensivo_A : A ;
fun palidecer_V : V ;
fun relajante_N : N ;
fun audiólogo_N : N ;
fun apuntado_A : A ;
fun anamnesis_N : N ;
fun lactancia_N : N ;
fun emergencia_A : A ;
fun acrocianosis_N : N ;
fun cribado_N : N ;
fun bastoncillo_N : N ;
fun de_verdad_Adv : Adv ;
fun monitoreo_N : N ;
fun monitorear_V : V ;
fun levemente_Adv : Adv ;
fun amamantamiento_N : N ;
fun inducción_N : N ;
fun cosido_A : A ;
fun legañoso_A : A ;
} }

View File

@@ -116,14 +116,15 @@ instance DiffSpa of DiffRomance - [iAdvQuestionInv,otherInv,partAgr,stare_V,vpAg
mkImperative isPol p vp = mkImperative isPol p vp =
\\pol,g,n => case pol of { \\pol,g,n => case pol of {
RPos => neg.p1 ++ imper ++ bindIf refl.isRefl ++ refl.pron RPos => neg.p1 ++ imper ++ bindIf refl.isRefl ++ refl.pron
++ bindIf hasClit ++ clit ++ compl ; ++ bindIf hasClit ++ clit ++ particle ++ compl ;
RNeg _ => neg.p1 ++ refl.pron ++ clit ++ subj ++ compl RNeg _ => neg.p1 ++ refl.pron ++ clit ++ subj ++ particle ++ compl
} where { } where {
pe = case isPol of {True => P3 ; _ => p} ; pe = case isPol of {True => P3 ; _ => p} ;
refl = case vp.s.vtyp of { refl = case vp.s.vtyp of {
VRefl => {pron = reflPron n pe Acc ; isRefl = True} ; VRefl => {pron = reflPron n pe Acc ; isRefl = True} ;
_ => {pron = [] ; isRefl = False} _ => {pron = [] ; isRefl = False}
} ; } ;
particle = vp.s.p ;
clit = vp.clit1 ++ vp.clit2 ; clit = vp.clit1 ++ vp.clit2 ;
hasClit = vp.clit3.hasClit ; hasClit = vp.clit3.hasClit ;
imper = vp.s.s ! vImper n pe ; imper = vp.s.s ! vImper n pe ;
@@ -157,8 +158,8 @@ instance DiffSpa of DiffRomance - [iAdvQuestionInv,otherInv,partAgr,stare_V,vpAg
relPron : Bool => AAgr => Case => Str = \\b,a,c => relPron : Bool => AAgr => Case => Str = \\b,a,c =>
case c of { case c of {
Nom | Acc => "que" ; Nom | Acc => "que" ;
CPrep P_a => "cuyo" ; CPrep P_de => "cuyo" ;
_ => prepCase c ++ "cuyo" _ => prepCase c ++ "que"
} ; } ;
pronSuch : AAgr => Str = aagrForms "tál" "tál" "tales" "tales" ; pronSuch : AAgr => Str = aagrForms "tál" "tál" "tales" "tales" ;
@@ -196,7 +197,7 @@ instance DiffSpa of DiffRomance - [iAdvQuestionInv,otherInv,partAgr,stare_V,vpAg
<_,Pl,P1> => cases "nos" "nosotras" ; --- nosotros <_,Pl,P1> => cases "nos" "nosotras" ; --- nosotros
<_,Pl,P2> => cases "vos" "vosotras" ; --- vosotros <_,Pl,P2> => cases "vos" "vosotras" ; --- vosotros
<Fem,Sg,P3> => cases3 "la" "le" "ella" ; <Fem,Sg,P3> => cases3 "la" "le" "ella" ;
<_, Sg,P3> => cases3 "lo" "le" "èl" ; <_, Sg,P3> => cases3 "lo" "le" "él" ;
<Fem,Pl,P3> => cases3 "las" "les" "ellas" ; <Fem,Pl,P3> => cases3 "las" "les" "ellas" ;
<_, Pl,P3> => cases3 "los" "les" "ellos" <_, Pl,P3> => cases3 "los" "les" "ellos"
} ; } ;

View File

@@ -5,6 +5,7 @@ concrete ExtendSpa of Extend = CatSpa ** ExtendRomanceFunctor -
CompoundAP, CompoundAP,
CompoundN, CompoundN,
ExistsNP, ExistsNP,
EmbedSSlash,
GenRP, GenRP,
GenRP, GenRP,
IAdvAdv, IAdvAdv,
@@ -33,51 +34,36 @@ concrete ExtendSpa of Extend = CatSpa ** ExtendRomanceFunctor -
-- put your own definitions here -- put your own definitions here
lin lin
iFem_Pron = mkPronoun iFem_Pron = agr2pron ! {g=Fem ; n=Sg ; p=P1} ;
"yo" "me" "me" "mí" youFem_Pron = agr2pron ! {g=Fem ; n=Sg ; p=P2} ;
"mi" "mi" "mis" "mis" weFem_Pron = agr2pron ! {g=Fem ; n=Pl ; p=P1} ;
Fem Sg P1 ; youPlFem_Pron = agr2pron ! {g=Fem ; n=Pl ; p=P2} ;
theyFem_Pron = mkPronoun theyFem_Pron = agr2pron ! {g=Fem ; n=Pl ; p=P3} ;
"ellas" "las" "les" "ellas"
"su" "su" "sus" "sus"
Fem Pl P3 ;
weFem_Pron = mkPronoun
"nosotras" "nos" "nos" "nosotras"
"nuestro" "nuestra" "nuestros" "nuestras"
Fem Pl P1 ;
youFem_Pron = mkPronoun
"tú" "te" "te" "ti"
"tu" "tu" "tus" "tus"
Fem Sg P2 ;
youPlFem_Pron = mkPronoun
"vosotras" "os" "os" "vosotras"
"vuestro" "vuestra" "vuestros" "vuestras"
Fem Pl P2 ;
youPolFem_Pron = mkPronoun youPolFem_Pron = mkPronoun
"usted" "la" "le" "usted" "usted" "la" "le" "usted"
"su" "su" "sus" "sus" "su" "su" "sus" "sus"
Fem Sg P3 ; Fem Sg P3 ;
youPolPl_Pron = mkPronoun youPolPl_Pron = mkPronoun
"ustedes" "los" "les" "usted" "ustedes" "los" "les" "ustedes"
"su" "su" "sus" "sus" "su" "su" "sus" "sus"
Masc Pl P3 ; Masc Pl P3 ;
youPolPlFem_Pron = mkPronoun youPolPlFem_Pron = mkPronoun
"ustedes" "las" "les" "usted" "ustedes" "las" "les" "ustedes"
"su" "su" "sus" "sus" "su" "su" "sus" "sus"
Fem Pl P3 ; Fem Pl P3 ;
ICompAP ap = { ICompAP ap = {
s =\\a => "que tan" ++ ap.s ! (genNum2Aform a.g a.n) ; s =\\a => "qué tan" ++ ap.s ! (genNum2Aform a.g a.n) ;
cop = serCopula cop = serCopula
} ; } ;
IAdvAdv adv = { IAdvAdv adv = {
s = "que tan" ++ adv.s s = "qué tan" ++ adv.s
} ; } ;
EmbedSSlash s = {s = \\_ => "lo que" ++ s.s ! {g=Masc ; n=Sg} ! Indic} ;
ExistsNP np = ExistsNP np =
mkClause [] True False np.a mkClause [] True False np.a
(insertComplement (\\_ => (np.s ! Nom).ton) (insertComplement (\\_ => (np.s ! Nom).ton)
@@ -85,7 +71,7 @@ concrete ExtendSpa of Extend = CatSpa ** ExtendRomanceFunctor -
CompoundN noun noun2 = { -- order is different because that's needed for correct translation from english CompoundN noun noun2 = { -- order is different because that's needed for correct translation from english
s = \\n => noun2.s ! n s = \\n => noun2.s ! n
++ variants {"de" ; genForms "do" "da" ! noun.g} ++ variants {"de" ; genForms "del" "de la" ! noun.g}
++ noun.s ! Sg ; ++ noun.s ! Sg ;
g = noun2.g g = noun2.g
} ; } ;

View File

@@ -1,5 +1,5 @@
concrete IdiomSpa of Idiom = CatSpa ** concrete IdiomSpa of Idiom = CatSpa **
open (P = ParamX), MorphoSpa, ParadigmsSpa, BeschSpa, Prelude in { open (P = ParamX), MorphoSpa, ParadigmsSpa, BeschSpa, (N=NounSpa), Prelude in {
flags optimize=all_subs ; flags optimize=all_subs ;
@@ -20,13 +20,25 @@ concrete IdiomSpa of Idiom = CatSpa **
ExistNP np = ExistNP np =
mkClause [] True False (agrP3 Masc Sg) mkClause [] True False (agrP3 Masc Sg)
(insertComplement (\\_ => (np.s ! Acc).ton) (predV (verboV (hay_3 "haber")))) ; (insertComplement (\\_ => (np.s ! Acc).ton) hay_VP) ;
ExistNPAdv np adv = ExistNP (N.AdvNP np adv) ;
ExistIP ip = { ExistIP ip = {
s = \\t,a,p,_ => s = \\t,a,p,_ =>
ip.s ! Nom ++ ip.s ! Nom ++
(mkClause [] True False (agrP3 Masc Sg) (predV (verboV (hay_3 "haber")))).s ! DDir ! t ! a ! p ! Indic (mkClause [] True False (agrP3 Masc Sg) hay_VP).s ! DDir ! t ! a ! p ! Indic
} ; } ;
ExistIPAdv ip adv = {
s = \\t,a,p,_ =>
ip.s ! Nom ++
(mkClause [] True False (agrP3 Masc Sg) hay_VP).s ! DDir ! t ! a ! p ! Indic
++ adv.s
} ;
-- ImpP3 np vp = {} ;
ProgrVP vp = ProgrVP vp =
insertComplement insertComplement
(\\agr => (\\agr =>
@@ -42,4 +54,22 @@ concrete IdiomSpa of Idiom = CatSpa **
mkImperative False P1 vp ! RPos ! Masc ! Pl ; --- fem mkImperative False P1 vp ! RPos ! Masc ! Pl ; --- fem
} ; } ;
-- : NP -> NP ; -- the president himself (is at home)
-- SelfNP np =
-- : VP -> VP ; -- is himself at home
SelfAdvVP,
SelfAdVVP = selfVP ;
oper
hay_VP = predV (verboV (hay_3 "haber")) ;
selfVP : VP -> VP = insertComplement (
\\agr => case agr of {
{g = g ; n = n ; p = p} => table {
P1 => numForms "yo mismo" "yo misma" ! n ;
P2 => genNumForms "tu mismo" "tu misma" "vosotros mismos" "vosotras mismas" ! g ! n ;
P3 => genNumForms "él mismo" "ella misma" "ellos mismos" "ellas mismas" ! g ! n
} ! p
}
) ;
} }

File diff suppressed because it is too large Load Diff

View File

@@ -85,7 +85,7 @@ lin
girl_N = regN "niña" ; girl_N = regN "niña" ;
glove_N = regN "guante" ; glove_N = regN "guante" ;
gold_N = regN "oro" ; gold_N = regN "oro" ;
good_A = prefA (mkADeg (regA "bueno") (regA "mejor")) ; ---- adv? good_A = prefA (mkA (mkA "buen" "bueno" "buena" "buena" "buenos" "buenas" "bien") (mkA "mejor")) ;
go_V = (verboV (ir_46 "ir")) ; go_V = (verboV (ir_46 "ir")) ;
green_A = regADeg "verde" ; green_A = regADeg "verde" ;
harbour_N = regN "puerto" ; harbour_N = regN "puerto" ;

View File

@@ -55,17 +55,14 @@ oper
mkDet = overload { mkDet = overload {
-- Does not inflect for number -- Does not inflect for number
mkDet : Str -> Number -> Det = \piu,n -> lin Det { mkDet : Str -> Number -> Det = \piu,n -> lin Det {
s,sp = \\_,_ => piu ; s,sp = \\_,c => prepCase c ++ piu ;
n = n ; n = n ;
s2 = [] ; s2 = [] ;
isNeg = False isNeg = False
} ; } ;
-- Inflects for number -- Inflects for number
mkDet : Str -> Str -> Number -> Det = \alcuni,alcune,n -> lin Det { mkDet : Str -> Str -> Number -> Det = \alcuni,alcune,n -> lin Det {
s,sp = table { s,sp = \\g,c => prepCase c ++ genForms alcuni alcune ! g ;
Masc => \\_ => alcuni ;
Fem => \\_ => alcune
} ;
n = n ; n = n ;
s2 = [] ; s2 = [] ;
isNeg = False isNeg = False

Some files were not shown because too many files have changed in this diff Show More