forked from GitHub/gf-rgl
Merge branch 'master' into master
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
--1 Common: Structures with Common Implementations.
|
||||
|
||||
-- This module defines the categories that uniformly have the
|
||||
-- linearization type ${s:Str}$ in all languages.
|
||||
-- This module defines the categories that uniformly have the same
|
||||
-- linearization type (usually ${s:Str}$) in all languages.
|
||||
|
||||
abstract Common = {
|
||||
|
||||
|
||||
@@ -71,13 +71,43 @@ fun
|
||||
|
||||
cat
|
||||
Timeunit ;
|
||||
Hour ;
|
||||
Weekday ;
|
||||
Month ;
|
||||
Monthday ;
|
||||
Year ;
|
||||
|
||||
fun
|
||||
timeunitAdv : Card -> Timeunit -> Adv ; -- (for) three hours
|
||||
timeunitAdv : Card -> Timeunit -> Adv ; -- (for) three hours
|
||||
timeunitRange : Card -> Card -> Timeunit -> Adv ; -- (cats live) ten to twenty years
|
||||
|
||||
oneHour : Hour ;
|
||||
twoHour : Hour ;
|
||||
threeHour : Hour ;
|
||||
fourHour : Hour ;
|
||||
fiveHour : Hour ;
|
||||
sixHour : Hour ;
|
||||
sevenHour : Hour ;
|
||||
eightHour : Hour ;
|
||||
nineHour : Hour ;
|
||||
tenHour : Hour ;
|
||||
elevenHour : Hour ;
|
||||
twelveHour : Hour ;
|
||||
thirteenHour : Hour ;
|
||||
fourteenHour : Hour ;
|
||||
fifteenHour : Hour ;
|
||||
sixteenHour : Hour ;
|
||||
seventeenHour : Hour ;
|
||||
eighteenHour : Hour ;
|
||||
nineteenHour : Hour ;
|
||||
twentyHour : Hour ;
|
||||
twentyOneHour : Hour ;
|
||||
twentyTwoHour : Hour ;
|
||||
twentyThreeHour : Hour ;
|
||||
twentyFourHour : Hour ;
|
||||
|
||||
timeHour : Hour -> Adv ; -- at three a.m./p.m.
|
||||
timeHourMinute : Hour -> Card -> Adv ; -- at six forty a.m./p.m.
|
||||
|
||||
weekdayPunctualAdv : Weekday -> Adv ; -- on Monday
|
||||
weekdayHabitualAdv : Weekday -> Adv ; -- on Mondays
|
||||
|
||||
@@ -200,7 +200,7 @@ abstract Extend = Cat ** {
|
||||
-- Eng
|
||||
UncontractedNeg : Pol ; -- do not, etc, as opposed to don't
|
||||
UttVPShort : VP -> Utt ; -- have fun, as opposed to "to have fun"
|
||||
ComplSlashPartLast : VPSlash -> NP -> VP ;
|
||||
ComplSlashPartLast : VPSlash -> NP -> VP ; -- set it apart, as opposed to "set apart it"
|
||||
|
||||
-- Romance
|
||||
DetNPMasc : Det -> NP ;
|
||||
|
||||
@@ -70,7 +70,7 @@ abstract Sentence = Cat ** {
|
||||
|
||||
-- This covers subjunctive clauses, but they can also be added to the end.
|
||||
|
||||
SSubjS : S -> Subj -> S -> S ; -- I go home if she comes
|
||||
SSubjS : S -> Subj -> S -> S ; -- I go home, if she comes
|
||||
|
||||
-- A sentence can be modified by a relative clause referring to its contents.
|
||||
|
||||
|
||||
7
src/api/CombinatorsSom.gf
Normal file
7
src/api/CombinatorsSom.gf
Normal file
@@ -0,0 +1,7 @@
|
||||
--# -path=.:alltenses:prelude:src/somali
|
||||
|
||||
resource CombinatorsSom = Combinators with
|
||||
(Cat = CatSom),
|
||||
(Structural = StructuralSom),
|
||||
(Noun = NounSom),
|
||||
(Constructors = ConstructorsSom) ** open MissingSom in {} ;
|
||||
3
src/api/ConstructorsSom.gf
Normal file
3
src/api/ConstructorsSom.gf
Normal file
@@ -0,0 +1,3 @@
|
||||
--# -path=.:alltenses:prelude:../somali
|
||||
|
||||
resource ConstructorsSom = Constructors with (Grammar = GrammarSom) ** open MissingSom in {} ;
|
||||
5
src/api/SymbolicSom.gf
Normal file
5
src/api/SymbolicSom.gf
Normal file
@@ -0,0 +1,5 @@
|
||||
--# -path=.:../somali:../common:../abstract:../prelude
|
||||
|
||||
resource SymbolicSom = Symbolic with
|
||||
(Symbol = SymbolSom),
|
||||
(Grammar = GrammarSom) ** open MissingSom in {} ;
|
||||
5
src/api/SyntaxSom.gf
Normal file
5
src/api/SyntaxSom.gf
Normal file
@@ -0,0 +1,5 @@
|
||||
--# -path=.:alltenses:prelude
|
||||
|
||||
instance SyntaxSom of Syntax =
|
||||
ConstructorsSom, CatSom, StructuralSom, CombinatorsSom ;
|
||||
|
||||
3
src/api/TrySom.gf
Normal file
3
src/api/TrySom.gf
Normal file
@@ -0,0 +1,3 @@
|
||||
--# -path=.:../somali:../common:../abstract:../prelude
|
||||
|
||||
resource TrySom = SyntaxSom, LexiconSom, ParadigmsSom - [mkAdv,mkAdN,mkDet,mkQuant,mkPConj] ;
|
||||
@@ -21,7 +21,7 @@ concrete AdjectiveAra of Adjective = CatAra ** open ResAra, Prelude in {
|
||||
-- $SuperlA$ belongs to determiner syntax in $Noun$.
|
||||
--
|
||||
ComplA2 a np = {
|
||||
s = \\sp,g,n,st,c => a.s ! APosit g n st c ++ a.c2 ++ np.s ! Gen ;
|
||||
s = \\sp,g,n,st,c => a.s ! APosit g n st c ++ a.c2.s ++ np.s ! a.c2.c ;
|
||||
} ;
|
||||
--
|
||||
-- ReflA2 a = {
|
||||
@@ -37,7 +37,13 @@ concrete AdjectiveAra of Adjective = CatAra ** open ResAra, Prelude in {
|
||||
AdAP ada ap = {
|
||||
s = \\sp,g,n,st,c => ada.s ++ ap.s ! sp ! g ! n ! st ! c
|
||||
} ;
|
||||
--
|
||||
-- UseA2 a = a ;
|
||||
--
|
||||
|
||||
UseA2 = PositA ;
|
||||
|
||||
UseComparA a = {
|
||||
s = \\h,g,n,d,c => a.s ! AComp d c
|
||||
};
|
||||
|
||||
-- : Ord -> AP ; -- warmest
|
||||
AdjOrd ord = {s = \\h,g,n,s,c => ord.s ! g ! s ! c} ;
|
||||
}
|
||||
|
||||
@@ -2,21 +2,24 @@ concrete AdverbAra of Adverb = CatAra ** open ResAra, Prelude in {
|
||||
flags coding=utf8;
|
||||
|
||||
lin
|
||||
|
||||
PositAdvAdj a = {s = a.s ! APosit Masc Sg Indef Acc} ;
|
||||
-- ComparAdvAdj cadv a np = {
|
||||
-- s = cadv.s ++ a.s ! AAdv ++ "مِنْ" ++ np.s ! Gen
|
||||
-- } ;
|
||||
-- ComparAdvAdjS cadv a s = {
|
||||
-- s = cadv.s ++ a.s ! AAdv ++ "تهَن" ++ s.s
|
||||
-- } ;
|
||||
-- ComparAdvAdj cadv a np = {
|
||||
-- s = cadv.s ++ a.s ! AAdv ++ "مِنْ" ++ np.s ! Gen
|
||||
-- } ;
|
||||
-- ComparAdvAdjS cadv a s = {
|
||||
-- s = cadv.s ++ a.s ! AAdv ++ "مِنْ" ++ s.s
|
||||
-- } ;
|
||||
|
||||
PrepNP prep np = {s = prep.s ++ np.s ! Gen} ;
|
||||
PrepNP prep np = {s = prep.s ++ np.s ! prep.c} ;
|
||||
|
||||
AdAdv ad av = cc2 av ad ;
|
||||
|
||||
-- : Subj -> S -> Adv ; -- when she sleeps
|
||||
SubjS subj s = {s = subj.s ++ s.s ! subj.o} ;
|
||||
|
||||
-- AdAdv = cc2 ;
|
||||
--
|
||||
-- SubjS = cc2 ;
|
||||
-- AdvSC s = s ; --- this rule give stack overflow in ordinary parsing
|
||||
--
|
||||
-- AdnCAdv cadv = {s = cadv.s ++ "تهَن"} ;
|
||||
--
|
||||
|
||||
AdnCAdv cadv = {s = cadv.s ++ "مِنْ"} ;
|
||||
|
||||
}
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
--# -path=.:../abstract:../common:../prelude
|
||||
--# -path=.:../abstract:../common:../api:../prelude
|
||||
|
||||
concrete AllAra of AllAraAbs = LangAra ;
|
||||
|
||||
@@ -10,35 +10,35 @@ concrete CatAra of Cat = CommonX - [Utt] ** open ResAra, Prelude, ParamX in {
|
||||
|
||||
-- Tensed/Untensed
|
||||
|
||||
S = {s : Str} ;
|
||||
SSlash,
|
||||
S = {s : Order => Str} ; -- subordinate clause has nominal word order and subject in acc
|
||||
QS = {s : QForm => Str} ;
|
||||
-- RS = {s : Agr => Str} ;
|
||||
RS = {s : Agr => Case => Str} ; -- case because the relative pronoun inflects in case
|
||||
|
||||
-- Sentence
|
||||
|
||||
Cl = ResAra.Cl ; -- {s : ResAra.Tense => Polarity => Order => Str} ;
|
||||
Cl = ResAra.Cl ; -- {s : Tense => Polarity => Order => Str} ;
|
||||
ClSlash = ResAra.ClSlash ;
|
||||
Imp = {s : Polarity => Gender => ResAra.Number => Str} ;
|
||||
|
||||
-- Question
|
||||
|
||||
QCl = ResAra.QCl ; -- {s : ResAra.Tense => Polarity => QForm => Str} ;
|
||||
IP,
|
||||
IDet,
|
||||
IComp = ResAra.IP ; -- {s : Gender => State => Case => Str ; n : ResAra.Number} ;
|
||||
-- IAdv = {s : Str} ;
|
||||
QCl = ResAra.QCl ; -- {s : Tense => Polarity => QForm => Str} ;
|
||||
IDet = ResAra.IDet ; -- {s : Gender => State => Case => Str ; n : Number} ;
|
||||
IP = ResAra.IP ; -- {s : (isPred : Bool) => State => Case => Str ; n : Number} ;
|
||||
IComp = ResAra.IComp ; --
|
||||
IQuant = {s : State => Case => Str} ;
|
||||
--
|
||||
---- Relative
|
||||
--
|
||||
-- RCl = {s : Tense => Anteriority => Polarity => Agr => Str} ;
|
||||
-- RP = {s : Case => Str ; a : RAgr} ;
|
||||
--
|
||||
|
||||
-- Relative
|
||||
|
||||
RCl = ResAra.RCl ;
|
||||
RP = ResAra.RP ;
|
||||
|
||||
-- Verb
|
||||
|
||||
VP = ResAra.VP ;
|
||||
VPSlash = ResAra.VPSlash ; -- VP ** {c2:Str}
|
||||
Comp = ResAra.Comp ; --{s : AAgr => Case => Str} ;
|
||||
VPSlash = ResAra.VPSlash ; -- VP ** {c2:Preposition}
|
||||
Comp = ResAra.Comp ** {obj : Obj ; isNP : Bool} ;
|
||||
-- SC = {s : Str} ;
|
||||
--
|
||||
-- Adjective
|
||||
@@ -47,20 +47,17 @@ concrete CatAra of Cat = CommonX - [Utt] ** open ResAra, Prelude, ParamX in {
|
||||
|
||||
-- Noun
|
||||
|
||||
CN = ResAra.Noun ** {adj : NTable};
|
||||
CN = ResAra.CN;
|
||||
NP, Pron = ResAra.NP; --{s : Case => Str ; a : Agr } ;
|
||||
Ord,
|
||||
Num,
|
||||
Ord,
|
||||
Card = ResAra.NumOrdCard ;
|
||||
Predet = ResAra.Predet ;
|
||||
|
||||
Det = ResAra.Det ;
|
||||
-- {s : Species => Gender => Case => Str ;
|
||||
-- d : State; n : Size; isNum : Bool } ;
|
||||
Quant = {s : ResAra.Number => Species => Gender => Case => Str;
|
||||
d : State;
|
||||
isNum : Bool;
|
||||
isPron: Bool} ;
|
||||
Quant = ResAra.Quant ;
|
||||
Art = {s : ResAra.Number => Species => Gender => Case => Str;
|
||||
d : State} ;
|
||||
|
||||
@@ -75,22 +72,30 @@ concrete CatAra of Cat = CommonX - [Utt] ** open ResAra, Prelude, ParamX in {
|
||||
|
||||
Conj = {s : Str ; n : ResAra.Number} ;
|
||||
-- DConj = {s1,s2 : Str ; n : ResAra.Number} ;
|
||||
-- Subj = {s : Str} ;
|
||||
Prep = {s : Str} ;
|
||||
Subj = {s : Str ; o : Order} ;
|
||||
Prep = ResAra.Preposition ;
|
||||
|
||||
-- Open lexical classes, e.g. Lexicon
|
||||
|
||||
V, VS, VQ, VA = ResAra.Verb ; -- = {s : VForm => Str} ;
|
||||
V2, V2A = ResAra.Verb ** {c2 : Str} ;
|
||||
VV, V2V, V2S, V2Q = ResAra.Verb ** {c2 : Str} ; --- AR
|
||||
V3 = ResAra.Verb ** {c2, c3 : Str} ;
|
||||
V2, V2A = ResAra.Verb2 ;
|
||||
VV = ResAra.Verb2 ** {sc : Preposition} ; -- c2 is for verb
|
||||
V2S, V2Q = ResAra.Verb2 ;
|
||||
V3 = ResAra.Verb3 ;
|
||||
V2V = ResAra.Verb3 ** {sc : Preposition} ; -- c3 is for verb, c2 is for dir.obj
|
||||
|
||||
A = ResAra.Adj ;
|
||||
A2 = ResAra.Adj ** {c2 : Str} ;
|
||||
A2 = ResAra.Adj2 ;
|
||||
|
||||
N = ResAra.Noun ;
|
||||
N2 = ResAra.Noun ** {c2 : Str} ;
|
||||
N3 = ResAra.Noun ** {c2, c3 : Str} ;
|
||||
N2 = ResAra.Noun2 ;
|
||||
N3 = ResAra.Noun3 ;
|
||||
PN = {s : Case => Str; g : Gender; h : Species} ;
|
||||
|
||||
linref
|
||||
|
||||
CN = \cn -> uttCN cn ! Masc ;
|
||||
N = \n -> uttCN (useN n) ! Masc ;
|
||||
VP = \vp -> uttVP vp ! Masc ;
|
||||
|
||||
}
|
||||
|
||||
@@ -1,45 +1,82 @@
|
||||
concrete ConjunctionAra of Conjunction =
|
||||
CatAra ** open ResAra, Coordination, Prelude in {
|
||||
--
|
||||
-- flags optimize=all_subs ;
|
||||
--
|
||||
-- lin
|
||||
--
|
||||
-- ConjS = conjunctSS ;
|
||||
-- DConjS = conjunctDistrSS ;
|
||||
--
|
||||
-- ConjAdv = conjunctSS ;
|
||||
-- DConjAdv = conjunctDistrSS ;
|
||||
--
|
||||
-- ConjNP conj ss = conjunctTable Case conj ss ** {
|
||||
-- a = {n = conjNumber conj.n ss.a.n ; p = ss.a.p}
|
||||
-- } ;
|
||||
-- DConjNP conj ss = conjunctDistrTable Case conj ss ** {
|
||||
-- a = {n = conjNumber conj.n ss.a.n ; p = ss.a.p}
|
||||
-- } ;
|
||||
--
|
||||
-- ConjAP conj ss = conjunctTable Agr conj ss ** {
|
||||
-- isPre = ss.isPre
|
||||
-- } ;
|
||||
-- DConjAP conj ss = conjunctDistrTable Agr conj ss ** {
|
||||
-- isPre = ss.isPre
|
||||
-- } ;
|
||||
--
|
||||
---- These fun's are generated from the list cat's.
|
||||
--
|
||||
-- BaseS = twoSS ;
|
||||
-- ConsS = consrSS comma ;
|
||||
-- BaseAdv = twoSS ;
|
||||
-- ConsAdv = consrSS comma ;
|
||||
-- BaseNP x y = twoTable Case x y ** {a = conjAgr x.a y.a} ;
|
||||
-- ConsNP xs x = consrTable Case comma xs x ** {a = conjAgr xs.a x.a} ;
|
||||
-- BaseAP x y = twoTable Agr x y ** {isPre = andB x.isPre y.isPre} ;
|
||||
-- ConsAP xs x = consrTable Agr comma xs x ** {isPre = andB xs.isPre x.isPre} ;
|
||||
--
|
||||
-- lincat
|
||||
-- [S] = {s1,s2 : Str} ;
|
||||
-- [Adv] = {s1,s2 : Str} ;
|
||||
-- [NP] = {s1,s2 : Case => Str ; a : Agr} ;
|
||||
-- [AP] = {s1,s2 : Agr => Str ; isPre : Bool} ;
|
||||
--
|
||||
|
||||
lincat
|
||||
|
||||
[S] = {s1,s2 : Order => Str} ;
|
||||
[Adv] = {s1,s2 : Str} ;
|
||||
[NP] = {s1,s2 : Case => Str ; a : Agr ; empty : Str} ;
|
||||
[AP] = {s1,s2 : Species => Gender => Number => State => Case => Str} ;
|
||||
|
||||
lin
|
||||
|
||||
|
||||
BaseAdv = twoSS ;
|
||||
ConsAdv = consrSS comma ;
|
||||
ConjAdv = conjunctSS ;
|
||||
|
||||
BaseS = twoTable Order ;
|
||||
ConsS = consrTable Order comma ;
|
||||
ConjS = conjunctTable Order ;
|
||||
|
||||
BaseNP x y = twoTable Case x y ** {
|
||||
a = conjAgr x.a y.a ;
|
||||
empty = []
|
||||
} ;
|
||||
ConsNP xs x = consrTable Case comma xs x ** {
|
||||
a = conjAgr xs.a x.a ;
|
||||
empty = []
|
||||
} ;
|
||||
ConjNP conj ss = conjunctTable Case conj ss ** {
|
||||
a = let gn = pgn2gn ss.a.pgn in
|
||||
{pgn = Per3 gn.g (conjNumber conj.n gn.n) ; isPron = False} ;
|
||||
empty = []
|
||||
} ;
|
||||
|
||||
BaseAP = twoTable5 Species Gender Number State Case ;
|
||||
ConsAP = consrTable5 Species Gender Number State Case comma ;
|
||||
ConjAP = conjunctTable5 Species Gender Number State Case ;
|
||||
|
||||
|
||||
oper
|
||||
conjAgr : Agr -> Agr -> Agr = \a,b -> {
|
||||
isPron = False ;
|
||||
pgn = let gnA = pgn2gn a.pgn ; gnB = pgn2gn b.pgn in
|
||||
Per3 (conjGender gnA.g gnB.g) (conjNumber gnA.n gnB.n)
|
||||
} ;
|
||||
|
||||
conjGender : Gender -> Gender -> Gender = \g,h ->
|
||||
case g of {Fem => h ; _ => Masc} ;
|
||||
|
||||
conjNumber : Number -> Number -> Number = \m,n ->
|
||||
case m of {Sg => n ; _ => Pl} ;
|
||||
|
||||
-- move to predef?
|
||||
|
||||
ListTable5 : PType -> PType -> PType -> PType -> PType -> Type = \P,Q,R,T,S ->
|
||||
{s1,s2 : P => Q => R => T => S => Str} ;
|
||||
|
||||
twoTable5 : (P,Q,R,T,S : PType) -> (_,_ : {s : P => Q => R => T => S => Str}) ->
|
||||
ListTable5 P Q R T S =
|
||||
\_,_,_,_,_,x,y ->
|
||||
{s1 = x.s ; s2 = y.s} ;
|
||||
|
||||
consrTable5 :
|
||||
(P,Q,R,T,S : PType) -> Str -> {s : P => Q => R => T => S => Str} ->
|
||||
ListTable5 P Q R T S -> ListTable5 P Q R T S =
|
||||
\P,Q,R,T,S,c,x,xs ->
|
||||
{s1 = \\p,q,r,t,s => xs.s1 ! p ! q ! r ! t ! s ++ c ++ xs.s2 ! p ! q ! r ! t ! s ;
|
||||
s2 = x.s
|
||||
} ;
|
||||
|
||||
conjunctTable5 :
|
||||
(P,Q,R,T,S : PType) -> Conjunction -> ListTable5 P Q R T S -> {s : P => Q => R => T => S => Str} =
|
||||
\P,Q,R,T,S,or,xs ->
|
||||
{s = \\p,q,r,t,s => xs.s1 ! p ! q ! r ! t ! s ++ or.s ++ xs.s2 ! p ! q ! r ! t ! s} ;
|
||||
|
||||
-- conjunctDistrTable5 :
|
||||
-- (P,Q,R,T,S : PType) -> ConjunctionDistr -> ListTable5 P Q R T S ->
|
||||
-- {s : P => Q => R => T => S => Str} =
|
||||
-- \P,Q,R,T,S,or,xs ->
|
||||
-- {s = \\p,q,r,t,s => or.s1++ xs.s1 ! p ! q ! r ! t ! s ++ or.s2 ++ xs.s2 ! p ! q ! r ! t ! s} ;
|
||||
}
|
||||
|
||||
156
src/arabic/ConstructionAra.gf
Normal file
156
src/arabic/ConstructionAra.gf
Normal file
@@ -0,0 +1,156 @@
|
||||
concrete ConstructionAra of Construction = CatAra ** open
|
||||
Prelude,
|
||||
ParadigmsAra,
|
||||
SyntaxAra,
|
||||
SymbolicAra,
|
||||
StructuralAra,
|
||||
(E=ExtendAra),
|
||||
(R=ResAra),
|
||||
(L=LexiconAra) in {
|
||||
|
||||
lincat
|
||||
Timeunit = N ;
|
||||
Weekday = N ;
|
||||
Monthday = NP ;
|
||||
Month = N ;
|
||||
Year = NP ;
|
||||
|
||||
lin
|
||||
|
||||
timeunitAdv n time =
|
||||
let n_card : Card = n ;
|
||||
n_hours_NP : NP = mkNP n_card time ;
|
||||
in SyntaxAra.mkAdv during_Prep n_hours_NP | ParadigmsAra.mkAdv (n_hours_NP.s ! R.Nom) ;
|
||||
|
||||
-- random guesses
|
||||
weekdayPunctualAdv w = SyntaxAra.mkAdv on_Prep (mkNP w) ; -- on Sunday
|
||||
weekdayHabitualAdv w = SyntaxAra.mkAdv on_Prep (mkNP w) ; -- on Sundays
|
||||
weekdayNextAdv w = SyntaxAra.mkAdv on_Prep (mkNP w) ; -- next Sunday
|
||||
weekdayLastAdv w = SyntaxAra.mkAdv on_Prep (mkNP w) ; -- last Sunday
|
||||
|
||||
monthAdv m = SyntaxAra.mkAdv in_Prep (mkNP m) ;
|
||||
yearAdv y = SyntaxAra.mkAdv in_Prep y ;
|
||||
|
||||
-- dummy
|
||||
dayMonthAdv d m = SyntaxAra.mkAdv on_Prep (mkNP d) ; -- on 17 May
|
||||
monthYearAdv m y = SyntaxAra.mkAdv on_Prep (mkNP m) ; -- in May 2012
|
||||
dayMonthYearAdv d m y = SyntaxAra.mkAdv on_Prep y ; -- on 17 May 2013
|
||||
|
||||
intYear = symb ;
|
||||
intMonthday = symb ;
|
||||
|
||||
-- n_units_AP
|
||||
|
||||
|
||||
oper
|
||||
-- hack used in the name constructions
|
||||
toNP : Bool -> NP -> NP = \b -> if_then_else NP b R.emptyNP ;
|
||||
|
||||
lin
|
||||
-- : NP -> NP -> Cl
|
||||
have_name_Cl np nm =
|
||||
let subjPron : Pron = R.np2pron np ;
|
||||
me : NP = toNP np.a.isPron np ;
|
||||
myName : NP = E.ApposNP me (mkNP (mkDet subjPron) L.name_N) ;
|
||||
in mkCl myName nm ;
|
||||
|
||||
-- : NP -> QCl
|
||||
what_name_QCl np =
|
||||
let subjPron : Pron = R.np2pron np ;
|
||||
me : R.NP = toNP np.a.isPron np ;
|
||||
myName : NP = E.ApposNP me (mkNP (mkDet subjPron) L.name_N) ;
|
||||
what_IP : R.IP = R.mkIP "مَا هُوَ" R.Sg ;
|
||||
in mkQCl what_IP myName ;
|
||||
|
||||
-- how_old_QCl
|
||||
|
||||
-- hungry_VP =
|
||||
-- thirsty_VP =
|
||||
|
||||
lincat Language = N ;
|
||||
|
||||
lin InLanguage l = mkAdv in_Prep (mkNP l) ;
|
||||
|
||||
lin
|
||||
weekdayN w = w ;
|
||||
monthN m = m ;
|
||||
|
||||
weekdayPN w = mkPN w ;
|
||||
monthPN m = mkPN m ;
|
||||
|
||||
languageCN l = mkCN l ;
|
||||
languageNP l = mkNP l ;
|
||||
|
||||
|
||||
oper mkLanguage : Str -> N = mkN ;
|
||||
|
||||
----------------------------------------------
|
||||
---- lexicon of snpcial names
|
||||
|
||||
-- TODO in arabic
|
||||
lin second_Timeunit = mkN "second" ;
|
||||
lin minute_Timeunit = mkN "minute" ;
|
||||
lin hour_Timeunit = mkN "hour" ;
|
||||
lin day_Timeunit = mkN "day" ;
|
||||
lin week_Timeunit = mkN "week" ;
|
||||
lin month_Timeunit = mkN "month" ;
|
||||
lin year_Timeunit = mkN "year" ;
|
||||
|
||||
lin monday_Weekday = mkN "Monday" ;
|
||||
lin tuesday_Weekday = mkN "Tuesday" ;
|
||||
lin wednesday_Weekday = mkN "Wednesday" ;
|
||||
lin thursday_Weekday = mkN "Thursday" ;
|
||||
lin friday_Weekday = mkN "Friday" ;
|
||||
lin saturday_Weekday = mkN "Saturday" ;
|
||||
lin sunday_Weekday = mkN "Sunday" ;
|
||||
|
||||
lin january_Month = mkN "January" ;
|
||||
lin february_Month = mkN "February" ;
|
||||
lin march_Month = mkN "March" ;
|
||||
lin april_Month = mkN "April" ;
|
||||
lin may_Month = mkN "May" ;
|
||||
lin june_Month = mkN "June" ;
|
||||
lin july_Month = mkN "July" ;
|
||||
lin august_Month = mkN "August" ;
|
||||
lin september_Month = mkN "September" ;
|
||||
lin october_Month = mkN "October" ;
|
||||
lin november_Month = mkN "November" ;
|
||||
lin december_Month = mkN "December" ;
|
||||
|
||||
-- lin afrikaans_Language = mkLanguage "Afrikaans" ;
|
||||
-- lin amharic_Language = mkLanguage "Amharic" ;
|
||||
lin arabic_Language = mkLanguage "عَرَبِيَّة" ;
|
||||
-- lin bulgarian_Language = mkLanguage "Bulgarian" ;
|
||||
-- lin catalan_Language = mkLanguage "Catalan" ;
|
||||
-- lin chinese_Language = mkLanguage "Chinese" ;
|
||||
-- lin danish_Language = mkLanguage "Danish" ;
|
||||
-- lin dutch_Language = mkLanguage "Dutch" ;
|
||||
lin english_Language = mkLanguage "إنْجلِيزيْة" ;
|
||||
-- lin estonian_Language = mkLanguage "Estonian" ;
|
||||
lin finnish_Language = mkLanguage "فِنْلَنْدِيّة" ;
|
||||
-- lin french_Language = mkLanguage "French" ;
|
||||
-- lin german_Language = mkLanguage "German" ;
|
||||
-- lin greek_Language = mkLanguage "Greek" ;
|
||||
-- lin hebrew_Language = mkLanguage "Hebrew" ;
|
||||
-- lin hindi_Language = mkLanguage "Hindi" ;
|
||||
-- lin japanese_Language = mkLanguage "Japanese" ;
|
||||
-- lin italian_Language = mkLanguage "Italian" ;
|
||||
-- lin latin_Language = mkLanguage "Latin" ;
|
||||
-- lin latvian_Language = mkLanguage "Latvian" ;
|
||||
-- lin maltese_Language = mkLanguage "Maltese" ;
|
||||
-- lin nepali_Language = mkLanguage "Nepali" ;
|
||||
-- lin norwegian_Language = mkLanguage "Norwegian" ;
|
||||
lin nprsian_Language = mkLanguage "فَارِسيّة" ;
|
||||
-- lin polish_Language = mkLanguage "Polish" ;
|
||||
-- lin punjabi_Language = mkLanguage "Punjabi" ;
|
||||
-- lin romanian_Language = mkLanguage "Romanian" ;
|
||||
-- lin russian_Language = mkLanguage "Russian" ;
|
||||
-- lin sindhi_Language = mkLanguage "Sindhi" ;
|
||||
-- lin spanish_Language = mkLanguage "Spanish" ;
|
||||
-- lin swahili_Language = mkLanguage "Swahili" ;
|
||||
lin swedish_Language = mkLanguage "سُويدِيّة" ;
|
||||
-- lin thai_Language = mkLanguage "Thai" ;
|
||||
-- lin turkish_Language = mkLanguage "Turkish" ;
|
||||
-- lin urdu_Language = mkLanguage "Urdu" ;
|
||||
|
||||
}
|
||||
@@ -4,16 +4,56 @@ concrete ExtendAra of Extend =
|
||||
CatAra ** ExtendFunctor - [
|
||||
GenNP, SlashBareV2S, PredAPVP, GenModNP, ExistsNP,
|
||||
StrandRelSlash, ExistPluralCN, ExistMassCN, ExistCN, EmptyRelSlash, DetNPMasc, DetNPFem,
|
||||
ComplBareVS, ComplDirectVS, ComplDirectVQ
|
||||
ComplBareVS, ComplDirectVS, ComplDirectVQ,
|
||||
ICompAP,
|
||||
VPS, MkVPS, PredVPS, BaseVPS, ConsVPS, ConjVPS,
|
||||
ApposNP
|
||||
]
|
||||
with (Grammar=GrammarAra)
|
||||
** open
|
||||
|
||||
ParamX,
|
||||
ResAra,
|
||||
Prelude,
|
||||
ResAra
|
||||
Coordination
|
||||
|
||||
in {
|
||||
|
||||
lin
|
||||
GenNP np = { s = \\_,_,_,_ => np.s ! Gen ; d = Const ; isNum, isPron = False } ;
|
||||
} ;
|
||||
GenNP np = {s = \\_,_,_,_ => np.s ! Gen ; d = Const ; isNum,isPron,is1sg = False} ;
|
||||
|
||||
-- : NP -> NP -> NP
|
||||
ApposNP np1 np2 = np2 ** {s = \\c => np1.s ! c ++ np2.s ! c} ;
|
||||
|
||||
-- : AP -> IComp ; -- "how old"
|
||||
ICompAP ap = {s = \\gn => "كَمْ" ++ ap.s ! NoHum ! gn.g ! gn.n ! Indef ! Acc} ;
|
||||
|
||||
lincat
|
||||
|
||||
VPS = {s : PerGenNum => Str} ; -- finite VP's with tense and polarity
|
||||
[VPS] = {s1,s2 : PerGenNum => Str} ;
|
||||
lin
|
||||
-- : Temp -> Pol -> VP -> VPS ; -- hasn't slept
|
||||
MkVPS t p vp = {
|
||||
s = \\pgn => let vps =
|
||||
wordOrderNoSubj
|
||||
Nominal -- Nominal (=SVO) generalises best for ConjVPS.
|
||||
vp.obj.a.isPron
|
||||
(vStr vp pgn t.t p.p Nominal)
|
||||
(case <vp.isPred,vp.obj.a.isPron> of {
|
||||
<False,True> => BIND ++ vp.obj.s ;
|
||||
_ => vp.obj.s })
|
||||
(pred vp pgn t.t p.p)
|
||||
vp.s2
|
||||
in vps.before ++ vps.after -- word order is SVO, so this is safe for just this case.
|
||||
} ;
|
||||
|
||||
BaseVPS = twoTable PerGenNum ;
|
||||
ConsVPS = consrTable PerGenNum comma ;
|
||||
ConjVPS = conjunctTable PerGenNum ;
|
||||
|
||||
PredVPS np vps = {
|
||||
s = \\_ => np.s ! Nom ++ vps.s ! np.a.pgn -- first quick version with order always Nominal.
|
||||
} ; -- if necessary, change VPS into {s : PerGenNum => Order => {before,after : Str}}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,15 +1,63 @@
|
||||
concrete IdiomAra of Idiom = CatAra ** open Prelude, ResAra in {
|
||||
flags coding=utf8;
|
||||
--
|
||||
-- flags optimize=all_subs ;
|
||||
--
|
||||
-- lin
|
||||
-- ExistNP np =
|
||||
-- mkClause "تهري" (agrP3 np.a.n) (insertObj (\\_ => np.s ! Acc) (predAux auxBe)) ;
|
||||
-- ImpersCl vp = mkClause "ِت" (agrP3 Sg) vp ;
|
||||
-- GenericCl vp = mkClause "ْني" (agrP3 Sg) vp ;
|
||||
--
|
||||
-- ProgrVP vp = insertObj (\\a => vp.ad ++ vp.prp ++ vp.s2 ! a) (predAux auxBe) ;
|
||||
--
|
||||
}
|
||||
concrete IdiomAra of Idiom = CatAra ** open
|
||||
Prelude,
|
||||
ResAra,
|
||||
VerbAra,
|
||||
ParadigmsAra
|
||||
in {
|
||||
|
||||
|
||||
lin
|
||||
|
||||
-- : VP -> Cl ; -- it is hot
|
||||
ImpersCl vp =
|
||||
let it : ResAra.NP = case vp.isPred of {
|
||||
True => pron2np (pgn2pron vp.obj.a.pgn) ;
|
||||
False => pgn2pron vp.obj.a.pgn } ; -- if no obj, Per3 Masc Sg chosen by default
|
||||
in predVP it vp ;
|
||||
|
||||
-- : VP -> Cl ; -- one sleeps
|
||||
GenericCl = predVP (regNP "المَرْء" Sg) ;
|
||||
|
||||
-- : NP -> RS -> Cl ; -- it is I who did it
|
||||
--CleftNP np rs =
|
||||
|
||||
-- : Adv -> S -> Cl ; -- it is here she slept
|
||||
CleftAdv adv s =
|
||||
let comp : Comp = CompAdv (lin Adv {s = adv.s ++ s.s ! Verbal}) ; -- no idea about word order /IL
|
||||
pass_V = mkV "مضي" va vi ; -- switch to copula or some other verb if better /IL
|
||||
in predVP emptyNP (UseV pass_V ** {isPred=True ; pred=comp}) ; -- very hacky /IL
|
||||
|
||||
-- : NP -> Cl ; -- there is a house
|
||||
ExistNP np =
|
||||
predVP (emptyNP ** {s=\\c=>"هُنَاكَ"}) (UseComp (CompNP np)) ; -- IL
|
||||
|
||||
-- ExistIP : IP -> QCl ; -- which houses are there
|
||||
|
||||
-- 7/12/2012 generalizations of these
|
||||
|
||||
-- : NP -> Adv -> Cl ; -- there is a house in Paris
|
||||
ExistNPAdv np adv =
|
||||
predVP (emptyNP ** {s=\\c=>"هُنَاكَ"}) (AdvVP (UseComp (CompNP np)) adv) ; -- IL
|
||||
|
||||
-- ExistIPAdv : IP -> Adv -> QCl ; -- which houses are there in Paris
|
||||
|
||||
-- ProgrVP : VP -> VP ; -- be sleeping
|
||||
|
||||
-- ImpPl1 : VP -> Utt ; -- let's go
|
||||
|
||||
-- ImpP3 : NP -> VP -> Utt ; -- let John walk
|
||||
|
||||
-- 3/12/2013 non-reflexive uses of "self"
|
||||
|
||||
-- : VP -> VP ; -- is at home himself; is himself at home
|
||||
SelfAdvVP,
|
||||
SelfAdVVP = \vp -> vp ** {
|
||||
s = \\pgn,vf => vp.s ! pgn ! vf ++ reflPron Nom pgn
|
||||
} ;
|
||||
|
||||
-- : NP -> NP ; -- the president himself (is at home)
|
||||
SelfNP np = np ** {
|
||||
s = \\c => np.s ! c ++ reflPron c (np.a.pgn)
|
||||
} ;
|
||||
|
||||
}
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
--# -path=.:../abstract:../common:../prelude
|
||||
--# -path=.:../abstract:../common:../api:../prelude
|
||||
|
||||
concrete LangAra of Lang =
|
||||
GrammarAra,
|
||||
LexiconAra
|
||||
LexiconAra,
|
||||
ConstructionAra
|
||||
** {
|
||||
|
||||
flags startcat = Phr ; unlexer = text ; lexer = text ; coding = utf8 ;
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
concrete LexiconAra of Lexicon = CatAra ** open
|
||||
ParadigmsAra,
|
||||
ResAra,
|
||||
MorphoAra, --shouldn't open it here, only needed reg &sndf
|
||||
Prelude in {
|
||||
|
||||
flags
|
||||
@@ -11,35 +10,37 @@ flags
|
||||
|
||||
lin
|
||||
|
||||
airplane_N = sdfN "ط؟ر" "فاعِلة" Fem NoHum ;
|
||||
airplane_N = sdfN "طءر" "فاعِلة" Fem NoHum ;
|
||||
answer_V2S = dirV2 (v3 "جوب") ;
|
||||
apartment_N = brkN "شقّ" "فِعّة" "فِعَل" Fem NoHum ;
|
||||
apple_N = sdfN "تفح" "فِعّالة" Fem NoHum ;
|
||||
art_N = brkN "فنّ" "فَعّ" "فُعُول" Masc NoHum ;
|
||||
ask_V2Q = dirV2 (regV "يَس؟َل") ;
|
||||
-- ask_V2Q = dirV2 (v1 "س؟ل" a a) ;
|
||||
baby_N = brkN "طفل" "فِعل" "أَفعال" Masc Hum;
|
||||
bad_A = sndA "سو؟" "فَيِّع" ;
|
||||
art_N = brkN "فنن" "فَعّ" "فُعُول" Masc NoHum ;
|
||||
ask_V2Q = dirV2 (regV "يَسءَل") ;
|
||||
-- ask_V2Q = dirV2 (v1 "سءل" a a) ;
|
||||
baby_N = brkN "طفل" "فِعل" "أَفعَال" Masc Hum;
|
||||
-- bad_A = sndA "سوء" "فَيِّع" ;
|
||||
bad_A = degrA "سَيِّئ" "سَيِّئَة" "سَيِّئِين" ;
|
||||
bank_N = brkN "بنك" "فَعل" "فُعُول" Masc NoHum ;
|
||||
beautiful_A = sndA "جمل" "فَعِيل" ;
|
||||
become_VA = mkVA (v4 "صبح") ;
|
||||
beer_N = sdfN "بير" "فِعلة" Fem NoHum ;
|
||||
beg_V2V = dirV2 (v5 "وسل") ;
|
||||
beg_V2V = mkV2V (mkVV (v5 "وسل")) noPrep ;
|
||||
big_A = sndA "كبر" "فَعِيل" ;
|
||||
bike_N = sdfN "درج" "فَعّالة" Fem NoHum ;
|
||||
bird_N = brkN "طير" "فَعل" "فُعُول" Masc NoHum;
|
||||
black_A = clrA "سود" ;
|
||||
blue_A = clrA "زرق" ;
|
||||
boat_N = brkN "قرب" "فاعِل" "فَواعِل" Masc NoHum ;
|
||||
book_N = brkN "كتب" "فِعال" "فُعُل" Masc NoHum ;
|
||||
book_N = brkN "كتب" "فِعَال" "فُعُل" Masc NoHum ;
|
||||
boot_N = sdfN "جزم" "فَعلة" Fem NoHum ;
|
||||
boss_N = brkN "دور" "مُفِيع" "مُفَعاء" Masc Hum ;
|
||||
boss_N = sdmN "دور" "مُفِيع" Masc Hum ;
|
||||
--boss_N = brkN "دور" "مُفِيع" "مُفَعَاء" Masc Hum ;
|
||||
boy_N = brkN "صبي" "فَعِل" "فُعلان" Masc Hum ;
|
||||
bread_N = brkN "خبز" "فُعل" "أَفعال" Masc NoHum ;
|
||||
bread_N = brkN "خبز" "فُعل" "أَفعَال" Masc NoHum ;
|
||||
break_V2 = dirV2 (regV "يَكسُر") ;
|
||||
-- break_V2 = dirV2 (v1 "كسر" a u) ;
|
||||
broad_A = sndA "وسع" "فاعِل" ;
|
||||
brother_N2 = mkN2 (brkN "؟خو" "فَع" "فِعلة" Masc Hum) ; --FIXME
|
||||
brother_N2 = mkN2 (brkN "ءخو" "فَع" "فِعلة" Masc Hum) ; --FIXME dual
|
||||
brown_A = sndA "بني" "فُعِّل";
|
||||
butter_N = sdfN "سبد" "فُعلة" Fem NoHum ;
|
||||
buy_V2 = dirV2 (v8 "شري") ;
|
||||
@@ -47,74 +48,73 @@ flags
|
||||
cap_N = sdfN "قبع" "فُعَّلة" Fem NoHum ; --qalnUsö
|
||||
car_N = sdfN "سير" "فَعّالة" Fem NoHum ;
|
||||
carpet_N = sdfN "سجد" "فَعّالة" Fem NoHum ;
|
||||
cat_N = brkN "هرّ" "فِعّة" "فِعَل" Fem NoHum ;
|
||||
cat_N = brkN "هرّ" "فِعّ" "فِعَلَة" Fem NoHum ;
|
||||
ceiling_N = brkN "سقف" "فَعل" "أَفعُل" Masc NoHum ;
|
||||
chair_N = brkN "كرس" "فُعلِي" "فَعالِي" Masc NoHum ;
|
||||
cheese_N = brkN "جبن" "فُعلة" "أَفعال" Fem NoHum ;
|
||||
child_N = brkN "ولد" "فَعَل" "أَفعال" Masc Hum ;
|
||||
church_N = brkN "كنس" "فَعِيلة" "فَعاٱِل" Fem Hum ;
|
||||
chair_N = brkN "كرس" "فُعلِي" "فَعَالِي" Masc NoHum ;
|
||||
cheese_N = brkN "جبن" "فُعلة" "أَفعَال" Fem NoHum ;
|
||||
child_N = brkN "ولد" "فَعَل" "أَفعَال" Masc Hum ;
|
||||
church_N = brkN "كنس" "فَعِيلة" "فَعَاٱِل" Fem Hum ;
|
||||
city_N = brkN "مدن" "فَعِيلة" "فُعُل" Fem NoHum ;
|
||||
clean_A = sndA "نظف" "فَعِيل" ;
|
||||
clever_A = sndA "جهد" "مُفتَعِل" ;
|
||||
close_V2 = dirV2 (v4 "غلق") ;
|
||||
coat_N = brkN "عطف" "مِفعَل" "مَفاعِل" Masc NoHum ;
|
||||
cold_A = sndA "برد" "فاعِل" ;
|
||||
come_V = v1 "جي؟" a i ; --check
|
||||
come_V = v1 "جيء" a i ; --check
|
||||
computer_N = brkN "حسب" "فاعُول" "فَواعِيل" Masc NoHum ;
|
||||
country_N = brkN "بلد" "فَعَل" "فِعال" Masc NoHum ;
|
||||
country_N = brkN "بلد" "فَعَل" "فِعَال" Masc NoHum ;
|
||||
cousin_N = brkN "قرب" "فَعِيل" "أَفعِلاء" Masc Hum ; -- (<bn / bnt) (cam[ö] / xAl[ö])
|
||||
cow_N = sdfN "بقر" "فَعلة" Fem NoHum ;
|
||||
die_V = v1 "موت" a u ; --check
|
||||
dirty_A = sndA "وسخ" "فَعِل" ;
|
||||
distance_N3 = mkN3 (sdfN "سوف" "مَفاعة" Fem NoHum) "مِن" "إِلَى" ;
|
||||
doctor_N = brkN "طبّ" "فَعِيل" "أَفِعّاء" Masc Hum ;
|
||||
dog_N = brkN "كلب" "فَعل" "فِعال" Masc NoHum ;
|
||||
door_N = brkN "بوب" "فاع" "أَفعال" Masc NoHum ;
|
||||
doctor_N = brkN "طبب" "فَعِيل" "أَفِعّاء" Masc Hum ;
|
||||
dog_N = brkN "كلب" "فَعل" "فِعَال" Masc NoHum ;
|
||||
door_N = brkN "بوب" "فاع" "أَفعَال" Masc NoHum ;
|
||||
drink_V2 = dirV2 (regV "شَرِب") ;
|
||||
-- drink_V2 = dirV2 (v1 "شرب" i a) ;
|
||||
easy_A2V = mkA2 (sndA "سهل" "فَعل") "لِ" ;
|
||||
eat_V2 = dirV2 (regV "يَ؟كُل") ;
|
||||
-- eat_V2 = dirV2 (v1 "؟كل" a u) ;
|
||||
easy_A2V = mkA2 (sndA "سهل" "فَعل") liPrep ;
|
||||
eat_V2 = dirV2 (mkV "ءكل" FormI) ;
|
||||
empty_A = sndA "فرغ" "فاعِل" ;
|
||||
enemy_N = brkN "عدو" "فَعُلّ" "أَفعاء" Masc Hum ;
|
||||
enemy_N = brkN "عدو" "فَعُلّ" "أَفعَاء" Masc Hum ;
|
||||
factory_N = brkN "صنع" "مَفعَل" "مَفاعِل" Masc NoHum ;
|
||||
father_N2 = mkN2 (brkN "؟ب" "فَع" "أَفعاء" Masc Hum);
|
||||
father_N2 = mkN2 (brkN "ءب" "فَع" "أَفعَاء" Masc Hum);
|
||||
fear_VS = mkVS (v1 "خشي" i a );
|
||||
find_V2 = dirV2 (v1 "وجد" a i ) ;
|
||||
fish_N = brkN "سمك" "فَعَلة" "أَفعال" Fem NoHum ;
|
||||
floor_N = brkN "؟رض" "فَعل" "فَعالِي" Fem NoHum;
|
||||
fish_N = brkN "سمك" "فَعَلة" "أَفعَال" Fem NoHum ;
|
||||
floor_N = brkN "ءرض" "فَعل" "فَعَالِي" Fem NoHum;
|
||||
forget_V2 = dirV2 (v1 "نسي" i a ) ;
|
||||
fridge_N = sdfN "برد" "فَعّال" Masc NoHum ;
|
||||
friend_N = brkN "صدق" "فَعِيل" "أَفعِلاء" Masc Hum ; --SadIqö
|
||||
fruit_N = brkN "فكه" "فاعِلة" "فَواعِل" Fem NoHum ;
|
||||
fun_AV = sndA "متع" "مُفعِل" ;
|
||||
garden_N = brkN "حدق" "فَعِيلة" "فَعاٱِل" Fem NoHum ;
|
||||
girl_N = brkN "بنت" "فِعل" "فَعال" Fem Hum ;
|
||||
garden_N = brkN "حدق" "فَعِيلة" "فَعَاٱِل" Fem NoHum ;
|
||||
girl_N = brkN "بنت" "فِعل" "فَعَال" Fem Hum ;
|
||||
glove_N = sdfN "قفز" "فُعّال" Masc NoHum ;
|
||||
gold_N = sdfN "ذهب" "فَعَل" Masc NoHum ;
|
||||
good_A = sndA "جود" "فَيِّع" ; -- Hasan, HisAn
|
||||
go_V = regV "يَذهَب" ;
|
||||
-- go_V = v1 "ذهب" a a ;
|
||||
green_A = clrA "خضر" ;
|
||||
harbour_N = brkN "رف؟" "مَفعَل" "مَفاعِل" Masc NoHum ; --mInA', marsaY
|
||||
harbour_N = brkN "رفء" "مَفعَل" "مَفاعِل" Masc NoHum ; --mInA', marsaY
|
||||
hate_V2 = dirV2 (regV "كَرِه") ;
|
||||
hat_N = sdfN "قبع" "فُعَّلة" Fem NoHum ;
|
||||
-- have_V2 = dirV2 (v1 "ملك" a i) ;
|
||||
hear_V2 = dirV2 (regV "سَمِع") ;
|
||||
-- hear_V2 = dirV2 (v1 "سمع" i a) ;
|
||||
hill_N = brkN "هضب" "فَعلة" "فِعال" Fem NoHum ; --tallö, rAbiyö
|
||||
hill_N = brkN "هضب" "فَعلة" "فِعَال" Fem NoHum ; --tallö, rAbiyö
|
||||
hope_VS = mkVS (v1 "رجو" a u) ; --check
|
||||
horse_N = brkN "حصن" "فِعال" "أَفعِلة" Masc NoHum ;
|
||||
horse_N = brkN "حصن" "فِعَال" "أَفعِلة" Masc NoHum ;
|
||||
hot_A = sndA "سخن" "فاعِل" ; --HAr
|
||||
house_N = brkN "بيت" "فَعل" "فُعُول" Masc NoHum ; --manzil
|
||||
important_A = sndA "هيم" "فاعّ" ;
|
||||
industry_N = sdfN "صنع" "فِعالة" Fem NoHum ;
|
||||
iron_N = brkN "حدّ" "فَعِيل" "فَعائِل" Masc NoHum ;
|
||||
industry_N = sdfN "صنع" "فِعَالة" Fem NoHum ;
|
||||
iron_N = brkN "حدد" "فَعِيل" "فَعَائِل" Masc NoHum ;
|
||||
king_N = brkN "ملك" "فَعِل" "فُعُول" Masc Hum ;
|
||||
know_V2 = dirV2 (regV "عَرِف") ;
|
||||
know_VS = mkVS (regV "عَرِف") ; -- or with ع ل م?
|
||||
know_VS = mkVS (regV "عَرِف") ; -- or with ع ل م?
|
||||
lake_N = sdfN "بحر" "فُعَيلة" Fem NoHum ;
|
||||
lamp_N = brkN "صبح" "مِفعال" "مَفاعِيل" Masc NoHum ; --qanDIl, fAnUs
|
||||
lamp_N = brkN "صبح" "مِفعَال" "مَفاعِيل" Masc NoHum ; --qanDIl, fAnUs
|
||||
learn_V2 = dirV2 (v5 "علم") ;
|
||||
leather_N = brkN "جلد" "فِعل" "فُعُول" Masc NoHum ;
|
||||
leave_V2 = dirV2 (regV "يَترُك") ;
|
||||
@@ -128,16 +128,16 @@ flags
|
||||
-- lose_V2 = dirV2 (v1 "خسر" i a) ; --Dayyac, >aDAc
|
||||
love_N = brkN "حبّ" "فُعّ" "فُعّ" Masc NoHum ; -- no plur
|
||||
love_V2 = dirV2 (v1 "حبّ" a i) ;
|
||||
man_N = brkN "رجل" "فَعُل" "فِعال" Masc Hum ;
|
||||
man_N = brkN "رجل" "فَعُل" "فِعَال" Masc Hum ;
|
||||
married_A2 = mkA2 (sndA "زوج" "مُتَفَعِّل") "مِن" ;
|
||||
meat_N = brkN "لحم" "فَعلة" "فُعُول" Masc NoHum ;
|
||||
milk_N = brkN "حلب" "فَعِيل" "فَعِيل" Masc NoHum ; --no plur
|
||||
moon_N = brkN "قمر" "فَعَل" "أَفعال" Masc NoHum ;
|
||||
mother_N2 = mkN2 (sdfN "؟م" "فُعّ" Fem Hum) ;
|
||||
mountain_N = brkN "جبل" "فَعَل" "فِعال" Masc NoHum ;
|
||||
moon_N = brkN "قمر" "فَعَل" "أَفعَال" Masc NoHum ;
|
||||
mother_N2 = mkN2 (sdfN "ءم" "فُعَّ" Fem Hum) ;
|
||||
mountain_N = brkN "جبل" "فَعَل" "فِعَال" Masc NoHum ;
|
||||
music_N = mkN (reg "مُوسِيقَى" "مُوسِيقَى") Fem NoHum ; --no plur
|
||||
narrow_A = sndA "ضيق" "فَعِّل" ;
|
||||
new_A = sndA "جدّ" "فَعِيل" ;
|
||||
new_A = mkA "جدد" "فَعِيل" "فُعُل" ;
|
||||
newspaper_N = brkN "صحف" "فَعِيلة" "فُعُل" Fem NoHum ;
|
||||
oil_N = brkN "زيت" "فَعل" "فُعُول" Masc NoHum ;
|
||||
old_A = sndA "قدم" "فَعِيل" ;
|
||||
@@ -145,10 +145,10 @@ flags
|
||||
-- open_V2 = dirV2 (v1 "فتح" a a ) ;
|
||||
paint_V2A = mkV2A (regV "يَدهَن" ) [] ;
|
||||
-- paint_V2A = mkV2A (v1 "دهن" a a ) [] ;
|
||||
paper_N = brkN "ورق" "فَعَلة" "أَفعال" Fem NoHum ;
|
||||
paper_N = brkN "ورق" "فَعَلة" "أَفعَال" Fem NoHum ;
|
||||
paris_PN = mkPN "بارِيس" Fem NoHum ;
|
||||
peace_N = brkN "سلم" "فَعال" "فَعال" Masc NoHum; --no plur
|
||||
pen_N = brkN "قلم" "فَعَل" "أَفعال" Masc NoHum;
|
||||
peace_N = brkN "سلم" "فَعَال" "فَعَال" Masc NoHum; --no plur
|
||||
pen_N = brkN "قلم" "فَعَل" "أَفعَال" Masc NoHum;
|
||||
planet_N = mkN (reg "كَوكَب" "كَواكِب") Masc NoHum ; -- quadriconsonantal
|
||||
plastic_N = mkN (sndf "بلاستِيك") Masc NoHum ;
|
||||
play_V2 = dirV2 (regV "لَعِب") ;
|
||||
@@ -160,15 +160,15 @@ flags
|
||||
radio_N = mkN (sndf "راديُو") Masc NoHum ;
|
||||
rain_V0 = mkV0 (regV "يَمطُر") ;
|
||||
-- rain_V0 = mkV0 (v1 "مطر" a u) ;
|
||||
read_V2 = dirV2 (regV "يَقرَ؟") ;
|
||||
-- read_V2 = dirV2 (v1 "قر؟" a a ) ;
|
||||
read_V2 = dirV2 (regV "يَقرَء") ;
|
||||
-- read_V2 = dirV2 (v1 "قرء" a a ) ;
|
||||
red_A = clrA "حمر" ;
|
||||
religion_N = brkN "دين" "فِعل" "أَفعال" Masc NoHum ;
|
||||
religion_N = brkN "دين" "فِعل" "أَفعَال" Masc NoHum ;
|
||||
restaurant_N = brkN "طعم" "مَفعَل" "مَفاعِل" Masc NoHum ;
|
||||
river_N = brkN "نهر" "فَعل" "أَفعال" Masc NoHum ;
|
||||
river_N = brkN "نهر" "فَعل" "أَفعَال" Masc NoHum ;
|
||||
rock_N = brkN "صخر" "فَعلة" "فُعُول" Fem NoHum ;
|
||||
roof_N = brkN "سطح" "فَعل" "أَفعُل" Masc NoHum ;
|
||||
rubber_N = brkN "مطّ" "فَعّال" "فَعّال" Masc NoHum ; -- no hum
|
||||
rubber_N = brkN "مطط" "فَعَّال" "فَعَّال" Masc NoHum ; -- no hum
|
||||
run_V = regV "يَركُض" ;
|
||||
-- run_V = v1 "ركض" a u ;
|
||||
say_VS = mkVS (v1 "قول" a u) ; --check
|
||||
@@ -177,41 +177,41 @@ flags
|
||||
sea_N = brkN "بحر" "فَعل" "فُعُول" Masc NoHum ;
|
||||
seek_V2 = dirV2 (regV "يَطلُب") ;
|
||||
-- seek_V2 = dirV2 (v1 "طلب" a u) ;
|
||||
see_V2 = dirV2 (v1 "ر؟ي" a a) ;
|
||||
see_V2 = dirV2 (v1 "رءي" a a) ;
|
||||
sell_V3 = dirdirV3 (v1 "بيع" a i) ; --check
|
||||
send_V3 = dirdirV3 (v4 "رسل") ;
|
||||
sheep_N = brkN "خرف" "فَعُول" "فِعال" Masc NoHum ;
|
||||
sheep_N = brkN "خرف" "فَعُول" "فِعَال" Masc NoHum ;
|
||||
ship_N = brkN "سفن" "فَعِيلة" "فُعُل" Fem NoHum ;
|
||||
shirt_N = brkN "قمص" "فَعِيل" "فُعلان" Masc NoHum ;
|
||||
shoe_N = brkN "حذو" "فِعاء" "أَفعِية" Masc NoHum ;
|
||||
shoe_N = brkN "حذو" "فِعَاء" "أَفعِية" Masc NoHum ;
|
||||
shop_N = brkN "تجر" "مَفعَل" "مَفاعِل" Masc NoHum ;
|
||||
short_A = sndA "قصر" "فَعِيل" ;
|
||||
silver_N = brkN "فضّ" "فِعّة" "فِعَل" Fem NoHum ;
|
||||
sister_N = brkN "؟خو" "فُعت" "فَعَوات" Fem Hum ; --FIXME
|
||||
silver_N = brkN "فضض" "فِعَّة" "فِعَل" Fem NoHum ;
|
||||
sister_N = brkN "ءخو" "فُعت" "فَعَوَات" Fem Hum ; --FIXME
|
||||
sleep_V = v1 "نوم" i a ; --check
|
||||
small_A = sndA "صغر" "فَعِيل" ;
|
||||
snake_N = sdfN "حيّ" "فَعّة" Fem NoHum ;
|
||||
snake_N = sdfN "حيّ" "فَعَّة" Fem NoHum ;
|
||||
sock_N = brkN "جرب" "فَوعَل" "فَواعِل" Masc NoHum ;
|
||||
speak_V2 = dirV2 (v5 "كلم") ;
|
||||
star_N = brkN "نجم" "فَعل" "فُعُول" Masc NoHum ; --najmö
|
||||
steel_N = brkN "فلذ" "فُوعال" "فَواعِل" Masc NoHum ;
|
||||
stone_N = brkN "حجر" "فَعَل" "أَفعال" Masc NoHum ;
|
||||
steel_N = brkN "فلذ" "فُوعَال" "فَواعِل" Masc NoHum ;
|
||||
stone_N = brkN "حجر" "فَعَل" "أَفعَال" Masc NoHum ;
|
||||
stove_N = brkN "وقد" "مَفعِل" "مَفاعِل" Masc NoHum ;
|
||||
student_N = brkN "طلب" "فاعِل" "فُعّال" Masc Hum ; --tilmI*
|
||||
stupid_A = clrA "بله" ;
|
||||
sun_N = brkN "شمس" "فَعل" "فُعُول" Fem NoHum ;
|
||||
switch8off_V2 = dirV2 (v4 "طف؟") ;
|
||||
switch8off_V2 = dirV2 (v4 "طفء") ;
|
||||
switch8on_V2 = dirV2 (v4 "شعل") ;
|
||||
table_N = sdfN "طول" "فاعِلة" Fem NoHum ;
|
||||
talk_V3 = mkV3 (v5 "حدث") "لِ" "عَن" ;
|
||||
talk_V3 = mkV3 (v5 "حدث") liPrep (mkPrep "عَن") ;
|
||||
teacher_N = sdmN "علم" "مُفَعِّل" Masc Hum ; --mucal~imö
|
||||
teach_V2 = dirV2 (v2 "علم") ;
|
||||
television_N = mkN (sndf "تِلِفِزيُون") Masc NoHum ;
|
||||
thick_A = sndA "سمك" "فَعِيل" ;
|
||||
thin_A = sndA "رفع" "فَعِيل" ;
|
||||
train_N = sdfN "قطر" "فِعال" Masc NoHum;
|
||||
train_N = sdfN "قطر" "فِعَال" Masc NoHum;
|
||||
travel_V = v3 "سفر" ;
|
||||
tree_N = brkN "شجر" "فَعلة" "أَفعال" Fem NoHum ;
|
||||
tree_N = brkN "شجر" "فَعلة" "أَفعَال" Fem NoHum ;
|
||||
ugly_A = sndA "قبح" "فَعِيل" ;
|
||||
understand_V2 = dirV2 (regV "فَهِم") ;
|
||||
-- understand_V2 = dirV2 (v1 "فهم" i a ) ;
|
||||
@@ -219,7 +219,7 @@ flags
|
||||
village_N = brkN "قري" "فَعلة" "فُعَى" Fem NoHum ; --Daycö
|
||||
wait_V2 = dirV2 (v8 "نظر") ;
|
||||
walk_V = v1 "مشي" a i ; --check
|
||||
warm_A = sndA "دف؟" "فاعِل" ;
|
||||
warm_A = sndA "دفء" "فاعِل" ;
|
||||
war_N = brkN "حرب" "فَعل" "فُعُول" Fem NoHum ;
|
||||
watch_V2 = dirV2 (v3 "شهد") ;
|
||||
water_N = mkN (reg "ماء" "مِياه") Fem NoHum ; --"موه" "فاء" "فِياع" ??
|
||||
@@ -229,34 +229,34 @@ flags
|
||||
win_V2 = dirV2 (regV "رَبِح") ;
|
||||
-- win_V2 = dirV2 (v1 "ربح" i a) ;
|
||||
woman_N = mkN (reg "إِمرَأَة" "نِسوَة") Fem Hum ;
|
||||
wonder_VQ = mkVQ (v6 "س؟ل") ;
|
||||
wood_N = brkN "خشب" "فَعَل" "أَفعال" Masc NoHum ;
|
||||
wonder_VQ = mkVQ (v6 "سءل") ;
|
||||
wood_N = brkN "خشب" "فَعَل" "أَفعَال" Masc NoHum ;
|
||||
write_V2 = dirV2 (regV "يَكتُب") ;
|
||||
-- write_V2 = dirV2 (v1 "كتب" a u) ;
|
||||
yellow_A = clrA "صفر" ;
|
||||
young_A = sndA "شبّ" "فاعّ" ;
|
||||
young_A = sndA "شبب" "فَاعّ" ;
|
||||
|
||||
do_V2 = dirV2 (regV "يَفعَل") ;
|
||||
-- do_V2 = dirV2 (v1 "فعل" a a ) ;
|
||||
now_Adv = mkAdv "الآن" ;
|
||||
already_Adv = mkAdv "سابِقاً" ;
|
||||
song_N = brkN "غني" "أَفعِلة" "أَفاعِي" Fem NoHum ;
|
||||
song_N = brkN "غني" "أُفعِلَة" "أَفَاعِي" Fem NoHum ;
|
||||
add_V3 = dirV3 (regV "يَجمَع") "وَ" ;
|
||||
-- add_V3 = dirV3 (v1 "جمع" a a) "وَ" ;
|
||||
number_N = brkN "رقم" "فَعل" "أَفعال" Masc NoHum ; --cadad
|
||||
number_N = brkN "رقم" "فَعل" "أَفعَال" Masc NoHum ; --cadad
|
||||
put_V2 = dirV2 (v1 "وضع" a a );
|
||||
stop_V = v5 "وقف" ;
|
||||
jump_V = regV "يَقفِز" ;
|
||||
-- jump_V = v1 "قفز" a i ;
|
||||
|
||||
left_Ord = mkOrd "أَيسَر" "يُسرَى";
|
||||
right_Ord = mkOrd "أَيمَن" "يُمنَى" ;
|
||||
left_Ord = mkOrd "أَيسَر" "يُسرَى" One;
|
||||
right_Ord = mkOrd "أَيمَن" "يُمنَى" One;
|
||||
|
||||
far_Adv = mkAdv "بَعِيداً" ;
|
||||
correct_A = sndA "صحّ" "فَعِيل" ;
|
||||
correct_A = sndA "صحّ" "فَعِيل" ; -- TODO broken plural
|
||||
dry_A = sndA "نشف" "فاعِل" ;
|
||||
dull_A = sndA "بهت" "فاعِل" ;
|
||||
full_A = sndA "مل؟" "فَعِيل" ;
|
||||
full_A = sndA "ملء" "فَعِيل" ;
|
||||
heavy_A = sndA "ثقل" "فَعِيل" ;
|
||||
near_A = sndA "قرب" "فَعِيل" ;
|
||||
rotten_A = sndA "فسد" "فاعِل" ;
|
||||
@@ -268,68 +268,68 @@ flags
|
||||
wide_A = sndA "وسع" "فاعِل" ;
|
||||
|
||||
animal_N = sdfN "حيّ" "فَعَوان" Masc NoHum ;
|
||||
ashes_N = brkN "رمد" "فَعال" "أَفعِلة" Masc NoHum;
|
||||
ashes_N = brkN "رمد" "فَعَال" "أَفعِلة" Masc NoHum;
|
||||
back_N = brkN "ظهر" "فَعل" "فُعُول" Masc NoHum;
|
||||
bark_N = brkN "نبح" "فَعل" "فُعال" Masc NoHum;
|
||||
bark_N = brkN "نبح" "فَعل" "فُعَال" Masc NoHum;
|
||||
belly_N = brkN "بطن" "فَعل" "فُعُول" Fem NoHum;
|
||||
blood_N = brkN "دم" "فَع" "فِعاء" Masc NoHum;
|
||||
bone_N = brkN "عظم" "فَعلة" "فِعال" Fem NoHum;
|
||||
blood_N = brkN "دم" "فَع" "فِعَاء" Masc NoHum;
|
||||
bone_N = brkN "عظم" "فَعلة" "فِعَال" Fem NoHum;
|
||||
breast_N = brkN "صدر" "فَعل" "فُعُول" Masc NoHum;
|
||||
cloud_N = brkN "غيم" "فَعلة" "فُعُول" Fem NoHum;
|
||||
day_N = brkN "يوم" "فَعل" "أَفّاع" Masc NoHum;
|
||||
dust_N = brkN "غبر" "فُعال" "أَفعِلة" Masc NoHum;
|
||||
ear_N = brkN "؟ذن" "فُعل" "أَفعال" Fem NoHum;
|
||||
day_N = brkN "يوم" "فَعل" "أَفَّاع" Masc NoHum;
|
||||
dust_N = brkN "غبر" "فُعَال" "أَفعِلة" Masc NoHum;
|
||||
ear_N = brkN "ءذن" "فُعل" "أَفعَال" Fem NoHum;
|
||||
earth_N = brkN "ترب" "فُعلة" "فُعَل" Fem NoHum;
|
||||
egg_N = sdfN "بيض" "فَعلة" Fem NoHum;
|
||||
eye_N = brkN "عين" "فَعل" "فُعُول" Fem NoHum;
|
||||
fat_N = brkN "دهن" "فُعل" "فُعُول" Masc NoHum ;
|
||||
feather_N = sdfN "ريش" "فِعلة" Fem NoHum;
|
||||
fingernail_N = brkN "ظفر" "فُعل" "أَفاعِل" Masc NoHum;
|
||||
fire_N = brkN "نور" "فاع" "فِيعان" Fem NoHum;
|
||||
fire_N = brkN "نور" "فاع" "فِيعَان" Fem NoHum;
|
||||
flower_N = brkN "زهر" "فَعلة" "فُعُول" Fem NoHum;
|
||||
fog_N = brkN "ضبّ" "فَعال" "فَعال" Masc NoHum; --no plural ?
|
||||
foot_N = brkN "قدم" "فَعَل" "أَفعال" Fem NoHum;
|
||||
fog_N = brkN "ضبب" "فَعَال" "فَعَال" Masc NoHum; --no plural ?
|
||||
foot_N = brkN "قدم" "فَعَل" "أَفعَال" Fem NoHum;
|
||||
forest_N = sdfN "غيب" "فاعة" Fem NoHum;
|
||||
grass_N = brkN "عشب" "فُعلة" "أَفعال" Fem NoHum;
|
||||
guts_N = brkN "حشو" "فَعا" "أَفعاء" Fem NoHum;
|
||||
grass_N = brkN "عشب" "فُعلة" "أَفعَال" Fem NoHum;
|
||||
guts_N = brkN "حشو" "فَعَا" "أَفعَاء" Fem NoHum;
|
||||
hair_N = sdfN "شعر" "فَعلة" Fem NoHum ;
|
||||
hand_N = brkN "يد" "فَع" "أَفاعِي" Fem NoHum ;
|
||||
head_N = brkN "ر؟س" "فَعل" "فُعُول" Masc NoHum;
|
||||
heart_N = brkN "قلب" "فَعل" "فُعُول" Masc NoHum;
|
||||
hand_N = brkN "يد" "فَع" "أَفَاعِي" Fem NoHum ;
|
||||
head_N = brkN "رءس" "فَعل" "فُعُول" Masc NoHum;
|
||||
heart_N = brkN "قلب" "فَعْل" "فُعُول" Masc NoHum;
|
||||
horn_N = brkN "قرن" "فَعل" "فُعُول" Masc NoHum;
|
||||
husband_N = brkN "زوج" "فَعل" "أَفعال" Masc NoHum;
|
||||
husband_N = brkN "زوج" "فَعل" "أَفعَال" Masc NoHum;
|
||||
ice_N = brkN "ثلج" "فَعل" "فُعُول" Masc NoHum;
|
||||
knee_N = brkN "ركب" "فُعلة" "فُعَل" Fem NoHum;
|
||||
leaf_N = brkN "ورق" "فَعَلة" "أَفعال" Fem NoHum;
|
||||
leaf_N = brkN "ورق" "فَعَلة" "أَفعَال" Fem NoHum;
|
||||
leg_N = brkN "رجل" "فِعل" "أَفعُل" Fem NoHum;
|
||||
liver_N = brkN "كبد" "فَعِل" "أَفعال" Masc NoHum ;
|
||||
liver_N = brkN "كبد" "فَعِل" "أَفعَال" Masc NoHum ;
|
||||
louse_N = sdfN "قمل" "فَعلة" Fem NoHum;
|
||||
mouth_N = brkN "فوه" "فُعل" "أَفعال" Masc NoHum ;
|
||||
name_N = brkN "؟سم" "فِعل" "فَعالِي" Masc NoHum;
|
||||
neck_N = brkN "رقب" "فَعَلة" "فِعال" Fem NoHum;
|
||||
night_N = brkN "ليل" "فَعلة" "فَعالِي" Fem NoHum; --plural?
|
||||
nose_N = brkN "؟نف" "فَعل" "فُعُول" Masc NoHum;
|
||||
person_N = brkN "شخص" "فَعل" "أَفعال" Masc Hum;
|
||||
mouth_N = brkN "فوه" "فُعل" "أَفعَال" Masc NoHum ;
|
||||
name_N = brkN "ءسم" "فِعل" "فَعَالِي" Masc NoHum;
|
||||
neck_N = brkN "رقب" "فَعَلة" "فِعَال" Fem NoHum;
|
||||
night_N = brkN "ليل" "فَعلة" "فَعَالِي" Fem NoHum; --plural?
|
||||
nose_N = brkN "ءنف" "فَعل" "فُعُول" Masc NoHum;
|
||||
person_N = brkN "شخص" "فَعل" "أَفعَال" Masc Hum;
|
||||
question_N = mkN "سؤال" ; ----IL
|
||||
rain_N = brkN "مطر" "فَعَل" "أَفعال" Masc NoHum;
|
||||
rain_N = brkN "مطر" "فَعَل" "أَفعَال" Masc NoHum;
|
||||
road_N = brkN "طرق" "فَعِيل" "فُعُل" Fem NoHum;
|
||||
root_N = brkN "جذر" "فَعل" "فُعُول" Masc NoHum ;
|
||||
rope_N = brkN "حبل" "فَعل" "فِعال" Masc NoHum;
|
||||
salt_N = brkN "ملح" "فِعل" "أَفعال" Masc NoHum;
|
||||
sand_N = brkN "رمل" "فَعل" "فِعال" Masc NoHum;
|
||||
rope_N = brkN "حبل" "فَعل" "فِعَال" Masc NoHum;
|
||||
salt_N = brkN "ملح" "فِعل" "أَفعَال" Masc NoHum;
|
||||
sand_N = brkN "رمل" "فَعل" "فِعَال" Masc NoHum;
|
||||
seed_N = brkN "بذر" "فَعل" "فُعُول" Masc NoHum;
|
||||
skin_N = brkN "جلد" "فِعل" "فُعُول" Masc NoHum;
|
||||
sky_N = sdfN "سمو" "فَعاء" Fem NoHum;
|
||||
smoke_N = brkN "دخن" "فُعال" "أَفعِلة" Masc NoHum;
|
||||
sky_N = sdfN "سمو" "فَعَاء" Fem NoHum;
|
||||
smoke_N = brkN "دخن" "فُعَال" "أَفعِلة" Masc NoHum;
|
||||
snow_N = brkN "ثلج" "فَعل" "فُعُول" Masc NoHum;
|
||||
stick_N = brkN "عصو" "فَعا" "فِعِي" Masc NoHum ; --"عصو"
|
||||
tail_N = brkN "ذنب" "فَعَل" "أَفعال" Masc NoHum;
|
||||
tongue_N = brkN "لسن" "فِعال" "أَفعِلة" Masc NoHum;
|
||||
tooth_N = brkN "سنّ" "فِعل" "أَفعال" Masc NoHum ;
|
||||
stick_N = brkN "عصو" "فَعَا" "فِعِي" Masc NoHum ; --"عصو"
|
||||
tail_N = brkN "ذنب" "فَعَل" "أَفعَال" Masc NoHum;
|
||||
tongue_N = brkN "لسن" "فِعَال" "أَفعِلة" Masc NoHum;
|
||||
tooth_N = brkN "سنن" "فِعّ" "أَفعَال" Masc NoHum ;
|
||||
wife_N = sdfN "زوج" "فَعلة" Fem Hum;
|
||||
wind_N = brkN "ريح" "فِعل" "فِعال" Fem NoHum;
|
||||
wing_N = brkN "جنح" "فَعال" "أَفعِلة" Masc NoHum ;
|
||||
worm_N = brkN "دود" "فُعلة" "فِيعان" Fem NoHum ;
|
||||
wind_N = brkN "ريح" "فِعل" "فِعَال" Fem NoHum;
|
||||
wing_N = brkN "جنح" "فَعَال" "أَفعِلة" Masc NoHum ;
|
||||
worm_N = brkN "دود" "فُعلة" "فِيعَان" Fem NoHum ;
|
||||
year_N = mkN "سَنَة" "سَنَوَات" Fem NoHum ;
|
||||
|
||||
blow_V = regV "يَنفُخ" ;
|
||||
@@ -355,7 +355,7 @@ flags
|
||||
swim_V = regV "يَسبَح" ;
|
||||
think_V = v2 "فكر" ;
|
||||
turn_V = regV "يَبرُم" ;
|
||||
vomit_V = v5 "قي؟" ;
|
||||
vomit_V = v5 "قيء" ;
|
||||
|
||||
bite_V2 = dirV2 ( v1 "عضّ" a a ) ;
|
||||
count_V2 = dirV2 (v1 "عدّ" a u) ;
|
||||
@@ -378,7 +378,5 @@ flags
|
||||
tie_V2 = dirV2 (regV "يَربُط" ) ;
|
||||
wash_V2 = dirV2 ( regV "يَغسِل" ) ;
|
||||
wipe_V2 = dirV2 ( regV "يَمسَح" ) ;
|
||||
|
||||
-- other_A = sndA "ْتهر" ;
|
||||
|
||||
} ;
|
||||
|
||||
@@ -3,43 +3,21 @@ resource MissingAra = open GrammarAra, Prelude in {
|
||||
-- temporary definitions to enable the compilation of RGL API
|
||||
oper AdAdv : AdA -> Adv -> Adv = notYet "AdAdv" ;
|
||||
oper AdVVP : AdV -> VP -> VP = notYet "AdVVP" ;
|
||||
oper AdjOrd : Ord -> AP = notYet "AdjOrd" ;
|
||||
oper AdnCAdv : CAdv -> AdN = notYet "AdnCAdv" ;
|
||||
oper AdvCN : CN -> Adv -> CN = notYet "AdvCN" ;
|
||||
oper AdvIAdv : IAdv -> Adv -> IAdv = notYet "AdvIAdv" ;
|
||||
oper AdvS : Adv -> S -> S = notYet "AdvS" ;
|
||||
oper BaseAP : AP -> AP -> ListAP = notYet "BaseAP" ;
|
||||
oper BaseAdv : Adv -> Adv -> ListAdv = notYet "BaseAdv" ;
|
||||
oper BaseNP : NP -> NP -> ListNP = notYet "BaseNP" ;
|
||||
oper BaseRS : RS -> RS -> ListRS = notYet "BaseRS" ;
|
||||
oper BaseS : S -> S -> ListS = notYet "BaseS" ;
|
||||
oper CAdvAP : CAdv -> AP -> NP -> AP = notYet "CAdvAP" ;
|
||||
oper CleftAdv : Adv -> S -> Cl = notYet "CleftAdv" ;
|
||||
oper CleftNP : NP -> RS -> Cl = notYet "CleftNP" ;
|
||||
oper ComparAdvAdj : CAdv -> A -> NP -> Adv = notYet "ComparAdvAdj" ;
|
||||
oper ComparAdvAdjS : CAdv -> A -> S -> Adv = notYet "ComparAdvAdjS" ;
|
||||
oper ComplVA : VA -> AP -> VP = notYet "ComplVA" ;
|
||||
oper ComplVQ : VQ -> QS -> VP = notYet "ComplVQ" ;
|
||||
oper ComplVS : VS -> S -> VP = notYet "ComplVS" ;
|
||||
oper ConjAP : Conj -> ListAP -> AP = notYet "ConjAP" ;
|
||||
oper ConjAdv : Conj -> ListAdv -> Adv = notYet "ConjAdv" ;
|
||||
oper ConjNP : Conj -> ListNP -> NP = notYet "ConjNP" ;
|
||||
oper ConjRS : Conj -> ListRS -> RS = notYet "ConjRS" ;
|
||||
oper ConjS : Conj -> ListS -> S = notYet "ConjS" ;
|
||||
oper ConsAP : AP -> ListAP -> ListAP = notYet "ConsAP" ;
|
||||
oper ConsAdv : Adv -> ListAdv -> ListAdv = notYet "ConsAdv" ;
|
||||
oper ConsNP : NP -> ListNP -> ListNP = notYet "ConsNP" ;
|
||||
oper ConsRS : RS -> ListRS -> ListRS = notYet "ConsRS" ;
|
||||
oper ConsS : S -> ListS -> ListS = notYet "ConsS" ;
|
||||
oper DetNP : Det -> NP = notYet "DetNP" ;
|
||||
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 IdRP : RP = notYet "IdRP" ;
|
||||
oper ImpPl1 : VP -> Utt = notYet "ImpPl1" ;
|
||||
oper ImpersCl : VP -> Cl = notYet "ImpersCl" ;
|
||||
oper PConjConj : Conj -> PConj = notYet "PConjConj" ;
|
||||
@@ -48,25 +26,15 @@ oper PredSCVP : SC -> VP -> Cl = notYet "PredSCVP" ;
|
||||
oper ProgrVP : VP -> VP = notYet "ProgrVP" ;
|
||||
oper ReflA2 : A2 -> AP = notYet "ReflA2" ;
|
||||
oper ReflVP : VPSlash -> VP = notYet "ReflVP" ;
|
||||
oper RelCN : CN -> RS -> CN = notYet "RelCN" ;
|
||||
oper RelCl : Cl -> RCl = notYet "RelCl" ;
|
||||
oper RelNP : NP -> RS -> NP = notYet "RelNP" ;
|
||||
oper RelSlash : RP -> ClSlash -> RCl = notYet "RelSlash" ;
|
||||
oper RelVP : RP -> VP -> RCl = notYet "RelVP" ;
|
||||
oper SentAP : AP -> SC -> AP = notYet "SentAP" ;
|
||||
oper SentCN : CN -> SC -> CN = notYet "SentCN" ;
|
||||
oper SlashPrep : Cl -> Prep -> ClSlash = notYet "SlashPrep" ;
|
||||
oper Slash2V3 : V3 -> NP -> VPSlash = notYet "Slash2V3" ;
|
||||
oper SlashV2A : V2A -> AP -> VPSlash = notYet "SlashV2A" ;
|
||||
oper SlashV2Q : V2Q -> QS -> VPSlash = notYet "SlashV2Q" ;
|
||||
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 SubjS : Subj -> S -> Adv = notYet "SubjS" ;
|
||||
oper UseA2 : A2 -> AP = notYet "UseA2" ;
|
||||
oper UseComparA : A -> AP = notYet "UseComparA" ;
|
||||
oper UseRCl : Temp -> Pol -> RCl -> RS = notYet "UseRCl" ;
|
||||
oper UseSlash : Temp -> Pol -> ClSlash -> SSlash = notYet "UseSlash" ;
|
||||
oper VocNP : NP -> Voc = notYet "VocNP" ;
|
||||
oper pot3plus : Sub1000 -> Sub1000 -> Sub1000000 = notYet "pot3plus" ;
|
||||
|
||||
|
||||
@@ -7,9 +7,10 @@ flags optimize = all ;--noexpand;
|
||||
|
||||
mkDet : Str -> Number -> State -> Det
|
||||
= \word,num,state ->
|
||||
{ s = \\_,_,c => word + vowel ! c ;
|
||||
{ s = \\_,_,c => word + caseTbl ! c ;
|
||||
n = numberToSize num;
|
||||
d = state; --only Const is used now. check StructuralAra
|
||||
is1sg = False;
|
||||
isNum = False;
|
||||
isPron = False
|
||||
};
|
||||
@@ -18,7 +19,7 @@ flags optimize = all ;--noexpand;
|
||||
= \word,decl ->
|
||||
{ s = \\c =>
|
||||
case decl of {
|
||||
True => word + vowel!c;
|
||||
True => word + caseTbl!c;
|
||||
False => word
|
||||
};
|
||||
isDecl = decl
|
||||
@@ -33,18 +34,11 @@ flags optimize = all ;--noexpand;
|
||||
case g of {
|
||||
Masc => waHid;
|
||||
Fem => waHida
|
||||
} in defArt state waHid + word + dec1sg ! state ! c;
|
||||
} in defArt state c waHid + word + dec1sg ! state ! c;
|
||||
n = num;
|
||||
d = state;
|
||||
isPron = False;
|
||||
isNum = True
|
||||
};
|
||||
|
||||
vowel : Case => Str =
|
||||
table {
|
||||
Nom => "ُ";
|
||||
Acc => "َ";
|
||||
Gen => "ِ"
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -5,145 +5,141 @@ flags optimize=noexpand ;
|
||||
lin
|
||||
|
||||
DetCN det cn = let {
|
||||
number = sizeToNumber det.n;
|
||||
cas : Case -> Case = if_then_else Case det.is1sg Bare ;
|
||||
number = case cn.isDual of {
|
||||
True =>
|
||||
case sizeToNumber det.n of {
|
||||
Sg => Sg ;
|
||||
_ => Dl } ;
|
||||
False => sizeToNumber det.n } ;
|
||||
determiner : Case -> Str = \c ->
|
||||
det.s ! cn.h ! (detGender cn.g det.n) ! c;
|
||||
noun : Case -> NTable -> Str = \c,nt -> nt !
|
||||
number ! (nounState det.d number) ! (nounCase c det.n det.d)
|
||||
det.s ! cn.h ! (detGender cn.g det.n) ! c ;
|
||||
noun : Case -> Str = \c ->
|
||||
cn.s ! number
|
||||
! nounState det.d number
|
||||
! nounCase c det.n det.d ;
|
||||
adj : Case -> Str = \c ->
|
||||
cn.s2 ! number
|
||||
! (definite ! det.d) -- Indef remains Indef, rest become Def
|
||||
! c
|
||||
} in {
|
||||
s = \\c =>
|
||||
case cnB4det det.isPron det.isNum det.n det.d of {
|
||||
False => determiner c ++ noun c cn.s ++ noun c cn.adj ;
|
||||
--FIXME use the adj -> cn -> cn rule from below instead of
|
||||
--repeating code
|
||||
True => cn.s ! number ! det.d ! c ++ det.s ! cn.h ! cn.g ! c
|
||||
++ cn.adj ! number ! det.d ! c
|
||||
};
|
||||
False => determiner c
|
||||
++ noun c
|
||||
++ adj c
|
||||
++ cn.np ! c ;
|
||||
True => noun (cas c) -- deal with possessive suffix
|
||||
++ determiner c -- (nounCase c det.n det.d) --??
|
||||
++ adj c
|
||||
++ cn.np ! c
|
||||
};
|
||||
a = { pgn = agrP3 cn.h cn.g number;
|
||||
isPron = False }
|
||||
isPron = False } ;
|
||||
empty = []
|
||||
};
|
||||
|
||||
UsePN pn = {
|
||||
s = pn.s;
|
||||
a = {pgn = (Per3 pn.g Sg); isPron = False }
|
||||
a = {pgn = Per3 pn.g Sg ; isPron = False} ;
|
||||
empty = []
|
||||
};
|
||||
|
||||
UsePron p = p ;
|
||||
|
||||
PredetNP pred np = {
|
||||
DetNP det = emptyNP ** {s = det.s ! NoHum ! Masc} ; ----
|
||||
|
||||
PredetNP pred np = np ** {
|
||||
s = \\c => case pred.isDecl of {
|
||||
True => pred.s!c ++ np.s ! Gen ; -- akvaru l-awlAdi
|
||||
False => pred.s!c ++ np.s ! c
|
||||
};
|
||||
a = np.a
|
||||
} ;
|
||||
a = np.a ** {isPron=False}
|
||||
} ;
|
||||
{-
|
||||
--should compile.. not working :( wierd error message.. bug?
|
||||
|
||||
{-
|
||||
PPartNP np v2 =
|
||||
let x = case np.a.pgn of {
|
||||
Per3 g n => ( positAdj (v2.s ! VPPart) ) ! g ! n ! Indef ;
|
||||
_ => \\_ => [] -- not occuring anyway
|
||||
} in {
|
||||
s = \\c => np.s ! c ++ x ! c ;
|
||||
a = np.a
|
||||
};
|
||||
-}
|
||||
|
||||
-- FIXME try parsing something like "this house now" and you'll get
|
||||
-- an internal compiler error, but it still works.. wierd..
|
||||
AdvNP np adv = {
|
||||
s = \\c => np.s ! c ++ adv.s;
|
||||
a = np.a
|
||||
};
|
||||
{-
|
||||
DetSg quant ord = {
|
||||
s = \\h,g,c =>
|
||||
quant.s ! Sg ! h ! g ! c ++ ord.s ! g ! quant.d ! c ;
|
||||
n = One;
|
||||
d = quant.d;
|
||||
isPron = quant.isPron;
|
||||
isNum =
|
||||
case ord.n of {
|
||||
None => False;
|
||||
_ => True
|
||||
}
|
||||
} ;
|
||||
Per3 g n => positAdj (v2.s ! VPPart) ) ! g ! n ! Indef ; -- doesn't work because trying to glue runtime tokens
|
||||
Per2 g n => \\_ => [] ;
|
||||
_ => \\_ => []
|
||||
} in np ** {
|
||||
s = \\c => np.s ! c ++ v2.s ! VPPart ---- TODO: agreement
|
||||
};
|
||||
-}
|
||||
|
||||
DetQuantOrd quant num ord = {
|
||||
s = \\h,g,c => quant.s ! Pl ! h ! g ! c
|
||||
++ num.s ! g ! (toDef quant.d num.n) ! c
|
||||
AdvNP np adv = np ** {
|
||||
s = \\c => np.s ! c ++ adv.s
|
||||
};
|
||||
|
||||
DetQuantOrd quant num ord = quant ** {
|
||||
s = \\h,g,c => let d = toDef quant.d num.n in
|
||||
quant.s ! Pl ! h ! g ! c
|
||||
++ num.s ! g ! d ! c
|
||||
--FIXME check this:
|
||||
++ ord.s ! g ! (toDef quant.d num.n) ! c ;
|
||||
++ ord.s ! g
|
||||
! case d of {Poss => Def ; _ => d}
|
||||
! c ;
|
||||
n = num.n;
|
||||
d = quant.d;
|
||||
isPron = quant.isPron;
|
||||
isNum =
|
||||
case num.n of {
|
||||
None => False;
|
||||
_ => True
|
||||
}
|
||||
isNum = orB num.isNum ord.isNum ;
|
||||
-- ord may come from OrdDigits or OrdNumeral
|
||||
-- num may come from NumCard : Card -> Num
|
||||
|
||||
} ;
|
||||
|
||||
DetQuant quant num = {
|
||||
s = \\h,g,c => quant.s ! Pl ! h ! g ! c
|
||||
DetQuant quant num = quant ** {
|
||||
s = \\h,g,c => quant.s ! sizeToNumber num.n ! h ! g ! c
|
||||
++ num.s ! g ! (toDef quant.d num.n) ! c ;
|
||||
n = num.n;
|
||||
d = quant.d;
|
||||
isPron = quant.isPron;
|
||||
isNum =
|
||||
isNum = -- Num may come from NumCard : Card -> Num
|
||||
case num.n of {
|
||||
None => False;
|
||||
_ => True
|
||||
_ => num.isNum
|
||||
}
|
||||
} ;
|
||||
|
||||
|
||||
--DEPRECATED
|
||||
-- SgQuant quant = {s = quant.s ! Sg ; d = quant.d;
|
||||
-- isPron = quant.isPron; isNum = False} ;
|
||||
-- PlQuant quant = {s = quant.s ! Pl ; d = quant.d;
|
||||
-- isPron = quant.isPron; isNum = False} ;
|
||||
|
||||
PossPron p = {
|
||||
s = \\_,_,_,_ => p.s ! Gen;
|
||||
d = Const;
|
||||
s = \\_,_,_,_ => BIND ++ p.s ! Gen;
|
||||
d = Poss;
|
||||
is1sg = case p.a.pgn of { Per1 Sing => True ; _ => False } ;
|
||||
isPron = True;
|
||||
isNum = False } ;
|
||||
|
||||
NumSg = {
|
||||
s = \\_,_,_ => [] ;
|
||||
n = One } ;
|
||||
n = One ;
|
||||
isNum = False } ;
|
||||
|
||||
NumPl = {
|
||||
s = \\_,_,_ => [] ;
|
||||
n = None } ;
|
||||
n = None ;
|
||||
isNum = False } ;
|
||||
|
||||
NumDigits digits = {
|
||||
s = \\_,_,_ => digits.s;
|
||||
n = digits.n
|
||||
NumDigits digits = digits ** {
|
||||
s = \\_,_,_ => digits.s ;
|
||||
isNum = True
|
||||
};
|
||||
|
||||
NumNumeral numeral = {
|
||||
NumNumeral numeral = numeral ** {
|
||||
s = numeral.s ! NCard ;
|
||||
n = numeral.n
|
||||
isNum = True
|
||||
};
|
||||
|
||||
NumCard n = n ;
|
||||
|
||||
AdNum adn num = {
|
||||
AdNum adn num = num ** {
|
||||
s = \\g,d,c => adn.s ++ num.s ! g ! d ! c ;
|
||||
n = num.n } ;
|
||||
} ;
|
||||
|
||||
OrdDigits digits = {
|
||||
OrdDigits digits = digits ** {
|
||||
s = \\_,d,_ => Al ! d ++ digits.s;
|
||||
n = digits.n
|
||||
isNum = True
|
||||
};
|
||||
|
||||
-- OrdNumeral : Numeral -> Ord ; -- fifty-first
|
||||
OrdNumeral numeral = {
|
||||
OrdNumeral numeral = numeral ** {
|
||||
s = numeral.s ! NOrd ;
|
||||
n = numeral.n
|
||||
isNum = True
|
||||
};
|
||||
|
||||
-- FIXME, "the biggest house" would better translate into
|
||||
@@ -151,48 +147,58 @@ lin
|
||||
-- DetCN (DetSg DefArt (OrdSuperl big_A)) (UseN house_N)
|
||||
OrdSuperl a = {
|
||||
s = \\_,d,c => a.s ! AComp d c;
|
||||
n = One
|
||||
n = One ;
|
||||
isNum = False
|
||||
} ;
|
||||
|
||||
DefArt = {
|
||||
s = \\_,_,_,_ => [];
|
||||
d = Def ;
|
||||
isNum,isPron = False
|
||||
isNum,isPron,is1sg = False
|
||||
} ;
|
||||
|
||||
IndefArt = {
|
||||
s = \\_,_,_,_ => [];
|
||||
d = Indef ;
|
||||
isNum,isPron = False
|
||||
isNum,isPron,is1sg = False
|
||||
} ;
|
||||
|
||||
MassNP cn = ---- AR
|
||||
{s = cn.s ! Sg ! Indef ; a = {pgn = Per3 cn.g Sg ; isPron = False}} ;
|
||||
MassNP cn =
|
||||
{s = \\c => cn2str cn Sg Indef c ;
|
||||
a = {pgn = Per3 cn.g Sg ; isPron = False} ;
|
||||
empty = []} ;
|
||||
|
||||
-- MassDet = {s = \\_,_,_,_ => [] ; d = Indef;
|
||||
-- isNum = False; isPron = False} ;
|
||||
|
||||
UseN,
|
||||
UseN2 = \n -> n ** {adj = \\_,_,_ => []};
|
||||
UseN2 = useN ;
|
||||
Use2N3 n3 = n3 ;
|
||||
Use3N3 n3 = n3 ** {c2 = n3.c3} ;
|
||||
|
||||
ComplN2 n2 np = UseN n2 ** --- IL
|
||||
{s = \\n,s,c => n2.s ! n ! s ! c ++ n2.c2 ++ np.s ! Gen} ;
|
||||
|
||||
ComplN2 n2 np = UseN n2 ** {np = \\c => n2.c2.s ++ np.s ! n2.c2.c} ;
|
||||
|
||||
ComplN3 n3 np = ComplN2 n3 np ** {c2 = n3.c3} ;
|
||||
|
||||
AdjCN ap cn = {
|
||||
s = \\n,d,c => cn.s ! n ! d ! c;
|
||||
adj = \\n,d,c => ap.s ! cn.h ! cn.g ! n ! (definite ! d) ! c ;
|
||||
g = cn.g;
|
||||
h = cn.h
|
||||
AdjCN ap cn = cn ** {
|
||||
s2 = \\n,d,c => cn.s2 ! n ! d ! c ++ ap.s ! cn.h ! cn.g ! n ! (definite ! d) ! c
|
||||
};
|
||||
-- RelCN cn rs = {s = \\n,c => cn.s ! n ! c ++ rs.s ! {n = n ; p = P3}} ;
|
||||
-- AdvCN cn ad = {s = \\n,c => cn.s ! n ! c ++ ad.s} ;
|
||||
--
|
||||
-- SentCN cn sc = {s = \\n,c => cn.s ! n ! c ++ sc.s} ;
|
||||
ApposCN cn np = cn ** {
|
||||
s = \\n,d,c => cn.s ! n ! d ! c ++ np.s ! c } ;
|
||||
|
||||
RelCN cn rs = cn ** {
|
||||
s2 = \\n,s,c => cn.s2 ! n ! s ! c ++ rs.s ! {pgn=Per3 cn.g n ; isPron=False} ! c};
|
||||
|
||||
RelNP np rs = np ** {s = \\c => np.s ! c ++ rs.s ! np.a ! c} ;
|
||||
|
||||
AdvCN,
|
||||
SentCN = \cn,ss -> cn ** {s2 = \\n,d,c => cn.s2 ! n ! d ! c ++ ss.s} ;
|
||||
|
||||
ApposCN cn np = cn ** { np = \\c => cn.np ! c ++ np.s ! c } ;
|
||||
|
||||
-- : CN -> NP -> CN ; -- house of Paris, house of mine
|
||||
PossNP cn np = cn ** {
|
||||
s = \\n,_d,c => cn.s ! n ! Const ! c ;
|
||||
s2 = \\n,_d,c => cn.s2 ! n ! Const ! Gen ; -- unsure about this /IL
|
||||
np = \\c => cn.np ! c ++ np.s ! Gen
|
||||
};
|
||||
|
||||
-- : CN -> NP -> CN ; -- glass of wine
|
||||
--PartNP
|
||||
}
|
||||
|
||||
@@ -2,40 +2,76 @@ resource OrthoAra = open Prelude, Predef in {
|
||||
|
||||
flags coding=utf8 ;
|
||||
|
||||
oper
|
||||
oper
|
||||
|
||||
rectifyHmz: Str -> Str = \word ->
|
||||
case word of {
|
||||
l@(""|"ال") + "؟" + v@("َ"|"ُ") + tail => l + "أ" + v + tail;
|
||||
l@(""|"ال") + "؟" + v@("ِ") + tail => l + "إ" + v + tail;
|
||||
head + v1@("ِ"|"ُ"|"َ"|"ْ"|"ا"|"ي"|"و") + "؟" + v2@(""|"ُ"|"َ"|"ْ"|"ِ") => head + v1 + (tHmz v1) + v2;
|
||||
head + "؟" + tail => head + (bHmz (dp 2 head) (take 2 tail)) + tail; --last head , take 1 tail
|
||||
_ => word
|
||||
};
|
||||
vow : pattern Str = #("َ" | "ِ" | "ُ" | "ً" | "ٍ" | "ٌ") ;
|
||||
|
||||
--hamza at beginning of word (head)
|
||||
hHmz : Str -> Str = \d ->
|
||||
case d of {
|
||||
"ِ" => "إ";
|
||||
_ => "أ"
|
||||
};
|
||||
weak : pattern Str = #("و"|"ي") ;
|
||||
|
||||
--hamza in middle of word (body)
|
||||
bHmz : Str -> Str -> Str = \d1,d2 ->
|
||||
case <d1,d2> of {
|
||||
<"ِ",_> | <_,"ِ"> => "ئ";
|
||||
<"ُ",_> | <_,"ُ"> => "ؤ";
|
||||
<"َ",_> | <_,"َ"> => "أ";
|
||||
_ => "ء"
|
||||
};
|
||||
-- "Sun letters": assimilate with def. article
|
||||
sun : pattern Str = #("ت"|"ث"|"د"|"ذ"|"ر"|"ز"|"س"|"ش"|"ص"|"ض"|"ط"|"ظ"|"ل"|"ن") ;
|
||||
|
||||
--hamza carrier sequence
|
||||
tHmz : Str -> Str = \d ->
|
||||
case d of {
|
||||
"ِ" => "ئ";
|
||||
"ُ" => "ؤ";
|
||||
"َ" => "أ";
|
||||
"ْ"|"ا"|"و"|"ي" => "ء"
|
||||
};
|
||||
-- Shadda: https://www.unicode.org/L2/L2017/17253-arabic-ordering.pdf
|
||||
fixShd : Str -> Str -> Str = \word,suffix ->
|
||||
case <word,suffix> of {
|
||||
-- <x + "ّ", v@#vow + y> => x + v + "ّ" + y ;
|
||||
<x + v@#vow, "ّ" + y> => x + "ّ" + v + y ;
|
||||
_ => word + suffix
|
||||
} ;
|
||||
|
||||
-- IL: using this to reuse patterns for weak verbs, might be strange/wrong
|
||||
rmSukun : Str -> Str = \s -> case s of {
|
||||
x + "ْ" + y => x + y ;
|
||||
_ => s
|
||||
} ;
|
||||
|
||||
-- Hamza
|
||||
hamza : pattern Str = #("ء"|"؟") ;
|
||||
|
||||
rectifyHmz : Str -> Str = \word ->
|
||||
case word of {
|
||||
l@(""|"ال") + ("أ"|"أَ") + #hamza + "ْ" + tail => l + "آ" + tail;
|
||||
l@(""|"ال") + ("أ"|"أَ") + #hamza + tail => l + "آ" + tail;
|
||||
l@(""|"ال") + #hamza + v@("َ"|"ُ") + tail => l + "أ" + v + tail;
|
||||
l@(""|"ال") + #hamza + v@("ِ") + tail => l + "إ" + v + tail;
|
||||
head + v1@(#vow|"ْ"|"ا"|"ي"|"و")
|
||||
+ #hamza + v2@(#vow|"ْ") + tail =>
|
||||
case v2 of { "ْ" => head + v1 + bHmz v1 v2 + tail ; -- unsure about this /IL
|
||||
_ => head + v1 + bHmz v1 v2 + v2 + tail } ;
|
||||
head + v1@(#vow|"ْ"|"ا"|"ي"|"و") -- the same but it ends in vowel
|
||||
+ #hamza + v2@(#vow|"ْ") =>
|
||||
case v2 of { "ْ" => head + v1 + tHmz v1 ;
|
||||
_ => head + v1 + tHmz v1 + v2 } ;
|
||||
head + v1@(#vow|"ْ"|"ا"|"ي"|"و") -- the same but it ends without vowel
|
||||
+ #hamza => head + v1 + tHmz v1 ;
|
||||
|
||||
head + #hamza + tail => head + (bHmz (dp 2 head) (take 2 tail)) + tail; --last head , take 1 tail
|
||||
_ => word
|
||||
};
|
||||
|
||||
--hamza at beginning of word (head)
|
||||
hHmz : Str -> Str = \d ->
|
||||
case d of {
|
||||
"ِ" => "إ";
|
||||
_ => "أ"
|
||||
};
|
||||
|
||||
--hamza in middle of word (body)
|
||||
bHmz : Str -> Str -> Str = \d1,d2 ->
|
||||
case <d1,d2> of {
|
||||
<"ِ",_> | <_,"ِ"> => "ئ";
|
||||
<"ُ",_> | <_,"ُ"> => "ؤ";
|
||||
<"َ",_> | <_,"َ"> => "أ";
|
||||
_ => "ء"
|
||||
};
|
||||
|
||||
--hamza carrier sequence
|
||||
tHmz : Str -> Str = \d ->
|
||||
case d of {
|
||||
"ِ" => "ئ";
|
||||
"ُ" => "ؤ";
|
||||
"َ" => "أ";
|
||||
"ْ"|"ا"|"و"|"ي" => "ء"
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -35,31 +35,54 @@ resource ParadigmsAra = open
|
||||
|
||||
oper
|
||||
|
||||
-- Prepositions are used in many-argument functions for rection.
|
||||
Case : Type ;
|
||||
nom : Case ;
|
||||
acc : Case ;
|
||||
gen : Case ;
|
||||
|
||||
-- Prepositions are used in many-argument functions for rection.
|
||||
Preposition : Type ;
|
||||
noPrep : Preposition ;
|
||||
casePrep : Case -> Preposition ;
|
||||
--- TODO: continue, add all over the grammar
|
||||
|
||||
Gender : Type ;
|
||||
masc : Gender ;
|
||||
fem : Gender ;
|
||||
|
||||
Number : Type ;
|
||||
sg : Number ;
|
||||
pl : Number ;
|
||||
|
||||
Species : Type ;
|
||||
hum : Species ;
|
||||
nohum : Species ;
|
||||
|
||||
Vowel : Type ;
|
||||
va : Vowel ;
|
||||
vi : Vowel ;
|
||||
vu : Vowel ;
|
||||
|
||||
--2 Nouns
|
||||
|
||||
-- Overloaded operator for main cases
|
||||
|
||||
mkN = overload {
|
||||
mkN : (sg : Str) -> N -- non-human regular nouns
|
||||
= smartN ;
|
||||
mkN : Species -> N -> N
|
||||
= \p,n -> n ** {h = p} ;
|
||||
mkN : (sg,pl : Str) -> Gender -> Species -> N
|
||||
= \sg,pl -> mkFullN (reg sg pl) ;
|
||||
mkN : NTable -> Gender -> Species -> N -- loan words, irregular
|
||||
= mkFullN ;
|
||||
mkN : (root,sgPatt,brokenPlPatt : Str) -> Gender -> Species -> N -- broken plural
|
||||
= brkN ;
|
||||
mkN : N -> (attr : Str) -> N -- Compound nouns
|
||||
= \n,attr -> n ** { s = \\num,s,c => n.s ! num ! s ! c ++ attr } ; --- IL (TODO: all kinds of compounds)
|
||||
|
||||
mkN : overload {
|
||||
mkN : (sg : Str) -> N ; -- non-human regular nouns
|
||||
mkN : Species -> N -> N ;
|
||||
mkN : (sg,pl : Str) -> Gender -> Species -> N ;
|
||||
mkN : NTable -> Gender -> Species -> N ; -- loan words, irregular
|
||||
mkN : (root,sgPatt,brokenPlPatt : Str) -> Gender -> Species -> N ; -- broken plural
|
||||
mkN : N -> (attr : Str) -> N ; -- Compound noun with invariant attribute
|
||||
mkN : N -> N -> N ; -- Compound noun where attribute inflects in state and case. Attribute in singular.
|
||||
mkN : Number -> N -> N -> N ; -- Compound noun where attribute inflects in state and case. Attribute's number specified by 1st arg.
|
||||
--- mkN : (root,sgPatt : Str) -> Gender -> Species -> N -- sound feminine plural
|
||||
--- = sdfN ;
|
||||
} ;
|
||||
|
||||
dualN : N -> N ; -- Force the plural of the N into dual (e.g. "twins")
|
||||
|
||||
--This is used for loan words or anything that has untreated irregularities
|
||||
--in the interdigitization process of its words
|
||||
mkFullN : NTable -> Gender -> Species -> N ;
|
||||
@@ -82,6 +105,8 @@ resource ParadigmsAra = open
|
||||
mkPN = overload {
|
||||
mkPN : Str -> PN -- Fem Hum if ends with ة, otherwise Masc Hum
|
||||
= smartPN ;
|
||||
mkPN : N -> PN
|
||||
= \n -> lin PN (n ** {s = \\c => n.s ! Sg ! Const ! c ++ n.s2 ! Sg ! Const ! c }) ; -- no idea /IL
|
||||
mkPN : Str -> Gender -> Species -> PN
|
||||
= mkFullPN ;
|
||||
} ;
|
||||
@@ -92,13 +117,17 @@ resource ParadigmsAra = open
|
||||
|
||||
--3 Relational nouns
|
||||
|
||||
mkN2 = overload {
|
||||
mkN2 : N -> Preposition -> N2 = prepN2 ;
|
||||
mkN2 : N -> N2 = \n -> lin N2 (n ** {c2 = []}) ;
|
||||
mkN2 : Str -> N2 = \str -> lin N2 (smartN str ** {c2 = []})
|
||||
mkN2 : overload {
|
||||
mkN2 : N -> Preposition -> N2 ; -- ready-made preposition
|
||||
mkN2 : N -> Str -> N2 ; -- preposition given as a string
|
||||
mkN2 : N -> N2 ; -- no preposition
|
||||
mkN2 : Str -> N2 ; -- no preposition, predictable inflection
|
||||
} ;
|
||||
|
||||
mkN3 : N -> Preposition -> Preposition -> N3 ;
|
||||
mkN3 : overload {
|
||||
mkN3 : N -> Preposition -> Preposition -> N3 ; -- ready-made prepositions
|
||||
mkN3 : N -> Str -> Str -> N3 ; -- prepositions given as strings
|
||||
} ;
|
||||
|
||||
|
||||
--2 Adjectives
|
||||
@@ -106,26 +135,32 @@ resource ParadigmsAra = open
|
||||
-- Overloaded operator for main cases
|
||||
|
||||
mkA = overload {
|
||||
mkA : (root,patt : Str) -> A
|
||||
= sndA ;
|
||||
mkA : (root : Str) -> A -- forms adjectives with positive form aFCal
|
||||
= clrA ;
|
||||
mkA : (posit,compar,plur : Str) -> A
|
||||
= degrA ;
|
||||
mkA : (root,sg : Str) -> A -- adjective with sound plural; takes root string and sg. pattern string
|
||||
= \r,p -> lin A (sndA r p);
|
||||
mkA : (root : Str) -> A -- adjective with positive form aFCal
|
||||
= \r -> lin A (clrA r);
|
||||
mkA : (root,sg,pl : Str) -> A -- adjective with broken plural
|
||||
= \r,s,p -> lin A (brkA r s p) ;
|
||||
} ;
|
||||
|
||||
degrA : (posit,compar,plur : Str) -> A ;
|
||||
|
||||
--Takes a root string and a pattern string
|
||||
sndA : (root,patt : Str) -> A ;
|
||||
sndA : (root,patt : Str) -> Adj ;
|
||||
|
||||
--Takes a root string only
|
||||
clrA : (root : Str) -> A ; -- forms adjectives of type aFCal
|
||||
clrA : (root : Str) -> Adj ; -- forms adjectives of type aFCal
|
||||
|
||||
nisbaA : Str -> Adj ; -- forms relative adjectives by adding the suffix ِيّ
|
||||
|
||||
--3 Two-place adjectives
|
||||
--
|
||||
-- Two-place adjectives need a preposition for their second argument.
|
||||
|
||||
mkA2 : A -> Preposition -> A2 ;
|
||||
mkA2 : overload {
|
||||
mkA2 : A -> Preposition -> A2 ;
|
||||
mkA2 : A -> Str -> A2
|
||||
} ;
|
||||
|
||||
--2 Adverbs
|
||||
|
||||
@@ -139,75 +174,65 @@ resource ParadigmsAra = open
|
||||
|
||||
mkAdA : Str -> AdA ;
|
||||
|
||||
mkInterj : Str -> Interj ;
|
||||
|
||||
mkSubj : overload {
|
||||
mkSubj : Str -> Subj ; -- Default order Subord (=noun first and in accusative)
|
||||
mkSubj : Str -> Order -> Subj -- Specify word order
|
||||
} ;
|
||||
|
||||
--2 Prepositions
|
||||
--
|
||||
-- A preposition as used for rection in the lexicon, as well as to
|
||||
-- build $PP$s in the resource API, just requires a string.
|
||||
|
||||
mkPrep : Str -> Prep
|
||||
= \s -> lin Prep {s = mkPreposition s} ; -- preposition in the sense of RGL abstract syntax
|
||||
|
||||
mkPreposition : Str -> Preposition ; -- just a string, for internal use
|
||||
|
||||
-- build $PP$s in the resource API. Requires a string and a case.
|
||||
|
||||
mkPrep : overload {
|
||||
mkPrep : Str -> Prep ;
|
||||
mkPrep : Str -> Case -> Prep
|
||||
} ; -- preposition in the sense of RGL abstract syntax
|
||||
--2 Verbs
|
||||
|
||||
-- Overloaded operations
|
||||
|
||||
mkV = overload {
|
||||
mkV : (imperfect : Str) -> V
|
||||
= regV ;
|
||||
mkV : (root : Str) -> (perf,impf : Vowel) -> V -- verb form I ; vowel = a|i|u
|
||||
= v1 ;
|
||||
mkV : (root : Str) -> VerbForm -> V -- FormI .. FormX (no VII, IX) ; default vowels a u for I
|
||||
= formV ;
|
||||
mkV : overload {
|
||||
mkV : (imperfect : Str) -> V ; -- The verb in Per3 Sg Masc imperfect tense gives the most information
|
||||
mkV : (root : Str) -> (perf,impf : Vowel) -> V ; -- verb form I ; vowel = a|i|u
|
||||
mkV : (root : Str) -> VerbForm -> V ; -- FormI .. FormX (no VII, IX) ; default vowels a u for I
|
||||
mkV : V -> (particle : Str) -> V -- V with a non-inflecting particle/phrasal verb
|
||||
} ;
|
||||
|
||||
-- The verb in the imperfect tense gives the most information
|
||||
-- regV : Str -> V ;
|
||||
|
||||
regV : Str -> V ;
|
||||
reflV : V -> V ; -- نَفْس in the proper case and with possessive suffix, e.g. نَفْسَكِ
|
||||
|
||||
--Verb Form I : fa`ala, fa`ila, fa`ula
|
||||
v1 : Str -> Vowel -> Vowel -> V ; -- Verb Form I : fa`ala, fa`ila, fa`ula
|
||||
|
||||
v1 : Str -> Vowel -> Vowel -> V ;
|
||||
v2 : Str -> V ; -- Verb Form II : fa``ala
|
||||
|
||||
--Verb Form II : fa``ala
|
||||
v3 : Str -> V ; -- Verb Form III : faa`ala
|
||||
|
||||
v2 : Str -> V ;
|
||||
v4 : Str -> V ; -- Verb Form IV : 'af`ala
|
||||
|
||||
--Verb Form III : faa`ala
|
||||
v5 : Str -> V ; -- Verb Form V : tafa``ala
|
||||
|
||||
v3 : Str -> V ;
|
||||
v6 : Str -> V ; -- Verb Form VI : tafaa`ala
|
||||
|
||||
--Verb Form IV : 'af`ala
|
||||
v7 : Str -> V ; -- Verb Form VII : infa`ala
|
||||
|
||||
v4 : Str -> V ;
|
||||
v8 : Str -> V ; -- Verb Form VIII ifta`ala
|
||||
|
||||
--Verb Form V : tafa``ala
|
||||
|
||||
v5 : Str -> V ;
|
||||
|
||||
--Verb Form VI : tafaa`ala
|
||||
|
||||
v6 : Str -> V ;
|
||||
|
||||
--Verb Form VIII 'ifta`ala
|
||||
|
||||
v8 : Str -> V ;
|
||||
|
||||
-- Verb Form X 'istaf`ala
|
||||
|
||||
v10 : Str -> V ;
|
||||
v10 : Str -> V ; -- Verb Form X 'istaf`ala
|
||||
|
||||
--3 Two-place verbs
|
||||
|
||||
-- Two-place verbs need a preposition, except the special case with direct object.
|
||||
-- (transitive verbs). Notice that a particle comes from the $V$.
|
||||
|
||||
mkV2 = overload {
|
||||
mkV2 : V -> V2 = dirV2 ;
|
||||
mkV2 : V -> Preposition -> V2 = prepV2 ;
|
||||
mkV2 : Str -> V2 = strV2;
|
||||
mkV2 : overload {
|
||||
mkV2 : V -> V2 ; -- No preposition
|
||||
mkV2 : V -> Str -> V2 ; -- Preposition as string, default case genitive
|
||||
mkV2 : V -> Preposition -> V2 ; -- Ready-made preposition
|
||||
mkV2 : Str -> V2 ; -- Predictable verb conjugation, no preposition
|
||||
} ;
|
||||
|
||||
dirV2 : V -> V2 ;
|
||||
@@ -217,9 +242,15 @@ resource ParadigmsAra = open
|
||||
-- Three-place (ditransitive) verbs need two prepositions, of which
|
||||
-- the first one or both can be absent.
|
||||
|
||||
mkV3 : V -> Preposition -> Preposition -> V3 ; -- speak, with, about
|
||||
dirV3 : V -> Preposition -> V3 ; -- give,_,to
|
||||
dirdirV3 : V -> V3 ; -- give,_,_
|
||||
mkV3 : overload {
|
||||
mkV3 : V -> Preposition -> Preposition -> V3 ; -- speak, with, about
|
||||
mkV3 : V -> (to : Str) -> (about:Str) -> V3 -- like above, but with strings as arguments (default complement case genitive)
|
||||
} ;
|
||||
dirV3 : overload {
|
||||
dirV3 : V -> Preposition -> V3 ; -- give,_,to
|
||||
dirV3 : V -> (to : Str) -> V3 -- like above, but with string as argument (default complement case genitive)
|
||||
} ;
|
||||
dirdirV3 : V -> V3 ; -- give,_,_
|
||||
|
||||
--3 Other complement patterns
|
||||
--
|
||||
@@ -231,9 +262,15 @@ resource ParadigmsAra = open
|
||||
mkV2S : V -> Str -> V2S ;
|
||||
mkVV = overload {
|
||||
mkVV : V -> VV = regVV ;
|
||||
mkVV : V -> Str -> VV = c2VV
|
||||
mkVV : V -> Str -> VV = c2VV ;
|
||||
mkVV : V -> Preposition -> VV = prepVV ;
|
||||
mkVV : V -> Preposition -> Preposition -> VV = prep2VV
|
||||
} ;
|
||||
mkV2V : V -> Str -> Str -> V2V ;
|
||||
mkV2V : overload {
|
||||
mkV2V : V -> Str -> Str -> V2V ;
|
||||
mkV2V : V -> Preposition -> Preposition -> V2V ;
|
||||
mkV2V : VV -> Preposition -> V2V
|
||||
} ;
|
||||
mkVA : V -> VA ;
|
||||
mkV2A : V -> Str -> V2A ;
|
||||
mkVQ : V -> VQ ;
|
||||
@@ -258,6 +295,94 @@ resource ParadigmsAra = open
|
||||
|
||||
-- The definitions should not bother the user of the API. So they are
|
||||
-- hidden from the document.
|
||||
Case = ResAra.Case ;
|
||||
nom = ResAra.Nom ;
|
||||
acc = ResAra.Acc ;
|
||||
gen = ResAra.Gen ;
|
||||
|
||||
-- Prepositions are used in many-argument functions for rection.
|
||||
|
||||
Preposition = ResAra.Preposition ;
|
||||
noPrep = {s=[]; c=nom} ;
|
||||
casePrep c = {s=[]; c=c} ;
|
||||
|
||||
Gender = ResAra.Gender ;
|
||||
masc = ResAra.Masc ;
|
||||
fem = ResAra.Fem ;
|
||||
|
||||
Number = ResAra.Number ;
|
||||
sg = ResAra.Sg ;
|
||||
pl = ResAra.Pl ;
|
||||
|
||||
Species = ResAra.Species ;
|
||||
hum = ResAra.Hum ;
|
||||
nohum = ResAra.NoHum ;
|
||||
|
||||
Vowel = ResAra.Vowel ;
|
||||
va = ResAra.a ;
|
||||
vu = ResAra.u ;
|
||||
vi = ResAra.i ;
|
||||
|
||||
mkPrep = overload {
|
||||
mkPrep : Str -> Prep = \s ->
|
||||
lin Prep (mkPreposition s) ;
|
||||
mkPrep : Str -> Case -> Prep = \s,c ->
|
||||
lin Prep (mkPreposition s c)
|
||||
} ;
|
||||
|
||||
|
||||
mkV2 = overload {
|
||||
mkV2 : V -> V2 = dirV2 ;
|
||||
mkV2 : V -> Str -> V2 = \v,p -> prepV2 v (mkPreposition p);
|
||||
mkV2 : V -> Preposition -> V2 = prepV2 ;
|
||||
mkV2 : Str -> V2 = strV2;
|
||||
} ;
|
||||
|
||||
prepV2 : V -> Preposition -> V2 = \v,p -> v ** {s = v.s ; c2 = p ; lock_V2 = <>} ;
|
||||
strV2 : Str -> V2 = \str -> dirV2 (mkV str) ;
|
||||
|
||||
mkN = overload {
|
||||
mkN : (sg : Str) -> N -- non-human regular nouns
|
||||
= smartN ;
|
||||
mkN : Species -> N -> N
|
||||
= \p,n -> n ** {h = p} ;
|
||||
mkN : (sg,pl : Str) -> Gender -> Species -> N
|
||||
= \sg,pl -> mkFullN (reg sg pl) ;
|
||||
mkN : NTable -> Gender -> Species -> N -- loan words, irregular
|
||||
= mkFullN ;
|
||||
mkN : (root,sgPatt,brokenPlPatt : Str) -> Gender -> Species -> N -- broken plural
|
||||
= brkN ;
|
||||
mkN : N -> (attr : Str) -> N -- Compound nouns with noninflecting attribute
|
||||
= \n,attr -> n ** {s2 = \\n,s,c => attr} ;
|
||||
mkN : N -> N -> N -- Compound nouns where attribute inflects in state and case but not number
|
||||
= attrN Sg ;
|
||||
mkN : Number -> N -> N -> N -- Compound nouns where attribute inflects in state, case and number
|
||||
= attrN ;
|
||||
} ;
|
||||
|
||||
attrN : Number -> N -> N -> N = \num,n1,n2 -> n1 ** {
|
||||
s = \\n,_,c => n1.s ! n ! Const ! c ;
|
||||
s2 = \\n,s,c => let c' = case c of {Dat => Gen; _ => c} in -- the Dat with liPrep hack only applies to the first word
|
||||
n1.s2 ! num ! s ! c' -- attribute doesn't change
|
||||
++ n2.s ! num ! s ! c'
|
||||
++ n2.s2 ! num ! s ! c'} ;
|
||||
|
||||
dualN : N -> N = \n -> n ** {isDual=True} ;
|
||||
|
||||
proDrop : NP -> NP ; -- Force a NP to lose its string, only contributing with its agreement.
|
||||
|
||||
mkPron : (_,_,_ : Str) -> PerGenNum -> Pron ;
|
||||
|
||||
mkV = overload {
|
||||
mkV : (imperfect : Str) -> V
|
||||
= regV ;
|
||||
mkV : (root : Str) -> (perf,impf : Vowel) -> V -- verb form I ; vowel = a|i|u
|
||||
= v1 ;
|
||||
mkV : (root : Str) -> VerbForm -> V -- FormI .. FormX (no VII, IX) ; default vowels a u for I
|
||||
= formV ;
|
||||
mkV : V -> (particle : Str) -> V = \v,p ->
|
||||
v ** { s = \\vf => v.s ! vf ++ p } ;
|
||||
} ;
|
||||
|
||||
regV : Str -> V = \wo ->
|
||||
let rau : Str * Vowel * Vowel =
|
||||
@@ -272,28 +397,19 @@ resource ParadigmsAra = open
|
||||
|
||||
v1 = \rootStr,vPerf,vImpf ->
|
||||
let { raw = v1' rootStr vPerf vImpf } in
|
||||
{ s = \\vf =>
|
||||
case rootStr of {
|
||||
_ + "؟" + _ => rectifyHmz(raw.s ! vf);
|
||||
_ => raw.s ! vf
|
||||
};
|
||||
lock_V = <>
|
||||
} ;
|
||||
|
||||
va : Vowel = ResAra.a ;
|
||||
lin V { s = \\vf =>rectifyHmz (raw.s ! vf) } ;
|
||||
|
||||
v1' : Str -> Vowel -> Vowel -> Verb =
|
||||
\rootStr,vPerf,vImpf ->
|
||||
let { root = mkRoot3 rootStr ;
|
||||
l = dp 2 rootStr } in --last rootStr
|
||||
case <l, root.c> of {
|
||||
<"ّ",_> => v1geminate rootStr vPerf vImpf ;
|
||||
<"و"|"ي",_> => case vPerf of {
|
||||
i => v1defective_i root vImpf ;
|
||||
_ => v1defective_a root vImpf } ;
|
||||
<_,"و"|"ي"> => v1hollow root vImpf ;
|
||||
_ => v1sound root vPerf vImpf
|
||||
};
|
||||
let root = mkRoot3 rootStr
|
||||
in case rootStr of {
|
||||
_ + "ّ" => v1geminate rootStr vPerf vImpf ;
|
||||
? + #hamza + #weak => v1doubleweak root ;
|
||||
? + ? + #weak => case vPerf of {
|
||||
i => v1defective_i root vImpf ;
|
||||
_ => v1defective_a root vImpf } ;
|
||||
? + #weak + ? => v1hollow root vImpf ;
|
||||
_ => v1sound root vPerf vImpf } ;
|
||||
|
||||
v2 =
|
||||
\rootStr ->
|
||||
@@ -302,7 +418,7 @@ resource ParadigmsAra = open
|
||||
} in {
|
||||
s =
|
||||
case root.l of {
|
||||
"و"|"ي" => (v2defective root).s;
|
||||
#weak => (v2defective root).s;
|
||||
_ => (v2sound root).s
|
||||
};
|
||||
lock_V = <>
|
||||
@@ -319,16 +435,13 @@ resource ParadigmsAra = open
|
||||
|
||||
v4 =
|
||||
\rootStr ->
|
||||
let {
|
||||
root = mkRoot3 rootStr
|
||||
} in {
|
||||
s =
|
||||
case root.l of {
|
||||
"و"|"ي" => (v4defective root).s;
|
||||
_ => (v4sound root).s
|
||||
};
|
||||
lock_V = <>
|
||||
};
|
||||
let root : Root3 = mkRoot3 rootStr ;
|
||||
verb : Verb = case rootStr of {
|
||||
? + #hamza + #weak => v4doubleweak root ;
|
||||
? + #weak + ? => v4hollow root ;
|
||||
_ + #weak => v4defective root ;
|
||||
_ => v4sound root } ;
|
||||
in lin V verb ;
|
||||
|
||||
|
||||
v5 =
|
||||
@@ -336,7 +449,7 @@ resource ParadigmsAra = open
|
||||
let { raw = v5' rootStr } in
|
||||
{ s = \\vf =>
|
||||
case rootStr of {
|
||||
_ + "؟" + _ => rectifyHmz(raw.s ! vf);
|
||||
_ + #hamza + _ => rectifyHmz(raw.s ! vf);
|
||||
_ => raw.s ! vf
|
||||
};
|
||||
lock_V = <>
|
||||
@@ -359,31 +472,43 @@ resource ParadigmsAra = open
|
||||
lock_V = <>
|
||||
};
|
||||
|
||||
v7 =
|
||||
\rootStr ->
|
||||
let {
|
||||
fcl = mkRoot3 rootStr ;
|
||||
v7fun = v7geminate ; -- TODO add rest
|
||||
} in lin V (v7fun fcl) ;
|
||||
|
||||
v8 =
|
||||
\rootStr ->
|
||||
let {
|
||||
rbT = mkRoot3 rootStr ;
|
||||
v8fun = case rbT.f of {
|
||||
("و"|"ي"|"ّ") => v8assimilated ;
|
||||
_ => v8sound }
|
||||
_ =>
|
||||
case rbT.c of {
|
||||
#weak => v8hollow ;
|
||||
_ => v8sound }}
|
||||
} in lin V (v8fun rbT) ;
|
||||
|
||||
v10 =
|
||||
\rootStr ->
|
||||
let {
|
||||
rbT = mkRoot3 rootStr ;
|
||||
v10fun = case rbT.c of {
|
||||
("و"|"ي") => v10hollow ;
|
||||
_ => v10sound }
|
||||
v10fun : Root3 -> Verb = case rootStr of {
|
||||
? + #weak + ? => v10hollow ;
|
||||
? + ? + #weak => v10defective ;
|
||||
_ => v10sound }
|
||||
} in lin V (v10fun rbT) ;
|
||||
|
||||
Preposition = Str ;
|
||||
reflV v = lin V (ResAra.reflV v) ;
|
||||
|
||||
mkFullN nsc gen spec =
|
||||
mkFullN nsc gen spec = lin N
|
||||
{ s = nsc; --NTable
|
||||
s2 = emptyNTable;
|
||||
g = gen;
|
||||
h = spec;
|
||||
lock_N = <>
|
||||
isDual = False
|
||||
};
|
||||
|
||||
brkN' : Str -> Str -> Str -> Gender -> Species -> N =
|
||||
@@ -393,20 +518,24 @@ resource ParadigmsAra = open
|
||||
} in mkFullN (reg kitAb kutub) gen spec;
|
||||
|
||||
brkN root sg pl gen spec =
|
||||
let { raw = brkN' root sg pl gen spec} in
|
||||
let { raw = brkN' root sg pl gen spec} in raw **
|
||||
{ s = \\n,d,c =>
|
||||
case root of {
|
||||
_ + "؟" + _ => rectifyHmz(raw.s ! n ! d ! c);
|
||||
_ + #hamza + _ => rectifyHmz(raw.s ! n ! d ! c);
|
||||
_ => raw.s ! n ! d ! c
|
||||
};
|
||||
g = gen;
|
||||
h = spec ; lock_N = <>
|
||||
}
|
||||
};
|
||||
|
||||
sdfN =
|
||||
\root,sg,gen,spec ->
|
||||
let { kalima = mkWord sg root;
|
||||
} in mkFullN (sndf kalima) gen spec;
|
||||
let { kalimaStr = mkWord sg root;
|
||||
kalimaRaw = sndf kalimaStr;
|
||||
kalima : NTable = \\n,d,c => case root of {
|
||||
_ + #hamza + _
|
||||
=> rectifyHmz (kalimaRaw ! n ! d ! c);
|
||||
_ => kalimaRaw ! n ! d ! c
|
||||
};
|
||||
} in mkFullN kalima gen spec;
|
||||
|
||||
sdmN =
|
||||
\root,sg,gen,spec ->
|
||||
@@ -420,38 +549,39 @@ resource ParadigmsAra = open
|
||||
lock_PN = <>
|
||||
};
|
||||
|
||||
mkN2 = overload {
|
||||
mkN2 : N -> Preposition -> N2 = prepN2 ;
|
||||
mkN2 : N -> Str -> N2 = \n,s -> prepN2 n (mkPreposition s);
|
||||
mkN2 : N -> N2 = \n -> lin N2 (n ** {c2 = noPrep}) ;
|
||||
mkN2 : Str -> N2 = \str -> lin N2 (smartN str ** {c2 = noPrep})
|
||||
} ;
|
||||
|
||||
prepN2 : N -> Str -> N2 = \n,p -> lin N2 (n ** {c2 = p}) ;
|
||||
prepN2 : N -> Preposition -> N2 = \n,p -> lin N2 (n ** {c2 = p}) ;
|
||||
|
||||
mkN3 = \n,p,q -> n ** {lock_N3 = <> ; c2 = p ; c3 = q} ;
|
||||
mkN3 = overload {
|
||||
mkN3 : N -> Preposition -> Preposition -> N3 = \n,p,q ->
|
||||
lin N3 (n ** {c2 = p ; c3 = q}) ;
|
||||
mkN3 : N -> Str -> Str -> N3 = \n,p,q ->
|
||||
lin N3 (n ** {c2 = mkPreposition p ; c3 = mkPreposition q}) ;
|
||||
} ;
|
||||
|
||||
mkPron : (_,_,_ : Str) -> PerGenNum -> NP = \ana,nI,I,pgn ->
|
||||
{ s =
|
||||
table {
|
||||
Nom => ana;
|
||||
Acc => nI;
|
||||
Gen => I
|
||||
};
|
||||
a = {pgn = pgn; isPron = True };
|
||||
lock_NP = <>
|
||||
};
|
||||
mkPron : (_,_,_ : Str) -> PerGenNum -> Pron = \ana,nI,I,pgn ->
|
||||
lin Pron (ResAra.mkPron ana nI I pgn) ;
|
||||
|
||||
proDrop : NP -> NP = \np -> lin NP (ResAra.proDrop np) ;
|
||||
|
||||
-- e.g. al-jamii3, 2a7ad
|
||||
regNP : Str -> Number -> NP = \word,n ->
|
||||
{ s = \\c => word ++ vowel ! c ; ---- gives strange chars
|
||||
a = {pgn = Per3 Masc n; isPron = False };
|
||||
lock_NP = <>
|
||||
};
|
||||
regNP : Str -> Number -> NP = \word,n -> lin NP (emptyNP ** {
|
||||
s = \\c => fixShd word (dec1sg ! Def ! c)
|
||||
});
|
||||
|
||||
-- e.g. hadha, dhaalika
|
||||
indeclNP : Str -> Number -> NP = \word,n ->
|
||||
{ s = \\c => word ;
|
||||
a = {pgn = Per3 Masc n; isPron = False };
|
||||
lock_NP = <>
|
||||
};
|
||||
indeclNP : Str -> Number -> NP = \word,n -> lin NP (emptyNP ** {
|
||||
s = \\c => word
|
||||
});
|
||||
|
||||
mkQuant7 : (_,_,_,_,_,_,_ : Str) -> State -> Quant =
|
||||
\hava,havihi,havAn,havayn,hAtAn,hAtayn,hA'ulA,det ->
|
||||
\hava,havihi,havAn,havayn,hAtAn,hAtayn,hA'ulA,det -> lin Quant (baseQuant **
|
||||
{ s = \\n,s,g,c =>
|
||||
case <s,g,c,n> of {
|
||||
<_,Masc,_,Sg> => hava;
|
||||
@@ -463,14 +593,11 @@ resource ParadigmsAra = open
|
||||
<Hum,_,_,Pl> => hA'ulA;
|
||||
_ => havihi
|
||||
};
|
||||
d = Def;
|
||||
isPron = False;
|
||||
isNum = False;
|
||||
lock_Quant = <>
|
||||
};
|
||||
d = det
|
||||
});
|
||||
|
||||
mkQuant3 : (_,_,_ : Str) -> State -> Quant =
|
||||
\dalika,tilka,ula'ika,det ->
|
||||
\dalika,tilka,ula'ika,det -> lin Quant (baseQuant **
|
||||
{ s = \\n,s,g,c =>
|
||||
case <s,g,c,n> of {
|
||||
<_,Masc,_,Sg> => dalika;
|
||||
@@ -478,11 +605,21 @@ resource ParadigmsAra = open
|
||||
<Hum,_,_,_> => ula'ika;
|
||||
_ => tilka
|
||||
};
|
||||
d = Def;
|
||||
isPron = False;
|
||||
isNum = False;
|
||||
lock_Quant = <>
|
||||
};
|
||||
d = det
|
||||
});
|
||||
|
||||
brkA : (root,sg,pl : Str) -> Adj = \root,sg,pl ->
|
||||
let jadId = mkWord sg root ;
|
||||
jadIda = jadId + "َة" ;
|
||||
judud = mkWord pl root ;
|
||||
akbar = mkWord "أَفعَل" root ;
|
||||
mascTbl = reg jadId judud ;
|
||||
femTbl = reg jadIda judud ;
|
||||
in { s = table {
|
||||
APosit Masc n d c => rectifyHmz (mascTbl ! n ! d ! c) ;
|
||||
APosit Fem n d c => rectifyHmz (femTbl ! n ! d ! c) ;
|
||||
AComp d c => rectifyHmz (indeclN akbar ! d ! c) }
|
||||
} ;
|
||||
|
||||
degrA : (posit,compar,plur : Str) -> A
|
||||
= \posit,compar,plur -> lin A {s = clr posit compar plur} ;
|
||||
@@ -491,72 +628,105 @@ resource ParadigmsAra = open
|
||||
let raw = sndA' root pat in {
|
||||
s = \\af =>
|
||||
case root of {
|
||||
_ + "؟" + _ => rectifyHmz(raw.s ! af);
|
||||
_ + #hamza + _ => rectifyHmz(raw.s ! af);
|
||||
_ => raw.s ! af
|
||||
};
|
||||
lock_A = <>
|
||||
}
|
||||
};
|
||||
|
||||
sndA' : Str -> Str -> A =
|
||||
sndA' : Str -> Str -> Adj =
|
||||
\root,pat ->
|
||||
let { kabIr = mkWord pat root;
|
||||
akbar = mkWord "أَفعَل" root
|
||||
} in {
|
||||
s = table {
|
||||
APosit g n d c => (positAdj kabIr) ! g ! n ! d ! c ;
|
||||
AComp d c => (indeclN akbar) ! d ! c
|
||||
};
|
||||
lock_A = <>
|
||||
APosit g n d c => positAdj kabIr ! g ! n ! d ! c ;
|
||||
AComp d c => indeclN akbar ! d ! c
|
||||
}
|
||||
};
|
||||
|
||||
nisbaA : Str -> Adj = \Haal ->
|
||||
let Haaliyy = Haal + "ِيّ" in {
|
||||
s = table {
|
||||
APosit g n d c => positAdj Haaliyy ! g ! n ! d ! c ;
|
||||
AComp d c => "أَكْثَر" ++ indeclN Haaliyy ! d ! c
|
||||
}
|
||||
} ;
|
||||
|
||||
clrA root =
|
||||
let { eaHmar = mkWord "أَفعَل" root;
|
||||
HamrA' = mkWord "فَعلاء" root;
|
||||
Humr = mkWord "فُعل" root
|
||||
} in {
|
||||
s = clr eaHmar HamrA' Humr;
|
||||
lock_A = <>
|
||||
};
|
||||
|
||||
mkA2 a p = a ** {c2 = p ; lock_A2 = <>} ;
|
||||
mkA2 = overload {
|
||||
mkA2 : A -> Preposition -> A2 = prepA2 ;
|
||||
mkA2 : A -> Str -> A2 = \a,p -> prepA2 a (mkPreposition p)
|
||||
} ;
|
||||
|
||||
mkAdv x = ss x ** {lock_Adv = <>} ;
|
||||
mkAdV x = ss x ** {lock_AdV = <>} ;
|
||||
mkAdA x = ss x ** {lock_AdA = <>} ;
|
||||
prepA2 : A -> Preposition -> A2 = \a,p -> lin A2 (a ** {c2 = p}) ;
|
||||
|
||||
mkPreposition p = p ;
|
||||
mkAdv x = lin Adv (ss x) ;
|
||||
mkAdV x = lin AdV (ss x) ;
|
||||
mkAdA x = lin AdA (ss x) ;
|
||||
mkInterj x = lin Interj (ss x) ;
|
||||
|
||||
prepV2 : V -> Preposition -> V2 = \v,p -> v ** {s = v.s ; c2 = p ; lock_V2 = <>} ;
|
||||
strV2 : Str -> V2 = \str -> dirV2 (mkV str) ;
|
||||
mkSubj = overload {
|
||||
mkSubj : Str -> Subj = \s -> lin Subj {s = s ; o = Subord} ;
|
||||
mkSubj : Str -> Order -> Subj = \s,o -> lin Subj {s = s ; o = o} ;
|
||||
} ;
|
||||
|
||||
dirV2 v = prepV2 v [] ;
|
||||
dirV2 v = prepV2 v (casePrep acc) ;
|
||||
|
||||
mkV3 v p q = v ** {s = v.s ; c2 = p ; c3 = q ; lock_V3 = <>} ;
|
||||
dirV3 v p = mkV3 v [] p ;
|
||||
dirdirV3 v = dirV3 v [] ;
|
||||
mkV3 = overload {
|
||||
mkV3 : V -> Preposition -> Preposition -> V3 = \v,p,q ->
|
||||
lin V3 (prepV3 v p q) ;
|
||||
mkV3 : V -> Str -> Str -> V3 = \v,p,q ->
|
||||
lin V3 (v ** {s = v.s ; c2 = mkPreposition p ; c3 = mkPreposition q})
|
||||
} ;
|
||||
|
||||
prepV3 : V -> Preposition -> Preposition -> Verb3 = \v,p,q ->
|
||||
v ** {s = v.s ; c2 = p ; c3 = q} ;
|
||||
|
||||
dirV3 = overload {
|
||||
dirV3 : V -> Preposition -> V3 = \v,p -> mkV3 v (casePrep acc) p ;
|
||||
dirV3 : V -> Str -> V3 = \v,s -> mkV3 v (casePrep acc) (mkPreposition s)
|
||||
} ;
|
||||
|
||||
dirdirV3 v = dirV3 v (casePrep acc) ;
|
||||
|
||||
mkVS v = v ** {lock_VS = <>} ;
|
||||
mkVQ v = v ** {lock_VQ = <>} ;
|
||||
|
||||
regVV : V -> VV = \v -> lin VV v ** {c2 = "أَنْ"} ;
|
||||
c2VV : V -> Str -> VV = \v,prep -> regVV v ** {c2 = prep} ;
|
||||
|
||||
regVV : V -> VV = \v -> lin VV v ** {c2 = mkPreposition "أَنْ" ; sc = noPrep} ;
|
||||
c2VV : V -> Str -> VV = \v,prep -> regVV v ** {c2 = mkPreposition prep ; sc = noPrep} ;
|
||||
prepVV : V -> Preposition -> VV = \v,prep -> regVV v ** {c2=prep; sc=noPrep} ;
|
||||
prep2VV : V -> (_,_ : Preposition) -> VV = \v,p1,p2 -> regVV v ** {c2=p1; sc=p2} ;
|
||||
V0 : Type = V ;
|
||||
---- V2S, V2V, V2Q, V2A : Type = V2 ;
|
||||
AS, A2S, AV : Type = A ;
|
||||
A2V : Type = A2 ;
|
||||
|
||||
mkV0 v = v ** {lock_V = <>} ;
|
||||
mkV2S v p = mkV2 v p ** {lock_V2S = <>} ;
|
||||
mkV2V v p t = mkV2 v p ** {s4 = t ; lock_V2V = <>} ;
|
||||
mkVA v = v ** {lock_VA = <>} ;
|
||||
mkV2A v p = mkV2 v p ** {lock_V2A = <>} ;
|
||||
mkV2Q v p = mkV2 v p ** {lock_V2Q = <>} ;
|
||||
mkV0 v = v ;
|
||||
mkV2S v p = lin V2S (prepV2 v (mkPreposition p)) ;
|
||||
mkV2V = overload {
|
||||
mkV2V : V -> Str -> Str -> V2V = \v,p,q ->
|
||||
lin V2V (prepV3 v (mkPreposition p) (mkPreposition q) ** {sc = noPrep}) ;
|
||||
mkV2V : V -> Preposition -> Preposition -> V2V = \v,p,q ->
|
||||
lin V2V (prepV3 v p q ** {sc = noPrep}) ;
|
||||
mkV2V : VV -> Preposition -> V2V = \vv,p ->
|
||||
lin V2V (vv ** {c2 = p ; c3 = vv.c2}) ;
|
||||
} ;
|
||||
mkVA v = v ** {lock_VA = <>} ;
|
||||
mkV2A v p = lin V2A (prepV2 v (mkPreposition p));
|
||||
mkV2Q v p = lin V2Q (prepV2 v (mkPreposition p));
|
||||
|
||||
mkAS,
|
||||
mkAV = \a -> a ;
|
||||
mkA2S,
|
||||
mkA2V = \a,p -> prepA2 a (mkPreposition p) ;
|
||||
|
||||
mkAS v = v ** {lock_A = <>} ;
|
||||
mkA2S v p = mkA2 v p ** {lock_A = <>} ;
|
||||
mkAV v = v ** {lock_A = <>} ;
|
||||
mkA2V v p = mkA2 v p ** {lock_A2 = <>} ;
|
||||
|
||||
|
||||
smartN : Str -> N = \s -> case s of {
|
||||
@@ -577,12 +747,12 @@ formV : (root : Str) -> VerbForm -> V = \s,f -> case f of {
|
||||
FormIV => v4 s ;
|
||||
FormV => v5 s ;
|
||||
FormVI => v6 s ;
|
||||
--- FormVII => v7 s ;
|
||||
FormVII => v7 s ;
|
||||
FormVIII => v8 s ;
|
||||
FormX => v10 s
|
||||
} ;
|
||||
|
||||
param VerbForm =
|
||||
FormI | FormII | FormIII | FormIV | FormV | FormVI | FormVIII | FormX ;
|
||||
FormI | FormII | FormIII | FormIV | FormV | FormVI | FormVII | FormVIII | FormX ;
|
||||
|
||||
} ;
|
||||
|
||||
@@ -35,9 +35,13 @@ flags coding=utf8 ;
|
||||
fuci = { h = "" ; m1 = "ُ" ; m2 = ""; t = "ِ" } ;
|
||||
fucu = { h = "" ; m1 = "ُ" ; m2 = ""; t = "ُ" } ;
|
||||
fUc = { h = "" ; m1 = "ُو"; m2 = ""; t = "" } ;
|
||||
ufAc = { h = "ُ" ; m1 = "َا"; m2 = ""; t = "" } ;
|
||||
ufca = { h = "ُ" ; m1 = "ْ" ; m2 = ""; t = "َ" } ;
|
||||
|
||||
eafAc = fAc ** { h = "أَ" } ;
|
||||
eafac = fac ** { h = "أَ" } ;
|
||||
eafIc = fIc ** { h = "أَ" } ;
|
||||
eafic = fic ** { h = "أَ" } ;
|
||||
|
||||
eafAcil = { h = "أَ"; m1 = "َا" ; m2 = "ِ" ; t = "" } ;
|
||||
eafAcIl = { h = "أَ"; m1 = "َا" ; m2 = "ِي" ; t = "" } ;
|
||||
eafcilp = { h = "أَ"; m1 = "ْ" ; m2 = "ِ" ; t = "َة" } ;
|
||||
@@ -47,8 +51,14 @@ flags coding=utf8 ;
|
||||
eafcul = { h = "أَ"; m1 = "ْ" ; m2 = "ُ" ; t = "" } ;
|
||||
eiftacal = { h = "إِ"; m1 = "ْتَ" ; m2 = "َ" ; t = "" } ;
|
||||
eufcil = { h = "أُ"; m1 = "ْ" ; m2 = "ِ" ; t = "" } ;
|
||||
eufic = fic ** { h = "أُ" } ;
|
||||
eufIc = fIc ** { h = "أُ" } ;
|
||||
ufic = fic ** { h = "ُ" } ;
|
||||
ufIc = fIc ** { h = "ُ" } ;
|
||||
ufac = fac ** { h = "ُ" } ;
|
||||
ufAc = fAc ** { h = "ُ" } ;
|
||||
euftucil = { h = "أُ"; m1 = "ْتُ" ; m2 = "ِ" ; t = "" } ;
|
||||
euttucil = euftucil ** { h = "اُتُّ" ; m1 = "ِ" } ; ---- IL assimilated VIII
|
||||
euttucil = euftucil ** { h = "اُتُّ" ; m1 = "ِ" } ; ---- IL assimilated VIII
|
||||
afcul = { h = "َ" ; m1 = "ْ" ; m2 = "ُ" ; t = "" } ;
|
||||
faccalo = { h = "" ; m1 = "َ" ; m2 = "َّ" ; t = "ْ" } ;
|
||||
facal = { h = "" ; m1 = "َ" ; m2 = "َ" ; t = "" } ;
|
||||
@@ -77,9 +87,12 @@ flags coding=utf8 ;
|
||||
ficAl = { h = "" ; m1 = "ِ" ; m2 = "َا" ; t = "" } ;
|
||||
ficlp = { h = "" ; m1 = "ِ" ; m2 = "ْ" ; t = "َة" } ;
|
||||
ftacal = { h = "" ; m1 = "ْتَ" ; m2 = "َ" ; t = "" } ;
|
||||
ftical = ftacal ** { m1 = "ْتِ" } ; -- IL hollow VIII
|
||||
ftAcal = ftacal ** { m1 = "ْتَا" } ; -- IL hollow VIII
|
||||
ftIcal = ftacal ** { m1 = "ْتِي" } ; -- IL hollow VIII
|
||||
ftacil = { h = "" ; m1 = "ْتَ" ; m2 = "ِ" ; t = "" } ;
|
||||
ttacal = ftacal ** { m1 = "" ; h = "تَّ" } ; ---- IL assimilated VIII
|
||||
ttacil = ftacil ** { m1 = "" ; h = "تَّ" } ; ---- IL assimilated VIII
|
||||
ttacal = ftacal ** { m1 = "" ; h = "تَّ" } ; ---- IL assimilated VIII
|
||||
ttacil = ftacil ** { m1 = "" ; h = "تَّ" } ; ---- IL assimilated VIII
|
||||
fuccAl = { h = "" ; m1 = "ُ" ; m2 = "َّا" ; t = "" } ;
|
||||
fuccil = { h = "" ; m1 = "ُ" ; m2 = "ِّ" ; t = "" } ;
|
||||
fuccilo = { h = "" ; m1 = "ُ" ; m2 = "ِّ" ; t = "ْ" } ;
|
||||
|
||||
@@ -10,15 +10,16 @@ concrete PhraseAra of Phrase = CatAra ** open
|
||||
UttQS qs = {s = \\g => qs.s ! QDir} ;
|
||||
UttImpSg pol imp = {s = \\g => imp.s ! pol.p ! g ! ResAra.Sg ++ pol.s} ;
|
||||
UttImpPl,UttImpPol = \pol,imp -> {s = \\g => imp.s ! pol.p ! g ! ResAra.Pl ++ pol.s} ;
|
||||
UttInterj i = {s = \\g => i.s} ;
|
||||
|
||||
UttIP ip = {s = \\g => ip.s ! g ! Def ! Nom} ; --IL
|
||||
UttIP ip = {s = \\g => ip.s ! False ! g ! Def ! Nom} ; --IL
|
||||
UttAP ap = {s = ResAra.uttAP ap} ; --IL
|
||||
UttCard c = {s = ResAra.uttNum c} ; --IL
|
||||
|
||||
UttCN cn = {s = \\_ => cn.s ! Sg ! Def ! Nom} ; --IL
|
||||
UttCN cn = {s = ResAra.uttCN cn } ; --IL
|
||||
UttNP np = {s = \\_ => np.s ! Nom} ;
|
||||
UttVP vp = {s = \\g => (compVP vp).s ! {g=g ; n=Sg} ! Nom} ; --IL
|
||||
UttS,
|
||||
UttVP vp = {s = uttVP vp} ; --IL
|
||||
UttS s = {s = \\_ => s.s ! Verbal} ;
|
||||
UttAdv,
|
||||
UttIAdv = \s -> {s = \\_ => s.s} ; ---- OK? AR
|
||||
--
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
concrete QuestionAra of Question = CatAra ** open ResAra, ParamX, Prelude, VerbAra in {
|
||||
concrete QuestionAra of Question = CatAra ** open ResAra, ParamX, Prelude, VerbAra, SentenceAra in {
|
||||
|
||||
flags optimize=all_subs ; coding = utf8 ;
|
||||
|
||||
@@ -7,97 +7,72 @@ concrete QuestionAra of Question = CatAra ** open ResAra, ParamX, Prelude, VerbA
|
||||
QuestCl cl = {
|
||||
s = \\t,p =>
|
||||
table {
|
||||
QIndir => "إِذا" ++ cl.s ! t ! p ! Verbal ;
|
||||
QDir => "هَل" ++ cl.s ! t ! p ! Verbal
|
||||
QIndir => "إِذا" ++ cl.s ! t ! p ! toOrder QIndir ;
|
||||
QDir => "هَلْ" ++ cl.s ! t ! p ! toOrder QDir
|
||||
}
|
||||
};
|
||||
|
||||
-- ComplSlashIP vps ip = {} ;
|
||||
|
||||
-- AR copied from PredVP
|
||||
--IL guessed
|
||||
QuestVP qp vp =
|
||||
{ s =\\t,p,_ =>
|
||||
let {
|
||||
---- o = Verbal ; ---- AR
|
||||
objgn = pgn2gn vp.obj.a.pgn ;
|
||||
np = {s = qp.s ! objgn.g ! Def ; ----IL just guessing state
|
||||
a ={pgn = Per3 Masc qp.n ; isPron = False}} ;
|
||||
pgn = np.a.pgn ;
|
||||
gn = pgn2gn pgn;
|
||||
kataba = vp.s ! pgn ! VPPerf ;
|
||||
yaktubu = vp.s ! pgn ! VPImpf Ind ;
|
||||
yaktuba = vp.s ! pgn ! VPImpf Cnj ;
|
||||
yaktub = vp.s ! pgn ! VPImpf Jus ;
|
||||
vStr : ResAra.Tense -> Polarity -> Str =
|
||||
\tn,pl -> case<vp.isPred,tn,pl> of {
|
||||
<False, ResAra.Pres, Pos> => yaktubu ;
|
||||
<False, ResAra.Pres, Neg> => "لَا" ++ yaktubu ;
|
||||
<True, ResAra.Pres, Pos> => "" ; --no verb "to be" in present
|
||||
<True, ResAra.Pres, Neg> => "لَيسَ" ;--same here, just add negation particle
|
||||
<_, ResAra.Past, Pos> => kataba ;
|
||||
<_, ResAra.Past, Neg> => "لَمْ" ++ yaktub ;
|
||||
<_, ResAra.Fut, Pos> => "سَ" ++ yaktubu ;
|
||||
<_, ResAra.Fut, Neg> => "لَنْ" ++ yaktuba
|
||||
};
|
||||
pred : ResAra.Tense -> Polarity -> Str =
|
||||
\tn,pl -> case <vp.isPred,tn,pl> of {
|
||||
<True, ResAra.Pres, Pos> => vp.pred.s ! gn ! Nom; --xabar marfooc
|
||||
_ => vp.pred.s ! gn ! Acc --xabar kaana wa laysa manSoob
|
||||
} ;
|
||||
let np = ip2np qp vp.isPred ;
|
||||
cl = PredVP np vp ;
|
||||
in { s = \\t,p,qf => cl.s ! t ! p ! toOrder qf } ;
|
||||
|
||||
} in
|
||||
--- case o of {
|
||||
---- _ =>
|
||||
case <False, np.a.isPron> of {
|
||||
---- AR workaround 18/12/2008 case <vp.obj.a.isPron, np.a.isPron> of {
|
||||
-- ya2kuluhu
|
||||
<False,True> => (vStr t p) ++ vp.obj.s ++ vp.s2 ++ (pred t p);
|
||||
-- ya2kuluhu al-waladu, yakuluhu al-2awlaadu
|
||||
<False,False> => (vStr t p) ++ np.s ! Nom ++ vp.obj.s ++ vp.s2 ++ (pred t p);
|
||||
<True,False> => (vStr t p) ++ vp.obj.s ++ np.s ! Nom ++ vp.s2 ++ (pred t p);
|
||||
<True,True> => (vStr t p) ++ vp.obj.s ++ vp.s2 ++ (pred t p)
|
||||
};
|
||||
---- Nominal =>
|
||||
---- np.s ! Nom ++ (vStr t p) ++ vp.obj.s ++ vp.s2 ++ (pred t p)
|
||||
}
|
||||
; ---- };
|
||||
|
||||
|
||||
---- AR guessed
|
||||
QuestIAdv iadv cl = {s = \\t,p,_ => iadv.s ++ cl.s ! t ! p ! Verbal} ;
|
||||
QuestIAdv iadv cl = {s = \\t,p,qf => iadv.s ++ cl.s ! t ! p ! toOrder qf} ;
|
||||
|
||||
---- IL guessed
|
||||
QuestIComp icomp np =
|
||||
let vp = kaan (CompNP np) in
|
||||
QuestVP icomp vp ;
|
||||
-- : IComp -> NP -> QCl
|
||||
QuestIComp ic np =
|
||||
let vp = UseComp (CompNP np) ; -- puts NP in nominative
|
||||
ip : ResAra.IP = np ** { -- NP's s is already present in VP, we only want its agr
|
||||
s = \\_,_,_,_ => ic.s ! pgn2gn np.a.pgn } ;
|
||||
in QuestVP ip vp ;
|
||||
|
||||
CompIP ip = ip ;
|
||||
-- old, when IComp = Comp { s = \\{g=g ; n=_},c => ip.s ! g ! Def ! c } ; ----
|
||||
|
||||
CompIAdv iadv = mkIP iadv.s ResAra.Sg ;
|
||||
|
||||
-- QCl = {s : R.Tense => Polarity => QForm => Str} ;
|
||||
QuestSlash ip cl = { ----IL just guessing
|
||||
s = \\t,p,qf => case qf of {
|
||||
QDir => cl.s ! t ! p ! Verbal ++ cl.c2 ++ ip.s ! Masc ! Def ! Nom ; --VSO (purely guessing)
|
||||
QIndir => cl.s ! t ! p ! Nominal ++ cl.c2 ++ ip.s ! Masc ! Def ! Nom } --SVO (purely guessing)
|
||||
-- : IP -> IComp ;
|
||||
CompIP ip = ip ** {
|
||||
s = \\gn => ip.s ! True -- True=IP will be a subject of predicative sentence
|
||||
! gn.g -- IComp agrees in gender with eventual head
|
||||
! Def ! Nom ; -- IP will be a subject
|
||||
} ;
|
||||
|
||||
PrepIP p ip = {s = p.s ++ ip.s ! Masc ! Def ! Acc} ; ----IL
|
||||
CompIAdv iadv = { s = \\_ => iadv.s ; a = ResAra.Sg } ;
|
||||
|
||||
AdvIP ip adv = ip ** {
|
||||
s = \\g,s,c => ip.s ! g ! s ! c ++ adv.s ;
|
||||
n = ip.n
|
||||
-- QCl = {s : Tense => Polarity => QForm => Str} ;
|
||||
QuestSlash ip cls = { ----IL just guessing
|
||||
s = \\t,p,qf =>
|
||||
let cl : ResAra.Cl = complClSlash cls ; -- dummy conversion to Cl
|
||||
o = toOrder qf
|
||||
in cls.c2.s ++ ip.s ! False ! Masc ! Def ! Nom ++ cl.s ! t ! p ! o
|
||||
} ;
|
||||
|
||||
--IL guessed
|
||||
PrepIP p ip = {
|
||||
s = p.s ++ ip.s ! False -- not used as a subject of predicative sentence
|
||||
! Masc ----
|
||||
! Def ! Gen
|
||||
} ;
|
||||
|
||||
AdvIP ip adv = ip ** {
|
||||
s = \\isPred,g,s,c => ip.s ! isPred ! g ! s ! c ++ adv.s ;
|
||||
} ;
|
||||
|
||||
-- : IDet -> IP
|
||||
IdetIP idet = idet ** {
|
||||
s = \\isPred => idet.s ;
|
||||
a = { pgn = agrP3 NoHum Masc idet.n ; isPron = False }
|
||||
} ;
|
||||
|
||||
----IL guessed with help of L and Google translate
|
||||
-- : IDet -> IP
|
||||
IdetIP idet = idet ; -- Gender still matters if turned into IComp
|
||||
|
||||
-- : IDet -> CN -> IP
|
||||
IdetCN idet cn = idet ** {
|
||||
s = \\g,s,c => idet.s ! cn.g ! s ! c ++ -- gender is determined by the CN
|
||||
cn.s ! idet.n ! Indef ! Gen ; --idaafa
|
||||
IdetCN idet cn = {
|
||||
s = \\isPred,g,s,c
|
||||
=> idet.s ! cn.g ! s ! c ++
|
||||
cn2str cn idet.n idet.d Gen ;
|
||||
a = { pgn = agrP3 NoHum cn.g idet.n ; isPron = False }
|
||||
} ;
|
||||
|
||||
-- : IQuant -> Num -> IDet
|
||||
@@ -105,6 +80,7 @@ concrete QuestionAra of Question = CatAra ** open ResAra, ParamX, Prelude, VerbA
|
||||
s = \\g,s,c =>
|
||||
let gend = detGender g num.n -- gender flips with some numbers
|
||||
in iquant.s ! s ! c ++ num.s ! gend ! s ! c ;
|
||||
n = sizeToNumber num.n
|
||||
n = sizeToNumber num.n ;
|
||||
d = Indef ---- TODO check
|
||||
} ;
|
||||
}
|
||||
|
||||
@@ -1,35 +1,50 @@
|
||||
concrete RelativeAra of Relative = CatAra ** open ResAra in {
|
||||
flags coding=utf8;
|
||||
--
|
||||
-- flags optimize=all_subs ;
|
||||
--
|
||||
-- lin
|
||||
--
|
||||
-- RelCl cl = {
|
||||
-- s = \\t,a,p,_ => "سُعه" ++ "تهَت" ++ cl.s ! t ! a ! p ! ODir
|
||||
-- } ;
|
||||
--
|
||||
-- RelVP rp vp = {
|
||||
-- s = \\t,ant,b,ag =>
|
||||
-- let
|
||||
-- agr = case rp.a of {
|
||||
-- RNoAg => ag ;
|
||||
-- RAg a => a
|
||||
-- } ;
|
||||
-- cl = mkClause (rp.s ! Nom) agr vp
|
||||
-- in
|
||||
-- cl.s ! t ! ant ! b ! ODir
|
||||
-- } ;
|
||||
--
|
||||
-- RelSlash rp slash = {
|
||||
-- s = \\t,a,p,_ => slash.c2 ++ rp.s ! Acc ++ slash.s ! t ! a ! p ! ODir
|
||||
-- } ;
|
||||
concrete RelativeAra of Relative = CatAra **
|
||||
open ResAra in {
|
||||
flags coding=utf8;
|
||||
|
||||
lin
|
||||
|
||||
RelCl cl = {
|
||||
s = \\t,p,agr,c => IdRP.s ! agr2ragr agr c ++ cl.s ! t ! p ! Nominal
|
||||
} ;
|
||||
|
||||
-- : RP -> VP -> RCl ; -- who loves John
|
||||
RelVP rp vp = {
|
||||
s = \\t,p,agr,c =>
|
||||
let
|
||||
npS : Case => Str = \\_ => rp.s ! agr2ragr agr c ;
|
||||
np : ResAra.NP = agrNP agr ** {s = npS} ;
|
||||
cl = predVP np vp ;
|
||||
in
|
||||
cl.s ! t ! p ! Nominal
|
||||
} ;
|
||||
|
||||
-- : RP -> ClSlash -> RCl ; -- whom John loves
|
||||
RelSlash rp cls = cls ** {
|
||||
s = \\t,p,agr,c =>
|
||||
let --empty : Agr -> NP = emptyNP ;
|
||||
obj : ResAra.NP = pgn2pron agr.pgn ; -- head is repeated as a clitic object pronoun
|
||||
cl : ResAra.Cl = complClSlash obj cls ;
|
||||
in rp.s ! agr2ragr agr c ++ cl.s ! t ! p ! VOS
|
||||
} ;
|
||||
--
|
||||
-- FunRP p np rp = {
|
||||
-- s = \\c => np.s ! c ++ p.s ++ rp.s ! Acc ;
|
||||
-- a = RAg np.a
|
||||
-- } ;
|
||||
--
|
||||
-- IdRP = mkIP "وهِعه" "وهِعه" "وهْسي" Sg ** {a = RNoAg} ;
|
||||
--
|
||||
|
||||
IdRP =
|
||||
{ s = table {
|
||||
RSg Masc => "اَلَّذِي" ;
|
||||
RSg Fem => "اَلَّتِي" ;
|
||||
RPl Masc => "اَلَّذِين" ;
|
||||
RPl Fem => "اَللَّاتِي" ;
|
||||
RDl Masc Bare => "اَللَّذَيْن" ;
|
||||
RDl Masc Nom => "اَللَّذَانِ" ;
|
||||
RDl Masc _ => "اَللَّذَيْنِ" ;
|
||||
RDl Fem Bare => "اَللَّتَيْن" ;
|
||||
RDl Fem Nom => "اَللَّتَانِ" ;
|
||||
RDl Fem _ => "اَللَّتَيْنِ"
|
||||
}
|
||||
} ;
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -26,67 +26,16 @@ concrete SentenceAra of Sentence = CatAra ** open
|
||||
}
|
||||
};
|
||||
-}
|
||||
PredVP np vp =
|
||||
{ s =\\t,p,o =>
|
||||
let {
|
||||
pgn =
|
||||
case <o,np.a.isPron> of {
|
||||
<Verbal, False> => verbalAgr np.a.pgn;
|
||||
_ => np.a.pgn
|
||||
};
|
||||
gn = pgn2gn pgn;
|
||||
kataba = vp.s ! pgn ! VPPerf ;
|
||||
yaktubu = vp.s ! pgn ! VPImpf Ind ;
|
||||
yaktuba = vp.s ! pgn ! VPImpf Cnj ;
|
||||
yaktub = vp.s ! pgn ! VPImpf Jus ;
|
||||
vStr : ResAra.Tense -> Polarity -> Str =
|
||||
\tn,pl -> case<vp.isPred,tn,pl> of {
|
||||
<False, ResAra.Pres, Pos> => yaktubu ;
|
||||
<False, ResAra.Pres, Neg> => "لَا" ++ yaktubu ;
|
||||
<True, ResAra.Pres, Pos> => "" ; --no verb "to be" in present
|
||||
<True, ResAra.Pres, Neg> => "لَيسَ" ;--same here, just add negation particle
|
||||
<_, ResAra.Past, Pos> => kataba ;
|
||||
<_, ResAra.Past, Neg> => "لَمْ" ++ yaktub ;
|
||||
<_, ResAra.Fut, Pos> => "سَ" ++ yaktubu ;
|
||||
<_, ResAra.Fut, Neg> => "لَنْ" ++ yaktuba
|
||||
};
|
||||
pred : ResAra.Tense -> Polarity -> Str =
|
||||
\tn,pl -> case <vp.isPred,tn,pl> of {
|
||||
<True, ResAra.Pres, Pos> => vp.pred.s ! gn ! Nom; --xabar marfooc
|
||||
_ => vp.pred.s ! gn ! Acc --xabar kaana wa laysa manSoob
|
||||
};
|
||||
|
||||
} in
|
||||
case o of {
|
||||
Verbal =>
|
||||
--case <False, np.a.isPron> of { ---- AR workaround 18/12/2008
|
||||
case <vp.obj.a.isPron, np.a.isPron> of {
|
||||
{- IL: I don't think we should do prodrop here. vStr drops the copula in present tense,
|
||||
so there's hardly anything left for a predicative clause: e.g.
|
||||
PredVP (UsePron i_Pron) (UseComp (CompCN (UseN car_N))) "I am a car"
|
||||
would be linearised just as "car", if we have both prodrop and copula drop.
|
||||
Leaving it up to someone who knows Arabic to decide what is better.
|
||||
Original here:
|
||||
<True,True> => (vStr t p) ++ vp.obj.s ++ vp.s2 ++ (pred t p) ;
|
||||
-- ya2kuluhu
|
||||
<False,True> => (vStr t p) ++ vp.obj.s ++ vp.s2 ++ (pred t p); -}
|
||||
-- ya2kuluhu al-waladu, yakuluhu al-2awlaadu
|
||||
<False> => (vStr t p) ++ np.s ! Nom ++ vp.obj.s ++ vp.s2 ++ (pred t p);
|
||||
<True> => (vStr t p) ++ vp.obj.s ++ np.s ! Nom ++ vp.s2 ++ (pred t p)
|
||||
};
|
||||
Nominal =>
|
||||
np.s ! Nom ++ (vStr t p) ++ vp.obj.s ++ vp.s2 ++ (pred t p)
|
||||
}
|
||||
};
|
||||
PredVP = predVP ;
|
||||
|
||||
-- PredSCVP sc vp = mkClause sc.s (agrP3 Sg) vp ;
|
||||
|
||||
ImpVP vp = {
|
||||
s = \\p,g,n =>
|
||||
case p of {
|
||||
Pos => vp.s ! (Per2 g n) ! VPImp ++ vp.obj.s ++ vp.s2 ;
|
||||
Neg => "لا" ++ vp.s ! (Per2 g n) ! (VPImpf Jus) ++ vp.obj.s ++ vp.s2
|
||||
}
|
||||
Pos => vp.s ! Per2 g n ! VPImp ;
|
||||
Neg => "لَا" ++ vp.s ! Per2 g n ! VPImpf Jus
|
||||
} ++ vp.obj.s ++ vp.pred.s ! {g=g;n=n} ! Acc ++ vp.s2
|
||||
};
|
||||
|
||||
--
|
||||
@@ -100,9 +49,11 @@ concrete SentenceAra of Sentence = CatAra ** open
|
||||
|
||||
-- ClSlash
|
||||
|
||||
SlashVP np vps = PredVP np vps ** { c2 = vps.c2 } ;
|
||||
SlashVP = predVPSlash ;
|
||||
AdvSlash slash adv = slash ** { s2 = slash.s2 ++ adv.s } ;
|
||||
SlashPrep cl prep = cl ** {c2 = prep.s} ;
|
||||
|
||||
-- : Cl -> Prep -> ClSlash
|
||||
-- SlashPrep cl prep = TODO
|
||||
|
||||
-- SlashVS np vs sslash = TODO
|
||||
|
||||
@@ -113,22 +64,26 @@ concrete SentenceAra of Sentence = CatAra ** open
|
||||
--
|
||||
|
||||
UseCl t p cl =
|
||||
{s = case <t.t,t.a> of { --- IL guessed tenses
|
||||
<(Pres|Cond),Simul> => cl.s ! ResAra.Pres ! p.p ! Verbal ;
|
||||
<Fut ,_ > => cl.s ! ResAra.Fut ! p.p ! Verbal ;
|
||||
<_ ,_ > => cl.s ! ResAra.Past ! p.p ! Verbal
|
||||
{s = \\o => t.s ++ p.s ++
|
||||
case <t.t,t.a> of { --- IL guessed tenses
|
||||
<Pres,Simul> => cl.s ! Pres ! p.p ! o ;
|
||||
<Pres,Anter> => cl.s ! Past ! p.p ! o ;
|
||||
<x ,_ > => cl.s ! x ! p.p ! o
|
||||
}
|
||||
};
|
||||
|
||||
UseQCl t p qcl =
|
||||
{s = \\q =>
|
||||
case <t.t,t.a> of { --- IL guessed tenses
|
||||
<(Pres|Cond),Simul> => qcl.s ! ResAra.Pres ! p.p ! q ;
|
||||
<Fut ,_ > => qcl.s ! ResAra.Fut ! p.p ! q ;
|
||||
<_ ,_ > => qcl.s ! ResAra.Past ! p.p ! q
|
||||
{s = \\q => t.s ++ p.s ++
|
||||
case <t.t,t.a> of { --- IL guessed tenses
|
||||
<Pres,Simul> => qcl.s ! Pres ! p.p ! q ;
|
||||
<Pres,Anter> => qcl.s ! Past ! p.p ! q ;
|
||||
<x ,_ > => qcl.s ! x ! p.p ! q
|
||||
}
|
||||
};
|
||||
|
||||
-- UseRCl t a p cl = {s = \\r => t.s ++ a.s ++ p.s ++ cl.s ! t.t ! a.a ! p.p ! r} ;
|
||||
UseRCl t p cl = {s = \\agr,c => t.s ++ p.s ++ cl.s ! t.t ! p.p ! agr ! c} ;
|
||||
|
||||
UseSlash t p cl = UseCl t p (complClSlash cl) ;
|
||||
|
||||
AdvS adv s = s ** {s = \\o => adv.s ++ s.s ! o} ;
|
||||
}
|
||||
|
||||
@@ -4,8 +4,8 @@ concrete StructuralAra of Structural = CatAra **
|
||||
flags optimize=all ; coding=utf8 ;
|
||||
|
||||
lin
|
||||
above_Prep = ss "فَوْقَ" ;
|
||||
after_Prep = ss "بَعْدَ" ;
|
||||
above_Prep = mkPrep "فَوْقَ" ;
|
||||
after_Prep = mkPrep "بَعْدَ" ;
|
||||
all_Predet = mkPredet "كُلّ" True ;
|
||||
almost_AdA = ss "تَقْرِيباً";
|
||||
almost_AdN = ss "حَوَالي" ; -- or "تَقرِيبا"
|
||||
@@ -13,20 +13,20 @@ concrete StructuralAra of Structural = CatAra **
|
||||
-- always_AdV = ss "َلوَيس" ;
|
||||
and_Conj = ss "وَ" ** {n = Pl} ;
|
||||
-- because_Subj = ss "بعَُسي" ;
|
||||
before_Prep = ss "قَبْلَ" ;
|
||||
behind_Prep = ss "خَلْفَ" ;
|
||||
between_Prep = ss "بَيْنَ" ;
|
||||
before_Prep = mkPrep "قَبْلَ" ;
|
||||
behind_Prep = mkPrep "خَلْفَ" ;
|
||||
between_Prep = mkPrep "بَيْنَ" ;
|
||||
-- both7and_DConj = sd2 "بْته" "َند" ** {n = Pl} ;
|
||||
-- but_PConj = ss "بُت" ;
|
||||
by8agent_Prep = ss "بِ" ;
|
||||
by8means_Prep = ss "بِ" ;
|
||||
by8agent_Prep,
|
||||
by8means_Prep = biPrep ;
|
||||
can_VV = mkVV (mkV "طوع" FormX) ;
|
||||
-- can8know_VV = {
|
||||
-- s = table VVForm [["بي َبلي تْ"] ; "عَن" ; "عُْلد" ;
|
||||
-- ["بّن َبلي تْ"] ; ["بِنغ َبلي تْ"] ; "عَنءت" ; "عُْلدنءت"] ;
|
||||
-- isAux = True
|
||||
-- } ;
|
||||
during_Prep = ss "خِلَالَ" ;
|
||||
during_Prep = mkPrep "خِلَالَ" ;
|
||||
-- either7or_DConj = sd2 "ِتهر" "ْر" ** {n = Sg} ;
|
||||
everybody_NP = regNP "الجَمِيع" Pl ;
|
||||
every_Det = mkDet "كُلّ" Sg Const ;
|
||||
@@ -34,18 +34,23 @@ concrete StructuralAra of Structural = CatAra **
|
||||
-- everywhere_Adv = ss "ثريوهري" ;
|
||||
few_Det = mkDet "بَعض" Pl Const ;
|
||||
-- first_Ord = ss "فِرست" ;
|
||||
from_Prep = ss "مِنَ" ;
|
||||
he_Pron = mkPron "هُوَ" "هُ" "هُ" (Per3 Masc Sg) ;
|
||||
for_Prep = liPrep ;
|
||||
from_Prep = mkPrep "مِنَ" ;
|
||||
he_Pron = ResAra.he_Pron ;
|
||||
here_Adv = ss "هُنا" ;
|
||||
-- here7to_Adv = ss ["تْ هري"] ;
|
||||
-- here7from_Adv = ss ["فرْم هري"] ;
|
||||
how_IAdv = ss "كَيفَ" ;
|
||||
-- how8many_IDet = mkDet "كَمْ" Pl Const ; -- IL: check (was ["هْو مَني"]) ;
|
||||
-- if_Subj = ss "ِف" ;
|
||||
in8front_Prep = ss "مُقَابِلَ" ;
|
||||
i_Pron = mkPron "أَنَا" "نِي" "ِي" (Per1 Sing);
|
||||
in_Prep = ss "فِي" ;
|
||||
it_Pron = mkPron "ِت" "ِت" "ِتس" (Per3 Masc Sg); -- IL: check
|
||||
how8many_IDet = {
|
||||
s = \\g,s,c => "كَمْ عَدَد" + caseTbl ! c ;
|
||||
n = Pl ; d = Def
|
||||
} ; -- IL
|
||||
|
||||
if_Subj = mkSubj "إِذَا" Verbal ;
|
||||
in8front_Prep = mkPrep "مُقَابِلَ" ;
|
||||
i_Pron = ResAra.i_Pron ;
|
||||
in_Prep = mkPrep "فِي" ;
|
||||
it_Pron = emptyNP ** {s = \\_ => "هَذَا"} ; -- was: it_Pron = mkPron "ِت" "ِت" "ِتس" (Per3 Masc Sg);
|
||||
-- less_CAdv = ss "لسّ" ;
|
||||
many_Det = mkDet "جَمِيع" Pl Const ;
|
||||
-- more_CAdv = ss "مْري" ;
|
||||
@@ -57,64 +62,65 @@ concrete StructuralAra of Structural = CatAra **
|
||||
-- isAux = True
|
||||
-- } ;
|
||||
no_Utt = {s = \\_ => "لا"} ;
|
||||
on_Prep = ss "عَلى" ;
|
||||
--- DEPREC one_Quant = mkQuantNum "واحِد" Sg Indef ;
|
||||
on_Prep = mkPrep "عَلَى" ;
|
||||
only_Predet = mkPredet "فَقَط" False;
|
||||
-- or_Conj = ss "ْر" ** {n = Sg} ;
|
||||
-- otherwise_PConj = ss "ْتهروِسي" ;
|
||||
part_Prep = ss "مِنَ" ;
|
||||
part_Prep = mkPrep "مِنَ" ;
|
||||
-- please_Voc = ss "ةلَسي" ;
|
||||
possess_Prep = ss "ل" ;
|
||||
possess_Prep = liPrep ;
|
||||
-- quite_Adv = ss "قُِتي" ;
|
||||
she_Pron = mkPron "هِيَ" "ها" "ها" (Per3 Fem Sg) ;
|
||||
she_Pron = ResAra.she_Pron ;
|
||||
-- so_AdA = ss "سْ" ;
|
||||
somebody_NP = regNP "أَحَد" Sg ;
|
||||
someSg_Det = mkDet "أَحَد" Pl Const ;
|
||||
someSg_Det = mkDet "أَحَد" Sg Const ;
|
||||
somePl_Det = mkDet "بَعض" Pl Const ;
|
||||
something_NP = regNP "شَيْء" Sg ;
|
||||
-- somewhere_Adv = ss "سْموهري" ;
|
||||
that_Quant = mkQuant3 "ذَلِكَ" "تِلكَ" "أُلٱِكَ" Def;
|
||||
that_Subj = mkSubj "أنَّ" ;
|
||||
----b that_NP = indeclNP "ذَلِكَ" Sg ;
|
||||
there_Adv = ss "هُناك" ;
|
||||
-- there7to_Adv = ss "تهري" ;
|
||||
-- there7from_Adv = ss ["فرْم تهري"] ;
|
||||
-- therefore_PConj = ss "تهرفْري" ;
|
||||
----b these_NP = indeclNP "هَؤُلَاء" Pl ;
|
||||
they_Pron = mkPron "هُمْ" "هُمْ" "هُمْ" (Per3 Masc Pl) ;
|
||||
they_Pron = theyMasc_Pron ;
|
||||
this_Quant = mkQuant7 "هَذا" "هَذِهِ" "هَذَان" "هَذَيْن" "هَاتَان" "هَاتَيْن" "هَؤُلَاء" Def;
|
||||
----b this_NP = indeclNP "هَذا" Sg ;
|
||||
----b those_NP = indeclNP "هَؤُلَاءكَ" Pl ;
|
||||
through_Prep = ss "عَبْرَ" ;
|
||||
through_Prep = mkPrep "عَبْرَ" ;
|
||||
-- too_AdA = ss "تّْ" ;
|
||||
to_Prep = ss "إِلى" ;
|
||||
under_Prep = ss "تَحْتَ" ;
|
||||
to_Prep = mkPrep "إِلى" ;
|
||||
under_Prep = mkPrep "تَحْتَ" ;
|
||||
-- very_AdA = ss "ثري" ;
|
||||
-- want_VV = P.mkVV (P.regV "وَنت") ;
|
||||
we_Pron = mkPron "نَحنُ" "نا" "نا" (Per1 Plur) ;
|
||||
whatPl_IP = mkIP "ماذا" Pl ;
|
||||
whatSg_IP = mkIP "ماذا" Sg ;
|
||||
want_VV = mkVV (mkV "رود" FormIV) ;
|
||||
we_Pron = ResAra.we_Pron ;
|
||||
whatPl_IP = mkIP "ما" "ماذا" Pl ;
|
||||
whatSg_IP = mkIP "ما" "ماذا" Sg ;
|
||||
when_IAdv = ss "مَتَى" ;
|
||||
-- when_Subj = ss "وهن" ;
|
||||
when_Subj = mkSubj "عِنْدَمَا" Verbal ;
|
||||
where_IAdv = ss "أَينَ" ;
|
||||
which_IQuant = {
|
||||
s = \\s,c => case <c,s> of {
|
||||
<Nom,Indef> => "أيٌّ" ;
|
||||
<Nom,_> => "أيُّ" ;
|
||||
<Bare,_> => "أيّ" ;
|
||||
<Nom,Indef> => "أيٌّ" ;
|
||||
<Nom,_> => "أيُّ" ;
|
||||
<Acc,Indef> => "أيّاً" ;
|
||||
<Acc,_> => "أيَّ" ;
|
||||
<Gen,Indef> => "أيٍّ" ;
|
||||
<Gen,_> => "أيِّ"
|
||||
<Acc,_> => "أيَّ" ;
|
||||
<_Gen,Indef> => "أيٍّ" ;
|
||||
<_Gen,_> => "أيِّ"
|
||||
}
|
||||
} ;
|
||||
whoSg_IP = mkIP "مَنْ" Sg ;
|
||||
whoPl_IP = mkIP "مَنْ" Pl ;
|
||||
whoSg_IP = mkIP "مَنْ" "مَنْ" Sg ;
|
||||
whoPl_IP = mkIP "مَنْ" "مَنْ" Pl ;
|
||||
-- why_IAdv = ss "وهي" ;
|
||||
without_Prep = ss "بِدُونِ" ;
|
||||
with_Prep = ss "مَع" ;
|
||||
without_Prep = mkPrep "بِدُونِ" ;
|
||||
with_Prep = mkPrep "مَع" ;
|
||||
yes_Utt = {s = \\_ => "نَعَم"} ;
|
||||
youSg_Pron = mkPron "أَنتَ" "كَ" "كَ" (Per2 Masc Sg) ;
|
||||
youPl_Pron = mkPron "أَنتُمْ" "كُمْ" "كُمْ" (Per2 Masc Sg) ;
|
||||
youPol_Pron = mkPron "أَنتِ" "كِ" "كِ" (Per2 Fem Sg) ;
|
||||
youSg_Pron = youSgMasc_Pron ;
|
||||
youPl_Pron = youPlMasc_Pron ;
|
||||
youPol_Pron = youPlFem_Pron ; -- arbitrary?
|
||||
|
||||
have_V2 = dirV2 (regV "يَملِك") ;
|
||||
|
||||
|
||||
@@ -9,25 +9,27 @@ lin
|
||||
FloatPN i = {s = \\c => i.s ; g = Masc ; h = NoHum } ; --IL
|
||||
NumPN i = {s = \\c => uttNum i ! Masc ; g = Masc ; h = NoHum } ; --IL
|
||||
-- CNIntNP cn i = {
|
||||
-- s = \\c => cn.s ! Sg ! Def ! c ++ uttNum i ! Masc ;
|
||||
-- s = \\c => cn2str cn Sg Def c ++ uttNum i ! cn.g ;
|
||||
-- a = dummyAgrP3 Sg ;
|
||||
-- } ;
|
||||
--IL TODO: check out some opers regarding state in ResAra. These are just dummy values.
|
||||
CNSymbNP det cn xs =
|
||||
let g = cn.g ; n = sizeToNumber det.n in {
|
||||
s = \\c => det.s ! NoHum ! g ! c ++ cn.s ! Sg ! Def ! c ++ cn.adj ! n ! Def ! c ++ xs.s; ----IL word order?? Seems to be nontrivial according to ResAra comments.
|
||||
s = \\c => det.s ! NoHum ! g ! c ++ cn2str cn n Def c ++ xs.s; ----IL word order?? Seems to be nontrivial according to ResAra comments.
|
||||
a = dummyAgrP3 n ;
|
||||
empty = []
|
||||
} ;
|
||||
CNNumNP cn i = {
|
||||
s = \\c => cn.s ! Sg ! Def ! c ++ uttNum i ! Masc ;
|
||||
s = \\c => cn2str cn Sg Def c ++ uttNum i ! cn.g ;
|
||||
a = dummyAgrP3 Sg ;
|
||||
empty = []
|
||||
} ;
|
||||
|
||||
SymbS sy = sy ;
|
||||
SymbS sy = {s = \\_ => sy.s} ;
|
||||
|
||||
|
||||
SymbOrd n = {s = \\_,_,_ => n.s ; n = None } ;
|
||||
SymbNum n = SymbOrd n ** { n = ThreeTen } ; ----IL
|
||||
SymbOrd n = {s = \\_,_,_ => n.s ; n = One ; isNum = False } ;
|
||||
SymbNum n = SymbOrd n ** { n = ThreeTen ; isNum = True } ; ----IL
|
||||
|
||||
lincat
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
concrete VerbAra of Verb = CatAra ** open Prelude, ResAra in {
|
||||
concrete VerbAra of Verb = CatAra ** open Prelude, ResAra, ParamX in {
|
||||
|
||||
flags optimize=all_subs ;
|
||||
|
||||
@@ -6,47 +6,96 @@ concrete VerbAra of Verb = CatAra ** open Prelude, ResAra in {
|
||||
UseV = predV ;
|
||||
|
||||
SlashVV vv vps = vps ** predV vv ; ----IL
|
||||
SlashV2a v = predVSlash v ;
|
||||
Slash3V3 v np = insertObj np (predVSlash v) ** {c2 = v.c3};
|
||||
|
||||
-- : V2V -> VP -> VPSlash ; -- beg (her) to go
|
||||
SlashV2V v2v vp = let v2vVP = predV v2v in -- IL
|
||||
vp ** {
|
||||
s = v2vVP.s ;
|
||||
agrObj = \\pgn => v2v.c3.s -- أَنْ
|
||||
++ vp.s ! pgn ! VPImpf Cnj ; -- this will agree with the object added by ComplSlash
|
||||
isPred = False ;
|
||||
c2 = v2v.c2 ; -- preposition for the direct object
|
||||
sc = v2v.sc
|
||||
} ;
|
||||
|
||||
-- : V2V -> NP -> VPSlash -> VPSlash ; -- beg me to buy
|
||||
SlashV2VNP v2v np vps = let v2vVP = slashV2 v2v in -- IL
|
||||
vps ** {
|
||||
s = \\pgn,vpf => v2vVP.s ! pgn ! vpf -- main verb agrees with subject
|
||||
++ bindIfPron np v2vVP
|
||||
++ v2v.c3.s -- أَنْ
|
||||
++ vps.s ! np.a.pgn ! VPImpf Cnj -- verb from old VP agrees with object
|
||||
++ vps.obj.s ; -- otherwise obj appears in a weird place /IL
|
||||
obj = emptyObj ;
|
||||
isPred = False ;
|
||||
-- preposition for the direct object comes from VP
|
||||
sc = v2v.sc
|
||||
} ;
|
||||
|
||||
SlashV2a = slashV2 ;
|
||||
Slash3V3 v np = insertObj np (slashV2 v) ** {c2 = v.c3 ; agrObj = \\_ => []};
|
||||
|
||||
ComplSlash vp np = insertObj np vp ;
|
||||
|
||||
-- Complv3 v np np2 = insertObj np2 (insertObj np (predV v)) ;
|
||||
|
||||
{-{s = \\_ => v.c2 ++ np.s ! Acc ++ v.c3 ++ np2.s ! Acc ;
|
||||
a = {pgn = Per3 Masc Sg ; isPron = False} } --FIXME
|
||||
(predV v) ;-}
|
||||
|
||||
ComplVV vv vp = let vvVP = predV vv in --- IL
|
||||
-- : VV -> VP -> VP ; -- want to run
|
||||
ComplVV vv vp = let vvVP = predV vv in -- IL
|
||||
vp ** {
|
||||
s = \\pgn,vpf => vvVP.s ! pgn ! vpf
|
||||
++ vv.c2 -- أَنْ
|
||||
++ vp.s ! pgn ! VPImpf Cnj
|
||||
++ vv.c2.s -- أَنْ
|
||||
++ vp.s ! pgn ! VPImpf Cnj ;
|
||||
isPred = False ;
|
||||
sc = vv.sc
|
||||
} ;
|
||||
|
||||
-- ComplVS v s = insertObj (\\_ => conjThat ++ s.s) (predV v) ;
|
||||
-- ComplVQ v q = insertObj (\\_ => q.s ! QIndir) (predV v) ;
|
||||
--
|
||||
-- ComplVA v ap = insertObj (ap.s) (predV v) ;
|
||||
-- : VS -> S -> VP ; -- say that she runs
|
||||
ComplVS vs s = predV vs ** { -- IL
|
||||
obj = emptyObj ** {s = s.s ! Subord}
|
||||
} ;
|
||||
|
||||
-- : VQ -> QS -> VP ; -- wonder who runs
|
||||
ComplVQ vq qs = predV vq ** { -- IL
|
||||
obj = emptyObj ** {s = qs.s ! QIndir}
|
||||
} ;
|
||||
|
||||
-- : VA -> AP -> VP ; -- they become red
|
||||
ComplVA v ap = predV v ** {pred = CompAP ap} ;
|
||||
|
||||
-- ComplV2A v np ap =
|
||||
-- insertObj (\\_ => v.c2 ++ np.s ! Acc ++ ap.s ! np.a) (predV v) ;
|
||||
--
|
||||
UseComp xabar = kaan xabar ;
|
||||
UseComp xabar =
|
||||
case xabar.isNP of {
|
||||
False => kaan xabar ;
|
||||
True => predV copula ** {obj = xabar.obj ; isPred=True}
|
||||
} ;
|
||||
|
||||
UseCopula = predV copula ;
|
||||
|
||||
-- : VP -> Prep -> VPSlash ; -- live in (it)
|
||||
VPSlashPrep vp prep = vp ** {
|
||||
c2 = prep ;
|
||||
agrObj = \\_ => []
|
||||
} ;
|
||||
|
||||
AdvVP vp adv = insertStr adv.s vp ;
|
||||
|
||||
-- AdVVP adv vp = insertAdV adv.s vp ;
|
||||
AdVVP adv = insertStr adv.s ;
|
||||
AdVVPSlash adv vps = vps ** insertStr adv.s vps ;
|
||||
--
|
||||
-- ReflV2 v = insertObj (\\a => v.c2 ++ reflPron ! a) (predV v) ;
|
||||
--
|
||||
PassV2 v = kaan {s = \\_,_ => v.s ! VPPart} ; ---- IL guessed
|
||||
PassV2 = passPredV ;
|
||||
--
|
||||
-- UseVS, UseVQ = \vv -> {s = vv.s ; c2 = [] ; isRefl = vv.isRefl} ; -- no
|
||||
|
||||
CompCN cn = {s = \\agr,c => cn.s ! agr.n ! Indef ! c} ; ----IL
|
||||
CompAP ap = {s = \\agr,c => ap.s ! Hum ! agr.g ! agr.n ! Indef ! c} ; --FIXME
|
||||
CompNP np = {s = \\_,c => np.s ! c};
|
||||
CompAdv a = {s = \\_,_ => a.s} ;
|
||||
CompAP ap = {s = \\agr,c => ap.s ! Hum ! agr.g ! agr.n ! Indef ! c ; --FIXME
|
||||
obj = emptyObj ; isNP = False} ;
|
||||
CompAdv a = {s = \\_,_ => a.s ;
|
||||
obj = emptyObj ; isNP = False} ;
|
||||
|
||||
CompCN cn = {s = \\agr,c => cn2str cn agr.n Indef Nom ;
|
||||
obj = emptyObj ; isNP = False} ;
|
||||
CompNP np = {s = \\_,_ => [] ; obj = np ** {s = np.s ! Nom} ; isNP = True} ;
|
||||
--
|
||||
--
|
||||
}
|
||||
|
||||
@@ -21,7 +21,9 @@ incomplete concrete AdjectiveBantu of Adjective =
|
||||
} ;
|
||||
|
||||
ComplA2 a np = {
|
||||
|
||||
s = \\g,n => a.s !AComp g n ++ a.c2 ++ np.s ! NCase Nom;
|
||||
|
||||
isPre = False
|
||||
} ;
|
||||
ReflA2 a ={
|
||||
|
||||
@@ -13,8 +13,10 @@ incomplete concrete AdverbBantu of Adverb =
|
||||
} ;
|
||||
|
||||
PrepNP prep np = let agr = complAgr np.a
|
||||
|
||||
in {s = prep.s!agr.n!agr.g ++ (np.s ! NCase Loc ) } ;
|
||||
AdAdv = cc2 ;
|
||||
|
||||
PositAdAAdj a = {s = a.s !AAdj G1 Sg } ;
|
||||
|
||||
|
||||
|
||||
@@ -12,7 +12,9 @@ resource CommonBantu = ParamX ** open Prelude in {
|
||||
|
||||
param
|
||||
Case = Nom | Loc ;
|
||||
|
||||
NPCase = NCase Case | NPoss ;
|
||||
|
||||
CardOrd = NCard | NOrd ;
|
||||
|
||||
oper
|
||||
|
||||
@@ -4,10 +4,11 @@ interface DiffBantu = open CommonBantu, Prelude in {
|
||||
flags coding=utf8 ;
|
||||
|
||||
|
||||
|
||||
oper
|
||||
Gender : PType ;
|
||||
firstGender : Gender ;
|
||||
secondGender : Gender ; -- G2
|
||||
secondGender : Gender ; -- G2
|
||||
|
||||
Noun : Type = {s : Number => Case => Str ; g : Gender};
|
||||
CNoun : Type = {s : Number => Case => Str ; g : Gender; s2 : Number => Str};
|
||||
@@ -37,8 +38,10 @@ oper
|
||||
} ;
|
||||
verbAgr : Agr -> {g : Gender ; n : Number ; p : Person} = \a -> case a of {
|
||||
Ag g n p => {g = g ; n = n ; p = p}
|
||||
|
||||
} ; --
|
||||
|
||||
|
||||
detAgr : Agr -> {g : Gender ; p : Person} = \a -> case a of {
|
||||
Ag g _ p => {g = g; p = p}
|
||||
} ;
|
||||
@@ -70,6 +73,7 @@ param
|
||||
DetForm = Sub | Obj Gender ;
|
||||
|
||||
|
||||
|
||||
oper
|
||||
conjThan : Str ; --one of them in bantu
|
||||
conjThat : Str ;
|
||||
@@ -82,8 +86,10 @@ param
|
||||
DForm ;
|
||||
AForm;
|
||||
oper
|
||||
|
||||
ProunSgprefix : Gender -> Str ;
|
||||
ProunPlprefix : Gender -> Str ;
|
||||
|
||||
Cardoneprefix : Gender -> Str;
|
||||
Cardtwoprefix : Gender -> Str;
|
||||
Allpredetprefix : Gender -> Str;
|
||||
|
||||
@@ -23,7 +23,9 @@ lin
|
||||
n=agr.n; g=agr.g
|
||||
in {s = table {
|
||||
NCase c => pron.s!Pers ;
|
||||
|
||||
NPoss => pron.s!Poss n g };
|
||||
|
||||
a = Ag agr.g agr.n agr.p;
|
||||
} ;
|
||||
-- Predet -> NP -> NP
|
||||
@@ -140,11 +142,13 @@ lin
|
||||
-- PossNP : CN -> NP -> CN
|
||||
-- e.g. 'house of Paris', 'house of mine'
|
||||
PossNP cn np =let agr = detAgr np.a in
|
||||
|
||||
{s = \\n,c => cn.s ! n ! Nom ++ possess_Prep.s! n!cn.g ++ np.s ! NPoss;
|
||||
s2 =\\n => []; g = cn.g} ;
|
||||
-- PartNP : CN -> NP -> CN
|
||||
-- e.g. 'glass of wine'
|
||||
PartNP cn np = {s = \\n,c => cn.s ! n ! Nom ++ part_Prep.s! n!cn.g ++ np.s ! NCase Nom ; s2 =\\n => []; g = cn.g} ;
|
||||
|
||||
|
||||
-- CountNP : Det -> NP -> NP
|
||||
-- e.g. 'three of them', 'some of the boys'
|
||||
@@ -161,8 +165,10 @@ lin
|
||||
|
||||
DetDAP d = { s=d.s; n=d.n };
|
||||
|
||||
|
||||
-- ApposCN cn np = let agr = complAgr np.a in
|
||||
-- {s = \\n,c => np.s ! NCase Nom --++ possess_Prep.s!n!agr.g
|
||||
-- ++ cn.s !n ! Nom ; s2 =\\n => ""; g = cn.g} ;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -18,7 +18,9 @@ oper
|
||||
{s : NPCase => Str ; a : Agr} = \i,my,g,n,p ->
|
||||
{ s = table {
|
||||
NCase Nom => i ;
|
||||
|
||||
NCase Loc | NPoss => my -- works for normal genitives, "whose", etc.
|
||||
|
||||
} ;
|
||||
a = Ag g n p ;
|
||||
};
|
||||
|
||||
@@ -2019,7 +2019,7 @@ oper
|
||||
(v0+"˙ő")
|
||||
(v0+"ŕë")
|
||||
(v0+"˙ë")
|
||||
(v0+"-")
|
||||
(v0+"ŕí")
|
||||
(v0+"˙ů")
|
||||
(v0+"č")
|
||||
(v0+"ŕíĺ") ;
|
||||
|
||||
@@ -1,165 +0,0 @@
|
||||
--# -path=alltenses:../english:../translator:../abstract
|
||||
concrete ParseBul of ParseEngAbs =
|
||||
TenseX - [IAdv, CAdv],
|
||||
CatBul,
|
||||
NounBul - [PPartNP],
|
||||
AdjectiveBul,
|
||||
NumeralBul,
|
||||
SymbolBul [PN, Symb, String, CN, Card, NP, MkSymb, SymbPN, CNNumNP],
|
||||
ConjunctionBul,
|
||||
VerbBul - [SlashV2V, PassV2, UseCopula, ComplVV],
|
||||
AdverbBul,
|
||||
PhraseBul,
|
||||
SentenceBul,
|
||||
QuestionBul,
|
||||
RelativeBul,
|
||||
IdiomBul [NP, VP, Tense, Cl, ProgrVP, ExistNP],
|
||||
ExtraBul [NP, Quant, VPSlash, VP, Tense, GenNP, PassVPSlash,
|
||||
Temp, Pol, Conj, VPS, ListVPS, S, MkVPS, BaseVPS, ConsVPS, ConjVPS, PredVPS,
|
||||
VPI, VPIForm, VPIInf, VPIPresPart, ListVPI, VV, MkVPI, BaseVPI, ConsVPI, ConjVPI, ComplVPIVV,
|
||||
ComplSlashPartLast,
|
||||
ClSlash, RCl, EmptyRelSlash],
|
||||
DocumentationBul,
|
||||
DictionaryBul **
|
||||
open ResBul, Prelude in {
|
||||
|
||||
flags
|
||||
literal=Symb ;
|
||||
coding = utf8 ;
|
||||
|
||||
lin
|
||||
CompoundCN num noun cn = {
|
||||
s = \\nf => num.s ! CFNeut Indef ++ (noun.rel ! nform2aform nf cn.g) ++ (cn.s ! (indefNForm nf)) ;
|
||||
g = cn.g
|
||||
} ;
|
||||
|
||||
GerundN v = {
|
||||
s = \\nform => v.s ! Imperf ! VNoun nform ;
|
||||
rel = \\aform => v.s ! Imperf ! VPresPart aform ++
|
||||
case v.vtype of {
|
||||
VMedial c => reflClitics ! c;
|
||||
_ => []
|
||||
};
|
||||
g = ANeut
|
||||
} ;
|
||||
|
||||
GerundAP v = {
|
||||
s = \\aform => v.s ! Imperf ! VPresPart aform ++
|
||||
case v.vtype of {
|
||||
VMedial c => reflClitics ! c;
|
||||
_ => []
|
||||
};
|
||||
adv = v.s ! Imperf ! VPresPart (ASg Neut Indef);
|
||||
isPre = True
|
||||
} ;
|
||||
|
||||
PastPartAP v = {
|
||||
s = \\aform => v.s ! Perf ! VPassive aform ;
|
||||
adv = v.s ! Perf ! VPassive (ASg Neut Indef);
|
||||
isPre = True
|
||||
} ;
|
||||
|
||||
PositAdVAdj a = {s = a.adv} ;
|
||||
|
||||
that_RP = {
|
||||
s = whichRP
|
||||
} ;
|
||||
|
||||
UseQuantPN q pn = { s = table {
|
||||
RObj Dat => "на" ++ pn.s;
|
||||
_ => pn.s
|
||||
} ;
|
||||
a = {gn = GSg pn.g; p = P3};
|
||||
p = q.p
|
||||
} ;
|
||||
|
||||
PastPartRS ant pol vp = {
|
||||
s = \\agr =>
|
||||
ant.s ++ pol.s ++
|
||||
vp.ad.s ++
|
||||
case pol.p of {Pos => ""; Neg => "не"} ++
|
||||
case ant.a of {Simul => ""; Anter => auxBe ! VPerfect (aform agr.gn Indef (RObj Acc))} ++
|
||||
vp.s ! Perf ! VPassive (aform agr.gn Indef (RObj Acc)) ++
|
||||
case vp.vtype of {
|
||||
VMedial c => reflClitics ! c;
|
||||
_ => []
|
||||
} ++
|
||||
vp.compl1 ! agr ++ vp.compl2 ! agr ;
|
||||
} ;
|
||||
|
||||
PresPartRS ant pol vp = {
|
||||
s = \\agr =>
|
||||
ant.s ++ pol.s ++
|
||||
vp.ad.s ++
|
||||
case pol.p of {Pos => ""; Neg => "не"} ++
|
||||
case ant.a of {Simul => ""; Anter => auxBe ! VPerfect (aform agr.gn Indef (RObj Acc))} ++
|
||||
vp.s ! Imperf ! VPresPart (aform agr.gn Indef (RObj Acc)) ++
|
||||
case vp.vtype of {
|
||||
VMedial c => reflClitics ! c;
|
||||
_ => []
|
||||
} ++
|
||||
vp.compl ! agr ;
|
||||
} ;
|
||||
|
||||
SlashV2V vv ant p vp =
|
||||
insertSlashObj2 (\\agr => ant.s ++ p.s ++ vv.c3.s ++
|
||||
daComplex ant.a (orPol p.p vp.p) vp ! Perf ! agr)
|
||||
Pos
|
||||
(slashV vv vv.c2) ;
|
||||
|
||||
ComplVV vv ant p vp =
|
||||
insertObj (\\agr => ant.s ++ p.s ++
|
||||
case vv.typ of {
|
||||
VVInf => daComplex ant.a p.p vp ! Perf ! agr;
|
||||
VVGerund => gerund vp ! Imperf ! agr
|
||||
}) vp.p
|
||||
(predV vv) ;
|
||||
|
||||
PredVPosv np vp = {
|
||||
s = \\t,a,p,o =>
|
||||
let
|
||||
subj = np.s ! (case vp.vtype of {
|
||||
VNormal => RSubj ;
|
||||
VMedial _ => RSubj ;
|
||||
VPhrasal c => RObj c}) ;
|
||||
verb : Bool => Str
|
||||
= \\q => vpTenses vp ! t ! a ! p ! np.a ! q ! Perf ;
|
||||
compl = vp.compl ! np.a
|
||||
in case o of {
|
||||
Main => compl ++ subj ++ verb ! False ;
|
||||
Inv => verb ! False ++ compl ++ subj ;
|
||||
Quest => compl ++ subj ++ verb ! True
|
||||
}
|
||||
} ;
|
||||
|
||||
CompS s = {s = \\_ => "че" ++ s.s; p = Pos} ;
|
||||
CompQS qs = {s = \\_ => qs.s ! QIndir; p = Pos} ;
|
||||
CompVP ant p vp = {s = let p' = case vp.p of {
|
||||
Neg => Neg;
|
||||
Pos => p.p
|
||||
}
|
||||
in \\agr => ant.s ++ p.s ++
|
||||
daComplex ant.a p' vp ! Perf ! agr;
|
||||
p = Pos
|
||||
} ;
|
||||
|
||||
VPSlashVS vs vp =
|
||||
let vp = insertObj (daComplex Simul Pos vp ! Perf) vp.p (predV vs)
|
||||
in { s = vp.s;
|
||||
ad = vp.ad;
|
||||
compl1 = \\_ => "";
|
||||
compl2 = vp.compl;
|
||||
vtype = vp.vtype;
|
||||
p = vp.p;
|
||||
c2 = {s=""; c=Acc}
|
||||
} ;
|
||||
|
||||
ApposNP np1 np2 = {
|
||||
s = \\role => np1.s ! role ++ comma ++ np2.s ! RSubj ;
|
||||
a = np1.a ;
|
||||
p = np1.p
|
||||
} ;
|
||||
|
||||
UttAdV adv = adv;
|
||||
|
||||
}
|
||||
@@ -258,6 +258,7 @@ oper
|
||||
|
||||
mkV0 : V -> V0 ; --%
|
||||
mkVS : V -> VS ;
|
||||
subjVS : V -> VS ;
|
||||
mkV2S : V -> Prep -> V2S ;
|
||||
mkVV : V -> VV ; -- plain infinitive: "vull parlar"
|
||||
deVV : V -> VV ; -- "acabar de parlar"
|
||||
@@ -448,6 +449,7 @@ oper
|
||||
|
||||
mkV0 v = v ** {lock_V0 = <>} ;
|
||||
mkVS v = v ** {m = \\_ => Indic ; lock_VS = <>} ; ---- more moods
|
||||
subjVS v = v ** {m = \\_ => Conjunct ; lock_VS = <>} ;
|
||||
mkV2S v p = mk2V2 v p ** {mn,mp = Indic ; lock_V2S = <>} ;
|
||||
mkVV v = v ** {c2 = complAcc ; lock_VV = <>} ;
|
||||
deVV v = v ** {c2 = complGen ; lock_VV = <>} ;
|
||||
|
||||
@@ -92,9 +92,9 @@ concrete CatEng of Cat = CommonX - [Pol,SC,CAdv] ** open ResEng, Prelude in {
|
||||
|
||||
-- Open lexical classes, e.g. Lexicon
|
||||
|
||||
V, VS, VQ, VA = Verb ; -- = {s : VForm => Str} ;
|
||||
V2, V2A, V2Q, V2S = Verb ** {c2 : Str} ;
|
||||
V3 = Verb ** {c2, c3 : Str} ;
|
||||
V, VS, VQ, VA = Verb ;
|
||||
V2, V2Q, V2S = Verb ** {c2 : Str} ;
|
||||
V2A,V3 = Verb ** {c2, c3 : Str} ;
|
||||
VV = {s : VVForm => Str ; p : Str ; typ : VVType} ;
|
||||
V2V = Verb ** {c2,c3 : Str ; typ : VVType} ;
|
||||
|
||||
@@ -114,8 +114,8 @@ concrete CatEng of Cat = CommonX - [Pol,SC,CAdv] ** open ResEng, Prelude in {
|
||||
VPSlash = \s -> predV {s = \\_ => s; p = ""; isRefl = False} ** {c2 = ""; gapInMiddle = False; missingAdv = False } ;
|
||||
|
||||
V, VS, VQ, VA = \s -> {s = \\_ => s; p = ""; isRefl = False} ;
|
||||
V2, V2A, V2Q, V2S = \s -> {s = \\_ => s; p = ""; isRefl = False; c2=""} ;
|
||||
V3 = \s -> {s = \\_ => s; p = ""; isRefl = False; c2,c3=""} ;
|
||||
V2, V2Q, V2S = \s -> {s = \\_ => s; p = ""; isRefl = False; c2=""} ;
|
||||
V3, V2A = \s -> {s = \\_ => s; p = ""; isRefl = False; c2,c3=""} ;
|
||||
VV = \s -> {s = \\_ => s; p = ""; isRefl = False; typ = VVInf} ;
|
||||
V2V = \s -> {s = \\_ => s; p = ""; isRefl = False; c2,c3="" ; typ = VVInf} ;
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
--# -path=.:../abstract
|
||||
|
||||
concrete ConstructionEng of Construction = CatEng **
|
||||
open SyntaxEng, SymbolicEng, ParadigmsEng, (L = LexiconEng), (E = ExtendEng), (G = GrammarEng), (R = ResEng), (S = StructuralEng), Prelude in {
|
||||
open SyntaxEng, SymbolicEng, ParadigmsEng, (L = LexiconEng), (E = ExtendEng), (G = GrammarEng), (R = ResEng), (Sy = SyntaxEng), (S = StructuralEng), Prelude in {
|
||||
|
||||
|
||||
lin
|
||||
@@ -62,16 +62,62 @@ oper from_where_IAdv : IAdv = lin IAdv (ss "from where") ;
|
||||
|
||||
lincat
|
||||
Timeunit = N ;
|
||||
Hour = {s : Str ; am : Bool} ;
|
||||
Weekday = N ;
|
||||
Monthday = NP ;
|
||||
Month = N ;
|
||||
Year = NP ;
|
||||
lin
|
||||
timeunitAdv n time =
|
||||
let n_card : Card = n ;
|
||||
n_hours_NP : NP = mkNP n_card time ;
|
||||
in SyntaxEng.mkAdv for_Prep n_hours_NP | mkAdv (n_hours_NP.s ! R.npNom) ;
|
||||
|
||||
lin
|
||||
timeunitAdv n time =
|
||||
let n_card : Card = n ;
|
||||
n_hours_NP : NP = mkNP n_card time ;
|
||||
in Sy.mkAdv for_Prep n_hours_NP | mkAdv (n_hours_NP.s ! R.npNom) ;
|
||||
|
||||
timeunitRange l u time = {s = l.s ! True ! R.Nom ++ to_Prep.s ++ u.s ! True ! R.Nom ++ time.s ! R.Pl ! R.Nom} ;
|
||||
|
||||
oneHour = mkHour "1" True ;
|
||||
twoHour = mkHour "2" True ;
|
||||
threeHour = mkHour "3" True ;
|
||||
fourHour = mkHour "4" True ;
|
||||
fiveHour = mkHour "5" True ;
|
||||
sixHour = mkHour "6" True ;
|
||||
sevenHour = mkHour "7" True ;
|
||||
eightHour = mkHour "8" True ;
|
||||
nineHour = mkHour "9" True ;
|
||||
tenHour = mkHour "10" True ;
|
||||
elevenHour = mkHour "11" True ;
|
||||
twelveHour = mkHour "12" False ;
|
||||
thirteenHour = mkHour "1" False ;
|
||||
fourteenHour = mkHour "2" False ;
|
||||
fifteenHour = mkHour "3" False ;
|
||||
sixteenHour = mkHour "4" False ;
|
||||
seventeenHour = mkHour "5" False ;
|
||||
eighteenHour = mkHour "6" False ;
|
||||
nineteenHour = mkHour "7" False ;
|
||||
twentyHour = mkHour "8" False ;
|
||||
twentyOneHour = mkHour "9" False ;
|
||||
twentyTwoHour = mkHour "10" False ;
|
||||
twentyThreeHour = mkHour "11" False ;
|
||||
twentyFourHour = mkHour "12" True ;
|
||||
|
||||
timeHour h = Sy.mkAdv at_Prep (symb (h.s ++ ampm ! h.am)) ;
|
||||
timeHourMinute h m = let
|
||||
min = m.s ! True ! R.Nom
|
||||
in
|
||||
Sy.mkAdv at_Prep (symb (h.s ++ min ++ ampm ! h.am)) ;
|
||||
|
||||
oper
|
||||
mkHour : Str -> Bool -> {s : Str ; am : Bool} ;
|
||||
mkHour n am = Sy.mkUtt (Sy.mkCard n) ** {am = am} ;
|
||||
|
||||
at_Prep : Prep ;
|
||||
at_Prep = mkPrep "at" ;
|
||||
|
||||
ampm : Bool => Str ;
|
||||
ampm = table {True => "a.m." ; False => "p.m."} ;
|
||||
|
||||
lin
|
||||
weekdayPunctualAdv w = SyntaxEng.mkAdv on_Prep (mkNP w) ; -- on Sunday
|
||||
weekdayHabitualAdv w = SyntaxEng.mkAdv on_Prep (mkNP aPl_Det w) ; -- on Sundays
|
||||
weekdayNextAdv w = SyntaxEng.mkAdv (mkPrep "next") (mkNP w) ; -- next Sunday
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
* {"not"} PART neg head
|
||||
* {"has","had","have","will","would","do","does","did"} AUX aux head
|
||||
CompAP {"is","are","am","was","been","be"} VERB cop head
|
||||
CompCN {"is","are","am","was","been","be"} VERB cop head
|
||||
CompAP {"is","are","am","was","been","be"} VERB cop head
|
||||
CompAdv {"is","are","am","was","been","be"} VERB cop head
|
||||
UseV {"not","don't","doesn't","didn't","haven't","hasn't","hadn't","wouldn't","won't"} PART neg head
|
||||
UseV {"has","had","have","will","would","do","does","did"} AUX aux head
|
||||
UseComp {"not","don't","doesn't","didn't","haven't","hasn't","hadn't","wouldn't","won't"} PART neg head
|
||||
UseComp {"has","had","have","will","would","do","does","did"} AUX aux head
|
||||
UseComp {"is","are","am","was","been","be"} VERB cop head
|
||||
CompCN {"a","an"} DET det head
|
||||
ComplVV {"to"} PART mark xcomp
|
||||
ComplVS {"that"} PART mark xcomp
|
||||
ComplVS {"not","don't","doesn't","didn't","haven't","hasn't","hadn't","wouldn't","won't"} PART neg head
|
||||
ComplVS {"has","had","have","will","would","do","does","did"} AUX aux head
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -132,7 +132,7 @@ lin
|
||||
oil_N = regN "oil" ;
|
||||
old_A = regADeg "old" ;
|
||||
open_V2 = dirV2 (mkV "open" "opens" "opened" "opened" "opening") ;
|
||||
paint_V2A = mkV2A (regV "paint") noPrep ;
|
||||
paint_V2A = mkV2A (regV "paint") ;
|
||||
paper_N = regN "paper" ;
|
||||
paris_PN = mkPN (mkN nonhuman (mkN "Paris")) ;
|
||||
peace_N = regN "peace" ;
|
||||
|
||||
@@ -321,7 +321,11 @@ oper
|
||||
} ;
|
||||
ingV2V : V -> Prep -> Prep -> V2V ; -- e.g. prevent (noPrep NP) (from VP-ing)
|
||||
mkVA : V -> VA ; -- e.g. become (AP)
|
||||
mkV2A : V -> Prep -> V2A ; -- e.g. paint (NP) (AP)
|
||||
mkV2A : overload {
|
||||
mkV2A : V -> V2A ; -- e.g. paint (NP) (AP)
|
||||
mkV2A : V -> Prep -> V2A ; -- backwards compatibility
|
||||
mkV2A : V -> Prep -> Prep -> V2A ; -- e.g. strike (NP) as (AP)
|
||||
} ;
|
||||
mkVQ : V -> VQ ; -- e.g. wonder (QS)
|
||||
mkV2Q : V -> Prep -> V2Q ; -- e.g. ask (NP) (QS)
|
||||
|
||||
@@ -601,7 +605,11 @@ mkInterj : Str -> Interj
|
||||
|
||||
ingV2V v p t = lin V2V (prepV2 v p ** {c3 = t.s ; typ = VVPresPart}) ;
|
||||
mkVA v = lin VA v ;
|
||||
mkV2A v p = lin V2A (prepV2 v p) ;
|
||||
mkV2A = overload {
|
||||
mkV2A : V -> V2A = \v -> lin V2A (dirdirV3 v) ;
|
||||
mkV2A : V -> Prep -> V2A = \v,p -> lin V2A (dirV3 v p) ;
|
||||
mkV2A : V -> Prep -> Prep -> V2A = \v,p1,p2 -> lin V2A (prepPrepV3 v p1 p2) ;
|
||||
} ;
|
||||
mkV2Q v p = lin V2Q (prepV2 v p) ;
|
||||
|
||||
mkAS v = v ;
|
||||
|
||||
@@ -1,175 +0,0 @@
|
||||
--# -path=.:../abstract:../translator
|
||||
|
||||
concrete ParseEng of ParseEngAbs =
|
||||
TenseX - [Pol, PNeg, PPos, SC],
|
||||
CatEng,
|
||||
NounEng - [PPartNP],
|
||||
AdjectiveEng,
|
||||
NumeralEng,
|
||||
SymbolEng [PN, Symb, String, CN, Card, NP, MkSymb, SymbPN, CNNumNP],
|
||||
ConjunctionEng,
|
||||
VerbEng - [SlashV2V, PassV2, UseCopula, ComplVV, ComplVS],
|
||||
AdverbEng,
|
||||
PhraseEng,
|
||||
SentenceEng - [UseCl], -- replaced by UseCl | ContractedUseCl
|
||||
QuestionEng,
|
||||
RelativeEng,
|
||||
IdiomEng [NP, VP, Tense, Cl, ProgrVP, ExistNP, SelfAdvVP, SelfAdVVP, SelfNP],
|
||||
ConstructionEng,
|
||||
DocumentationEng,
|
||||
ExtraEng [NP, Quant, VPSlash, VP, Tense, GenNP, PassVPSlash, PassAgentVPSlash,
|
||||
Temp, Pol, Conj, VPS, ListVPS, S, Num, CN, RP, MkVPS, BaseVPS, ConsVPS, ConjVPS, PredVPS, GenRP,
|
||||
VPI, VPIForm, VPIInf, VPIPresPart, ListVPI, VV, MkVPI, BaseVPI, ConsVPI, ConjVPI, ComplVPIVV,
|
||||
ComplSlashPartLast,
|
||||
ClSlash, RCl, EmptyRelSlash, VS, V2S, ComplBareVS, SlashBareV2S],
|
||||
|
||||
DictionaryEng **
|
||||
open MorphoEng, ResEng, ParadigmsEng, (G = GrammarEng), (E = ExtraEng), Prelude in {
|
||||
|
||||
flags
|
||||
literal=Symb ;
|
||||
|
||||
-- exceptional linearizations
|
||||
lin
|
||||
UseCl t p cl = G.UseCl t p cl | E.ContractedUseCl t p cl ;
|
||||
|
||||
lin
|
||||
myself_NP = regNP "myself" singular ;
|
||||
yourselfSg_NP = regNP "yourself" singular ;
|
||||
himself_NP = regNP "himself" singular ;
|
||||
herself_NP = regNP "herself" singular ;
|
||||
itself_NP = regNP "itself" singular ;
|
||||
ourselves_NP = regNP "ourselves" plural ;
|
||||
yourselfPl_NP = regNP "yourself" plural ;
|
||||
themselves_NP = regNP "themselves" plural ;
|
||||
|
||||
CompoundSgCN cn1 cn2 = {
|
||||
s = \\n,c => cn1.s ! Sg ! Nom ++ cn2.s ! n ! c ;
|
||||
g = cn2.g
|
||||
} ;
|
||||
|
||||
CompoundPlCN cn1 cn2 = {
|
||||
s = \\n,c => cn1.s ! Pl ! Nom ++ cn2.s ! n ! c ;
|
||||
g = cn2.g
|
||||
} ;
|
||||
|
||||
DashSgN n1 n2 = {
|
||||
s = \\n,c => n1.s ! Sg ! Nom ++ "-" ++ n2.s ! n ! c ;
|
||||
g = n2.g
|
||||
} ;
|
||||
|
||||
DashPlN n1 n2 = {
|
||||
s = \\n,c => n1.s ! Pl ! Nom ++ "-" ++ n2.s ! n ! c ;
|
||||
g = n2.g
|
||||
} ;
|
||||
|
||||
GerundN v = {
|
||||
s = \\n,c => v.s ! VPresPart ;
|
||||
g = Neutr
|
||||
} ;
|
||||
|
||||
GerundAP v = {
|
||||
s = \\agr => v.s ! VPresPart ;
|
||||
isPre = True
|
||||
} ;
|
||||
|
||||
PastPartAP vp = {
|
||||
s = \\a => vp.ad ! a ++ vp.ptp ++ vp.p ++ vp.c2 ++ vp.s2 ! a ++ vp.ext ;
|
||||
isPre = vp.isSimple -- depends on whether there are complements
|
||||
} ;
|
||||
|
||||
OrdCompar a = {s = \\c => a.s ! AAdj Compar c } ;
|
||||
|
||||
PositAdVAdj a = {s = a.s ! AAdv} ;
|
||||
|
||||
UseQuantPN q pn = {s = \\c => q.s ! False ! Sg ++ pn.s ! npcase2case c ; a = agrgP3 Sg pn.g} ;
|
||||
|
||||
SlashV2V v ant p vp = insertObjc (\\a => v.c3 ++ ant.s ++ p.s ++
|
||||
infVP v.typ vp ant.a p.p a)
|
||||
(predVc v) ;
|
||||
|
||||
SlashSlashV2V v ant p vp = insertObjc (\\a => v.c3 ++ ant.s ++ p.s ++
|
||||
infVP v.typ vp ant.a p.p a)
|
||||
(predVc v) ;
|
||||
|
||||
SlashVPIV2V v p vpi = insertObjc (\\a => p.s ++
|
||||
v.c3 ++
|
||||
vpi.s ! VVAux ! a)
|
||||
(predVc v) ;
|
||||
ComplVV v a p vp = insertObj (\\agr => a.s ++ p.s ++
|
||||
infVP v.typ vp a.a p.p agr)
|
||||
(predVV v) ;
|
||||
ComplVS vs s = G.ComplVS vs s | ComplBareVS vs s ;
|
||||
|
||||
PredVPosv np vp = {
|
||||
s = \\t,a,b,o =>
|
||||
let
|
||||
verb = vp.s ! t ! a ! b ! o ! np.a ;
|
||||
compl = vp.s2 ! np.a
|
||||
in
|
||||
case o of {
|
||||
ODir _ => compl ++ frontComma ++ np.s ! npNom ++ verb.aux ++ vp.ad ! np.a ++ verb.fin ++ verb.adv ++ verb.inf ;
|
||||
OQuest => verb.aux ++ compl ++ frontComma ++ np.s ! npNom ++ verb.adv ++ vp.ad ! np.a ++ verb.fin ++ verb.inf
|
||||
}
|
||||
} ;
|
||||
|
||||
PredVPovs np vp = {
|
||||
s = \\t,a,b,o =>
|
||||
let
|
||||
verb = vp.s ! t ! a ! b ! o ! np.a ;
|
||||
compl = vp.s2 ! np.a
|
||||
in
|
||||
case o of {
|
||||
ODir _ => compl ++ frontComma ++ verb.aux ++ verb.adv ++ vp.ad ! np.a ++ verb.fin ++ verb.inf ++ np.s ! npNom ;
|
||||
OQuest => verb.aux ++ compl ++ verb.adv ++ vp.ad ! np.a ++ verb.fin ++ verb.inf ++ np.s ! npNom
|
||||
}
|
||||
} ;
|
||||
|
||||
that_RP = {
|
||||
s = \\_ => "that" ;
|
||||
a = RNoAg
|
||||
} ;
|
||||
|
||||
who_RP = {
|
||||
s = \\_ => "who" ;
|
||||
a = RNoAg
|
||||
} ;
|
||||
|
||||
CompS s = {s = \\_ => "that" ++ s.s} ;
|
||||
CompQS qs = {s = \\_ => qs.s ! QIndir} ;
|
||||
CompVP ant p vp = {s = \\a => ant.s ++ p.s ++
|
||||
infVP VVInf vp ant.a p.p a} ;
|
||||
|
||||
VPSlashVS vs vp =
|
||||
insertObj (\\a => infVP VVInf vp Simul CPos a) (predV vs) **
|
||||
{c2 = ""; missingAdv = False; gapInMiddle = False} ;
|
||||
|
||||
PastPartRS ant pol vps = {
|
||||
s = \\agr => vps.ad ! agr ++ vps.ptp ++ vps.s2 ! agr ;
|
||||
c = npNom
|
||||
} ;
|
||||
|
||||
PresPartRS ant pol vp = {
|
||||
s = \\agr => vp.ad ! agr ++ vp.prp ++ vp.p ++ vp.s2 ! agr;
|
||||
c = npNom
|
||||
} ;
|
||||
|
||||
ApposNP np1 np2 = {
|
||||
s = \\c => np1.s ! c ++ frontComma ++ np2.s ! npNom ++ finalComma ;
|
||||
a = np1.a
|
||||
} ;
|
||||
|
||||
NameCN pn cn = {
|
||||
s = \\n,c => pn.s ! npcase2case npNom ++ cn.s ! n ! c ;
|
||||
g = cn.g
|
||||
} ;
|
||||
|
||||
AdAdV = cc2 ;
|
||||
|
||||
UttAdV adv = adv;
|
||||
|
||||
lin
|
||||
PPos = {s = [] ; p = CPos} ;
|
||||
PNeg = {s = [] ; p = CNeg True} | {s = [] ; p = CNeg False} ;
|
||||
|
||||
}
|
||||
@@ -21,7 +21,7 @@ concrete VerbEng of Verb = CatEng ** open ResEng, Prelude in {
|
||||
SlashV2S v s = insertExtrac (conjThat ++ s.s) (predVc v) ; ---- insertExtra?
|
||||
--- SlashV2S v s = insertObjc (variants {\\_ => conjThat ++ s.s; \\_ => s.s}) (predVc v) ;
|
||||
SlashV2Q v q = insertExtrac (q.s ! QIndir) (predVc v) ;
|
||||
SlashV2A v ap = insertObjc (\\a => ap.s ! a) (predVc v) ; ----
|
||||
SlashV2A v ap = insertObjc (\\a => v.c3 ++ ap.s ! a) (predVc v) ; ----
|
||||
|
||||
ComplSlash vp np =
|
||||
let vp' = case vp.gapInMiddle of {
|
||||
|
||||
86698
src/english/WNDictEng.gf
86698
src/english/WNDictEng.gf
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -5,54 +5,63 @@ concrete AdjectiveFin of Adjective = CatFin ** open ResFin, StemFin, Prelude in
|
||||
|
||||
lin
|
||||
|
||||
PositA a = {
|
||||
PositA a = a ** {
|
||||
s = \\_ => sAdjFull2nforms Posit a ;
|
||||
} ;
|
||||
ComparA a np =
|
||||
let acomp = sAdjFull2nforms Compar a in {
|
||||
ComparA a np =
|
||||
let acomp = sAdjFull2nforms Compar a in a ** {
|
||||
s = \\isMod,af => case isMod of {
|
||||
True => np.s ! NPCase Part ++ acomp ! af ; -- minua isompi
|
||||
_ => acomp ! af ++ "kuin" ++ np.s ! NPSep -- isompi kuin minä
|
||||
}
|
||||
} ;
|
||||
hasPrefix = False
|
||||
} ;
|
||||
CAdvAP ad ap np = {
|
||||
s = \\m,af => ad.s ++ ap.s ! m ! af ++ ad.p ++ np.s ! NPSep
|
||||
CAdvAP ad ap np = ap ** {
|
||||
s = \\m,af => ad.s ++ ap.s ! m ! af ++ ad.p ++ np.s ! NPSep ;
|
||||
hasPrefix = False
|
||||
} ;
|
||||
UseComparA a = {
|
||||
UseComparA a = a ** {
|
||||
s = \\_ => sAdjFull2nforms Compar a
|
||||
} ;
|
||||
|
||||
-- $SuperlA$ belongs to determiner syntax in $Noun$.
|
||||
AdjOrd ord = {
|
||||
s = \\_ => ord.s
|
||||
s = \\_ => ord.s ;
|
||||
p = [] ; hasPrefix = False
|
||||
} ;
|
||||
|
||||
|
||||
ComplA2 a np = {
|
||||
s = \\isMod,af =>
|
||||
preOrPost isMod (appCompl True Pos a.c2 np) (sAdjFull2nforms Posit a ! af)
|
||||
preOrPost isMod (appCompl True Pos a.c2 np) (sAdjFull2nforms Posit a ! af) ;
|
||||
p = [] ; hasPrefix = False
|
||||
} ;
|
||||
|
||||
ReflA2 a = {
|
||||
s = \\isMod,af =>
|
||||
preOrPost isMod
|
||||
(appCompl True Pos a.c2 (reflPron (agrP3 Sg))) (sAdjFull2nforms Posit a ! af)
|
||||
(appCompl True Pos a.c2 (reflPron (agrP3 Sg))) (sAdjFull2nforms Posit a ! af) ;
|
||||
p = [] ; hasPrefix = False
|
||||
} ;
|
||||
|
||||
SentAP ap sc = {
|
||||
s = \\b,a => ap.s ! b ! a ++ sc.s
|
||||
SentAP ap sc = ap ** {
|
||||
s = \\b,a => ap.s ! b ! a ++ sc.s ;
|
||||
hasPrefix = False
|
||||
} ;
|
||||
|
||||
AdAP ada ap = {
|
||||
s = \\b,af => ada.s ++ ap.s ! b ! af
|
||||
AdAP ada ap = ap ** {
|
||||
s = \\b,af => ada.s ++ ap.s ! b ! af ;
|
||||
hasPrefix = False
|
||||
} ;
|
||||
|
||||
AdvAP ap adv = {
|
||||
s = \\b,af => adv.s ++ ap.s ! b ! af -- luonnostaan vaalea
|
||||
AdvAP ap adv = ap ** {
|
||||
s = \\b,af => adv.s ++ ap.s ! b ! af ; -- luonnostaan vaalea
|
||||
hasPrefix = False
|
||||
} ;
|
||||
|
||||
UseA2 a = {
|
||||
s = \\_ => sAdjFull2nforms Posit a
|
||||
s = \\_ => sAdjFull2nforms Posit a ;
|
||||
p = [] ; hasPrefix = False
|
||||
} ;
|
||||
|
||||
}
|
||||
|
||||
@@ -42,7 +42,7 @@ concrete CatFin of Cat = CommonX ** open ResFin, StemFin, Prelude in {
|
||||
-- The $Bool$ tells whether usage is modifying (as opposed to
|
||||
-- predicative), e.g. "x on suurempi kuin y" vs. "y:tä suurempi luku".
|
||||
|
||||
AP = {s : Bool => NForm => Str} ;
|
||||
AP = {s : Bool => NForm => Str ; p : Str ; hasPrefix : Bool} ;
|
||||
|
||||
-- Noun
|
||||
|
||||
@@ -89,7 +89,7 @@ concrete CatFin of Cat = CommonX ** open ResFin, StemFin, Prelude in {
|
||||
V2V = SVerb1 ** {c2 : Compl ; vi : VVType} ; ---- infinitive form
|
||||
V3 = SVerb1 ** {c2, c3 : Compl} ;
|
||||
|
||||
A = {s : Degree => SAForm => Str ; h : Harmony} ;
|
||||
A = {s : Degree => SAForm => Str ; h : Harmony ; p : Str ; hasPrefix : Bool} ;
|
||||
A2 = {s : Degree => SAForm => Str ; h : Harmony ; c2 : Compl} ;
|
||||
|
||||
N = SNoun ;
|
||||
|
||||
@@ -16,7 +16,7 @@ concrete ConjunctionFin of Conjunction =
|
||||
isPron = False ; isNeg = ss.isNeg
|
||||
} ;
|
||||
|
||||
ConjAP conj ss = conjunctDistrTable2 Bool NForm conj ss ;
|
||||
ConjAP conj ss = conjunctDistrTable2 Bool NForm conj ss ** { hasPrefix = False ; p = [] } ;
|
||||
|
||||
ConjRS conj ss = conjunctDistrTable Agr conj ss ** {
|
||||
c = ss.c
|
||||
|
||||
@@ -4,6 +4,7 @@ concrete ExtendFin of Extend =
|
||||
CatFin ** ExtendFunctor - [
|
||||
VPI2,VPS2,MkVPS2,ConjVPS2,ComplVPS2,MkVPI2,ConjVPI2,ComplVPI2,ComplVPIVV
|
||||
,ExistCN, ExistMassCN
|
||||
,CompoundN
|
||||
]
|
||||
with
|
||||
(Grammar = GrammarFin) **
|
||||
@@ -28,27 +29,27 @@ lin
|
||||
|
||||
oper
|
||||
partCN : CN -> GrammarFin.NP ;
|
||||
partCN cn =
|
||||
let
|
||||
partCN cn =
|
||||
let
|
||||
acn = DetCN (DetQuant IndefArt NumSg) cn
|
||||
in acn ** {
|
||||
s = table {
|
||||
NPCase Nom | NPAcc => acn.s ! NPCase ResFin.Part ;
|
||||
c => acn.s ! c
|
||||
}
|
||||
} ;
|
||||
} ;
|
||||
|
||||
|
||||
lincat
|
||||
VPS = {s : Agr => Str } ;
|
||||
[VPS] = {s1,s2 : Agr => Str } ;
|
||||
[VPS] = {s1,s2 : Agr => Str } ;
|
||||
VPI = {s : VVType => Agr => Str ; sc : SubjCase } ; -- Agr needed for possessive suffix:
|
||||
[VPI] = {s1,s2 : VVType => Agr => Str ; sc : SubjCase } ; -- e.g. toivon nukkuva+ni
|
||||
|
||||
lin
|
||||
BaseVPS = twoTable Agr ;
|
||||
ConsVPS = consrTable Agr comma ;
|
||||
|
||||
|
||||
BaseVPI = twoTable2 VVType Agr ;
|
||||
ConsVPI = consrTable2 VVType Agr comma ;
|
||||
|
||||
@@ -56,10 +57,10 @@ oper
|
||||
ConjVPS c xs = conjunctDistrTable Agr c xs ;
|
||||
PredVPS np vps = {s = np.s ! npNom ++ vps.s ! np.a} ;
|
||||
|
||||
|
||||
|
||||
MkVPI vp = mkVPI vp ;
|
||||
ConjVPI c xs = conjunctDistrTable2 VVType Agr c xs ;
|
||||
ComplVPIVV vv vpi =
|
||||
ComplVPIVV vv vpi =
|
||||
S.insertObj (\\_,_,a => vpi.s ! vv.vi ! a)
|
||||
(S.predV (vv ** {sc = case vpi.sc of {
|
||||
SCNom => vv.sc ; -- minun täytyy pestä auto
|
||||
@@ -71,8 +72,8 @@ oper
|
||||
|
||||
lincat
|
||||
-- Polarity needed to pick the right object case
|
||||
VPS2 = {s : Agr => Str ; c2 : Compl ; p : Polarity } ;
|
||||
[VPS2] = {s1,s2 : Agr => Str ; c2 : Compl ; p : Polarity } ;
|
||||
VPS2 = {s : Agr => Str ; c2 : Compl ; p : Polarity } ;
|
||||
[VPS2] = {s1,s2 : Agr => Str ; c2 : Compl ; p : Polarity } ;
|
||||
-- A version with
|
||||
VPI2 = {s : VVType => Agr => Str ; c2 : Compl ; sc : SubjCase } ;
|
||||
[VPI2] = {s1,s2 : VVType => Agr => Str ; c2 : Compl ; sc : SubjCase } ;
|
||||
@@ -86,7 +87,7 @@ oper
|
||||
|
||||
BaseVPS2 x y = twoTable Agr x y ** {c2 = y.c2 ; p = xs.p } ; ---- just remembering the compl. case of the latter verb
|
||||
ConsVPS2 x xs = consrTable Agr comma x xs ** {c2 = xs.c2 ; p = xs.p } ;
|
||||
|
||||
|
||||
BaseVPI2 x y = twoTable2 VVType Agr x y ** {c2 = y.c2} ; ---- just remembering the compl. case of the latter verb
|
||||
ConsVPI2 x xs = consrTable2 VVType Agr comma x xs ** {c2 = xs.c2} ;
|
||||
|
||||
@@ -95,18 +96,24 @@ oper
|
||||
ConjVPI2 c xs = conjunctDistrTable2 VVType Agr c xs ** {c2 = xs.c2 ; p = xs.p ; sc = xs.sc } ;
|
||||
|
||||
|
||||
-- appCompl : Bool -> Polarity -> Compl -> ResFin.NP -> Str
|
||||
-- appCompl : Bool -> Polarity -> Compl -> ResFin.NP -> Str
|
||||
ComplVPS2 v np = { s = \\agr => v.s ! agr ++ appCompl True v.p v.c2 np } ;
|
||||
|
||||
-- TODO: Version with variable polarity?
|
||||
ComplVPI2 v np = v ** { s = \\vt,a => v.s ! vt ! a ++ appCompl True Pos v.c2 np };
|
||||
|
||||
oper
|
||||
oper
|
||||
mkVPS : Temp -> Pol -> VP -> VPS = \tem,pol,vp -> lin VPS {
|
||||
s = \\agr => (UseCl tem pol (S.mkClause (\_ -> []) agr vp)).s } ;
|
||||
|
||||
mkVPI : VP -> VPI = \vp -> lin VPI {
|
||||
mkVPI : VP -> VPI = \vp -> lin VPI {
|
||||
s = \\vt,agr => S.infVP vp.s.sc Pos agr vp (vvtype2infform vt) ;
|
||||
sc = vp.s.sc } ;
|
||||
|
||||
}
|
||||
lin
|
||||
CompoundN n1 n2 =
|
||||
let ukkos_ = (S.snoun2nounBind n1).s ! NCompound in {
|
||||
s = \\c => ukkos_ ++ BIND ++ n2.s ! c ;
|
||||
h = n2.h
|
||||
} ;
|
||||
}
|
||||
|
||||
@@ -41,11 +41,19 @@ oper
|
||||
(s + "n")
|
||||
(init s + case a of {"a" => "o" ; _ => "ö"} + "j" + a) ;
|
||||
d09A : Str -> NForms -- 1040 ääniraita
|
||||
= \s -> let a = last s in dSilakka s
|
||||
(weakGrade s + "n")
|
||||
(init s + case a of {"a" => "o" ; _ => "ö"} + "j" + a) ;
|
||||
= \s -> case s of {
|
||||
x + "aaka" => dSilakka s (x+"aa'an") (x+"aakoja") ;
|
||||
x + "aika" => dSilakka s (x+"ajan") (x+"aikoja") ; -- lots of compound words in NewDictFin that end in aika, but are not analysed as compounds
|
||||
_ => let a = last s
|
||||
in dSilakka s
|
||||
(weakGrade s + "n")
|
||||
(init s + case a of {"a" => "o" ; _ => "ö"} + "j" + a)
|
||||
} ;
|
||||
d10 : Str -> NForms -- 2119 äänittäjä
|
||||
= \s -> dSilakka s (s + "n") (init s + "i" + vowelHarmony (last s)) ;
|
||||
= \s -> case s of {
|
||||
x+"poika" => dSilakka s (x+"pojan") (x+"poikia") ;
|
||||
_ => dSilakka s (s + "n") (init s + "i" + vowelHarmony (last s))
|
||||
} ;
|
||||
d10A : Str -> NForms -- 284 änkkä
|
||||
= \s -> dSilakka s (weakGrade s + "n") (init s + "i" + vowelHarmony (last s)) ;
|
||||
d11 : Str -> NForms -- 46 ödeema
|
||||
@@ -98,11 +106,11 @@ oper
|
||||
d28A : Str -> NForms -- 1 jälsi
|
||||
= \s -> dArpi s (Predef.tk 2 s + "len") ;
|
||||
d29 : Str -> NForms -- 1 lapsi
|
||||
= \s -> let lapsi = dArpi s (init s + "en") in
|
||||
table {2 => Predef.tk 3 s + "ta" ; i => lapsi ! i} ;
|
||||
= \s -> let lapsi = dArpi s (init s + "en") ; a = vowHarmony s in
|
||||
table {2 => Predef.tk 3 s + "st" + a ; i => lapsi ! i} ;
|
||||
d30 : Str -> NForms -- 2 veitsi
|
||||
= \s -> let lapsi = dArpi s (init s + "en") in
|
||||
table {2 => Predef.tk 3 s + "stä" ; i => lapsi ! i} ;
|
||||
= \s -> let lapsi = dArpi s (init s + "en") ; a = vowHarmony s in
|
||||
table {2 => Predef.tk 3 s + "st" + a ; i => lapsi ! i} ;
|
||||
d31 : Str -> NForms -- 3 yksi
|
||||
= \s -> let
|
||||
y = Predef.tk 3 s ;
|
||||
|
||||
@@ -639,7 +639,7 @@ resource MorphoFin = ResFin ** open Prelude in {
|
||||
in vForms12
|
||||
harkita
|
||||
(harkit + "sen")
|
||||
(harkit + "se")
|
||||
(harkit + "see")
|
||||
(harkit + "sev" + a + "t")
|
||||
(harkit + "k" + a + a)
|
||||
(harkit + a + a + "n")
|
||||
@@ -750,7 +750,7 @@ resource MorphoFin = ResFin ** open Prelude in {
|
||||
vat = "v" + a + "t" ;
|
||||
liene = init lienee ;
|
||||
tulta = tult + a ;
|
||||
tulevaP = (noun2adj (nhn (sKukko tuleva (tuleva + "n") (init tuleva + "ia")))).s ;
|
||||
tulevaP = (noun2adj (nhn (sKukko tuleva (tuleva + "n") (init tuleva + "i" + a)))).s ;
|
||||
tultavaP = (noun2adj (nhn (sKukko (tulta + "v" + a) (tulta + "v" + a + "n") (tulta + "vi" + a)))).s ;
|
||||
tulemaP = (noun2adj (nhn (sKukko tulema (tulema + "n") (init tulema + "i" + a)))).s ;
|
||||
|
||||
@@ -855,10 +855,12 @@ resource MorphoFin = ResFin ** open Prelude in {
|
||||
"rk" + ("i" | "e") => ku + "rj" + o ;
|
||||
"lk" + _ => ku + "l" + o ;
|
||||
"rk" + _ => ku + "r" + o ;
|
||||
("hk" | "tk") + _ => kukko ; -- *tahko-tahon, *pitkä-pitkän
|
||||
"hki" => ku + "hi" ; -- for pyyhkiä, vihkiä
|
||||
("hk"|"tk") + _ => kukko ; -- *tahko-tahon, *pitkä-pitkän
|
||||
("f"|"s") + ("k" | "p" | "t") + _ => kukko ; -- *lasku-lasvun, *raspi-rasvin, *lastu-lasdun, *afta-aftan
|
||||
("k"|"p") + "t" + _ => kukko ; -- *projekti-projekdin
|
||||
x + "ku" => ku + x + "vu" ;
|
||||
"uku" => ku + "uvu" ;
|
||||
"yky" => ku + "yvy" ;
|
||||
x + "k" + ("a" | "e" | "i" | "o" | "u" | "y" | "ä" | "ö") => ku + x + o ;
|
||||
x + "p" + ("a" | "e" | "i" | "o" | "u" | "y" | "ä" | "ö") => ku + x + "v" + o ;
|
||||
x + "t" + ("a" | "e" | "i" | "o" | "u" | "y" | "ä" | "ö") => ku + x + "d" + o ;
|
||||
@@ -882,8 +884,8 @@ resource MorphoFin = ResFin ** open Prelude in {
|
||||
("tk" | "hk" | "sk" | "sp" | "st") + _ => nke ; -- viuhke,kuiske
|
||||
a + k@("k"|"p"|"t") + e@("e"|"a"|"ä"|"u"|"y"|"i"|"o"|"ö") => a + k + k + e ;
|
||||
a + "d" + e@("e"|"a"|"ä"|"u"|"i"|"o"|"ö") => a + "t" + e ;
|
||||
s + a@("a" | "ä") + "e" => s + a + "ke" ; -- säe, tae
|
||||
s + "ui" => s + "uki" ; -- ruis
|
||||
s + a@("a"|"ä"|"o"|"ö") + "e" => s + a + "ke" ; -- säe, tae, koe
|
||||
s + "u" + i@("i"|"e") => s + "uk" + i ; -- ruis, aueta
|
||||
s + "aa" => s + "aka" ; -- taata
|
||||
s + "i" + a@("a" | "e" | "i") => s + "ik" + a ; -- liata, siitä, pietä
|
||||
a + "v" + e@("e"|"a"|"ä"|"u"|"i") => a + "p" + e ; -- taive/toive imposs
|
||||
|
||||
@@ -327,8 +327,8 @@ lin aiheutua_V = mkV {s = c52A "aiheutua"} ;
|
||||
lin aiheutus_N = mkN {s = d39 "aiheutus"} ;
|
||||
lin aihio_N = mkN {s = d03 "aihio"} ;
|
||||
lin aijai_Adv = mkAdv {s = c99 "aijai"} ;
|
||||
lin aika_1_N = mkN {s = d09A "aika"} ;
|
||||
lin aika_2_Adv = mkAdv {s = c99 "aika"} ;
|
||||
lin aika_N = mkN {s = d09A "aika"} ;
|
||||
lin aika_Adv = mkAdv {s = c99 "aika"} ;
|
||||
lin aikaansaannos_N = mkN {s = d39 "aikaansaannos"} ;
|
||||
lin aikaansaapa_N = mkN {s = d10A "aikaansaapa"} ;
|
||||
lin aikaansaava_N = mkN {s = d10 "aikaansaava"} ;
|
||||
@@ -4583,8 +4583,8 @@ lin haaste_N = mkN {s = d48 "haaste"} ;
|
||||
lin haasteaika_N = mkN {s = d09A "haasteaika"} ;
|
||||
lin haasteellinen_N = mkN {s = d38 "haasteellinen"} ;
|
||||
lin haastella_V = mkV {s = c67 "haastella"} ;
|
||||
lin haava_1_N = mkN {s = d09 "haava"} ;
|
||||
lin haava_2_Adv = mkAdv {s = c99 "haava"} ;
|
||||
lin haava_N = mkN {s = d09 "haava"} ;
|
||||
lin haava_Adv = mkAdv {s = c99 "haava"} ;
|
||||
lin haavainen_N = mkN {s = d38 "haavainen"} ;
|
||||
lin haavakko_N = mkN {s = d04A "haavakko"} ;
|
||||
lin haavauma_N = mkN {s = d10 "haavauma"} ;
|
||||
@@ -9916,8 +9916,7 @@ lin kallistaa_1_V = mkV {s = c53 "kallistaa"} ;
|
||||
lin kallistaa_2_V = mkV {s = c53 "kallistaa"} ;
|
||||
lin kallistella_V = mkV {s = c67 "kallistella"} ;
|
||||
lin kallistelu_N = mkN {s = d02 "kallistelu"} ;
|
||||
lin kallistua_1_V = mkV {s = c52 "kallistua"} ;
|
||||
lin kallistua_2_V = mkV {s = c52 "kallistua"} ;
|
||||
lin kallistua_V = mkV {s = c52 "kallistua"} ;
|
||||
lin kallistus_N = mkN {s = d39 "kallistus"} ;
|
||||
lin kallistuvakorinen_N = mkN {s = d38 "kallistuvakorinen"} ;
|
||||
lin kallo_N = mkN {s = d01 "kallo"} ;
|
||||
@@ -12120,8 +12119,7 @@ lin kimputus_N = mkN {s = d39 "kimputus"} ;
|
||||
lin kimröökki_N = mkN {s = d05A "kimröökki"} ;
|
||||
lin kimuli_N = mkN {s = d06 "kimuli"} ;
|
||||
lin kimurantti_N = mkN {s = d05A "kimurantti"} ;
|
||||
lin kina_1_N = mkN {s = d09 "kina"} ;
|
||||
lin kina_2_N = mkN {s = d09 "kina"} ;
|
||||
lin kina_N = mkN {s = d09 "kina"} ;
|
||||
lin kinailla_V = mkV {s = c67 "kinailla"} ;
|
||||
lin kinailu_N = mkN {s = d02 "kinailu"} ;
|
||||
lin kinastella_V = mkV {s = c67 "kinastella"} ;
|
||||
@@ -12786,12 +12784,10 @@ lin kokkareinen_N = mkN {s = d38 "kokkareinen"} ;
|
||||
lin kokkaroitua_V = mkV {s = c52A "kokkaroitua"} ;
|
||||
lin kokkaus_N = mkN {s = d39 "kokkaus"} ;
|
||||
lin kokkeli_N = mkN {s = d06 "kokkeli"} ;
|
||||
lin kokki_1_N = mkN {s = d05A "kokki"} ;
|
||||
lin kokki_2_N = mkN {s = d05A "kokki"} ;
|
||||
lin kokko_1_N = mkN {s = d01A "kokko"} ;
|
||||
lin kokko_2_N = mkN {s = d01A "kokko"} ;
|
||||
lin koko_1_N = mkN {s = d01A "koko"} ;
|
||||
lin koko_2_Adv = mkAdv {s = c99 "koko"} ;
|
||||
lin kokki_N = mkN {s = d05A "kokki"} ;
|
||||
lin kokko_N = mkN {s = d01A "kokko"} ;
|
||||
lin koko_N = mkN {s = d01A "koko"} ;
|
||||
lin koko_Adv = mkAdv {s = c99 "koko"} ;
|
||||
lin kokoaja_N = mkN {s = d10 "kokoaja"} ;
|
||||
lin kokoelma_N = mkN {s = d10 "kokoelma"} ;
|
||||
lin kokoilla_V = mkV {s = c67 "kokoilla"} ;
|
||||
@@ -13653,7 +13649,7 @@ lin kouruilla_V = mkV {s = c67 "kouruilla"} ;
|
||||
lin kouruttaa_V = mkV {s = c53A "kouruttaa"} ;
|
||||
lin kouruuntua_V = mkV {s = c52A "kouruuntua"} ;
|
||||
lin koutsi_N = mkN {s = d05 "koutsi"} ;
|
||||
lin kova_A = mkA {s = d10 "kova"} ;
|
||||
lin kova_A = mkA (mkN {s = d10 "kova"}) "kovempi" "kovin" ;
|
||||
lin kovaa_Adv = mkAdv {s = c99 "kovaa"} ;
|
||||
lin kovaan_Adv = mkAdv {s = c99 "kovaan"} ;
|
||||
lin kovakorvaisuus_N = mkN {s = d40 "kovakorvaisuus"} ;
|
||||
@@ -14937,7 +14933,7 @@ lin kylmiltään_Adv = mkAdv {s = c99 "kylmiltään"} ;
|
||||
lin kylmissään_Adv = mkAdv {s = c99 "kylmissään"} ;
|
||||
lin kylmiö_N = mkN {s = d03 "kylmiö"} ;
|
||||
lin kylmyys_N = mkN {s = d40 "kylmyys"} ;
|
||||
lin kylmä_A = mkA {s = d10 "kylmä"} ;
|
||||
lin kylmä_A = mkA (mkN {s = d10 "kylmä"}) "kylmempi" "kylmin" ;
|
||||
lin kylmäkiskoisesti_Adv = mkAdv {s = c99 "kylmäkiskoisesti"} ;
|
||||
lin kylmäkiskoisuus_N = mkN {s = d40 "kylmäkiskoisuus"} ;
|
||||
lin kylmäkkö_N = mkN {s = d04A "kylmäkkö"} ;
|
||||
@@ -15031,7 +15027,7 @@ lin kypsyttää_V = mkV {s = c53A "kypsyttää"} ;
|
||||
lin kypsytys_N = mkN {s = d39 "kypsytys"} ;
|
||||
lin kypsyys_N = mkN {s = d40 "kypsyys"} ;
|
||||
lin kypsyä_V = mkV {s = c52 "kypsyä"} ;
|
||||
lin kypsä_A = mkA {s = d10 "kypsä"} ;
|
||||
lin kypsä_A = mkA (mkN {s = d10 "kypsä"}) "kypsempi" "kypsin" ;
|
||||
lin kypsästi_Adv = mkAdv {s = c99 "kypsästi"} ;
|
||||
lin kypärä_N = mkN {s = d10 "kypärä"} ;
|
||||
lin kyrillinen_N = mkN {s = d38 "kyrillinen"} ;
|
||||
@@ -23105,7 +23101,7 @@ lin padota_V = mkV {s = c74A "padota"} ;
|
||||
lin paella_N = mkN {s = d13 "paella"} ;
|
||||
lin paeta_V = mkV {s = c72A "paeta"} ;
|
||||
lin pagodi_N = mkN {s = d05 "pagodi"} ;
|
||||
lin paha_A = mkA {s = d09 "paha"} ;
|
||||
lin paha_A = mkA (mkN {s = d09 "paha"}) "pahempi" "pahin" ;
|
||||
lin pahainen_N = mkN {s = d38 "pahainen"} ;
|
||||
lin pahaksua_V = mkV {s = c52 "pahaksua"} ;
|
||||
lin pahamaineisuus_N = mkN {s = d40 "pahamaineisuus"} ;
|
||||
@@ -23337,8 +23333,7 @@ lin pakaste_N = mkN {s = d48 "pakaste"} ;
|
||||
lin pakastin_N = mkN {s = d33 "pakastin"} ;
|
||||
lin pakastua_V = mkV {s = c52 "pakastua"} ;
|
||||
lin pakastus_N = mkN {s = d39 "pakastus"} ;
|
||||
lin pakata_1_V = mkV {s = c73A "pakata"} ;
|
||||
lin pakata_2_V = mkV {s = c73A "pakata"} ;
|
||||
lin pakata_V = mkV {s = c73A "pakata"} ;
|
||||
lin pakeilla_Adv = mkAdv {s = c99 "pakeilla"} ;
|
||||
lin pakeillaan_Adv = mkAdv {s = c99 "pakeillaan"} ;
|
||||
lin pakeille_Adv = mkAdv {s = c99 "pakeille"} ;
|
||||
@@ -23601,8 +23596,8 @@ lin pankkiaika_N = mkN {s = d09A "pankkiaika"} ;
|
||||
lin pankkiiri_N = mkN {s = d06 "pankkiiri"} ;
|
||||
lin pankkisäästäminen_N = mkN {s = d38 "pankkisäästäminen"} ;
|
||||
lin pankko_N = mkN {s = d01A "pankko"} ;
|
||||
lin panna_1_V = mkV {s = c67 "panna"} ;
|
||||
lin panna_2_N = mkN {s = d09 "panna"} ;
|
||||
lin panna_V = mkV {s = c67 "panna"} ;
|
||||
lin panna_N = mkN {s = d09 "panna"} ;
|
||||
lin pannahinen_N = mkN {s = d38 "pannahinen"} ;
|
||||
lin pannari_N = mkN {s = d06 "pannari"} ;
|
||||
lin pannu_N = mkN {s = d01 "pannu"} ;
|
||||
@@ -23879,10 +23874,7 @@ lin passata_2_V = mkV {s = c73 "passata"} ;
|
||||
lin passauttaa_V = mkV {s = c53A "passauttaa"} ;
|
||||
lin passeli_N = mkN {s = d06 "passeli"} ;
|
||||
--? lin passepartout_N = mkN {s = d22 "passepartout"} ;
|
||||
lin passi_1_N = mkN {s = d05 "passi"} ;
|
||||
lin passi_2_N = mkN {s = d05 "passi"} ;
|
||||
lin passi_3_N = mkN {s = d05 "passi"} ;
|
||||
lin passi_4_N = mkN {s = d05 "passi"} ;
|
||||
lin passi_N = mkN {s = d05 "passi"} ;
|
||||
--? lin passiivat_N = mkN {s = d12 "passiivat"} ;
|
||||
lin passiivi_N = mkN {s = d05 "passiivi"} ;
|
||||
lin passiivinen_A = mkA {s = d38 "passiivinen"} ;
|
||||
@@ -23963,8 +23955,7 @@ lin patsastelu_N = mkN {s = d02 "patsastelu"} ;
|
||||
lin patteri_N = mkN {s = d06 "patteri"} ;
|
||||
lin patteristi_N = mkN {s = d05 "patteristi"} ;
|
||||
lin patteristo_N = mkN {s = d01 "patteristo"} ;
|
||||
lin patti_1_N = mkN {s = d05A "patti"} ;
|
||||
lin patti_2_N = mkN {s = d05A "patti"} ;
|
||||
lin patti_N = mkN {s = d05A "patti"} ;
|
||||
lin patu_N = mkN {s = d01 "patu"} ;
|
||||
lin patukka_N = mkN {s = d14A "patukka"} ;
|
||||
lin pauhata_V = mkV {s = c73 "pauhata"} ;
|
||||
@@ -25134,7 +25125,7 @@ lin pitkittää_V = mkV {s = c53A "pitkittää"} ;
|
||||
lin pitkitys_N = mkN {s = d39 "pitkitys"} ;
|
||||
lin pitko_N = mkN {s = d01 "pitko"} ;
|
||||
lin pitkulainen_N = mkN {s = d38 "pitkulainen"} ;
|
||||
lin pitkä_A = mkA {s = d10 "pitkä"} ;
|
||||
lin pitkä_A = mkA (mkN {s = d10 "pitkä"}) "pidempi" "pisin" ;
|
||||
lin pitkäinen_N = mkN {s = d38 "pitkäinen"} ;
|
||||
lin pitkäjännitteisesti_Adv = mkAdv {s = c99 "pitkäjännitteisesti"} ;
|
||||
lin pitkäjänteisesti_Adv = mkAdv {s = c99 "pitkäjänteisesti"} ;
|
||||
@@ -28531,8 +28522,7 @@ lin riipus_N = mkN {s = d39 "riipus"} ;
|
||||
lin riipustaa_V = mkV {s = c53 "riipustaa"} ;
|
||||
lin riiputtaa_V = mkV {s = c53A "riiputtaa"} ;
|
||||
lin riiputus_N = mkN {s = d39 "riiputus"} ;
|
||||
lin riisi_1_N = mkN {s = d05 "riisi"} ;
|
||||
lin riisi_2_N = mkN {s = d05 "riisi"} ;
|
||||
lin riisi_N = mkN {s = d05 "riisi"} ;
|
||||
lin riista_N = mkN {s = d09 "riista"} ;
|
||||
lin riistainen_N = mkN {s = d38 "riistainen"} ;
|
||||
lin riistamaaliammunta_N = mkN {s = d09A "riistamaaliammunta"} ;
|
||||
@@ -28570,8 +28560,7 @@ lin riittämätön_N = mkN {s = d34A "riittämätön"} ;
|
||||
lin riittävyys_N = mkN {s = d40 "riittävyys"} ;
|
||||
lin riittävä_A = mkA {s = d10 "riittävä"} ;
|
||||
lin riittävästi_Adv = mkAdv {s = c99 "riittävästi"} ;
|
||||
lin riittää_1_V = mkV {s = c53A "riittää"} ;
|
||||
lin riittää_2_V = mkV {s = c53A "riittää"} ;
|
||||
lin riittää_V = mkV {s = c53A "riittää"} ;
|
||||
lin riiustaa_V = mkV {s = c53 "riiustaa"} ;
|
||||
lin riiustella_V = mkV {s = c67 "riiustella"} ;
|
||||
lin riiustelu_N = mkN {s = d02 "riiustelu"} ;
|
||||
@@ -28597,8 +28586,8 @@ lin rikka_N = mkN {s = d09A "rikka"} ;
|
||||
lin rikkaasti_Adv = mkAdv {s = c99 "rikkaasti"} ;
|
||||
lin rikkaus_N = mkN {s = d40 "rikkaus"} ;
|
||||
lin rikkeetön_N = mkN {s = d34A "rikkeetön"} ;
|
||||
lin rikki_1_N = mkN {s = d05A "rikki"} ;
|
||||
lin rikki_2_Adv = mkAdv {s = c99 "rikki"} ;
|
||||
lin rikki_N = mkN {s = d05A "rikki"} ;
|
||||
lin rikki_Adv = mkAdv {s = c99 "rikki"} ;
|
||||
lin rikkidioksidi_N = mkN {s = d05 "rikkidioksidi"} ;
|
||||
lin rikkinäinen_N = mkN {s = d38 "rikkinäinen"} ;
|
||||
lin rikkinäisyys_N = mkN {s = d40 "rikkinäisyys"} ;
|
||||
@@ -28734,8 +28723,7 @@ lin risauttaa_V = mkV {s = c53A "risauttaa"} ;
|
||||
lin risiini_N = mkN {s = d05 "risiini"} ;
|
||||
lin riskaabeli_N = mkN {s = d05 "riskaabeli"} ;
|
||||
lin riskeerata_V = mkV {s = c73 "riskeerata"} ;
|
||||
lin riski_1_N = mkN {s = d05 "riski"} ;
|
||||
lin riski_2_N = mkN {s = d05 "riski"} ;
|
||||
lin riski_N = mkN {s = d05 "riski"} ;
|
||||
lin riskilä_N = mkN {s = d12 "riskilä"} ;
|
||||
lin riskinen_N = mkN {s = d38 "riskinen"} ;
|
||||
lin riskitön_N = mkN {s = d34A "riskitön"} ;
|
||||
@@ -33728,7 +33716,7 @@ lin syvyinen_N = mkN {s = d38 "syvyinen"} ;
|
||||
lin syvyys_N = mkN {s = d40 "syvyys"} ;
|
||||
lin syvyyttää_V = mkV {s = c53A "syvyyttää"} ;
|
||||
lin syvyytys_N = mkN {s = d39 "syvyytys"} ;
|
||||
lin syvä_A = mkA {s = d10 "syvä"} ;
|
||||
lin syvä_A = mkA (mkN {s = d10 "syvä"}) "syvempi" "syvin" ;
|
||||
lin syvälle_Adv = mkAdv {s = c99 "syvälle"} ;
|
||||
lin syvällinen_A = mkA {s = d38 "syvällinen"} ;
|
||||
lin syvällisesti_Adv = mkAdv {s = c99 "syvällisesti"} ;
|
||||
@@ -37084,8 +37072,7 @@ lin tuttavallisesti_Adv = mkAdv {s = c99 "tuttavallisesti"} ;
|
||||
lin tuttavallisuus_N = mkN {s = d40 "tuttavallisuus"} ;
|
||||
--? lin tuttavukset_N = mkN {s = d39 "tuttavukset"} ;
|
||||
lin tuttavuus_N = mkN {s = d40 "tuttavuus"} ;
|
||||
lin tutti_1_N = mkN {s = d05A "tutti"} ;
|
||||
lin tutti_2_N = mkN {s = d05A "tutti"} ;
|
||||
lin tutti_N = mkN {s = d05A "tutti"} ;
|
||||
lin tuttu_N = mkN {s = d01A "tuttu"} ;
|
||||
lin tuttuus_N = mkN {s = d40 "tuttuus"} ;
|
||||
lin tutua_V = mkV {s = c52 "tutua"} ;
|
||||
@@ -38423,7 +38410,7 @@ lin vahingollisuus_N = mkN {s = d40 "vahingollisuus"} ;
|
||||
lin vahinko_N = mkN {s = d01A "vahinko"} ;
|
||||
lin vahti_N = mkN {s = d05A "vahti"} ;
|
||||
lin vahtia_V = mkV {s = c61A "vahtia"} ;
|
||||
lin vahva_A = mkA {s = d09 "vahva"} ;
|
||||
lin vahva_A = mkA (mkN {s = d09 "vahva"}) "vahvempi" "vahvin" ;
|
||||
lin vahvalti_Adv = mkAdv {s = c99 "vahvalti"} ;
|
||||
lin vahvasti_Adv = mkAdv {s = c99 "vahvasti"} ;
|
||||
lin vahvennos_N = mkN {s = d39 "vahvennos"} ;
|
||||
@@ -39121,7 +39108,7 @@ lin varkaisiin_Adv = mkAdv {s = c99 "varkaisiin"} ;
|
||||
lin varkaissa_Adv = mkAdv {s = c99 "varkaissa"} ;
|
||||
lin varkaista_Adv = mkAdv {s = c99 "varkaista"} ;
|
||||
lin varkaus_N = mkN {s = d40 "varkaus"} ;
|
||||
lin varma_A = mkA {s = d09 "varma"} ;
|
||||
lin varma_A = mkA (mkN {s = d09 "varma"}) "varmempi" "varmin" ;
|
||||
lin varmaan_Adv = mkAdv {s = c99 "varmaan"} ;
|
||||
lin varmasti_Adv = mkAdv {s = c99 "varmasti"} ;
|
||||
lin varmenne_N = mkN {s = d48A "varmenne"} ;
|
||||
|
||||
@@ -321,8 +321,8 @@ fun aiheutua_V : V ;
|
||||
fun aiheutus_N : N ;
|
||||
fun aihio_N : N ;
|
||||
fun aijai_Adv : Adv ;
|
||||
fun aika_1_N : N ;
|
||||
fun aika_2_Adv : Adv ;
|
||||
fun aika_N : N ;
|
||||
fun aika_Adv : Adv ;
|
||||
fun aikaansaannos_N : N ;
|
||||
fun aikaansaapa_N : N ;
|
||||
fun aikaansaava_N : N ;
|
||||
@@ -4577,8 +4577,8 @@ fun haaste_N : N ;
|
||||
fun haasteaika_N : N ;
|
||||
fun haasteellinen_N : N ;
|
||||
fun haastella_V : V ;
|
||||
fun haava_1_N : N ;
|
||||
fun haava_2_Adv : Adv ;
|
||||
fun haava_N : N ;
|
||||
fun haava_Adv : Adv ;
|
||||
fun haavainen_N : N ;
|
||||
fun haavakko_N : N ;
|
||||
fun haavauma_N : N ;
|
||||
@@ -9910,8 +9910,7 @@ fun kallistaa_1_V : V ;
|
||||
fun kallistaa_2_V : V ;
|
||||
fun kallistella_V : V ;
|
||||
fun kallistelu_N : N ;
|
||||
fun kallistua_1_V : V ;
|
||||
fun kallistua_2_V : V ;
|
||||
fun kallistua_V : V ;
|
||||
fun kallistus_N : N ;
|
||||
fun kallistuvakorinen_N : N ;
|
||||
fun kallo_N : N ;
|
||||
@@ -12114,8 +12113,7 @@ fun kimputus_N : N ;
|
||||
fun kimröökki_N : N ;
|
||||
fun kimuli_N : N ;
|
||||
fun kimurantti_N : N ;
|
||||
fun kina_1_N : N ;
|
||||
fun kina_2_N : N ;
|
||||
fun kina_N : N ;
|
||||
fun kinailla_V : V ;
|
||||
fun kinailu_N : N ;
|
||||
fun kinastella_V : V ;
|
||||
@@ -12780,12 +12778,10 @@ fun kokkareinen_N : N ;
|
||||
fun kokkaroitua_V : V ;
|
||||
fun kokkaus_N : N ;
|
||||
fun kokkeli_N : N ;
|
||||
fun kokki_1_N : N ;
|
||||
fun kokki_2_N : N ;
|
||||
fun kokko_1_N : N ;
|
||||
fun kokko_2_N : N ;
|
||||
fun koko_1_N : N ;
|
||||
fun koko_2_Adv : Adv ;
|
||||
fun kokki_N : N ;
|
||||
fun kokko_N : N ;
|
||||
fun koko_N : N ;
|
||||
fun koko_Adv : Adv ;
|
||||
fun kokoaja_N : N ;
|
||||
fun kokoelma_N : N ;
|
||||
fun kokoilla_V : V ;
|
||||
@@ -23331,8 +23327,7 @@ fun pakaste_N : N ;
|
||||
fun pakastin_N : N ;
|
||||
fun pakastua_V : V ;
|
||||
fun pakastus_N : N ;
|
||||
fun pakata_1_V : V ;
|
||||
fun pakata_2_V : V ;
|
||||
fun pakata_V : V ;
|
||||
fun pakeilla_Adv : Adv ;
|
||||
fun pakeillaan_Adv : Adv ;
|
||||
fun pakeille_Adv : Adv ;
|
||||
@@ -23595,8 +23590,8 @@ fun pankkiaika_N : N ;
|
||||
fun pankkiiri_N : N ;
|
||||
fun pankkisäästäminen_N : N ;
|
||||
fun pankko_N : N ;
|
||||
fun panna_1_V : V ;
|
||||
fun panna_2_N : N ;
|
||||
fun panna_V : V ;
|
||||
fun panna_N : N ;
|
||||
fun pannahinen_N : N ;
|
||||
fun pannari_N : N ;
|
||||
fun pannu_N : N ;
|
||||
@@ -23873,10 +23868,7 @@ fun passata_2_V : V ;
|
||||
fun passauttaa_V : V ;
|
||||
fun passeli_N : N ;
|
||||
--? fun passepartout_N : N ;
|
||||
fun passi_1_N : N ;
|
||||
fun passi_2_N : N ;
|
||||
fun passi_3_N : N ;
|
||||
fun passi_4_N : N ;
|
||||
fun passi_N : N ;
|
||||
--? fun passiivat_N : N ;
|
||||
fun passiivi_N : N ;
|
||||
fun passiivinen_A : A ;
|
||||
@@ -23957,8 +23949,7 @@ fun patsastelu_N : N ;
|
||||
fun patteri_N : N ;
|
||||
fun patteristi_N : N ;
|
||||
fun patteristo_N : N ;
|
||||
fun patti_1_N : N ;
|
||||
fun patti_2_N : N ;
|
||||
fun patti_N : N ;
|
||||
fun patu_N : N ;
|
||||
fun patukka_N : N ;
|
||||
fun pauhata_V : V ;
|
||||
@@ -28525,8 +28516,7 @@ fun riipus_N : N ;
|
||||
fun riipustaa_V : V ;
|
||||
fun riiputtaa_V : V ;
|
||||
fun riiputus_N : N ;
|
||||
fun riisi_1_N : N ;
|
||||
fun riisi_2_N : N ;
|
||||
fun riisi_N : N ;
|
||||
fun riista_N : N ;
|
||||
fun riistainen_N : N ;
|
||||
fun riistamaaliammunta_N : N ;
|
||||
@@ -28564,8 +28554,7 @@ fun riittämätön_N : N ;
|
||||
fun riittävyys_N : N ;
|
||||
fun riittävä_A : A ;
|
||||
fun riittävästi_Adv : Adv ;
|
||||
fun riittää_1_V : V ;
|
||||
fun riittää_2_V : V ;
|
||||
fun riittää_V : V ;
|
||||
fun riiustaa_V : V ;
|
||||
fun riiustella_V : V ;
|
||||
fun riiustelu_N : N ;
|
||||
@@ -28591,8 +28580,8 @@ fun rikka_N : N ;
|
||||
fun rikkaasti_Adv : Adv ;
|
||||
fun rikkaus_N : N ;
|
||||
fun rikkeetön_N : N ;
|
||||
fun rikki_1_N : N ;
|
||||
fun rikki_2_Adv : Adv ;
|
||||
fun rikki_N : N ;
|
||||
fun rikki_Adv : Adv ;
|
||||
fun rikkidioksidi_N : N ;
|
||||
fun rikkinäinen_N : N ;
|
||||
fun rikkinäisyys_N : N ;
|
||||
@@ -28728,8 +28717,7 @@ fun risauttaa_V : V ;
|
||||
fun risiini_N : N ;
|
||||
fun riskaabeli_N : N ;
|
||||
fun riskeerata_V : V ;
|
||||
fun riski_1_N : N ;
|
||||
fun riski_2_N : N ;
|
||||
fun riski_N : N ;
|
||||
fun riskilä_N : N ;
|
||||
fun riskinen_N : N ;
|
||||
fun riskitön_N : N ;
|
||||
@@ -37078,8 +37066,7 @@ fun tuttavallisesti_Adv : Adv ;
|
||||
fun tuttavallisuus_N : N ;
|
||||
--? fun tuttavukset_N : N ;
|
||||
fun tuttavuus_N : N ;
|
||||
fun tutti_1_N : N ;
|
||||
fun tutti_2_N : N ;
|
||||
fun tutti_N : N ;
|
||||
fun tuttu_N : N ;
|
||||
fun tuttuus_N : N ;
|
||||
fun tutua_V : V ;
|
||||
|
||||
@@ -215,7 +215,9 @@ concrete NounFin of Noun = CatFin ** open ResFin, MorphoFin, StemFin, Prelude in
|
||||
} ;
|
||||
|
||||
AdjCN ap cn = {
|
||||
s = \\nf => ap.s ! True ! (n2nform nf) ++ cn.s ! nf ;
|
||||
s = case ap.hasPrefix of {
|
||||
True => \\nf => ap.p ++ BIND ++ cn.s ! nf ;
|
||||
False => \\nf => ap.s ! True ! (n2nform nf) ++ cn.s ! nf } ;
|
||||
h = cn.h } ;
|
||||
|
||||
RelCN cn rs = {s = \\nf => cn.s ! nf ++ BIND ++ "," ++ rs.s ! agrP3 (numN nf) ;
|
||||
|
||||
@@ -61,6 +61,8 @@ oper
|
||||
infIness : InfForm ; -- e.g. "tekemässä"
|
||||
infElat : InfForm ; -- e.g. "tekemästä"
|
||||
infIllat : InfForm ; -- e.g. "tekemään"
|
||||
infAdess : InfForm ; -- e.g. "tekemällä"
|
||||
infPart : InfForm ; -- e.g. "tekemistä"
|
||||
infPresPart : InfForm ; -- e.g. "tekevän"
|
||||
infPresPartAgr : InfForm ; -- e.g. "tekevänsä"
|
||||
|
||||
@@ -137,6 +139,19 @@ oper
|
||||
= \oma, asunto -> lin N {s = \\c => oma.s ! c + "_" + asunto.s ! c ; h = asunto.h} ;
|
||||
} ;
|
||||
|
||||
compN : N -> N -> N = \valkuainen,aine -> aine ** {
|
||||
s = \\c => (StemFin.snoun2nounBind valkuainen).s ! NCompound + aine.s ! c
|
||||
} ;
|
||||
|
||||
genCompN = overload {
|
||||
genCompN : N -> N -> N = genitiveCompoundN Sg ;
|
||||
genCompN : Number -> N -> N -> N = genitiveCompoundN
|
||||
} ;
|
||||
|
||||
genitiveCompoundN : Number -> N -> N -> N = \n,veri,paine -> paine ** {
|
||||
s = \\c => (StemFin.snoun2nounBind veri).s ! NCase n Gen + paine.s ! c
|
||||
} ;
|
||||
|
||||
-- Nouns used as functions need a case, of which the default is
|
||||
-- the genitive.
|
||||
|
||||
@@ -177,17 +192,23 @@ oper
|
||||
} ;
|
||||
|
||||
invarA : Str -> A -- invariant adjective, e.g. "kelpo"
|
||||
= \s -> lin A {s = \\_,_ => s ; h = Back} ; ----- stemming adds bogus endings
|
||||
= \s -> lin A {s = \\_,_ => s ; h = Back ; p = [] ; hasPrefix = False} ; ----- stemming adds bogus endings
|
||||
|
||||
prefixA : Str -> A -> A = \pr,a -> a ** {
|
||||
p = pr ;
|
||||
hasPrefix = True
|
||||
} ;
|
||||
|
||||
-- Two-place adjectives need a case for the second argument.
|
||||
|
||||
mkA2 = overload {
|
||||
mkA2 : Str -> A2 -- e.g. "vihainen" (jollekin)
|
||||
= \s -> mkA s ** {c2 = mkPrep allative ; lock_A2 = <>} ;
|
||||
= \a -> let adj = mkA a ;
|
||||
in lin A2 (adj ** {c2 = casePrep allative}) ;
|
||||
mkA2 : Str -> Prep -> A2 -- e.g. "jaollinen" (mkPrep adessive)
|
||||
= \a,p -> mkA a ** {c2 = p ; lock_A2 = <>} ;
|
||||
= \a,p -> let adj = mkA a in lin A2 (adj ** {c2=p}) ;
|
||||
mkA2 : A -> Prep -> A2 -- e.g. "jaollinen" (mkPrep adessive)
|
||||
= \a,p -> a ** {c2 = p ; lock_A2 = <>} ;
|
||||
= \a,p -> lin A2 (a ** {c2 = p}) ;
|
||||
} ;
|
||||
|
||||
|
||||
@@ -384,7 +405,11 @@ mkVS = overload {
|
||||
ablative = Ablat ;
|
||||
allative = Allat ;
|
||||
|
||||
infFirst = Inf1 ; infElat = Inf3Elat ; infIllat = Inf3Illat ; infIness = Inf3Iness ; infPresPart = InfPresPart ; infPresPartAgr = InfPresPartAgr ;
|
||||
infFirst = Inf1 ;
|
||||
infElat = Inf3Elat ; infIllat = Inf3Illat ;
|
||||
infIness = Inf3Iness ; infAdess = Inf3Adess ;
|
||||
infPart = Inf4Part ;
|
||||
infPresPart = InfPresPart ; infPresPartAgr = InfPresPartAgr ;
|
||||
|
||||
prePrep : Case -> Str -> Prep =
|
||||
\c,p -> lin Prep {c = NPCase c ; s = <tagFeature (tagPOS "ADP" p) "AdvType" "Pre", [],\\_ => []>} ; -- no possessive suffix
|
||||
@@ -637,24 +662,26 @@ mkVS = overload {
|
||||
mkA = overload {
|
||||
mkA : Str -> A = mkA_1 ;
|
||||
mkA : N -> A = \n -> noun2adjDeg n ** {lock_A = <>} ;
|
||||
mkA : N -> (kivempaa,kivinta : Str) -> A = \n -> regAdjective n ;
|
||||
mkA : N -> (kivempi,kivin : Str) -> A = \n -> regAdjective n ;
|
||||
mkA : (sana : AK) -> A = \w -> noun2adjDeg (nforms2snoun w.s) ;
|
||||
|
||||
mkA : (hyva,parempi,paras : N) -> (hyvin,paremmin,parhaiten : Str) -> A
|
||||
= \h,p,ps,hn,pn,ph -> lin A (mkAdj h p ps hn pn ph) ;
|
||||
= \h,p,ps,hn,pn,ph -> lin A (mkAdj h p ps hn pn ph ** {p=[]; hasPrefix=False}) ;
|
||||
mkA : V -> A = presActA ;
|
||||
} ;
|
||||
|
||||
mkA_1 : Str -> A = \x -> lin A (noun2adjDeg (mk1N x)) ;
|
||||
|
||||
-- auxiliaries
|
||||
mkAdjective : (_,_,_ : SAdj) -> A = \hyva,parempi,paras ->
|
||||
mkAdjective : (_,_,_ : SAdj) -> A = \hyva,parempi,paras -> lin A
|
||||
{s = table {
|
||||
Posit => hyva.s ;
|
||||
Compar => parempi.s ;
|
||||
Superl => paras.s
|
||||
} ;
|
||||
h = hyva.h ; ---- different for parempi, paras
|
||||
lock_A = <>
|
||||
p = [] ;
|
||||
hasPrefix = False
|
||||
} ;
|
||||
regAdjective : SNoun -> Str -> Str -> A = \kiva, kivempi, kivin ->
|
||||
mkAdjective
|
||||
@@ -667,7 +694,22 @@ mkVS = overload {
|
||||
(snoun2compar suuri)
|
||||
(snoun2superl suuri) ;
|
||||
|
||||
|
||||
presActA : SVerb -> A = \tulla ->
|
||||
let tuleva : NForm => Str = \\nf => (sverb2verb True tulla).s ! PresPartAct (AN nf) ;
|
||||
in noun2adjDeg { s = tuleva ; h = tulla.h } ;
|
||||
|
||||
presPassA : SVerb -> A = \mennä ->
|
||||
let mentävä : NForm => Str = \\nf => (sverb2verb True mennä).s ! PresPartPass (AN nf) ;
|
||||
in noun2adjDeg { s = mentävä ; h = mennä.h } ;
|
||||
|
||||
pastActA : SVerb -> A = \syntyä ->
|
||||
let syntynyt : NForm => Str = \\nf => (sverb2verb True syntyä).s ! PastPartAct (AN nf) ;
|
||||
in noun2adjDeg { s = syntynyt ; h = syntyä.h } ;
|
||||
|
||||
pastPassA : SVerb -> A = \sulkea ->
|
||||
let suljettu : NForm => Str = \\nf => (sverb2verb True sulkea).s ! PastPartPass (AN nf) ;
|
||||
in noun2adjDeg { s = suljettu ; h = sulkea.h } ;
|
||||
|
||||
-- verbs
|
||||
|
||||
|
||||
@@ -171,18 +171,22 @@ param
|
||||
|
||||
-- These forms appear in complements to VV and V2V.
|
||||
|
||||
VVType = VVInf | VVIness | VVIllat | VVPresPart ;
|
||||
VVType = VVInf | VVIness | VVIllat | VVPresPart | VVPart | VVAdess ;
|
||||
|
||||
oper
|
||||
vvtype2infform : VVType -> InfForm = \vt -> case vt of {
|
||||
VVInf => Inf1 ;
|
||||
VVIness => Inf3Iness ;
|
||||
VVIllat => Inf3Illat ;
|
||||
VVAdess => Inf3Adess ;
|
||||
VVPart => Inf4Part ;
|
||||
VVPresPart => InfPresPart
|
||||
} ;
|
||||
infform2vvtype : InfForm -> VVType = \vt -> case vt of {
|
||||
Inf3Iness => VVIness ;
|
||||
Inf3Illat => VVIllat ;
|
||||
Inf3Adess => VVAdess ;
|
||||
Inf4Part => VVPart ;
|
||||
InfPresPart => VVPresPart ;
|
||||
_ => VVInf
|
||||
} ;
|
||||
|
||||
@@ -273,6 +273,7 @@ oper
|
||||
|
||||
mkV0 : V -> V0 ; --%
|
||||
mkVS : V -> VS ;
|
||||
subjVS : V -> VS ;
|
||||
mkVV : V -> VV ; -- plain infinitive: "voglio parlare"
|
||||
deVV : V -> VV ; -- "cerco di parlare"
|
||||
aVV : V -> VV ; -- "arrivo a parlare"
|
||||
@@ -429,6 +430,7 @@ oper
|
||||
|
||||
mkV0 v = v ** {lock_V0 = <>} ;
|
||||
mkVS v = v ** {m = \\_ => Indic ; lock_VS = <>} ; ---- more moods
|
||||
subjVS v = v ** {m = \\_ => Conjunct ; lock_VS = <>} ;
|
||||
mkVV v = v ** {c2 = complAcc ; lock_VV = <>} ;
|
||||
deVV v = v ** {c2 = complGen ; lock_VV = <>} ;
|
||||
aVV v = v ** {c2 = complDat ; lock_VV = <>} ;
|
||||
|
||||
@@ -71,7 +71,11 @@ oper
|
||||
-- or in =Ryan, M. A. Conjugação dos Verbos em Português. ática,
|
||||
-- 1991.=
|
||||
|
||||
-- the numbers in the comments below the oper declaration are the
|
||||
-- verb's paradigm numbers in bescherelle and in Ryan
|
||||
|
||||
oper ter_Besch : Str -> Verbum = \ter ->
|
||||
-- 1 | r3
|
||||
let x_ = Predef.tk 3 ter in
|
||||
{s = table {
|
||||
VI Infn => x_ + "ter" ;
|
||||
@@ -141,6 +145,7 @@ oper ter_Besch : Str -> Verbum = \ter ->
|
||||
} ;
|
||||
|
||||
oper haver_Besch : Str -> Verbum = \haver ->
|
||||
-- 2 | r4
|
||||
let x_ = Predef.tk 5 haver in
|
||||
{s = table {
|
||||
VI Infn => x_ + "haver" ;
|
||||
@@ -210,6 +215,7 @@ oper haver_Besch : Str -> Verbum = \haver ->
|
||||
} ;
|
||||
|
||||
oper ser_Besch : Str -> Verbum = \ser ->
|
||||
-- 3 | r1
|
||||
let x_ = Predef.tk 3 ser in
|
||||
{s = table {
|
||||
VI Infn => x_ + "ser" ;
|
||||
@@ -279,6 +285,7 @@ oper ser_Besch : Str -> Verbum = \ser ->
|
||||
} ;
|
||||
|
||||
oper comprar_Besch : Str -> Verbum = \comprar ->
|
||||
-- 4 | r5
|
||||
let compr_ = Predef.tk 2 comprar in
|
||||
{s = table {
|
||||
VI Infn => compr_ + "ar" ;
|
||||
@@ -348,6 +355,7 @@ oper comprar_Besch : Str -> Verbum = \comprar ->
|
||||
} ;
|
||||
|
||||
oper vender_Besch : Str -> Verbum = \vender ->
|
||||
-- 5 | r6
|
||||
let vend_ = Predef.tk 2 vender in
|
||||
{s = table {
|
||||
VI Infn => vend_ + "er" ;
|
||||
@@ -417,6 +425,7 @@ oper vender_Besch : Str -> Verbum = \vender ->
|
||||
} ;
|
||||
|
||||
oper garantir_Besch : Str -> Verbum = \garantir ->
|
||||
-- 6 | r7
|
||||
let garant_ = Predef.tk 2 garantir in
|
||||
{s = table {
|
||||
VI Infn => garant_ + "ir" ;
|
||||
@@ -486,6 +495,7 @@ oper garantir_Besch : Str -> Verbum = \garantir ->
|
||||
} ;
|
||||
|
||||
oper estar_Besch : Str -> Verbum = \estar ->
|
||||
-- 10 | r2
|
||||
let est_ = Predef.tk 2 estar in
|
||||
{s = table {
|
||||
VI Infn => est_ + "ar" ;
|
||||
@@ -555,6 +565,7 @@ oper estar_Besch : Str -> Verbum = \estar ->
|
||||
} ;
|
||||
|
||||
oper dar_Besch : Str -> Verbum = \dar ->
|
||||
-- 11 | r59
|
||||
let x_ = Predef.tk 3 dar in
|
||||
{s = table {
|
||||
VI Infn => x_ + "dar" ;
|
||||
@@ -624,6 +635,7 @@ oper dar_Besch : Str -> Verbum = \dar ->
|
||||
} ;
|
||||
|
||||
oper ficar_Besch : Str -> Verbum = \ficar ->
|
||||
-- 12 | r23
|
||||
let x_ = Predef.tk 5 ficar in
|
||||
{s = table {
|
||||
VI Infn => x_ + "ficar" ;
|
||||
@@ -693,75 +705,77 @@ oper ficar_Besch : Str -> Verbum = \ficar ->
|
||||
} ;
|
||||
|
||||
oper começar_Besch : Str -> Verbum = \começar ->
|
||||
let x_ = Predef.tk 7 começar in
|
||||
-- 13 | r24
|
||||
let come_ = Predef.tk 3 começar in
|
||||
{s = table {
|
||||
VI Infn => x_ + "começar" ;
|
||||
VI Ger => x_ + "começando" ;
|
||||
VI Part => x_ + "começado" ;
|
||||
VPB (Pres Ind Sg P1) => x_ + "começo" ;
|
||||
VPB (Pres Ind Sg P2) => x_ + "começas" ;
|
||||
VPB (Pres Ind Sg P3) => x_ + "começa" ;
|
||||
VPB (Pres Ind Pl P1) => x_ + "começamos" ;
|
||||
VPB (Pres Ind Pl P2) => x_ + "começais" ;
|
||||
VPB (Pres Ind Pl P3) => x_ + "começam" ;
|
||||
VPB (Pres Sub Sg P1) => x_ + "comece" ;
|
||||
VPB (Pres Sub Sg P2) => x_ + "comeces" ;
|
||||
VPB (Pres Sub Sg P3) => x_ + "comece" ;
|
||||
VPB (Pres Sub Pl P1) => x_ + "comecemos" ;
|
||||
VPB (Pres Sub Pl P2) => x_ + "comeceis" ;
|
||||
VPB (Pres Sub Pl P3) => x_ + "comecem" ;
|
||||
VPB (PretI Ind Sg P1) => x_ + "começava" ; --# notpresent
|
||||
VPB (PretI Ind Sg P2) => x_ + "começavas" ; --# notpresent
|
||||
VPB (PretI Ind Sg P3) => x_ + "começava" ; --# notpresent
|
||||
VPB (PretI Ind Pl P1) => x_ + "começávamos" ; --# notpresent
|
||||
VPB (PretI Ind Pl P2) => x_ + "começáveis" ; --# notpresent
|
||||
VPB (PretI Ind Pl P3) => x_ + "começavam" ; --# notpresent
|
||||
VPB (PretI Sub Sg P1) => x_ + "começasse" ; --# notpresent
|
||||
VPB (PretI Sub Sg P2) => x_ + "começasses" ; --# notpresent
|
||||
VPB (PretI Sub Sg P3) => x_ + "começasse" ; --# notpresent
|
||||
VPB (PretI Sub Pl P1) => x_ + "começássemos" ; --# notpresent
|
||||
VPB (PretI Sub Pl P2) => x_ + "começasseis" ; --# notpresent
|
||||
VPB (PretI Sub Pl P3) => x_ + "começassem" ; --# notpresent
|
||||
VPB (MQPerf Sg P1) => x_ + "começara" ; --# notpresent
|
||||
VPB (MQPerf Sg P2) => x_ + "começaras" ; --# notpresent
|
||||
VPB (MQPerf Sg P3) => x_ + "começara" ; --# notpresent
|
||||
VPB (MQPerf Pl P1) => x_ + "começáramos" ; --# notpresent
|
||||
VPB (MQPerf Pl P2) => x_ + "começáreis" ; --# notpresent
|
||||
VPB (MQPerf Pl P3) => x_ + "começaram" ; --# notpresent
|
||||
VPB (PretP Sg P1) => x_ + "comecei" ; --# notpresent
|
||||
VPB (PretP Sg P2) => x_ + "começaste" ; --# notpresent
|
||||
VPB (PretP Sg P3) => x_ + "começou" ; --# notpresent
|
||||
VPB (PretP Pl P1) => x_ + vars "começamos" "começámos" ; --# notpresent
|
||||
VPB (PretP Pl P2) => x_ + "começastes" ; --# notpresent
|
||||
VPB (PretP Pl P3) => x_ + "começaram" ; --# notpresent
|
||||
VPB (Fut Ind Sg P1) => x_ + "começarei" ; --# notpresent
|
||||
VPB (Fut Ind Sg P2) => x_ + "começarás" ; --# notpresent
|
||||
VPB (Fut Ind Sg P3) => x_ + "começará" ; --# notpresent
|
||||
VPB (Fut Ind Pl P1) => x_ + "começaremos" ; --# notpresent
|
||||
VPB (Fut Ind Pl P2) => x_ + "começareis" ; --# notpresent
|
||||
VPB (Fut Ind Pl P3) => x_ + "começarão" ; --# notpresent
|
||||
VPB (Fut Sub Sg P1) => x_ + "começar" ; --# notpresent
|
||||
VPB (Fut Sub Sg P2) => x_ + "começares" ; --# notpresent
|
||||
VPB (Fut Sub Sg P3) => x_ + "começar" ; --# notpresent
|
||||
VPB (Fut Sub Pl P1) => x_ + "começarmos" ; --# notpresent
|
||||
VPB (Fut Sub Pl P2) => x_ + "começardes" ; --# notpresent
|
||||
VPB (Fut Sub Pl P3) => x_ + "começarem" ; --# notpresent
|
||||
VPB (Cond Sg P1) => x_ + "começaria" ; --# notpresent
|
||||
VPB (Cond Sg P2) => x_ + "começarias" ; --# notpresent
|
||||
VPB (Cond Sg P3) => x_ + "começaria" ; --# notpresent
|
||||
VPB (Cond Pl P1) => x_ + "começaríamos" ; --# notpresent
|
||||
VPB (Cond Pl P2) => x_ + "começarieis" ; --# notpresent
|
||||
VPB (Cond Pl P3) => x_ + "começariam" ; --# notpresent
|
||||
VPB (Imper Sg P2) => x_ + "começa" ;
|
||||
VPB (Imper Sg P3) => x_ + "comece" ;
|
||||
VPB (Imper Pl P1) => x_ + "comecemos" ;
|
||||
VPB (Imper Pl P2) => x_ + "começai" ;
|
||||
VPB (Imper Pl P3) => x_ + "comecem" ;
|
||||
VI Infn => come_ + "çar" ;
|
||||
VI Ger => come_ + "çando" ;
|
||||
VI Part => come_ + "çado" ;
|
||||
VPB (Pres Ind Sg P1) => come_ + "ço" ;
|
||||
VPB (Pres Ind Sg P2) => come_ + "ças" ;
|
||||
VPB (Pres Ind Sg P3) => come_ + "ça" ;
|
||||
VPB (Pres Ind Pl P1) => come_ + "çamos" ;
|
||||
VPB (Pres Ind Pl P2) => come_ + "çais" ;
|
||||
VPB (Pres Ind Pl P3) => come_ + "çam" ;
|
||||
VPB (Pres Sub Sg P1) => come_ + "ce" ;
|
||||
VPB (Pres Sub Sg P2) => come_ + "ces" ;
|
||||
VPB (Pres Sub Sg P3) => come_ + "ce" ;
|
||||
VPB (Pres Sub Pl P1) => come_ + "cemos" ;
|
||||
VPB (Pres Sub Pl P2) => come_ + "ceis" ;
|
||||
VPB (Pres Sub Pl P3) => come_ + "cem" ;
|
||||
VPB (PretI Ind Sg P1) => come_ + "çava" ; --# notpresent
|
||||
VPB (PretI Ind Sg P2) => come_ + "çavas" ; --# notpresent
|
||||
VPB (PretI Ind Sg P3) => come_ + "çava" ; --# notpresent
|
||||
VPB (PretI Ind Pl P1) => come_ + "çávamos" ; --# notpresent
|
||||
VPB (PretI Ind Pl P2) => come_ + "çáveis" ; --# notpresent
|
||||
VPB (PretI Ind Pl P3) => come_ + "çavam" ; --# notpresent
|
||||
VPB (PretI Sub Sg P1) => come_ + "çasse" ; --# notpresent
|
||||
VPB (PretI Sub Sg P2) => come_ + "çasses" ; --# notpresent
|
||||
VPB (PretI Sub Sg P3) => come_ + "çasse" ; --# notpresent
|
||||
VPB (PretI Sub Pl P1) => come_ + "çássemos" ; --# notpresent
|
||||
VPB (PretI Sub Pl P2) => come_ + "çasseis" ; --# notpresent
|
||||
VPB (PretI Sub Pl P3) => come_ + "çassem" ; --# notpresent
|
||||
VPB (MQPerf Sg P1) => come_ + "çara" ; --# notpresent
|
||||
VPB (MQPerf Sg P2) => come_ + "çaras" ; --# notpresent
|
||||
VPB (MQPerf Sg P3) => come_ + "çara" ; --# notpresent
|
||||
VPB (MQPerf Pl P1) => come_ + "çáramos" ; --# notpresent
|
||||
VPB (MQPerf Pl P2) => come_ + "çáreis" ; --# notpresent
|
||||
VPB (MQPerf Pl P3) => come_ + "çaram" ; --# notpresent
|
||||
VPB (PretP Sg P1) => come_ + "cei" ; --# notpresent
|
||||
VPB (PretP Sg P2) => come_ + "çaste" ; --# notpresent
|
||||
VPB (PretP Sg P3) => come_ + "çou" ; --# notpresent
|
||||
VPB (PretP Pl P1) => come_ + vars "çamos" "çámos" ; --# notpresent
|
||||
VPB (PretP Pl P2) => come_ + "çastes" ; --# notpresent
|
||||
VPB (PretP Pl P3) => come_ + "çaram" ; --# notpresent
|
||||
VPB (Fut Ind Sg P1) => come_ + "çarei" ; --# notpresent
|
||||
VPB (Fut Ind Sg P2) => come_ + "çarás" ; --# notpresent
|
||||
VPB (Fut Ind Sg P3) => come_ + "çará" ; --# notpresent
|
||||
VPB (Fut Ind Pl P1) => come_ + "çaremos" ; --# notpresent
|
||||
VPB (Fut Ind Pl P2) => come_ + "çareis" ; --# notpresent
|
||||
VPB (Fut Ind Pl P3) => come_ + "çarão" ; --# notpresent
|
||||
VPB (Fut Sub Sg P1) => come_ + "çar" ; --# notpresent
|
||||
VPB (Fut Sub Sg P2) => come_ + "çares" ; --# notpresent
|
||||
VPB (Fut Sub Sg P3) => come_ + "çar" ; --# notpresent
|
||||
VPB (Fut Sub Pl P1) => come_ + "çarmos" ; --# notpresent
|
||||
VPB (Fut Sub Pl P2) => come_ + "çardes" ; --# notpresent
|
||||
VPB (Fut Sub Pl P3) => come_ + "çarem" ; --# notpresent
|
||||
VPB (Cond Sg P1) => come_ + "çaria" ; --# notpresent
|
||||
VPB (Cond Sg P2) => come_ + "çarias" ; --# notpresent
|
||||
VPB (Cond Sg P3) => come_ + "çaria" ; --# notpresent
|
||||
VPB (Cond Pl P1) => come_ + "çaríamos" ; --# notpresent
|
||||
VPB (Cond Pl P2) => come_ + "çarieis" ; --# notpresent
|
||||
VPB (Cond Pl P3) => come_ + "çariam" ; --# notpresent
|
||||
VPB (Imper Sg P2) => come_ + "ça" ;
|
||||
VPB (Imper Sg P3) => come_ + "ce" ;
|
||||
VPB (Imper Pl P1) => come_ + "cemos" ;
|
||||
VPB (Imper Pl P2) => come_ + "çai" ;
|
||||
VPB (Imper Pl P3) => come_ + "cem" ;
|
||||
VPB (Imper Sg P1) => nonExist
|
||||
}
|
||||
} ;
|
||||
|
||||
oper chegar_Besch : Str -> Verbum = \chegar ->
|
||||
-- 14 | r26
|
||||
let cheg_ = Predef.tk 2 chegar in
|
||||
{s = table {
|
||||
VI Infn => cheg_ + "ar" ;
|
||||
@@ -831,6 +845,7 @@ oper chegar_Besch : Str -> Verbum = \chegar ->
|
||||
} ;
|
||||
|
||||
oper recear_Besch : Str -> Verbum = \recear ->
|
||||
-- 15 | r46
|
||||
let rec_ = Predef.tk 3 recear in
|
||||
{s = table {
|
||||
VI Infn => rec_ + "ear" ;
|
||||
@@ -900,6 +915,7 @@ oper recear_Besch : Str -> Verbum = \recear ->
|
||||
} ;
|
||||
|
||||
oper anunciar_Besch : Str -> Verbum = \anunciar ->
|
||||
-- 16 | r46
|
||||
let anunci_ = Predef.tk 2 anunciar in
|
||||
{s = table {
|
||||
VI Infn => anunci_ + "ar" ;
|
||||
@@ -969,6 +985,7 @@ oper anunciar_Besch : Str -> Verbum = \anunciar ->
|
||||
} ;
|
||||
|
||||
oper odiar_Besch : Str -> Verbum = \odiar ->
|
||||
-- 17 | r46
|
||||
let od_ = Predef.tk 3 odiar in
|
||||
{s = table {
|
||||
VI Infn => od_ + "iar" ;
|
||||
@@ -1038,6 +1055,7 @@ oper odiar_Besch : Str -> Verbum = \odiar ->
|
||||
} ;
|
||||
|
||||
oper comerciar_Besch : Str -> Verbum = \comerciar ->
|
||||
-- 18 | r36
|
||||
let comerc_ = Predef.tk 3 comerciar in
|
||||
{s = table {
|
||||
VI Infn => comerc_ + "iar" ;
|
||||
@@ -1107,6 +1125,7 @@ oper comerciar_Besch : Str -> Verbum = \comerciar ->
|
||||
} ;
|
||||
|
||||
oper saudar_Besch : Str -> Verbum = \saudar ->
|
||||
-- 19 | r16
|
||||
let sa_ = Predef.tk 4 saudar in
|
||||
{s = table {
|
||||
VI Infn => sa_ + "udar" ;
|
||||
@@ -1176,6 +1195,7 @@ oper saudar_Besch : Str -> Verbum = \saudar ->
|
||||
} ;
|
||||
|
||||
oper perdoar_Besch : Str -> Verbum = \perdoar ->
|
||||
-- 20 | r38
|
||||
let perd_ = Predef.tk 3 perdoar in
|
||||
{s = table {
|
||||
VI Infn => perd_ + "oar" ;
|
||||
@@ -1245,6 +1265,7 @@ oper perdoar_Besch : Str -> Verbum = \perdoar ->
|
||||
} ;
|
||||
|
||||
oper averiguar_Besch : Str -> Verbum = \averiguar ->
|
||||
-- 21 | r30
|
||||
let averigu_ = Predef.tk 2 averiguar in
|
||||
{s = table {
|
||||
VI Infn => averigu_ + "ar" ;
|
||||
@@ -1314,6 +1335,7 @@ oper averiguar_Besch : Str -> Verbum = \averiguar ->
|
||||
} ;
|
||||
|
||||
oper neviscar_Besch : Str -> Verbum = \neviscar ->
|
||||
-- 22 | r23
|
||||
let n_ = Predef.tk 7 neviscar in
|
||||
{s = table {
|
||||
VI Infn => n_ + "eviscar" ;
|
||||
@@ -1383,6 +1405,7 @@ oper neviscar_Besch : Str -> Verbum = \neviscar ->
|
||||
} ;
|
||||
|
||||
oper adequar_Besch : Str -> Verbum = \adequar ->
|
||||
-- 23 | r82
|
||||
let adequ_ = Predef.tk 2 adequar in
|
||||
{s = table {
|
||||
VI Infn => adequ_ + "ar" ;
|
||||
@@ -1452,6 +1475,7 @@ oper adequar_Besch : Str -> Verbum = \adequar ->
|
||||
} ;
|
||||
|
||||
oper relampaguear_Besch : Str -> Verbum = \relampaguear ->
|
||||
-- 24
|
||||
let relamp_ = Predef.tk 6 relampaguear in
|
||||
{s = table {
|
||||
VI Infn => relamp_ + "aguear" ;
|
||||
@@ -1521,6 +1545,7 @@ oper relampaguear_Besch : Str -> Verbum = \relampaguear ->
|
||||
} ;
|
||||
|
||||
oper aquecer_Besch : Str -> Verbum = \aquecer ->
|
||||
-- 25 | r25
|
||||
let aque_ = Predef.tk 3 aquecer in
|
||||
{s = table {
|
||||
VI Infn => aque_ + "cer" ;
|
||||
@@ -1590,6 +1615,7 @@ oper aquecer_Besch : Str -> Verbum = \aquecer ->
|
||||
} ;
|
||||
|
||||
oper proteger_Besch : Str -> Verbum = \proteger ->
|
||||
-- 26 | r27
|
||||
let prote_ = Predef.tk 3 proteger in
|
||||
{s = table {
|
||||
VI Infn => prote_ + "ger" ;
|
||||
@@ -1659,6 +1685,7 @@ oper proteger_Besch : Str -> Verbum = \proteger ->
|
||||
} ;
|
||||
|
||||
oper erguer_Besch : Str -> Verbum = \erguer ->
|
||||
-- 27 | r32
|
||||
let erg_ = Predef.tk 3 erguer in
|
||||
{s = table {
|
||||
VI Infn => erg_ + "uer" ;
|
||||
@@ -1728,6 +1755,7 @@ oper erguer_Besch : Str -> Verbum = \erguer ->
|
||||
} ;
|
||||
|
||||
oper moer_Besch : Str -> Verbum = \moer ->
|
||||
-- 28 | r39
|
||||
let m_ = Predef.tk 3 moer in
|
||||
{s = table {
|
||||
VI Infn => m_ + "oer" ;
|
||||
@@ -1797,6 +1825,7 @@ oper moer_Besch : Str -> Verbum = \moer ->
|
||||
} ;
|
||||
|
||||
oper dizer_Besch : Str -> Verbum = \dizer ->
|
||||
-- 29 | r60
|
||||
let di_ = Predef.tk 3 dizer in
|
||||
{s = table {
|
||||
VI Infn => di_ + "zer" ;
|
||||
@@ -1866,6 +1895,7 @@ oper dizer_Besch : Str -> Verbum = \dizer ->
|
||||
} ;
|
||||
|
||||
oper trazer_Besch : Str -> Verbum = \trazer ->
|
||||
-- 30 | r73
|
||||
let tr_ = Predef.tk 4 trazer in
|
||||
{s = table {
|
||||
VI Infn => tr_ + "azer" ;
|
||||
@@ -1935,6 +1965,7 @@ oper trazer_Besch : Str -> Verbum = \trazer ->
|
||||
} ;
|
||||
|
||||
oper fazer_Besch : Str -> Verbum = \fazer ->
|
||||
-- 31 | r61
|
||||
let f_ = Predef.tk 4 fazer in
|
||||
{s = table {
|
||||
VI Infn => f_ + "azer" ;
|
||||
@@ -2004,6 +2035,7 @@ oper fazer_Besch : Str -> Verbum = \fazer ->
|
||||
} ;
|
||||
|
||||
oper aprazer_Besch : Str -> Verbum = \aprazer ->
|
||||
-- 32 | r55
|
||||
let apr_ = Predef.tk 4 aprazer in
|
||||
{s = table {
|
||||
VI Infn => apr_ + "azer" ;
|
||||
@@ -2073,6 +2105,7 @@ oper aprazer_Besch : Str -> Verbum = \aprazer ->
|
||||
} ;
|
||||
|
||||
oper jazer_Besch : Str -> Verbum = \jazer ->
|
||||
-- 33 | r43
|
||||
let jaz_ = Predef.tk 2 jazer in
|
||||
{s = table {
|
||||
VI Infn => jaz_ + "er" ;
|
||||
@@ -2142,6 +2175,7 @@ oper jazer_Besch : Str -> Verbum = \jazer ->
|
||||
} ;
|
||||
|
||||
oper caber_Besch : Str -> Verbum = \caber ->
|
||||
-- 34 | r56
|
||||
let c_ = Predef.tk 4 caber in
|
||||
{s = table {
|
||||
VI Infn => c_ + "aber" ;
|
||||
@@ -2211,6 +2245,7 @@ oper caber_Besch : Str -> Verbum = \caber ->
|
||||
} ;
|
||||
|
||||
oper saber_Besch : Str -> Verbum = \saber ->
|
||||
-- 35 | r72
|
||||
let s_ = Predef.tk 4 saber in
|
||||
{s = table {
|
||||
VI Infn => s_ + "aber" ;
|
||||
@@ -2280,6 +2315,7 @@ oper saber_Besch : Str -> Verbum = \saber ->
|
||||
} ;
|
||||
|
||||
oper poder_Besch : Str -> Verbum = \poder ->
|
||||
-- 36 | r66
|
||||
let p_ = Predef.tk 4 poder in
|
||||
{s = table {
|
||||
VI Infn => p_ + "oder" ;
|
||||
@@ -2349,6 +2385,7 @@ oper poder_Besch : Str -> Verbum = \poder ->
|
||||
} ;
|
||||
|
||||
oper crer_Besch : Str -> Verbum = \crer ->
|
||||
-- 37 | r58
|
||||
let cr_ = Predef.tk 2 crer in
|
||||
{s = table {
|
||||
VI Infn => cr_ + "er" ;
|
||||
@@ -2418,6 +2455,7 @@ oper crer_Besch : Str -> Verbum = \crer ->
|
||||
} ;
|
||||
|
||||
oper querer_Besch : Str -> Verbum = \querer ->
|
||||
-- 38 | r69
|
||||
let qu_ = Predef.tk 4 querer in
|
||||
{s = table {
|
||||
VI Infn => qu_ + "erer" ;
|
||||
@@ -2487,6 +2525,7 @@ oper querer_Besch : Str -> Verbum = \querer ->
|
||||
} ;
|
||||
|
||||
oper requerer_Besch : Str -> Verbum = \requerer ->
|
||||
-- 39 | r70
|
||||
let reque_ = Predef.tk 3 requerer in
|
||||
{s = table {
|
||||
VI Infn => reque_ + "rer" ;
|
||||
@@ -2556,6 +2595,7 @@ oper requerer_Besch : Str -> Verbum = \requerer ->
|
||||
} ;
|
||||
|
||||
oper ver_Besch : Str -> Verbum = \ver ->
|
||||
-- 40 | r25
|
||||
let v_ = Predef.tk 2 ver in
|
||||
{s = table {
|
||||
VI Infn => v_ + "er" ;
|
||||
@@ -2625,6 +2665,7 @@ oper ver_Besch : Str -> Verbum = \ver ->
|
||||
} ;
|
||||
|
||||
oper prover_Besch : Str -> Verbum = \prover ->
|
||||
-- 41 | r68
|
||||
let prov_ = Predef.tk 2 prover in
|
||||
{s = table {
|
||||
VI Infn => prov_ + "er" ;
|
||||
@@ -2694,6 +2735,7 @@ oper prover_Besch : Str -> Verbum = \prover ->
|
||||
} ;
|
||||
|
||||
oper ler_Besch : Str -> Verbum = \ler ->
|
||||
-- 42 | r58
|
||||
let l_ = Predef.tk 2 ler in
|
||||
{s = table {
|
||||
VI Infn => l_ + "er" ;
|
||||
@@ -2763,6 +2805,7 @@ oper ler_Besch : Str -> Verbum = \ler ->
|
||||
} ;
|
||||
|
||||
oper valer_Besch : Str -> Verbum = \valer ->
|
||||
-- 43 | r74
|
||||
let val_ = Predef.tk 2 valer in
|
||||
{s = table {
|
||||
VI Infn => val_ + "er" ;
|
||||
@@ -2832,6 +2875,7 @@ oper valer_Besch : Str -> Verbum = \valer ->
|
||||
} ;
|
||||
|
||||
oper perder_Besch : Str -> Verbum = \perder ->
|
||||
-- 44 | r65
|
||||
let per_ = Predef.tk 3 perder in
|
||||
{s = table {
|
||||
VI Infn => per_ + "der" ;
|
||||
@@ -2901,6 +2945,7 @@ oper perder_Besch : Str -> Verbum = \perder ->
|
||||
} ;
|
||||
|
||||
oper pôr_Besch : Str -> Verbum = \pôr ->
|
||||
-- 45 | r67
|
||||
let p_ = Predef.tk 2 pôr in
|
||||
{s = table {
|
||||
VI Infn => p_ + "ôr" ;
|
||||
@@ -2970,6 +3015,7 @@ oper pôr_Besch : Str -> Verbum = \pôr ->
|
||||
} ;
|
||||
|
||||
oper acontecer_Besch : Str -> Verbum = \acontecer ->
|
||||
-- 46 | r25
|
||||
let aconte_ = Predef.tk 3 acontecer in
|
||||
{s = table {
|
||||
VI Infn => aconte_ + "cer" ;
|
||||
@@ -3039,6 +3085,7 @@ oper acontecer_Besch : Str -> Verbum = \acontecer ->
|
||||
} ;
|
||||
|
||||
oper chover_Besch : Str -> Verbum = \chover ->
|
||||
-- 47 | r6
|
||||
let chov_ = Predef.tk 2 chover in
|
||||
{s = table {
|
||||
VI Infn => chov_ + "er" ;
|
||||
@@ -3108,6 +3155,7 @@ oper chover_Besch : Str -> Verbum = \chover ->
|
||||
} ;
|
||||
|
||||
oper doer_Besch : Str -> Verbum = \doer ->
|
||||
-- 48 | r83
|
||||
let d_ = Predef.tk 3 doer in
|
||||
{s = table {
|
||||
VI Infn => d_ + "oer" ;
|
||||
@@ -3177,6 +3225,7 @@ oper doer_Besch : Str -> Verbum = \doer ->
|
||||
} ;
|
||||
|
||||
oper prazer_Besch : Str -> Verbum = \prazer ->
|
||||
-- 49 | r55
|
||||
let pr_ = Predef.tk 4 prazer in
|
||||
{s = table {
|
||||
VI Infn => pr_ + "azer" ;
|
||||
@@ -3246,6 +3295,7 @@ oper prazer_Besch : Str -> Verbum = \prazer ->
|
||||
} ;
|
||||
|
||||
oper precaver_Besch : Str -> Verbum = \precaver ->
|
||||
-- 50 | r85
|
||||
let precav_ = Predef.tk 2 precaver in
|
||||
{s = table {
|
||||
VI Infn => precav_ + "er" ;
|
||||
@@ -3315,6 +3365,7 @@ oper precaver_Besch : Str -> Verbum = \precaver ->
|
||||
} ;
|
||||
|
||||
oper reaver_Besch : Str -> Verbum = \reaver ->
|
||||
-- 51 | r86
|
||||
let re_ = Predef.tk 4 reaver in
|
||||
{s = table {
|
||||
VI Infn => re_ + "aver" ;
|
||||
@@ -3384,6 +3435,7 @@ oper reaver_Besch : Str -> Verbum = \reaver ->
|
||||
} ;
|
||||
|
||||
oper redigir_Besch : Str -> Verbum = \redigir ->
|
||||
-- 52 | r28
|
||||
let red_ = Predef.tk 4 redigir in
|
||||
{s = table {
|
||||
VI Infn => red_ + "igir" ;
|
||||
@@ -3453,6 +3505,7 @@ oper redigir_Besch : Str -> Verbum = \redigir ->
|
||||
} ;
|
||||
|
||||
oper extinguir_Besch : Str -> Verbum = \extinguir ->
|
||||
-- 53 | r33
|
||||
let extin_ = Predef.tk 4 extinguir in
|
||||
{s = table {
|
||||
VI Infn => extin_ + "guir" ;
|
||||
@@ -3522,6 +3575,7 @@ oper extinguir_Besch : Str -> Verbum = \extinguir ->
|
||||
} ;
|
||||
|
||||
oper servir_Besch : Str -> Verbum = \servir ->
|
||||
-- 54 | r47
|
||||
let s_ = Predef.tk 5 servir in
|
||||
{s = table {
|
||||
VI Infn => s_ + "ervir" ;
|
||||
@@ -3591,6 +3645,7 @@ oper servir_Besch : Str -> Verbum = \servir ->
|
||||
} ;
|
||||
|
||||
oper seguir_Besch : Str -> Verbum = \seguir ->
|
||||
-- 55 | r50
|
||||
let s_ = Predef.tk 5 seguir in
|
||||
{s = table {
|
||||
VI Infn => s_ + "eguir" ;
|
||||
@@ -3660,6 +3715,7 @@ oper seguir_Besch : Str -> Verbum = \seguir ->
|
||||
} ;
|
||||
|
||||
oper sentir_Besch : Str -> Verbum = \sentir ->
|
||||
-- 56 | r47
|
||||
let s_ = Predef.tk 5 sentir in
|
||||
{s = table {
|
||||
VI Infn => s_ + "entir" ;
|
||||
@@ -3729,6 +3785,7 @@ oper sentir_Besch : Str -> Verbum = \sentir ->
|
||||
} ;
|
||||
|
||||
oper preferir_Besch : Str -> Verbum = \preferir ->
|
||||
-- 57 | r47
|
||||
let pref_ = Predef.tk 4 preferir in
|
||||
{s = table {
|
||||
VI Infn => pref_ + "erir" ;
|
||||
@@ -3798,6 +3855,7 @@ oper preferir_Besch : Str -> Verbum = \preferir ->
|
||||
} ;
|
||||
|
||||
oper agredir_Besch : Str -> Verbum = \agredir ->
|
||||
-- 58 | r48
|
||||
let agr_ = Predef.tk 4 agredir in
|
||||
{s = table {
|
||||
VI Infn => agr_ + "edir" ;
|
||||
@@ -3867,6 +3925,7 @@ oper agredir_Besch : Str -> Verbum = \agredir ->
|
||||
} ;
|
||||
|
||||
oper dormir_Besch : Str -> Verbum = \dormir ->
|
||||
-- 59 | r51
|
||||
let d_ = Predef.tk 5 dormir in
|
||||
{s = table {
|
||||
VI Infn => d_ + "ormir" ;
|
||||
@@ -3936,6 +3995,7 @@ oper dormir_Besch : Str -> Verbum = \dormir ->
|
||||
} ;
|
||||
|
||||
oper polir_Besch : Str -> Verbum = \polir ->
|
||||
-- 60 | r81
|
||||
let p_ = Predef.tk 4 polir in
|
||||
{s = table {
|
||||
VI Infn => p_ + "olir" ;
|
||||
@@ -4005,6 +4065,7 @@ oper polir_Besch : Str -> Verbum = \polir ->
|
||||
} ;
|
||||
|
||||
oper acudir_Besch : Str -> Verbum = \acudir ->
|
||||
-- 61 | r53
|
||||
let ac_ = Predef.tk 4 acudir in
|
||||
{s = table {
|
||||
VI Infn => ac_ + "udir" ;
|
||||
@@ -4074,6 +4135,7 @@ oper acudir_Besch : Str -> Verbum = \acudir ->
|
||||
} ;
|
||||
|
||||
oper fugir_Besch : Str -> Verbum = \fugir ->
|
||||
-- 62 | r54
|
||||
let f_ = Predef.tk 4 fugir in
|
||||
{s = table {
|
||||
VI Infn => f_ + "ugir" ;
|
||||
@@ -4143,6 +4205,7 @@ oper fugir_Besch : Str -> Verbum = \fugir ->
|
||||
} ;
|
||||
|
||||
oper frigir_Besch : Str -> Verbum = \frigir ->
|
||||
-- 63 | r28
|
||||
let fr_ = Predef.tk 4 frigir in
|
||||
{s = table {
|
||||
VI Infn => fr_ + "igir" ;
|
||||
@@ -4212,6 +4275,7 @@ oper frigir_Besch : Str -> Verbum = \frigir ->
|
||||
} ;
|
||||
|
||||
oper divergir_Besch : Str -> Verbum = \divergir ->
|
||||
-- 64 | r49
|
||||
let div_ = Predef.tk 5 divergir in
|
||||
{s = table {
|
||||
VI Infn => div_ + "ergir" ;
|
||||
@@ -4281,6 +4345,7 @@ oper divergir_Besch : Str -> Verbum = \divergir ->
|
||||
} ;
|
||||
|
||||
oper refletir_Besch : Str -> Verbum = \refletir ->
|
||||
-- 65 | r47
|
||||
let refl_ = Predef.tk 4 refletir in
|
||||
{s = table {
|
||||
VI Infn => refl_ + vars "etir" "ectir" ;
|
||||
@@ -4350,6 +4415,7 @@ oper refletir_Besch : Str -> Verbum = \refletir ->
|
||||
} ;
|
||||
|
||||
oper ir_Besch : Str -> Verbum = \ir ->
|
||||
-- 66 | r53
|
||||
let x_ = Predef.tk 2 ir in
|
||||
{s = table {
|
||||
VI Infn => x_ + "ir" ;
|
||||
@@ -4419,6 +4485,7 @@ oper ir_Besch : Str -> Verbum = \ir ->
|
||||
} ;
|
||||
|
||||
oper vir_Besch : Str -> Verbum = \vir ->
|
||||
-- 67 | r63
|
||||
let v_ = Predef.tk 2 vir in
|
||||
{s = table {
|
||||
VI Infn => v_ + "ir" ;
|
||||
@@ -4488,6 +4555,7 @@ oper vir_Besch : Str -> Verbum = \vir ->
|
||||
} ;
|
||||
|
||||
oper sair_Besch : Str -> Verbum = \sair ->
|
||||
-- 68 | r42
|
||||
let sa_ = Predef.tk 2 sair in
|
||||
{s = table {
|
||||
VI Infn => sa_ + "ir" ;
|
||||
@@ -4557,6 +4625,7 @@ oper sair_Besch : Str -> Verbum = \sair ->
|
||||
} ;
|
||||
|
||||
oper rir_Besch : Str -> Verbum = \rir ->
|
||||
-- 69 | r48
|
||||
let r_ = Predef.tk 2 rir in
|
||||
{s = table {
|
||||
VI Infn => r_ + "ir" ;
|
||||
@@ -4626,6 +4695,7 @@ oper rir_Besch : Str -> Verbum = \rir ->
|
||||
} ;
|
||||
|
||||
oper pedir_Besch : Str -> Verbum = \pedir ->
|
||||
-- 70 | r63
|
||||
let pe_ = Predef.tk 3 pedir in
|
||||
{s = table {
|
||||
VI Infn => pe_ + "dir" ;
|
||||
@@ -4695,6 +4765,7 @@ oper pedir_Besch : Str -> Verbum = \pedir ->
|
||||
} ;
|
||||
|
||||
oper ouvir_Besch : Str -> Verbum = \ouvir ->
|
||||
-- 71 | r63
|
||||
let ou_ = Predef.tk 3 ouvir in
|
||||
{s = table {
|
||||
VI Infn => ou_ + "vir" ;
|
||||
@@ -4764,6 +4835,7 @@ oper ouvir_Besch : Str -> Verbum = \ouvir ->
|
||||
} ;
|
||||
|
||||
oper traduzir_Besch : Str -> Verbum = \traduzir ->
|
||||
-- 72 | r44
|
||||
let traduz_ = Predef.tk 2 traduzir in
|
||||
{s = table {
|
||||
VI Infn => traduz_ + "ir" ;
|
||||
@@ -4833,6 +4905,7 @@ oper traduzir_Besch : Str -> Verbum = \traduzir ->
|
||||
} ;
|
||||
|
||||
oper distribuir_Besch : Str -> Verbum = \distribuir ->
|
||||
-- 73 | r40
|
||||
let distribu_ = Predef.tk 2 distribuir in
|
||||
{s = table {
|
||||
VI Infn => distribu_ + "ir" ;
|
||||
@@ -4902,6 +4975,7 @@ oper distribuir_Besch : Str -> Verbum = \distribuir ->
|
||||
} ;
|
||||
|
||||
oper destruir_Besch : Str -> Verbum = \destruir ->
|
||||
-- 74 | r57
|
||||
let destr_ = Predef.tk 3 destruir in
|
||||
{s = table {
|
||||
VI Infn => destr_ + "uir" ;
|
||||
@@ -4971,6 +5045,7 @@ oper destruir_Besch : Str -> Verbum = \destruir ->
|
||||
} ;
|
||||
|
||||
oper arguir_Besch : Str -> Verbum = \arguir ->
|
||||
-- 75 | r31
|
||||
let arg_ = Predef.tk 3 arguir in
|
||||
{s = table {
|
||||
VI Infn => arg_ + "uir" ;
|
||||
@@ -5040,6 +5115,7 @@ oper arguir_Besch : Str -> Verbum = \arguir ->
|
||||
} ;
|
||||
|
||||
oper reunir_Besch : Str -> Verbum = \reunir ->
|
||||
-- 76 | r18
|
||||
let re_ = Predef.tk 4 reunir in
|
||||
{s = table {
|
||||
VI Infn => re_ + "unir" ;
|
||||
@@ -5109,6 +5185,7 @@ oper reunir_Besch : Str -> Verbum = \reunir ->
|
||||
} ;
|
||||
|
||||
oper proibir_Besch : Str -> Verbum = \proibir ->
|
||||
-- 77 | r20
|
||||
let pro_ = Predef.tk 4 proibir in
|
||||
{s = table {
|
||||
VI Infn => pro_ + "ibir" ;
|
||||
@@ -5178,6 +5255,7 @@ oper proibir_Besch : Str -> Verbum = \proibir ->
|
||||
} ;
|
||||
|
||||
oper imergir_Besch : Str -> Verbum = \imergir ->
|
||||
-- 78 | r49
|
||||
let imerg_ = Predef.tk 2 imergir in
|
||||
{s = table {
|
||||
VI Infn => imerg_ + "ir" ;
|
||||
@@ -5247,6 +5325,7 @@ oper imergir_Besch : Str -> Verbum = \imergir ->
|
||||
} ;
|
||||
|
||||
oper falir_Besch : Str -> Verbum = \falir ->
|
||||
-- 79 | r81
|
||||
let fal_ = Predef.tk 2 falir in
|
||||
{s = table {
|
||||
VI Infn => fal_ + "ir" ;
|
||||
@@ -5316,6 +5395,7 @@ oper falir_Besch : Str -> Verbum = \falir ->
|
||||
} ;
|
||||
|
||||
oper remir_Besch : Str -> Verbum = \remir ->
|
||||
-- 80 | r49
|
||||
let rem_ = Predef.tk 2 remir in
|
||||
{s = table {
|
||||
VI Infn => rem_ + "ir" ;
|
||||
@@ -5385,6 +5465,7 @@ oper remir_Besch : Str -> Verbum = \remir ->
|
||||
} ;
|
||||
|
||||
oper viajar_Besch : Str -> Verbum = \viajar ->
|
||||
-- r22
|
||||
let viaj_ = Predef.tk 2 viajar in
|
||||
{s = table {
|
||||
VI Infn => viaj_ + "ar" ;
|
||||
@@ -5454,6 +5535,7 @@ oper viajar_Besch : Str -> Verbum = \viajar ->
|
||||
} ;
|
||||
|
||||
oper suar_Besch : Str -> Verbum = \suar ->
|
||||
-- r37
|
||||
let su_ = Predef.tk 2 suar in
|
||||
{s = table {
|
||||
VI Infn => su_ + "ar" ;
|
||||
@@ -5522,4 +5604,74 @@ oper suar_Besch : Str -> Verbum = \suar ->
|
||||
}
|
||||
} ;
|
||||
|
||||
oper peneirar_Besch : Str -> Verbum = \peneirar ->
|
||||
-- r10
|
||||
let peneir_ = Predef.tk 2 peneirar in
|
||||
{s = table {
|
||||
VI Infn => peneir_ + "ar" ;
|
||||
VI Ger => peneir_ + "ando" ;
|
||||
VI Part => peneir_ + "ado" ;
|
||||
VPB (Pres Ind Sg P1) => peneir_ + "o" ;
|
||||
VPB (Pres Ind Sg P2) => peneir_ + "as" ;
|
||||
VPB (Pres Ind Sg P3) => peneir_ + "a" ;
|
||||
VPB (Pres Ind Pl P1) => peneir_ + "amos" ;
|
||||
VPB (Pres Ind Pl P2) => peneir_ + "ais" ;
|
||||
VPB (Pres Ind Pl P3) => peneir_ + "am" ;
|
||||
VPB (Pres Sub Sg P1) => peneir_ + "e" ;
|
||||
VPB (Pres Sub Sg P2) => peneir_ + "es" ;
|
||||
VPB (Pres Sub Sg P3) => peneir_ + "e" ;
|
||||
VPB (Pres Sub Pl P1) => peneir_ + "emos" ;
|
||||
VPB (Pres Sub Pl P2) => peneir_ + "eis" ;
|
||||
VPB (Pres Sub Pl P3) => peneir_ + "em" ;
|
||||
VPB (PretI Ind Sg P1) => peneir_ + "ava" ; --# notpresent
|
||||
VPB (PretI Ind Sg P2) => peneir_ + "avas" ; --# notpresent
|
||||
VPB (PretI Ind Sg P3) => peneir_ + "ava" ; --# notpresent
|
||||
VPB (PretI Ind Pl P1) => peneir_ + "ávamos" ; --# notpresent
|
||||
VPB (PretI Ind Pl P2) => peneir_ + "áveis" ; --# notpresent
|
||||
VPB (PretI Ind Pl P3) => peneir_ + "avam" ; --# notpresent
|
||||
VPB (PretI Sub Sg P1) => peneir_ + "asse" ; --# notpresent
|
||||
VPB (PretI Sub Sg P2) => peneir_ + "asses" ; --# notpresent
|
||||
VPB (PretI Sub Sg P3) => peneir_ + "asse" ; --# notpresent
|
||||
VPB (PretI Sub Pl P1) => peneir_ + "ássemos" ; --# notpresent
|
||||
VPB (PretI Sub Pl P2) => peneir_ + "ásseis" ; --# notpresent
|
||||
VPB (PretI Sub Pl P3) => peneir_ + "assem" ; --# notpresent
|
||||
VPB (MQPerf Sg P1) => peneir_ + "ara" ; --# notpresent
|
||||
VPB (MQPerf Sg P2) => peneir_ + "aras" ; --# notpresent
|
||||
VPB (MQPerf Sg P3) => peneir_ + "ara" ; --# notpresent
|
||||
VPB (MQPerf Pl P1) => peneir_ + "áramos" ; --# notpresent
|
||||
VPB (MQPerf Pl P2) => peneir_ + "áreis" ; --# notpresent
|
||||
VPB (MQPerf Pl P3) => peneir_ + "aram" ; --# notpresent
|
||||
VPB (PretP Sg P1) => peneir_ + "ei" ; --# notpresent
|
||||
VPB (PretP Sg P2) => peneir_ + "aste" ; --# notpresent
|
||||
VPB (PretP Sg P3) => peneir_ + "ou" ; --# notpresent
|
||||
VPB (PretP Pl P1) => peneir_ + "amos" ; --# notpresent
|
||||
VPB (PretP Pl P2) => peneir_ + "astes" ; --# notpresent
|
||||
VPB (PretP Pl P3) => peneir_ + "aram" ; --# notpresent
|
||||
VPB (Fut Ind Sg P1) => peneir_ + "arei" ; --# notpresent
|
||||
VPB (Fut Ind Sg P2) => peneir_ + "arás" ; --# notpresent
|
||||
VPB (Fut Ind Sg P3) => peneir_ + "ará" ; --# notpresent
|
||||
VPB (Fut Ind Pl P1) => peneir_ + "aremos" ; --# notpresent
|
||||
VPB (Fut Ind Pl P2) => peneir_ + "areis" ; --# notpresent
|
||||
VPB (Fut Ind Pl P3) => peneir_ + "arão" ; --# notpresent
|
||||
VPB (Fut Sub Sg P1) => peneir_ + "ar" ; --# notpresent
|
||||
VPB (Fut Sub Sg P2) => peneir_ + "ares" ; --# notpresent
|
||||
VPB (Fut Sub Sg P3) => peneir_ + "ar" ; --# notpresent
|
||||
VPB (Fut Sub Pl P1) => peneir_ + "armos" ; --# notpresent
|
||||
VPB (Fut Sub Pl P2) => peneir_ + "ardes" ; --# notpresent
|
||||
VPB (Fut Sub Pl P3) => peneir_ + "arem" ; --# notpresent
|
||||
VPB (Cond Sg P1) => peneir_ + "aria" ; --# notpresent
|
||||
VPB (Cond Sg P2) => peneir_ + "aries" ; --# notpresent
|
||||
VPB (Cond Sg P3) => peneir_ + "aria" ; --# notpresent
|
||||
VPB (Cond Pl P1) => peneir_ + "aríamos" ; --# notpresent
|
||||
VPB (Cond Pl P2) => peneir_ + "aríeis" ; --# notpresent
|
||||
VPB (Cond Pl P3) => peneir_ + "ariam" ; --# notpresent
|
||||
VPB (Imper Sg P2) => peneir_ + "a" ;
|
||||
VPB (Imper Sg P3) => peneir_ + "e" ;
|
||||
VPB (Imper Pl P1) => peneir_ + "emos" ;
|
||||
VPB (Imper Pl P2) => peneir_ + "ai" ;
|
||||
VPB (Imper Pl P3) => peneir_ + "em" ;
|
||||
VPB (Imper Sg P1) => nonExist
|
||||
}
|
||||
} ;
|
||||
|
||||
} ;
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
concrete ConstructionPor of Construction = CatPor **
|
||||
open SyntaxPor, SymbolicPor, ParadigmsPor, BeschPor,
|
||||
(L = LexiconPor), (E = ExtraPor), (B = IrregBeschPor), (R = ResPor),
|
||||
(S = SyntaxPor), (C = CommonRomance),
|
||||
(S = SyntaxPor), (C = CommonRomance), CommonRomance,
|
||||
Prelude in {
|
||||
flags coding=utf8 ;
|
||||
|
||||
@@ -52,19 +52,71 @@ lin
|
||||
|
||||
lincat
|
||||
Timeunit = N ;
|
||||
Hour = {s : Str ; pe : Period ; n : Number} ;
|
||||
Weekday = N ;
|
||||
Monthday = NP ;
|
||||
Month = N ;
|
||||
Year = NP ;
|
||||
oper
|
||||
noPrep : Prep = mkPrep [] ;
|
||||
|
||||
param
|
||||
Period = Manha | Tarde | Noite | None ;
|
||||
|
||||
oper
|
||||
noPrep : Prep = mkPrep [] ;
|
||||
|
||||
lin
|
||||
timeunitAdv n time =
|
||||
let n_card : Card = lin Card n;
|
||||
n_hours_NP : NP = mkNP n_card time ;
|
||||
in S.mkAdv for_Prep n_hours_NP | S.mkAdv to_Prep n_hours_NP ;--| S.mkAdv (n_hours_NP.s ! R.Nom) ;
|
||||
timeunitRange l u time = {s = "de" ++ l.s ! time.g
|
||||
++ "a" ++ u.s ! time.g ++ time.s ! u.n } ;
|
||||
|
||||
oneHour = mkHour "1" Manha Sg ;
|
||||
twoHour = mkHour "2" Manha Pl ;
|
||||
threeHour = mkHour "3" Manha Pl ;
|
||||
fourHour = mkHour "4" Manha Pl ;
|
||||
fiveHour = mkHour "5" Manha Pl ;
|
||||
sixHour = mkHour "6" Manha Pl ;
|
||||
sevenHour = mkHour "7" Manha Pl ;
|
||||
eightHour = mkHour "8" Manha Pl ;
|
||||
nineHour = mkHour "9" Manha Pl ;
|
||||
tenHour = mkHour "10" Manha Pl ;
|
||||
elevenHour = mkHour "11" Manha Pl ;
|
||||
twelveHour = {s = "meio-dia" ; pe = None ; n = Sg} ;
|
||||
thirteenHour = mkHour "13" Tarde Pl ;
|
||||
fourteenHour = mkHour "14" Tarde Pl ;
|
||||
fifteenHour = mkHour "15" Tarde Pl ;
|
||||
sixteenHour = mkHour "16" Tarde Pl ;
|
||||
seventeenHour = mkHour "17" Tarde Pl ;
|
||||
eighteenHour = mkHour "18" Tarde Pl ;
|
||||
nineteenHour = mkHour "19" Noite Pl ;
|
||||
twentyHour = mkHour "20" Noite Pl ;
|
||||
twentyOneHour = mkHour "21" Noite Pl ;
|
||||
twentyTwoHour = mkHour "22" Noite Pl ;
|
||||
twentyThreeHour = mkHour "23" Noite Pl ;
|
||||
twentyFourHour = {s = "meia-noite" ; pe = None ; n = Sg} ;
|
||||
|
||||
timeHour h = mkAdv (R.a ! Fem ! h.n ++ h.s ++ period ! h.pe) ;
|
||||
|
||||
timeHourMinute h m = let
|
||||
min = m.s ! Masc
|
||||
in
|
||||
mkAdv (R.a ! Fem ! h.n ++ h.s ++ "e" ++ min ++ period ! h.pe) ;
|
||||
|
||||
oper
|
||||
mkHour : Str -> Period -> Number -> {s : Str ; pe : Period ; n : Number} ;
|
||||
mkHour num pe n = S.mkUtt (S.mkCard num) ** {pe = pe ; n = n} ;
|
||||
|
||||
period : Period => Str ;
|
||||
period = table {
|
||||
Manha => "da manhã" ;
|
||||
Tarde => "da tarde" ;
|
||||
Noite => "da noite" ;
|
||||
None => ""
|
||||
} ;
|
||||
|
||||
lin
|
||||
weekdayPunctualAdv w = lin Adv {s = w.s ! C.Sg} ; -- lundi
|
||||
weekdayHabitualAdv w = SyntaxPor.mkAdv noPrep (mkNP the_Det w) ; -- il lunedí ----
|
||||
weekdayLastAdv w = SyntaxPor.mkAdv noPrep (mkNP the_Det (mkCN (mkA "passado") w)) ; -- il lunedí scorso
|
||||
|
||||
@@ -106,12 +106,18 @@ instance DiffPor of DiffRomance - [partAgr,vpAgrSubj,vpAgrClits] = open CommonRo
|
||||
partitive = \_,c -> prepCase c ;
|
||||
|
||||
oper
|
||||
a : Gender => Number => Str ;
|
||||
a = genNumForms "a" "à" "aos" "às" ;
|
||||
|
||||
de : Gender => Number => Str ;
|
||||
de = genNumForms "do" "da" "dos" "das" ;
|
||||
|
||||
artDef : Bool -> Gender -> Number -> Case -> Str ;
|
||||
-- not sure if isNP is relevant
|
||||
artDef _isNP g n c = case c of {
|
||||
Nom | Acc => genNumForms "o" "a" "os" "as" ;
|
||||
CPrep P_de => genNumForms "do" "da" "dos" "das" ;
|
||||
CPrep P_a => genNumForms "ao" "à" "aos" "às" ;
|
||||
CPrep P_de => de ;
|
||||
CPrep P_a => a ;
|
||||
CPrep P_em => genNumForms "no" "na" "nos" "nas" ;
|
||||
CPrep P_por => genNumForms "pelo" "pela" "pelos" "pelas"
|
||||
} ! g ! n ;
|
||||
@@ -148,7 +154,7 @@ instance DiffPor of DiffRomance - [partAgr,vpAgrSubj,vpAgrClits] = open CommonRo
|
||||
subjIf = "se" ;
|
||||
|
||||
oper
|
||||
relPron : Bool => AAgr => Case => Str = \\b,a,c =>
|
||||
relPron : Bool => AAgr => Case => Str = \\_b,a,c =>
|
||||
case c of {
|
||||
Nom | Acc => "que" ;
|
||||
CPrep P_a => "cujo" ;
|
||||
|
||||
@@ -2,33 +2,116 @@
|
||||
|
||||
concrete ExtendPor of Extend =
|
||||
CatPor ** ExtendFunctor -
|
||||
[
|
||||
iFem_Pron, weFem_Pron, youFem_Pron, youPlFem_Pron, youPolPl_Pron, youPolFem_Pron, youPolPlFem_Pron, theyFem_Pron,
|
||||
ProDrop,
|
||||
PassVPSlash, ExistsNP, VPS
|
||||
] -- put the names of your own definitions here
|
||||
[
|
||||
AdAdV,
|
||||
AdjAsCN,
|
||||
AdjAsNP,
|
||||
ApposNP,
|
||||
BaseVPS,
|
||||
ByVP,
|
||||
CompBareCN,
|
||||
ComplBareVS,
|
||||
ComplSlashPartLast,
|
||||
CompoundAP,
|
||||
CompoundN,
|
||||
CompVP,
|
||||
ConjVPS,
|
||||
ConsVPS,
|
||||
--EmptyRelSlash,
|
||||
ExistsNP,
|
||||
GenIP,
|
||||
GenModIP,
|
||||
GenModNP,
|
||||
GenNP,
|
||||
GerundAdv,
|
||||
GerundCN,
|
||||
GerundNP,
|
||||
IAdvAdv,
|
||||
ICompAP,
|
||||
InOrderToVP,
|
||||
ListVPS,
|
||||
MkVPS,
|
||||
PassAgentVPSlash,
|
||||
PassVPSlash,
|
||||
PastPartAP,
|
||||
PastPartAgentAP,
|
||||
PositAdVAdj,
|
||||
PredVPS,
|
||||
PresPartAP,
|
||||
ProDrop,
|
||||
PurposeVP,
|
||||
VPS,
|
||||
iFem_Pron,
|
||||
theyFem_Pron,
|
||||
UttAdV,
|
||||
UttVPShort,
|
||||
weFem_Pron,
|
||||
WithoutVP,
|
||||
youFem_Pron,
|
||||
youPlFem_Pron,
|
||||
youPolFem_Pron,
|
||||
youPolPlFem_Pron,
|
||||
youPolPl_Pron
|
||||
] -- don't forget to put the names of your own
|
||||
-- definitions here
|
||||
with
|
||||
(Grammar = GrammarPor), (Syntax = SyntaxPor) **
|
||||
open
|
||||
GrammarPor,
|
||||
ResPor,
|
||||
MorphoPor,
|
||||
Coordination,
|
||||
Prelude,
|
||||
ParadigmsPor,
|
||||
(S = StructuralPor) in {
|
||||
|
||||
lincat
|
||||
VPS = {s : Agr => Str} ;
|
||||
[VPS] = {s1,s2 : Agr => Str} ;
|
||||
-- VPI = {s : VType => Agr => Str } ;
|
||||
GrammarPor,
|
||||
ResPor,
|
||||
MorphoPor,
|
||||
Coordination,
|
||||
Prelude,
|
||||
ParadigmsPor,
|
||||
(S = StructuralPor) in {
|
||||
|
||||
lin
|
||||
BaseVPS = twotable Agr ;
|
||||
ConsVPS = consrTable Agr comma ;
|
||||
GenNP np =
|
||||
let denp = (np.s ! ResPor.genitive).ton in {
|
||||
s = \\_,_,_,_ => [] ;
|
||||
sp = \\_,_,_ => denp ;
|
||||
s2 = denp ;
|
||||
isNeg = False ;
|
||||
} ;
|
||||
|
||||
-- MkVPS t p vp = mkVPS (lin Temp t) (lin Pol p) (lin VP vp) ;
|
||||
--TODO: write mkVPS oper
|
||||
GenIP ip = {s = \\_,_,c => ip.s ! c} ;
|
||||
|
||||
GenModNP num np cn = DetCN (DetQuant (GenNP (lin NP np)) num) cn ;
|
||||
|
||||
GenModIP num ip cn = IdetCN (IdetQuant (GenIP (lin IP ip)) num) cn ;
|
||||
|
||||
CompBareCN cn = {
|
||||
s = \\agr => cn.s ! agr.n ;
|
||||
cop = serCopula
|
||||
} ;
|
||||
|
||||
EmptyRelSlash cls = {
|
||||
s = \\agr,t,a,p,m => cls.s ! agr ! DDir ! t ! a ! p ! m ++ cls.c2.s ;
|
||||
c = Nom
|
||||
} ;
|
||||
|
||||
---- these come from ExtraRomance: how to avoid the repetition?
|
||||
---- can't seem to be able to use two functors
|
||||
lincat
|
||||
VPS = {s : Mood => Agr => Bool => Str} ;
|
||||
[VPS] = {s1,s2 : Mood => Agr => Bool => Str} ;
|
||||
|
||||
lin
|
||||
BaseVPS x y = twoTable3 Mood Agr Bool x y ;
|
||||
ConsVPS = consrTable3 Mood Agr Bool comma ;
|
||||
|
||||
PredVPS np vpi = {
|
||||
s = \\m => (np.s ! Nom).comp ++ vpi.s ! m ! np.a ! np.isNeg
|
||||
} ;
|
||||
|
||||
MkVPS tm p vp = {
|
||||
s = \\m,agr,isNeg =>
|
||||
tm.s ++ p.s ++
|
||||
(mkClausePol (orB isNeg vp.isNeg) [] False False agr vp).s
|
||||
! DDir ! tm.t ! tm.a ! p.p ! m
|
||||
} ;
|
||||
|
||||
ConjVPS = conjunctDistrTable3 Mood Agr Bool ;
|
||||
|
||||
lin
|
||||
ProDrop p = {
|
||||
@@ -43,27 +126,151 @@ concrete ExtendPor of Extend =
|
||||
isNeg = False
|
||||
} ;
|
||||
|
||||
lin
|
||||
PassVPSlash vps =
|
||||
let auxvp = predV copula
|
||||
in
|
||||
insertComplement (\\a => let agr = complAgr a in vps.s.s ! VPart agr.g agr.n) {
|
||||
s = auxvp.s ;
|
||||
agr = auxvp.agr ;
|
||||
neg = vps.neg ;
|
||||
clit1 = vps.clit1 ;
|
||||
clit2 = vps.clit2 ;
|
||||
clit3 = vps.clit3 ;
|
||||
isNeg = vps.isNeg ;
|
||||
comp = vps.comp ;
|
||||
ext = vps.ext
|
||||
ICompAP ap = {
|
||||
s =\\a => "o quão" ++ ap.s ! AF a.g a.n ;
|
||||
cop = serCopula
|
||||
} ;
|
||||
|
||||
IAdvAdv adv = {
|
||||
s = "o quão" ++ adv.s
|
||||
} ;
|
||||
|
||||
CompIQuant iq = {s = \\aa => iq.s ! aa.n ! aa.g ! Nom ; cop = serCopula} ;
|
||||
|
||||
PrepCN prep cn = {s = prep.s ++ prepCase prep.c ++ cn.s ! Sg} ;
|
||||
|
||||
lin
|
||||
PresPartAP vp = {
|
||||
s = \\af => gerVP vp (aform2aagr af ** {p = P3}) ;
|
||||
isPre = False
|
||||
} ;
|
||||
|
||||
PastPartAP vps = pastPartAP vps [] ;
|
||||
|
||||
PastPartAgentAP vps np = pastPartAP vps (let by = <Grammar.by8agent_Prep : Prep> in by.s ++ (np.s ! by.c).ton) ;
|
||||
|
||||
PassVPSlash vps = passVPSlash vps [] ;
|
||||
|
||||
PassAgentVPSlash vps np = passVPSlash vps (let by = <Grammar.by8agent_Prep : Prep> in by.s ++ (np.s ! by.c).ton) ;
|
||||
|
||||
ExistsNP np =
|
||||
mkClause [] True False np.a
|
||||
(insertComplement (\\_ => (np.s ! Nom).ton)
|
||||
(predV (mkV "existir"))) ;
|
||||
|
||||
PurposeVP vp = {
|
||||
s = infVP vp (Ag Masc Sg P3)
|
||||
} ;
|
||||
|
||||
ComplBareVS = ComplVS ;
|
||||
|
||||
AdjAsCN ap = {
|
||||
s =\\n => ap.s ! AF Masc n ;
|
||||
g = Masc
|
||||
} ;
|
||||
|
||||
AdjAsNP ap = heavyNP {
|
||||
s = \\_c => ap.s ! AF Masc Sg ;
|
||||
a = Ag Masc Sg P3
|
||||
} ;
|
||||
|
||||
oper
|
||||
pastPartAP : VPSlash -> Str -> AP ;
|
||||
pastPartAP vps agent = lin AP {
|
||||
s = \\af => vps.comp ! (aform2aagr af ** {p = P3}) ++ vps.s.s ! VPart (aform2gender af) (aform2number af) ++ agent ;
|
||||
isPre = False
|
||||
} ;
|
||||
|
||||
passVPSlash : VPSlash -> Str -> VP ;
|
||||
passVPSlash vps agent = let
|
||||
auxvp = predV auxPassive
|
||||
in
|
||||
vps ** {
|
||||
s = auxvp.s ;
|
||||
agr = auxvp.agr ;
|
||||
comp = \\a => vps.comp ! a ++ (let agr = complAgr a in vps.s.s ! VPart agr.g agr.n) ++ agent ;
|
||||
} ;
|
||||
|
||||
lin
|
||||
CompoundN noun noun2 = { -- order is different because that's needed for correct translation from english
|
||||
s = \\n => noun2.s ! n
|
||||
++ variants {"de" ; genForms "do" "da" ! noun.g}
|
||||
++ noun.s ! Sg ;
|
||||
g = noun2.g
|
||||
} ;
|
||||
|
||||
CompoundAP noun adj = {
|
||||
s = \\af => case af of {
|
||||
AF g n => adj.s ! Posit ! AF noun.g n ++ "de" ++ noun.s ! n ;
|
||||
-- do I need do(s)/da(s)?
|
||||
_ => adj.s ! Posit ! AF noun.g Sg ++ "de" ++ noun.s ! Sg
|
||||
} ;
|
||||
isPre = adj.isPre
|
||||
} ;
|
||||
|
||||
GerundCN vp = {
|
||||
s = \\n => infVP vp {g = Masc ; n = n ; p = P3} ;
|
||||
g = Masc
|
||||
} ;
|
||||
|
||||
GerundNP vp = let
|
||||
neutrAgr = Ag Masc Sg P3
|
||||
in heavyNP {
|
||||
s = \\_ => gerVP vp neutrAgr ;
|
||||
a = neutrAgr
|
||||
} ;
|
||||
|
||||
GerundAdv vp = {
|
||||
s = gerundStr vp
|
||||
} ;
|
||||
|
||||
WithoutVP vp = {
|
||||
s = "sem" ++ gerundStr vp
|
||||
} ;
|
||||
|
||||
ByVP vp = {
|
||||
s = "by" ++ gerundStr vp
|
||||
} ;
|
||||
|
||||
InOrderToVP vp = {
|
||||
s = "a fim de" ++ gerundStr vp
|
||||
} ;
|
||||
|
||||
ApposNP np1 np2 = np1 ** {
|
||||
s = \\c => {
|
||||
c1 = (np1.s ! c).c1 ++ (np2.s ! c).c1 ;
|
||||
c2 = (np1.s ! c).c2 ++ (np2.s ! c).c2 ;
|
||||
comp = (np1.s ! c).comp ++ (np2.s ! c).comp ;
|
||||
ton = (np1.s ! c).ton ++ (np2.s ! c).ton
|
||||
} ;
|
||||
} ;
|
||||
|
||||
AdAdV aa av = {
|
||||
s = aa.s ++ av.s
|
||||
} ;
|
||||
|
||||
UttAdV av = av ;
|
||||
|
||||
PositAdVAdj a = {
|
||||
s = a.s ! Posit ! AA
|
||||
} ;
|
||||
|
||||
--TODO: actually use ant
|
||||
CompVP ant p vp = let
|
||||
neg = negation ! p.p
|
||||
in {
|
||||
s = \\agr => ant.s ++ p.s ++ "de" ++ neg.p1 ++ infVP vp agr ;
|
||||
cop = serCopula
|
||||
} ;
|
||||
|
||||
UttVPShort = UttVP ;
|
||||
|
||||
ComplSlashPartLast = ComplSlash ;
|
||||
|
||||
oper
|
||||
gerundStr : VP -> Str ;
|
||||
gerundStr vp = gerVP vp (Ag Masc Sg P3) ;
|
||||
|
||||
lin
|
||||
-- Romance
|
||||
iFem_Pron = pronAgr S.i_Pron Fem Sg P1 ;
|
||||
|
||||
@@ -20,13 +20,23 @@ concrete IdiomPor of Idiom = CatPor **
|
||||
|
||||
ExistNP np =
|
||||
mkClause [] True False (agrP3 Masc Sg)
|
||||
(insertComplement (\\_ => (np.s ! Acc).ton) (predV B.haver_V)) ;
|
||||
(insertComplement (\\_ => (np.s ! Acc).ton) (predV B.haver_V)) ;
|
||||
|
||||
ExistIP ip = {
|
||||
s = \\t,a,p,_ =>
|
||||
ip.s ! Nom ++
|
||||
(mkClause [] True False (agrP3 Masc Sg) (predV B.haver_V)).s ! DDir ! t ! a ! p ! Indic
|
||||
} ;
|
||||
|
||||
ExistNPAdv np adv = mkClause [] True False (agrP3 Masc Sg) (insertComplement (\\_ => (np.s ! Acc).ton ++ adv.s) (predV B.haver_V)) ;
|
||||
|
||||
ExistIPAdv ip adv = {
|
||||
s = \\t,a,p,_ =>
|
||||
ip.s ! Nom ++
|
||||
(mkClause [] True False (agrP3 Masc Sg) (predV B.haver_V)).s ! DDir ! t ! a ! p ! Indic
|
||||
++ adv.s
|
||||
} ;
|
||||
|
||||
ProgrVP vp =
|
||||
insertComplement
|
||||
(\\agr =>
|
||||
|
||||
@@ -10,7 +10,7 @@ flags
|
||||
lin
|
||||
easy_A2V = mkA2V (mkA "fácil") dative genitive ;
|
||||
married_A2 = mkA2 (mkA "casado") dative ;
|
||||
probable_AS = mkAS (mkA "provável" "provável" "prováveis" "prováveis" "provavelmente") ;
|
||||
probable_AS = mkAS (prefA (mkA "provável" "provavelmente")) ;
|
||||
fun_AV = mkAV (mkA "divertido") genitive ;
|
||||
-- A
|
||||
bad_A = prefA (mkA (mkA "mau") (mkA "pior")) ;
|
||||
@@ -23,7 +23,7 @@ lin
|
||||
clean_A = mkA "limpo" ;
|
||||
clever_A = mkA "inteligente" ;
|
||||
cold_A = mkA "frio" ; -- fria
|
||||
correct_A = mkA "correto" | mkA "correcto" ;
|
||||
correct_A = mkA "correto" ;
|
||||
dirty_A = mkA "sujo" ;
|
||||
dry_A = mkA "seco" ;
|
||||
dull_A = mkA "desafilado" ;
|
||||
@@ -38,7 +38,7 @@ lin
|
||||
narrow_A = mkA "estreito" ;
|
||||
near_A = mkA "perto" ;
|
||||
new_A = prefA (mkA "novo") ;
|
||||
old_A = prefA (mkA "velho") ;
|
||||
old_A = prefA (mkA "velho") ;
|
||||
ready_A = mkA "pronto" ;
|
||||
red_A = mkA "vermelho" ;
|
||||
rotten_A = mkA "podre" ;
|
||||
@@ -47,7 +47,7 @@ lin
|
||||
short_A = mkA "curto" ; --- breve, pequeno, baixo
|
||||
small_A = prefA (mkA "pequeno") ;
|
||||
smooth_A = mkA "liso" ; -- suave
|
||||
straight_A = mkA "direto" | mkA "directo" ; -- reto
|
||||
straight_A = mkA "direto" ; -- reto
|
||||
stupid_A = mkA "estúpido" ;
|
||||
thick_A = mkA "grosso" ;
|
||||
thin_A = mkA "fino" ; -- delgado, magro
|
||||
@@ -58,7 +58,7 @@ lin
|
||||
white_A = compADeg (mkA "branco") ;
|
||||
wide_A = mkA "largo" ; -- extenso
|
||||
yellow_A = mkA "amarelo" ;
|
||||
young_A = prefA (mkA "jovem" "jovem" "jovens" "jovens" "juvenilmente") ;
|
||||
young_A = prefA (mkA "jovem" "juvenilmente") ;
|
||||
already_Adv = mkAdv "já" ;
|
||||
far_Adv = mkAdv "longe" ; ----?
|
||||
now_Adv = mkAdv "agora" ;
|
||||
@@ -337,7 +337,7 @@ lin
|
||||
flow_V = mkV "fluir" ; -- circular
|
||||
fly_V = mkV "voar" ;
|
||||
freeze_V = mkV "congelar" ;
|
||||
go_V = (mkV "ir") ;
|
||||
go_V = mkV (ir_Besch "ir") ;
|
||||
jump_V = mkV "saltar" ;
|
||||
laugh_V = mkV (rir_Besch "rir") ;
|
||||
lie_V = reflV (mkV "mentir") ;
|
||||
|
||||
@@ -19,5 +19,4 @@ oper
|
||||
a = if_then_else PAgr p (PAg Sg) PNoAg ---- e,g, "chacun de"; other possibilities?
|
||||
} ;
|
||||
|
||||
|
||||
}
|
||||
} ;
|
||||
|
||||
@@ -124,16 +124,16 @@ oper
|
||||
}
|
||||
} ;
|
||||
|
||||
mkAdj2N : (_,_: N) -> Str -> Adj = \mascN, femN, burramente ->
|
||||
{s = table {
|
||||
AF Masc n => mascN.s ! n ;
|
||||
AF Fem n => femN.s ! n ;
|
||||
AA => burramente
|
||||
}
|
||||
mkAdj2 : (_,_: Str) -> Adj ;
|
||||
mkAdj2 aj av = let
|
||||
adj = mkAdjReg aj
|
||||
in {
|
||||
s = table {
|
||||
AF g n => adj.s ! AF g n ;
|
||||
AA => av
|
||||
}
|
||||
} ;
|
||||
|
||||
mkAdjN : N -> Str -> Adj = \n, burramente -> mkAdj2N n n burramente ;
|
||||
|
||||
-- Then the regular and invariant patterns.
|
||||
|
||||
adjPreto : Str -> Adj = \preto ->
|
||||
@@ -174,7 +174,7 @@ oper
|
||||
"ã" => "a"
|
||||
} ;
|
||||
alemvo : Str = alem + v + "o" ;
|
||||
in mkAdj alemão alemã (alemã + "s") (alemã + "es") (alemã + "amente") ;
|
||||
in mkAdj alemão alemã (alemã + "s") (alemã + "es") (alemã + "mente") ;
|
||||
|
||||
adjEuropeu : Str -> Adj = \europeu -> let europe = init europeu in
|
||||
mkAdj europeu (europe + "ia") (europeu + "s") (europe + "ias")
|
||||
@@ -183,11 +183,13 @@ oper
|
||||
mkAdjReg : Str -> Adj = \a ->
|
||||
case a of {
|
||||
pret + "o" => adjPreto a ;
|
||||
anarquist + v@("e" | "a") => adjUtil (anarquist + v) (anarquist + v + "s") ;
|
||||
anarquist + v@("e" | "a") => adjUtil a (a + "s") ;
|
||||
ouvido + "r" => adjOuvidor a (ouvido + "ra") ;
|
||||
chin + "ês" => adjFrances a ;
|
||||
europ + "eu" => adjEuropeu a ;
|
||||
alem + "ão" => adjVo a ;
|
||||
provav + v@("e" | "i") + "l" => adjUtil a (provav + "eis") ;
|
||||
jove + "m" => adjUtil a (jove + "ns") ;
|
||||
_ => adjUtil a (a + "s")
|
||||
} ;
|
||||
|
||||
|
||||
@@ -203,9 +203,9 @@ oper
|
||||
regA a = compADeg {s = \\_ => (mkAdjReg a).s ; isPre = False ;
|
||||
lock_A = <>} ;
|
||||
|
||||
mk2A : (espanhol,espanhola : Str) -> A ;
|
||||
mk2A a b = compADeg {s = \\_ => (mkAdj2N (mkN a) (mkN b) (b + "mente")).s ; isPre = False ;
|
||||
lock_A = <>} ;
|
||||
mk2A : (único,unicamente : Str) -> A ;
|
||||
mk2A adj adv = compADeg {s = \\_ => (mkAdj2 adj adv).s ; isPre = False ;
|
||||
lock_A = <>} ;
|
||||
|
||||
mk5A : (preto,preta,pretos,pretas,pretamente : Str) -> A ;
|
||||
mk5A a b c d e = compADeg {s = \\_ => (mkAdj a b c d e).s ;
|
||||
@@ -432,6 +432,9 @@ oper
|
||||
mkVS : V -> VS ;
|
||||
mkVS v = v ** {m = \\_ => Indic ; lock_VS = <>} ; ---- more moods
|
||||
|
||||
subjVS : V -> VS ;
|
||||
subjVS v = v ** {m = \\_ => Conjunct ; lock_VS = <>} ;
|
||||
|
||||
mkVV : V -> VV ;
|
||||
-- plain infinitive: "quero falar"
|
||||
mkVV v = v ** {c2 = complAcc ; lock_VV = <>} ;
|
||||
|
||||
@@ -9,4 +9,5 @@
|
||||
instance ResPor of ResRomance = DiffPor ** open CommonRomance, Prelude in {
|
||||
oper
|
||||
vowel : pattern Str = #("a" | "e" | "i" | "o" | "u") ;
|
||||
|
||||
} ;
|
||||
|
||||
@@ -309,7 +309,11 @@ oper
|
||||
isSimple = False
|
||||
} ;
|
||||
|
||||
insertObj : (Agr => Str) -> VP -> VP = insertObjPron False ;
|
||||
insertObj : (Agr => Str) -> VP -> VP = insertObjPron False ;
|
||||
|
||||
insertObjPre : (Agr => Str) -> VP -> VP = \obj,vp -> vp ** {
|
||||
n2 = \\a => obj ! a ++ vp.n2 ! a -- e.g. ser inte *bra* ut
|
||||
} ;
|
||||
|
||||
insertObjPost : (Agr => Str) -> VP -> VP = \obj,vp -> vp ** {
|
||||
n2 = \\a => vp.n2 ! a ++ obj ! a ;
|
||||
|
||||
@@ -36,7 +36,7 @@ incomplete concrete SentenceScand of Sentence =
|
||||
SlashVS np vs slash =
|
||||
mkClause
|
||||
(np.s ! nominative) np.a
|
||||
(insertObj (\\_ => conjThat ++ slash.s ! Sub) (predV vs)) **
|
||||
(insertExt (conjThat ++ slash.s ! Sub) (predV vs)) **
|
||||
{n3 = slash.n3 ; c2 = slash.c2} ;
|
||||
|
||||
EmbedS s = {s = conjThat ++ s.s ! Sub} ;
|
||||
|
||||
@@ -16,20 +16,22 @@ incomplete concrete VerbScand of Verb = CatScand ** open CommonScand, ResScand,
|
||||
} ;
|
||||
|
||||
ComplVV v vp = insertObjPost (\\a => v.c2.s ++ infVP vp a) (predV v) ;
|
||||
ComplVS v s = insertObjPost (\\_ => conjThat ++ s.s ! Sub) (predV v) ; --- insertExt ?
|
||||
ComplVQ v q = insertObjPost (\\_ => q.s ! QIndir) (predV v) ;
|
||||
ComplVA v ap = insertObjPost (\\a => ap.s ! agrAdjNP a DIndef) (predV v) ;
|
||||
ComplVS v s = insertExt (conjThat ++ s.s ! Sub) (predV v) ; --- insertExt ?
|
||||
ComplVQ v q = insertExt (q.s ! QIndir) (predV v) ;
|
||||
ComplVA v ap = insertObjPre (\\a => ap.s ! agrAdjNP a DIndef) (predV v) ;
|
||||
|
||||
SlashV2V v vp = predV v ** {
|
||||
n3 = \\a => v.c3.s ++ infVP vp a ;
|
||||
c2 = v.c2
|
||||
} ;
|
||||
SlashV2S v s = predV v ** {
|
||||
n3 = \\_ => conjThat ++ s.s ! Sub ;
|
||||
n3 = \\_ => [] ;
|
||||
ext = conjThat ++ s.s ! Sub ;
|
||||
c2 = v.c2
|
||||
} ;
|
||||
SlashV2Q v q = predV v ** {
|
||||
n3 = \\_ => q.s ! QIndir ;
|
||||
n3 = \\_ => [] ;
|
||||
ext = q.s ! QIndir ;
|
||||
c2 = v.c2
|
||||
} ;
|
||||
SlashV2A v ap = predV v ** {
|
||||
|
||||
56
src/somali/AdjectiveSom.gf
Normal file
56
src/somali/AdjectiveSom.gf
Normal file
@@ -0,0 +1,56 @@
|
||||
concrete AdjectiveSom of Adjective = CatSom ** open ResSom, Prelude in {
|
||||
|
||||
flags optimize=all_subs ;
|
||||
|
||||
lin
|
||||
-- The principal ways of forming an adjectival phrase are
|
||||
-- positive, comparative, relational, reflexive-relational, and
|
||||
-- elliptic-relational.
|
||||
|
||||
-- : A -> AP ;
|
||||
PositA a = a ;
|
||||
|
||||
-- : A -> NP -> AP ;
|
||||
-- ComparA a np = a ** {
|
||||
-- s = \\agr => np.s ! Abs ++ "ka" ++ a.s ! AF Compar ;
|
||||
-- } ;
|
||||
|
||||
-- : A2 -> NP -> AP ; -- married to her
|
||||
-- ComplA2 a2 np = a2 ** { } ;
|
||||
|
||||
-- : A2 -> AP ; -- married to itself
|
||||
-- ReflA2 a2 = a2 ** { } ;
|
||||
|
||||
-- : A2 -> AP ; -- married
|
||||
UseA2 = PositA ;
|
||||
|
||||
-- : A -> AP ; -- warmer
|
||||
--UseComparA a = a ** {} ;
|
||||
|
||||
|
||||
-- : CAdv -> AP -> NP -> AP ; -- as cool as John
|
||||
-- CAdvAP adv ap np = ap ** { } ;
|
||||
|
||||
-- The superlative use is covered in $Ord$.
|
||||
|
||||
-- : Ord -> AP ; -- warmest
|
||||
-- AdjOrd ord = ord ** {} ;
|
||||
|
||||
-- Sentence and question complements defined for all adjectival
|
||||
-- phrases, although the semantics is only clear for some adjectives.
|
||||
|
||||
-- : AP -> SC -> AP ; -- good that she is here
|
||||
-- SentAP ap sc = ap ** { } ;
|
||||
|
||||
-- An adjectival phrase can be modified by an *adadjective*, such as "very".
|
||||
|
||||
-- : AdA -> AP -> AP ;
|
||||
-- AdAP ada ap = ap ** { } ;
|
||||
|
||||
|
||||
-- It can also be postmodified by an adverb, typically a prepositional phrase.
|
||||
|
||||
-- : AP -> Adv -> AP ; -- warm by nature
|
||||
-- AdvAP ap adv = ap ** {} ;
|
||||
|
||||
}
|
||||
38
src/somali/AdverbSom.gf
Normal file
38
src/somali/AdverbSom.gf
Normal file
@@ -0,0 +1,38 @@
|
||||
concrete AdverbSom of Adverb = CatSom ** open ResSom, ParamSom, Prelude in {
|
||||
|
||||
lin
|
||||
|
||||
-- : A -> Adv ;
|
||||
--PositAdvAdj adj = { } ;
|
||||
|
||||
-- : CAdv -> A -> NP -> Adv ; -- more warmly than John
|
||||
-- ComparAdvAdj cadv a np = { } ;
|
||||
|
||||
-- ComparAdvAdjS : CAdv -> A -> S -> Adv ; -- more warmly than he runs
|
||||
|
||||
-- : Prep -> NP -> Adv ;
|
||||
PrepNP prep np = {s = prep.s ! np.a ; s2 = np.s ! Abs} ; ---- ?
|
||||
|
||||
-- Adverbs can be modified by 'adadjectives', just like adjectives.
|
||||
|
||||
--AdAdv : AdA -> Adv -> Adv ; -- very quickly
|
||||
AdAdv ada adv = adv ** { s = ada.s ++ adv.s } ;
|
||||
-- Like adverbs, adadjectives can be produced by adjectives.
|
||||
|
||||
-- : A -> AdA ; -- extremely
|
||||
-- PositAdAAdj a = { } ;
|
||||
-- Subordinate clauses can function as adverbs.
|
||||
|
||||
-- : Subj -> S -> Adv ;
|
||||
-- SubjS subj s = {} ;
|
||||
|
||||
-- Comparison adverbs also work as numeral adverbs.
|
||||
|
||||
--AdnCAdv : CAdv -> AdN ; -- less (than five)
|
||||
--AdnCAdv cadv = {s = } ;
|
||||
} ;
|
||||
|
||||
{-
|
||||
gt PrepNP in_Prep (DetCN (DetQuant DefArt ?) (UseN ?) | l -bind
|
||||
gt PrepNP from_Prep (DetCN (DetQuant DefArt ?) (UseN ?)) | l -bind
|
||||
-}
|
||||
6
src/somali/AllSom.gf
Normal file
6
src/somali/AllSom.gf
Normal file
@@ -0,0 +1,6 @@
|
||||
--# -path=.:../abstract:../common:../prelude
|
||||
|
||||
concrete AllSom of AllSomAbs =
|
||||
LangSom,
|
||||
ExtendSom
|
||||
** {} ;
|
||||
6
src/somali/AllSomAbs.gf
Normal file
6
src/somali/AllSomAbs.gf
Normal file
@@ -0,0 +1,6 @@
|
||||
--# -path=.:../abstract:../common:prelude
|
||||
|
||||
abstract AllSomAbs =
|
||||
Lang,
|
||||
Extend
|
||||
** {} ;
|
||||
128
src/somali/CatSom.gf
Normal file
128
src/somali/CatSom.gf
Normal file
@@ -0,0 +1,128 @@
|
||||
concrete CatSom of Cat = CommonX - [Adv] ** open ResSom, Prelude in {
|
||||
|
||||
flags optimize=all_subs ;
|
||||
|
||||
lincat
|
||||
|
||||
--2 Sentences and clauses
|
||||
-- Constructed in SentenceSom, and also in IdiomSom
|
||||
|
||||
S = ResSom.Sentence ;
|
||||
QS = ResSom.Sentence ;
|
||||
RS = { s : Agreement => Str } ;
|
||||
-- relative sentence. Tense and polarity fixed,
|
||||
-- but agreement may depend on the CN/NP it modifies.
|
||||
|
||||
Cl = ResSom.Clause ;
|
||||
ClSlash = ResSom.ClSlash ;
|
||||
SSlash = ResSom.Sentence ; -- sentence missing NP; e.g. "she has looked at"
|
||||
Imp = { s : Str } ; -- imperative e.g. "look at this"
|
||||
|
||||
--2 Questions and interrogatives
|
||||
|
||||
-- Constructed in QuestionSom.
|
||||
|
||||
QCl = ResSom.Clause ;
|
||||
IP = ResSom.NounPhrase ;
|
||||
IComp = { s : Str } ; -- interrogative complement of copula e.g. "where"
|
||||
IDet = ResSom.Determiner ; -- interrogative determiner e.g. "how many"
|
||||
IQuant = ResSom.Quant ; -- interrogative quantifier e.g. "which"
|
||||
|
||||
|
||||
|
||||
|
||||
--2 Relative clauses and pronouns
|
||||
|
||||
-- Constructed in RelativeSom.
|
||||
|
||||
RCl = ResSom.RClause ;
|
||||
RP = { s : Str } ;
|
||||
|
||||
|
||||
|
||||
--2 Verb phrases
|
||||
|
||||
-- Constructed in VerbSom.
|
||||
|
||||
VP = ResSom.VerbPhrase ;
|
||||
VPSlash = ResSom.VPSlash ;
|
||||
Comp = ResSom.Complement ;
|
||||
|
||||
|
||||
--2 Adjectival phrases
|
||||
|
||||
-- Constructed in AdjectiveSom.
|
||||
|
||||
AP = ResSom.AdjPhrase ;
|
||||
|
||||
|
||||
--2 Nouns and noun phrases
|
||||
|
||||
-- Constructed in NounSom.
|
||||
-- Many atomic noun phrases e.g. "everybody"
|
||||
-- are constructed in StructuralSom.
|
||||
-- The determiner structure is
|
||||
-- ``` Predet (QuantSg | QuantPl Num) Ord
|
||||
-- as defined in NounSom.
|
||||
|
||||
CN = ResSom.CNoun ;
|
||||
NP = ResSom.NounPhrase ;
|
||||
Pron = ResSom.Pronoun ; --Pronouns need enough info to turn it into NP or Quant.
|
||||
Det = ResSom.Determiner ;
|
||||
Predet = {s : Str} ;
|
||||
Quant = ResSom.Quant ;
|
||||
Num = { s : Str ; n : Number ; isNum : Bool } ;
|
||||
Card, Ord = { s : Str ; n : Number } ;
|
||||
DAP = ResSom.Determiner ;
|
||||
|
||||
|
||||
--2 Numerals
|
||||
|
||||
-- Constructed in NumeralSom.
|
||||
|
||||
Numeral = { s : Str ; n : Number } ;
|
||||
Digits = { s : CardOrd => Str ; n : Number } ;
|
||||
|
||||
|
||||
|
||||
--2 Structural words
|
||||
|
||||
-- Constructed in StructuralSom.
|
||||
Conj = { s1,s2 : Str ; n : Number } ;
|
||||
Subj = { s : Str ; isPre : Bool } ; --ba+dut vs. dut+en
|
||||
Prep = ResSom.Prep ;
|
||||
|
||||
|
||||
|
||||
--2 Words of open classes
|
||||
|
||||
-- These are constructed in LexiconSom and in
|
||||
-- additional lexicon modules.
|
||||
|
||||
V,
|
||||
V2,
|
||||
V3,
|
||||
VV, -- verb-phrase-complement verb e.g. "want"
|
||||
VS, -- sentence-complement verb e.g. "claim"
|
||||
VQ, -- question-complement verb e.g. "wonder"
|
||||
VA, -- adjective-complement verb e.g. "look"
|
||||
V2V, -- verb with NP and V complement e.g. "cause"
|
||||
V2S, -- verb with NP and S complement e.g. "tell"
|
||||
V2Q, -- verb with NP and Q complement e.g. "ask"
|
||||
V2A = ResSom.Verb ; -- verb with NP and AP complement e.g. "paint"
|
||||
|
||||
A = ResSom.Adjective ;
|
||||
A2 = ResSom.Adjective2 ;
|
||||
|
||||
N = ResSom.Noun ;
|
||||
N2 = ResSom.Noun2 ;
|
||||
N3 = ResSom.Noun3 ;
|
||||
PN = ResSom.PNoun ;
|
||||
|
||||
Adv = ResSom.Adverb ;
|
||||
|
||||
linref
|
||||
-- Cl = linCl ;
|
||||
VP = linVP ;
|
||||
CN = linCN ;
|
||||
}
|
||||
116
src/somali/ConjunctionSom.gf
Normal file
116
src/somali/ConjunctionSom.gf
Normal file
@@ -0,0 +1,116 @@
|
||||
concrete ConjunctionSom of Conjunction =
|
||||
CatSom ** open ResSom, Coordination, Prelude in {
|
||||
|
||||
flags optimize=all_subs ;
|
||||
|
||||
{- Conjunction for category X needs four things:
|
||||
lincat [X]
|
||||
lin BaseX
|
||||
lin ConsX
|
||||
lin ConjX
|
||||
|
||||
For example, if X is defined as
|
||||
|
||||
lincat X = {s : Number => Str ; g : Gender} ;
|
||||
|
||||
then [X] will split its s field into two, and retain its other fields as is:
|
||||
|
||||
lincat [X] = {s1,s2 : Number => Str ; g : Gender} ;
|
||||
|
||||
Let us look at a simple case: Adv is of type {s : Str}
|
||||
Then [Adv] is {s1,s2 : Str}.
|
||||
BaseAdv, ConsAdv and ConjAdv can all use functions defined in prelude/Coordination:
|
||||
|
||||
BaseAdv = twoSS ;
|
||||
ConsAdv = consrSS comma ;
|
||||
ConjAdv = conjunctSS ;
|
||||
|
||||
--}
|
||||
|
||||
|
||||
-- Adverb and other simple {s : Str} types.
|
||||
lincat
|
||||
[Adv],[AdV],[IAdv] = {s1,s2 : Str} ;
|
||||
|
||||
lin
|
||||
BaseAdv, BaseAdV, BaseIAdv = twoSS ;
|
||||
ConsAdv, ConsAdV, ConsIAdv = consrSS comma ;
|
||||
ConjAdv, ConjAdV, ConjIAdv = conjunctDistrSS ;
|
||||
|
||||
{-
|
||||
--RS depends on agreement, otherwise exactly like previous.
|
||||
lincat
|
||||
[RS] = {s1,s2 : Agr => Str } ;
|
||||
|
||||
lin
|
||||
BaseRS x y = twoTable Agr x y ;
|
||||
ConsRS xs x = consrTable Agr comma xs x ;
|
||||
ConjRS co xs = conjunctDistrTable Agr co xs ;
|
||||
|
||||
|
||||
lincat
|
||||
[S] = {} ;
|
||||
|
||||
lin
|
||||
BaseS x y = y ** { } ;
|
||||
ConsS x xs =
|
||||
xs ** { } ;
|
||||
ConjS co xs = {} ;
|
||||
|
||||
lincat
|
||||
[AP] = {} ;
|
||||
|
||||
lin
|
||||
BaseAP x y = twoTable Agr x y ** y ; --choose all the other fields from second argument
|
||||
ConsAP as a = consrTable Agr comma as a ** as ;
|
||||
ConjAP co as = conjunctDistrTable Agr co as ** as ;
|
||||
|
||||
lincat
|
||||
[CN] = { } ;
|
||||
|
||||
lin
|
||||
BaseCN = {} ;
|
||||
ConsCN = {} ;
|
||||
ConjCN co cs = conjunctDistrTable Agr co cs ** cs ;
|
||||
|
||||
lincat
|
||||
[DAP] = Determiner ** { pref2 : Str } ;
|
||||
|
||||
lin
|
||||
BaseDAP x y = x ** { pref2 = y.pref } ;
|
||||
ConsDAP xs x = xs ** { pref2 = x.pref } ;
|
||||
ConjDet conj xs = xs ** { pref = conj.s1 ++ xs.pref ++ conj.s2 ++ xs.pref2 } ;
|
||||
|
||||
|
||||
-- Noun phrases
|
||||
lincat
|
||||
[NP] = { s1,s2 : Case => Str } ** NPLight ;
|
||||
|
||||
lin
|
||||
BaseNP x y = twoTable Case x y ** consNP x y ;
|
||||
ConsNP xs x = consrTable Case comma xs x ** consNP xs x ;
|
||||
ConjNP conj xs = conjunctNPTable conj xs ** conjNP xs conj ;
|
||||
|
||||
oper
|
||||
|
||||
--NP without the s field; just to avoid copypaste and make things easier to change
|
||||
NPLight : Type = { } ;
|
||||
|
||||
consNP : NPLight -> NPLight -> NPLight = \x,y ->
|
||||
x ** { agr = conjAgr x.agr (getNum y.agr) } ;
|
||||
|
||||
conjNP : NPLight -> Conj -> NPLight = \xs,conj ->
|
||||
xs ** { agr = conjAgr xs.agr conj.nbr } ;
|
||||
|
||||
-- Like conjunctTable from prelude/Coordination.gf,
|
||||
-- but forces the first argument into absolutive.
|
||||
conjunctNPTable : Conj -> ListTable Case -> {s : Case => Str} = \co,xs ->
|
||||
{ s = table { cas => co.s1 ++ xs.s1 ! Abs ++ co.s2 ++ xs.s2 ! cas } } ;
|
||||
|
||||
conjAgr : Agr -> Number -> Agr = \a,n ->
|
||||
case n of { Pl => plAgr a ; _ => a } ;
|
||||
|
||||
conjNbr : Number -> Number -> Number = \n,m ->
|
||||
case n of { Pl => Pl ; _ => m } ;
|
||||
-}
|
||||
}
|
||||
119
src/somali/ConstructionSom.gf
Normal file
119
src/somali/ConstructionSom.gf
Normal file
@@ -0,0 +1,119 @@
|
||||
concrete ConstructionSom of Construction = CatSom ** open ParadigmsSom in {
|
||||
|
||||
lincat
|
||||
Timeunit = N ;
|
||||
Weekday = N ;
|
||||
Monthday = NP ;
|
||||
Month = N ;
|
||||
Year = NP ;
|
||||
{-
|
||||
lin
|
||||
|
||||
timeunitAdv n time =
|
||||
let n_card : Card = n ;
|
||||
n_hours_NP : NP = mkNP n_card time ;
|
||||
in SyntaxSom.mkAdv for_Prep n_hours_NP | mkAdv (n_hours_NP.s ! R.npNom) ;
|
||||
|
||||
weekdayPunctualAdv w = ; -- on Sunday
|
||||
weekdayHabitualAdv w = ; -- on Sundays
|
||||
weekdayNextAdv w = -- next Sunday
|
||||
weekdayLastAdv w = -- last Sunday
|
||||
|
||||
monthAdv m = mkAdv in_Prep (mkNP m) ;
|
||||
yearAdv y = mkAdv in_Prep y ;
|
||||
dayMonthAdv d m = ; -- on 17 May
|
||||
monthYearAdv m y = ; -- in May 2012
|
||||
dayMonthYearAdv d m y = ; -- on 17 May 2013
|
||||
|
||||
intYear = symb ;
|
||||
intMonthday = symb ;
|
||||
|
||||
lincat Language = N ;
|
||||
|
||||
lin InLanguage l = mkAdv ???_Prep (mkNP l) ;
|
||||
|
||||
lin
|
||||
weekdayN w = w ;
|
||||
monthN m = m ;
|
||||
|
||||
weekdayPN w = mkPN w ;
|
||||
monthPN m = mkPN m ;
|
||||
|
||||
languageCN l = mkCN l ;
|
||||
languageNP l = mkNP l ;
|
||||
|
||||
|
||||
oper mkLanguage : Str -> N = \s -> mkN s ;
|
||||
|
||||
----------------------------------------------
|
||||
---- lexicon of special names
|
||||
|
||||
lin second_Timeunit = mkN "second" ;
|
||||
lin minute_Timeunit = mkN "minute" ;
|
||||
lin hour_Timeunit = mkN "hour" ;
|
||||
lin day_Timeunit = mkN "day" ;
|
||||
lin week_Timeunit = mkN "week" ;
|
||||
lin month_Timeunit = mkN "month" ;
|
||||
lin year_Timeunit = mkN "year" ;
|
||||
|
||||
lin monday_Weekday = mkN "Monday" ;
|
||||
lin tuesday_Weekday = mkN "Tuesday" ;
|
||||
lin wednesday_Weekday = mkN "Wednesday" ;
|
||||
lin thursday_Weekday = mkN "Thursday" ;
|
||||
lin friday_Weekday = mkN "Friday" ;
|
||||
lin saturday_Weekday = mkN "Saturday" ;
|
||||
lin sunday_Weekday = mkN "Sunday" ;
|
||||
|
||||
lin january_Month = mkN "January" ;
|
||||
lin february_Month = mkN "February" ;
|
||||
lin march_Month = mkN "March" ;
|
||||
lin april_Month = mkN "April" ;
|
||||
lin may_Month = mkN "May" ;
|
||||
lin june_Month = mkN "June" ;
|
||||
lin july_Month = mkN "July" ;
|
||||
lin august_Month = mkN "August" ;
|
||||
lin september_Month = mkN "September" ;
|
||||
lin october_Month = mkN "October" ;
|
||||
lin november_Month = mkN "November" ;
|
||||
lin december_Month = mkN "December" ;
|
||||
|
||||
lin afrikaans_Language = mkLanguage "Afrikaans" ;
|
||||
lin amharic_Language = mkLanguage "Amharic" ;
|
||||
lin arabic_Language = mkLanguage "Arabic" ;
|
||||
lin bulgarian_Language = mkLanguage "Bulgarian" ;
|
||||
lin catalan_Language = mkLanguage "Catalan" ;
|
||||
lin chinese_Language = mkLanguage "Chinese" ;
|
||||
lin danish_Language = mkLanguage "Danish" ;
|
||||
lin dutch_Language = mkLanguage "Dutch" ;
|
||||
lin english_Language = mkLanguage "Euslish" ;
|
||||
lin estonian_Language = mkLanguage "Estonian" ;
|
||||
lin finnish_Language = mkLanguage "Finnish" ;
|
||||
lin french_Language = mkLanguage "French" ;
|
||||
lin german_Language = mkLanguage "German" ;
|
||||
lin greek_Language = mkLanguage "Greek" ;
|
||||
lin hebrew_Language = mkLanguage "Hebrew" ;
|
||||
lin hindi_Language = mkLanguage "Hindi" ;
|
||||
lin japanese_Language = mkLanguage "Japanese" ;
|
||||
lin italian_Language = mkLanguage "Italian" ;
|
||||
lin latin_Language = mkLanguage "Latin" ;
|
||||
lin latvian_Language = mkLanguage "Latvian" ;
|
||||
lin maltese_Language = mkLanguage "Maltese" ;
|
||||
lin nepali_Language = mkLanguage "Nepali" ;
|
||||
lin norwegian_Language = mkLanguage "Norwegian" ;
|
||||
lin persian_Language = mkLanguage "Persian" ;
|
||||
lin polish_Language = mkLanguage "Polish" ;
|
||||
lin punjabi_Language = mkLanguage "Punjabi" ;
|
||||
lin romanian_Language = mkLanguage "Romanian" ;
|
||||
lin russian_Language = mkLanguage "Russian" ;
|
||||
lin sindhi_Language = mkLanguage "Sindhi" ;
|
||||
lin spanish_Language = mkLanguage "Spanish" ;
|
||||
lin swahili_Language = mkLanguage "Swahili" ;
|
||||
lin swedish_Language = mkLanguage "Swedish" ;
|
||||
lin thai_Language = mkLanguage "Thai" ;
|
||||
lin turkish_Language = mkLanguage "Turkish" ;
|
||||
lin urdu_Language = mkLanguage "Urdu" ;
|
||||
|
||||
—}
|
||||
}
|
||||
-}
|
||||
}
|
||||
7
src/somali/ExtendSom.gf
Normal file
7
src/somali/ExtendSom.gf
Normal file
@@ -0,0 +1,7 @@
|
||||
--# -path=.:../common:../abstract
|
||||
|
||||
concrete ExtendSom of Extend = {} ;
|
||||
-- CatSom ** ExtendFunctor
|
||||
-- with (Grammar=GrammarSom)
|
||||
-- ** open Prelude, ResSom in {
|
||||
-- } ;
|
||||
20
src/somali/GrammarSom.gf
Normal file
20
src/somali/GrammarSom.gf
Normal file
@@ -0,0 +1,20 @@
|
||||
concrete GrammarSom of Grammar =
|
||||
NounSom,
|
||||
VerbSom,
|
||||
AdjectiveSom,
|
||||
AdverbSom,
|
||||
NumeralSom,
|
||||
SentenceSom,
|
||||
QuestionSom,
|
||||
RelativeSom,
|
||||
ConjunctionSom,
|
||||
PhraseSom,
|
||||
TextX - [Adv],
|
||||
StructuralSom,
|
||||
IdiomSom,
|
||||
TenseX - [Adv]
|
||||
** {
|
||||
|
||||
flags startcat = Phr ; unlexer = text ; lexer = text ;
|
||||
|
||||
} ;
|
||||
48
src/somali/IdiomSom.gf
Normal file
48
src/somali/IdiomSom.gf
Normal file
@@ -0,0 +1,48 @@
|
||||
|
||||
--1 Idiom: Idiomatic Expressions
|
||||
|
||||
concrete IdiomSom of Idiom = CatSom ** open Prelude, ResSom, VerbSom in {
|
||||
|
||||
-- This module defines constructions that are formed in fixed ways,
|
||||
-- often different even in closely related languages.
|
||||
|
||||
--lin
|
||||
|
||||
-- : VP -> Cl ; -- it is hot
|
||||
--ImpersCl = ;
|
||||
|
||||
-- : VP -> Cl ; -- one sleeps
|
||||
--GenericCl = ;
|
||||
{-
|
||||
CleftNP : NP -> RS -> Cl ; -- it is I who did it
|
||||
CleftAdv : Adv -> S -> Cl ; -- it is here she slept
|
||||
-}
|
||||
-- : NP -> Cl ; -- there is a house
|
||||
-- ExistNP np =
|
||||
-- let vp = UseComp (CompNP np)
|
||||
-- in ;
|
||||
|
||||
{- ExistIP : IP -> QCl ; -- which houses are there
|
||||
|
||||
-- 7/12/2012 generalizations of these
|
||||
|
||||
ExistNPAdv : NP -> Adv -> Cl ; -- there is a house in Paris
|
||||
ExistIPAdv : IP -> Adv -> QCl ; -- which houses are there in Paris
|
||||
-}
|
||||
-- : VP -> VP ;
|
||||
--ProgrVP vp = vp ** { } ;
|
||||
|
||||
-- : VP -> Utt ; -- let's go
|
||||
--ImpPl1 vp = { } ;
|
||||
{-
|
||||
|
||||
ImpP3 : NP -> VP -> Utt ; -- let John walk
|
||||
|
||||
-- 3/12/2013 non-reflexive uses of "self"
|
||||
|
||||
SelfAdvVP : VP -> VP ; -- is at home himself
|
||||
SelfAdVVP : VP -> VP ; -- is himself at home
|
||||
SelfNP : NP -> NP ; -- the president himself (is at home)
|
||||
-}
|
||||
|
||||
}
|
||||
4
src/somali/LangSom.gf
Normal file
4
src/somali/LangSom.gf
Normal file
@@ -0,0 +1,4 @@
|
||||
concrete LangSom of Lang =
|
||||
GrammarSom,
|
||||
LexiconSom,
|
||||
ConstructionSom ;
|
||||
418
src/somali/LexiconSom.gf
Normal file
418
src/somali/LexiconSom.gf
Normal file
@@ -0,0 +1,418 @@
|
||||
concrete LexiconSom of Lexicon = CatSom **
|
||||
open ParadigmsSom in {
|
||||
|
||||
----
|
||||
-- A
|
||||
|
||||
-- lin add_V3 =
|
||||
-- lin airplane_N = mkN "" ;
|
||||
-- lin alas_Interj = mkInterj "" ;
|
||||
-- lin already_Adv = mkA "" ;
|
||||
lin animal_N = mkN "xayawaan" ;
|
||||
-- lin answer_V2S = mkV2 "" ;
|
||||
-- lin apartment_N = mkN "" ;
|
||||
-- lin apple_N = mkN "" ;
|
||||
-- lin art_N = mkN "" ;
|
||||
-- lin ashes_N = mkN "" ;
|
||||
-- lin ask_V2Q = mkV2 "" ;
|
||||
|
||||
----
|
||||
-- B
|
||||
|
||||
-- lin baby_N = mkN "" ;
|
||||
-- lin back_N = mkN "" ;
|
||||
-- lin bad_A = mkA "" ;
|
||||
-- lin bank_N = mkN "" ;
|
||||
-- lin bark_N = mkN "" ;
|
||||
-- lin beautiful_A = mkA "" ;
|
||||
-- lin become_VA = mkVA "" ;
|
||||
-- lin beer_N = mkN "" ;
|
||||
-- lin beg_V2V = mkV2 "" ;
|
||||
-- lin belly_N = mkN "" ;
|
||||
lin big_A = mkA "weyn" ;
|
||||
-- lin bike_N = mkN "" ;
|
||||
lin bird_N = mkN "shimbir" fem ;
|
||||
-- lin bite_V2 = mkV2 "" ;
|
||||
-- lin black_A = mkA "" ;
|
||||
-- lin blood_N = mkN "" ;
|
||||
-- lin blow_V = mkV "" ;
|
||||
-- lin blue_A = mkA "" ;
|
||||
-- lin boat_N = mkN "" ;
|
||||
-- lin bone_N = mkN "" ;
|
||||
-- lin boot_N = mkN "" ;
|
||||
-- lin boss_N = mkN "" ;
|
||||
lin book_N = mkN "buug" ; -- TODO: irregular plural
|
||||
lin boy_N = mkN "wiil" ;
|
||||
lin bread_N = mkN "rooti" ; --masc/fem
|
||||
-- lin break_V2 = mkV2 "" ;
|
||||
-- lin breast_N = mkN "" ;
|
||||
-- lin breathe_V = mkV "" ;
|
||||
-- lin broad_A = mkA "" ;
|
||||
-- lin brother_N2 = mkN "" ;
|
||||
-- lin brown_A = mkA "" ;
|
||||
-- lin burn_V = mkV "" ;
|
||||
-- lin butter_N = mkN "" ;
|
||||
-- lin buy_V2 = mkV2 "" ;
|
||||
|
||||
----
|
||||
-- C
|
||||
|
||||
-- lin camera_N = mkN "" ;
|
||||
-- lin cap_N = mkN "" ;
|
||||
lin car_N = mkN "baabuur" masc ;
|
||||
-- lin carpet_N = mkN "" ;
|
||||
lin cat_N = mkN "bisad" ;
|
||||
-- lin ceiling_N = mkN "" ;
|
||||
-- lin chair_N = mkN "" ;
|
||||
-- lin cheese_N = mkN "" ;
|
||||
-- lin child_N = mkN "" ;
|
||||
-- lin church_N = mkN "" ;
|
||||
lin city_N = mkN "magaalo" ;
|
||||
-- lin clean_A = mkA "" ;
|
||||
-- lin clever_A = mkA "" ;
|
||||
-- lin close_V2 = mkV2 "" ;
|
||||
-- lin cloud_N = mkN "" ;
|
||||
-- lin coat_N = mkN "" ;
|
||||
-- lin cold_A = mkA "" ;
|
||||
-- lin come_V = etorri_V ;
|
||||
-- lin computer_N = mkN "" ;
|
||||
-- lin correct_A = mkA "" ;
|
||||
-- lin count_V2 = mkV2 "" ;
|
||||
-- lin country_N = mkN "" ;
|
||||
-- lin cousin_N = mkN "" ;
|
||||
-- lin cow_N = mkN "" ;
|
||||
-- lin cut_V2 = mkV2 "" ;
|
||||
--
|
||||
-- ----
|
||||
-- -- D
|
||||
--
|
||||
-- lin day_N = mkN "" ;
|
||||
-- lin die_V = mkV "" ;
|
||||
-- lin dig_V = mkV "" ;
|
||||
-- lin dirty_A = mkA "" ;
|
||||
-- lin distance_N3 = mkN "" ;
|
||||
-- lin do_V2 = lin V2 egin_V ;
|
||||
-- lin doctor_N = mkN "" ;
|
||||
-- lin dog_N = mkN "" ;
|
||||
-- lin door_N = mkN "" ;
|
||||
-- lin drink_V2 = mkV2 "" ;
|
||||
-- lin dry_A = mkA "" ;
|
||||
-- lin dull_A = mkA "" ;
|
||||
-- lin dust_N = mkN "" ;
|
||||
--
|
||||
-- ----
|
||||
-- -- E
|
||||
--
|
||||
-- lin ear_N = mkN "" ;
|
||||
-- lin earth_N = mkN "" ;
|
||||
-- lin eat_V2 = mkV2 "" ;
|
||||
-- lin egg_N = mkN "" ;
|
||||
-- lin empty_A = mkA "" ;
|
||||
-- lin enemy_N = mkN "" ;
|
||||
-- lin eye_N = mkN "" ;
|
||||
--
|
||||
-- ----
|
||||
-- -- F
|
||||
--
|
||||
-- lin factory_N = mkN "" ;
|
||||
-- lin fall_V = mkV "" ;
|
||||
-- lin far_Adv = mkA "" ;
|
||||
-- lin fat_N = mkN "" ;
|
||||
-- lin father_N2 = mkN "" ;
|
||||
-- lin fear_V2 = mkV2 "" ;
|
||||
-- lin fear_VS = mkVS "" ;
|
||||
-- lin feather_N = mkN "" ;
|
||||
-- lin fight_V2 = mkV2 "" ;
|
||||
-- lin find_V2 = mkV2 "" ;
|
||||
-- lin fingernail_N = mkN "" ;
|
||||
-- lin fire_N = mkN "" ;
|
||||
-- lin fish_N = mkN "" ;
|
||||
-- lin float_V = mkV "" ;
|
||||
-- lin floor_N = mkN "" ;
|
||||
-- lin flow_V = mkV "" ;
|
||||
-- lin flower_N = mkN "" ;
|
||||
-- lin fly_V = mkV "" ;
|
||||
-- lin fog_N = mkN "" ;
|
||||
-- lin foot_N = mkN "" ;
|
||||
-- lin forest_N = mkN "" ;
|
||||
-- lin forget_V2 = mkV2 "" ;
|
||||
-- lin freeze_V = mkV "" ;
|
||||
-- lin fridge_N = mkN "" ;
|
||||
-- lin friend_N = mkN "" ;
|
||||
-- lin fruit_N = mkN "" ;
|
||||
-- lin full_A = mkA "" ;
|
||||
-- --lin fun_AV
|
||||
|
||||
----
|
||||
-- G
|
||||
|
||||
-- lin garden_N = mkN "" ;
|
||||
lin girl_N = mkN "gabadh" "gabdho" fem ;
|
||||
-- lin give_V3 = mkV3 "" ;
|
||||
-- lin glove_N = mkN "" ;
|
||||
-- lin go_V = joan_V ;
|
||||
-- lin gold_N = mkN "" ;
|
||||
-- lin good_A = mkA "" ;
|
||||
-- lin grammar_N = mkN "" ;
|
||||
-- lin grass_N = mkN "" ;
|
||||
-- lin green_A = mkA "" ;
|
||||
|
||||
----
|
||||
-- H
|
||||
|
||||
-- lin hair_N = mkN "" ;
|
||||
-- lin hand_N = mkN "" ;
|
||||
-- lin harbour_N = mkN "" ;
|
||||
-- lin hat_N = mkN "" ;
|
||||
-- lin hate_V2 = mkV2 "" ;
|
||||
-- lin head_N = mkN "" ;
|
||||
-- lin hear_V2 = mkV2 "" ;
|
||||
-- lin heart_N = mkN "" ;
|
||||
-- lin heavy_A = mkA "" ;
|
||||
-- lin hill_N = mkN "" ;
|
||||
-- lin hit_V2 = mkV2 "" ;
|
||||
-- lin hold_V2 = mkV2 "" ;
|
||||
-- lin hope_VS = mkV "" ;
|
||||
-- lin horn_N = mkN "" ;
|
||||
-- lin horse_N = mkN "" ;
|
||||
-- lin hot_A = mkA "" ;
|
||||
lin house_N = mkN "aqal" ;
|
||||
-- lin hunt_V2 = mkV2 "" ;
|
||||
-- lin husband_N = mkN "" ;
|
||||
|
||||
--------
|
||||
-- I - K
|
||||
|
||||
-- lin ice_N = mkN "" ;
|
||||
-- lin industry_N = mkN "" ;
|
||||
-- lin iron_N = mkN "" ;
|
||||
-- lin john_PN = mkPN "Jon" ;
|
||||
-- lin jump_V = mkV "" ;
|
||||
-- lin kill_V2 = mkV2 "" ;
|
||||
-- lin king_N = mkN "" ;
|
||||
-- lin knee_N = mkN "" ;
|
||||
-- lin know_V2 = mkV2 "" ;
|
||||
-- lin know_VQ = mkVQ "" ;
|
||||
-- lin know_VS = mkVS "" ;
|
||||
|
||||
|
||||
----
|
||||
-- L
|
||||
|
||||
-- lin lake_N = mkN "" ;
|
||||
-- lin lamp_N = mkN "" ;
|
||||
lin language_N = mkN "af" ;
|
||||
-- lin laugh_V = mkV "" ;
|
||||
-- lin leaf_N = mkN "" ;
|
||||
-- lin learn_V2 = mkV2 "" ;
|
||||
-- lin leather_N = mkN "" ;
|
||||
-- lin leave_V2 = mkV2 "" ;
|
||||
-- lin leg_N = mkN "" ;
|
||||
-- lin lie_V = mkV "" ;
|
||||
-- lin like_V2 = mkV2 "" ;
|
||||
-- lin listen_V2 = mkV2 "" ;
|
||||
-- lin live_V = mkV "" ;
|
||||
-- lin liver_N = mkN "" ;
|
||||
-- lin long_A = mkA "" ;
|
||||
-- lin lose_V2 = mkV2 "" ;
|
||||
-- lin louse_N = mkN "" ;
|
||||
-- lin love_N = mkN "" ;
|
||||
-- lin love_V2 = mkV2 "" ;
|
||||
|
||||
----
|
||||
-- M
|
||||
|
||||
lin man_N = mkN "nin" ;
|
||||
-- lin married_A2 = mkA "" ;
|
||||
-- lin meat_N = mkN "" ;
|
||||
-- lin milk_N = mkN "" ;
|
||||
-- lin moon_N = mkN "" ;
|
||||
-- lin mother_N2 = mkN "" ;
|
||||
-- lin mountain_N = mkN "" ;
|
||||
-- lin mouth_N = mkN "" ;
|
||||
-- lin music_N = mkN "" ;
|
||||
|
||||
----
|
||||
-- N
|
||||
|
||||
-- lin name_N = mkN "" ;
|
||||
-- lin narrow_A = mkA "" ;
|
||||
-- lin near_A = mkA "" ;
|
||||
-- lin neck_N = mkN "" ;
|
||||
-- lin new_A = mkA "" ;
|
||||
-- lin newspaper_N = mkN "" ;
|
||||
-- lin night_N = mkN "" ;
|
||||
-- lin nose_N = mkN "" ;
|
||||
-- lin now_Adv = mkA "" ;
|
||||
-- lin number_N = mkN "" ;
|
||||
--
|
||||
-- --------
|
||||
-- -- O - P
|
||||
--
|
||||
--
|
||||
-- lin oil_N = mkN "" ;
|
||||
-- lin old_A = mkA "" ;
|
||||
-- lin open_V2 = mkV2 "" ;
|
||||
-- lin paint_V2A = mkV2 "" ;
|
||||
-- lin paper_N = mkN "" ;
|
||||
-- lin paris_PN = mkPN "Paris" ;
|
||||
-- lin peace_N = mkN "" ;
|
||||
-- lin pen_N = mkN "" ;
|
||||
-- lin person_N = mkN "" ;
|
||||
-- lin planet_N = mkN "" ;
|
||||
-- lin plastic_N = mkN "" ;
|
||||
-- lin play_V = mkV "" ;
|
||||
-- lin policeman_N = mkN "" ;
|
||||
-- lin priest_N = mkN "" ;
|
||||
-- lin pull_V2 = mkV2 "" ;
|
||||
-- lin push_V2 = mkV2 "" ;
|
||||
-- lin put_V2 = mkV2 "" ;
|
||||
--
|
||||
-- --------
|
||||
-- -- Q - R
|
||||
--
|
||||
-- lin queen_N = mkN "" ;
|
||||
-- lin question_N = mkN "" ;
|
||||
-- lin radio_N = mkN "" ;
|
||||
-- lin rain_N = mkN "" ;
|
||||
-- lin rain_V0 = mkV "" ;
|
||||
lin read_V2 = mkV2 "akhri" ;
|
||||
-- lin ready_A = mkA "" ;
|
||||
-- lin reason_N = mkN "" ;
|
||||
-- lin red_A = mkA "" ;
|
||||
-- lin religion_N = mkN "" ;
|
||||
-- lin restaurant_N = mkN "" ;
|
||||
-- lin river_N = mkN "" ;
|
||||
-- lin road_N = mkN "" ;
|
||||
-- lin rock_N = mkN "" ;
|
||||
-- lin roof_N = mkN "" ;
|
||||
-- lin root_N = mkN "" ;
|
||||
-- lin rope_N = mkN "" ;
|
||||
-- lin rotten_A = mkA "" ;
|
||||
-- lin round_A = mkA "" ;
|
||||
-- lin rub_V2 = mkV2 "" ;
|
||||
-- lin rubber_N = mkN "" ;
|
||||
-- lin rule_N = mkN "" ;
|
||||
-- lin run_V = mkV "" ;
|
||||
--
|
||||
-- ----
|
||||
-- -- S
|
||||
--
|
||||
-- lin salt_N = mkN "" ;
|
||||
-- lin sand_N = mkN "" ;
|
||||
-- lin say_VS = mkVS "" ;
|
||||
-- lin school_N = mkN "" ;
|
||||
-- lin science_N = mkN "" ;
|
||||
-- lin scratch_V2 = mkV2 "" ;
|
||||
-- lin sea_N = mkN "" ;
|
||||
lin see_V2 = mkV2 "ark" ;
|
||||
-- lin seed_N = mkN "" ;
|
||||
-- lin seek_V2 = mkV2 "" ;
|
||||
-- lin sell_V3 = mkV3 "" ;
|
||||
-- lin send_V3 = mkV3 "" ;
|
||||
-- lin sew_V = mkV "" ;
|
||||
-- lin sharp_A = mkA "" ;
|
||||
-- lin sheep_N = mkN "" ;
|
||||
-- lin ship_N = mkN "" ;
|
||||
-- lin shirt_N = mkN "" ;
|
||||
-- lin shoe_N = mkN "" ;
|
||||
-- lin shop_N = mkN "" ;
|
||||
-- lin short_A = mkA "" ;
|
||||
-- lin silver_N = mkN "" ;
|
||||
-- lin sing_V = mkV "" ;
|
||||
-- lin sister_N = mkN "" ;
|
||||
-- lin sit_V = mkV "" ;
|
||||
-- lin skin_N = mkN "" ;
|
||||
-- lin sky_N = mkN "" ;
|
||||
-- lin sleep_V = mkV "" ;
|
||||
lin small_A = mkA "yar" ;
|
||||
-- lin smell_V = mkV "" ;
|
||||
-- lin smoke_N = mkN "" ;
|
||||
-- lin smooth_A = mkA "" ;
|
||||
-- lin snake_N = mkN "" ;
|
||||
-- lin snow_N = mkN "" ;
|
||||
-- lin sock_N = mkN "" ;
|
||||
-- lin song_N = mkN "" ;
|
||||
-- lin speak_V2 = mkV2 "" ;
|
||||
-- lin spit_V = mkV "" ;
|
||||
-- lin split_V2 = mkV2 "" ;
|
||||
-- lin squeeze_V2 = mkV2 "" ;
|
||||
-- lin stab_V2 = mkV2 "" ;
|
||||
-- lin stand_V = mkV "" ;
|
||||
-- lin star_N = mkN "" ;
|
||||
-- lin steel_N = mkN "" ;
|
||||
-- lin stick_N = mkN "" ;
|
||||
-- lin stone_N = mkN "" ;
|
||||
-- lin stop_V = mkV "" ;
|
||||
-- lin stove_N = mkN "" ;
|
||||
-- lin straight_A = mkA "" ;
|
||||
-- lin student_N = mkN "" ;
|
||||
-- lin stupid_A = mkA "" ;
|
||||
-- lin suck_V2 = mkV2 "" ;
|
||||
-- lin sun_N = mkN "" ;
|
||||
-- lin swell_V = mkV "" ;
|
||||
-- lin swim_V = mkV "" ;
|
||||
|
||||
----
|
||||
-- T
|
||||
|
||||
|
||||
-- lin table_N = mkN "" ;
|
||||
-- lin tail_N = mkN "" ;
|
||||
-- lin talk_V3 = mkV3 "" ;
|
||||
lin teach_V2 = mkV2 "baray" ku ; -- I suppose this creates progressive forms? TODO implement all forms of verbs properly.
|
||||
-- lin teacher_N = mkN "" ;
|
||||
-- lin television_N = mkN "" ;
|
||||
-- lin thick_A = mkA "" ;
|
||||
-- lin thin_A = mkA "" ;
|
||||
-- lin think_V = mkV "" ;
|
||||
-- lin throw_V2 = mkV2 "" ;
|
||||
-- lin tie_V2 = mkV2 "" ;
|
||||
-- lin today_Adv = mkA "" ;
|
||||
-- lin tongue_N = mkN "" ;
|
||||
-- lin tooth_N = mkN "" ;
|
||||
-- lin train_N = mkN "" ;
|
||||
-- lin travel_V = mkV "" ;
|
||||
-- lin tree_N = mkN "" ;
|
||||
-- lin turn_V = mkV "" ;
|
||||
|
||||
--------
|
||||
-- U - V
|
||||
|
||||
-- lin ugly_A = mkA "" ;
|
||||
-- lin uncertain_A = mkA "" ;
|
||||
-- lin understand_V2 = mkV2 "" ;
|
||||
-- lin university_N = mkN "" ;
|
||||
-- lin village_N = mkN "" ;
|
||||
-- lin vomit_V = mkV2 "" ;
|
||||
|
||||
--------
|
||||
-- W - Y
|
||||
|
||||
-- lin wait_V2 = mkV2 "" ;
|
||||
-- lin walk_V = mkV "" ;
|
||||
-- lin war_N = mkN "" ;
|
||||
-- lin warm_A = mkA "" ;
|
||||
-- lin wash_V2 = mkV2 "" ;
|
||||
-- lin watch_V2 = mkV2 "" ;
|
||||
-- lin water_N = mkN "" ;
|
||||
-- lin wet_A = mkA "" ;
|
||||
-- lin white_A = mkA "" ;
|
||||
-- lin wide_A = mkA "" ;
|
||||
-- lin wife_N = mkN "" ;
|
||||
-- lin win_V2 = mkV2 "" ;
|
||||
-- lin wind_N = mkN "" ;
|
||||
-- lin window_N = mkN "" ;
|
||||
-- lin wine_N = mkN "" ;
|
||||
-- lin wing_N = mkN "" ;
|
||||
-- lin wipe_V2 = mkV2 "" ;
|
||||
lin woman_N = mkN "naag" fem ;
|
||||
-- lin wonder_VQ = mkVQ "" ;
|
||||
-- lin wood_N = mkN "" ;
|
||||
-- lin worm_N = mkN "" ;
|
||||
-- lin write_V2 = mkV2 "" ;
|
||||
-- lin year_N = mkN "" ;
|
||||
-- lin yellow_A = mkA "" ;
|
||||
-- lin young_A = mkA "" ;
|
||||
|
||||
}
|
||||
633
src/somali/MissingSom.gf
Normal file
633
src/somali/MissingSom.gf
Normal file
@@ -0,0 +1,633 @@
|
||||
resource MissingSom = open GrammarSom, SymbolSom, Prelude in {
|
||||
|
||||
-- temporary definitions to enable the compilation of RGL API
|
||||
oper AdAP : AdA -> AP -> AP = notYet "AdAP" ;
|
||||
oper AdAdv : AdA -> Adv -> Adv = notYet "AdAdv" ;
|
||||
oper AdNum : AdN -> Card -> Card = notYet "AdNum" ;
|
||||
oper AdVVP : AdV -> VP -> VP = notYet "AdVVP" ;
|
||||
oper AdVVPSlash : AdV -> VPSlash -> VPSlash = notYet "AdVVPSlash" ;
|
||||
oper AddAdvQVP : QVP -> IAdv -> QVP = notYet "AddAdvQVP" ;
|
||||
oper AdjDAP : DAP -> AP -> DAP = notYet "AdjDAP" ;
|
||||
oper AdjOrd : Ord -> AP = notYet "AdjOrd" ;
|
||||
oper AdnCAdv : CAdv -> AdN = notYet "AdnCAdv" ;
|
||||
oper AdvAP : AP -> Adv -> AP = notYet "AdvAP" ;
|
||||
oper AdvCN : CN -> Adv -> CN = notYet "AdvCN" ;
|
||||
oper AdvIAdv : IAdv -> Adv -> IAdv = notYet "AdvIAdv" ;
|
||||
oper AdvIP : IP -> Adv -> IP = notYet "AdvIP" ;
|
||||
oper AdvNP : NP -> Adv -> NP = notYet "AdvNP" ;
|
||||
oper AdvQVP : VP -> IAdv -> QVP = notYet "AdvQVP" ;
|
||||
oper AdvS : Adv -> S -> S = notYet "AdvS" ;
|
||||
oper AdvSlash : ClSlash -> Adv -> ClSlash = notYet "AdvSlash" ;
|
||||
oper AdvVP : VP -> Adv -> VP = notYet "AdvVP" ;
|
||||
oper AdvVPSlash : VPSlash -> Adv -> VPSlash = notYet "AdvVPSlash" ;
|
||||
oper ApposCN : CN -> NP -> CN = notYet "ApposCN" ;
|
||||
oper BaseAP : AP -> AP -> ListAP = notYet "BaseAP" ;
|
||||
oper BaseAdV : AdV -> AdV -> ListAdV = notYet "BaseAdV" ;
|
||||
oper BaseAdv : Adv -> Adv -> ListAdv = notYet "BaseAdv" ;
|
||||
oper BaseCN : CN -> CN -> ListCN = notYet "BaseCN" ;
|
||||
oper BaseIAdv : IAdv -> IAdv -> ListIAdv = notYet "BaseIAdv" ;
|
||||
oper BaseNP : NP -> NP -> ListNP = notYet "BaseNP" ;
|
||||
oper BaseRS : RS -> RS -> ListRS = notYet "BaseRS" ;
|
||||
oper BaseS : S -> S -> ListS = notYet "BaseS" ;
|
||||
oper CAdvAP : CAdv -> AP -> NP -> AP = notYet "CAdvAP" ;
|
||||
oper CleftAdv : Adv -> S -> Cl = notYet "CleftAdv" ;
|
||||
oper CleftNP : NP -> RS -> Cl = notYet "CleftNP" ;
|
||||
oper CompAdv : Adv -> Comp = notYet "CompAdv" ;
|
||||
oper CompCN : CN -> Comp = notYet "CompCN" ;
|
||||
oper CompIAdv : IAdv -> IComp = notYet "CompIAdv" ;
|
||||
oper CompIP : IP -> IComp = notYet "CompIP" ;
|
||||
oper CompNP : NP -> Comp = notYet "CompNP" ;
|
||||
oper ComparA : A -> NP -> AP = notYet "ComparA" ;
|
||||
oper ComparAdvAdj : CAdv -> A -> NP -> Adv = notYet "ComparAdvAdj" ;
|
||||
oper ComparAdvAdjS : CAdv -> A -> S -> Adv = notYet "ComparAdvAdjS" ;
|
||||
oper ComplA2 : A2 -> NP -> AP = notYet "ComplA2" ;
|
||||
oper ComplN2 : N2 -> NP -> CN = notYet "ComplN2" ;
|
||||
oper ComplN3 : N3 -> NP -> N2 = notYet "ComplN3" ;
|
||||
oper ComplSlash : VPSlash -> NP -> VP = notYet "ComplSlash" ;
|
||||
oper ComplSlashIP : VPSlash -> IP -> QVP = notYet "ComplSlashIP" ;
|
||||
oper ComplVA : VA -> AP -> VP = notYet "ComplVA" ;
|
||||
oper ComplVQ : VQ -> QS -> VP = notYet "ComplVQ" ;
|
||||
oper ComplVS : VS -> S -> VP = notYet "ComplVS" ;
|
||||
oper ComplVV : VV -> VP -> VP = notYet "ComplVV" ;
|
||||
oper ConjAP : Conj -> ListAP -> AP = notYet "ConjAP" ;
|
||||
oper ConjAdV : Conj -> ListAdV -> AdV = notYet "ConjAdV" ;
|
||||
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 ConjNP : Conj -> ListNP -> NP = notYet "ConjNP" ;
|
||||
oper ConjRS : Conj -> ListRS -> RS = notYet "ConjRS" ;
|
||||
oper ConjS : Conj -> ListS -> S = notYet "ConjS" ;
|
||||
oper ConsAP : AP -> ListAP -> ListAP = notYet "ConsAP" ;
|
||||
oper ConsAdV : AdV -> ListAdV -> ListAdV = notYet "ConsAdV" ;
|
||||
oper ConsAdv : Adv -> ListAdv -> ListAdv = notYet "ConsAdv" ;
|
||||
oper ConsCN : CN -> ListCN -> ListCN = notYet "ConsCN" ;
|
||||
oper ConsIAdv : IAdv -> ListIAdv -> ListIAdv = notYet "ConsIAdv" ;
|
||||
oper ConsNP : NP -> ListNP -> ListNP = notYet "ConsNP" ;
|
||||
oper ConsRS : RS -> ListRS -> ListRS = notYet "ConsRS" ;
|
||||
oper ConsS : S -> ListS -> ListS = notYet "ConsS" ;
|
||||
oper CountNP : Det -> NP -> NP = notYet "CountNP" ;
|
||||
oper DefArt : Quant = notYet "DefArt" ;
|
||||
oper DefArt : Quant = notYet "DefArt" ;
|
||||
oper DetCN : Det -> CN -> NP = notYet "DetCN" ;
|
||||
oper DetDAP : Det -> DAP = notYet "DetDAP" ;
|
||||
oper DetNP : Det -> NP = notYet "DetNP" ;
|
||||
oper DetQuant : Quant -> Num -> Det = notYet "DetQuant" ;
|
||||
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 ExistIPAdv : IP -> Adv -> QCl = notYet "ExistIPAdv" ;
|
||||
oper ExistNP : NP -> Cl = notYet "ExistNP" ;
|
||||
oper ExistNPAdv : NP -> Adv -> Cl = notYet "ExistNPAdv" ;
|
||||
oper ExtAdvS : Adv -> S -> S = notYet "ExtAdvS" ;
|
||||
oper ExtAdvVP : VP -> Adv -> VP = notYet "ExtAdvVP" ;
|
||||
oper FunRP : Prep -> NP -> RP -> RP = notYet "FunRP" ;
|
||||
oper GenericCl : VP -> Cl = notYet "GenericCl" ;
|
||||
oper IdRP : RP = notYet "IdRP" ;
|
||||
oper IdetCN : IDet -> CN -> IP = notYet "IdetCN" ;
|
||||
oper IdetIP : IDet -> IP = notYet "IdetIP" ;
|
||||
oper IdetQuant : IQuant -> Num -> IDet = notYet "IdetQuant" ;
|
||||
oper ImpP3 : NP -> VP -> Utt = notYet "ImpP3" ;
|
||||
oper ImpPl1 : VP -> Utt = notYet "ImpPl1" ;
|
||||
oper ImpVP : VP -> Imp = notYet "ImpVP" ;
|
||||
oper ImpersCl : VP -> Cl = notYet "ImpersCl" ;
|
||||
oper IndefArt : Quant = notYet "IndefArt" ;
|
||||
oper IndefArt : Quant = notYet "IndefArt" ;
|
||||
oper NumCard : Card -> Num = notYet "NumCard" ;
|
||||
oper NumDigits : Digits -> Card = notYet "NumDigits" ;
|
||||
oper NumNumeral : Numeral -> Card = notYet "NumNumeral" ;
|
||||
oper NumPl : Num = notYet "NumPl" ;
|
||||
oper NumSg : Num = notYet "NumSg" ;
|
||||
oper OrdDigits : Digits -> Ord = notYet "OrdDigits" ;
|
||||
oper OrdNumeral : Numeral -> Ord = notYet "OrdNumeral" ;
|
||||
oper OrdNumeralSuperl : Numeral -> A -> Ord = notYet "OrdNumeralSuperl" ;
|
||||
oper OrdSuperl : A -> Ord = notYet "OrdSuperl" ;
|
||||
oper PPartNP : NP -> V2 -> NP = notYet "PPartNP" ;
|
||||
oper PartNP : CN -> NP -> CN = notYet "PartNP" ;
|
||||
oper PassV2 : V2 -> VP = notYet "PassV2" ;
|
||||
oper PositAdAAdj : A -> AdA = notYet "PositAdAAdj" ;
|
||||
oper PositAdvAdj : A -> Adv = notYet "PositAdvAdj" ;
|
||||
oper PossNP : CN -> NP -> CN = notYet "PossNP" ;
|
||||
oper PossPron : Pron -> Quant = notYet "PossPron" ;
|
||||
oper PredSCVP : SC -> VP -> Cl = notYet "PredSCVP" ;
|
||||
oper PredetNP : Predet -> NP -> NP = notYet "PredetNP" ;
|
||||
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 QuestQVP : IP -> QVP -> QCl = notYet "QuestQVP" ;
|
||||
oper QuestSlash : IP -> ClSlash -> QCl = notYet "QuestSlash" ;
|
||||
oper QuestVP : IP -> VP -> QCl = notYet "QuestVP" ;
|
||||
oper ReflA2 : A2 -> AP = notYet "ReflA2" ;
|
||||
oper ReflVP : VPSlash -> VP = notYet "ReflVP" ;
|
||||
oper RelCN : CN -> RS -> CN = notYet "RelCN" ;
|
||||
oper RelCl : Cl -> RCl = notYet "RelCl" ;
|
||||
oper RelNP : NP -> RS -> NP = notYet "RelNP" ;
|
||||
oper RelS : S -> RS -> S = notYet "RelS" ;
|
||||
oper RelSlash : RP -> ClSlash -> RCl = notYet "RelSlash" ;
|
||||
oper RelVP : RP -> VP -> RCl = notYet "RelVP" ;
|
||||
oper SSubjS : S -> Subj -> S -> S = notYet "SSubjS" ;
|
||||
oper SelfAdVVP : VP -> VP = notYet "SelfAdVVP" ;
|
||||
oper SelfAdvVP : VP -> VP = notYet "SelfAdvVP" ;
|
||||
oper SelfNP : NP -> NP = notYet "SelfNP" ;
|
||||
oper SentAP : AP -> SC -> AP = notYet "SentAP" ;
|
||||
oper SentCN : CN -> SC -> CN = notYet "SentCN" ;
|
||||
oper Slash2V3 : V3 -> NP -> VPSlash = notYet "Slash2V3" ;
|
||||
oper Slash3V3 : V3 -> NP -> VPSlash = notYet "Slash3V3" ;
|
||||
oper SlashPrep : Cl -> Prep -> ClSlash = notYet "SlashPrep" ;
|
||||
oper SlashV2A : V2A -> AP -> VPSlash = notYet "SlashV2A" ;
|
||||
oper SlashV2Q : V2Q -> QS -> VPSlash = notYet "SlashV2Q" ;
|
||||
oper SlashV2S : V2S -> S -> VPSlash = notYet "SlashV2S" ;
|
||||
oper SlashV2V : V2V -> VP -> VPSlash = notYet "SlashV2V" ;
|
||||
oper SlashV2VNP : V2V -> NP -> VPSlash -> VPSlash = notYet "SlashV2VNP" ;
|
||||
oper SlashV2a : V2 -> VPSlash = notYet "SlashV2a" ;
|
||||
oper SlashVP : NP -> VPSlash -> ClSlash = notYet "SlashVP" ;
|
||||
oper SlashVS : NP -> VS -> SSlash -> ClSlash = notYet "SlashVS" ;
|
||||
oper SlashVV : VV -> VPSlash -> VPSlash = notYet "SlashVV" ;
|
||||
oper SubjS : Subj -> S -> Adv = notYet "SubjS" ;
|
||||
oper Use2N3 : N3 -> N2 = notYet "Use2N3" ;
|
||||
oper Use3N3 : N3 -> N2 = notYet "Use3N3" ;
|
||||
oper UseA2 : A2 -> AP = notYet "UseA2" ;
|
||||
oper UseComparA : A -> AP = notYet "UseComparA" ;
|
||||
oper UseN2 : N2 -> CN = notYet "UseN2" ;
|
||||
oper UsePN : PN -> NP = notYet "UsePN" ;
|
||||
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 UseV : V -> VP = notYet "UseV" ;
|
||||
oper UttCard : Card -> Utt = notYet "UttCard" ;
|
||||
oper UttIAdv : IAdv -> Utt = notYet "UttIAdv" ;
|
||||
oper UttIP : IP -> Utt = notYet "UttIP" ;
|
||||
oper UttImpPl : Pol -> Imp -> Utt = notYet "UttImpPl" ;
|
||||
oper UttImpPol : Pol -> Imp -> Utt = notYet "UttImpPol" ;
|
||||
oper UttImpSg : Pol -> Imp -> Utt = notYet "UttImpSg" ;
|
||||
oper UttInterj : Interj -> Utt = notYet "UttInterj" ;
|
||||
oper UttQS : QS -> Utt = notYet "UttQS" ;
|
||||
oper VPSlashPrep : VP -> Prep -> VPSlash = notYet "VPSlashPrep" ;
|
||||
oper above_Prep : Prep = notYet "above_Prep" ;
|
||||
oper active2passive : Cl -> Cl = notYet "active2passive" ;
|
||||
oper add_V3 : V3 = notYet "add_V3" ;
|
||||
oper after_Prep : Prep = notYet "after_Prep" ;
|
||||
oper airplane_N : N = notYet "airplane_N" ;
|
||||
oper alas_Interj : Interj = notYet "alas_Interj" ;
|
||||
oper all_Predet : Predet = notYet "all_Predet" ;
|
||||
oper almost_AdA : AdA = notYet "almost_AdA" ;
|
||||
oper almost_AdN : AdN = notYet "almost_AdN" ;
|
||||
oper already_Adv : Adv = notYet "already_Adv" ;
|
||||
oper although_Subj : Subj = notYet "although_Subj" ;
|
||||
oper always_AdV : AdV = notYet "always_AdV" ;
|
||||
oper answer_V2S : V2S = notYet "answer_V2S" ;
|
||||
oper apartment_N : N = notYet "apartment_N" ;
|
||||
oper apple_N : N = notYet "apple_N" ;
|
||||
oper art_N : N = notYet "art_N" ;
|
||||
oper as_CAdv : CAdv = notYet "as_CAdv" ;
|
||||
oper ashes_N : N = notYet "ashes_N" ;
|
||||
oper ask_V2Q : V2Q = notYet "ask_V2Q" ;
|
||||
oper at_least_AdN : AdN = notYet "at_least_AdN" ;
|
||||
oper at_most_AdN : AdN = notYet "at_most_AdN" ;
|
||||
oper baby_N : N = notYet "baby_N" ;
|
||||
oper back_N : N = notYet "back_N" ;
|
||||
oper bad_A : A = notYet "bad_A" ;
|
||||
oper bank_N : N = notYet "bank_N" ;
|
||||
oper bark_N : N = notYet "bark_N" ;
|
||||
oper beautiful_A : A = notYet "beautiful_A" ;
|
||||
oper because_Subj : Subj = notYet "because_Subj" ;
|
||||
oper become_VA : VA = notYet "become_VA" ;
|
||||
oper beer_N : N = notYet "beer_N" ;
|
||||
oper before_Prep : Prep = notYet "before_Prep" ;
|
||||
oper beg_V2V : V2V = notYet "beg_V2V" ;
|
||||
oper behind_Prep : Prep = notYet "behind_Prep" ;
|
||||
oper belly_N : N = notYet "belly_N" ;
|
||||
oper between_Prep : Prep = notYet "between_Prep" ;
|
||||
oper bike_N : N = notYet "bike_N" ;
|
||||
oper bite_V2 : V2 = notYet "bite_V2" ;
|
||||
oper black_A : A = notYet "black_A" ;
|
||||
oper blood_N : N = notYet "blood_N" ;
|
||||
oper blow_V : V = notYet "blow_V" ;
|
||||
oper blue_A : A = notYet "blue_A" ;
|
||||
oper boat_N : N = notYet "boat_N" ;
|
||||
oper bone_N : N = notYet "bone_N" ;
|
||||
oper boot_N : N = notYet "boot_N" ;
|
||||
oper boss_N : N = notYet "boss_N" ;
|
||||
oper both7and_DConj : Conj = notYet "both7and_DConj" ;
|
||||
oper bottle_of_CN : NP -> CN = notYet "bottle_of_CN" ;
|
||||
oper break_V2 : V2 = notYet "break_V2" ;
|
||||
oper breast_N : N = notYet "breast_N" ;
|
||||
oper breathe_V : V = notYet "breathe_V" ;
|
||||
oper broad_A : A = notYet "broad_A" ;
|
||||
oper brother_N2 : N2 = notYet "brother_N2" ;
|
||||
oper brown_A : A = notYet "brown_A" ;
|
||||
oper burn_V : V = notYet "burn_V" ;
|
||||
oper but_PConj : PConj = notYet "but_PConj" ;
|
||||
oper butter_N : N = notYet "butter_N" ;
|
||||
oper buy_V2 : V2 = notYet "buy_V2" ;
|
||||
oper by8agent_Prep : Prep = notYet "by8agent_Prep" ;
|
||||
oper by8means_Prep : Prep = notYet "by8means_Prep" ;
|
||||
oper camera_N : N = notYet "camera_N" ;
|
||||
oper can8know_VV : VV = notYet "can8know_VV" ;
|
||||
oper can_VV : VV = notYet "can_VV" ;
|
||||
oper cap_N : N = notYet "cap_N" ;
|
||||
oper carpet_N : N = notYet "carpet_N" ;
|
||||
oper ceiling_N : N = notYet "ceiling_N" ;
|
||||
oper chair_N : N = notYet "chair_N" ;
|
||||
oper cheese_N : N = notYet "cheese_N" ;
|
||||
oper child_N : N = notYet "child_N" ;
|
||||
oper church_N : N = notYet "church_N" ;
|
||||
oper clean_A : A = notYet "clean_A" ;
|
||||
oper clever_A : A = notYet "clever_A" ;
|
||||
oper close_V2 : V2 = notYet "close_V2" ;
|
||||
oper cloud_N : N = notYet "cloud_N" ;
|
||||
oper coat_N : N = notYet "coat_N" ;
|
||||
oper cold_A : A = notYet "cold_A" ;
|
||||
oper come_V : V = notYet "come_V" ;
|
||||
oper computer_N : N = notYet "computer_N" ;
|
||||
oper correct_A : A = notYet "correct_A" ;
|
||||
oper count_V2 : V2 = notYet "count_V2" ;
|
||||
oper country_N : N = notYet "country_N" ;
|
||||
oper cousin_N : N = notYet "cousin_N" ;
|
||||
oper cow_N : N = notYet "cow_N" ;
|
||||
oper cup_of_CN : NP -> CN = notYet "cup_of_CN" ;
|
||||
oper cut_V2 : V2 = notYet "cut_V2" ;
|
||||
oper day_N : N = notYet "day_N" ;
|
||||
oper dconcat : Digits -> Digits -> Digits = notYet "dconcat" ;
|
||||
oper die_V : V = notYet "die_V" ;
|
||||
oper dig_V : V = notYet "dig_V" ;
|
||||
oper digits2num : Digits -> Numeral = notYet "digits2num" ;
|
||||
oper digits2numeral : Card -> Card = notYet "digits2numeral" ;
|
||||
oper dirty_A : A = notYet "dirty_A" ;
|
||||
oper distance_N3 : N3 = notYet "distance_N3" ;
|
||||
oper dn : Dig -> Digit = notYet "dn" ;
|
||||
oper dn10 : Dig -> Sub10 = notYet "dn10" ;
|
||||
oper dn100 : Dig -> Dig -> Sub100 = notYet "dn100" ;
|
||||
oper dn1000 : Dig -> Dig -> Dig -> Sub1000 = notYet "dn1000" ;
|
||||
oper dn1000000a : Dig -> Dig -> Dig -> Dig -> Sub1000000 = notYet "dn1000000a" ;
|
||||
oper dn1000000b : Dig -> Dig -> Dig -> Dig -> Dig -> Sub1000000 = notYet "dn1000000b" ;
|
||||
oper dn1000000c : Dig -> Dig -> Dig -> Dig -> Dig -> Dig -> Sub1000000 = notYet "dn1000000c" ;
|
||||
oper do_V2 : V2 = notYet "do_V2" ;
|
||||
oper doctor_N : N = notYet "doctor_N" ;
|
||||
oper dog_N : N = notYet "dog_N" ;
|
||||
oper door_N : N = notYet "door_N" ;
|
||||
oper drink_V2 : V2 = notYet "drink_V2" ;
|
||||
oper dry_A : A = notYet "dry_A" ;
|
||||
oper dull_A : A = notYet "dull_A" ;
|
||||
oper during_Prep : Prep = notYet "during_Prep" ;
|
||||
oper dust_N : N = notYet "dust_N" ;
|
||||
oper ear_N : N = notYet "ear_N" ;
|
||||
oper earth_N : N = notYet "earth_N" ;
|
||||
oper easy_A2V : A2 = notYet "easy_A2V" ;
|
||||
oper eat_V2 : V2 = notYet "eat_V2" ;
|
||||
oper egg_N : N = notYet "egg_N" ;
|
||||
oper either7or_DConj : Conj = notYet "either7or_DConj" ;
|
||||
oper empty_A : A = notYet "empty_A" ;
|
||||
oper enemy_N : N = notYet "enemy_N" ;
|
||||
oper every_Det : Det = notYet "every_Det" ;
|
||||
oper everybody_NP : NP = notYet "everybody_NP" ;
|
||||
oper everything_NP : NP = notYet "everything_NP" ;
|
||||
oper everywhere_Adv : Adv = notYet "everywhere_Adv" ;
|
||||
oper except_Prep : Prep = notYet "except_Prep" ;
|
||||
oper eye_N : N = notYet "eye_N" ;
|
||||
oper factory_N : N = notYet "factory_N" ;
|
||||
oper fall_V : V = notYet "fall_V" ;
|
||||
oper far_Adv : Adv = notYet "far_Adv" ;
|
||||
oper fat_N : N = notYet "fat_N" ;
|
||||
oper father_N2 : N2 = notYet "father_N2" ;
|
||||
oper fear_V2 : V2 = notYet "fear_V2" ;
|
||||
oper fear_VS : VS = notYet "fear_VS" ;
|
||||
oper feather_N : N = notYet "feather_N" ;
|
||||
oper few_Det : Det = notYet "few_Det" ;
|
||||
oper few_X_short_of_Y : NP -> CN -> CN -> S = notYet "few_X_short_of_Y" ;
|
||||
oper fight_V2 : V2 = notYet "fight_V2" ;
|
||||
oper find_V2 : V2 = notYet "find_V2" ;
|
||||
oper fingernail_N : N = notYet "fingernail_N" ;
|
||||
oper fire_N : N = notYet "fire_N" ;
|
||||
oper fish_N : N = notYet "fish_N" ;
|
||||
oper float_V : V = notYet "float_V" ;
|
||||
oper floor_N : N = notYet "floor_N" ;
|
||||
oper flow_V : V = notYet "flow_V" ;
|
||||
oper flower_N : N = notYet "flower_N" ;
|
||||
oper fly_V : V = notYet "fly_V" ;
|
||||
oper fog_N : N = notYet "fog_N" ;
|
||||
oper foot_N : N = notYet "foot_N" ;
|
||||
oper for_Prep : Prep = notYet "for_Prep" ;
|
||||
oper forest_N : N = notYet "forest_N" ;
|
||||
oper forget_V2 : V2 = notYet "forget_V2" ;
|
||||
oper freeze_V : V = notYet "freeze_V" ;
|
||||
oper fridge_N : N = notYet "fridge_N" ;
|
||||
oper friend_N : N = notYet "friend_N" ;
|
||||
oper from_Prep : Prep = notYet "from_Prep" ;
|
||||
oper fruit_N : N = notYet "fruit_N" ;
|
||||
oper full_A : A = notYet "full_A" ;
|
||||
oper fun_AV : A = notYet "fun_AV" ;
|
||||
oper garden_N : N = notYet "garden_N" ;
|
||||
oper give_V3 : V3 = notYet "give_V3" ;
|
||||
oper glass_of_CN : NP -> CN = notYet "glass_of_CN" ;
|
||||
oper glove_N : N = notYet "glove_N" ;
|
||||
oper go_V : V = notYet "go_V" ;
|
||||
oper gold_N : N = notYet "gold_N" ;
|
||||
oper good_A : A = notYet "good_A" ;
|
||||
oper grammar_N : N = notYet "grammar_N" ;
|
||||
oper grass_N : N = notYet "grass_N" ;
|
||||
oper green_A : A = notYet "green_A" ;
|
||||
oper guts_N : N = notYet "guts_N" ;
|
||||
oper hair_N : N = notYet "hair_N" ;
|
||||
oper hand_N : N = notYet "hand_N" ;
|
||||
oper harbour_N : N = notYet "harbour_N" ;
|
||||
oper has_age_VP : Card -> VP = notYet "has_age_VP" ;
|
||||
oper hat_N : N = notYet "hat_N" ;
|
||||
oper hate_V2 : V2 = notYet "hate_V2" ;
|
||||
oper have_name_Cl : NP -> NP -> Cl = notYet "have_name_Cl" ;
|
||||
oper head_N : N = notYet "head_N" ;
|
||||
oper hear_V2 : V2 = notYet "hear_V2" ;
|
||||
oper heart_N : N = notYet "heart_N" ;
|
||||
oper heavy_A : A = notYet "heavy_A" ;
|
||||
oper here7from_Adv : Adv = notYet "here7from_Adv" ;
|
||||
oper here7to_Adv : Adv = notYet "here7to_Adv" ;
|
||||
oper here_Adv : Adv = notYet "here_Adv" ;
|
||||
oper hill_N : N = notYet "hill_N" ;
|
||||
oper hit_V2 : V2 = notYet "hit_V2" ;
|
||||
oper hold_V2 : V2 = notYet "hold_V2" ;
|
||||
oper hope_VS : VS = notYet "hope_VS" ;
|
||||
oper horn_N : N = notYet "horn_N" ;
|
||||
oper horse_N : N = notYet "horse_N" ;
|
||||
oper hot_A : A = notYet "hot_A" ;
|
||||
oper how8many_IDet : IDet = notYet "how8many_IDet" ;
|
||||
oper how8much_IAdv : IAdv = notYet "how8much_IAdv" ;
|
||||
oper how_IAdv : IAdv = notYet "how_IAdv" ;
|
||||
oper how_far_QCl : NP -> QCl = notYet "how_far_QCl" ;
|
||||
oper how_old_QCl : NP -> QCl = notYet "how_old_QCl" ;
|
||||
oper hungry_VP : VP = notYet "hungry_VP" ;
|
||||
oper hunt_V2 : V2 = notYet "hunt_V2" ;
|
||||
oper husband_N : N = notYet "husband_N" ;
|
||||
oper ice_N : N = notYet "ice_N" ;
|
||||
oper if_Subj : Subj = notYet "if_Subj" ;
|
||||
oper if_then_Conj : Conj = notYet "if_then_Conj" ;
|
||||
oper ill_VP : VP = notYet "ill_VP" ;
|
||||
oper important_A : A = notYet "important_A" ;
|
||||
oper in8front_Prep : Prep = notYet "in8front_Prep" ;
|
||||
oper industry_N : N = notYet "industry_N" ;
|
||||
oper iron_N : N = notYet "iron_N" ;
|
||||
oper is_right_VP : VP = notYet "is_right_VP" ;
|
||||
oper is_wrong_VP : VP = notYet "is_wrong_VP" ;
|
||||
oper it_Pron : Pron = notYet "it_Pron" ;
|
||||
oper john_PN : PN = notYet "john_PN" ;
|
||||
oper jump_V : V = notYet "jump_V" ;
|
||||
oper kill_V2 : V2 = notYet "kill_V2" ;
|
||||
oper king_N : N = notYet "king_N" ;
|
||||
oper knee_N : N = notYet "knee_N" ;
|
||||
oper know_V2 : V2 = notYet "know_V2" ;
|
||||
oper know_VQ : VQ = notYet "know_VQ" ;
|
||||
oper know_VS : VS = notYet "know_VS" ;
|
||||
oper lake_N : N = notYet "lake_N" ;
|
||||
oper lamp_N : N = notYet "lamp_N" ;
|
||||
oper laugh_V : V = notYet "laugh_V" ;
|
||||
oper leaf_N : N = notYet "leaf_N" ;
|
||||
oper learn_V2 : V2 = notYet "learn_V2" ;
|
||||
oper leather_N : N = notYet "leather_N" ;
|
||||
oper leave_V2 : V2 = notYet "leave_V2" ;
|
||||
oper left_Ord : Ord = notYet "left_Ord" ;
|
||||
oper leg_N : N = notYet "leg_N" ;
|
||||
oper less_CAdv : CAdv = notYet "less_CAdv" ;
|
||||
oper lie_V : V = notYet "lie_V" ;
|
||||
oper like_V2 : V2 = notYet "like_V2" ;
|
||||
oper listen_V2 : V2 = notYet "listen_V2" ;
|
||||
oper live_V : V = notYet "live_V" ;
|
||||
oper liver_N : N = notYet "liver_N" ;
|
||||
oper long_A : A = notYet "long_A" ;
|
||||
oper lose_V2 : V2 = notYet "lose_V2" ;
|
||||
oper louse_N : N = notYet "louse_N" ;
|
||||
oper love_N : N = notYet "love_N" ;
|
||||
oper love_V2 : V2 = notYet "love_V2" ;
|
||||
oper many_Det : Det = notYet "many_Det" ;
|
||||
oper married_A2 : A2 = notYet "married_A2" ;
|
||||
oper married_Cl : NP -> NP -> Cl = notYet "married_Cl" ;
|
||||
oper meat_N : N = notYet "meat_N" ;
|
||||
oper milk_N : N = notYet "milk_N" ;
|
||||
oper moon_N : N = notYet "moon_N" ;
|
||||
oper more_CAdv : CAdv = notYet "more_CAdv" ;
|
||||
oper most_Predet : Predet = notYet "most_Predet" ;
|
||||
oper mother_N2 : N2 = notYet "mother_N2" ;
|
||||
oper mountain_N : N = notYet "mountain_N" ;
|
||||
oper mouth_N : N = notYet "mouth_N" ;
|
||||
oper much_Det : Det = notYet "much_Det" ;
|
||||
oper music_N : N = notYet "music_N" ;
|
||||
oper must_VV : VV = notYet "must_VV" ;
|
||||
oper n_units_AP : Card -> CN -> A -> AP = notYet "n_units_AP" ;
|
||||
oper n_units_of_NP : Card -> CN -> NP -> NP = notYet "n_units_of_NP" ;
|
||||
oper name_N : N = notYet "name_N" ;
|
||||
oper narrow_A : A = notYet "narrow_A" ;
|
||||
oper nd : Digit -> Dig = notYet "nd" ;
|
||||
oper nd10 : Sub10 -> Digits = notYet "nd10" ;
|
||||
oper nd100 : Sub100 -> Digits = notYet "nd100" ;
|
||||
oper nd1000 : Sub1000 -> Digits = notYet "nd1000" ;
|
||||
oper nd1000000 : Sub1000000 -> Digits = notYet "nd1000000" ;
|
||||
oper near_A : A = notYet "near_A" ;
|
||||
oper neck_N : N = notYet "neck_N" ;
|
||||
oper new_A : A = notYet "new_A" ;
|
||||
oper newspaper_N : N = notYet "newspaper_N" ;
|
||||
oper night_N : N = notYet "night_N" ;
|
||||
oper no_Quant : Quant = notYet "no_Quant" ;
|
||||
oper nobody_NP : NP = notYet "nobody_NP" ;
|
||||
oper nose_N : N = notYet "nose_N" ;
|
||||
oper not_Predet : Predet = notYet "not_Predet" ;
|
||||
oper nothing_NP : NP = notYet "nothing_NP" ;
|
||||
oper now_Adv : Adv = notYet "now_Adv" ;
|
||||
oper num2digits : Numeral -> Digits = notYet "num2digits" ;
|
||||
oper number_N : N = notYet "number_N" ;
|
||||
oper oil_N : N = notYet "oil_N" ;
|
||||
oper old_A : A = notYet "old_A" ;
|
||||
oper only_Predet : Predet = notYet "only_Predet" ;
|
||||
oper open_V2 : V2 = notYet "open_V2" ;
|
||||
oper otherwise_PConj : PConj = notYet "otherwise_PConj" ;
|
||||
oper paint_V2A : V2A = notYet "paint_V2A" ;
|
||||
oper paper_N : N = notYet "paper_N" ;
|
||||
oper paris_PN : PN = notYet "paris_PN" ;
|
||||
oper part_Prep : Prep = notYet "part_Prep" ;
|
||||
oper peace_N : N = notYet "peace_N" ;
|
||||
oper pen_N : N = notYet "pen_N" ;
|
||||
oper person_N : N = notYet "person_N" ;
|
||||
oper planet_N : N = notYet "planet_N" ;
|
||||
oper plastic_N : N = notYet "plastic_N" ;
|
||||
oper play_V : V = notYet "play_V" ;
|
||||
oper play_V2 : V2 = notYet "play_V2" ;
|
||||
oper please_Voc : Voc = notYet "please_Voc" ;
|
||||
oper policeman_N : N = notYet "policeman_N" ;
|
||||
oper possess_Prep : Prep = notYet "possess_Prep" ;
|
||||
oper priest_N : N = notYet "priest_N" ;
|
||||
oper probable_AS : A = notYet "probable_AS" ;
|
||||
oper pull_V2 : V2 = notYet "pull_V2" ;
|
||||
oper push_V2 : V2 = notYet "push_V2" ;
|
||||
oper put_V2 : V2 = notYet "put_V2" ;
|
||||
oper queen_N : N = notYet "queen_N" ;
|
||||
oper question_N : N = notYet "question_N" ;
|
||||
oper quite_Adv : AdA = notYet "quite_Adv" ;
|
||||
oper radio_N : N = notYet "radio_N" ;
|
||||
oper rain_N : N = notYet "rain_N" ;
|
||||
oper rain_V0 : V = notYet "rain_V0" ;
|
||||
oper ready_A : A = notYet "ready_A" ;
|
||||
oper ready_VP : VP = notYet "ready_VP" ;
|
||||
oper reason_N : N = notYet "reason_N" ;
|
||||
oper red_A : A = notYet "red_A" ;
|
||||
oper religion_N : N = notYet "religion_N" ;
|
||||
oper restaurant_N : N = notYet "restaurant_N" ;
|
||||
oper right_Ord : Ord = notYet "right_Ord" ;
|
||||
oper river_N : N = notYet "river_N" ;
|
||||
oper road_N : N = notYet "road_N" ;
|
||||
oper rock_N : N = notYet "rock_N" ;
|
||||
oper roof_N : N = notYet "roof_N" ;
|
||||
oper root_N : N = notYet "root_N" ;
|
||||
oper rope_N : N = notYet "rope_N" ;
|
||||
oper rotten_A : A = notYet "rotten_A" ;
|
||||
oper round_A : A = notYet "round_A" ;
|
||||
oper rub_V2 : V2 = notYet "rub_V2" ;
|
||||
oper rubber_N : N = notYet "rubber_N" ;
|
||||
oper rule_N : N = notYet "rule_N" ;
|
||||
oper run_V : V = notYet "run_V" ;
|
||||
oper salt_N : N = notYet "salt_N" ;
|
||||
oper sand_N : N = notYet "sand_N" ;
|
||||
oper say_VS : VS = notYet "say_VS" ;
|
||||
oper scared_VP : VP = notYet "scared_VP" ;
|
||||
oper school_N : N = notYet "school_N" ;
|
||||
oper science_N : N = notYet "science_N" ;
|
||||
oper scratch_V2 : V2 = notYet "scratch_V2" ;
|
||||
oper sea_N : N = notYet "sea_N" ;
|
||||
oper seed_N : N = notYet "seed_N" ;
|
||||
oper seek_V2 : V2 = notYet "seek_V2" ;
|
||||
oper sell_V3 : V3 = notYet "sell_V3" ;
|
||||
oper send_V3 : V3 = notYet "send_V3" ;
|
||||
oper sew_V : V = notYet "sew_V" ;
|
||||
oper sharp_A : A = notYet "sharp_A" ;
|
||||
oper sheep_N : N = notYet "sheep_N" ;
|
||||
oper ship_N : N = notYet "ship_N" ;
|
||||
oper shirt_N : N = notYet "shirt_N" ;
|
||||
oper shoe_N : N = notYet "shoe_N" ;
|
||||
oper shop_N : N = notYet "shop_N" ;
|
||||
oper short_A : A = notYet "short_A" ;
|
||||
oper silver_N : N = notYet "silver_N" ;
|
||||
oper sing_V : V = notYet "sing_V" ;
|
||||
oper sister_N : N = notYet "sister_N" ;
|
||||
oper sit_V : V = notYet "sit_V" ;
|
||||
oper skin_N : N = notYet "skin_N" ;
|
||||
oper sky_N : N = notYet "sky_N" ;
|
||||
oper sleep_V : V = notYet "sleep_V" ;
|
||||
oper smell_V : V = notYet "smell_V" ;
|
||||
oper smoke_N : N = notYet "smoke_N" ;
|
||||
oper smooth_A : A = notYet "smooth_A" ;
|
||||
oper snake_N : N = notYet "snake_N" ;
|
||||
oper snow_N : N = notYet "snow_N" ;
|
||||
oper so_AdA : AdA = notYet "so_AdA" ;
|
||||
oper sock_N : N = notYet "sock_N" ;
|
||||
oper somePl_Det : Det = notYet "somePl_Det" ;
|
||||
oper someSg_Det : Det = notYet "someSg_Det" ;
|
||||
oper somebody_NP : NP = notYet "somebody_NP" ;
|
||||
oper something_NP : NP = notYet "something_NP" ;
|
||||
oper somewhere_Adv : Adv = notYet "somewhere_Adv" ;
|
||||
oper song_N : N = notYet "song_N" ;
|
||||
oper speak_V2 : V2 = notYet "speak_V2" ;
|
||||
oper spit_V : V = notYet "spit_V" ;
|
||||
oper split_V2 : V2 = notYet "split_V2" ;
|
||||
oper squeeze_V2 : V2 = notYet "squeeze_V2" ;
|
||||
oper stab_V2 : V2 = notYet "stab_V2" ;
|
||||
oper stand_V : V = notYet "stand_V" ;
|
||||
oper star_N : N = notYet "star_N" ;
|
||||
oper steel_N : N = notYet "steel_N" ;
|
||||
oper stick_N : N = notYet "stick_N" ;
|
||||
oper stone_N : N = notYet "stone_N" ;
|
||||
oper stop_V : V = notYet "stop_V" ;
|
||||
oper stove_N : N = notYet "stove_N" ;
|
||||
oper straight_A : A = notYet "straight_A" ;
|
||||
oper student_N : N = notYet "student_N" ;
|
||||
oper stupid_A : A = notYet "stupid_A" ;
|
||||
oper suck_V2 : V2 = notYet "suck_V2" ;
|
||||
oper sun_N : N = notYet "sun_N" ;
|
||||
oper swell_V : V = notYet "swell_V" ;
|
||||
oper swim_V : V = notYet "swim_V" ;
|
||||
oper switch8off_V2 : V2 = notYet "switch8off_V2" ;
|
||||
oper switch8on_V2 : V2 = notYet "switch8on_V2" ;
|
||||
oper table_N : N = notYet "table_N" ;
|
||||
oper tail_N : N = notYet "tail_N" ;
|
||||
oper talk_V3 : V3 = notYet "talk_V3" ;
|
||||
oper teacher_N : N = notYet "teacher_N" ;
|
||||
oper television_N : N = notYet "television_N" ;
|
||||
oper that_Quant : Quant = notYet "that_Quant" ;
|
||||
oper that_Subj : Subj = notYet "that_Subj" ;
|
||||
oper there7from_Adv : Adv = notYet "there7from_Adv" ;
|
||||
oper there7to_Adv : Adv = notYet "there7to_Adv" ;
|
||||
oper there_Adv : Adv = notYet "there_Adv" ;
|
||||
oper therefore_PConj : PConj = notYet "therefore_PConj" ;
|
||||
oper thick_A : A = notYet "thick_A" ;
|
||||
oper thin_A : A = notYet "thin_A" ;
|
||||
oper think_V : V = notYet "think_V" ;
|
||||
oper thirsty_VP : VP = notYet "thirsty_VP" ;
|
||||
oper this_Quant : Quant = notYet "this_Quant" ;
|
||||
oper through_Prep : Prep = notYet "through_Prep" ;
|
||||
oper throw_V2 : V2 = notYet "throw_V2" ;
|
||||
oper tie_V2 : V2 = notYet "tie_V2" ;
|
||||
oper tired_VP : VP = notYet "tired_VP" ;
|
||||
oper to_Prep : Prep = notYet "to_Prep" ;
|
||||
oper today_Adv : Adv = notYet "today_Adv" ;
|
||||
oper tongue_N : N = notYet "tongue_N" ;
|
||||
oper too_AdA : AdA = notYet "too_AdA" ;
|
||||
oper tooth_N : N = notYet "tooth_N" ;
|
||||
oper train_N : N = notYet "train_N" ;
|
||||
oper travel_V : V = notYet "travel_V" ;
|
||||
oper tree_N : N = notYet "tree_N" ;
|
||||
oper turn_V : V = notYet "turn_V" ;
|
||||
oper ugly_A : A = notYet "ugly_A" ;
|
||||
oper uncertain_A : A = notYet "uncertain_A" ;
|
||||
oper under_Prep : Prep = notYet "under_Prep" ;
|
||||
oper understand_V2 : V2 = notYet "understand_V2" ;
|
||||
oper university_N : N = notYet "university_N" ;
|
||||
oper very_AdA : AdA = notYet "very_AdA" ;
|
||||
oper village_N : N = notYet "village_N" ;
|
||||
oper vomit_V : V = notYet "vomit_V" ;
|
||||
oper wait_V2 : V2 = notYet "wait_V2" ;
|
||||
oper walk_V : V = notYet "walk_V" ;
|
||||
oper want_VV : VV = notYet "want_VV" ;
|
||||
oper war_N : N = notYet "war_N" ;
|
||||
oper warm_A : A = notYet "warm_A" ;
|
||||
oper wash_V2 : V2 = notYet "wash_V2" ;
|
||||
oper watch_V2 : V2 = notYet "watch_V2" ;
|
||||
oper water_N : N = notYet "water_N" ;
|
||||
oper weather_adjCl : AP -> Cl = notYet "weather_adjCl" ;
|
||||
oper wet_A : A = notYet "wet_A" ;
|
||||
oper whatPl_IP : IP = notYet "whatPl_IP" ;
|
||||
oper whatSg_IP : IP = notYet "whatSg_IP" ;
|
||||
oper what_name_QCl : NP -> QCl = notYet "what_name_QCl" ;
|
||||
oper when_IAdv : IAdv = notYet "when_IAdv" ;
|
||||
oper when_Subj : Subj = notYet "when_Subj" ;
|
||||
oper where_IAdv : IAdv = notYet "where_IAdv" ;
|
||||
oper which_IQuant : IQuant = notYet "which_IQuant" ;
|
||||
oper white_A : A = notYet "white_A" ;
|
||||
oper whoPl_IP : IP = notYet "whoPl_IP" ;
|
||||
oper whoSg_IP : IP = notYet "whoSg_IP" ;
|
||||
oper why_IAdv : IAdv = notYet "why_IAdv" ;
|
||||
oper wide_A : A = notYet "wide_A" ;
|
||||
oper wife_N : N = notYet "wife_N" ;
|
||||
oper win_V2 : V2 = notYet "win_V2" ;
|
||||
oper wind_N : N = notYet "wind_N" ;
|
||||
oper window_N : N = notYet "window_N" ;
|
||||
oper wine_N : N = notYet "wine_N" ;
|
||||
oper wing_N : N = notYet "wing_N" ;
|
||||
oper wipe_V2 : V2 = notYet "wipe_V2" ;
|
||||
oper without_Prep : Prep = notYet "without_Prep" ;
|
||||
oper wonder_VQ : VQ = notYet "wonder_VQ" ;
|
||||
oper wood_N : N = notYet "wood_N" ;
|
||||
oper worm_N : N = notYet "worm_N" ;
|
||||
oper write_V2 : V2 = notYet "write_V2" ;
|
||||
oper year_N : N = notYet "year_N" ;
|
||||
oper yellow_A : A = notYet "yellow_A" ;
|
||||
oper youPol_Pron : Pron = notYet "youPol_Pron" ;
|
||||
oper young_A : A = notYet "young_A" ;
|
||||
oper CNNumNP : CN -> Card -> NP = notYet "CNNumNP" ;
|
||||
oper CNSymbNP : Det -> CN -> [Symb] -> NP = notYet "CNSymbNP" ;
|
||||
oper FloatPN : Float -> PN = notYet "FloatPN" ;
|
||||
oper IntPN : Int -> PN = notYet "IntPN" ;
|
||||
oper NumPN : Card -> PN = notYet "NumPN" ;
|
||||
oper SymbNum : Symb -> Card = notYet "SymbNum" ;
|
||||
oper SymbOrd : Symb -> Ord = notYet "SymbOrd" ;
|
||||
oper SymbPN : Symb -> PN = notYet "SymbPN" ;
|
||||
oper SymbS : Symb -> S = notYet "SymbS" ;
|
||||
}
|
||||
221
src/somali/NounSom.gf
Normal file
221
src/somali/NounSom.gf
Normal file
@@ -0,0 +1,221 @@
|
||||
concrete NounSom of Noun = CatSom ** open ResSom, Prelude in {
|
||||
|
||||
flags optimize=all_subs ;
|
||||
|
||||
lin
|
||||
|
||||
--2 Noun phrases
|
||||
|
||||
-- The three main types of noun phrases are
|
||||
-- - common nouns with determiners
|
||||
-- - proper names
|
||||
-- - pronouns
|
||||
|
||||
-- : Det -> CN -> NP
|
||||
DetCN det cn = useN cn ** {
|
||||
s = \\c =>
|
||||
let nfc : {nf : NForm ; c : Case} =
|
||||
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,True,Def x vA> => {nf=Def x vA ; c=Abs} ;
|
||||
<Nom,False,Def x vA> => {nf=Def x vU ; c=Nom} ;
|
||||
_ => {nf=det.d ; c=c}
|
||||
} ;
|
||||
in cn.s ! nfc.nf
|
||||
++ det.s ! nfc.c
|
||||
++ cn.mod ! getNum (getAgr det.d Masc) ! c ;
|
||||
a = getAgr det.d cn.g
|
||||
} ;
|
||||
|
||||
-- : PN -> NP ;
|
||||
UsePN pn = pn ** {
|
||||
s = \\c => pn.s ;
|
||||
isPron = False ;
|
||||
sp = pn.s } ;
|
||||
|
||||
-- : Pron -> NP ;
|
||||
UsePron pron = lin NP pron ;
|
||||
|
||||
|
||||
-- : Predet -> NP -> NP ; -- only the man
|
||||
PredetNP predet np = np ** {
|
||||
s = \\c => predet.s ++ np.s ! c ---- ?
|
||||
} ;
|
||||
|
||||
|
||||
-- A noun phrase can also be postmodified by the past participle of a
|
||||
-- verb, by an adverb, or by a relative clause
|
||||
|
||||
|
||||
-- : NP -> V2 -> NP ; -- the man seen
|
||||
-- PPartNP np v2 = np ** {
|
||||
-- s = \\c => v2.s ! ??? ++ np.s ! c } ; ----
|
||||
|
||||
-- : NP -> Adv -> NP ; -- Paris today ; boys, such as ..
|
||||
--AdvNP,ExtAdvNP = \np,adv -> np ** {} ; --adverbs are complicated
|
||||
|
||||
-- : NP -> RS -> NP ; -- Paris, which is here
|
||||
-- RelNP np rs = np ** { s = \\c => rs.s ! np.agr ++ np.s ! c } ;
|
||||
|
||||
-- Determiners can form noun phrases directly.
|
||||
|
||||
-- : Det -> NP ;
|
||||
DetNP det = {
|
||||
s = det.sp ! Masc ; ---- Any way to decide for gender here?
|
||||
a = getAgr det.d Masc ;
|
||||
isPron = False ; sp = []
|
||||
} ;
|
||||
|
||||
-- MassNP : CN -> NP ;
|
||||
MassNP cn = useN cn ** {
|
||||
s = table { Nom => cn.s ! IndefNom ++ cn.mod ! Sg ! Nom ;
|
||||
Abs => cn.s ! Indef Sg ++ cn.mod ! Sg ! Abs }
|
||||
} ;
|
||||
|
||||
|
||||
--2 Determiners
|
||||
|
||||
-- The determiner has a fine-grained structure, in which a 'nucleus'
|
||||
-- quantifier and an optional numeral can be discerned.
|
||||
|
||||
-- : Quant -> Num -> Det ;
|
||||
-- DetQuant quant num = quant **
|
||||
-- { } ;
|
||||
|
||||
-- : Quant -> Num -> Ord -> Det ; -- these five best
|
||||
-- DetQuantOrd quant num ord =
|
||||
-- let theseFive = DetQuant quant num
|
||||
-- in theseFive ** { s = \\c,ph => theseFive.s ! c ! ph ++ ord.s } ; --TODO: dummy implementation
|
||||
|
||||
-- Whether the resulting determiner is singular or plural depends on the
|
||||
-- cardinal.
|
||||
|
||||
-- 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 inherent number.
|
||||
{-
|
||||
NumSg = { s = [] ; n = Sg ; isNum = False } ;
|
||||
NumPl = { s = [] ; n = Pl ; isNum = False } ;
|
||||
|
||||
-- : Card -> Num ;
|
||||
NumCard card = (card ** { isNum = True }) ;
|
||||
|
||||
-- : Digits -> Card ;
|
||||
NumDigits dig = { s = dig.s ! NCard ; n = dig.n } ;
|
||||
|
||||
-- : Numeral -> Card ;
|
||||
NumNumeral num = num ;
|
||||
|
||||
-- : AdN -> Card -> Card ;
|
||||
AdNum adn card = card ** { s = adn.s ++ card.s } ;
|
||||
|
||||
-- : Digits -> Ord ;
|
||||
OrdDigits digs = digs ** { s = digs.s ! NOrd } ;
|
||||
|
||||
-- : Numeral -> Ord ;
|
||||
OrdNumeral num = num ;
|
||||
|
||||
-- : A -> Ord ;
|
||||
OrdSuperl a = { } ; -- why force Sg?
|
||||
|
||||
-- One can combine a numeral and a superlative.
|
||||
|
||||
-- : Numeral -> A -> Ord ; -- third largest
|
||||
OrdNumeralSuperl num a = num ** { } ;
|
||||
|
||||
-- : Quant
|
||||
DefArt = { } ;
|
||||
-- : Quant
|
||||
IndefArt = { s = artDef ;
|
||||
indep = False ;
|
||||
pref = [] ;
|
||||
isDef = False } ; --has suffix, but turns into partitive in negative!
|
||||
|
||||
-- : Pron -> Quant
|
||||
PossPron pron = { s = artDef ;
|
||||
indep = True ;
|
||||
pref = pron.s ! Gen ;
|
||||
isDef = True } ;
|
||||
-}
|
||||
--2 Common nouns
|
||||
|
||||
-- : N -> CN
|
||||
-- : N2 -> CN ;
|
||||
UseN,UseN2 = ResSom.useN ;
|
||||
|
||||
{-
|
||||
-- : N2 -> NP -> CN ; -- mother of the king
|
||||
ComplN2 n2 np =
|
||||
let compl = applyPost n2.compl1 np ;
|
||||
in useN n2 ** { s = \\agr => compl ++ n2.s } ;
|
||||
|
||||
-- : N3 -> NP -> N2 ; -- distance from this city (to Paris)
|
||||
ComplN3 n3 np =
|
||||
let compl = applyPost n3.c3 np ;
|
||||
in n3 ** {s = compl ++ n3.s } ;
|
||||
-}
|
||||
|
||||
-- : N3 -> N2 ; -- distance (from this city)
|
||||
Use2N3 n3 = lin N2 n3 ** { c2 = n3.c3 } ;
|
||||
|
||||
-- : N3 -> N2 ; -- distance (to Paris)
|
||||
Use3N3 n3 = lin N2 n3 ;
|
||||
-- : AP -> CN -> CN
|
||||
AdjCN ap cn = cn ** {
|
||||
s = table { IndefNom => cn.s ! Indef Sg ; -- When an adjective is added, noun loses case marker.
|
||||
x => cn.s ! x } ;
|
||||
mod = \\n,c => cn.mod ! n ! Abs -- If there was something before, it is now in Abs
|
||||
++ ap.s ! AF n c ;
|
||||
hasMod = True
|
||||
} ;
|
||||
|
||||
{-
|
||||
-- : CN -> RS -> CN ;
|
||||
RelCN cn rs = cn ** { } ;
|
||||
|
||||
|
||||
-- : CN -> Adv -> CN ;
|
||||
AdvCN cn adv = cn ** { } ;
|
||||
|
||||
-- Nouns can also be modified by embedded sentences and questions.
|
||||
-- For some nouns this makes little sense, but we leave this for applications
|
||||
-- to decide. Sentential complements are defined in VerbSom.
|
||||
|
||||
-- : CN -> SC -> CN ; -- question where she sleeps
|
||||
SentCN cn sc = cn ** { } ;
|
||||
|
||||
|
||||
--2 Apposition
|
||||
|
||||
-- This is certainly overgenerating.
|
||||
|
||||
-- : CN -> NP -> CN ; -- city Paris (, numbers x and y)
|
||||
ApposCN cn np = cn ** { s = } ;
|
||||
|
||||
|
||||
--2 Possessive and partitive constructs
|
||||
|
||||
-- : PossNP : CN -> NP -> CN ;
|
||||
PossNP cn np = cn ** { } ;
|
||||
|
||||
-- : CN -> NP -> CN ; -- glass of wine / two kilos of red apples
|
||||
PartNP cn np = cn ** { } ;
|
||||
|
||||
|
||||
|
||||
-- This is different from the partitive, as shown by many languages.
|
||||
|
||||
-- : Det -> NP -> NP ;
|
||||
CountNP det np = np **
|
||||
{ } ; -- Nonsense for DefArt or IndefArt
|
||||
|
||||
--3 Conjoinable determiners and ones with adjectives
|
||||
|
||||
-- : DAP -> AP -> DAP ; -- the large (one)
|
||||
AdjDAP dap ap = dap ** { } ;
|
||||
|
||||
-- : Det -> DAP ; -- this (or that)
|
||||
DetDAP det = det ;
|
||||
-}
|
||||
}
|
||||
117
src/somali/NumeralSom.gf
Normal file
117
src/somali/NumeralSom.gf
Normal file
@@ -0,0 +1,117 @@
|
||||
concrete NumeralSom of Numeral = CatSom [Numeral,Digits] **
|
||||
open Prelude, ResSom in {
|
||||
|
||||
oper LinDigit : Type = { s : DForm => Str ;
|
||||
n : Number ;
|
||||
even20 : Even20 } ;
|
||||
|
||||
oper mk20Ten : Str -> Str -> Str -> Str -> LinDigit = \tri,t,fiche,h ->
|
||||
{ s = table { Unit => tri ;
|
||||
Teen => t ;
|
||||
Twenty => fiche ;
|
||||
Hund => h + "TODO"} ;
|
||||
even20 = Ten ;
|
||||
n = Pl } ;
|
||||
|
||||
oper mkeven20 : Str -> Str -> Str -> Str -> LinDigit = \se,t,trifichid,h ->
|
||||
{ s = table { Unit => se ;
|
||||
Teen => t ;
|
||||
Twenty => trifichid ;
|
||||
Hund => h + "TODO" } ;
|
||||
even20 = Even ;
|
||||
n = Pl } ;
|
||||
|
||||
param Even20 = Ten | Even ;
|
||||
param DForm = Unit | Teen | Twenty | Hund ;
|
||||
|
||||
--lincat Numeral = {s : Str} ;
|
||||
lincat Digit = LinDigit ;
|
||||
lincat Sub10 = LinDigit ;
|
||||
lincat Sub100 = {s : Str ; n : Number } ;
|
||||
lincat Sub1000 = {s : Str ; n : Number ; isHundred : Bool } ;
|
||||
lincat Sub1000000 = {s : Str ; n : Number } ;
|
||||
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
|
||||
-- num : Sub1000000 -> Numeral ;
|
||||
lin num x0 = lin Numeral x0 ;
|
||||
|
||||
lin n2 = mkeven20 "TODO" "TODO" "TODO" "TODO" ;
|
||||
lin n3 = mk20Ten "TODO" "TODO" "TODO" "TODO";
|
||||
lin n4 = mkeven20 "TODO" "TODO" "TODO" "TODO";
|
||||
lin n5 = mk20Ten "TODO" "TODO" "TODO" "TODO";
|
||||
lin n6 = mkeven20 "TODO" "TODO" "TODO" "TODO" ;
|
||||
lin n7 = mk20Ten "TODO" "TODO" "TODO" "TODO" ;
|
||||
lin n8 = mkeven20 "TODO" "TODO" "TODO" "TODO" ;
|
||||
lin n9 = mk20Ten "TODO" "TODO" "TODO" "TODO" ;
|
||||
|
||||
lin pot01 =
|
||||
{s = table {Unit => "TODO" ; Hund => "TODO" ; _ => []} ; even20 = Ten ; n = Sg };
|
||||
lin pot0 d = d ;
|
||||
lin pot110 = {s = "TODO" ; n = Pl} ;
|
||||
lin pot111 = {s = variants {"TODO" ; "TODO"} ; n = Pl} ;
|
||||
lin pot1to19 d = {s = d.s ! Teen ; n = Pl} ;
|
||||
lin pot0as1 n = {s = n.s ! Unit ; n = n.n} ;
|
||||
lin pot1 d =
|
||||
{s = case d.even20 of {
|
||||
Even => d.s ! Twenty ;
|
||||
Ten => glue (d.s ! Twenty) "TODO" } ;
|
||||
n = Pl} ;
|
||||
lin pot1plus d e =
|
||||
{s = case d.even20 of {
|
||||
Even => d.s ! Twenty ++ "TODO" ++ e.s ! Unit ;
|
||||
Ten => d.s ! Twenty ++ "TODO" ++ e.s ! Teen } ;
|
||||
n = Pl} ;
|
||||
|
||||
lin pot1as2 n = n ** { isHundred = False } ;
|
||||
lin pot2 d = {s = d.s ! Hund ; n = Pl ; isHundred = True } ;
|
||||
lin pot2plus d e =
|
||||
{ s = d.s ! Hund ++ "TODO" ++ e.s ;
|
||||
n = Pl ;
|
||||
isHundred = True } ;
|
||||
lin pot2as3 n = n ;
|
||||
lin pot3 n =
|
||||
{s = table {Sg => [] ; Pl => n.s } ! n.n ++ "TODO" ;
|
||||
n = n.n } ;
|
||||
|
||||
|
||||
lin pot3plus n m =
|
||||
let ta = if_then_Str m.isHundred [] "TODO" ; --no `ta' between 1000 and 100
|
||||
in
|
||||
{ s = table {Sg => [] ; Pl => n.s } ! n.n ++ "TODO" ++ ta ++ m.s ;
|
||||
n = n.n } ;
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
lincat Dig = TDigit ;
|
||||
|
||||
oper
|
||||
TDigit : Type = { s : CardOrd => Str ; n : Number } ;
|
||||
mkDig : Str -> TDigit = \c -> mk2Dig c Pl ;
|
||||
|
||||
mk2Dig : Str -> Number -> TDigit = \c,num ->
|
||||
{ s = table { NCard => c ;
|
||||
NOrd => c + "TODO" } ;
|
||||
n = num } ;
|
||||
|
||||
|
||||
|
||||
lin D_0 = mkDig "0" ;
|
||||
lin D_1 = mk2Dig "1" Sg ;
|
||||
lin D_2 = mkDig "2" ;
|
||||
lin D_3 = mkDig "3" ;
|
||||
lin D_4 = mkDig "4" ;
|
||||
lin D_5 = mkDig "5" ;
|
||||
lin D_6 = mkDig "6" ;
|
||||
lin D_7 = mkDig "7" ;
|
||||
lin D_8 = mkDig "8" ;
|
||||
lin D_9 = mkDig "9" ;
|
||||
|
||||
-- : Dig -> Digits ;
|
||||
lin IDig dig = dig ;
|
||||
-- : Dig -> Digits -> Digits ;
|
||||
lin IIDig dig digs = digs ** {s = \\co => glue (dig.s ! co) (digs.s ! co) } ;
|
||||
|
||||
}
|
||||
183
src/somali/ParadigmsSom.gf
Normal file
183
src/somali/ParadigmsSom.gf
Normal file
@@ -0,0 +1,183 @@
|
||||
resource ParadigmsSom = open CatSom, ResSom, Prelude in {
|
||||
|
||||
oper
|
||||
|
||||
--2 Parameters
|
||||
--
|
||||
-- To abstract over number, valency and (some) case names,
|
||||
-- we define the following identifiers. The application programmer
|
||||
-- should always use these constants instead of the constructors
|
||||
-- defined in $ResSom$.
|
||||
Number : Type ;
|
||||
sg : Number ;
|
||||
pl : Number ;
|
||||
|
||||
Case : Type ;
|
||||
absolutive : Case ;
|
||||
nominative : Case ;
|
||||
|
||||
Agr : Type ;
|
||||
sgFem : Agr ;
|
||||
sgMasc : Agr ;
|
||||
plAgr : Agr ;
|
||||
|
||||
Gender : Type ;
|
||||
masc : Gender ;
|
||||
fem : Gender ;
|
||||
|
||||
Preposition : Type ;
|
||||
ka : Preposition ;
|
||||
ku : Preposition ;
|
||||
la : Preposition ;
|
||||
u : Preposition ;
|
||||
|
||||
|
||||
--2 Nouns
|
||||
|
||||
mkN : overload {
|
||||
mkN : (bisad : Str) -> N ; -- Predictable nouns
|
||||
mkN : (shimbir : Str) -> (fem : Gender) -> N ; -- Unpredictable gender
|
||||
mkN : (maalin,maalmo : Str) -> Gender -> N ; -- Consonant cluster in stem
|
||||
--mkN : N -> Gender -> N ; -- Otherwise predictable but not gender (TODO does this even happen?)
|
||||
} ;
|
||||
|
||||
mkPN : overload {
|
||||
mkPN : Str -> PN ; -- Proper noun, default agr. P3 Sg Masc.
|
||||
mkPN : Str -> Agr -> PN -- Proper noun, another agr.
|
||||
} ;
|
||||
|
||||
--2 Adjectives
|
||||
|
||||
mkA : overload {
|
||||
mkA : (yar : Str) -> A ;
|
||||
mkA : (sg,pl : Str) -> A
|
||||
} ;
|
||||
|
||||
-- mkA2 : Str -> Prep -> A2 ;
|
||||
|
||||
--2 Verbs
|
||||
|
||||
-- Verbs
|
||||
mkV : overload {
|
||||
mkV : (imp : Str) -> V ; -- Predictable verb: imperative form as argument
|
||||
mkV : (imp,sg1,pl2 : Str) -> V ; -- Less predictable verb: imperative, 1st person singular and 2nd person plural
|
||||
mkV : Str -> V -> V -- Add a prefix to an existing verb, e.g. u baahan+ahay
|
||||
} ;
|
||||
|
||||
copula : V ; -- The copula verb 'ahay'
|
||||
|
||||
mkV2 : overload {
|
||||
mkV2 : (sug : Str) -> V2 ; -- Predictable verb: imperative form, no preposition
|
||||
mkV2 : (sug : Str) -> (_ku : Preposition) -> V2 ; -- Regular verb, imperative and preposition
|
||||
mkV2 : V -> Preposition -> V2 ; -- Already constructed verb with preposition
|
||||
} ;
|
||||
|
||||
-- TODO: actual constructors
|
||||
-- mkVA : Str -> VA = \s -> lin VA (mkVerb s) ;
|
||||
--
|
||||
-- mkV2A : Str -> V2A = \s -> lin V2A (mkVerb s) ;
|
||||
-- mkVQ : Str -> VQ = \s -> lin VQ (mkVerb s) ;
|
||||
-- mkVS : Str -> VS = \s -> lin VS (mkVerb s) ;
|
||||
--
|
||||
-- mkV2V : Str -> V2V = \s -> lin V2V (mkVerb s) ;
|
||||
-- mkV2S : Str -> V2S = \s -> lin V2S (mkVerb s) ;
|
||||
-- mkV2Q : Str -> V2Q = \s -> lin V2Q (mkVerb s) ;
|
||||
-- mkV3 : Str -> V3 = \s -> lin V3 (mkVerb s) ;
|
||||
|
||||
|
||||
-----
|
||||
|
||||
--2 Structural categories
|
||||
|
||||
mkPrep = overload {
|
||||
mkPrep : Str -> CatSom.Prep = \s ->
|
||||
lin Prep (ResSom.mkPrep s s s s s s) ;
|
||||
mkPrep : (x1,_,_,_,_,x6 : Str) -> CatSom.Prep = \a,b,c,d,e,f ->
|
||||
lin Prep (ResSom.mkPrep a b c d e f) ;
|
||||
mkPrep : Preposition -> CatSom.Prep = \p ->
|
||||
lin Prep (prepTable ! p) ;
|
||||
} ;
|
||||
|
||||
-- mkConj : (_,_ : Str) -> Number -> Conj = \s1,s2,num ->
|
||||
-- lin Conj { s = s1 ; s2 = s2 } ;
|
||||
|
||||
-- mkSubj : Str -> Bool -> Subj = \s,b ->
|
||||
-- lin Subj { } ;
|
||||
|
||||
mkAdv : Str -> Adv = \s -> lin Adv {s = s ; s2 = []} ;
|
||||
|
||||
mkAdV : Str -> AdV = \s -> lin AdV {s = s} ;
|
||||
|
||||
mkAdA : Str -> AdA = \s -> lin AdA {s = s} ;
|
||||
|
||||
|
||||
--.
|
||||
-------------------------------------------------------------------------------
|
||||
-- The definitions should not bother the user of the API. So they are
|
||||
-- hidden from the document.
|
||||
|
||||
Number = ResSom.Number ;
|
||||
sg = Sg ;
|
||||
pl = Pl ;
|
||||
|
||||
Case = ResSom.Case ;
|
||||
absolutive = Abs ;
|
||||
nominative = Nom ;
|
||||
|
||||
Agr = ResSom.Agreement ;
|
||||
sgFem = Sg3 Fem ;
|
||||
sgMasc = Sg3 Masc ;
|
||||
plAgr = Pl3 ;
|
||||
|
||||
Gender = ResSom.Gender ;
|
||||
masc = Masc ;
|
||||
fem = Fem ;
|
||||
|
||||
Preposition = ResSom.Preposition ;
|
||||
ka = ResSom.ka ;
|
||||
ku = ResSom.ku ;
|
||||
la = ResSom.la ;
|
||||
u = ResSom.u ;
|
||||
------------------------
|
||||
|
||||
mkN = overload {
|
||||
mkN : Str -> N = \s -> lin N (mkN1 s) ;
|
||||
mkN : Str -> Gender -> N = \s,g -> lin N (mkNg s g) ;
|
||||
mkN : (_,_ : Str) -> Gender -> N = \s,t,g -> lin N (nMaalin s t g) ;
|
||||
--mkN : N -> Gender -> N = \n,g -> n ** {g = g }
|
||||
} ;
|
||||
|
||||
mkPN = overload {
|
||||
mkPN : Str -> PN = \s -> lin PN (mkPNoun s sgMasc) ;
|
||||
mkPN : Str -> Agr -> PN = \s,a -> lin PN (mkPNoun s a)
|
||||
} ;
|
||||
|
||||
mkA = overload {
|
||||
mkA : (yar : Str) -> A = \s -> lin A (duplA s) ;
|
||||
mkA : (sg,pl : Str) -> A = \s,p -> lin A (mkAdj s p)
|
||||
} ;
|
||||
|
||||
mkV = overload {
|
||||
mkV : (imp : Str) -> V = \v -> lin V (regV v) ;
|
||||
mkV : (imp,pl2,sg1 : Str) -> V = \i,p,s -> lin V (mkVerb i p s) ;
|
||||
mkV : Str -> V -> V = \s,v -> lin V (prefixV s v)
|
||||
} ;
|
||||
|
||||
copula = ResSom.copula ;
|
||||
|
||||
regV : Str -> Verb = \s -> case s of {
|
||||
-- _ + g@#c + s@#c + "o" => cJoogso s ;
|
||||
_ + "o" => cQaado s ; ----
|
||||
_ + "i" => cKari s ;
|
||||
_ + "ee" => cYaree s ;
|
||||
_ => cSug s
|
||||
} ;
|
||||
|
||||
mkV2 = overload {
|
||||
mkV2 : Str -> V2 = \s -> lin V2 (regV s ** {c2 = noPrep}) ;
|
||||
mkV2 : Str -> Preposition -> V2 = \s,p -> lin V2 (regV s ** {c2 = p}) ;
|
||||
mkV2 : V -> Preposition -> V2 = \v,p -> lin V2 (v ** {c2 = p}) ;
|
||||
} ;
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
}
|
||||
142
src/somali/ParamSom.gf
Normal file
142
src/somali/ParamSom.gf
Normal file
@@ -0,0 +1,142 @@
|
||||
resource ParamSom = ParamX ** open Prelude in {
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- Phonology
|
||||
|
||||
oper
|
||||
--TODO: make patterns actually adjusted to Somali
|
||||
v : pattern Str = #("a" | "e" | "i" | "o" | "u") ;
|
||||
vstar : pattern Str = #("a" | "e" | "i" | "o" | "u" | "y" | "w") ; -- semivowels included
|
||||
vv : pattern Str = #("aa" | "ee" | "ii" | "oo" | "uu") ;
|
||||
c : pattern Str = #("m"|"n"|"p"|"b"|"t"|"d"|"k"|"g"|"f"|"v"
|
||||
|"s"|"h"|"l"|"j"|"r"|"z"|"c"|"q"|"y"|"w");
|
||||
lmnr : pattern Str = #("l" | "m" | "n" | "r") ;
|
||||
kpt : pattern Str = #("k" | "p" | "t") ;
|
||||
gbd : pattern Str = #("g" | "b" | "d") ;
|
||||
|
||||
voiced : Str -> Str = \s -> case s of {
|
||||
"k" => "g" ;
|
||||
"t" => "d" ;
|
||||
"p" => "b" ;
|
||||
_ => s } ;
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- Morphophonology
|
||||
|
||||
param
|
||||
Morpheme = mO | mKa | mTa ;
|
||||
|
||||
oper
|
||||
allomorph : Morpheme -> Str -> Str = \x,stem ->
|
||||
case x of {
|
||||
mO => case last stem of {
|
||||
d@("b"|"d"|"r"|"l"|"m"|"n") => d + "o" ;
|
||||
"c"|"g"|"i"|"j"|"x"|"s" => "yo" ;
|
||||
_ => "o" } ;
|
||||
|
||||
-- Based on the table on page 21--TODO find generalisations in patterns
|
||||
mTa => case stem of {
|
||||
_ + ("dh") => "a" ; ---- ??? just guessing
|
||||
_ + ("d"|"c"|"h"|"x"|"q"|"'"|"i"|"y"|"w") => "da" ;
|
||||
_ + "l" => "sha" ;
|
||||
_ => "ta" } ;
|
||||
|
||||
mKa => case stem of {
|
||||
_ + ("g"|"aa"|"i"|"y"|"w") => "ga" ;
|
||||
_ + ("c"|"h"|"x"|"q"|"'") => "a" ;
|
||||
_ + ("e"|"o") => "ha" ;
|
||||
_ => "ka" }
|
||||
} ;
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- Nouns
|
||||
|
||||
param
|
||||
Case = Nom | Abs ;
|
||||
Gender = Masc | Fem ;
|
||||
Vowel = vA | vE | vI | vO | vU ; -- For vowel assimilation
|
||||
|
||||
Inclusion = Excl | Incl ;
|
||||
Agreement =
|
||||
Sg1
|
||||
| Sg2
|
||||
| Sg3 Gender
|
||||
| Pl1 Inclusion
|
||||
| Pl2
|
||||
| Pl3
|
||||
| Impers ; -- Verb agrees with Sg3, but needed for preposition contraction
|
||||
|
||||
NForm =
|
||||
Indef Number
|
||||
| Def Number Vowel -- Stems for definite and determinative suffixes
|
||||
| Numerative -- When modified by a number (only distinct for some feminine nouns)
|
||||
| IndefNom ; -- Special form, only fem. nouns ending in consonant
|
||||
|
||||
|
||||
oper
|
||||
getAgr : NForm -> Gender -> Agreement = \n,g ->
|
||||
case n of { Indef Pl|Def Pl _ => Pl3 ;
|
||||
_ => Sg3 g } ;
|
||||
getNum : Agreement -> Number = \a ->
|
||||
case a of { Sg1|Sg2|Sg3 _ => Sg ; _ => Pl } ;
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- Adjectives
|
||||
|
||||
param
|
||||
AForm = AF Number Case ; ---- TODO: past tense
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- Numerals
|
||||
|
||||
-- TODO: is this necessary?
|
||||
param
|
||||
CardOrd = NCard | NOrd ;
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- Prepositions
|
||||
|
||||
param
|
||||
Preposition = u | ku | ka | la | noPrep ;
|
||||
PrepCombination = ugu | uga | ula | kaga | kula | kala
|
||||
| Single Preposition ;
|
||||
|
||||
oper
|
||||
combine : Preposition -> Preposition -> PrepCombination = \p1,p2 ->
|
||||
let oneWay : Preposition => Preposition => PrepCombination =
|
||||
\\x,y => case <x,y> of {
|
||||
<u,u|ku> => ugu ;
|
||||
<u,ka> => uga ;
|
||||
<u,la> => ula ;
|
||||
<ku|ka,
|
||||
ku|ka> => kaga ;
|
||||
<ku,la> => kula ;
|
||||
<ka,la> => kala ;
|
||||
<noPrep,p> => Single p ;
|
||||
<p,noPrep> => Single p ;
|
||||
<p,_> => Single p } -- for trying both ways
|
||||
in case oneWay ! p2 ! p1 of {
|
||||
Single _ => oneWay ! p1 ! p2 ;
|
||||
x => x } ;
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- Verbs
|
||||
|
||||
param
|
||||
VForm =
|
||||
VInf
|
||||
| VPres Agreement Polarity
|
||||
| VNegPast
|
||||
| VPast Agreement
|
||||
| VRel -- "som är/har/…" TODO is this used in other verbs?
|
||||
| VImp Number Polarity ; -- TODO negation
|
||||
|
||||
oper
|
||||
if_then_Pol : Polarity -> Str -> Str -> Str = \p,t,f ->
|
||||
case p of {Pos => t ; Neg => f } ;
|
||||
|
||||
-- TODO:
|
||||
-- tre aspekter (enkel, progressiv, habituell),
|
||||
-- fem modus (indikativ, imperativ, konjunktiv, kontiditonalis, optativ)
|
||||
}
|
||||
31
src/somali/PhraseSom.gf
Normal file
31
src/somali/PhraseSom.gf
Normal file
@@ -0,0 +1,31 @@
|
||||
concrete PhraseSom of Phrase = CatSom ** open Prelude, ResSom in {
|
||||
|
||||
lin
|
||||
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
|
||||
|
||||
UttS s = s ;
|
||||
-- UttQS qs = qs ;
|
||||
|
||||
UttImpSg pol imp =
|
||||
let ma = case pol.p of { Pos => [] ; Neg => "ma" }
|
||||
in { s = ma ++ imp.s } ;
|
||||
UttImpPl = UttImpSg ;
|
||||
UttImpPol = UttImpSg ;
|
||||
|
||||
UttIP ip = { s = ip.s ! Abs} ;
|
||||
UttIAdv iadv = iadv ;
|
||||
UttNP np = { s = np.s ! Abs} ;
|
||||
UttVP vp = { s = linVP vp } ;
|
||||
UttAdv adv = adv ;
|
||||
UttCN n = {s = linCN n } ;
|
||||
UttCard n = n ;
|
||||
UttAP ap = { s = ap.s ! AF Sg Abs } ;
|
||||
UttInterj i = i ;
|
||||
|
||||
NoPConj = {s = []} ;
|
||||
PConjConj conj = { s = conj.s1 ++ conj.s2 } ;
|
||||
|
||||
NoVoc = {s = []} ;
|
||||
VocNP np = { s = "," ++ np.s ! Abs } ; --TODO: vocative exists
|
||||
|
||||
}
|
||||
74
src/somali/QuestionSom.gf
Normal file
74
src/somali/QuestionSom.gf
Normal file
@@ -0,0 +1,74 @@
|
||||
concrete QuestionSom of Question = CatSom ** open
|
||||
ResSom, (VS=VerbSom), (NS=NounSom), (AS=AdverbSom) in {
|
||||
|
||||
-- A question can be formed from a clause ('yes-no question') or
|
||||
-- with an interrogative.
|
||||
|
||||
lin
|
||||
-- : Cl -> QCl ;
|
||||
-- QuestCl cl = ;
|
||||
|
||||
-- : IP -> VP -> QCl ;
|
||||
-- QuestVP ip vp = ;
|
||||
|
||||
-- : IP -> ClSlash -> QCl ; -- whom does John love
|
||||
--QuestSlash ip cls = ;
|
||||
|
||||
-- : IAdv -> Cl -> QCl ; -- why does John walk
|
||||
-- QuestIAdv iadv cl = { } ;
|
||||
|
||||
-- : IComp -> NP -> QCl ; -- where is John?
|
||||
-- QuestIComp icomp np = ;
|
||||
|
||||
-- Interrogative pronouns can be formed with interrogative
|
||||
-- determiners, with or without a noun.
|
||||
|
||||
-- : IDet -> CN -> IP ; -- which five songs
|
||||
IdetCN = NS.DetCN ;
|
||||
|
||||
-- : IDet -> IP ; -- which five
|
||||
IdetIP = NS.DetNP ;
|
||||
|
||||
-- They can be modified with adverbs.
|
||||
-- : IP -> Adv -> IP ; -- who in Paris
|
||||
--AdvIP = NS.AdvNP ;
|
||||
|
||||
-- Interrogative quantifiers have number forms and can take number modifiers.
|
||||
|
||||
-- : IQuant -> Num -> IDet ; -- which (five)
|
||||
--IdetQuant = NS.DetQuant ;
|
||||
|
||||
-- Interrogative adverbs can be formed prepositionally.
|
||||
-- : Prep -> IP -> IAdv ; -- with whom
|
||||
PrepIP = AS.PrepNP ;
|
||||
|
||||
-- They can be modified with other adverbs.
|
||||
|
||||
-- : IAdv -> Adv -> IAdv ; -- where in Paris
|
||||
AdvIAdv = AS.AdAdv ;
|
||||
|
||||
-- Interrogative complements to copulas can be both adverbs and
|
||||
-- pronouns.
|
||||
|
||||
-- : IAdv -> IComp ;
|
||||
CompIAdv iadv = iadv ; -- where (is it)
|
||||
|
||||
-- : IP -> IComp ;
|
||||
CompIP ip = { s = ip.s ! Abs } ; -- who (is it)
|
||||
|
||||
{-
|
||||
-- More $IP$, $IDet$, and $IAdv$ are defined in $Structural$.
|
||||
|
||||
-- Wh questions with two or more question words require a new, special category.
|
||||
|
||||
cat
|
||||
QVP ; -- buy what where
|
||||
fun
|
||||
ComplSlashIP : VPSlash -> IP -> QVP ; -- buys what
|
||||
AdvQVP : VP -> IAdv -> QVP ; -- lives where
|
||||
AddAdvQVP : QVP -> IAdv -> QVP ; -- buys what where
|
||||
|
||||
QuestQVP : IP -> QVP -> QCl ; -- who buys what where
|
||||
-}
|
||||
|
||||
}
|
||||
30
src/somali/RelativeSom.gf
Normal file
30
src/somali/RelativeSom.gf
Normal file
@@ -0,0 +1,30 @@
|
||||
concrete RelativeSom of Relative = CatSom ** open
|
||||
ResSom, Prelude, (NS=NounSom), (SS=StructuralSom) in {
|
||||
|
||||
{-
|
||||
lin
|
||||
-- : Cl -> RCl ; -- such that John loves her
|
||||
RelCl cl = { } ;
|
||||
|
||||
-- : RP -> VP -> RCl ;
|
||||
RelVP rp vp = ;
|
||||
|
||||
-- : RP -> ClSlash -> RCl ; -- whom John loves
|
||||
RelSlash rp cls = ;
|
||||
|
||||
|
||||
-- : RP ;
|
||||
IdRP = { s = "" } ;
|
||||
|
||||
-- : Prep -> NP -> RP -> RP ; -- the mother of whom
|
||||
FunRP prep np rp = { s = applyPost prep whom ++ np.s ! Abs }
|
||||
where { num = case np.agr of {
|
||||
Sg3 _ => NS.NumSg ;
|
||||
_ => NS.NumPl } ;
|
||||
whom = NS.DetNP (NS.DetQuant SS.which_IQuant num) } ;
|
||||
|
||||
|
||||
|
||||
-}
|
||||
|
||||
}
|
||||
509
src/somali/ResSom.gf
Normal file
509
src/somali/ResSom.gf
Normal file
@@ -0,0 +1,509 @@
|
||||
resource ResSom = ParamSom ** open Prelude, Predef, ParamSom in {
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- Nouns
|
||||
oper
|
||||
|
||||
Noun : Type = {s : NForm => Str ; g : Gender} ;
|
||||
Noun2 : Type = Noun ** {c2 : Preposition} ;
|
||||
Noun3 : Type = Noun2 ** {c3 : Preposition} ;
|
||||
|
||||
CNoun : Type = Noun ** {mod : Number => Case => Str ; hasMod : Bool} ;
|
||||
|
||||
PNoun : Type = {s : Str ; a : Agreement} ;
|
||||
|
||||
mkPNoun : Str -> Agreement -> PNoun = \str,agr -> {s = str ; a = agr} ;
|
||||
|
||||
mkNoun : (x1,_,_,x4 : Str) -> Gender -> Noun = \wiil,wiilka,wiilal,wiilasha,gender ->
|
||||
let bisadi = case gender of
|
||||
{ Fem => case wiil of { _ + #c => wiil+"i" ; _ => wiil} ;
|
||||
Masc => wiil } ;
|
||||
bisadood = case gender of
|
||||
{ Fem => case wiilal of { _ + "o" => wiilal+"od" ; _ => wiil} ;
|
||||
Masc => wiil } ;
|
||||
defStems : Str -> Vowel => Str = \s -> case s of {
|
||||
ilk + "aha" =>
|
||||
table { vA => ilk+"ah" ;
|
||||
vE => ilk+"eh" ;
|
||||
vI => ilk+"ih" ;
|
||||
vO => ilk+"oh" ;
|
||||
vU => ilk+"uh"
|
||||
} ;
|
||||
_ => table { _ => init s }
|
||||
} ;
|
||||
|
||||
in { s = table {
|
||||
Indef Sg => wiil ;
|
||||
Indef Pl => wiilal ;
|
||||
IndefNom => bisadi ;
|
||||
Numerative => bisadood ;
|
||||
Def Sg vow => defStems wiilka ! vow ;
|
||||
Def Pl vow => defStems wiilasha ! vow } ;
|
||||
g = gender } ;
|
||||
|
||||
-------------------------
|
||||
-- Regular noun paradigms
|
||||
nHooyo, nAabbe, nMas, nUl, nGuri, nXayawaan : Str -> Noun ;
|
||||
|
||||
--1) Feminine nouns that end in -o
|
||||
nHooyo hooyo =
|
||||
mkNoun hooyo (init hooyo + "ada") (hooyo + "oyin") (hooyo + "oyinka") Fem ;
|
||||
|
||||
--2) Masculine nouns that end in -e
|
||||
nAabbe aabbe = let aabb = init aabbe in
|
||||
mkNoun aabbe (aabb + "aha") (aabb + "ayaal") (aabb + "ayaasha") Masc ;
|
||||
|
||||
-- 3) Masculine, plural with duplication
|
||||
nMas mas = let s = last mas ;
|
||||
ka = allomorph mKa mas ;
|
||||
ta = allomorph mTa mas ;
|
||||
sha = case ta of {"sha" => ta ; _ => s + ta } in
|
||||
mkNoun mas (mas + ka) (mas + "a" + s) (mas + "a" + sha) Masc ;
|
||||
|
||||
-- 4a) Feminine, plural with ó
|
||||
nUl ul = let o = case last ul of { "i" => "yo" ; _ => "o" } ;
|
||||
u = case last ul of { "l" => init ul ; _ => ul } ;
|
||||
sha = allomorph mTa ul in
|
||||
mkNoun ul (u + sha) (ul + o) (ul + "aha") Fem ;
|
||||
|
||||
-- 4b) Masculine, plural with ó, 2 syllables
|
||||
nGuri guri = let o = allomorph mO guri ;
|
||||
ga = allomorph mKa guri ;
|
||||
gury = case last guri of { -- TODO does this generalise? Or just exception?
|
||||
"i" => init guri + "y" ;
|
||||
_ => guri } in
|
||||
mkNoun guri (guri + ga) (gury + o) (gury + "aha") Masc ;
|
||||
|
||||
-- 4c) Masculine, plural with -ó, 3 syllables or longer
|
||||
nXayawaan x = let ka = allomorph mKa x ;
|
||||
o = allomorph mO x ;
|
||||
xo = x + o in
|
||||
mkNoun x (x + ka) xo (init xo + "ada") Masc ;
|
||||
|
||||
nMaalin : (_,_ : Str) -> Gender -> Noun = \maalin,maalmo,g ->
|
||||
let ta = case g of { Masc => allomorph mKa maalin ;
|
||||
Fem => allomorph mTa maalin } ;
|
||||
aha = case g of { Masc|Fem => "aha" } ; ---- ?
|
||||
in mkNoun maalin (maalin + ta) maalmo (init maalmo + aha) g ;
|
||||
|
||||
-------------------------
|
||||
-- Smart paradigm
|
||||
-- Substantiv som slutar på –o/–ad är så gott som alltid feminina, t.ex. qaáddo sked, bisád katt.
|
||||
-- Substantiv som slutar på –e är så gott som alltid maskulina, t.ex. dúbbe hammare, fúre nyckel.
|
||||
-- För övriga ord säger ordets form dessvärre väldigt lite om ordets genus. Däremot kan betoningens plats i ordet väldigt ofta avslöja ordets genus. Man kan alltså i flesta fall höra vilket genus ett substantiv har.
|
||||
|
||||
mkN1 : Str -> Noun = \n -> case n of {
|
||||
_ + ("ad"|"adh") => nUl n ;
|
||||
_ + "o" => nHooyo n ;
|
||||
_ + "e" => nAabbe n ;
|
||||
_ + "ri" => nGuri n ;
|
||||
(#c + #v + #v + #c) -- One syllable words
|
||||
| (#v + #v + #c)
|
||||
| (#c + #v + #c)
|
||||
| (#v + #c) => nMas n ;
|
||||
_ => nXayawaan n } ;
|
||||
|
||||
mkNg : Str -> Gender -> Noun = \n,g -> case n of {
|
||||
_ + ("r"|"n"|"l"|"g")
|
||||
=> case g of {
|
||||
Fem => nUl n ;
|
||||
Masc => mkN1 n } ;
|
||||
_ => mkN1 n
|
||||
} ; -- TODO: add more exceptional cases
|
||||
|
||||
---------------------------------------------
|
||||
-- NP
|
||||
|
||||
BaseNP : Type = {
|
||||
a : Agreement ;
|
||||
isPron : Bool ;
|
||||
sp : Str } ;
|
||||
|
||||
NounPhrase : Type = BaseNP ** {s : Case => Str} ;
|
||||
|
||||
useN : Noun -> CNoun ** BaseNP = \n -> n **
|
||||
{ mod = \\_,_ => [] ; hasMod = False ;
|
||||
a = Sg3 n.g ; isPron = False ; sp = []
|
||||
} ;
|
||||
--------------------------------------------------------------------------------
|
||||
-- Pronouns
|
||||
-- De somaliska possessiva pronomenen, precis som de svenska, har två olika genusformer i singular och en enda form i plural.
|
||||
-- ägaren då det ägda föremålet är
|
||||
-- m.sg. f.sg.plural
|
||||
-- kayga tayda kuwayga
|
||||
-- kaaga taada kuwaaga
|
||||
-- kiisa tiisa kuwiisa
|
||||
-- keeda teeda kuweeda
|
||||
--
|
||||
-- kaayaga taayada kuwayaga (1 pl. exkl.)
|
||||
-- keenna teenna kuweenna (1 pl. inkl.)
|
||||
-- kiinna tiinna kuwiinna
|
||||
-- kooda tooda kuwooda
|
||||
Pronoun : Type = NounPhrase ;
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- Det, Quant, Card, Ord
|
||||
Quant : Type = SS ; ---- TODO
|
||||
|
||||
Determiner : Type = {
|
||||
s : Case => Str ;
|
||||
sp : Gender => Case => Str ;
|
||||
d : NForm
|
||||
} ;
|
||||
|
||||
mkDeterminer : (x1,_,x3 : Str) -> NForm -> Determiner = \an,kani,tani,nf ->
|
||||
let ani : Str = case an of { _ + #c => an+"i" ;
|
||||
_ => case nf of { Def _ _ => "u" ;
|
||||
_ => [] }
|
||||
} ;
|
||||
bind : Str -> Str = \x -> case x of { "" => [] ; _ => BIND ++ x } ;
|
||||
in { s = table { Nom => bind ani ; Abs => bind an } ;
|
||||
sp = table { Fem => table { Nom => tani ; Abs => init tani } ;
|
||||
Masc => table { Nom => kani ; Abs => init kani }
|
||||
} ;
|
||||
d = nf
|
||||
} ;
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- Prepositions
|
||||
|
||||
-- Prepositionen u dras obligatoriskt samman med föregående pronomen
|
||||
-- så att /a/ + /u/ > /oo/.
|
||||
|
||||
Prep : Type = {s : Agreement => Str} ;
|
||||
|
||||
mkPrep : (x1,_,_,_,_,x6 : Str) -> Prep = \ku,ii,kuu,noo,idiin,loo -> {
|
||||
s = table {
|
||||
Sg1 => ii ;
|
||||
Sg2 => kuu ;
|
||||
Pl2 => idiin ;
|
||||
Pl1 Excl => noo ;
|
||||
Pl1 Incl => "i" + noo ;
|
||||
Impers => loo ;
|
||||
_ => ku
|
||||
}
|
||||
} ;
|
||||
|
||||
prepTable : Preposition => Prep = table {
|
||||
ku => mkPrep "ku" "igu" "kugu" "nagu" "idinku" "lagu" ;
|
||||
ka => mkPrep "ka" "iga" "kaa" "naga" "idinka" "laga" ;
|
||||
la => mkPrep "la" "ila" "kula" "nala" "idinla" "lala" ;
|
||||
u => mkPrep "u" "ii" "kuu" "noo" "idiin" "loo" ;
|
||||
noPrep => mkPrep [] "i" "ku" "na" "idin" "la"
|
||||
} ;
|
||||
|
||||
prepCombTable : Agreement => PrepCombination => Str = table {
|
||||
Sg1 => table { ugu => "iigu" ; uga => "iiga" ;
|
||||
ula => "iila" ; kaga => "igaga" ;
|
||||
kula => "igula" ; kala => "igala" ;
|
||||
Single p => (prepTable ! p).s ! Sg1 } ;
|
||||
Sg2 => table { ugu => "kuugu" ; uga => "kaaga" ;
|
||||
ula => "kuula" ; kaga => "kaaga" ;
|
||||
kula => "kugula" ; kala => "kaala" ;
|
||||
Single p => (prepTable ! p).s ! Sg2 } ;
|
||||
Pl1 Excl =>
|
||||
table { ugu => "noogu" ; uga => "nooga" ;
|
||||
ula => "noola" ; kaga => "nagaga" ;
|
||||
kula => "nagula" ; kala => "nagala" ;
|
||||
Single p => (prepTable ! p).s ! Pl1 Excl } ;
|
||||
Pl1 Incl =>
|
||||
table { ugu => "inoogu" ; uga => "inooga" ;
|
||||
ula => "inoola" ; kaga => "inagaga" ;
|
||||
kula => "inagula" ; kala => "inagala" ;
|
||||
Single p => (prepTable ! p).s ! Pl1 Incl } ;
|
||||
|
||||
Pl2 => table { ugu => "idiinku" ; uga => "idiinka" ;
|
||||
ula => "idiinla" ; kaga => "idinkaga" ;
|
||||
kula => "idinkula" ; kala => "idinkala" ;
|
||||
Single p => (prepTable ! p).s ! Pl2 } ;
|
||||
Impers =>
|
||||
table { ugu => "loogu" ; uga => "looga" ;
|
||||
ula => "loola" ; kaga => "lagaga" ;
|
||||
kula => "lagula" ; kala => "lagala" ;
|
||||
Single p => (prepTable ! p).s ! Impers } ;
|
||||
--
|
||||
a => table { ugu => "ugu" ; uga => "uga" ;
|
||||
ula => "ula" ; kaga => "kaga" ;
|
||||
kula => "kula" ; kala => "kala" ;
|
||||
Single p => (prepTable ! p).s ! a }
|
||||
} ;
|
||||
|
||||
-- TODO: Negationen má `inte' skrivs samman med en föregående preposition.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- Adjectives
|
||||
|
||||
-- Sequences of adjectives follow the rules for restrictive relatives clauses, i.e. are linked by oo 'and' on an indefinite head NounPhrase and by ee 'and' on a definite NounPhrase (8.1).
|
||||
|
||||
-- Komparativ
|
||||
-- För att uttrycka motsvarigheten till svenskans komparativ placerar man på somaliska helt enkelt prepositionen ká 'från, av, än' framför adjektivet i fråga. Adjektivet får ingen ändelse.
|
||||
-- Shan waa ay ká yar tahay siddéed. Fem är mindre än åtta.
|
||||
-- Superlativ
|
||||
-- Motsvarigheten till svenskans superlativ bildas med prepositionsklustret ugú som till sin betydelse närmast motsvarar svenskans allra, t.ex.
|
||||
-- ugu horrayntii (det att komma) allra först
|
||||
|
||||
Adjective : Type = {s : AForm => Str} ;
|
||||
Adjective2 : Type = Adjective ** { c2 : Preposition } ;
|
||||
|
||||
|
||||
duplA : Str -> Adjective = \yar ->
|
||||
let yaryar = duplicate yar
|
||||
in mkAdj yar yaryar ;
|
||||
|
||||
mkAdj : (str,pl : Str) -> Adjective = \sg,pl -> {
|
||||
s = table {
|
||||
AF Sg Abs => sg ;
|
||||
AF Pl Abs => pl ;
|
||||
AF Sg Nom => sg + "i" ;
|
||||
AF Pl Nom => pl + "i" }
|
||||
} ;
|
||||
|
||||
duplicate : Str -> Str = \sg -> case sg of {
|
||||
-- some hard-coded cases; in general, better to
|
||||
-- use 2-paradigm mkAdj for irregular adjectives.
|
||||
"dheer" => "dhaadheer" ;
|
||||
"weyn" => "waaweyn" ;
|
||||
|
||||
-- general patterns
|
||||
a@#v + d@#c + ? + ? -- 4 letters of form CVXX
|
||||
=> a + d + sg ; -- ad+adag
|
||||
g@#c + aa@#vv + _
|
||||
=> g + aa + sg ; -- gaa+gaaban
|
||||
y@#c + a@#v + r@#c + _
|
||||
=> y + a + r + sg ; -- yar+yar ; fud+fudud
|
||||
d@#c + h@#c + uu@#vv + _
|
||||
=> d + h + uu + sg ; -- dhuu+dhuuban
|
||||
q@#c + a@#v + y@#vstar + b@#c + _
|
||||
=> q + a + y + b + sg ; --qayb+qaybsan, fiic+fiican
|
||||
_ => sg + sg } ;
|
||||
|
||||
AdjPhrase : Type = Adjective ;
|
||||
--------------------------------------------------------------------------------
|
||||
-- Verbs
|
||||
|
||||
Verb : Type = {s : VForm => Str} ;
|
||||
Verb2 : Type = Verb ** {c2 : Preposition} ;
|
||||
Verb3 : Type = Verb2 ** {c3 : Preposition} ;
|
||||
|
||||
-- Saeed page 79:
|
||||
-- "… the reference form is the imperative singular form
|
||||
-- since it corresponds to the form of the basic root."
|
||||
mkVerb : (imperative,sg1,pl2 : Str) -> Verb = \qaado,qaat,ark ->
|
||||
let stems : {p1 : Str ; p2 : Str} = case ark of {
|
||||
a + r@#c + k@#c -- two consonants need a vowel in between
|
||||
=> <ark + "i", a + r + a + voiced k> ;
|
||||
_ + #c -- if the pl2 root ends in consonant, infinitive needs a vowel
|
||||
=> <ark + "i", ark> ;
|
||||
yar + "ee" -- double e turns into ey
|
||||
=> <ark + "n", yar + "ey"> ;
|
||||
_ => <ark + "n", ark> -- no changes, just add n for infinitive
|
||||
} ;
|
||||
arki = stems.p1 ;
|
||||
arag = stems.p2 ;
|
||||
arkin = case last arki of { -- The negative past tense ends in n:
|
||||
"n" => arki ; -- if infinitive ends in n, no change;
|
||||
_ => arki + "n" } ; -- otherwise add n.
|
||||
|
||||
-- Some predictable sound changes
|
||||
t : Str = case arag of { -- kari+seen, noq+deen, (sug|joogsa|qaada)+teen,
|
||||
_ + ("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
|
||||
_ => "t" } ;
|
||||
ay : Str = case ark of {
|
||||
_ + ("i"|"e") => "ey" ;
|
||||
_ => "ay" } ;
|
||||
n : Str = case arag of {
|
||||
_ + #v => "nn" ; -- n duplicates after vowel
|
||||
_ => "n" } ;
|
||||
an : Str = case qaado of {
|
||||
_ + "o" => "an" ; -- Allomorph for imperatives
|
||||
_ => "in" } ;
|
||||
in { s = table {
|
||||
VPres (Sg1|Sg3 Masc|Impers) pol
|
||||
=> qaat + if_then_Pol pol "aa" "o" ;
|
||||
VPres (Sg2|Sg3 Fem) pol
|
||||
=> arag + t + if_then_Pol pol "aa" "o" ;
|
||||
VPres (Pl1 _) pol
|
||||
=> arag + n + if_then_Pol pol "aa" "o" ;
|
||||
VPres Pl2 pol => arag + t + "aan" ;
|
||||
VPres Pl3 pol => qaat + "aan" ;
|
||||
|
||||
VPast (Sg1|Sg3 Masc|Impers)
|
||||
=> qaat + ay ;
|
||||
VPast (Sg2|Sg3 Fem)
|
||||
=> arag + t + ay ; -- t, d or s
|
||||
VPast (Pl1 _) => arag + n + ay ;
|
||||
VPast Pl2 => arag + t + "een" ; -- t, d or s
|
||||
VPast Pl3 => qaat + "een" ;
|
||||
|
||||
VImp Sg Pos => qaado ;
|
||||
VImp Pl Pos => qaat + "a" ;
|
||||
VImp Sg Neg => arag + an ;
|
||||
VImp Pl Neg => qaat + "ina" ;
|
||||
|
||||
VInf => arki ;
|
||||
VRel => arki ; -- TODO does this exist?
|
||||
VNegPast => arkin }
|
||||
} ;
|
||||
|
||||
-------------------------
|
||||
-- Regular verb paradigms
|
||||
|
||||
cSug, cKari, cYaree, cJoogso, cQaado : Str -> Verb ;
|
||||
|
||||
cSug sug =
|
||||
let cabb : Str = case sug of {
|
||||
_ + "b" => sug + "b" ; -- TODO: more duplication patterns
|
||||
_ => sug }
|
||||
in mkVerb sug cabb sug ;
|
||||
|
||||
cKari, cYaree = \kari -> mkVerb kari (kari+"y") kari ;
|
||||
|
||||
cJoogso joogso =
|
||||
let joogsa = init joogso + "a" ;
|
||||
in mkVerb joogso (joogsa + "d") joogsa ;
|
||||
|
||||
cQaado qaado =
|
||||
let qaa = drop 2 qaado
|
||||
in mkVerb qaado -- Imperative sg, with the vowel
|
||||
(qaa + "t") -- Per1 Sg, Per3 Pl and Per3 Sg Masc
|
||||
(qaa + "da") ; -- Per2 Pl and others
|
||||
|
||||
-- Constructs verbs like u baahan+ahay
|
||||
prefixV : Str -> Verb -> Verb = \s,v -> {
|
||||
s = \\vf => s + v.s ! vf
|
||||
} ;
|
||||
|
||||
------------------
|
||||
-- Irregular verbs
|
||||
|
||||
copula : Verb = {
|
||||
s = table {
|
||||
VPres Sg1 pol => if_then_Pol pol "ahay" "ihi" ;
|
||||
VPres Sg2 pol => if_then_Pol pol "tahay" "ihid" ;
|
||||
VPres (Sg3 Masc|Impers) pol => if_then_Pol pol "yahay" "aha" ;
|
||||
VPres (Sg3 Fem) pol => if_then_Pol pol "tahay" "aha" ;
|
||||
VPres (Pl1 _) pol => if_then_Pol pol "nahay" "ihin" ;
|
||||
VPres Pl2 pol => if_then_Pol pol "tihiin" "ihidin" ;
|
||||
VPres Pl3 pol => if_then_Pol pol "yihiin" "aha" ;
|
||||
VImp Sg pol => if_then_Pol pol "ahaw" "ahaanin" ;
|
||||
VImp Pl pol => if_then_Pol pol "ahaada" "ahaanina" ;
|
||||
|
||||
VPast (Sg1|Sg3 Masc|Impers)
|
||||
=> "ahaa" ;
|
||||
VPast (Sg2|Sg3 Fem)
|
||||
=> "ahayd" ;
|
||||
VPast (Pl1 _) => "ahayn" ;
|
||||
VPast Pl2 => "ahaydeen" ;
|
||||
VPast Pl3 => "ahaayeen" ;
|
||||
VNegPast => "ahi" ;
|
||||
VRel => "ah" ;
|
||||
VInf => "ahaan" }
|
||||
} ;
|
||||
-- I somaliskan används inte något kopulaverb motsvarande svenskans är mellan
|
||||
-- två substantivfraser som utgör subjekt respektive predikatsfyllnad.
|
||||
-- Observera också att kopulaverbet vara alltid hamnar efter det adjektiv
|
||||
-- som utgör predikatsfyllnaden.
|
||||
have_V : Verb =
|
||||
let hold_V = mkVerb "hayso" "haysat" "haysa" in {
|
||||
s = table {
|
||||
VPres Sg1 Pos => "leeyahay" ;
|
||||
VPres Sg2 Pos => "leedahay" ;
|
||||
VPres (Sg3 Fem) Pos => "leedahay" ;
|
||||
VPres (Sg3 Masc|Impers) Pos
|
||||
=> "leeyahay" ;
|
||||
VPres (Pl1 _) Pos => "leenahay" ;
|
||||
VPres Pl2 Pos => "leedihiin" ;
|
||||
VPres Pl3 Pos => "leeyihiin" ;
|
||||
VPast x => "l" + copula.s ! VPast x ;
|
||||
VRel => "leh" ;
|
||||
x => hold_V.s ! x }
|
||||
} ;
|
||||
|
||||
-- Till VERBFRASEN ansluter sig
|
||||
-- · satstypsmarkörer (waa, ma...),
|
||||
-- · subjekts-pronomenet la man,
|
||||
-- · objektspronomenen,
|
||||
-- · prepositionerna och
|
||||
-- · riktnings-adverben soó (mot en plats/person), sií (bort frånen plats/person), wadá tillsammans (mot en gemensam punkt), kalá iväg, isär (bort från en gemensam punkt).
|
||||
-- Riktningsadverben har ibland en mycket konkret betydelse, men många gånger är betydelsen mera abstrakt.
|
||||
|
||||
-- Till satsmarkörerna, dvs. både fokusmarkörerna och satstypsmarkörerna ansluter sig
|
||||
-- subjektspronomenen aan, aad, uu, ay, aynu, men inte la (man).
|
||||
|
||||
------------------
|
||||
-- VP
|
||||
Adverb : Type = {s,s2 : Str} ;
|
||||
|
||||
Complement : Type = {
|
||||
comp : Agreement => {p1,p2 : Str} -- Agreement for AP complements
|
||||
} ;
|
||||
|
||||
VerbPhrase : Type = Verb ** Complement ** {
|
||||
isPred : Bool ; -- to choose right sentence type marker
|
||||
adv : Adverb ; -- they're ~complicated~
|
||||
c2, c3 : Preposition -- can combine together and with object pronouns
|
||||
} ;
|
||||
|
||||
VPSlash : Type = VerbPhrase ; ---- TODO more fields
|
||||
|
||||
useV : Verb -> VerbPhrase = \v -> v ** {
|
||||
comp = \\_ => <[],[]> ;
|
||||
isPred = False ;
|
||||
adv = {s,s2 = []} ;
|
||||
c2,c3 = noPrep ;
|
||||
} ;
|
||||
|
||||
compl : NounPhrase -> VerbPhrase -> Str = \np,vp ->
|
||||
prepCombTable ! np.a ! combine vp.c2 vp.c3 ;
|
||||
|
||||
complV2 : NounPhrase -> Verb2 -> Str = \np,vp ->
|
||||
prepCombTable ! np.a ! combine vp.c2 noPrep ;
|
||||
--------------------------------------------------------------------------------
|
||||
-- Sentences etc.
|
||||
Clause : Type = {s : Tense => Anteriority => Polarity => Str} ;
|
||||
RClause,
|
||||
ClSlash,
|
||||
Sentence : Type = SS ; ---- TODO
|
||||
|
||||
doonaa : Str -> Verb = \inf ->
|
||||
let doon : Verb = cSug "doon" in {s = \\vf => inf ++ doon.s ! vf} ;
|
||||
|
||||
vf : Tense -> Anteriority -> Polarity -> Agreement -> Verb
|
||||
-> {fin : Str ; inf : Str} = \t,ant,p,agr,vp ->
|
||||
let pastV : Verb -> Str = \v ->
|
||||
case p of { Neg => v.s ! VNegPast ;
|
||||
Pos => v.s ! VPast agr } ;
|
||||
presV : Verb -> Str = \v -> v.s ! VPres agr p ;
|
||||
in case <t,ant> of {
|
||||
<Pres,Simul> => {fin = presV vp ; inf = [] } ;
|
||||
<Pres,Anter> => {fin = presV copula ; inf = vp.s ! VInf } ; ---- just guessing
|
||||
<Past,Simul> => {fin = pastV vp ; inf = [] } ;
|
||||
<Past,Anter> => {fin = pastV copula ; inf = vp.s ! VInf } ; ---- TODO: habitual aspect
|
||||
<Fut,Simul> => {fin = presV (doonaa (vp.s ! VInf)) ; inf = []} ;
|
||||
<Fut,Anter> => {fin = pastV (doonaa (vp.s ! VInf)) ; inf = []} ;
|
||||
<_,Simul> => {fin = presV vp ; inf = []} ; -- TODO conditional
|
||||
<_,Anter> => {fin = pastV vp ; inf = []} -- TODO conditional
|
||||
} ;
|
||||
|
||||
stmarker : Agreement => Polarity => Str = \\a,b =>
|
||||
let stm = if_then_Pol b "w" "m"
|
||||
in stm + subjpron ! a ;
|
||||
|
||||
stmarkerNoContr : Agreement => Polarity => Str = \\a,b =>
|
||||
let stm = if_then_Pol b "waa" "ma"
|
||||
in stm ++ subjpron ! a ;
|
||||
|
||||
subjpron : Agreement => Str = table {
|
||||
Sg1|Pl1 _ => "aan" ;
|
||||
Sg2|Pl2 => "aad" ;
|
||||
Sg3 Masc => "uu" ;
|
||||
_ => "ay" } ;
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- linrefs
|
||||
|
||||
oper
|
||||
linVP : VerbPhrase -> Str = \vp -> vp.s ! VInf ; ----
|
||||
linCN : CNoun -> Str = \cn -> cn.s ! IndefNom ;
|
||||
}
|
||||
103
src/somali/SentenceSom.gf
Normal file
103
src/somali/SentenceSom.gf
Normal file
@@ -0,0 +1,103 @@
|
||||
concrete SentenceSom of Sentence = CatSom ** open
|
||||
TenseX, ResSom, (AS=AdverbSom), Prelude in {
|
||||
|
||||
flags optimize=all_subs ;
|
||||
|
||||
lin
|
||||
|
||||
--2 Clauses
|
||||
|
||||
-- : NP -> VP -> Cl
|
||||
PredVP np vp = {
|
||||
s = \\t,a,p =>
|
||||
let pred : {fin : Str ; inf : Str} = vf t a p np.a vp ;
|
||||
subj : Str = if_then_Str np.isPron [] (np.s ! Nom) ;
|
||||
obj : {p1,p2 : Str} = vp.comp ! np.a ;
|
||||
stm : Str =
|
||||
case <p,vp.isPred,np.a> of {
|
||||
<Pos,True,Sg3 _> => "waa" ;
|
||||
-- _ => stmarker ! np.a ! b } -- marker+pronoun contract
|
||||
_ => case <np.isPron,p> of {
|
||||
<True,Pos> => "waa" ++ np.s ! Nom ; -- to force some string from NP to show in the tree
|
||||
<True,Neg> => "ma" ++ np.s ! Nom ;
|
||||
<False> => stmarkerNoContr ! np.a ! p }} ;
|
||||
in subj -- subject if it's a noun
|
||||
++ obj.p1 -- object if it's a noun
|
||||
++ stm -- sentence type marker + possible subj. pronoun
|
||||
++ vp.adv.s ---- TODO: can it contract with obj. pronoun?
|
||||
++ obj.p2 -- object if it's a pronoun
|
||||
++ pred.fin -- the verb inflected
|
||||
++ pred.inf -- potential participle
|
||||
++ vp.adv.s2 ---- I have no idea /IL
|
||||
} ;
|
||||
{-
|
||||
-- : SC -> VP -> Cl ; -- that she goes is good
|
||||
PredSCVP sc vp = ;
|
||||
|
||||
--2 Clauses missing object noun phrases
|
||||
-- : NP -> VPSlash -> ClSlash ;
|
||||
SlashVP np vps = ;
|
||||
|
||||
-- : ClSlash -> Adv -> ClSlash ; -- (whom) he sees today
|
||||
AdvSlash cls adv = cls ** insertAdv adv cls ;
|
||||
|
||||
-- SlashPrep : Cl -> Prep -> ClSlash ; -- (with whom) he walks
|
||||
|
||||
-- : NP -> VS -> SSlash -> ClSlash ; -- (whom) she says that he loves
|
||||
-- SlashVS np vs ss = {} ;
|
||||
|
||||
|
||||
-- : Temp -> Pol -> ClSlash -> SSlash ; -- (that) she had not seen
|
||||
UseSlash t p cls = UseCl t p (PredVP he_Pron cls) ;
|
||||
|
||||
--2 Imperatives
|
||||
-- : VP -> Imp ;
|
||||
ImpVP vp = { s = linVP vp } ;
|
||||
|
||||
--2 Embedded sentences
|
||||
|
||||
|
||||
-- : S -> SC ;
|
||||
EmbedS s = { } ;
|
||||
|
||||
-- : QS -> SC ;
|
||||
EmbedQS qs = { } ;
|
||||
|
||||
-- : VP -> SC ;
|
||||
EmbedVP vp = { s = linVP vp } ;
|
||||
|
||||
--2 Sentences
|
||||
|
||||
-}
|
||||
-- : Temp -> Pol -> Cl -> S ;
|
||||
UseCl t p cl = { s = t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p } ;
|
||||
{-
|
||||
-- : Temp -> Pol -> RCl -> RS ;
|
||||
UseRCl t p cl = { s = t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p } ;
|
||||
|
||||
-- : Temp -> Pol -> QCl -> QS ;
|
||||
UseQCl t p cl = { s = t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p } ;
|
||||
|
||||
-- An adverb can be added to the beginning of a sentence, either with comma ("externally")
|
||||
-- or without:
|
||||
|
||||
-- : Adv -> S -> S ; -- then I will go home
|
||||
AdvS = advS ;
|
||||
|
||||
-- : Adv -> S -> S ; -- next week, I will go home
|
||||
ExtAdvS adv = advS {s = adv.s ++ SOFT_BIND ++ ","} ;
|
||||
|
||||
-- There's an SubjS already in AdverbSom -- should this be deprecated?
|
||||
-- : S -> Subj -> S -> S ;
|
||||
SSubjS s1 subj s2 = AdvS (AS.SubjS subj s2) s1 ;
|
||||
|
||||
-- A sentence can be modified by a relative clause referring to its contents.
|
||||
|
||||
-- : S -> RS -> S ; -- she sleeps, which is good
|
||||
RelS sent rs = advS { s = rs.s ! Sg3 Masc ++ SOFT_BIND ++ ","} sent ;
|
||||
|
||||
oper
|
||||
|
||||
advS : Adv -> SS -> SS = \a,s -> {s = a.s ++ s.s} ;
|
||||
-}
|
||||
}
|
||||
195
src/somali/StructuralSom.gf
Normal file
195
src/somali/StructuralSom.gf
Normal file
@@ -0,0 +1,195 @@
|
||||
concrete StructuralSom of Structural = CatSom **
|
||||
open Prelude, ResSom, (N=NounSom), ParadigmsSom in {
|
||||
|
||||
-------
|
||||
-- Ad*
|
||||
{-
|
||||
lin almost_AdA = mkAdA "" ;
|
||||
lin almost_AdN = ss "" ;
|
||||
lin at_least_AdN = ss "" ;
|
||||
lin at_most_AdN = ss "" ;
|
||||
lin so_AdA = ss "" ;
|
||||
lin too_AdA = ss "" ;
|
||||
lin very_AdA = mkAdA "" ;
|
||||
|
||||
lin as_CAdv = { s = "" ; p = [] } ;
|
||||
lin less_CAdv = { s = "" ; p = [] } ;
|
||||
lin more_CAdv = { s = "" ; p = [] } ;
|
||||
|
||||
lin how_IAdv = ss "" ;
|
||||
lin how8much_IAdv = ss "" ;
|
||||
lin when_IAdv = ss "" ;
|
||||
lin where_IAdv = ss "" ;
|
||||
lin why_IAdv = ss "" ;
|
||||
|
||||
lin always_AdV = ss "" ;
|
||||
|
||||
lin everywhere_Adv = ss "" ;
|
||||
lin here7from_Adv = ss "" ;
|
||||
lin here7to_Adv = ss "" ;
|
||||
lin here_Adv = ss "" ;
|
||||
lin quite_Adv = ss "" ;
|
||||
lin somewhere_Adv = ss "" ;
|
||||
lin there7from_Adv = ss "" ;
|
||||
lin there7to_Adv = ss "" ;
|
||||
lin there_Adv = ss "" ;
|
||||
|
||||
-}
|
||||
-------
|
||||
-- Conj
|
||||
|
||||
lin and_Conj = {s1 = "oo" ; s2 = [] ; n = Pl} ;
|
||||
lin or_Conj = {s1 = "ama" ; s2 = [] ; n = Sg} ; -- mise with interrogatives
|
||||
-- lin if_then_Conj = mkConj
|
||||
-- lin both7and_DConj = mkConj "" "" pl ;
|
||||
-- lin either7or_DConj = mkConj "" "" pl ;
|
||||
--
|
||||
-- lin but_PConj = ss "" ;
|
||||
-- lin otherwise_PConj = ss "" ;
|
||||
-- lin therefore_PConj = ss "" ;
|
||||
|
||||
|
||||
-----------------
|
||||
-- *Det and Quant
|
||||
{-
|
||||
lin how8many_IDet = R.indefDet "" pl ;
|
||||
|
||||
--TODO: fix predets in NounSom, figure out whether Predet should inflect
|
||||
lin all_Predet = { s = "" } ;
|
||||
lin not_Predet = { s = "" } ;
|
||||
lin only_Predet = { s = "" } ;
|
||||
lin most_Predet = { s = "" } ;
|
||||
|
||||
lin every_Det = R.defDet [] pl **
|
||||
{ s = mkVow } ;
|
||||
lin few_Det = R.indefDet "" pl ;
|
||||
lin many_Det = R.indefDet "" pl ;
|
||||
lin much_Det = R.indefDet "" sg ;
|
||||
lin somePl_Det = R.indefDet "" pl ;
|
||||
lin someSg_Det = R.indefDet "" sg ;
|
||||
|
||||
lin no_Quant = mkPrep no_Quant
|
||||
|
||||
lin that_Quant = R.defDet [] sg ** { s = R.quantHori } ;
|
||||
lin this_Quant = R.defDet [] sg ** { s = R.quantHau } ;
|
||||
lin which_IQuant = R.defDet "" sg ** { s = R.artDef } ;
|
||||
|
||||
|
||||
-----
|
||||
-- NP
|
||||
|
||||
lin everybody_NP = defNP "" N.NumPl ;
|
||||
lin everything_NP = defNP "" N.NumSg ;
|
||||
lin nobody_NP = mkVerb; ""
|
||||
lin nothing_NP = defNP "" N.NumSg ;
|
||||
lin somebody_NP = defNP "" N.NumSg ;
|
||||
lin something_NP = defNP "" N.NumSg ;
|
||||
|
||||
oper
|
||||
defNP : Str -> Num -> NP = {} ;
|
||||
-}
|
||||
|
||||
-------
|
||||
-- Prep
|
||||
|
||||
-- lin above_Prep = mkPrep "" ;
|
||||
-- lin after_Prep = mkPrep "" ;
|
||||
-- lin before_Prep = mkPrep "" ;
|
||||
-- lin behind_Prep = mkPrep "" ;
|
||||
-- lin between_Prep = mkPrep "" ;
|
||||
-- lin by8agent_Prep = mkPrep ;
|
||||
-- lin by8means_Prep = mkPrep ;
|
||||
-- lin during_Prep = mkPrep ;
|
||||
-- lin except_Prep = mkPrep ;
|
||||
-- lin for_Prep = mkPrep ;
|
||||
-- lin from_Prep = mkPrep "" ;
|
||||
-- lin in8front_Prep = mkPrep "" ;
|
||||
lin in_Prep = prepTable ! ku ;
|
||||
lin on_Prep = prepTable ! ku ;
|
||||
-- lin part_Prep = mkPrep ;
|
||||
-- lin possess_Prep = mkPrep ;
|
||||
-- lin through_Prep = mkPrep ;
|
||||
-- lin to_Prep = mkPrep ;
|
||||
-- lin under_Prep = mkPrep "" ;
|
||||
lin with_Prep = prepTable ! la ;
|
||||
-- lin without_Prep = mkPrep ;
|
||||
|
||||
|
||||
-------
|
||||
-- Pron
|
||||
|
||||
-- Pronouns are closed class, no constructor in ParadigmsSom.
|
||||
|
||||
i_Pron = {
|
||||
s = table {Nom => "aan" ; Abs => "i"} ;
|
||||
a = Sg1 ; isPron = True ; sp = "aniga" ;
|
||||
} ;
|
||||
youSg_Pron = {
|
||||
s = table {Nom => "aad" ; Abs => "ku"} ;
|
||||
a = Sg2 ; isPron = True ; sp = "adiga" ;
|
||||
} ;
|
||||
he_Pron = {
|
||||
s = table {Nom => "uu" ; Abs => []} ;
|
||||
a = Sg3 Masc ; isPron = True ; sp = "isaga" ;
|
||||
} ;
|
||||
she_Pron = {
|
||||
s = table {Nom => "ay" ; Abs => []} ;
|
||||
a = Sg3 Fem ; isPron = True ; sp = "iyada" ;
|
||||
} ;
|
||||
we_Pron = {
|
||||
s = table {Nom => "aan" ; Abs => "na"} ;
|
||||
a = Pl1 Incl ; isPron = True ; sp = "innaga" ;
|
||||
} ;
|
||||
youPl_Pron = {
|
||||
s = table {Nom => "aad" ; Abs => "idin"} ;
|
||||
a = Pl2 ; isPron = True ; sp = "idinka" ;
|
||||
} ;
|
||||
they_Pron = {
|
||||
s = table {Nom => "ay" ; Abs => []} ;
|
||||
a = Pl3 ; isPron = True ; sp = "iyaga" ;
|
||||
} ;
|
||||
{-
|
||||
lin whatPl_IP = ;
|
||||
lin whatSg_IP = ;
|
||||
lin whoPl_IP = ;
|
||||
lin whoSg_IP = ;
|
||||
|
||||
|
||||
|
||||
|
||||
-------
|
||||
-- Subj
|
||||
|
||||
lin although_Subj = mkSubj "" False ;
|
||||
lin because_Subj = mkSubj "" False ;
|
||||
lin if_Subj = mkSubj "" True ;
|
||||
lin that_Subj = mkSubj "" False ;
|
||||
lin when_Subj = mkSubj "" False ;
|
||||
|
||||
|
||||
-}
|
||||
------
|
||||
-- Utt
|
||||
|
||||
lin language_title_Utt = ss "af soomaali" ;
|
||||
lin no_Utt = ss "ma" ;
|
||||
lin yes_Utt = ss "yes" ;
|
||||
|
||||
|
||||
-------
|
||||
-- Verb
|
||||
|
||||
lin have_V2 = mkV2 have_V noPrep ;
|
||||
{-
|
||||
lin can8know_VV = mkV "" ; -- can (capacity)
|
||||
lin can_VV = mkV "" ; -- can (possibility)
|
||||
lin must_VV = mkV "" ;
|
||||
lin want_VV = mkV "" ;
|
||||
|
||||
|
||||
------
|
||||
-- Voc
|
||||
|
||||
lin please_Voc = ss "" ;
|
||||
-}
|
||||
}
|
||||
50
src/somali/SymbolSom.gf
Normal file
50
src/somali/SymbolSom.gf
Normal file
@@ -0,0 +1,50 @@
|
||||
--# -path=.:../abstract:../common:../prelude
|
||||
|
||||
concrete SymbolSom of Symbol = CatSom **
|
||||
open Prelude, ParadigmsSom, ResSom, (NS=NounSom) in {
|
||||
|
||||
lin
|
||||
|
||||
-- : Symb -> PN ; -- x
|
||||
SymbPN i = mkPN i.s ;
|
||||
|
||||
-- : Int -> PN ; -- 27
|
||||
IntPN i = mkPN i.s ;
|
||||
|
||||
-- : Float -> PN ; -- 3.14159
|
||||
FloatPN i = mkPN i.s ;
|
||||
|
||||
-- : Card -> PN ; -- twelve [as proper name]
|
||||
NumPN i = mkPN i.s ;
|
||||
|
||||
{-
|
||||
lin
|
||||
-- CNIntNP cn i = {} ;
|
||||
|
||||
-- : Det -> CN -> [Symb] -> NP ; -- (the) (2) numbers x and y
|
||||
CNSymbNP det cn xs =
|
||||
let cnSymb = cn ** { comp = cn.comp ++ xs.s }
|
||||
in NS.DetCN det cnSymb ;
|
||||
|
||||
-- : CN -> Card -> NP ; -- level five ; level 5
|
||||
CNNumNP cn i = NS.MassNP (cn ** { comp = cn.comp ++ i.s }) ;
|
||||
|
||||
-- : Symb -> S ;
|
||||
SymbS sy = {s = } ;
|
||||
-- : Symb -> Card ;
|
||||
SymbNum sy = { s = sy.s ; n = Pl } ;
|
||||
|
||||
-- : Symb -> Ord ;
|
||||
SymbOrd sy = { s =} ;
|
||||
-}
|
||||
lincat
|
||||
Symb, [Symb] = SS ;
|
||||
|
||||
lin
|
||||
MkSymb s = s ;
|
||||
|
||||
BaseSymb = infixSS "oo" ;
|
||||
ConsSymb = infixSS "," ;
|
||||
|
||||
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user