1
0
forked from GitHub/gf-rgl

Merge pull request #296 from inariksit/somali

Somali
This commit is contained in:
Inari Listenmaa
2019-10-04 16:26:33 +02:00
committed by GitHub
6 changed files with 46 additions and 74 deletions

View File

@@ -48,7 +48,9 @@ concrete AdjectiveSom of Adjective = CatSom ** open ResSom, Prelude in {
-- phrases, although the semantics is only clear for some adjectives. -- phrases, although the semantics is only clear for some adjectives.
-- : AP -> SC -> AP ; -- good that she is here -- : AP -> SC -> AP ; -- good that she is here
-- SentAP ap sc = ap ** { } ; SentAP ap sc = ap ** {
s = \\af => ap.s ! af ++ sc.s -- TODO check
} ;
-- An adjectival phrase can be modified by an *adadjective*, such as "very". -- An adjectival phrase can be modified by an *adadjective*, such as "very".

View File

@@ -1,17 +1,17 @@
--# -path=.:../common:../abstract --# -path=.:../common:../abstract
concrete ExtendSom of Extend = CatSom concrete ExtendSom of Extend = CatSom
-- ** ExtendFunctor -- Add this back when all relevant functions are implemented ** ExtendFunctor - [GenModNP, FocusObj, ComplDirectVS, ComplDirectVQ]
-- with (Grammar=GrammarSom) with (Grammar=GrammarSom)
** open Prelude, ResSom in { ** open Prelude, ResSom, NounSom in {
lin lin
-- : Num -> NP -> CN -> NP ; -- this man's car(s)
GenModNP num np cn = DetCN (DetQuant IndefArt num) (genModCN cn np) ;
-- : NP -> SSlash -> Utt ; -- her I love -- Saeed p. 189- -- : NP -> SSlash -> Utt ; -- her I love -- Saeed p. 189-
FocusObj np sslash = -- FIXME: preposition disappears in negative sentences FocusObj np sslash = {s = sslash.s ! False ++ objpron np ! Abs} ;
let ss = sslash.s ! False ;
ssSub = sslash.s ! True ; -- the negative particle is the same as subordinate, but verb forms come from main clause
obj = objpron np ! Abs ;
in {s = ssSub.beforeSTM ++ "waxa" ++ ssSub.stm ++ ss.afterSTM ++ obj} ;
-- FocusAdv : Adv -> S -> Utt ; -- today I will sleep -- FocusAdv : Adv -> S -> Utt ; -- today I will sleep
-- FocusAdV : AdV -> S -> Utt ; -- never will I sleep -- FocusAdV : AdV -> S -> Utt ; -- never will I sleep

View File

@@ -1,27 +1,26 @@
--1 Idiom: Idiomatic Expressions --1 Idiom: Idiomatic Expressions
concrete IdiomSom of Idiom = CatSom ** open Prelude, ResSom, VerbSom in { concrete IdiomSom of Idiom = CatSom ** open Prelude, ResSom, VerbSom, NounSom, StructuralSom in {
-- This module defines constructions that are formed in fixed ways, -- This module defines constructions that are formed in fixed ways,
-- often different even in closely related languages. -- often different even in closely related languages.
lin lin
-- : VP -> Cl ; -- it is hot -- ImpersCl : VP -> Cl ; -- it is hot
--ImpersCl = ; -- GenericCl : VP -> Cl ; -- one sleeps
ImpersCl,
-- : VP -> Cl ; -- one sleeps GenericCl = \vp -> predVP impersNP (passVP vp) ;
GenericCl vp = predVP impersNP (passVP vp) ;
{- {-
CleftNP : NP -> RS -> Cl ; -- it is I who did it CleftNP : NP -> RS -> Cl ; -- it is I who did it
CleftAdv : Adv -> S -> Cl ; -- it is here she slept CleftAdv : Adv -> S -> Cl ; -- it is here she slept
-} -}
-- : NP -> Cl ; -- there is a house -- : NP -> Cl ; -- there is a house
-- ExistNP np = ExistNP np =
-- let vp = UseComp (CompNP np) let vp = UseComp (CompNP np)
-- in ; in predVP impersNP vp ;
{- ExistIP : IP -> QCl ; -- which houses are there {- ExistIP : IP -> QCl ; -- which houses are there

View File

@@ -21,43 +21,28 @@ oper AdvSlash : ClSlash -> Adv -> ClSlash = notYet "AdvSlash" ;
oper ApposCN : CN -> NP -> CN = notYet "ApposCN" ; oper ApposCN : CN -> NP -> CN = notYet "ApposCN" ;
oper BaseAP : AP -> AP -> ListAP = notYet "BaseAP" ; oper BaseAP : AP -> AP -> ListAP = notYet "BaseAP" ;
oper BaseAdV : AdV -> AdV -> ListAdV = notYet "BaseAdV" ; oper BaseAdV : AdV -> AdV -> ListAdV = notYet "BaseAdV" ;
oper BaseAdv : Adv -> Adv -> ListAdv = notYet "BaseAdv" ;
oper BaseCN : CN -> CN -> ListCN = notYet "BaseCN" ; oper BaseCN : CN -> CN -> ListCN = notYet "BaseCN" ;
oper BaseIAdv : IAdv -> IAdv -> ListIAdv = notYet "BaseIAdv" ; 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 BaseS : S -> S -> ListS = notYet "BaseS" ;
oper CAdvAP : CAdv -> AP -> NP -> AP = notYet "CAdvAP" ; oper CAdvAP : CAdv -> AP -> NP -> AP = notYet "CAdvAP" ;
oper CleftAdv : Adv -> S -> Cl = notYet "CleftAdv" ; oper CleftAdv : Adv -> S -> Cl = notYet "CleftAdv" ;
oper CleftNP : NP -> RS -> Cl = notYet "CleftNP" ; oper CleftNP : NP -> RS -> Cl = notYet "CleftNP" ;
oper CompAdv : Adv -> Comp = notYet "CompAdv" ;
oper CompIAdv : IAdv -> IComp = notYet "CompIAdv" ;
oper CompIP : IP -> IComp = notYet "CompIP" ;
oper ComparA : A -> NP -> AP = notYet "ComparA" ;
oper ComparAdvAdj : CAdv -> A -> NP -> Adv = notYet "ComparAdvAdj" ; oper ComparAdvAdj : CAdv -> A -> NP -> Adv = notYet "ComparAdvAdj" ;
oper ComparAdvAdjS : CAdv -> A -> S -> Adv = notYet "ComparAdvAdjS" ; oper ComparAdvAdjS : CAdv -> A -> S -> Adv = notYet "ComparAdvAdjS" ;
oper ComplA2 : A2 -> NP -> AP = notYet "ComplA2" ; oper ComplA2 : A2 -> NP -> AP = notYet "ComplA2" ;
oper ComplN3 : N3 -> NP -> N2 = notYet "ComplN3" ; oper ComplN3 : N3 -> NP -> N2 = notYet "ComplN3" ;
oper ComplSlashIP : VPSlash -> IP -> QVP = notYet "ComplSlashIP" ; oper ComplSlashIP : VPSlash -> IP -> QVP = notYet "ComplSlashIP" ;
oper ComplVA : VA -> AP -> VP = notYet "ComplVA" ;
oper ComplVQ : VQ -> QS -> VP = notYet "ComplVQ" ; oper ComplVQ : VQ -> QS -> VP = notYet "ComplVQ" ;
oper ComplVS : VS -> S -> VP = notYet "ComplVS" ;
oper ConjAP : Conj -> ListAP -> AP = notYet "ConjAP" ; oper ConjAP : Conj -> ListAP -> AP = notYet "ConjAP" ;
oper ConjAdV : Conj -> ListAdV -> AdV = notYet "ConjAdV" ; oper ConjAdV : Conj -> ListAdV -> AdV = notYet "ConjAdV" ;
oper ConjAdv : Conj -> ListAdv -> Adv = notYet "ConjAdv" ;
oper ConjCN : Conj -> ListCN -> CN = notYet "ConjCN" ; oper ConjCN : Conj -> ListCN -> CN = notYet "ConjCN" ;
oper ConjDet : Conj -> ListDAP -> Det = notYet "ConjDet" ; oper ConjDet : Conj -> ListDAP -> Det = notYet "ConjDet" ;
oper ConjIAdv : Conj -> ListIAdv -> IAdv = notYet "ConjIAdv" ; 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 ConjS : Conj -> ListS -> S = notYet "ConjS" ;
oper ConsAP : AP -> ListAP -> ListAP = notYet "ConsAP" ; oper ConsAP : AP -> ListAP -> ListAP = notYet "ConsAP" ;
oper ConsAdV : AdV -> ListAdV -> ListAdV = notYet "ConsAdV" ; oper ConsAdV : AdV -> ListAdV -> ListAdV = notYet "ConsAdV" ;
oper ConsAdv : Adv -> ListAdv -> ListAdv = notYet "ConsAdv" ;
oper ConsCN : CN -> ListCN -> ListCN = notYet "ConsCN" ; oper ConsCN : CN -> ListCN -> ListCN = notYet "ConsCN" ;
oper ConsIAdv : IAdv -> ListIAdv -> ListIAdv = notYet "ConsIAdv" ; 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 ConsS : S -> ListS -> ListS = notYet "ConsS" ;
oper CountNP : Det -> NP -> NP = notYet "CountNP" ; oper CountNP : Det -> NP -> NP = notYet "CountNP" ;
oper DefArt : Quant = notYet "DefArt" ; oper DefArt : Quant = notYet "DefArt" ;
@@ -68,23 +53,16 @@ oper DetNP : Det -> NP = notYet "DetNP" ;
oper DetQuant : Quant -> Num -> Det = notYet "DetQuant" ; oper DetQuant : Quant -> Num -> Det = notYet "DetQuant" ;
oper DetQuantOrd : Quant -> Num -> Ord -> Det = notYet "DetQuantOrd" ; oper DetQuantOrd : Quant -> Num -> Ord -> Det = notYet "DetQuantOrd" ;
oper EmbedQS : QS -> SC = notYet "EmbedQS" ; 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 ExistIP : IP -> QCl = notYet "ExistIP" ;
oper ExistIPAdv : IP -> Adv -> QCl = notYet "ExistIPAdv" ; oper ExistIPAdv : IP -> Adv -> QCl = notYet "ExistIPAdv" ;
oper ExistNP : NP -> Cl = notYet "ExistNP" ;
oper ExistNPAdv : NP -> Adv -> Cl = notYet "ExistNPAdv" ; oper ExistNPAdv : NP -> Adv -> Cl = notYet "ExistNPAdv" ;
oper ExtAdvS : Adv -> S -> S = notYet "ExtAdvS" ; oper ExtAdvS : Adv -> S -> S = notYet "ExtAdvS" ;
oper ExtAdvVP : VP -> Adv -> VP = notYet "ExtAdvVP" ; oper ExtAdvVP : VP -> Adv -> VP = notYet "ExtAdvVP" ;
oper FunRP : Prep -> NP -> RP -> RP = notYet "FunRP" ; oper FunRP : Prep -> NP -> RP -> RP = notYet "FunRP" ;
oper GenericCl : VP -> Cl = notYet "GenericCl" ;
oper IdRP : RP = notYet "IdRP" ; oper IdRP : RP = notYet "IdRP" ;
oper IdetIP : IDet -> IP = notYet "IdetIP" ; oper IdetIP : IDet -> IP = notYet "IdetIP" ;
oper IdetQuant : IQuant -> Num -> IDet = notYet "IdetQuant" ;
oper ImpP3 : NP -> VP -> Utt = notYet "ImpP3" ; oper ImpP3 : NP -> VP -> Utt = notYet "ImpP3" ;
oper ImpPl1 : VP -> Utt = notYet "ImpPl1" ; oper ImpPl1 : VP -> Utt = notYet "ImpPl1" ;
oper ImpVP : VP -> Imp = notYet "ImpVP" ;
oper ImpersCl : VP -> Cl = notYet "ImpersCl" ;
oper NumCard : Card -> Num = notYet "NumCard" ; oper NumCard : Card -> Num = notYet "NumCard" ;
oper NumDigits : Digits -> Card = notYet "NumDigits" ; oper NumDigits : Digits -> Card = notYet "NumDigits" ;
oper NumNumeral : Numeral -> Card = notYet "NumNumeral" ; oper NumNumeral : Numeral -> Card = notYet "NumNumeral" ;
@@ -102,21 +80,10 @@ oper PossPron : Pron -> Quant = notYet "PossPron" ;
oper PredSCVP : SC -> VP -> Cl = notYet "PredSCVP" ; oper PredSCVP : SC -> VP -> Cl = notYet "PredSCVP" ;
oper PredetNP : Predet -> NP -> NP = notYet "PredetNP" ; oper PredetNP : Predet -> NP -> NP = notYet "PredetNP" ;
oper PrepIP : Prep -> IP -> IAdv = notYet "PrepIP" ; 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 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 ReflA2 : A2 -> AP = notYet "ReflA2" ;
oper RelCN : CN -> RS -> CN = notYet "RelCN" ;
oper RelCl : Cl -> RCl = notYet "RelCl" ; oper RelCl : Cl -> RCl = notYet "RelCl" ;
oper RelNP : NP -> RS -> NP = notYet "RelNP" ;
oper RelS : S -> RS -> S = notYet "RelS" ; 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 SelfAdvVP : VP -> VP = notYet "SelfAdvVP" ; oper SelfAdvVP : VP -> VP = notYet "SelfAdvVP" ;
oper SelfNP : NP -> NP = notYet "SelfNP" ; oper SelfNP : NP -> NP = notYet "SelfNP" ;
@@ -125,10 +92,8 @@ oper SentCN : CN -> SC -> CN = notYet "SentCN" ;
oper SlashPrep : Cl -> Prep -> ClSlash = notYet "SlashPrep" ; oper SlashPrep : Cl -> Prep -> ClSlash = notYet "SlashPrep" ;
oper SlashV2A : V2A -> AP -> VPSlash = notYet "SlashV2A" ; oper SlashV2A : V2A -> AP -> VPSlash = notYet "SlashV2A" ;
oper SlashV2Q : V2Q -> QS -> VPSlash = notYet "SlashV2Q" ; oper SlashV2Q : V2Q -> QS -> VPSlash = notYet "SlashV2Q" ;
oper SlashV2S : V2S -> S -> VPSlash = notYet "SlashV2S" ;
oper SlashV2V : V2V -> VP -> VPSlash = notYet "SlashV2V" ; oper SlashV2V : V2V -> VP -> VPSlash = notYet "SlashV2V" ;
oper SlashV2VNP : V2V -> NP -> VPSlash -> VPSlash = notYet "SlashV2VNP" ; oper SlashV2VNP : V2V -> NP -> VPSlash -> VPSlash = notYet "SlashV2VNP" ;
oper SlashVP : NP -> VPSlash -> ClSlash = notYet "SlashVP" ;
oper SlashVS : NP -> VS -> SSlash -> ClSlash = notYet "SlashVS" ; oper SlashVS : NP -> VS -> SSlash -> ClSlash = notYet "SlashVS" ;
oper SlashVV : VV -> VPSlash -> VPSlash = notYet "SlashVV" ; oper SlashVV : VV -> VPSlash -> VPSlash = notYet "SlashVV" ;
oper SubjS : Subj -> S -> Adv = notYet "SubjS" ; oper SubjS : Subj -> S -> Adv = notYet "SubjS" ;

View File

@@ -226,21 +226,7 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in {
UseN,UseN2 = ResSom.useN ; UseN,UseN2 = ResSom.useN ;
-- : N2 -> NP -> CN ; -- Sahra hooyadeed -- : N2 -> NP -> CN ; -- Sahra hooyadeed
ComplN2 n2 np = let cn = useN n2 in cn ** {s = \\nf => ComplN2 n2 np = genModCN (useN n2) np ;
let num = case nf of {
Def n => n ;
Indef n => n ;
_ => Sg } ;
art = gda2da cn.gda ! num ;
qnt = PossPron (pronTable ! np.a) ;
det = case cn.shortPoss of {
True => qnt.shortPoss ! art ;
_ => qnt.s ! sg n2.gda ! Abs } ;
noun = case np.isPron of {
True => (pronTable ! np.a).sp ! Abs ; -- long subject pronoun
False => np.s ! Abs }
in noun ++ cn.s ! Def num ++ BIND ++ det ;
isPoss = True} ;
{- {-
-- : N3 -> NP -> N2 ; -- distance from this city (to Paris) -- : N3 -> NP -> N2 ; -- distance from this city (to Paris)
@@ -346,4 +332,22 @@ oper
<Definite,AMod|OtherMod> => "ee" ; <Definite,AMod|OtherMod> => "ee" ;
_ => [] _ => []
} ; } ;
genModCN : CN -> NP -> CN = \cn,np -> cn ** {
s = \\nf =>
let num = case nf of {
Def n => n ;
Indef n => n ;
_ => Sg } ;
art = gda2da cn.gda ! num ;
qnt = PossPron (pronTable ! np.a) ;
det = case cn.shortPoss of {
True => qnt.shortPoss ! art ;
_ => qnt.s ! sg cn.gda ! Abs } ;
noun = case np.isPron of {
True => (pronTable ! np.a).sp ! Abs ; -- long subject pronoun
False => np.s ! Abs }
in noun ++ cn.s ! Def num ++ BIND ++ det ;
isPoss = True} ;
} }

View File

@@ -28,7 +28,11 @@ lin
-} -}
-- : Temp -> Pol -> ClSlash -> SSlash ; -- (that) she had not seen -- : Temp -> Pol -> ClSlash -> SSlash ; -- (that) she had not seen
UseSlash t p cls = { UseSlash t p cls = {
s = \\isSubord => let cl = cl2sentence isSubord cls in s = \\isSubord =>
let cls' : ClSlash = cls ** {
stm = modSTM "waxa" "waxa aan" cls.stm -- Saeed p. 195
} ;
cl : Clause = cl2sentence isSubord cls' in
t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p
} ; } ;
@@ -38,19 +42,17 @@ lin
--2 Embedded sentences --2 Embedded sentences
{-
-- : S -> SC ; -- : S -> SC ;
EmbedS s = { } ; EmbedS s = {s = s.s ! True} ; -- choose subordinate
-- : QS -> SC ; -- : QS -> SC ;
EmbedQS qs = { } ; -- EmbedQS qs = { } ;
-- : VP -> SC ; -- : VP -> SC ;
EmbedVP vp = { s = linVP vp } ; EmbedVP vp = {s = infVP vp} ;
--2 Sentences --2 Sentences
-}
-- : Temp -> Pol -> Cl -> S ; -- : Temp -> Pol -> Cl -> S ;
UseCl t p cls = { UseCl t p cls = {
s = \\isSubord => let cl = cl2sentence isSubord cls in s = \\isSubord => let cl = cl2sentence isSubord cls in