mirror of
https://github.com/GrammaticalFramework/gf-rgl.git
synced 2026-05-28 01:18:57 -06:00
Merge branch 'master' of https://github.com/GrammaticalFramework/gf-rgl
This commit is contained in:
99
doc/CountLines.hs
Normal file
99
doc/CountLines.hs
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
import System.Directory
|
||||||
|
import Data.Char
|
||||||
|
import Data.List
|
||||||
|
|
||||||
|
-- counting modules and lines in RGL implementations
|
||||||
|
-- leaving out Lexicon, Structural, dictionaries, Extra, Extend,... (see below the list of prefixes)
|
||||||
|
|
||||||
|
main = do
|
||||||
|
mapM_ getCounts allLanguages
|
||||||
|
|
||||||
|
getCounts (lan,language) = do
|
||||||
|
cs <- mapM (getCount language lan) prefixes
|
||||||
|
let (ms,ls) = unzip cs
|
||||||
|
putStrLn $ unwords [language, show (sum ms), show (sum ls)]
|
||||||
|
|
||||||
|
getCount language lan pref = do
|
||||||
|
let file = concat ["../src/",language,"/",pref,lan,".gf"]
|
||||||
|
--- putStrLn file
|
||||||
|
ms <- readFileIf file
|
||||||
|
case ms of
|
||||||
|
Nothing -> return (0,0)
|
||||||
|
Just s -> return (1,length (codeLines (lines s)))
|
||||||
|
|
||||||
|
codeLines ls = filter (\l -> not (all isSpace l || isPrefixOf "--" l)) ls
|
||||||
|
|
||||||
|
readFileIf name = do
|
||||||
|
b <- doesFileExist name
|
||||||
|
case b of
|
||||||
|
True -> readFile name >>= return . Just
|
||||||
|
False -> return Nothing
|
||||||
|
|
||||||
|
|
||||||
|
prefixes = [
|
||||||
|
"Adjective"
|
||||||
|
,"Adverb"
|
||||||
|
,"Cat"
|
||||||
|
,"Common"
|
||||||
|
,"Conjunction"
|
||||||
|
,"Diff"
|
||||||
|
,"Grammar"
|
||||||
|
,"Lang"
|
||||||
|
-- ,"Lexicon"
|
||||||
|
,"Noun"
|
||||||
|
,"Numeral"
|
||||||
|
,"Phrase"
|
||||||
|
,"Question"
|
||||||
|
,"Relative"
|
||||||
|
,"Sentence"
|
||||||
|
-- ,"Structural"
|
||||||
|
,"Tense"
|
||||||
|
,"Text"
|
||||||
|
,"Verb"
|
||||||
|
,"Res"
|
||||||
|
,"Morpho"
|
||||||
|
,"Phono"
|
||||||
|
,"Paradigms"
|
||||||
|
]
|
||||||
|
|
||||||
|
allLanguages = [
|
||||||
|
("", "abstract")
|
||||||
|
,("Afr","afrikaans")
|
||||||
|
,("Ara","arabic")
|
||||||
|
--- ,("Bul","bulgarian") ---- todo convert to utf8
|
||||||
|
,("Cat","catalan")
|
||||||
|
,("Chi","chinese")
|
||||||
|
,("Dan","danish")
|
||||||
|
,("Dut","dutch")
|
||||||
|
,("Eng","english")
|
||||||
|
,("Est","estonian")
|
||||||
|
,("Eus","basque")
|
||||||
|
,("Fin","finnish")
|
||||||
|
,("Fre","french")
|
||||||
|
,("Ger","german")
|
||||||
|
,("Gre","greek")
|
||||||
|
,("Hin","hindi")
|
||||||
|
,("Ice","icelandic")
|
||||||
|
,("Ita","italian")
|
||||||
|
,("Jpn","japanese")
|
||||||
|
,("Lav","latvian")
|
||||||
|
,("Mlt","maltese")
|
||||||
|
,("Mon","mongolian")
|
||||||
|
,("Nep","nepali")
|
||||||
|
,("Nno","nynorsk")
|
||||||
|
,("Nor","norwegian")
|
||||||
|
,("Pes","persian")
|
||||||
|
,("Pnb","punjabi")
|
||||||
|
,("Pol","polish")
|
||||||
|
,("Por","portuguese")
|
||||||
|
---- ,("Ron","romanian")
|
||||||
|
,("Rus","russian")
|
||||||
|
,("Snd","sindhi")
|
||||||
|
,("Spa","spanish")
|
||||||
|
,("Swe","swedish")
|
||||||
|
,("Tha","thai")
|
||||||
|
,("Urd","urdu")
|
||||||
|
,("Romance","romance")
|
||||||
|
,("Scand","scandinavian")
|
||||||
|
,("Hindustani","hindustani")
|
||||||
|
]
|
||||||
@@ -15,17 +15,18 @@ that are currently available via http://grammaticalframework.org
|
|||||||
are marked in the table
|
are marked in the table
|
||||||
|
|
||||||
|
|
||||||
|| ISO | Language | Darcs | Mini | Parad | Lex | Lang | API | Symb | Irreg | Dict | Trans | tested | publ | authors ||
|
|| ISO | Language | Git | Mini | Parad | Lex | Lang | API | Symb | Irreg | Dict | Trans | tested | publ | authors ||
|
||||||
| Afr | Afrikaans | + | - | ++ | + | + | + | - | - | - | - | - | - | *LP,LM
|
| Afr | Afrikaans | + | - | ++ | + | + | + | - | - | - | - | - | - | *LP,LM
|
||||||
| Amh | Amharic | + | + | ++ | + | + | - | - | - | - | - | - | + | *MK
|
| Amh | Amharic | + | + | ++ | + | + | - | - | - | - | - | - | + | *MK
|
||||||
| Ara | Arabic | + | + | + | + | - | - | - | - | - | - | - | + | AD
|
| Ara | Arabic | + | + | + | + | + | + | + | - | - | - | + | + | AD,*IL
|
||||||
| Bul | Bulgarian | + | + | + | + | + | + | + | + | + | + | ++ | + | *KA
|
| Bul | Bulgarian | + | + | + | + | + | + | + | + | + | + | ++ | + | *KA
|
||||||
| Cat | Catalan | + | + | ++ | + | + | + | + | + | - | + | ++ | - | *JS,*IL
|
| Cat | Catalan | + | + | ++ | + | + | + | + | + | - | + | ++ | - | *JS,*IL
|
||||||
| Chi | Chinese | + | - | ++ | + | + | + | - | - | + | + | - | + | ZL,*AR,*CP,QH
|
| Chi | Chinese | + | - | ++ | + | + | + | - | - | + | + | - | + | ZL,*AR,*CP,QH
|
||||||
| Dan | Danish | + | + | ++ | + | + | + | + | + | - | - | + | - | *AR
|
| Dan | Danish | + | + | ++ | + | + | + | + | + | - | - | + | - | *AR
|
||||||
| Dut | Dutch | + | + | ++ | + | + | + | + | + | - | + | + | - | *AR,FJ
|
| Dut | Dutch | + | + | ++ | + | + | + | + | + | - | + | + | - | *AR,FJ
|
||||||
| Eng | English | + | + | ++ | + | + | + | + | + | + | + | ++ | + | *AR,BB,KA
|
| Eng | English | + | + | ++ | + | + | + | + | + | + | + | ++ | + | *AR,BB,KA
|
||||||
| Est | Estonian | + | - | ++ | + | + | + | - | - | - | - | + | + | *KK,*IL
|
| Est | Estonian | + | - | ++ | + | + | + | - | - | + | + | + | + | *KK,*IL
|
||||||
|
| Eus | Basque | + | - | ++ | + | + | + | - | - | - | - | - | + | *IL
|
||||||
| Fin | Finnish | + | + | ++ | + | + | + | + | - | + | + | ++ | + | *AR,*IL
|
| Fin | Finnish | + | + | ++ | + | + | + | + | - | + | + | ++ | + | *AR,*IL
|
||||||
| Fre | French | + | + | ++ | + | + | + | + | + | + | + | ++ | - | *AR,RE
|
| Fre | French | + | + | ++ | + | + | + | + | + | + | + | ++ | - | *AR,RE
|
||||||
| Ger | German | + | + | ++ | + | + | + | + | + | + | + | ++ | - | *AR,HH,EG
|
| Ger | German | + | + | ++ | + | + | + | + | + | + | + | ++ | - | *AR,HH,EG
|
||||||
@@ -44,9 +45,10 @@ are marked in the table
|
|||||||
| Nep | Nepali | + | + | ++ | + | + | - | - | - | - | - | - | + | *DS
|
| Nep | Nepali | + | + | ++ | + | + | - | - | - | - | - | - | + | *DS
|
||||||
| Nno | Norwegian(n) | + | + | ++ | + | + | + | + | + | - | - | - | - | *SRE
|
| Nno | Norwegian(n) | + | + | ++ | + | + | + | + | + | - | - | - | - | *SRE
|
||||||
| Nor | Norwegian(b) | + | + | ++ | + | + | + | + | + | - | - | + | - | *AR
|
| Nor | Norwegian(b) | + | + | ++ | + | + | + | + | + | - | - | + | - | *AR
|
||||||
| Pes | Persian | + | - | + | + | + | + | - | - | - | - | + | + | *SV,*EA,SM
|
| Pes | Persian | + | - | + | + | + | + | - | - | - | - | + | + | SV,EA,SM,*IL
|
||||||
| Pnb | Punjabi | + | + | + | + | + | + | + | - | - | - | - | + | *SV,MH
|
| Pnb | Punjabi | + | + | + | + | + | + | + | - | - | - | - | + | *SV,MH
|
||||||
| Pol | Polish | + | + | + | + | + | + | + | - | - | - | + | + | IN,*AS
|
| Pol | Polish | + | + | + | + | + | + | + | - | - | - | + | + | IN,*AS
|
||||||
|
| Por | Portuguese | + | + | ++ | + | + | + | + | + | - | + | + | - | *BC
|
||||||
| Ron | Romanian | + | + | ++ | + | + | + | + | - | - | - | + | + | *RE
|
| Ron | Romanian | + | + | ++ | + | + | + | + | - | - | - | + | + | *RE
|
||||||
| Rus | Russian | + | + | ++ | + | + | + | - | - | + | + | - | + | JK,*NF
|
| Rus | Russian | + | + | ++ | + | + | + | - | - | + | + | - | + | JK,*NF
|
||||||
| Snd | Sindhi | + | + | ++ | + | + | + | + | - | - | - | - | + | *SV,*JD
|
| Snd | Sindhi | + | + | ++ | + | + | + | + | - | - | - | - | + | *SV,*JD
|
||||||
@@ -54,16 +56,14 @@ are marked in the table
|
|||||||
| Swa | Swahili | + | - | - | - | - | - | - | - | - | - | - | + | *WN,JM
|
| Swa | Swahili | + | - | - | - | - | - | - | - | - | - | - | + | *WN,JM
|
||||||
| Swe | Swedish | + | + | ++ | + | + | + | + | + | + | + | ++ | + | *MA,*AR,MF
|
| Swe | Swedish | + | + | ++ | + | + | + | + | + | + | + | ++ | + | *MA,*AR,MF
|
||||||
| Tha | Thai | + | - | ++ | + | + | + | + | - | - | + | + | - | *AR,CK
|
| Tha | Thai | + | - | ++ | + | + | + | + | - | - | + | + | - | *AR,CK
|
||||||
| Tsn | Tswana | - | - | - | - | - | - | - | - | - | - | - | - | *LPs,AB
|
| Tsn | Tswana | - | - | - | - | - | - | - | - | - | - | - | - | *LP,AB
|
||||||
| Tur | Turkish | + | - | ++ | + | - | - | - | - | + | - | - | - | *SC,KA
|
| Tur | Turkish | + | - | ++ | + | - | - | - | - | + | - | - | - | *SC,KA
|
||||||
| Urd | Urdu | + | + | ++ | + | + | + | + | - | - | - | + | + | *SV,MH
|
| Urd | Urdu | + | + | ++ | + | + | + | + | - | - | - | + | + | *SV,MH
|
||||||
|
|
||||||
ISO = 3-letter ISO language code, used in library file names
|
ISO = 3-letter ISO language code, used in library file names
|
||||||
(mostly ISO 639-2 B (bibliographic))
|
(mostly ISO 639-2 B (bibliographic))
|
||||||
|
|
||||||
Darcs = available in the darcs repository of --http://code.haskell.org/gf-- http://www.grammaticalframework.org/
|
Git = available in the gf-rgl Git repository
|
||||||
|
|
||||||
Mini = minimal resource, compiles with ``make minimal`` (obsolete)
|
|
||||||
|
|
||||||
Parad = ``Paradigms`` file complete for major POS, ++ means with smart paradigms
|
Parad = ``Paradigms`` file complete for major POS, ++ means with smart paradigms
|
||||||
|
|
||||||
@@ -73,7 +73,7 @@ Lang = the resource ``Syntax`` (nearly) complete
|
|||||||
|
|
||||||
API = the ``Syntax`` compiles
|
API = the ``Syntax`` compiles
|
||||||
|
|
||||||
API = the ``Symbolic`` API compiles
|
Symb = the ``Symbolic`` API compiles
|
||||||
|
|
||||||
Irreg = the ``Irreg`` module with irregular verbs exists
|
Irreg = the ``Irreg`` module with irregular verbs exists
|
||||||
|
|
||||||
@@ -96,6 +96,7 @@ AD Ali El Dada,
|
|||||||
AR Aarne Ranta,
|
AR Aarne Ranta,
|
||||||
AS Adam Slaski,
|
AS Adam Slaski,
|
||||||
BB Björn Bringert,
|
BB Björn Bringert,
|
||||||
|
BC Bruno Cuconato,
|
||||||
BT Bjarki Traustason,
|
BT Bjarki Traustason,
|
||||||
CK Chotiros Kairoje,
|
CK Chotiros Kairoje,
|
||||||
CP Chen Peng,
|
CP Chen Peng,
|
||||||
@@ -146,8 +147,7 @@ ZL Zhuo Lin Qiqige
|
|||||||
|
|
||||||
==Rules==
|
==Rules==
|
||||||
|
|
||||||
Only components available at http://grammaticalframework.org are indicated in the table
|
Only components available at http://grammaticalframework.org are indicated in the table.
|
||||||
(exceptions: Ancient Greek, Mongolian, to appear soon).
|
|
||||||
|
|
||||||
If you want to work on a language already in the table, please be kind and contact the
|
If you want to work on a language already in the table, please be kind and contact the
|
||||||
active authors of it.
|
active authors of it.
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ abstract functions and their Universal Dependency labels
|
|||||||
- Paper "The GF Resource Grammar Library" by A. Ranta
|
- Paper "The GF Resource Grammar Library" by A. Ranta
|
||||||
(//Linguistic Issues in Language Technology//, 2 (2), 2009). An overview of
|
(//Linguistic Issues in Language Technology//, 2 (2), 2009). An overview of
|
||||||
the library with linguistic motivations.
|
the library with linguistic motivations.
|
||||||
[PDF http://elanguage.net/journals/index.php/lilt/article/viewFile/214/158]
|
[PDF https://journals.linguisticsociety.org/elanguage/lilt/article/download/214/214-501-1-PB.pdf]
|
||||||
- Paper "Grammars as Software Libraries" by A. Ranta
|
- Paper "Grammars as Software Libraries" by A. Ranta
|
||||||
(In Y. Bertot, G. Huet, J-J. Lévy, and G. Plotkin (eds.),
|
(In Y. Bertot, G. Huet, J-J. Lévy, and G. Plotkin (eds.),
|
||||||
//From Semantics to Computer Science//, Cambridge University Press,
|
//From Semantics to Computer Science//, Cambridge University Press,
|
||||||
|
|||||||
@@ -33,8 +33,9 @@ Pes,Persian,persian,,,,,,,,y
|
|||||||
Pnb,Punjabi,punjabi,,,y,,,,,y
|
Pnb,Punjabi,punjabi,,,y,,,,,y
|
||||||
Pol,Polish,polish,,,,,,,,y
|
Pol,Polish,polish,,,,,,,,y
|
||||||
Por,Portuguese,portuguese,Romance,,y,,,,y,y
|
Por,Portuguese,portuguese,Romance,,y,,,,y,y
|
||||||
Ron,Pomanian,romanian,,,y,,,,,y
|
Ron,Romanian,romanian,,,y,,,,,y
|
||||||
Rus,Russian,russian,,,y,,,,,y
|
Rus,Russian,russian,,,y,,,,,y
|
||||||
|
Slv,Slovenian,slovenian,,,,,n,n,,n
|
||||||
Snd,Sindhi,sindhi,,,,,,,,y
|
Snd,Sindhi,sindhi,,,,,,,,y
|
||||||
Spa,Spanish,spanish,Romance,,y,,,,y,y
|
Spa,Spanish,spanish,Romance,,y,,,,y,y
|
||||||
Swa,Swahili,swahili,,,,n,n,n,y,n
|
Swa,Swahili,swahili,,,,n,n,n,y,n
|
||||||
|
|||||||
|
@@ -115,6 +115,9 @@ abstract Extend = Cat ** {
|
|||||||
ExistMassCN : CN -> Cl ; -- there is beer / there is no beer
|
ExistMassCN : CN -> Cl ; -- there is beer / there is no beer
|
||||||
ExistPluralCN : CN -> Cl ; -- there are trees / there are no trees
|
ExistPluralCN : CN -> Cl ; -- there are trees / there are no trees
|
||||||
|
|
||||||
|
-- generalisation of existential, with adverb as a parameter
|
||||||
|
AdvIsNP : Adv -> NP -> Cl ; -- here is the tree / here are the trees
|
||||||
|
|
||||||
-- infinitive for purpose AR 21/8/2013
|
-- infinitive for purpose AR 21/8/2013
|
||||||
|
|
||||||
PurposeVP : VP -> Adv ; -- to become happy
|
PurposeVP : VP -> Adv ; -- to become happy
|
||||||
@@ -206,6 +209,8 @@ abstract Extend = Cat ** {
|
|||||||
DetNPMasc : Det -> NP ;
|
DetNPMasc : Det -> NP ;
|
||||||
DetNPFem : Det -> NP ;
|
DetNPFem : Det -> NP ;
|
||||||
|
|
||||||
|
UseComp_estar : Comp -> VP ; -- (Cat, Spa, Por) "está cheio" instead of "é cheio"
|
||||||
|
|
||||||
iFem_Pron : Pron ; -- I (Fem)
|
iFem_Pron : Pron ; -- I (Fem)
|
||||||
youFem_Pron : Pron ; -- you (Fem)
|
youFem_Pron : Pron ; -- you (Fem)
|
||||||
weFem_Pron : Pron ; -- we (Fem)
|
weFem_Pron : Pron ; -- we (Fem)
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ concrete AdverbAra of Adverb = CatAra ** open ResAra, Prelude in {
|
|||||||
|
|
||||||
PrepNP prep np = {s = prep.s ++ bindIf (orB np.a.isPron prep.binds) ++ np.s ! prep.c} ;
|
PrepNP prep np = {s = prep.s ++ bindIf (orB np.a.isPron prep.binds) ++ np.s ! prep.c} ;
|
||||||
|
|
||||||
AdAdv ad av = cc2 av ad ;
|
AdAdv ad av = cc2 ad av ;
|
||||||
|
|
||||||
-- : Subj -> S -> Adv ; -- when she sleeps
|
-- : Subj -> S -> Adv ; -- when she sleeps
|
||||||
SubjS subj s = {s = subj.s ++ s.s ! subj.o} ;
|
SubjS subj s = {s = subj.s ++ s.s ! subj.o} ;
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ concrete CatAra of Cat = CommonX - [Utt] ** open ResAra, Prelude, ParamX in {
|
|||||||
SSlash,
|
SSlash,
|
||||||
S = {s : Order => Str} ; -- subordinate clause has nominal word order and subject in acc
|
S = {s : Order => Str} ; -- subordinate clause has nominal word order and subject in acc
|
||||||
QS = {s : QForm => Str} ;
|
QS = {s : QForm => Str} ;
|
||||||
RS = {s : Agr => Case => Str} ; -- case because the relative pronoun inflects in case
|
RS = {s : PerGenNum => Case => Str} ; -- case because the relative pronoun inflects in case
|
||||||
|
|
||||||
-- Sentence
|
-- Sentence
|
||||||
|
|
||||||
@@ -77,12 +77,12 @@ concrete CatAra of Cat = CommonX - [Utt] ** open ResAra, Prelude, ParamX in {
|
|||||||
-- Open lexical classes, e.g. Lexicon
|
-- Open lexical classes, e.g. Lexicon
|
||||||
|
|
||||||
V, VQ, VA = ResAra.Verb ; -- = {s : VForm => Str} ;
|
V, VQ, VA = ResAra.Verb ; -- = {s : VForm => Str} ;
|
||||||
V2, V2A = ResAra.Verb2 ;
|
VV = ResAra.Verb ** {s2 : Str ; sc : Preposition} ; -- s2 is complementiser
|
||||||
VV = ResAra.Verb2 ** {sc : Preposition} ; -- c2 is for verb
|
V2, V2A, V2Q = ResAra.Verb2 ;
|
||||||
V2S, V2Q = ResAra.Verb2 ;
|
V2V = ResAra.Verb2 ** {s2 : Str ; sc : Preposition} ; -- s2 is complementiser, c2 is for dir.obj
|
||||||
VS = ResAra.Verb ** {o : Order; s2 : Str} ;
|
V2S = ResAra.Verb2 ** {s2 : Str ; o : Order} ;
|
||||||
|
VS = ResAra.Verb ** {s2 : Str ; o : Order} ;
|
||||||
V3 = ResAra.Verb3 ;
|
V3 = ResAra.Verb3 ;
|
||||||
V2V = ResAra.Verb3 ** {sc : Preposition} ; -- c3 is for verb, c2 is for dir.obj
|
|
||||||
|
|
||||||
A = ResAra.Adj ;
|
A = ResAra.Adj ;
|
||||||
A2 = ResAra.Adj2 ;
|
A2 = ResAra.Adj2 ;
|
||||||
@@ -96,6 +96,6 @@ linref
|
|||||||
|
|
||||||
CN = \cn -> uttCN cn ! Masc ;
|
CN = \cn -> uttCN cn ! Masc ;
|
||||||
N = \n -> uttCN (useN n) ! Masc ;
|
N = \n -> uttCN (useN n) ! Masc ;
|
||||||
VP = \vp -> uttVP vp ! Masc ;
|
VP = \vp -> uttVP VPPerf vp ! Masc ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ lin
|
|||||||
|
|
||||||
oper
|
oper
|
||||||
|
|
||||||
amount_N : N = mkN "مِقْدَار" "مَقَادِير" masc nohum ;
|
amount_N : N = mkN "مِقْدَار" "مَقَادِير" masc nohum ;
|
||||||
|
|
||||||
-- hack used in the name constructions
|
-- hack used in the name constructions
|
||||||
toNP : Bool -> NP -> NP = \b -> if_then_else NP b R.emptyNP ;
|
toNP : Bool -> NP -> NP = \b -> if_then_else NP b R.emptyNP ;
|
||||||
@@ -85,9 +85,12 @@ lin
|
|||||||
myAge : NP = E.ApposNP me (mkNP (mkDet subjPron) L.name_N) ;
|
myAge : NP = E.ApposNP me (mkNP (mkDet subjPron) L.name_N) ;
|
||||||
in mkQCl what_IP myAge ;
|
in mkQCl what_IP myAge ;
|
||||||
|
|
||||||
-- hungry_VP =
|
hungry_VP = mkVP hungry_A ;
|
||||||
-- thirsty_VP =
|
thirsty_VP = mkVP thirsty_A ;
|
||||||
|
|
||||||
|
oper
|
||||||
|
hungry_A = mkA "جءع" "فَاعِل" ;
|
||||||
|
thirsty_A = mkA True "عطش" "فَعْلَان" "فَعْلَى" ;
|
||||||
lincat Language = N ;
|
lincat Language = N ;
|
||||||
|
|
||||||
lin InLanguage l = mkAdv in_Prep (mkNP l) ;
|
lin InLanguage l = mkAdv in_Prep (mkNP l) ;
|
||||||
|
|||||||
@@ -2,61 +2,75 @@
|
|||||||
|
|
||||||
concrete ExtendAra of Extend =
|
concrete ExtendAra of Extend =
|
||||||
CatAra ** ExtendFunctor - [
|
CatAra ** ExtendFunctor - [
|
||||||
GenNP, SlashBareV2S, PredAPVP, GenModNP, ExistsNP,
|
GenNP, ApposNP, ICompAP, DetNPMasc, DetNPFem,
|
||||||
StrandRelSlash, ExistPluralCN, ExistMassCN, ExistCN, EmptyRelSlash, DetNPMasc, DetNPFem,
|
EmptyRelSlash, PredAPVP,
|
||||||
ComplBareVS, ComplDirectVS, ComplDirectVQ,
|
ComplDirectVS, ComplDirectVQ, -- because of Utt
|
||||||
ICompAP,
|
VPS, MkVPS, PredVPS, BaseVPS, ConsVPS, ConjVPS
|
||||||
VPS, MkVPS, PredVPS, BaseVPS, ConsVPS, ConjVPS,
|
|
||||||
ApposNP
|
|
||||||
]
|
]
|
||||||
with (Grammar=GrammarAra)
|
with (Grammar=GrammarAra)
|
||||||
** open
|
** open
|
||||||
|
|
||||||
ParamX,
|
|
||||||
ResAra,
|
ResAra,
|
||||||
Prelude,
|
Prelude,
|
||||||
|
ParadigmsAra,
|
||||||
RelativeAra,
|
RelativeAra,
|
||||||
Coordination
|
Coordination
|
||||||
|
|
||||||
in {
|
in {
|
||||||
|
|
||||||
lin
|
lin
|
||||||
GenNP np = baseQuant ** {s = \\_,_,_,_ => np.s ! Gen ; d = Const} ;
|
-- If the NP is a pronoun, just use PossPron
|
||||||
|
GenNP np = case np.a.isPron of {
|
||||||
|
True => Grammar.PossPron (pgn2pron np.a.pgn) ;
|
||||||
|
False => let g = np.s ! Gen in mkQuant3 g g g Const
|
||||||
|
} ;
|
||||||
|
|
||||||
-- : NP -> NP -> NP
|
-- : NP -> NP -> NP
|
||||||
ApposNP np1 np2 = np2 ** {s = \\c => np1.s ! c ++ np2.s ! c} ;
|
ApposNP np1 np2 = np2 ** {s = \\c => np1.s ! c ++ np2.s ! c} ;
|
||||||
|
|
||||||
-- : AP -> IComp ; -- "how old"
|
-- : AP -> IComp ; -- "how old"
|
||||||
ICompAP ap = {s = \\gn => "كَمْ" ++ ap.s ! NoHum ! gn.g ! gn.n ! Indef ! Acc} ;
|
ICompAP ap = {s = \\gn => "كَمْ" ++ ap.s ! NoHum ! gn.g ! gn.n ! Indef ! Acc} ;
|
||||||
|
|
||||||
-- : ClSlash -> RCl -- he lives in
|
-- : AP -> VP -> Cl ; -- it is good to walk
|
||||||
EmptyRelSlash = RelSlash (IdRP ** {s = \\_ => []}) ;
|
PredAPVP ap vp =
|
||||||
|
let isGood : Str = "مِنَ" ++ ap.s ! Hum ! Masc ! Sg ! Def ! Gen ;
|
||||||
|
toWalk : Str = "ال" ++ BIND ++ (uttVP VPGer vp ! Masc) ; -- TODO: Masdar into NForm=>Str?
|
||||||
|
goodToWalk_Adv : Adv = lin Adv {s = isGood ++ toWalk} ;
|
||||||
|
in PredVP emptyNP (UseComp (CompAdv goodToWalk_Adv)) ;
|
||||||
|
|
||||||
lincat
|
-- : Det -> NP
|
||||||
VPS = {s : PerGenNum => Str} ; -- finite VP's with tense and polarity
|
DetNPMasc det = emptyNP ** {s = det.s ! NoHum ! Masc} ;
|
||||||
[VPS] = {s1,s2 : PerGenNum => Str} ;
|
DetNPFem det = emptyNP ** {s = det.s ! NoHum ! Fem} ;
|
||||||
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)
|
|
||||||
vp.obj.s -- BIND is taken care of when the VP was made, no need to add one here
|
|
||||||
(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.
|
|
||||||
} ;
|
|
||||||
|
|
||||||
-- maybe more robust to use إِيَّا as object carrier if the VPS
|
|
||||||
-- consists of several VPSs; like it's done in Slash3V3 /IL
|
|
||||||
BaseVPS = twoTable PerGenNum ;
|
|
||||||
ConsVPS = consrTable PerGenNum comma ;
|
|
||||||
ConjVPS = conjunctDistrTable PerGenNum ;
|
|
||||||
|
|
||||||
PredVPS np vps = {
|
-- : ClSlash -> RCl -- he lives in
|
||||||
s = \\_ => np.s ! Nom ++ vps.s ! np.a.pgn -- first quick version with order always Nominal.
|
EmptyRelSlash = RelSlash (IdRP ** {s = \\_ => []}) ;
|
||||||
} ; -- if necessary, change VPS into {s : PerGenNum => Order => {before,after : Str}}
|
|
||||||
|
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)
|
||||||
|
vp.obj.s -- BIND is taken care of when the VP was made, no need to add one here
|
||||||
|
(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.
|
||||||
|
} ;
|
||||||
|
|
||||||
|
-- maybe more robust to use إِيَّا as object carrier if the VPS
|
||||||
|
-- consists of several VPSs; like it's done in Slash3V3 /IL
|
||||||
|
BaseVPS = twoTable PerGenNum ;
|
||||||
|
ConsVPS = consrTable PerGenNum comma ;
|
||||||
|
ConjVPS = conjunctDistrTable 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}}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,19 +25,22 @@ concrete IdiomAra of Idiom = CatAra ** open
|
|||||||
CleftAdv adv s =
|
CleftAdv adv s =
|
||||||
let comp : Comp = CompAdv (lin Adv {s = adv.s ++ s.s ! Verbal}) ; -- no idea about word order /IL
|
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
|
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
|
in predVP emptyNP (UseV pass_V ** {vtype=Copula ; pred=comp}) ; -- very hacky /IL
|
||||||
|
|
||||||
-- : NP -> Cl ; -- there is a house
|
-- : NP -> Cl ; -- there is a house
|
||||||
ExistNP np =
|
ExistNP np =
|
||||||
predVP (emptyNP ** {s=\\c=>"هُنَاكَ"}) (UseComp (CompNP np)) ; -- IL
|
predVP (indeclNP "هُنَاكَ" Sg) (UseComp (CompNP np)) ; -- IL
|
||||||
|
|
||||||
-- ExistIP : IP -> QCl ; -- which houses are there
|
-- : IP -> QCl ; -- which houses are there
|
||||||
|
ExistIP ip = let cl = ExistNP (ip2np ip False) in {
|
||||||
|
s = \\t,p,q => cl.s ! t ! p ! Nominal -- IL guessed
|
||||||
|
} ;
|
||||||
|
|
||||||
-- 7/12/2012 generalizations of these
|
-- 7/12/2012 generalizations of these
|
||||||
|
|
||||||
-- : NP -> Adv -> Cl ; -- there is a house in Paris
|
-- : NP -> Adv -> Cl ; -- there is a house in Paris
|
||||||
ExistNPAdv np adv =
|
ExistNPAdv np adv =
|
||||||
predVP (emptyNP ** {s=\\c=>"هُنَاكَ"}) (AdvVP (UseComp (CompNP np)) adv) ; -- IL
|
predVP (indeclNP "هُنَاكَ" Sg) (AdvVP (UseComp (CompNP np)) adv) ; -- IL
|
||||||
|
|
||||||
-- ExistIPAdv : IP -> Adv -> QCl ; -- which houses are there in Paris
|
-- ExistIPAdv : IP -> Adv -> QCl ; -- which houses are there in Paris
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ flags
|
|||||||
lin
|
lin
|
||||||
|
|
||||||
airplane_N = sdfN "طءر" "فاعِلة" Fem NoHum ;
|
airplane_N = sdfN "طءر" "فاعِلة" Fem NoHum ;
|
||||||
answer_V2S = dirV2 (v3 "جوب") ;
|
answer_V2S = mkV2S (v3 "جوب") ;
|
||||||
apartment_N = brkN "شقّ" "فِعّة" "فِعَل" Fem NoHum ;
|
apartment_N = brkN "شقّ" "فِعّة" "فِعَل" Fem NoHum ;
|
||||||
apple_N = sdfN "تفح" "فِعّالة" Fem NoHum ;
|
apple_N = sdfN "تفح" "فِعّالة" Fem NoHum ;
|
||||||
art_N = brkN "فنن" "فَعّ" "فُعُول" Masc NoHum ;
|
art_N = brkN "فنن" "فَعّ" "فُعُول" Masc NoHum ;
|
||||||
@@ -142,7 +142,7 @@ flags
|
|||||||
old_A = sndA "قدم" "فَعِيل" ;
|
old_A = sndA "قدم" "فَعِيل" ;
|
||||||
open_V2 = dirV2 (regV "يَفتَح") ;
|
open_V2 = dirV2 (regV "يَفتَح") ;
|
||||||
-- open_V2 = dirV2 (v1 "فتح" a a ) ;
|
-- open_V2 = dirV2 (v1 "فتح" a a ) ;
|
||||||
paint_V2A = mkV2A (regV "يَدهَن" ) [] ;
|
paint_V2A = dirV2 (regV "يَدهَن" ) ;
|
||||||
-- paint_V2A = mkV2A (v1 "دهن" a a ) [] ;
|
-- paint_V2A = mkV2A (v1 "دهن" a a ) [] ;
|
||||||
paper_N = brkN "ورق" "فَعَلة" "أَفعَال" Fem NoHum ;
|
paper_N = brkN "ورق" "فَعَلة" "أَفعَال" Fem NoHum ;
|
||||||
paris_PN = mkPN "بارِيس" Fem NoHum ;
|
paris_PN = mkPN "بارِيس" Fem NoHum ;
|
||||||
|
|||||||
@@ -11,8 +11,6 @@ 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 ConjRS : Conj -> ListRS -> RS = notYet "ConjRS" ;
|
oper ConjRS : Conj -> ListRS -> RS = notYet "ConjRS" ;
|
||||||
oper ConsRS : RS -> ListRS -> ListRS = notYet "ConsRS" ;
|
oper ConsRS : RS -> ListRS -> ListRS = notYet "ConsRS" ;
|
||||||
oper DetNP : Det -> NP = notYet "DetNP" ;
|
|
||||||
oper ExistIP : IP -> QCl = notYet "ExistIP" ;
|
|
||||||
oper FunRP : Prep -> NP -> RP -> RP = notYet "FunRP" ;
|
oper FunRP : Prep -> NP -> RP -> RP = notYet "FunRP" ;
|
||||||
oper ImpPl1 : VP -> Utt = notYet "ImpPl1" ;
|
oper ImpPl1 : VP -> Utt = notYet "ImpPl1" ;
|
||||||
oper PConjConj : Conj -> PConj = notYet "PConjConj" ;
|
oper PConjConj : Conj -> PConj = notYet "PConjConj" ;
|
||||||
@@ -23,10 +21,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 SlashVS : NP -> VS -> SSlash -> ClSlash = notYet "SlashVS" ;
|
oper SlashVS : NP -> VS -> SSlash -> ClSlash = notYet "SlashVS" ;
|
||||||
oper SubjS : Subj -> S -> Adv = notYet "SubjS" ;
|
oper SubjS : Subj -> S -> Adv = notYet "SubjS" ;
|
||||||
oper VocNP : NP -> Voc = notYet "VocNP" ;
|
oper VocNP : NP -> Voc = notYet "VocNP" ;
|
||||||
oper pot3plus : Sub1000 -> Sub1000 -> Sub1000000 = notYet "pot3plus" ;
|
oper pot3plus : Sub1000 -> Sub1000 -> Sub1000000 = notYet "pot3plus" ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -47,7 +47,14 @@ lin
|
|||||||
|
|
||||||
UsePron p = p ;
|
UsePron p = p ;
|
||||||
|
|
||||||
DetNP det = emptyNP ** {s = det.s ! NoHum ! Masc} ; ----
|
DetNP det = case det.isEmpty of {
|
||||||
|
True => case <det.d,det.n> of { -- if the s field is empty, make up some other determiner
|
||||||
|
<Def,One> => he_Pron ;
|
||||||
|
<Def,_> => theyMasc_Pron ;
|
||||||
|
<Indef,One> => emptyNP ** {s = someSg_Det.s ! NoHum ! Masc} ;
|
||||||
|
_ => emptyNP ** {s = somePl_Det.s ! NoHum ! Masc}
|
||||||
|
} ;
|
||||||
|
False => emptyNP ** {s = det.s ! NoHum ! Masc} } ;
|
||||||
|
|
||||||
PredetNP det np = np ** {
|
PredetNP det np = np ** {
|
||||||
s = \\c => case det.isDecl of {
|
s = \\c => case det.isDecl of {
|
||||||
@@ -75,7 +82,7 @@ lin
|
|||||||
|
|
||||||
DetQuantOrd quant num ord = quant ** {
|
DetQuantOrd quant num ord = quant ** {
|
||||||
s = \\h,g,c => let d = toDef quant.d num.n in
|
s = \\h,g,c => let d = toDef quant.d num.n in
|
||||||
quant.s ! Pl ! h ! g ! c
|
quant.s ! Pl ! h ! g ! c -- TODO what is this Pl? Was there when I started /IL
|
||||||
++ num.s ! g ! d ! c
|
++ num.s ! g ! d ! c
|
||||||
--FIXME check this:
|
--FIXME check this:
|
||||||
++ ord.s ! g
|
++ ord.s ! g
|
||||||
@@ -107,7 +114,7 @@ lin
|
|||||||
s = \\_,_,_,_ => BIND ++ p.s ! Gen;
|
s = \\_,_,_,_ => BIND ++ p.s ! Gen;
|
||||||
d = Poss;
|
d = Poss;
|
||||||
is1sg = is1sg p.a ;
|
is1sg = is1sg p.a ;
|
||||||
isPron = True} ;
|
isPron = p.a.isPron} ;
|
||||||
|
|
||||||
NumSg = {
|
NumSg = {
|
||||||
s = \\_,_,_ => [] ;
|
s = \\_,_,_ => [] ;
|
||||||
@@ -192,19 +199,19 @@ lin
|
|||||||
|
|
||||||
RelCN cn rs = cn ** {
|
RelCN cn rs = cn ** {
|
||||||
s2 = \\n,s,c => cn.s2 ! n ! s ! c
|
s2 = \\n,s,c => cn.s2 ! n ! s ! c
|
||||||
++ rs.s ! {pgn=Per3 cn.g n ; isPron=False} ! c ;
|
++ rs.s ! Per3 cn.g n ! c ;
|
||||||
isHeavy = True
|
isHeavy = True
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|
||||||
RelNP np rs = np ** {
|
RelNP np rs = np ** {
|
||||||
s = \\c => np.s ! c ++ rs.s ! np.a ! c ;
|
s = \\c => np.s ! c ++ rs.s ! np.a.pgn ! c ;
|
||||||
isHeavy = True
|
isHeavy = True
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
AdvCN,
|
AdvCN,
|
||||||
SentCN = \cn,ss -> cn ** {
|
SentCN = \cn,ss -> cn ** {
|
||||||
s2 = \\n,d,c => cn.s2 ! n ! d ! c ++ ss.s ;
|
np = \\c => cn.np ! c ++ ss.s ;
|
||||||
isHeavy = True
|
isHeavy = True
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
--1 Arabic Lexical Paradigms
|
--1 Arabic Lexical Paradigms
|
||||||
--
|
--
|
||||||
-- Ali El Dada 2005--2006
|
-- Ali El Dada 2005--2006
|
||||||
|
-- Inari Listenmaa 2018-
|
||||||
--
|
--
|
||||||
-- This is an API to the user of the resource grammar
|
-- This is an API to the user of the resource grammar
|
||||||
-- for adding lexical items. It gives functions for forming
|
-- for adding lexical items. It gives functions for forming
|
||||||
@@ -26,9 +27,8 @@
|
|||||||
resource ParadigmsAra = open
|
resource ParadigmsAra = open
|
||||||
Predef,
|
Predef,
|
||||||
Prelude,
|
Prelude,
|
||||||
MorphoAra,
|
ResAra,
|
||||||
OrthoAra,
|
OrthoAra,
|
||||||
(ResAra=ResAra),
|
|
||||||
(A=AdjectiveAra),
|
(A=AdjectiveAra),
|
||||||
CatAra
|
CatAra
|
||||||
in {
|
in {
|
||||||
@@ -37,98 +37,71 @@ resource ParadigmsAra = open
|
|||||||
|
|
||||||
oper
|
oper
|
||||||
|
|
||||||
Case : Type ;
|
Case : Type ; -- Argument to mkPrep
|
||||||
nom : Case ;
|
nom : Case ; -- Nominative
|
||||||
acc : Case ;
|
acc : Case ; -- Accusative
|
||||||
gen : Case ;
|
gen : Case ; -- Genitive
|
||||||
|
|
||||||
-- Prepositions are used in many-argument functions for rection.
|
Gender : Type ; -- Argument to mkN and mkPN
|
||||||
Preposition : Type ;
|
masc : Gender ; -- Masculine
|
||||||
noPrep : Preposition ;
|
fem : Gender ; -- Feminine
|
||||||
casePrep : Case -> Preposition ;
|
|
||||||
--- TODO: continue, add all over the grammar
|
|
||||||
|
|
||||||
Gender : Type ;
|
Number : Type ; -- Argument to mkConj ("NP and NP" plural; "NP or NP" singular), and special cases of mkN, where nominal attribute is included in the N.
|
||||||
masc : Gender ;
|
sg : Number ; -- Singular
|
||||||
fem : Gender ;
|
pl : Number ; -- Plural
|
||||||
|
|
||||||
Number : Type ;
|
Species : Type ; -- Argument to mkN.
|
||||||
sg : Number ;
|
hum : Species ; -- Human nouns (teacher, woman, brother, …)
|
||||||
pl : Number ;
|
nohum : Species ; -- Any other nouns (house, dog, …)
|
||||||
|
|
||||||
Species : Type ;
|
Vowel : Type ; -- Argument to mkV, when constructing verbs of Form I.
|
||||||
hum : Species ;
|
va : Vowel ; -- a (fatha) as the perfect or imperfect vowel, e.g. فعَل
|
||||||
nohum : Species ;
|
vi : Vowel ; -- i (kasra) as the perfect or imperfect vowel, e.g فعِل
|
||||||
|
vu : Vowel ; -- u (damma) as the perfect or imperfect vowel, e.g. فعُل
|
||||||
Vowel : Type ;
|
|
||||||
va : Vowel ;
|
|
||||||
vi : Vowel ;
|
|
||||||
vu : Vowel ;
|
|
||||||
|
|
||||||
--2 Nouns
|
--2 Nouns
|
||||||
|
|
||||||
-- Overloaded operator for main cases
|
-- Overloaded operator for main cases
|
||||||
|
|
||||||
|
mkN : overload {
|
||||||
|
mkN : (sg : Str) -> N ; -- Takes the singular without case marking, gives a non-human regular noun. Plural is sound feminine if the word ends in ة, otherwise sound masculine.
|
||||||
|
mkN : (sg,pl : Str) -> Gender -> Species -> N ; -- Takes the singular and the plural (sound or broken) forms without case marking, returns a noun with basic triptote declension. NB for irregular/weak roots, safer to use brkN, sdfN or sdmN, which take root and pattern.
|
||||||
|
mkN : (root,sgPat,plPat : Str) -> Gender -> Species -> N ; -- (This is brkN; see its description.)
|
||||||
|
mkN : Species -> N -> N ; -- Change species (hum/nohum) of a noun.
|
||||||
|
mkN : N -> (attr : Str) -> N ; -- Compound noun with invariant attribute.
|
||||||
|
mkN : N -> N -> N ; -- Compound noun with singular genitive attribute, but inflects in state.
|
||||||
|
mkN : Number -> N -> N -> N ; -- Compound noun with genitive attribute, but inflects in state. Attribute's number specified by 1st arg.
|
||||||
|
} ;
|
||||||
|
|
||||||
mkN : overload {
|
brkN : (root,sgPat,brokenPlPat : Str) -> Gender -> Species -> N ; -- Takes a root string, a singular pattern string, a broken plural pattern string, a gender, and species. Gives a noun. (This is also overloaded as mkN.)
|
||||||
mkN : (sg : Str) -> N ; -- non-human regular nouns
|
|
||||||
mkN : Species -> N -> N ;
|
sdfN : (root,sgPat : Str) -> Gender -> Species -> N ; -- Takes a root string, a singular pattern string, a gender, and species. Gives a noun whose plural is sound feminine.
|
||||||
mkN : (sg,pl : Str) -> Gender -> Species -> N ;
|
|
||||||
mkN : NTable -> Gender -> Species -> N ; -- loan words, irregular
|
sdmN : (root,sgPat : Str) -> Gender -> Species -> N ; -- Takes a root string, a singular pattern string, a gender, and species. Gives a noun whose plural is sound masculine
|
||||||
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 with singular genitive attribute, but inflects in state.
|
|
||||||
mkN : Number -> N -> N -> N ; -- Compound noun with genitive attribute, but inflects in state. Attribute's number specified by 1st arg.
|
|
||||||
mkN : N -> A -> N ; -- Force adjective modifier into the noun. Adjective inflects in state, case and number.
|
|
||||||
mkN : Number -> N -> A -> N ; -- Force adjective modifier into the noun. Adjective inflects in state and case. Adjective's number specified by 1st arg.
|
|
||||||
mkN : N -> AP -> N ; -- Force AP modifier into the noun. AP inflects in state, case and number.
|
|
||||||
--- 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")
|
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 ;
|
|
||||||
|
|
||||||
--Takes a root string, a singular pattern string, a broken plural
|
|
||||||
--pattern string, a gender, and species. Gives a noun.
|
|
||||||
brkN : Str -> Str -> Str -> Gender -> Species -> N ;
|
|
||||||
|
|
||||||
--Takes a root string, a singular pattern string, a gender,
|
|
||||||
--and species. Gives a noun whose plural is sound feminine.
|
|
||||||
sdfN : Str -> Str -> Gender -> Species -> N ;
|
|
||||||
|
|
||||||
--takes a root string, a singular pattern string, a gender,
|
|
||||||
--and species. Gives a noun whose plural is sound masculine
|
|
||||||
sdmN : Str -> Str -> Gender -> Species -> N ;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
--3 Proper names
|
--3 Proper names
|
||||||
|
|
||||||
mkPN = overload {
|
mkPN = overload {
|
||||||
mkPN : Str -> PN -- Fem Hum if ends with ة, otherwise Masc Hum
|
mkPN : Str -> PN -- Predictable PN from a Str: fem hum if ends in ة, otherwise masc hum.
|
||||||
= smartPN ;
|
= smartPN ;
|
||||||
mkPN : N -> PN
|
mkPN : N -> PN -- Make a PN out of N. The PN is in construct state.
|
||||||
= \n -> lin PN (n ** {s = \\c => n.s ! Sg ! Const ! c ++ n.s2 ! Sg ! Def ! c }) ; -- no idea /IL
|
= \n -> lin PN (n ** {
|
||||||
mkPN : Str -> Gender -> Species -> PN
|
s = \\c => n.s ! Sg ! Const ! c
|
||||||
|
++ n.s2 ! Sg ! Def ! c -- NB this hack works for idaafa constructions (if you used mkN : N -> N -> N), but wrong for mkN : N -> A -> N. /IL
|
||||||
|
}) ;
|
||||||
|
mkPN : Str -> Gender -> Species -> PN -- Make a PN out of string, gender and species.
|
||||||
= mkFullPN ;
|
= mkFullPN ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
mkFullPN : Str -> Gender -> Species -> PN ;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
--3 Relational nouns
|
--3 Relational nouns
|
||||||
|
|
||||||
mkN2 : overload {
|
mkN2 : overload {
|
||||||
mkN2 : N -> Preposition -> N2 ; -- ready-made preposition
|
mkN2 : N -> Prep -> N2 ; -- Noun and a ready-made preposition.
|
||||||
mkN2 : N -> Str -> N2 ; -- preposition given as a string
|
mkN2 : N -> Str -> N2 ; -- Noun, preposition given as a string, complement case genitive.
|
||||||
mkN2 : N -> N2 ; -- no preposition
|
mkN2 : N -> N2 ; -- Noun, no preposition, complement case genitive.
|
||||||
mkN2 : Str -> N2 ; -- no preposition, predictable inflection
|
mkN2 : Str -> N2 ; -- Predictable inflection, no preposition, complement case genitive.
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
mkN3 : overload {
|
mkN3 : overload {
|
||||||
@@ -136,47 +109,41 @@ resource ParadigmsAra = open
|
|||||||
mkN3 : N -> Str -> Str -> N3 ; -- prepositions given as strings
|
mkN3 : N -> Str -> Str -> N3 ; -- prepositions given as strings
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|
||||||
--2 Adjectives
|
--2 Adjectives
|
||||||
|
|
||||||
-- Overloaded operator for main cases
|
-- Overloaded operator for main cases
|
||||||
|
|
||||||
mkA = overload {
|
mkA = overload {
|
||||||
mkA : (root,sg : Str) -> A -- adjective with sound plural; takes root string and sg. pattern string
|
mkA : (root : Str) -> A -- adjective with positive form aFCal
|
||||||
= \r,p -> lin A (sndA r p);
|
= \r -> lin A (clrA r);
|
||||||
mkA : (root : Str) -> A -- adjective with positive form aFCal
|
mkA : (root,sgPat : Str) -> A -- adjective with sound plural, takes root string and sg. pattern string
|
||||||
= \r -> lin A (clrA r);
|
= \r,p -> lin A (sndA r p);
|
||||||
mkA : (root,sg,pl : Str) -> A -- adjective with broken plural
|
mkA : (root,sgPat,plPat : Str) -> A -- adjective with broken plural, same for both fem. and masc.
|
||||||
= \r,s,p -> lin A (brkA r s p) ;
|
= \r,s,p -> lin A (brkA r s p) ;
|
||||||
mkA : A -> Str -> A = \a,s -> a ** { -- add non-inflecting component after adjective
|
mkA : (isSoundFem : Bool) -> (root,sg,pl : Str) -> A -- adjective with broken plural, boolean argument whether feminine is sound (True) or shared with masc (False)
|
||||||
s = table {af => a.s ! af ++ s}
|
= \b,r,s,p -> lin A (brkABool b r s p) ;
|
||||||
|
mkA : A -> Str -> A -- add non-inflecting component after adjective
|
||||||
|
= \a,s -> a ** {s = table {af => a.s ! af ++ s}} ;
|
||||||
|
mkA : Str -> A -> A -- add non-inflecting component before adjective
|
||||||
|
= \s,a -> a ** {s = table {af => s ++ a.s ! af}}
|
||||||
} ;
|
} ;
|
||||||
mkA : Str -> A -> A = \s,a -> a ** { -- add non-inflecting component before adjective
|
|
||||||
s = table {af => s ++ a.s ! af}
|
|
||||||
}
|
|
||||||
|
|
||||||
} ;
|
nisbaA : Str -> Adj ; -- Forms relative adjectives with the suffix ِيّ. Takes either the stem and adds يّ, or the whole word ending in يّ and just adds declension.
|
||||||
|
|
||||||
idaafaA : N -> A -> A ; -- first argument will be in constructus but inflect in case, adjective in genitive, but inflect in gender, number and definiteness. e.g. غَيْرُ طَيِّبٍ
|
idaafaA : N -> A -> A ; -- Forms adjectives of type غَيْرُ طَيِّبٍ 'not good'. Noun is in construct state but inflects in case. Adjective is in genitive, but inflects in gender, number and state.
|
||||||
|
|
||||||
degrA : (posit,compar,plur : Str) -> A ;
|
degrA : (masc,fem,plur : Str) -> A ; -- Adjective where masculine singular is also the comparative form. Indeclinable singular, basic triptote declension for dual and plural.
|
||||||
|
|
||||||
irregFemA : (masc : A) -> (fem : A) -> A ; -- adjective with irregular feminine. Takes two adjectives (masc. "regular" and fem. "regular") and puts them together.
|
irregFemA : (masc : A) -> (fem : A) -> A ; -- Adjective with irregular feminine. Takes two adjectives (masc. regular and fem. "regular", with fem. forms in the masc fields,) and puts them together.
|
||||||
|
|
||||||
--Takes a root string and a pattern string
|
invarGenderA : A -> A ; -- Forms an adjective that has no feminine form. Takes a regular adjective and forces the masculine forms into the fem. table.
|
||||||
sndA : (root,patt : Str) -> Adj ;
|
|
||||||
|
|
||||||
--Takes a root string only
|
|
||||||
clrA : (root : Str) -> Adj ; -- forms adjectives of type aFCal
|
|
||||||
|
|
||||||
nisbaA : Str -> Adj ; -- forms relative adjectives by adding the suffix ِيّ
|
|
||||||
|
|
||||||
--3 Two-place adjectives
|
--3 Two-place adjectives
|
||||||
--
|
--
|
||||||
-- Two-place adjectives need a preposition for their second argument.
|
-- Two-place adjectives need a preposition for their second argument.
|
||||||
|
|
||||||
mkA2 : overload {
|
mkA2 : overload {
|
||||||
mkA2 : A -> Preposition -> A2 ;
|
mkA2 : A -> Prep -> A2 ;
|
||||||
mkA2 : A -> Str -> A2
|
mkA2 : A -> Str -> A2
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -205,14 +172,21 @@ resource ParadigmsAra = open
|
|||||||
-- build $PP$s in the resource API. Requires a string and a case.
|
-- build $PP$s in the resource API. Requires a string and a case.
|
||||||
|
|
||||||
mkPrep : overload {
|
mkPrep : overload {
|
||||||
mkPrep : Str -> Prep ;
|
mkPrep : Str -> Prep ; -- Build a preposition out of the given string, with genitive case.
|
||||||
mkPrep : Str -> Case -> Prep
|
mkPrep : Str -> Case -> Prep ; -- Build a preposition out of the given string and case.
|
||||||
} ; -- preposition in the sense of RGL abstract syntax
|
mkPrep : Case -> Prep ; -- Just a case, no preposition.
|
||||||
|
} ;
|
||||||
|
|
||||||
|
liPrep : Prep ; -- The preposition لِ, binding to its head. Vowel assimilation and def. article elision implemented.
|
||||||
|
biPrep : Prep ; -- The preposition بِ, binding to its head.
|
||||||
|
noPrep : Prep ; -- No preposition at all, "complement case" is nominative.
|
||||||
|
|
||||||
--2 Conjunctions
|
--2 Conjunctions
|
||||||
mkConj : overload {
|
mkConj : overload {
|
||||||
mkConj : Str -> Conj ; -- and
|
mkConj : Str -> Conj ; -- and
|
||||||
mkConj : Str -> Str -> Conj ; -- either … or
|
mkConj : Str -> Str -> Conj ; -- either … or
|
||||||
|
mkConj : Str -> Number -> Conj ; -- and, pl
|
||||||
|
mkConj : Str -> Str -> Number -> Conj ; -- either, or, sg
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
--2 Verbs
|
--2 Verbs
|
||||||
@@ -220,33 +194,41 @@ resource ParadigmsAra = open
|
|||||||
-- Overloaded operations
|
-- Overloaded operations
|
||||||
|
|
||||||
mkV : overload {
|
mkV : overload {
|
||||||
mkV : (imperfect : Str) -> V ; -- The verb in Per3 Sg Masc imperfect tense gives the most information
|
mkV : (imperfect,masdar : Str) -> V ; -- Takes a verb of Form I in 3rd person masculine imperfect tense. Unpredictable masdar given as an argument.
|
||||||
mkV : (root : Str) -> (perf,impf : Vowel) -> V ; -- verb form I ; vowel = a|i|u
|
mkV : (imperfect : Str) -> V ; -- Takes a verb of Form I in 3rd person masculine imperfect tense. Dummy masdar inserted.
|
||||||
mkV : (root : Str) -> VerbForm -> V ; -- FormI .. FormX (no VII, IX) ; default vowels a u for I
|
mkV : (root : Str) -> (perf,impf : Vowel) -> (masdar : Str) -> V ; -- Takes the root of a verb of Form I. Vowel is one of {va,vi,vu}. Unpredictable masdar given as an argument.
|
||||||
|
mkV : (root : Str) -> (perf,impf : Vowel) -> V ; -- Like above, but dummy masdar inserted. This function is here only to keep compatibility for the old API; for new grammars, use the constructor with masdar as an argument.
|
||||||
|
mkV : (root,masdar : Str) -> VerbForm -> V ; -- FormI…FormXI (no IX). XI is quadriliteral. For FormI, default vowels are va and vu. The given masdar is used for FormI, but currently ignored for Forms II-XI.
|
||||||
|
mkV : (root : Str) -> VerbForm -> V ; -- Like above, but dummy masdar inserted for FormI verbs. No difference for FormII-FormXI, because they have predictable masdar.
|
||||||
mkV : V -> (particle : Str) -> V -- V with a non-inflecting particle/phrasal verb
|
mkV : V -> (particle : Str) -> V -- V with a non-inflecting particle/phrasal verb
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- regV : Str -> V ;
|
|
||||||
|
|
||||||
reflV : V -> V ; -- نَفْس in the proper case and with possessive suffix, e.g. نَفْسَكِ
|
reflV : V -> V ; -- نَفْس in the proper case and with possessive suffix, e.g. نَفْسَكِ
|
||||||
|
|
||||||
v1 : Str -> Vowel -> Vowel -> V ; -- Verb Form I : fa`ala, fa`ila, fa`ula
|
v1 = overload {
|
||||||
|
v1 : (root : Str) -> (perf,impf : Vowel) -> (masdar : Str) -> V -- Verb Form I: fa`ala, fa`ila, fa`ula. Verbal noun (masdar) given as the third argument.
|
||||||
|
= v1masdar ;
|
||||||
|
v1 : (root : Str) -> (perf,impf : Vowel) -> V -- To keep compatibility for the old API; dummy masdar inserted.
|
||||||
|
= v1dummymasdar ;
|
||||||
|
} ;
|
||||||
|
|
||||||
v2 : Str -> V ; -- Verb Form II : fa``ala
|
v2 : Str -> V ; -- Verb Form II: fa``ala
|
||||||
|
|
||||||
v3 : Str -> V ; -- Verb Form III : faa`ala
|
v3 : Str -> V ; -- Verb Form III: faa`ala
|
||||||
|
|
||||||
v4 : Str -> V ; -- Verb Form IV : 'af`ala
|
v4 : Str -> V ; -- Verb Form IV: 'af`ala
|
||||||
|
|
||||||
v5 : Str -> V ; -- Verb Form V : tafa``ala
|
v5 : Str -> V ; -- Verb Form V: tafa``ala
|
||||||
|
|
||||||
v6 : Str -> V ; -- Verb Form VI : tafaa`ala
|
v6 : Str -> V ; -- Verb Form VI: tafaa`ala
|
||||||
|
|
||||||
v7 : Str -> V ; -- Verb Form VII : infa`ala
|
v7 : Str -> V ; -- Verb Form VII: infa`ala
|
||||||
|
|
||||||
v8 : Str -> V ; -- Verb Form VIII ifta`ala
|
v8 : Str -> V ; -- Verb Form VIII: ifta`ala
|
||||||
|
|
||||||
v10 : Str -> V ; -- Verb Form X 'istaf`ala
|
v10 : Str -> V ; -- Verb Form X: 'istaf`ala
|
||||||
|
|
||||||
|
v11 : Str -> V ; -- Verb Form XI (quadriliteral): fa`laba
|
||||||
|
|
||||||
--3 Two-place verbs
|
--3 Two-place verbs
|
||||||
|
|
||||||
@@ -256,7 +238,7 @@ resource ParadigmsAra = open
|
|||||||
mkV2 : overload {
|
mkV2 : overload {
|
||||||
mkV2 : V -> V2 ; -- No preposition
|
mkV2 : V -> V2 ; -- No preposition
|
||||||
mkV2 : V -> Str -> V2 ; -- Preposition as string, default case genitive
|
mkV2 : V -> Str -> V2 ; -- Preposition as string, default case genitive
|
||||||
mkV2 : V -> Preposition -> V2 ; -- Ready-made preposition
|
mkV2 : V -> Prep -> V2 ; -- Ready-made preposition
|
||||||
mkV2 : Str -> V2 ; -- Predictable verb conjugation, no preposition
|
mkV2 : Str -> V2 ; -- Predictable verb conjugation, no preposition
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -268,11 +250,11 @@ resource ParadigmsAra = open
|
|||||||
-- the first one or both can be absent.
|
-- the first one or both can be absent.
|
||||||
|
|
||||||
mkV3 : overload {
|
mkV3 : overload {
|
||||||
mkV3 : V -> Preposition -> Preposition -> V3 ; -- speak, with, about
|
mkV3 : V -> Prep -> Prep -> V3 ; -- speak, with, about
|
||||||
mkV3 : V -> (to : Str) -> (about:Str) -> V3 -- like above, but with strings as arguments (default complement case genitive)
|
mkV3 : V -> (to : Str) -> (about:Str) -> V3 -- like above, but with strings as arguments (default complement case genitive)
|
||||||
} ;
|
} ;
|
||||||
dirV3 : overload {
|
dirV3 : overload {
|
||||||
dirV3 : V -> Preposition -> V3 ; -- give,_,to
|
dirV3 : V -> Prep -> V3 ; -- give,_,to
|
||||||
dirV3 : V -> (to : Str) -> V3 -- like above, but with string as argument (default complement case genitive)
|
dirV3 : V -> (to : Str) -> V3 -- like above, but with string as argument (default complement case genitive)
|
||||||
} ;
|
} ;
|
||||||
dirdirV3 : V -> V3 ; -- give,_,_
|
dirdirV3 : V -> V3 ; -- give,_,_
|
||||||
@@ -284,25 +266,34 @@ resource ParadigmsAra = open
|
|||||||
|
|
||||||
mkV0 : V -> V0 ;
|
mkV0 : V -> V0 ;
|
||||||
mkVS : overload {
|
mkVS : overload {
|
||||||
mkVS : V -> VS ;
|
mkVS : V -> VS ; -- Takes a V, returns a VS with default complementiser أَنَّ.
|
||||||
mkVS : V -> Str -> VS
|
mkVS : V -> Str -> VS -- Takes a V and a complementiser.
|
||||||
} ;
|
} ;
|
||||||
mkV2S : V -> Str -> V2S ;
|
mkV2S : overload {
|
||||||
|
mkV2S : V -> V2S ; -- Takes a V, returns a V2S with default complementiser أَنَّ and accusative as the direct object case.
|
||||||
|
mkV2S : VS -> V2S ; -- Takes a VS, returns a V2S with accusative as the object case, retaining the VS's complementiser.
|
||||||
|
mkV2S : V2 -> V2S ; -- Takes a V2, returns a V2S with default complementiser أَنَّ, retaining the V2's direct object case.
|
||||||
|
mkV2S : V -> Prep -> Str -> V2S ; -- Takes V, preposition and complementiser.
|
||||||
|
} ;
|
||||||
mkVV = overload {
|
mkVV = overload {
|
||||||
mkVV : V -> VV = regVV ;
|
mkVV : V -> VV -- Takes a V, returns a VV with default complementiser أَنَّ.
|
||||||
mkVV : V -> Str -> VV = c2VV ;
|
= regVV ;
|
||||||
mkVV : V -> Preposition -> VV = prepVV ;
|
mkVV : V -> Str -> VV -- Takes a V and a complementiser.
|
||||||
mkVV : V -> Preposition -> Preposition -> VV = prep2VV
|
= s2VV ;
|
||||||
} ;
|
} ;
|
||||||
mkV2V : overload {
|
mkV2V : overload {
|
||||||
mkV2V : V -> Str -> Str -> V2V ;
|
mkV2V : V -> V2V ; -- Takes a V, returns a V2V with default complementiser أَنْ and accusative as the direct object case.
|
||||||
mkV2V : V -> Preposition -> Preposition -> V2V ;
|
mkV2V : VV -> V2V ; -- Takes VV, returns V2V with accusative as the object case, retaining the VV's complementiser.
|
||||||
mkV2V : VV -> Preposition -> V2V
|
mkV2V : V -> Prep -> Str -> V2V ; -- Takes V, preposition and complementiser.
|
||||||
|
} ;
|
||||||
|
subjCase : overload {
|
||||||
|
subjCase : VV -> Prep -> VV ; -- Change the subject case of a VV. (Default is nominative; use any other case or preposition.)
|
||||||
|
subjCase : V2V -> Prep -> V2V ; -- Change the subject case to a V2V. (Default is nominative; use any other case or preposition.)
|
||||||
} ;
|
} ;
|
||||||
mkVA : V -> VA ;
|
mkVA : V -> VA ;
|
||||||
mkV2A : V -> Str -> V2A ;
|
mkV2A : V -> Str -> V2A ; -- Takes a V and an object case/preposition. NB. V2A = V2, see mkV2 for more constructors.
|
||||||
mkVQ : V -> VQ ;
|
mkVQ : V -> VQ ;
|
||||||
mkV2Q : V -> Str -> V2Q ;
|
mkV2Q : V -> Str -> V2Q ; -- Takes a V and an object case/preposition. NB. V2Q = V2, see mkV2 for more constructors.
|
||||||
|
|
||||||
mkAS : A -> AS ;
|
mkAS : A -> AS ;
|
||||||
mkA2S : A -> Str -> A2S ;
|
mkA2S : A -> Str -> A2S ;
|
||||||
@@ -328,12 +319,6 @@ resource ParadigmsAra = open
|
|||||||
acc = ResAra.Acc ;
|
acc = ResAra.Acc ;
|
||||||
gen = ResAra.Gen ;
|
gen = ResAra.Gen ;
|
||||||
|
|
||||||
-- Prepositions are used in many-argument functions for rection.
|
|
||||||
|
|
||||||
Preposition = ResAra.Preposition ;
|
|
||||||
noPrep = {s=[]; c=nom; binds=False} ;
|
|
||||||
casePrep c = {s=[]; c=c; binds=False} ;
|
|
||||||
|
|
||||||
Gender = ResAra.Gender ;
|
Gender = ResAra.Gender ;
|
||||||
masc = ResAra.Masc ;
|
masc = ResAra.Masc ;
|
||||||
fem = ResAra.Fem ;
|
fem = ResAra.Fem ;
|
||||||
@@ -355,14 +340,21 @@ resource ParadigmsAra = open
|
|||||||
mkPrep : Str -> Prep = \s ->
|
mkPrep : Str -> Prep = \s ->
|
||||||
lin Prep (mkPreposition s) ;
|
lin Prep (mkPreposition s) ;
|
||||||
mkPrep : Str -> Case -> Prep = \s,c ->
|
mkPrep : Str -> Case -> Prep = \s,c ->
|
||||||
lin Prep (mkPreposition s c)
|
lin Prep (mkPreposition s c) ;
|
||||||
|
mkPrep : Case -> Prep = \c ->
|
||||||
|
lin Prep (casePrep c) ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
noPrep = lin Prep ResAra.noPrep ;
|
||||||
|
biPrep = lin Prep ResAra.biPrep ;
|
||||||
|
liPrep = lin Prep ResAra.liPrep ;
|
||||||
|
|
||||||
|
casePrep : Case -> Prep = \c -> lin Prep {s=[]; c=c; binds=False} ;
|
||||||
|
|
||||||
mkV2 = overload {
|
mkV2 = overload {
|
||||||
mkV2 : V -> V2 = dirV2 ;
|
mkV2 : V -> V2 = dirV2 ;
|
||||||
mkV2 : V -> Str -> V2 = \v,p -> prepV2 v (mkPreposition p);
|
mkV2 : V -> Str -> V2 = \v,p -> prepV2 v (mkPreposition p);
|
||||||
mkV2 : V -> Preposition -> V2 = prepV2 ;
|
mkV2 : V -> Prep -> V2 = prepV2 ;
|
||||||
mkV2 : Str -> V2 = strV2;
|
mkV2 : Str -> V2 = strV2;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -376,7 +368,7 @@ resource ParadigmsAra = open
|
|||||||
= \p,n -> n ** {h = p} ;
|
= \p,n -> n ** {h = p} ;
|
||||||
mkN : (sg,pl : Str) -> Gender -> Species -> N
|
mkN : (sg,pl : Str) -> Gender -> Species -> N
|
||||||
= \sg,pl -> mkFullN (reg sg pl) ;
|
= \sg,pl -> mkFullN (reg sg pl) ;
|
||||||
mkN : NTable -> Gender -> Species -> N -- loan words, irregular
|
mkN : NTable -> Gender -> Species -> N -- TO BE DEPRECATED; kept for backwards-compatibility. For the same behaviour, use either the constructor above, sdfN or sdmN.
|
||||||
= mkFullN ;
|
= mkFullN ;
|
||||||
mkN : (root,sgPatt,brokenPlPatt : Str) -> Gender -> Species -> N -- broken plural
|
mkN : (root,sgPatt,brokenPlPatt : Str) -> Gender -> Species -> N -- broken plural
|
||||||
= brkN ;
|
= brkN ;
|
||||||
@@ -419,69 +411,91 @@ resource ParadigmsAra = open
|
|||||||
mkPron : (_,_,_ : Str) -> PerGenNum -> Pron ;
|
mkPron : (_,_,_ : Str) -> PerGenNum -> Pron ;
|
||||||
|
|
||||||
mkV = overload {
|
mkV = overload {
|
||||||
|
mkV : (imperfect,masdar : Str) -> V
|
||||||
|
= \v,m -> regV v m ;
|
||||||
mkV : (imperfect : Str) -> V
|
mkV : (imperfect : Str) -> V
|
||||||
= regV ;
|
= \v -> regV v ;
|
||||||
mkV : (root : Str) -> (perf,impf : Vowel) -> V -- verb form I ; vowel = a|i|u
|
mkV : (root : Str) -> (perf,impf : Vowel) -> (masdar : Str) -> V -- verb form I ; vowel = a|i|u
|
||||||
= v1 ;
|
= v1masdar ;
|
||||||
|
mkV : (root : Str) -> (perf,impf : Vowel) -> V -- verb form I ; vowel = a|i|u ; dummy masdar
|
||||||
|
= v1dummymasdar ;
|
||||||
mkV : (root : Str) -> VerbForm -> V -- FormI .. FormX (no VII, IX) ; default vowels a u for I
|
mkV : (root : Str) -> VerbForm -> V -- FormI .. FormX (no VII, IX) ; default vowels a u for I
|
||||||
= formV ;
|
= formV ;
|
||||||
mkV : V -> (particle : Str) -> V = \v,p ->
|
mkV : V -> (particle : Str) -> V = \v,p ->
|
||||||
v ** { s = \\vf => v.s ! vf ++ p } ;
|
v ** { s = \\vf => v.s ! vf ++ p } ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
regV : Str -> V = \wo ->
|
regV = overload {
|
||||||
let rau : Str * Vowel * Vowel =
|
regV : (v,msdr : Str) -> V = \wo,msdr ->
|
||||||
case wo of {
|
let rau : Str * Vowel * Vowel =
|
||||||
"يَ" + fc + "ُ" + l => <fc+l, a, u> ;
|
case wo of {
|
||||||
"يَ" + fc + "ِ" + l => <fc+l, a, i> ;
|
"يَ" + fc + "ُ" + l => <fc+l, a, u> ;
|
||||||
"يَ" + fc + "َ" + l => <fc+l, a, a> ;
|
"يَ" + fc + "ِ" + l => <fc+l, a, i> ;
|
||||||
f@? + "َ" + c@? + "ِ" + l => <f+c+l, i, a> ;
|
"يَ" + fc + "َ" + l => <fc+l, a, a> ;
|
||||||
_ => Predef.error ("regV not applicable to" ++ wo)
|
f@? + "َ" + c@? + "ِ" + l => <f+c+l, i, a> ;
|
||||||
}
|
_ => Predef.error ("regV not applicable to" ++ wo)
|
||||||
in v1 rau.p1 rau.p2 rau.p3 ;
|
}
|
||||||
|
in v1masdar rau.p1 rau.p2 rau.p3 msdr ;
|
||||||
|
regV : Str -> V = \wo ->
|
||||||
|
let rau : Str * Vowel * Vowel =
|
||||||
|
case wo of {
|
||||||
|
"يَ" + fc + "ُ" + l => <fc+l, a, u> ;
|
||||||
|
"يَ" + fc + "ِ" + l => <fc+l, a, i> ;
|
||||||
|
"يَ" + fc + "َ" + l => <fc+l, a, a> ;
|
||||||
|
f@? + "َ" + c@? + "ِ" + l => <f+c+l, i, a> ;
|
||||||
|
_ => Predef.error ("regV not applicable to" ++ wo)
|
||||||
|
} in v1dummymasdar rau.p1 rau.p2 rau.p3
|
||||||
|
} ;
|
||||||
|
|
||||||
v1 = \rootStr,vPerf,vImpf ->
|
v1masdar : Str -> (perf,impf : Vowel) -> (masdar : Str) -> V =
|
||||||
let { raw = v1' rootStr vPerf vImpf } in
|
\rootStr,vPerf,vImpf,msdr ->
|
||||||
lin V { s = \\vf =>rectifyHmz (raw.s ! vf) } ;
|
let { raw = v1' rootStr vPerf vImpf msdr }
|
||||||
|
in lin V { s = \\vf =>rectifyHmz (raw.s ! vf) } ;
|
||||||
|
|
||||||
v1' : Str -> Vowel -> Vowel -> Verb =
|
v1dummymasdar : Str -> (p,i : Vowel) -> V = \rootStr,vPerf,vImpf ->
|
||||||
\rootStr,vPerf,vImpf ->
|
let { dummyMasdar = mkStrong facl (mkRoot3 rootStr) ;
|
||||||
|
raw = v1' rootStr vPerf vImpf dummyMasdar }
|
||||||
|
in lin V { s = \\vf =>rectifyHmz (raw.s ! vf) } ;
|
||||||
|
|
||||||
|
v1' : Str -> (p,i : Vowel) -> (masdar : Str) -> Verb =
|
||||||
|
\rootStr,vPerf,vImpf,masdar ->
|
||||||
let root = mkRoot3 rootStr
|
let root = mkRoot3 rootStr
|
||||||
in case rootStr of {
|
in case rootStr of {
|
||||||
f@? + c@? + "ّ" => v1geminate (f+c+c) vPerf vImpf ;
|
f@? + c@? + "ّ" => v1geminate (f+c+c) vPerf vImpf masdar ;
|
||||||
? + #hamza + #weak => v1doubleweak root ;
|
? + #hamza + #weak => v1doubleweak root masdar ;
|
||||||
|
#weak + ? + #weak => v1assimilated_defective root vPerf vImpf masdar ;
|
||||||
? + ? + #weak => case vPerf of {
|
? + ? + #weak => case vPerf of {
|
||||||
i => v1defective_i root vImpf ;
|
i => v1defective_i root vImpf masdar ;
|
||||||
_ => v1defective_a root vImpf } ;
|
_ => v1defective_a root vImpf masdar } ;
|
||||||
? + #weak + ? => v1hollow root vImpf ;
|
? + #weak + ? => v1hollow root vImpf masdar ;
|
||||||
_ => v1sound root vPerf vImpf } ;
|
_ => v1sound root vPerf vImpf masdar } ;
|
||||||
|
|
||||||
v2 =
|
v2 =
|
||||||
\rootStr ->
|
\rootStr ->
|
||||||
let {
|
let {
|
||||||
root = mkRoot3 rootStr
|
root = mkRoot3 rootStr
|
||||||
} in {
|
} in lin V {
|
||||||
s =
|
s =
|
||||||
case root.l of {
|
case rootStr of {
|
||||||
#weak => (v2defective root).s;
|
-- #weak + ? + ? =>
|
||||||
_ => (v2sound root).s
|
? + ? + #weak => (v2defective root).s;
|
||||||
};
|
_ => (v2sound root).s
|
||||||
lock_V = <>
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
v3 =
|
v3 =
|
||||||
\rootStr ->
|
\rootStr ->
|
||||||
let {
|
let {
|
||||||
tbc = mkRoot3 rootStr ;
|
tbc = mkRoot3 rootStr ;
|
||||||
} in {
|
} in lin V {
|
||||||
s = (v3sound tbc).s ;
|
s = (v3sound tbc).s
|
||||||
lock_V = <>
|
|
||||||
};
|
};
|
||||||
|
|
||||||
v4 =
|
v4 =
|
||||||
\rootStr ->
|
\rootStr ->
|
||||||
let root : Root3 = mkRoot3 rootStr ;
|
let root : Root3 = mkRoot3 rootStr ;
|
||||||
verb : Verb = case rootStr of {
|
verb : Verb = case rootStr of {
|
||||||
|
#weak + ? + ? => v4assimilated root ;
|
||||||
? + #hamza + #weak => v4doubleweak root ;
|
? + #hamza + #weak => v4doubleweak root ;
|
||||||
? + #weak + ? => v4hollow root ;
|
? + #weak + ? => v4hollow root ;
|
||||||
_ + #weak => v4defective root ;
|
_ + #weak => v4defective root ;
|
||||||
@@ -491,30 +505,28 @@ resource ParadigmsAra = open
|
|||||||
|
|
||||||
v5 =
|
v5 =
|
||||||
\rootStr ->
|
\rootStr ->
|
||||||
let { raw = v5' rootStr } in
|
let { raw = v5' rootStr } in raw **
|
||||||
{ s = \\vf =>
|
{ s = \\vf =>
|
||||||
case rootStr of {
|
case rootStr of {
|
||||||
_ + #hamza + _ => rectifyHmz(raw.s ! vf);
|
_ + #hamza + _ => rectifyHmz(raw.s ! vf);
|
||||||
_ => raw.s ! vf
|
_ => raw.s ! vf
|
||||||
};
|
}
|
||||||
lock_V = <>
|
|
||||||
};
|
};
|
||||||
|
|
||||||
v5' : Str -> V =
|
v5' : Str -> V =
|
||||||
\rootStr ->
|
\rootStr ->
|
||||||
let {
|
let {
|
||||||
nfs = mkRoot3 rootStr ;
|
nfs = mkRoot3 rootStr ;
|
||||||
} in {
|
} in lin V {
|
||||||
s = (v5sound nfs).s ; lock_V = <>
|
s = (v5sound nfs).s
|
||||||
};
|
};
|
||||||
|
|
||||||
v6 =
|
v6 =
|
||||||
\rootStr ->
|
\rootStr ->
|
||||||
let {
|
let {
|
||||||
fqm = mkRoot3 rootStr ;
|
fqm = mkRoot3 rootStr ;
|
||||||
} in {
|
} in lin V {
|
||||||
s = (v6sound fqm).s ;
|
s = (v6sound fqm).s
|
||||||
lock_V = <>
|
|
||||||
};
|
};
|
||||||
|
|
||||||
v7 =
|
v7 =
|
||||||
@@ -548,8 +560,20 @@ resource ParadigmsAra = open
|
|||||||
_ => v10sound fcl }
|
_ => v10sound fcl }
|
||||||
} in lin V verb ;
|
} in lin V verb ;
|
||||||
|
|
||||||
|
v11 =
|
||||||
|
\rootStr ->
|
||||||
|
let fcl : Root3 = case rootStr of {
|
||||||
|
f@? + c@? + l@? + b@? => {f=f ; c=c+"ْ"+l ; l=b} ;
|
||||||
|
_ => Predef.error "v11: implement quadriliterals properly"
|
||||||
|
} ;
|
||||||
|
verb : Verb = case rootStr of {
|
||||||
|
_ => v11sound fcl -- TODO more cases?
|
||||||
|
} ;
|
||||||
|
in lin V verb ;
|
||||||
|
|
||||||
reflV v = lin V (ResAra.reflV v) ;
|
reflV v = lin V (ResAra.reflV v) ;
|
||||||
|
|
||||||
|
mkFullN : NTable -> Gender -> Species -> N ; -- This is used for loan words or anything that has untreated irregularities in the interdigitization process of its words
|
||||||
mkFullN nsc gen spec = lin N
|
mkFullN nsc gen spec = lin N
|
||||||
{ s = nsc; --NTable
|
{ s = nsc; --NTable
|
||||||
s2 = emptyNTable;
|
s2 = emptyNTable;
|
||||||
@@ -566,6 +590,9 @@ resource ParadigmsAra = open
|
|||||||
kutub = mkWord pl root
|
kutub = mkWord pl root
|
||||||
} in mkFullN (reg kitAb kutub) gen spec;
|
} in mkFullN (reg kitAb kutub) gen spec;
|
||||||
|
|
||||||
|
|
||||||
|
--Takes a root string, a singular pattern string, a broken plural
|
||||||
|
--pattern string, a gender, and species. Gives a noun.
|
||||||
brkN root sg pl gen spec =
|
brkN root sg pl gen spec =
|
||||||
let { raw = brkN' root sg pl gen spec} in raw **
|
let { raw = brkN' root sg pl gen spec} in raw **
|
||||||
{ s = \\n,d,c =>
|
{ s = \\n,d,c =>
|
||||||
@@ -592,6 +619,7 @@ resource ParadigmsAra = open
|
|||||||
let { mucallim = mkWord sg root;
|
let { mucallim = mkWord sg root;
|
||||||
} in mkFullN (sndm mucallim) gen spec;
|
} in mkFullN (sndm mucallim) gen spec;
|
||||||
|
|
||||||
|
mkFullPN : Str -> Gender -> Species -> PN ;
|
||||||
mkFullPN = \str,gen,species ->
|
mkFullPN = \str,gen,species ->
|
||||||
{ s = \\c => str + indecl!c ;
|
{ s = \\c => str + indecl!c ;
|
||||||
g = gen;
|
g = gen;
|
||||||
@@ -600,16 +628,16 @@ resource ParadigmsAra = open
|
|||||||
};
|
};
|
||||||
|
|
||||||
mkN2 = overload {
|
mkN2 = overload {
|
||||||
mkN2 : N -> Preposition -> N2 = prepN2 ;
|
mkN2 : N -> Prep -> N2 = prepN2 ;
|
||||||
mkN2 : N -> Str -> N2 = \n,s -> prepN2 n (mkPreposition s);
|
mkN2 : N -> Str -> N2 = \n,s -> prepN2 n (mkPreposition s);
|
||||||
mkN2 : N -> N2 = \n -> lin N2 (n ** {c2 = noPrep}) ;
|
mkN2 : N -> N2 = \n -> prepN2 n genPrep;
|
||||||
mkN2 : Str -> N2 = \str -> lin N2 (smartN str ** {c2 = noPrep})
|
mkN2 : Str -> N2 = \str -> prepN2 (smartN str) genPrep;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
prepN2 : N -> Preposition -> N2 = \n,p -> lin N2 (n ** {c2 = p}) ;
|
prepN2 : N -> Preposition -> N2 = \n,p -> lin N2 (n ** {c2 = p}) ;
|
||||||
|
|
||||||
mkN3 = overload {
|
mkN3 = overload {
|
||||||
mkN3 : N -> Preposition -> Preposition -> N3 = \n,p,q ->
|
mkN3 : N -> Prep -> Prep -> N3 = \n,p,q ->
|
||||||
lin N3 (n ** {c2 = p ; c3 = q}) ;
|
lin N3 (n ** {c2 = p ; c3 = q}) ;
|
||||||
mkN3 : N -> Str -> Str -> N3 = \n,p,q ->
|
mkN3 : N -> Str -> Str -> N3 = \n,p,q ->
|
||||||
lin N3 (n ** {c2 = mkPreposition p ; c3 = mkPreposition q}) ;
|
lin N3 (n ** {c2 = mkPreposition p ; c3 = mkPreposition q}) ;
|
||||||
@@ -629,48 +657,35 @@ resource ParadigmsAra = open
|
|||||||
|
|
||||||
|
|
||||||
mkQuant7 : (_,_,_,_,_,_,_ : Str) -> State -> Quant =
|
mkQuant7 : (_,_,_,_,_,_,_ : Str) -> State -> Quant =
|
||||||
\hava,havihi,havAn,havayn,hAtAn,hAtayn,hA'ulA,det -> lin Quant (baseQuant **
|
\hava,havihi,havAn,havayn,hAtAn,hAtayn,hA'ulA,det ->
|
||||||
{ s = \\n,s,g,c =>
|
lin Quant (ResAra.mkQuant7 hava havihi havAn havayn hAtAn hAtayn hA'ulA det) ;
|
||||||
case <s,g,c,n> of {
|
|
||||||
<_,Masc,_,Sg> => hava;
|
|
||||||
<_,Fem,_,Sg> => havihi;
|
|
||||||
<_,Masc,Nom,Dl>=> havAn;
|
|
||||||
<_,Masc,_,Dl> => havayn;
|
|
||||||
<_,Fem,Nom,Dl> => hAtAn;
|
|
||||||
<_,Fem,_,Dl> => hAtayn;
|
|
||||||
<Hum,_,_,Pl> => hA'ulA;
|
|
||||||
_ => havihi
|
|
||||||
};
|
|
||||||
d = det
|
|
||||||
});
|
|
||||||
|
|
||||||
mkQuant3 : (_,_,_ : Str) -> State -> Quant =
|
mkQuant3 : (_,_,_ : Str) -> State -> Quant =
|
||||||
\dalika,tilka,ula'ika,det -> lin Quant (baseQuant **
|
\dalika,tilka,ula'ika,det ->
|
||||||
{ s = \\n,s,g,c =>
|
lin Quant (ResAra.mkQuant3 dalika tilka ula'ika det) ;
|
||||||
case <s,g,c,n> of {
|
|
||||||
<_,Masc,_,Sg> => dalika;
|
|
||||||
<_,Fem,_,Sg> => tilka;
|
|
||||||
<Hum,_,_,_> => ula'ika;
|
|
||||||
_ => tilka
|
|
||||||
};
|
|
||||||
d = det
|
|
||||||
});
|
|
||||||
|
|
||||||
brkA : (root,sg,pl : Str) -> Adj = \root,sg,pl ->
|
brkA : (root,sg,pl : Str) -> Adj -- also broken feminine
|
||||||
|
= brkABool False ;
|
||||||
|
|
||||||
|
brkABool : Bool -> (root,sg,pl : Str) -> Adj = \isSndFem,root,sg,pl ->
|
||||||
let jadId = mkWord sg root ;
|
let jadId = mkWord sg root ;
|
||||||
jadIda = jadId + "َة" ;
|
jadIda = jadId + "َة" ;
|
||||||
judud = mkWord pl root ;
|
judud = mkWord pl root ;
|
||||||
|
jadIdAt = case isSndFem of {
|
||||||
|
True => jadId + "َات" ;
|
||||||
|
False => judud
|
||||||
|
} ;
|
||||||
akbar = mkWord "أَفعَل" root ;
|
akbar = mkWord "أَفعَل" root ;
|
||||||
mascTbl = reg jadId judud ;
|
mascTbl = reg jadId judud ;
|
||||||
femTbl = reg jadIda judud ;
|
femTbl = reg jadIda jadIdAt ;
|
||||||
in { s = table {
|
in { s = table {
|
||||||
APosit Masc n d c => rectifyHmz (mascTbl ! n ! d ! c) ;
|
APosit Masc n d c => rectifyHmz (mascTbl ! n ! d ! c) ;
|
||||||
APosit Fem n d c => rectifyHmz (femTbl ! n ! d ! c) ;
|
APosit Fem n d c => rectifyHmz (femTbl ! n ! d ! c) ;
|
||||||
AComp d c => rectifyHmz (indeclN akbar ! d ! c) }
|
AComp d c => rectifyHmz (indeclN akbar ! d ! c) }
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
degrA : (posit,compar,plur : Str) -> A
|
degrA : (masc,fem,plur : Str) -> A
|
||||||
= \posit,compar,plur -> lin A {s = clr posit compar plur} ;
|
= \masc,fem,plur -> lin A {s = clr masc fem plur} ;
|
||||||
|
|
||||||
idaafaA : N -> A -> A = \ghayr,tayyib -> tayyib ** {
|
idaafaA : N -> A -> A = \ghayr,tayyib -> tayyib ** {
|
||||||
s = table {
|
s = table {
|
||||||
@@ -678,8 +693,8 @@ resource ParadigmsAra = open
|
|||||||
AComp d c => ghayr.s ! Sg ! Const ! c ++ tayyib.s ! AComp d c }
|
AComp d c => ghayr.s ! Sg ! Const ! c ++ tayyib.s ! AComp d c }
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
sndA root pat =
|
sndA : Str -> Str -> A = \root,pat ->
|
||||||
let raw = sndA' root pat in {
|
let raw = sndA' root pat in lin A {
|
||||||
s = \\af =>
|
s = \\af =>
|
||||||
case root of {
|
case root of {
|
||||||
_ + #hamza + _ => rectifyHmz(raw.s ! af);
|
_ + #hamza + _ => rectifyHmz(raw.s ! af);
|
||||||
@@ -705,24 +720,31 @@ resource ParadigmsAra = open
|
|||||||
x => m.s ! x }
|
x => m.s ! x }
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
nisbaA : Str -> Adj = \Haal ->
|
invarGenderA = \m ->
|
||||||
let Haaliyy = Haal + "ِيّ" in {
|
irregFemA m m ;
|
||||||
|
|
||||||
|
nisbaA Haal =
|
||||||
|
let Haaliyy : Str = case Haal of {
|
||||||
|
x + "يّ" => Haal ; -- if the ending is already given, don't add it
|
||||||
|
x + ("ا"|"ة") => x + "ِيّ" ; -- drop final alif or ta marbuta
|
||||||
|
_ => Haal + "ِيّ"
|
||||||
|
} in lin A {
|
||||||
s = table {
|
s = table {
|
||||||
APosit g n d c => positAdj Haaliyy ! g ! n ! d ! c ;
|
APosit g n d c => positAdj Haaliyy ! g ! n ! d ! c ;
|
||||||
AComp d c => "أَكْثَر" ++ indeclN Haaliyy ! d ! c
|
AComp d c => "أَكْثَر" ++ indeclN Haaliyy ! d ! c
|
||||||
}
|
}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
clrA root =
|
clrA : Str -> A = \root ->
|
||||||
let { eaHmar = mkWord "أَفعَل" root;
|
let { eaHmar = mkWord "أَفعَل" root;
|
||||||
HamrA' = mkWord "فَعلاء" root;
|
HamrA' = mkWord "فَعلاء" root;
|
||||||
Humr = mkWord "فُعل" root
|
Humr = mkWord "فُعل" root
|
||||||
} in {
|
} in lin A {
|
||||||
s = clr eaHmar HamrA' Humr;
|
s = clr eaHmar HamrA' Humr;
|
||||||
};
|
};
|
||||||
|
|
||||||
mkA2 = overload {
|
mkA2 = overload {
|
||||||
mkA2 : A -> Preposition -> A2 = prepA2 ;
|
mkA2 : A -> Prep -> A2 = prepA2 ;
|
||||||
mkA2 : A -> Str -> A2 = \a,p -> prepA2 a (mkPreposition p)
|
mkA2 : A -> Str -> A2 = \a,p -> prepA2 a (mkPreposition p)
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -738,10 +760,10 @@ resource ParadigmsAra = open
|
|||||||
mkSubj : Str -> Order -> Subj = \s,o -> lin Subj {s = s ; o = o} ;
|
mkSubj : Str -> Order -> Subj = \s,o -> lin Subj {s = s ; o = o} ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
dirV2 v = prepV2 v (casePrep acc) ;
|
dirV2 v = prepV2 v accPrep ;
|
||||||
|
|
||||||
mkV3 = overload {
|
mkV3 = overload {
|
||||||
mkV3 : V -> Preposition -> Preposition -> V3 = \v,p,q ->
|
mkV3 : V -> Prep -> Prep -> V3 = \v,p,q ->
|
||||||
lin V3 (prepV3 v p q) ;
|
lin V3 (prepV3 v p q) ;
|
||||||
mkV3 : V -> Str -> Str -> V3 = \v,p,q ->
|
mkV3 : V -> Str -> Str -> V3 = \v,p,q ->
|
||||||
lin V3 (v ** {s = v.s ; c2 = mkPreposition p ; c3 = mkPreposition q})
|
lin V3 (v ** {s = v.s ; c2 = mkPreposition p ; c3 = mkPreposition q})
|
||||||
@@ -751,37 +773,61 @@ resource ParadigmsAra = open
|
|||||||
v ** {s = v.s ; c2 = p ; c3 = q} ;
|
v ** {s = v.s ; c2 = p ; c3 = q} ;
|
||||||
|
|
||||||
dirV3 = overload {
|
dirV3 = overload {
|
||||||
dirV3 : V -> Preposition -> V3 = \v,p -> mkV3 v (casePrep acc) p ;
|
dirV3 : V -> Prep -> V3 = \v,p -> mkV3 v (casePrep acc) p ;
|
||||||
dirV3 : V -> Str -> V3 = \v,s -> mkV3 v (casePrep acc) (mkPreposition s)
|
dirV3 : V -> Str -> V3 = \v,s -> mkV3 v (casePrep acc) (mkPreposition s)
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
dirdirV3 v = dirV3 v (casePrep acc) ;
|
dirdirV3 v = dirV3 v (casePrep acc) ;
|
||||||
|
|
||||||
mkVS = overload {
|
mkVS = overload {
|
||||||
mkVS : V -> VS = \v -> lin VS (v ** {o = Subord; s2 = []}) ;
|
mkVS : V -> VS = \v -> lin VS (v ** {o = Subord; s2 = anna}) ;
|
||||||
mkVS : V -> Str -> VS = \v,s -> lin VS (v ** {o = Subord; s2 = s})
|
mkVS : V -> Str -> VS = \v,s -> lin VS (v ** {o = Subord; s2 = s})
|
||||||
} ;
|
} ;
|
||||||
mkVQ v = lin VQ v ;
|
mkVQ v = lin VQ v ;
|
||||||
|
|
||||||
regVV : V -> VV = \v -> lin VV v ** {c2 = mkPreposition "أَنْ" ; sc = noPrep} ;
|
-- Complementisers for V*V and V*S
|
||||||
c2VV : V -> Str -> VV = \v,prep -> regVV v ** {c2 = mkPreposition prep ; sc = noPrep} ;
|
an : Str = "أَنْ" ;
|
||||||
prepVV : V -> Preposition -> VV = \v,prep -> regVV v ** {c2=prep; sc=noPrep} ;
|
anna : Str = "أَنَّ" ;
|
||||||
prep2VV : V -> (_,_ : Preposition) -> VV = \v,p1,p2 -> regVV v ** {c2=p1; sc=p2} ;
|
|
||||||
|
regVV : V -> VV = \v -> lin VV v ** {s2=an ; sc=noPrep} ;
|
||||||
|
s2VV : V -> Str -> VV = \v,compl -> regVV v ** {s2=compl; sc=noPrep} ;
|
||||||
|
prepVV : V -> Prep -> VV = \v,prep -> regVV v ** {s2=an ; sc=prep} ;
|
||||||
|
prep2VV : V -> Prep -> Str -> VV = \v,p,c -> regVV v ** {s2=c; sc=p} ;
|
||||||
V0 : Type = V ;
|
V0 : Type = V ;
|
||||||
---- V2S, V2V, V2Q, V2A : Type = V2 ;
|
---- V2S, V2V, V2Q, V2A : Type = V2 ;
|
||||||
AS, A2S, AV : Type = A ;
|
AS, A2S, AV : Type = A ;
|
||||||
A2V : Type = A2 ;
|
A2V : Type = A2 ;
|
||||||
|
|
||||||
mkV0 v = v ;
|
mkV0 v = v ;
|
||||||
mkV2S v p = lin V2S (prepV2 v (mkPreposition p)) ;
|
mkV2S = overload {
|
||||||
|
mkV2S : V -> V2S
|
||||||
|
= \v -> lin V2S (prepV2 v accPrep ** {s2=anna ; o=Subord}) ;
|
||||||
|
mkV2S : V2 -> V2S
|
||||||
|
= \v2 -> lin V2S (v2 ** {s2=anna ; o=Subord}) ;
|
||||||
|
mkV2S : V -> Preposition -> V2S
|
||||||
|
= \v,p -> lin V2S ((prepV2 v p) ** {s2=anna ; o=Subord})
|
||||||
|
} ;
|
||||||
|
|
||||||
mkV2V = overload {
|
mkV2V = overload {
|
||||||
mkV2V : V -> Str -> Str -> V2V = \v,p,q ->
|
mkV2V : V -> V2V = \v ->
|
||||||
lin V2V (prepV3 v (mkPreposition p) (mkPreposition q) ** {sc = noPrep}) ;
|
lin V2V (v ** {c2=accPrep ; s2=an ; sc=noPrep}) ;
|
||||||
mkV2V : V -> Preposition -> Preposition -> V2V = \v,p,q ->
|
mkV2V : VV -> V2V = \vv ->
|
||||||
lin V2V (prepV3 v p q ** {sc = noPrep}) ;
|
lin V2V (vv ** {c2 = accPrep}) ;
|
||||||
mkV2V : VV -> Preposition -> V2V = \vv,p ->
|
mkV2V : VV -> Prep -> V2V = \vv,p ->
|
||||||
lin V2V (vv ** {c2 = p ; c3 = vv.c2}) ;
|
lin V2V (vv ** {c2 = p}) ;
|
||||||
|
mkV2V : V -> Prep -> Str -> V2V = \v,p,q ->
|
||||||
|
lin V2V (v ** {c2 = p ; s2 = q ; sc = noPrep}) ;
|
||||||
|
mkV2V : V2 -> V2V = \v2 ->
|
||||||
|
lin V2V (v2 ** {s2 = an ; sc = noPrep}) ;
|
||||||
|
mkV2V : V2 -> Str -> V2V = \v2,c ->
|
||||||
|
lin V2V (v2 ** {c2 = v2.c2 ; s2 = c ; sc = noPrep}) ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
subjCase = overload {
|
||||||
|
subjCase : VV -> Prep -> VV = \vv,p -> vv ** {sc=p} ;
|
||||||
|
subjCase : V2V -> Prep -> V2V = \vv,p -> vv ** {sc=p}
|
||||||
|
} ;
|
||||||
|
|
||||||
mkVA v = v ** {lock_VA = <>} ;
|
mkVA v = v ** {lock_VA = <>} ;
|
||||||
mkV2A v p = lin V2A (prepV2 v (mkPreposition p));
|
mkV2A v p = lin V2A (prepV2 v (mkPreposition p));
|
||||||
mkV2Q v p = lin V2Q (prepV2 v (mkPreposition p));
|
mkV2Q v p = lin V2Q (prepV2 v (mkPreposition p));
|
||||||
@@ -805,18 +851,19 @@ smartPN : Str -> PN = \s -> case last s of {
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
formV : (root : Str) -> VerbForm -> V = \s,f -> case f of {
|
formV : (root : Str) -> VerbForm -> V = \s,f -> case f of {
|
||||||
FormI => v1 s a u ;
|
FormI => v1 s a u ;
|
||||||
FormII => v2 s ;
|
FormII => v2 s ;
|
||||||
FormIII => v3 s ;
|
FormIII => v3 s ;
|
||||||
FormIV => v4 s ;
|
FormIV => v4 s ;
|
||||||
FormV => v5 s ;
|
FormV => v5 s ;
|
||||||
FormVI => v6 s ;
|
FormVI => v6 s ;
|
||||||
FormVII => v7 s ;
|
FormVII => v7 s ;
|
||||||
FormVIII => v8 s ;
|
FormVIII => v8 s ;
|
||||||
FormX => v10 s
|
FormX => v10 s ;
|
||||||
|
FormXI => v11 s
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
param VerbForm =
|
param VerbForm =
|
||||||
FormI | FormII | FormIII | FormIV | FormV | FormVI | FormVII | FormVIII | FormX ;
|
FormI | FormII | FormIII | FormIV | FormV | FormVI | FormVII | FormVIII | FormX | FormXI ;
|
||||||
|
|
||||||
} ;
|
} ;
|
||||||
|
|||||||
@@ -47,6 +47,8 @@ flags coding=utf8 ;
|
|||||||
eafcilp = { h = "أَ"; m1 = "ْ" ; m2 = "ِ" ; t = "َة" } ;
|
eafcilp = { h = "أَ"; m1 = "ْ" ; m2 = "ِ" ; t = "َة" } ;
|
||||||
eafcal = { h = "أَ"; m1 = "ْ" ; m2 = "َ" ; t = "" } ;
|
eafcal = { h = "أَ"; m1 = "ْ" ; m2 = "َ" ; t = "" } ;
|
||||||
eafcAl = { h = "أَ"; m1 = "ْ" ; m2 = "َا" ; t = "" } ;
|
eafcAl = { h = "أَ"; m1 = "ْ" ; m2 = "َا" ; t = "" } ;
|
||||||
|
eifcAl = { h = "إِ"; m1 = "ْ" ; m2 = "َا" ; t = "" } ;
|
||||||
|
eIfcAl = eifcAl ** {h = "إِي"} ;
|
||||||
eafcil = { h = "أَ"; m1 = "ْ" ; m2 = "ِ" ; t = "" } ;
|
eafcil = { h = "أَ"; m1 = "ْ" ; m2 = "ِ" ; t = "" } ;
|
||||||
eafcul = { h = "أَ"; m1 = "ْ" ; m2 = "ُ" ; t = "" } ;
|
eafcul = { h = "أَ"; m1 = "ْ" ; m2 = "ُ" ; t = "" } ;
|
||||||
eiftacal = { h = "إِ"; m1 = "ْتَ" ; m2 = "َ" ; t = "" } ;
|
eiftacal = { h = "إِ"; m1 = "ْتَ" ; m2 = "َ" ; t = "" } ;
|
||||||
@@ -82,11 +84,14 @@ flags coding=utf8 ;
|
|||||||
fcil = { h = "" ; m1 = "ْ" ; m2 = "ِ" ; t = "" } ;
|
fcil = { h = "" ; m1 = "ْ" ; m2 = "ِ" ; t = "" } ;
|
||||||
fcul = { h = "" ; m1 = "ْ" ; m2 = "ُ" ; t = "" } ;
|
fcul = { h = "" ; m1 = "ْ" ; m2 = "ُ" ; t = "" } ;
|
||||||
ficl = { h = "" ; m1 = "ِ" ; m2 = "ْ" ; t = "" } ;
|
ficl = { h = "" ; m1 = "ِ" ; m2 = "ْ" ; t = "" } ;
|
||||||
|
fcIl = fcil ** {m2 = "ِي"} ;
|
||||||
|
fcAl = fcal ** {m2 = "َا"} ;
|
||||||
ficAl = { h = "" ; m1 = "ِ" ; m2 = "َا" ; t = "" } ;
|
ficAl = { h = "" ; m1 = "ِ" ; m2 = "َا" ; t = "" } ;
|
||||||
ficlp = { h = "" ; m1 = "ِ" ; m2 = "ْ" ; t = "َة" } ;
|
ficlp = { h = "" ; m1 = "ِ" ; m2 = "ْ" ; t = "َة" } ;
|
||||||
ftacc = facc ** {m1 = "ْتَ"} ;
|
ftacc = facc ** {m1 = "ْتَ"} ;
|
||||||
ftucc = facc ** {m1 = "ْتُ"} ;
|
ftucc = facc ** {m1 = "ْتُ"} ;
|
||||||
ftacal = { h = "" ; m1 = "ْتَ" ; m2 = "َ" ; t = "" } ;
|
ftacal = { h = "" ; m1 = "ْتَ" ; m2 = "َ" ; t = "" } ;
|
||||||
|
fticAl = ficAl ** { m1 = "ْتِ" } ; -- IL hollow VIII
|
||||||
ftical = ftacal ** { m1 = "ْتِ" } ; -- IL hollow VIII
|
ftical = ftacal ** { m1 = "ْتِ" } ; -- IL hollow VIII
|
||||||
ftAcal = ftacal ** { m1 = "ْتَا" } ; -- IL hollow VIII
|
ftAcal = ftacal ** { m1 = "ْتَا" } ; -- IL hollow VIII
|
||||||
ftIcal = ftacal ** { m1 = "ْتِي" } ; -- IL hollow VIII
|
ftIcal = ftacal ** { m1 = "ْتِي" } ; -- IL hollow VIII
|
||||||
@@ -95,6 +100,7 @@ flags coding=utf8 ;
|
|||||||
euttucil = { h = "اُتُّ" ; m1 = "ِ" ; m2 = "" ; t = "" } ; ---- IL assimilated VIII
|
euttucil = { h = "اُتُّ" ; m1 = "ِ" ; m2 = "" ; t = "" } ; ---- IL assimilated VIII
|
||||||
ttacal = ftacal ** { m1 = "" ; h = "تَّ" } ; ---- IL assimilated VIII
|
ttacal = ftacal ** { m1 = "" ; h = "تَّ" } ; ---- IL assimilated VIII
|
||||||
ttacil = ftacil ** { m1 = "" ; h = "تَّ" } ; ---- IL assimilated VIII
|
ttacil = ftacil ** { m1 = "" ; h = "تَّ" } ; ---- IL assimilated VIII
|
||||||
|
tticAl = ficAl ** { h = "تِّ" } ; ---- IL assimilated VIII
|
||||||
fuccAl = { h = "" ; m1 = "ُ" ; m2 = "َّا" ; t = "" } ;
|
fuccAl = { h = "" ; m1 = "ُ" ; m2 = "َّا" ; t = "" } ;
|
||||||
fuccil = { h = "" ; m1 = "ُ" ; m2 = "ِّ" ; t = "" } ;
|
fuccil = { h = "" ; m1 = "ُ" ; m2 = "ِّ" ; t = "" } ;
|
||||||
fuccilo = { h = "" ; m1 = "ُ" ; m2 = "ِّ" ; t = "ْ" } ;
|
fuccilo = { h = "" ; m1 = "ُ" ; m2 = "ِّ" ; t = "ْ" } ;
|
||||||
@@ -112,7 +118,9 @@ flags coding=utf8 ;
|
|||||||
mafcUl = { h = "مَ"; m1 = "ْ" ; m2 = "ُو" ; t = "" } ;
|
mafcUl = { h = "مَ"; m1 = "ْ" ; m2 = "ُو" ; t = "" } ;
|
||||||
mafcil = { h = "مَ"; m1 = "ْ" ; m2 = "ِ" ; t = "" } ;
|
mafcil = { h = "مَ"; m1 = "ْ" ; m2 = "ِ" ; t = "" } ;
|
||||||
tafAcal = { h = "تَ"; m1 = "َا" ; m2 = "َ" ; t = "" } ;
|
tafAcal = { h = "تَ"; m1 = "َا" ; m2 = "َ" ; t = "" } ;
|
||||||
|
tafAcul = { h = "تَ"; m1 = "َا" ; m2 = "ُ" ; t = "" } ;
|
||||||
tafaccal = { h = "تَ"; m1 = "َ" ; m2 = "َّ" ; t = "" } ;
|
tafaccal = { h = "تَ"; m1 = "َ" ; m2 = "َّ" ; t = "" } ;
|
||||||
|
tafaccul = { h = "تَ"; m1 = "َ" ; m2 = "ُّ" ; t = "" } ;
|
||||||
tufuccil = { h = "تُ"; m1 = "ُ" ; m2 = "ِّ" ; t = "" } ;
|
tufuccil = { h = "تُ"; m1 = "ُ" ; m2 = "ِّ" ; t = "" } ;
|
||||||
tufUcil = { h = "تُ"; m1 = "ُو" ; m2 = "ِ" ; t = "" } ;
|
tufUcil = { h = "تُ"; m1 = "ُو" ; m2 = "ِ" ; t = "" } ;
|
||||||
ufAcal = { h = "ُ" ; m1 = "َا" ; m2 = "َ" ; t = "" } ;
|
ufAcal = { h = "ُ" ; m1 = "َا" ; m2 = "َ" ; t = "" } ;
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ concrete PhraseAra of Phrase = CatAra ** open
|
|||||||
|
|
||||||
UttCN cn = {s = ResAra.uttCN cn } ; --IL
|
UttCN cn = {s = ResAra.uttCN cn } ; --IL
|
||||||
UttNP np = {s = \\_ => np.s ! Nom} ;
|
UttNP np = {s = \\_ => np.s ! Nom} ;
|
||||||
UttVP vp = {s = uttVP vp} ; --IL
|
UttVP vp = {s = uttVP VPPerf vp} ; --IL
|
||||||
UttS s = {s = \\_ => s.s ! Verbal} ;
|
UttS s = {s = \\_ => s.s ! Verbal} ;
|
||||||
UttAdv,
|
UttAdv,
|
||||||
UttIAdv = \s -> {s = \\_ => s.s} ; ---- OK? AR
|
UttIAdv = \s -> {s = \\_ => s.s} ; ---- OK? AR
|
||||||
|
|||||||
@@ -2,65 +2,68 @@ concrete QuestionAra of Question = CatAra ** open ResAra, ParamX, Prelude, VerbA
|
|||||||
|
|
||||||
flags optimize=all_subs ; coding = utf8 ;
|
flags optimize=all_subs ; coding = utf8 ;
|
||||||
|
|
||||||
lin
|
lin
|
||||||
|
-- : Cl -> QCl ; -- does John walk
|
||||||
|
QuestCl cl = {
|
||||||
|
s = \\t,p =>
|
||||||
|
table {
|
||||||
|
QIndir => "إِذا" ++ cl.s ! t ! p ! toOrder QIndir ;
|
||||||
|
QDir => "هَلْ" ++ cl.s ! t ! p ! Verbal -- yes/no question
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
QuestCl cl = {
|
-- : IP -> VP -> QCl ; -- who walks
|
||||||
s = \\t,p =>
|
QuestVP qp vp =
|
||||||
table {
|
let np = ip2np qp (case vp.vtype of {Copula=>True ; _=>False}) ;
|
||||||
QIndir => "إِذا" ++ cl.s ! t ! p ! toOrder QIndir ;
|
cl = PredVP np vp ;
|
||||||
QDir => "هَلْ" ++ cl.s ! t ! p ! toOrder QDir
|
in { s = \\t,p,qf => cl.s ! t ! p ! toOrder qf } ;
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
-- ComplSlashIP vps ip = {} ;
|
-- QuestIAdv : IAdv -> Cl -> QCl ; -- why does John walk
|
||||||
|
QuestIAdv iadv cl = {s = \\t,p,qf => iadv.s ++ cl.s ! t ! p ! Verbal} ; -- Verbal word order, because there is no pre-existing question word /IL
|
||||||
--IL guessed
|
|
||||||
QuestVP qp vp =
|
|
||||||
let np = ip2np qp vp.isPred ;
|
|
||||||
cl = PredVP np vp ;
|
|
||||||
in { s = \\t,p,qf => cl.s ! t ! p ! toOrder qf } ;
|
|
||||||
|
|
||||||
---- AR guessed
|
|
||||||
QuestIAdv iadv cl = {s = \\t,p,qf => iadv.s ++ cl.s ! t ! p ! toOrder qf} ;
|
|
||||||
|
|
||||||
---- IL guessed
|
---- IL guessed
|
||||||
-- : IComp -> NP -> QCl
|
-- : IComp -> NP -> QCl
|
||||||
QuestIComp ic np =
|
QuestIComp ic np =
|
||||||
let vp = UseComp (CompNP np) ; -- puts NP in nominative
|
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
|
ip : ResAra.IP = np ** { -- NP's s is already present in VP, we only want its agr
|
||||||
s = \\_,_,_,_ => ic.s ! pgn2gn np.a.pgn } ;
|
s = \\_,_,_,_ => ic.s ! pgn2gn np.a.pgn } ;
|
||||||
in QuestVP ip vp ;
|
in QuestVP ip vp ;
|
||||||
|
|
||||||
-- : IP -> IComp ;
|
-- : IP -> IComp ;
|
||||||
CompIP ip = ip ** {
|
CompIP ip = ip ** {
|
||||||
s = \\gn => ip.s ! True -- True=IP will be a subject of predicative sentence
|
s = \\gn => ip.s ! True -- True=IP will be a subject of predicative sentence
|
||||||
! gn.g -- IComp agrees in gender with eventual head
|
! gn.g -- IComp agrees in gender with eventual head
|
||||||
! Def ! Nom ; -- IP will be a subject
|
! Def ! Nom ; -- IP will be a subject
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
CompIAdv iadv = { s = \\_ => iadv.s ; a = ResAra.Sg } ;
|
-- : IAdv -> IComp ; -- where (is it)
|
||||||
|
CompIAdv iadv = { s = \\_ => iadv.s ; a = ResAra.Sg } ;
|
||||||
|
|
||||||
-- QCl = {s : Tense => Polarity => QForm => Str} ;
|
-- : IP -> ClSlash -> QCl ; -- whom does John love
|
||||||
QuestSlash ip cls = { ----IL just guessing
|
QuestSlash ip cls = {
|
||||||
s = \\t,p,qf =>
|
s = \\t,p,qf => -- remove cls's c2 so it won't show up in the wrong place
|
||||||
let cl : ResAra.Cl = complClSlash cls ; -- dummy conversion to Cl
|
let cl : ResAra.Cl = complClSlash (cls ** {c2=noPrep});
|
||||||
o = toOrder qf
|
o = toOrder qf
|
||||||
in cls.c2.s ++ bindIf cls.c2.binds
|
in cls.c2.s ++ bindIf cls.c2.binds -- Put cls's c2 ("with") before the IP ("whom")
|
||||||
++ ip.s ! False ! Masc ! Def ! Nom
|
++ ip.s ! False ! Masc ! Def ! Nom
|
||||||
++ cl.s ! t ! p ! o
|
++ cl.s ! t ! p ! o
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
--IL guessed
|
-- : Prep -> IP -> IAdv ; -- with whom
|
||||||
PrepIP p ip = {
|
PrepIP prep ip = {
|
||||||
s = p.s ++ ip.s ! False -- not used as a subject of predicative sentence
|
s = prep.s ++ bindIf prep.binds
|
||||||
! Masc ----
|
++ ip.s ! False -- not used as a subject of predicative sentence
|
||||||
! Def ! Gen
|
! Masc ----
|
||||||
|
! Def -- not sure /IL
|
||||||
|
! prep.c
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
-- : IP -> Adv -> IP ; -- who in Paris
|
||||||
AdvIP ip adv = ip ** {
|
AdvIP ip adv = ip ** {
|
||||||
s = \\isPred,g,s,c => ip.s ! isPred ! g ! s ! c ++ adv.s ;
|
s = \\isPred,g,s,c => ip.s ! isPred ! g ! s ! c ++ adv.s ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
-- : IAdv -> Adv -> IAdv ; -- where in Paris
|
||||||
AdvIAdv iadv adv = {s = iadv.s ++ adv.s} ;
|
AdvIAdv iadv adv = {s = iadv.s ++ adv.s} ;
|
||||||
|
|
||||||
-- : IDet -> IP
|
-- : IDet -> IP
|
||||||
@@ -85,4 +88,13 @@ concrete QuestionAra of Question = CatAra ** open ResAra, ParamX, Prelude, VerbA
|
|||||||
n = sizeToNumber num.n ;
|
n = sizeToNumber num.n ;
|
||||||
d = Indef ---- TODO check
|
d = Indef ---- TODO check
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
-- IL guessed all following
|
||||||
|
lincat
|
||||||
|
QVP = ResAra.VP ; -- buy what where
|
||||||
|
lin
|
||||||
|
ComplSlashIP vps ip = ComplSlash vps (ip2np ip False) ; -- : VPSlash -> IP -> QVP ; -- buys what
|
||||||
|
AdvQVP = AdvVP ; -- : VP -> IAdv -> QVP ; -- lives where
|
||||||
|
AddAdvQVP = AdvVP ; -- : QVP -> IAdv -> QVP ; -- buys what where
|
||||||
|
QuestQVP = QuestVP ; -- : IP -> QVP -> QCl ; -- who buys what where
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
concrete RelativeAra of Relative = CatAra **
|
concrete RelativeAra of Relative = CatAra **
|
||||||
open ResAra in {
|
open Prelude,ResAra in {
|
||||||
flags coding=utf8;
|
flags coding=utf8;
|
||||||
|
|
||||||
lin
|
lin
|
||||||
@@ -13,7 +13,7 @@ concrete RelativeAra of Relative = CatAra **
|
|||||||
s = \\t,p,agr,c =>
|
s = \\t,p,agr,c =>
|
||||||
let
|
let
|
||||||
npS : Case => Str = \\_ => rp.s ! agr2ragr agr c ;
|
npS : Case => Str = \\_ => rp.s ! agr2ragr agr c ;
|
||||||
np : ResAra.NP = agrNP agr ** {s = npS} ;
|
np : ResAra.NP = agrNP {pgn=agr;isPron=False} ** {s = npS} ;
|
||||||
cl = predVP np vp ;
|
cl = predVP np vp ;
|
||||||
in
|
in
|
||||||
cl.s ! t ! p ! Nominal
|
cl.s ! t ! p ! Nominal
|
||||||
@@ -23,7 +23,7 @@ concrete RelativeAra of Relative = CatAra **
|
|||||||
RelSlash rp cls = cls ** {
|
RelSlash rp cls = cls ** {
|
||||||
s = \\t,p,agr,c =>
|
s = \\t,p,agr,c =>
|
||||||
let --empty : Agr -> NP = emptyNP ;
|
let --empty : Agr -> NP = emptyNP ;
|
||||||
obj : ResAra.NP = pgn2pron agr.pgn ; -- head is repeated as a clitic object pronoun
|
obj : ResAra.NP = pgn2pron agr ; -- head is repeated as a clitic object pronoun
|
||||||
cl : ResAra.Cl = complClSlash obj cls ;
|
cl : ResAra.Cl = complClSlash obj cls ;
|
||||||
in rp.s ! agr2ragr agr c ++ cl.s ! t ! p ! VOS
|
in rp.s ! agr2ragr agr c ++ cl.s ! t ! p ! VOS
|
||||||
} ;
|
} ;
|
||||||
|
|||||||
2670
src/arabic/ResAra.gf
2670
src/arabic/ResAra.gf
File diff suppressed because it is too large
Load Diff
@@ -44,7 +44,7 @@ concrete SentenceAra of Sentence = CatAra ** open
|
|||||||
|
|
||||||
EmbedS s = {s = "أَنْ" ++ s.s ! Verbal} ;
|
EmbedS s = {s = "أَنْ" ++ s.s ! Verbal} ;
|
||||||
EmbedQS qs = {s = qs.s ! QIndir} ;
|
EmbedQS qs = {s = qs.s ! QIndir} ;
|
||||||
EmbedVP vp = {s = uttVP vp ! Masc} ;
|
EmbedVP vp = {s = uttVP VPPerf vp ! Masc} ; -- TODO: use VPGer once it's more stable
|
||||||
|
|
||||||
UseCl t p cl =
|
UseCl t p cl =
|
||||||
{s = \\o => t.s ++ p.s ++
|
{s = \\o => t.s ++ p.s ++
|
||||||
@@ -66,7 +66,9 @@ concrete SentenceAra of Sentence = CatAra ** open
|
|||||||
|
|
||||||
UseRCl t p cl = {s = \\agr,c => t.s ++ p.s ++ cl.s ! t.t ! p.p ! agr ! c} ;
|
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) ;
|
-- If the cls has a c2, the preposition will just hang there without an object.
|
||||||
|
-- If this bothers you, call complClSlash to cls ** {c2=noPrep}. /IL
|
||||||
|
UseSlash t p cls = UseCl t p (complClSlash cls) ;
|
||||||
|
|
||||||
AdvS adv s = s ** {s = \\o => adv.s ++ s.s ! o} ;
|
AdvS adv s = s ** {s = \\o => adv.s ++ s.s ! o} ;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
concrete StructuralAra of Structural = CatAra **
|
concrete StructuralAra of Structural = CatAra **
|
||||||
open MorphoAra, ResAra, ParadigmsAra, Prelude in {
|
open MorphoAra, ResAra, ParadigmsAra, (N=NounAra), Prelude in {
|
||||||
|
|
||||||
flags optimize=all ; coding=utf8 ;
|
flags optimize=all ; coding=utf8 ;
|
||||||
|
|
||||||
@@ -38,8 +38,8 @@ concrete StructuralAra of Structural = CatAra **
|
|||||||
from_Prep = mkPrep "مِنَ" ;
|
from_Prep = mkPrep "مِنَ" ;
|
||||||
he_Pron = ResAra.he_Pron ;
|
he_Pron = ResAra.he_Pron ;
|
||||||
here_Adv = ss "هُنا" ;
|
here_Adv = ss "هُنا" ;
|
||||||
-- here7to_Adv = ss ["تْ هري"] ;
|
here7to_Adv = ss "إلَىَ هُنَا" ;
|
||||||
-- here7from_Adv = ss ["فرْم هري"] ;
|
here7from_Adv = ss "مِنْ هُنَا" ;
|
||||||
how_IAdv = ss "كَيفَ" ;
|
how_IAdv = ss "كَيفَ" ;
|
||||||
how8many_IDet = {
|
how8many_IDet = {
|
||||||
s = \\g,s,c => "كَمْ عَدَد" + caseTbl ! c ;
|
s = \\g,s,c => "كَمْ عَدَد" + caseTbl ! c ;
|
||||||
@@ -47,10 +47,11 @@ concrete StructuralAra of Structural = CatAra **
|
|||||||
} ; -- IL
|
} ; -- IL
|
||||||
how8much_IAdv = ss "كَمْ" ;
|
how8much_IAdv = ss "كَمْ" ;
|
||||||
if_Subj = mkSubj "إِذَا" Verbal ;
|
if_Subj = mkSubj "إِذَا" Verbal ;
|
||||||
|
--whether_Subj = mkSubj "مَا إِذَا" Verbal ;
|
||||||
in8front_Prep = mkPrep "مُقَابِلَ" ;
|
in8front_Prep = mkPrep "مُقَابِلَ" ;
|
||||||
i_Pron = ResAra.i_Pron ;
|
i_Pron = ResAra.i_Pron ;
|
||||||
in_Prep = mkPrep "فِي" ;
|
in_Prep = mkPrep "فِي" ;
|
||||||
it_Pron = emptyNP ** {s = \\_ => "هَذَا"} ; -- was: it_Pron = mkPron "ِت" "ِت" "ِتس" (Per3 Masc Sg);
|
it_Pron = N.DetNP (N.DetQuant this_Quant N.NumSg) ; -- was: it_Pron = mkPron "ِت" "ِت" "ِتس" (Per3 Masc Sg);
|
||||||
-- less_CAdv = ss "لسّ" ;
|
-- less_CAdv = ss "لسّ" ;
|
||||||
many_Det = mkDet "جَمِيع" Pl Const ;
|
many_Det = mkDet "جَمِيع" Pl Const ;
|
||||||
-- more_CAdv = ss "مْري" ;
|
-- more_CAdv = ss "مْري" ;
|
||||||
@@ -61,6 +62,7 @@ concrete StructuralAra of Structural = CatAra **
|
|||||||
-- ["هَد تْ"] ; ["هَثِنغ تْ"] ; "مُستنءت" ; ["هَدنءت تْ"]] ; ----
|
-- ["هَد تْ"] ; ["هَثِنغ تْ"] ; "مُستنءت" ; ["هَدنءت تْ"]] ; ----
|
||||||
-- isAux = True
|
-- isAux = True
|
||||||
-- } ;
|
-- } ;
|
||||||
|
nothing_NP = regNP "لَا شَيْء" Sg Def ;
|
||||||
no_Utt = {s = \\_ => "لا"} ;
|
no_Utt = {s = \\_ => "لا"} ;
|
||||||
on_Prep = mkPrep "عَلَى" ;
|
on_Prep = mkPrep "عَلَى" ;
|
||||||
only_Predet = mkPredet "فَقَط" False;
|
only_Predet = mkPredet "فَقَط" False;
|
||||||
@@ -71,10 +73,10 @@ concrete StructuralAra of Structural = CatAra **
|
|||||||
possess_Prep = liPrep ;
|
possess_Prep = liPrep ;
|
||||||
-- quite_Adv = ss "قُِتي" ;
|
-- quite_Adv = ss "قُِتي" ;
|
||||||
she_Pron = ResAra.she_Pron ;
|
she_Pron = ResAra.she_Pron ;
|
||||||
-- so_AdA = ss "سْ" ;
|
so_AdA = very_AdA ;
|
||||||
somebody_NP = regNP "أَحَد" Sg Indef ;
|
somebody_NP = regNP "أَحَد" Sg Indef ;
|
||||||
someSg_Det = mkDet "أَحَد" Sg Const ;
|
someSg_Det = ResAra.someSg_Det ;
|
||||||
somePl_Det = mkDet "بَعض" Pl Const ;
|
somePl_Det = ResAra.somePl_Det ;
|
||||||
something_NP = regNP "شَيْء" Sg Indef ;
|
something_NP = regNP "شَيْء" Sg Indef ;
|
||||||
-- somewhere_Adv = ss "سْموهري" ;
|
-- somewhere_Adv = ss "سْموهري" ;
|
||||||
that_Quant = mkQuant3 "ذَلِكَ" "تِلكَ" "أُلٱِكَ" Def;
|
that_Quant = mkQuant3 "ذَلِكَ" "تِلكَ" "أُلٱِكَ" Def;
|
||||||
@@ -86,14 +88,14 @@ concrete StructuralAra of Structural = CatAra **
|
|||||||
-- therefore_PConj = ss "تهرفْري" ;
|
-- therefore_PConj = ss "تهرفْري" ;
|
||||||
----b these_NP = indeclNP "هَؤُلَاء" Pl ;
|
----b these_NP = indeclNP "هَؤُلَاء" Pl ;
|
||||||
they_Pron = theyMasc_Pron ;
|
they_Pron = theyMasc_Pron ;
|
||||||
this_Quant = mkQuant7 "هَذا" "هَذِهِ" "هَذَان" "هَذَيْن" "هَاتَان" "هَاتَيْن" "هَؤُلَاء" Def;
|
this_Quant = mkQuant7 "هَذَا" "هَذِهِ" "هَذَان" "هَذَيْن" "هَاتَان" "هَاتَيْن" "هَؤُلَاء" Def ;
|
||||||
----b this_NP = indeclNP "هَذا" Sg ;
|
----b this_NP = indeclNP "هَذا" Sg ;
|
||||||
----b those_NP = indeclNP "هَؤُلَاءكَ" Pl ;
|
----b those_NP = indeclNP "هَؤُلَاءكَ" Pl ;
|
||||||
through_Prep = mkPrep "عَبْرَ" ;
|
through_Prep = mkPrep "عَبْرَ" ;
|
||||||
-- too_AdA = ss "تّْ" ;
|
too_AdA = very_AdA ;
|
||||||
to_Prep = mkPrep "إِلَى" ;
|
to_Prep = mkPrep "إِلَى" ;
|
||||||
under_Prep = mkPrep "تَحْتَ" ;
|
under_Prep = mkPrep "تَحْتَ" ;
|
||||||
-- very_AdA = ss "ثري" ;
|
very_AdA = ss "جِدَّاً" ;
|
||||||
want_VV = mkVV (mkV "رود" FormIV) ;
|
want_VV = mkVV (mkV "رود" FormIV) ;
|
||||||
we_Pron = ResAra.we_Pron ;
|
we_Pron = ResAra.we_Pron ;
|
||||||
whatPl_IP = mkIP "ما" "ماذا" Pl ;
|
whatPl_IP = mkIP "ما" "ماذا" Pl ;
|
||||||
@@ -116,7 +118,7 @@ concrete StructuralAra of Structural = CatAra **
|
|||||||
whoPl_IP = mkIP "مَنْ" "مَنْ" Pl ;
|
whoPl_IP = mkIP "مَنْ" "مَنْ" Pl ;
|
||||||
why_IAdv = ss "لِمَاذَا" ;
|
why_IAdv = ss "لِمَاذَا" ;
|
||||||
without_Prep = mkPrep "بِدُونِ" ;
|
without_Prep = mkPrep "بِدُونِ" ;
|
||||||
with_Prep = mkPrep "مَع" ;
|
with_Prep = mkPrep "مَعَ" ;
|
||||||
yes_Utt = {s = \\_ => "نَعَم"} ;
|
yes_Utt = {s = \\_ => "نَعَم"} ;
|
||||||
youSg_Pron = youSgMasc_Pron ;
|
youSg_Pron = youSgMasc_Pron ;
|
||||||
youPl_Pron = youPlMasc_Pron ;
|
youPl_Pron = youPlMasc_Pron ;
|
||||||
|
|||||||
@@ -12,11 +12,11 @@ concrete VerbAra of Verb = CatAra ** open Prelude, ResAra, ParamX in {
|
|||||||
SlashV2V v2v vp = let v2vVP = predV v2v in -- IL
|
SlashV2V v2v vp = let v2vVP = predV v2v in -- IL
|
||||||
vp ** {
|
vp ** {
|
||||||
s = v2vVP.s ;
|
s = v2vVP.s ;
|
||||||
agrObj = \\pgn => v2v.c3.s -- أَنْ
|
agrObj = \\pgn => v2v.s2 -- أَنْ
|
||||||
++ vp.s ! pgn ! VPImpf Cnj -- this will agree with the object added by ComplSlash
|
++ vp.s ! pgn ! VPImpf Cnj -- this will agree with the object added by ComplSlash
|
||||||
++ vp.obj.s ;
|
++ vp.obj.s ;
|
||||||
obj = emptyObj ;
|
obj = emptyObj ;
|
||||||
isPred = False ;
|
vtype = NotPred ;
|
||||||
c2 = v2v.c2 ; -- preposition for the direct object
|
c2 = v2v.c2 ; -- preposition for the direct object
|
||||||
sc = v2v.sc
|
sc = v2v.sc
|
||||||
} ;
|
} ;
|
||||||
@@ -26,15 +26,22 @@ concrete VerbAra of Verb = CatAra ** open Prelude, ResAra, ParamX in {
|
|||||||
vps ** {
|
vps ** {
|
||||||
s = \\pgn,vpf => v2vVP.s ! pgn ! vpf -- main verb agrees with subject
|
s = \\pgn,vpf => v2vVP.s ! pgn ! vpf -- main verb agrees with subject
|
||||||
++ bindIfPron np v2vVP
|
++ bindIfPron np v2vVP
|
||||||
++ v2v.c3.s -- أَنْ
|
++ v2v.s2 -- أَنْ
|
||||||
++ vps.s ! np.a.pgn ! VPImpf Cnj -- verb from old VP agrees with object
|
++ 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
|
++ vps.obj.s ; -- otherwise obj appears in a weird place /IL
|
||||||
obj = emptyObj ;
|
obj = emptyObj ;
|
||||||
isPred = False ;
|
vtype = NotPred ;
|
||||||
-- preposition for the direct object comes from VP
|
-- preposition for the direct object comes from VP
|
||||||
sc = v2v.sc
|
sc = v2v.sc
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
-- : V2S -> S -> VPSlash ; -- answer (to him) that it is good
|
||||||
|
SlashV2S v2s s = slashV2 v2s ** { -- IL
|
||||||
|
agrObj = -- this is put into agrObj even though it doesn't depend on agr, because insertObj puts agrObj *after* the new object.
|
||||||
|
\\pgn => v2s.s2 -- أَنَّ
|
||||||
|
++ s.s ! v2s.o ;
|
||||||
|
} ;
|
||||||
|
|
||||||
SlashV2a = slashV2 ;
|
SlashV2a = slashV2 ;
|
||||||
Slash2V3 v np = insertObj np (slashV2 v) ** {c2 = v.c3 ; agrObj = \\_ => []};
|
Slash2V3 v np = insertObj np (slashV2 v) ** {c2 = v.c3 ; agrObj = \\_ => []};
|
||||||
|
|
||||||
@@ -59,15 +66,16 @@ concrete VerbAra of Verb = CatAra ** open Prelude, ResAra, ParamX in {
|
|||||||
ComplVV vv vp = let vvVP = predV vv in -- IL
|
ComplVV vv vp = let vvVP = predV vv in -- IL
|
||||||
vp ** {
|
vp ** {
|
||||||
s = \\pgn,vpf => vvVP.s ! pgn ! vpf
|
s = \\pgn,vpf => vvVP.s ! pgn ! vpf
|
||||||
++ vv.c2.s -- أَنْ
|
++ vv.s2 -- أَنْ
|
||||||
++ vp.s ! pgn ! VPImpf Cnj ;
|
++ vp.s ! pgn ! VPImpf Cnj ;
|
||||||
isPred = False ;
|
vtype = NotPred ;
|
||||||
sc = vv.sc
|
sc = vv.sc
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- : VS -> S -> VP ; -- say that she runs
|
-- : VS -> S -> VP ; -- say that she runs
|
||||||
ComplVS vs s = predV vs ** { -- IL
|
ComplVS vs s = predV vs ** { -- IL
|
||||||
obj = emptyObj ** {s = vs.s2 ++ s.s ! vs.o}
|
obj = emptyObj ** {s = vs.s2 -- أَنَّ
|
||||||
|
++ s.s ! vs.o}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- : VQ -> QS -> VP ; -- wonder who runs
|
-- : VQ -> QS -> VP ; -- wonder who runs
|
||||||
@@ -84,7 +92,7 @@ concrete VerbAra of Verb = CatAra ** open Prelude, ResAra, ParamX in {
|
|||||||
UseComp xabar =
|
UseComp xabar =
|
||||||
case xabar.isNP of {
|
case xabar.isNP of {
|
||||||
False => kaan xabar ;
|
False => kaan xabar ;
|
||||||
True => predV copula ** {obj = xabar.obj ; isPred=True}
|
True => predV copula ** {obj = xabar.obj ; vtype=Copula}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
UseCopula = predV copula ;
|
UseCopula = predV copula ;
|
||||||
@@ -92,7 +100,7 @@ concrete VerbAra of Verb = CatAra ** open Prelude, ResAra, ParamX in {
|
|||||||
-- : VP -> Prep -> VPSlash ; -- live in (it)
|
-- : VP -> Prep -> VPSlash ; -- live in (it)
|
||||||
VPSlashPrep vp prep = vp ** {
|
VPSlashPrep vp prep = vp ** {
|
||||||
c2 = prep ;
|
c2 = prep ;
|
||||||
agrObj = \\_ => []
|
agrObj = \\_ => [] -- to make it into VPSlash, VP didn't have that field before
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
AdvVP vp adv = insertStr adv.s vp ;
|
AdvVP vp adv = insertStr adv.s vp ;
|
||||||
@@ -102,12 +110,15 @@ concrete VerbAra of Verb = CatAra ** open Prelude, ResAra, ParamX in {
|
|||||||
|
|
||||||
-- : VPSlash -> VP ; -- love himself
|
-- : VPSlash -> VP ; -- love himself
|
||||||
ReflVP vps = vps ** {
|
ReflVP vps = vps ** {
|
||||||
s = \\pgn,vf => vps.s ! pgn ! vf ++ reflPron Acc pgn
|
s = \\pgn,vf => vps.s ! pgn ! vf
|
||||||
|
++ vps.obj.s -- only relevant if the VPSlash has been through VPSlashPrep
|
||||||
|
++ vps.c2.s ++ bindIf vps.c2.binds
|
||||||
|
++ reflPron vps.c2.c pgn ;
|
||||||
|
c2 = accPrep ;
|
||||||
|
obj = emptyObj ; -- because old obj was moved in s
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
PassV2 = passPredV ;
|
PassV2 = passPredV ;
|
||||||
--
|
|
||||||
-- UseVS, UseVQ = \vv -> {s = vv.s ; c2 = [] ; isRefl = vv.isRefl} ; -- no
|
|
||||||
|
|
||||||
CompAP ap = {s = \\agr,c => ap.s ! Hum ! agr.g ! agr.n ! Indef ! c ; --FIXME
|
CompAP ap = {s = \\agr,c => ap.s ! Hum ! agr.g ! agr.n ! Indef ! c ; --FIXME
|
||||||
obj = emptyObj ; isNP = False} ;
|
obj = emptyObj ; isNP = False} ;
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ lin
|
|||||||
tr (th "членувано" ++ td (a.s ! (APl Def)))
|
tr (th "членувано" ++ td (a.s ! (APl Def)))
|
||||||
) ++
|
) ++
|
||||||
heading1 ("Наречие") ++
|
heading1 ("Наречие") ++
|
||||||
paragraph (a.s ! (ASg Neut Indef)) ;
|
paragraph (a.adv) ;
|
||||||
s3= ""
|
s3= ""
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|||||||
@@ -4,4 +4,5 @@ concrete AllCat of AllCatAbs =
|
|||||||
LangCat,
|
LangCat,
|
||||||
IrregCat,
|
IrregCat,
|
||||||
ExtraCat
|
ExtraCat
|
||||||
** {} ;
|
** open ExtendCat
|
||||||
|
in {} ;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
--# -path=.:../romance:../abstract:../common:prelude
|
--# -path=.:../romance:../abstract:../common:prelude
|
||||||
instance DiffCat of DiffRomance - [partAgr,vpAgrSubj,vpAgrClits] = open CommonRomance, PhonoCat, BeschCat, Prelude in {
|
instance DiffCat of DiffRomance - [partAgr,stare_V,vpAgrSubj,vpAgrClits] = open CommonRomance, PhonoCat, BeschCat, Prelude in {
|
||||||
|
|
||||||
flags optimize=noexpand ;
|
flags optimize=noexpand ;
|
||||||
coding=utf8 ;
|
coding=utf8 ;
|
||||||
@@ -108,28 +108,26 @@ oper
|
|||||||
|
|
||||||
infForm _ _ _ _ = True ;
|
infForm _ _ _ _ = True ;
|
||||||
|
|
||||||
mkImperative b p vp =
|
mkImperative isPol p vp =
|
||||||
\\pol,g,n =>
|
\\pol,g,n => case pol of {
|
||||||
let
|
RPos => neg.p1 ++ imper ++ bindIf refl.isRefl ++ refl.pron
|
||||||
pe = case b of {True => P3 ; _ => p} ;
|
++ bindIf hasClit ++ clit ++ compl ;
|
||||||
agr = {g = g ; n = n ; p = pe} ;
|
RNeg _ => neg.p1 ++ refl.pron ++ clit ++ compl ++ subj
|
||||||
refl = case vp.s.vtyp of {
|
} where {
|
||||||
VRefl => <reflPron n pe Acc,True> ;
|
pe = case isPol of {True => P3 ; _ => p} ;
|
||||||
_ => <[],False>
|
refl = case vp.s.vtyp of {
|
||||||
} ;
|
VRefl => {pron = reflPron n pe Acc ; isRefl = True} ;
|
||||||
|
_ => {pron = [] ; isRefl = False}
|
||||||
|
} ;
|
||||||
|
clit = vp.clit1 ++ vp.clit2 ;
|
||||||
|
hasClit = vp.clit3.hasClit ;
|
||||||
|
imper = vp.s.s ! vImper n pe ;
|
||||||
|
subj = vp.s.s ! VFin (VPres Conjunct) n pe ;
|
||||||
|
neg = vp.neg ! pol ;
|
||||||
|
agr = {g = g ; n = n ; p = pe} ;
|
||||||
|
compl = neg.p2 ++ vp.comp ! agr ++ vp.ext ! pol
|
||||||
|
} ;
|
||||||
|
|
||||||
clpr = <vp.clit1 ++ vp.clit2, [],vp.clit3.hasClit> ; ---- TODO: True if clit
|
|
||||||
---- clpr = <[],[],False> ; ----e pronArg agr.n agr.p vp.clAcc vp.clDat ;
|
|
||||||
----e verb = case <aag.n, pol,pe> of {
|
|
||||||
----e <Sg,Neg,P2> => (vp.s ! VPInfinit Simul clpr.p3).inf ! aag ;
|
|
||||||
----e _ => (vp.s ! VPImperat).fin ! agr
|
|
||||||
----e } ;
|
|
||||||
verb = vp.s.s ! vImper n pe ; ----e
|
|
||||||
neg = vp.neg ! pol ;
|
|
||||||
compl = neg.p2 ++ clpr.p2 ++ vp.comp ! agr ++ vp.ext ! pol
|
|
||||||
in
|
|
||||||
neg.p1 ++ verb ++ bindIf refl.p2 ++ refl.p1 ++ bindIf clpr.p3 ++ clpr.p1 ++ compl
|
|
||||||
;
|
|
||||||
CopulaType = Bool ;
|
CopulaType = Bool ;
|
||||||
selectCopula = \isEstar -> case isEstar of {True => estar_V ; False => copula} ;
|
selectCopula = \isEstar -> case isEstar of {True => estar_V ; False => copula} ;
|
||||||
serCopula = False ;
|
serCopula = False ;
|
||||||
@@ -201,12 +199,10 @@ oper
|
|||||||
_ => False
|
_ => False
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
auxPassive : Verb = verbBeschH (estar_54 "estar") ;
|
haver_V, auxPassive : Verb = verbBeschH (estar_54 "estar") ;
|
||||||
|
|
||||||
copula = verbBeschH (ser_52 "ser") ;
|
essere_V, copula = verbBeschH (ser_52 "ser") ;
|
||||||
estar_V = verbBeschH (estar_54 "estar") ;
|
stare_V, estar_V = verbBeschH (estar_54 "estar") ;
|
||||||
|
|
||||||
haver_V : Verb = verbBeschH (haver_59 "haver" True) ;
|
|
||||||
|
|
||||||
verbBeschH : Verbum -> Verb = \v -> verbBesch v ** {vtyp = VHabere ; p = []} ;
|
verbBeschH : Verbum -> Verb = \v -> verbBesch v ** {vtyp = VHabere ; p = []} ;
|
||||||
|
|
||||||
|
|||||||
19
src/catalan/ExtendCat.gf
Normal file
19
src/catalan/ExtendCat.gf
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
--# -path=alltenses:../common:../abstract:../romance
|
||||||
|
concrete ExtendCat of Extend = CatCat ** ExtendRomanceFunctor-- -
|
||||||
|
-- [
|
||||||
|
-- ]
|
||||||
|
-- don't forget to put the names of your own
|
||||||
|
-- definitions here
|
||||||
|
with
|
||||||
|
(Grammar = GrammarCat), (Syntax = SyntaxCat), (ResRomance = ResCat) **
|
||||||
|
open
|
||||||
|
GrammarCat,
|
||||||
|
ResCat,
|
||||||
|
MorphoCat,
|
||||||
|
Coordination,
|
||||||
|
Prelude,
|
||||||
|
ParadigmsCat in {
|
||||||
|
-- put your own definitions here
|
||||||
|
|
||||||
|
|
||||||
|
} ;
|
||||||
@@ -54,6 +54,7 @@ lin
|
|||||||
ExistCN cn = ExistNP (DetCN (DetQuant IndefArt NumSg) cn) ;
|
ExistCN cn = ExistNP (DetCN (DetQuant IndefArt NumSg) cn) ;
|
||||||
ExistMassCN cn = ExistNP (MassNP cn) ;
|
ExistMassCN cn = ExistNP (MassNP cn) ;
|
||||||
ExistPluralCN cn = ExistNP (DetCN (DetQuant IndefArt NumPl) cn) ;
|
ExistPluralCN cn = ExistNP (DetCN (DetQuant IndefArt NumPl) cn) ;
|
||||||
|
AdvIsNP adv np = PredVP np (UseComp (CompAdv adv)) ; -- here is the tree / here are the trees
|
||||||
PurposeVP = variants {} ; -- VP -> Adv ; -- to become happy
|
PurposeVP = variants {} ; -- VP -> Adv ; -- to become happy
|
||||||
ComplBareVS = ComplVS ; -- VS -> S -> VP ; -- say she runs ; DEFAULT say that she runs
|
ComplBareVS = ComplVS ; -- VS -> S -> VP ; -- say she runs ; DEFAULT say that she runs
|
||||||
SlashBareV2S = SlashV2S ; -- V2S -> S -> VPSlash ; -- answer (to him) it is good ; DEFAULT answer that it is good
|
SlashBareV2S = SlashV2S ; -- V2S -> S -> VPSlash ; -- answer (to him) it is good ; DEFAULT answer that it is good
|
||||||
@@ -76,7 +77,7 @@ lin
|
|||||||
Cons_nr_RNP = variants {} ; -- NP -> RNPList -> RNPList ; -- John, my family, myself
|
Cons_nr_RNP = variants {} ; -- NP -> RNPList -> RNPList ; -- John, my family, myself
|
||||||
ComplGenVV = variants {} ; -- VV -> Ant -> Pol -> VP -> VP ; -- want not to have slept
|
ComplGenVV = variants {} ; -- VV -> Ant -> Pol -> VP -> VP ; -- want not to have slept
|
||||||
ComplSlashPartLast = ComplSlash ;
|
ComplSlashPartLast = ComplSlash ;
|
||||||
SlashV2V = variants {} ; -- V2V -> Ant -> Pol -> VPS -> VPSlash ; -- force (her) not to have slept
|
--SlashV2V = variants {} ; -- V2V -> Ant -> Pol -> VPS -> VPSlash ; -- force (her) not to have slept
|
||||||
CompoundN = variants {} ; -- N -> N -> N ; -- control system / controls system / control-system
|
CompoundN = variants {} ; -- N -> N -> N ; -- control system / controls system / control-system
|
||||||
CompoundAP = variants {} ; -- N -> A -> AP ; -- language independent / language-independent
|
CompoundAP = variants {} ; -- N -> A -> AP ; -- language independent / language-independent
|
||||||
GerundCN = variants {} ; -- VP -> CN ; -- publishing of the document (can get a determiner)
|
GerundCN = variants {} ; -- VP -> CN ; -- publishing of the document (can get a determiner)
|
||||||
@@ -96,6 +97,7 @@ lin
|
|||||||
DetNPMasc = DetNP ;
|
DetNPMasc = DetNP ;
|
||||||
DetNPFem = DetNP ;
|
DetNPFem = DetNP ;
|
||||||
|
|
||||||
|
UseComp_estar = UseComp ; -- DEFAULT UseComp
|
||||||
iFem_Pron = i_Pron ; -- DEFAULT I (masc)
|
iFem_Pron = i_Pron ; -- DEFAULT I (masc)
|
||||||
youFem_Pron = youSg_Pron ; -- DEFAULT you (masc)
|
youFem_Pron = youSg_Pron ; -- DEFAULT you (masc)
|
||||||
weFem_Pron = we_Pron ; -- DEFAULT we (masc)
|
weFem_Pron = we_Pron ; -- DEFAULT we (masc)
|
||||||
@@ -104,10 +106,12 @@ lin
|
|||||||
youPolFem_Pron = youPol_Pron ; -- DEFAULT you polite (masc)
|
youPolFem_Pron = youPol_Pron ; -- DEFAULT you polite (masc)
|
||||||
youPolPl_Pron = youPl_Pron ; -- DEFAULT you plural (masc)
|
youPolPl_Pron = youPl_Pron ; -- DEFAULT you plural (masc)
|
||||||
youPolPlFem_Pron = youPl_Pron ; -- DEFAULT you plural (masc)
|
youPolPlFem_Pron = youPl_Pron ; -- DEFAULT you plural (masc)
|
||||||
|
UncontractedNeg = variants {} ; -- do not, etc, as opposed to don't
|
||||||
UttAccNP = UttNP ; -- him (accusative) ; DEFAULT he
|
UttAccNP = UttNP ; -- him (accusative) ; DEFAULT he
|
||||||
UttDatNP np = UttAccNP (lin NP np) ; -- him(dative) ; DEFAULT he
|
UttDatNP np = UttAccNP (lin NP np) ; -- him(dative) ; DEFAULT he
|
||||||
UttAccIP = UttIP ; -- whom (accusative) ; DEFAULT who
|
UttAccIP = UttIP ; -- whom (accusative) ; DEFAULT who
|
||||||
UttDatIP ip = UttAccIP (lin IP ip) ; -- whom (dative) ; DEFAULT who
|
UttDatIP ip = UttAccIP (lin IP ip) ; -- whom (dative) ; DEFAULT who
|
||||||
|
UttVPShort = UttVP ; -- have fun, as opposed to "to have fun" ; DEFAULT UttVP
|
||||||
|
|
||||||
oper
|
oper
|
||||||
quoted : Str -> Str = \s -> "\"" ++ s ++ "\"" ; ---- TODO bind ; move to Prelude?
|
quoted : Str -> Str = \s -> "\"" ++ s ++ "\"" ; ---- TODO bind ; move to Prelude?
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ concrete ExtendEng of Extend =
|
|||||||
CatEng ** ExtendFunctor -
|
CatEng ** ExtendFunctor -
|
||||||
[
|
[
|
||||||
VPS, ListVPS, VPI, ListVPI, VPS2, ListVPS2, VPI2, ListVPI2, RNP, RNPList,
|
VPS, ListVPS, VPI, ListVPI, VPS2, ListVPS2, VPI2, ListVPI2, RNP, RNPList,
|
||||||
AdAdV, AdjAsCN, AdjAsNP, ApposNP,
|
AdAdV, AdjAsCN, AdjAsNP, ApposNP, AdvIsNP,
|
||||||
BaseVPS, ConsVPS, BaseVPI, ConsVPI, BaseVPS2, ConsVPS2, BaseVPI2, ConsVPI2,
|
BaseVPS, ConsVPS, BaseVPI, ConsVPI, BaseVPS2, ConsVPS2, BaseVPI2, ConsVPI2,
|
||||||
MkVPS, ConjVPS, PredVPS, MkVPI, ConjVPI, ComplVPIVV,
|
MkVPS, ConjVPS, PredVPS, MkVPI, ConjVPI, ComplVPIVV,
|
||||||
MkVPS2, ConjVPS2, ComplVPS2, MkVPI2, ConjVPI2, ComplVPI2,
|
MkVPS2, ConjVPS2, ComplVPS2, MkVPI2, ConjVPI2, ComplVPI2,
|
||||||
@@ -328,6 +328,8 @@ concrete ExtendEng of Extend =
|
|||||||
lin
|
lin
|
||||||
ApposNP np1 np2 = {s = \\c => np1.s ! c ++ comma ++ np2.s ! c; a = np1.a} ;
|
ApposNP np1 np2 = {s = \\c => np1.s ! c ++ comma ++ np2.s ! c; a = np1.a} ;
|
||||||
|
|
||||||
|
AdvIsNP adv np = PredVP {s = \\_ => adv.s ; a = np.a} (UseComp (CompNP np)) ;
|
||||||
|
|
||||||
---- TODO: RNPList construction
|
---- TODO: RNPList construction
|
||||||
|
|
||||||
lin
|
lin
|
||||||
|
|||||||
@@ -11,7 +11,15 @@ oper
|
|||||||
lin IDet {s = s ; n = n} ;
|
lin IDet {s = s ; n = n} ;
|
||||||
mkIQuant : Str -> Str -> IQuant = \s,n ->
|
mkIQuant : Str -> Str -> IQuant = \s,n ->
|
||||||
lin IQuant {s = table {Sg => s ; Pl => n}} ;
|
lin IQuant {s = table {Sg => s ; Pl => n}} ;
|
||||||
mkDet : Str -> Number -> Det = \s,n ->
|
|
||||||
lin Det (mkDeterminer n s) ;
|
mkDet = overload {
|
||||||
|
mkDet : Str -> Number -> Det = \s,n ->
|
||||||
|
lin Det (mkDeterminer n s) ;
|
||||||
|
mkDet : Str -> Det -> Det = \s,d ->
|
||||||
|
d ** {
|
||||||
|
s = s ++ d.s ;
|
||||||
|
sp = \\g,b,c => s ++ d.sp ! g ! b ! c ;
|
||||||
|
} ;
|
||||||
|
} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -313,7 +313,8 @@ oper
|
|||||||
mkVS : V -> VS ; -- sentence-compl e.g. say (that S)
|
mkVS : V -> VS ; -- sentence-compl e.g. say (that S)
|
||||||
mkV2S : V -> Prep -> V2S ; -- e.g. tell (NP) (that S)
|
mkV2S : V -> Prep -> V2S ; -- e.g. tell (NP) (that S)
|
||||||
mkVV : V -> VV ; -- e.g. want (to VP)
|
mkVV : V -> VV ; -- e.g. want (to VP)
|
||||||
infVV : V -> VV ; -- e.g. want (to VP)
|
auxVV : V -> VV ; -- e.g. must (VP)
|
||||||
|
infVV : V -> VV ; -- e.g. must (VP) (old name of auxVV)
|
||||||
ingVV : V -> VV ; -- e.g. start (VPing)
|
ingVV : V -> VV ; -- e.g. start (VPing)
|
||||||
mkV2V : overload {
|
mkV2V : overload {
|
||||||
mkV2V : Str -> V2V ;
|
mkV2V : Str -> V2V ;
|
||||||
@@ -579,8 +580,13 @@ mkInterj : Str -> Interj
|
|||||||
p = v.p ;
|
p = v.p ;
|
||||||
typ = VVInf
|
typ = VVInf
|
||||||
} ;
|
} ;
|
||||||
infVV v = lin VV {
|
auxVV, infVV = \v -> lin VV {
|
||||||
s = table {VVF vf => v.s ! vf ; _ => v.s ! VInf} ;
|
s = table {
|
||||||
|
VVF vf => v.s ! vf ;
|
||||||
|
VVPresNeg => v.s ! VPres ++ "not" ;
|
||||||
|
VVPastNeg => v.s ! VPast ++ "not" ; --# notpresent
|
||||||
|
_ => v.s ! VInf
|
||||||
|
} ;
|
||||||
p = v.p ;
|
p = v.p ;
|
||||||
typ = VVAux
|
typ = VVAux
|
||||||
} ;
|
} ;
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ concrete CatFin of Cat = CommonX ** open ResFin, StemFin, Prelude in {
|
|||||||
CN = {s : NForm => Str ; h : Harmony} ;
|
CN = {s : NForm => Str ; h : Harmony} ;
|
||||||
Pron = {s : NPForm => Str ; a : Agr ; hasPoss : Bool ; poss : Str} ;
|
Pron = {s : NPForm => Str ; a : Agr ; hasPoss : Bool ; poss : Str} ;
|
||||||
NP = {s : NPForm => Str ; a : Agr ; isPron : Bool ; isNeg : Bool} ;
|
NP = {s : NPForm => Str ; a : Agr ; isPron : Bool ; isNeg : Bool} ;
|
||||||
Det = {
|
DAP, Det = {
|
||||||
s1 : Case => Str ; -- minun kolme
|
s1 : Case => Str ; -- minun kolme
|
||||||
s2 : Harmony => Str ; -- -ni (Front for -nsä, Back for -nsa)
|
s2 : Harmony => Str ; -- -ni (Front for -nsä, Back for -nsa)
|
||||||
sp : Case => Str ; -- se (substantival form)
|
sp : Case => Str ; -- se (substantival form)
|
||||||
|
|||||||
@@ -2,9 +2,10 @@
|
|||||||
|
|
||||||
concrete ExtendFin of Extend =
|
concrete ExtendFin of Extend =
|
||||||
CatFin ** ExtendFunctor - [
|
CatFin ** ExtendFunctor - [
|
||||||
VPI2,VPS2,MkVPS2,ConjVPS2,ComplVPS2,MkVPI2,ConjVPI2,ComplVPI2,ComplVPIVV
|
VPI2,VPS2,MkVPS,MkVPS2,ConjVPS2,ComplVPS2, ConsVPS, BaseVPS, ListVPS, VPS, ConjVPS,PredVPS,
|
||||||
,ExistCN, ExistMassCN
|
MkVPI2,ConjVPI2,ComplVPI2,ComplVPIVV
|
||||||
,CompoundN
|
,ExistCN, ExistMassCN, ICompAP, ByVP
|
||||||
|
,CompoundN, GenNP, GenIP, AdvIsNP
|
||||||
]
|
]
|
||||||
with
|
with
|
||||||
(Grammar = GrammarFin) **
|
(Grammar = GrammarFin) **
|
||||||
@@ -55,7 +56,7 @@ oper
|
|||||||
|
|
||||||
MkVPS t p vp = mkVPS t p (lin VP vp) ;
|
MkVPS t p vp = mkVPS t p (lin VP vp) ;
|
||||||
ConjVPS c xs = conjunctDistrTable Agr c xs ;
|
ConjVPS c xs = conjunctDistrTable Agr c xs ;
|
||||||
PredVPS np vps = {s = np.s ! npNom ++ vps.s ! np.a} ;
|
PredVPS np vps = {s = np.s ! NPCase Nom ++ vps.s ! np.a} ;
|
||||||
|
|
||||||
|
|
||||||
MkVPI vp = mkVPI vp ;
|
MkVPI vp = mkVPI vp ;
|
||||||
@@ -116,4 +117,36 @@ lin
|
|||||||
s = \\c => ukkos_ ++ BIND ++ n2.s ! c ;
|
s = \\c => ukkos_ ++ BIND ++ n2.s ! c ;
|
||||||
h = n2.h
|
h = n2.h
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
---- copied from VerbFin.CompAP, should be shared
|
||||||
|
ICompAP ap = {
|
||||||
|
s = \\agr =>
|
||||||
|
let
|
||||||
|
n = complNumAgr agr ;
|
||||||
|
c = case n of {
|
||||||
|
Sg => Nom ; -- minä olen iso ; te olette iso
|
||||||
|
Pl => ResFin.Part -- me olemme isoja ; te olette isoja
|
||||||
|
} --- definiteness of NP ?
|
||||||
|
in "kuinka" ++ ap.s ! False ! (NCase n c)
|
||||||
|
} ;
|
||||||
|
|
||||||
|
lin
|
||||||
|
GenNP np = {
|
||||||
|
s1,sp = \\_,_ => np.s ! NPCase Gen ;
|
||||||
|
s2 = case np.isPron of { -- "isän auto", "hänen autonsa"
|
||||||
|
True => table {Front => BIND ++ possSuffixFront np.a ;
|
||||||
|
Back => BIND ++ possSuffix np.a } ;
|
||||||
|
False => \\_ => []
|
||||||
|
} ;
|
||||||
|
isNum = False ;
|
||||||
|
isPoss = np.isPron ; --- also gives "sen autonsa"
|
||||||
|
isDef = True ; --- "Jussin kolme autoa ovat" ; thus "...on" is missing
|
||||||
|
isNeg = False
|
||||||
|
} ;
|
||||||
|
|
||||||
|
GenIP ip = {s = \\_,_ => ip.s ! NPCase Gen} ;
|
||||||
|
|
||||||
|
ByVP vp = lin Adv {s = S.infVP vp.s.sc Pos (Ag Sg P3) vp Inf3Adess} ; ---- Agr ?
|
||||||
|
|
||||||
|
AdvIsNP adv np = S.mkClause (\_ -> adv.s) np.a (UseComp (CompNP np)) ;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,8 +13,17 @@ oper
|
|||||||
mkIDet : Bool -> Str -> N -> Number -> IDet = \isNum,pref,s,n ->
|
mkIDet : Bool -> Str -> N -> Number -> IDet = \isNum,pref,s,n ->
|
||||||
lin IDet {s = \\c => pref ++ s.s ! NCase n c ; n = n ; isNum = isNum} ;
|
lin IDet {s = \\c => pref ++ s.s ! NCase n c ; n = n ; isNum = isNum} ;
|
||||||
|
|
||||||
mkDet : N -> Number -> Det = \s,n ->
|
mkDet = overload {
|
||||||
lin Det (MorphoFin.mkDet n s) ;
|
mkDet : N -> Number -> Det = \s,n ->
|
||||||
|
lin Det (MorphoFin.mkDet n s) ;
|
||||||
|
mkDet : Str -> Bool -> Det -> Det = \s,isNeg,d ->
|
||||||
|
d ** {
|
||||||
|
s1 = \\c => s ++ d.s1 ! c ;
|
||||||
|
sp = \\c => s ++ d.sp ! c ;
|
||||||
|
isNeg = isNeg ;
|
||||||
|
} ;
|
||||||
|
} ;
|
||||||
|
|
||||||
partDet : N -> Number -> Det = \s,n ->
|
partDet : N -> Number -> Det = \s,n ->
|
||||||
lin Det (MorphoFin.partDet False n s) ;
|
lin Det (MorphoFin.partDet False n s) ;
|
||||||
|
|
||||||
|
|||||||
@@ -264,6 +264,7 @@ concrete NounFin of Noun = CatFin ** open ResFin, MorphoFin, StemFin, Prelude in
|
|||||||
isPron = False ; isNeg = det.isNeg
|
isPron = False ; isNeg = det.isNeg
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
DetDAP d = d ;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
numN : NForm -> Number = \nf -> case nf of {
|
numN : NForm -> Number = \nf -> case nf of {
|
||||||
|
|||||||
@@ -246,9 +246,7 @@ instance DiffFre of DiffRomance - [
|
|||||||
|
|
||||||
getVTypT : VType -> VBool = \t -> case t of {VTyp _ b => b} ; -- only in Fre
|
getVTypT : VType -> VBool = \t -> case t of {VTyp _ b => b} ; -- only in Fre
|
||||||
|
|
||||||
auxPassive : Verb = copula ;
|
copula, auxPassive, essere_V : Verb = {s = table VF ["être";bindHyphen;"suis";"es";"est";"sommes";"êtes";"sont";"sois";"sois"
|
||||||
|
|
||||||
copula : Verb = {s = table VF ["être";bindHyphen;"suis";"es";"est";"sommes";"êtes";"sont";"sois";"sois"
|
|
||||||
;"soit";"soyons";"soyez";"soient";
|
;"soit";"soyons";"soyez";"soient";
|
||||||
"étais";"étais";"était";"étions";"étiez";"étaient";--# notpresent
|
"étais";"étais";"était";"étions";"étiez";"étaient";--# notpresent
|
||||||
"fusse";"fusses";"fût";"fussions";"fussiez";"fussent";--# notpresent
|
"fusse";"fusses";"fût";"fussions";"fussiez";"fussent";--# notpresent
|
||||||
@@ -314,4 +312,4 @@ instance DiffFre of DiffRomance - [
|
|||||||
|
|
||||||
verbHyphen : Verb -> Str = \v -> v.s ! (VInfin True) ; --- kluge: use this field to store - or -t-
|
verbHyphen : Verb -> Str = \v -> v.s ! (VInfin True) ; --- kluge: use this field to store - or -t-
|
||||||
|
|
||||||
}
|
} ;
|
||||||
|
|||||||
@@ -393,8 +393,8 @@ oper
|
|||||||
mkPN : N -> PN = \x -> lin PN {s = x.s ! Sg ; g = x.g} ;
|
mkPN : N -> PN = \x -> lin PN {s = x.s ! Sg ; g = x.g} ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
mk4A a b c d = mk5A a a b c d ;
|
mk4A masc fem mascpl aa = mk5A masc masc fem mascpl aa ;
|
||||||
mk5A a b c d e = compADeg {s = \\_ => (mkAdj' a b c d e).s ; isPre = False ; copTyp = serCopula ; lock_A = <>} ;
|
mk5A masc masc fem mascpl aa = compADeg {s = \\_ => (mkAdj' masc masc mascpl fem aa).s ; isPre = False ; copTyp = serCopula ; lock_A = <>} ;
|
||||||
regA a = compADeg {s = \\_ => (mkAdjReg a).s ; isPre = False ; copTyp = serCopula ; lock_A = <>} ;
|
regA a = compADeg {s = \\_ => (mkAdjReg a).s ; isPre = False ; copTyp = serCopula ; lock_A = <>} ;
|
||||||
prefA a = {s = a.s ; isPre = True ; copTyp = a.copTyp ; lock_A = <>} ;
|
prefA a = {s = a.s ; isPre = True ; copTyp = a.copTyp ; lock_A = <>} ;
|
||||||
adjCopula a cop = a ** {copTyp = cop} ;
|
adjCopula a cop = a ** {copTyp = cop} ;
|
||||||
|
|||||||
@@ -4,4 +4,5 @@ concrete AllIta of AllItaAbs =
|
|||||||
LangIta,
|
LangIta,
|
||||||
-- IrregIta,
|
-- IrregIta,
|
||||||
ExtraIta
|
ExtraIta
|
||||||
** {} ;
|
** open ExtendIta
|
||||||
|
in {} ;
|
||||||
|
|||||||
@@ -226,7 +226,7 @@ instance DiffIta of DiffRomance - [contractInf] = open CommonRomance, PhonoIta,
|
|||||||
|
|
||||||
auxPassive : Verb = venire_V ;
|
auxPassive : Verb = venire_V ;
|
||||||
|
|
||||||
copula = verbBesch (essere_1 "essere") ** {vtyp = VEsse ; p = []} ;
|
copula, essere_V = verbBesch (essere_1 "essere") ** {vtyp = VEsse ; p = []} ;
|
||||||
avere_V = verbBesch (avere_2 "avere") ** {vtyp = VHabere ; p = []} ;
|
avere_V = verbBesch (avere_2 "avere") ** {vtyp = VHabere ; p = []} ;
|
||||||
venire_V = verbBesch (venire_110 "venire") ** {vtyp = VEsse ; p = []} ;
|
venire_V = verbBesch (venire_110 "venire") ** {vtyp = VEsse ; p = []} ;
|
||||||
|
|
||||||
|
|||||||
19
src/italian/ExtendIta.gf
Normal file
19
src/italian/ExtendIta.gf
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
--# -path=alltenses:../common:../abstract:../romance
|
||||||
|
concrete ExtendIta of Extend = CatIta ** ExtendRomanceFunctor-- -
|
||||||
|
-- [
|
||||||
|
-- ]
|
||||||
|
-- don't forget to put the names of your own
|
||||||
|
-- definitions here
|
||||||
|
with
|
||||||
|
(Grammar = GrammarIta), (Syntax = SyntaxIta), (ResRomance = ResIta) **
|
||||||
|
open
|
||||||
|
GrammarIta,
|
||||||
|
ResIta,
|
||||||
|
MorphoIta,
|
||||||
|
Coordination,
|
||||||
|
Prelude,
|
||||||
|
ParadigmsIta in {
|
||||||
|
-- put your own definitions here
|
||||||
|
|
||||||
|
|
||||||
|
} ;
|
||||||
@@ -3,46 +3,51 @@ concrete AdjectivePes of Adjective = CatPes ** open ResPes, Prelude in {
|
|||||||
flags coding = utf8;
|
flags coding = utf8;
|
||||||
lin
|
lin
|
||||||
|
|
||||||
PositA a = a ;
|
PositA a = a ;
|
||||||
UseComparA a = a;
|
UseComparA a = a ;
|
||||||
|
|
||||||
ComparA a np = {
|
ComparA a np = a ** {
|
||||||
s =\\ez => a.s ! ez ++ "تر" ++ "از" ++ np.s ! NPC bEzafa ;
|
s = \\m => a.s ! m ++ "تر" ++ "از" ++ np2str np ;
|
||||||
adv = a.adv
|
adv = a.adv ++ "تر" ++ "از" ++ np2str np ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
---- $SuperlA$ belongs to determiner syntax in $Noun$.
|
---- $SuperlA$ belongs to determiner syntax in $Noun$.
|
||||||
|
|
||||||
ComplA2 a np = {
|
ComplA2 a np = a ** {
|
||||||
s =\\ez => np.s ! NPC bEzafa ++ a.c2 ++ a.s ! ez ;
|
s = \\m => np2str np ++ a.c2 ++ a.s ! m ;
|
||||||
adv = a.adv
|
adv = np2str np ++ a.c2 ++ a.adv
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
ReflA2 a = {
|
ReflA2 a = a ** {
|
||||||
s =\\ez => a.s ! ez ++ "" ; -- need to be fixed
|
s = \\m => a.s ! m ++ reflPron ! defaultAgr ! Bare ; ---- need to be fixed
|
||||||
adv = a.adv
|
adv = a.adv ++ reflPron ! defaultAgr ! Bare
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
SentAP ap sc = {
|
SentAP ap sc = ap ** {
|
||||||
s =\\ez => ap.s! ez ++ sc.s ;
|
s = \\m => ap.s ! m ++ sc.s ;
|
||||||
adv = ap.adv
|
adv = ap.adv ++ sc.s
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
AdAP ada ap = {
|
AdAP ada ap = ap ** {
|
||||||
s =\\ez => ada.s ++ ap.s ! ez ;
|
s = \\m => ada.s ++ ap.s ! m ;
|
||||||
adv = ap.adv
|
adv = ada.s ++ ap.adv ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
UseA2 a = a ;
|
UseA2 a = a ;
|
||||||
|
|
||||||
CAdvAP cadv ap np = {
|
CAdvAP cadv ap np = ap ** {
|
||||||
s =\\ez => cadv.s ++ np.s ! NPC bEzafa ++ ap.s ! ez ;
|
s = \\m => cadv.s ++ np2str np ++ ap.s ! m ;
|
||||||
adv = ap.adv
|
adv = cadv.s ++ ap.adv
|
||||||
};
|
} ;
|
||||||
|
|
||||||
AdjOrd ord = { s =\\_ => ord.s ; adv = ""};
|
AdjOrd ord = {
|
||||||
|
s = \\_ => ord.s ;
|
||||||
|
adv = ord.s ;
|
||||||
|
isPre = ord.isPre
|
||||||
|
} ;
|
||||||
|
|
||||||
|
AdvAP ap adv = ap ** {
|
||||||
|
s = \\m => ap.s ! m ++ adv.s ;
|
||||||
AdvAP ap adv = {s =\\ez => ap.s ! ez ++ adv.s ; adv = ap.adv};
|
adv = ap.adv ++ adv.s
|
||||||
|
} ;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,21 +2,21 @@ concrete AdverbPes of Adverb = CatPes ** open ResPes, Prelude in {
|
|||||||
|
|
||||||
flags coding = utf8;
|
flags coding = utf8;
|
||||||
lin
|
lin
|
||||||
-- PositAdvAdj a = {s = a.s ! bEzafa } ;
|
-- PositAdvAdj a = {s = a.s ! Bare } ;
|
||||||
PositAdvAdj a = {s = a.adv } ;
|
PositAdvAdj a = {s = a.adv } ;
|
||||||
ComparAdvAdj cadv a np = {
|
ComparAdvAdj cadv a np = {
|
||||||
s = a.adv ++ cadv.p ++ cadv.s ++ np.s ! NPC bEzafa ;
|
s = a.adv ++ cadv.p ++ cadv.s ++ np.s ! Bare ;
|
||||||
} ;
|
} ;
|
||||||
ComparAdvAdjS cadv a s = {
|
ComparAdvAdjS cadv a s = {
|
||||||
s = a.adv ++ cadv.p ++ cadv.s ++ s.s;
|
s = a.adv ++ cadv.p ++ cadv.s ++ s.s ! Indic;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
PrepNP prep np = {s = prep.s ++ np.s ! NPC bEzafa } ;
|
PrepNP prep np = {s = prep.s ++ np.s ! Bare } ;
|
||||||
|
|
||||||
AdAdv ada adv = { s = ada.s ++ adv.s} ;
|
AdAdv ada adv = { s = ada.s ++ adv.s} ;
|
||||||
|
|
||||||
-- SubjS = cc2 ;
|
-- SubjS = cc2 ;
|
||||||
SubjS sub snt = {s = sub.s ++ "که" ++ snt.s } ;
|
SubjS sub snt = {s = sub.s ++ "که" ++ snt.s ! sub.compl} ;
|
||||||
AdnCAdv cadv = {s = cadv.s ++ "از"} ;
|
AdnCAdv cadv = {s = cadv.s ++ "از"} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
--# -path=.:../abstract:../common:../prelude
|
--# -path=.:alltenses:prelude:../api:../common
|
||||||
|
|
||||||
concrete AllPes of AllPesAbs =
|
concrete AllPes of AllPesAbs =
|
||||||
LangPes,
|
LangPes,
|
||||||
|
|||||||
@@ -1,27 +1,27 @@
|
|||||||
concrete CatPes of Cat = CommonX - [Adv] ** open ResPes, Prelude in {
|
concrete CatPes of Cat = CommonX ** open ResPes, Prelude in {
|
||||||
|
|
||||||
flags optimize=all_subs ;
|
flags optimize=all_subs ;
|
||||||
|
|
||||||
lincat
|
lincat
|
||||||
------ Tensed/Untensed
|
------ Tensed/Untensed
|
||||||
|
|
||||||
S = {s : Str} ;
|
S = {s : VVForm => Str} ; -- as a complement to Subj
|
||||||
QS = {s : QForm => Str} ;
|
QS = {s : Str} ;
|
||||||
RS = {s : AgrPes => Str } ; -- c for it clefts
|
RS = {s : Agr => Str ; rp : RelPron => Str} ;
|
||||||
SSlash = {s : Str ; c2 : ResPes.Compl} ;
|
SSlash = {s : VVForm => Str ; c2 : ResPes.Compl} ;
|
||||||
|
|
||||||
---- Sentence
|
---- Sentence
|
||||||
|
|
||||||
Cl = ResPes.Clause ;
|
Cl = ResPes.Clause ;
|
||||||
ClSlash = {
|
ClSlash = {
|
||||||
subj : Str ;
|
subj : Str ;
|
||||||
vp : ResPes.VPHTense => Polarity => Order => Str ;
|
vp : ResPes.TAnt => Polarity => Order => Str ;
|
||||||
c2 : ResPes.Compl
|
c2 : ResPes.Compl
|
||||||
} ;
|
} ;
|
||||||
Imp = {s : CPolarity => ImpForm => Str} ;
|
Imp = {s : Polarity => ImpForm => Str} ;
|
||||||
|
|
||||||
---- Question
|
---- Question
|
||||||
QCl = {s : ResPes.VPHTense => Polarity => QForm => Str} ;
|
QCl = {s : ResPes.TAnt => Polarity => Str} ;
|
||||||
|
|
||||||
IP = {s: Str ; n : Number};
|
IP = {s: Str ; n : Number};
|
||||||
|
|
||||||
@@ -32,20 +32,17 @@ concrete CatPes of Cat = CommonX - [Adv] ** open ResPes, Prelude in {
|
|||||||
---- Relative
|
---- Relative
|
||||||
|
|
||||||
RCl = {
|
RCl = {
|
||||||
s : ResPes.VPHTense => Polarity => Order => AgrPes => Str ;
|
s : ResPes.TAnt => Polarity => Agr => Str ;
|
||||||
-- c : Case
|
rp : RelPron => Str
|
||||||
} ;
|
} ;
|
||||||
RP = {s: Str ; a:RAgr};
|
RP = {s : RelPron => Str ; a : RAgr};
|
||||||
|
|
||||||
---- Verb
|
---- Verb
|
||||||
|
|
||||||
VP = ResPes.VPH ;
|
VP = ResPes.VPH ;
|
||||||
|
|
||||||
VPSlash = ResPes.VPHSlash ;
|
VPSlash = ResPes.VPHSlash ;
|
||||||
Comp = {s : AgrPes => Str} ;
|
Comp = {s : Agr => Str} ;
|
||||||
|
|
||||||
---- Adv
|
|
||||||
Adv = {s : Str} ;
|
|
||||||
|
|
||||||
---- Adjective
|
---- Adjective
|
||||||
|
|
||||||
@@ -53,17 +50,16 @@ concrete CatPes of Cat = CommonX - [Adv] ** open ResPes, Prelude in {
|
|||||||
|
|
||||||
---- Noun
|
---- Noun
|
||||||
|
|
||||||
CN = ResPes.Noun ;
|
CN = ResPes.CN ;
|
||||||
|
|
||||||
NP = ResPes.NP ;
|
NP = ResPes.NP ;
|
||||||
Pron = {s : Str ; ps : Str ; a : AgrPes};
|
Pron = ResPes.Pron ;
|
||||||
Det = ResPes.Determiner ;
|
Det = ResPes.Determiner ;
|
||||||
Predet = {s : Str} ;
|
Predet = {s : Str} ;
|
||||||
Num = {s : Str ; n : Number} ;
|
Num = {s : Str ; n : Number ; isNum : Bool} ;
|
||||||
Card = {s : Str; n : Number} ;
|
Card = {s : Str; n : Number} ;
|
||||||
Ord = {s : Str; n : Number} ;
|
Ord = {s : Str; n : Number ; isNum,isPre : Bool} ;
|
||||||
Quant = {s: Number => Str ; a:AgrPes ; fromPron : Bool};
|
Quant = ResPes.Quant ;
|
||||||
Art = {s : Str} ;
|
|
||||||
|
|
||||||
---- Numeral
|
---- Numeral
|
||||||
|
|
||||||
@@ -75,22 +71,22 @@ concrete CatPes of Cat = CommonX - [Adv] ** open ResPes, Prelude in {
|
|||||||
Conj = {s1,s2 : Str ; n : Number} ;
|
Conj = {s1,s2 : Str ; n : Number} ;
|
||||||
-----b Conj = {s : Str ; n : Number} ;
|
-----b Conj = {s : Str ; n : Number} ;
|
||||||
-----b DConj = {s1,s2 : Str ; n : Number} ;
|
-----b DConj = {s1,s2 : Str ; n : Number} ;
|
||||||
Subj = {s : Str} ;
|
Subj = {s : Str ; compl : VVForm} ; -- subjunctive or indicative
|
||||||
Prep = {s : Str };
|
Prep = Compl ;
|
||||||
---- Open lexical classes, e.g. Lexicon
|
---- Open lexical classes, e.g. Lexicon
|
||||||
V, VS, VQ, VA = ResPes.Verb ; -- = {s : VForm => Str} ;
|
V, VS, VQ = ResPes.Verb ;
|
||||||
|
|
||||||
V2, V2A, V2Q, V2S = ResPes.Verb ** {c2 : Compl} ;
|
V2, VA, V2A, V2Q, V2S = ResPes.Verb ** {c2 : Compl} ;
|
||||||
V3 = ResPes.Verb ** {c2, c3 : Str} ;
|
V3 = ResPes.Verb ** {c2, c3 : Compl} ;
|
||||||
VV = ResPes.Verb ** { isAux : Bool} ;
|
VV = ResPes.VV ;
|
||||||
V2V = ResPes.Verb ** {c1 : Str ; c2 : Str ; isAux : Bool} ;
|
V2V = ResPes.VV ** {c2 : Compl} ;
|
||||||
A = ResPes.Adjective ; --- {s : Gender => Number => Case => Str} ;
|
A = ResPes.Adjective ;
|
||||||
A2 = ResPes.Adjective ** { c2 : Str} ;
|
A2 = ResPes.Adjective ** {c2 : Str} ;
|
||||||
|
|
||||||
N = {s : Ezafa => Number => Str ; animacy : Animacy ; definitness : Bool} ;
|
N = ResPes.Noun ;
|
||||||
|
|
||||||
N2 = {s : Ezafa => Number => Str ; animacy : Animacy ; definitness : Bool} ** {c : Str};
|
N2 = ResPes.Noun ** {c2 : Str ; compl : Str}; -- when N3 is made to N2, need to retain compl
|
||||||
N3 = {s : Ezafa => Number => Str ; animacy : Animacy ; definitness : Bool} ** {c2 : Str ; c3 : Str } ;
|
N3 = ResPes.Noun ** {c2 : Str ; c3 : Str} ;
|
||||||
PN = {s : Str ; animacy : Animacy} ;
|
PN = {s : Str ; animacy : Animacy} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,40 +7,39 @@ concrete ConjunctionPes of Conjunction =
|
|||||||
|
|
||||||
lin
|
lin
|
||||||
|
|
||||||
ConjS = conjunctDistrSS ;
|
ConjS = conjunctDistrTable VVForm ;
|
||||||
|
|
||||||
ConjAdv = conjunctDistrSS ;
|
ConjAdv = conjunctDistrSS ;
|
||||||
-- ConjAdv conj advs = conjunctDistrTable Gender conj advs ;
|
-- ConjAdv conj advs = conjunctDistrTable Gender conj advs ;
|
||||||
|
|
||||||
ConjNP conj ss = conjunctDistrTable NPCase conj ss ** {
|
ConjNP conj ss = ss ** conjunctDistrTable Mod conj ss ** {
|
||||||
a = conjAgrPes (agrPesP3 conj.n) ss.a ;
|
a = conjAgr (agrP3 conj.n) ss.a ;
|
||||||
animacy = ss.animacy ;
|
animacy = ss.animacy ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
ConjAP conj ss = conjunctDistrTable Ezafa conj ss ** {adv = ss.adv};
|
ConjAP conj ss = ss ** conjunctDistrTable Mod conj ss ; -- Adv isn't changed
|
||||||
ConjRS conj rs = conjunctDistrTable AgrPes conj rs ** { c = rs.c};
|
ConjRS conj rs = rs ** conjunctDistrTable Agr conj rs ;
|
||||||
|
|
||||||
---- These fun's are generated from the list cat's.
|
---- These fun's are generated from the list cat's.
|
||||||
|
|
||||||
BaseS = twoSS ;
|
BaseS = twoTable VVForm ;
|
||||||
ConsS = consrSS comma ;
|
ConsS = consrTable VVForm comma ;
|
||||||
|
|
||||||
BaseAdv = twoSS ;
|
BaseAdv = twoSS ;
|
||||||
-- BaseAdv x y = twoTable Gender x y ;
|
|
||||||
ConsAdv = consrSS comma ;
|
ConsAdv = consrSS comma ;
|
||||||
-- ConsAdv xs x = consrTable Gender comma xs x ;
|
|
||||||
BaseNP x y = twoTable NPCase x y ** {a = conjAgrPes x.a y.a ; animacy = y.animacy } ; -- check animacy
|
BaseNP x y = y ** twoTable Mod x y ** {a = conjAgr x.a y.a ; animacy = y.animacy } ; -- check animacy
|
||||||
BaseRS x y = twoTable AgrPes x y ** {c = x.c};
|
BaseRS x y = x ** twoTable Agr x y ;
|
||||||
ConsNP xs x = consrTable NPCase comma xs x ** {a = conjAgrPes xs.a x.a ; animacy = xs.animacy } ; -- InaandB xs.animacy x.animacy} ;
|
ConsNP xs x = xs ** consrTable Mod comma xs x ** {a = conjAgr xs.a x.a ; animacy = xs.animacy } ; -- InaandB xs.animacy x.animacy} ;
|
||||||
ConsRS xs x = consrTable AgrPes comma xs x ** { c = xs.c};
|
ConsRS xs x = xs ** consrTable Agr comma xs x ;
|
||||||
-- BaseAP x y = twoTable3 Number Gender Case x y ; -- ** {isPre = andB x.isPre y.isPre} ;
|
BaseAP x y = y ** twoTable Mod x y ;
|
||||||
BaseAP x y = twoTable Ezafa x y ** {adv = x.adv};
|
ConsAP xs x = xs ** consrTable Mod comma xs x ; -- Table3 Number Gender Case comma xs x ;-- ** {isPre = andB xs.isPre x.isPre} ;
|
||||||
ConsAP xs x = consrTable Ezafa comma xs x ** {adv = x.adv}; -- Table3 Number Gender Case comma xs x ;-- ** {isPre = andB xs.isPre x.isPre} ;
|
|
||||||
|
|
||||||
lincat
|
lincat
|
||||||
[S] = {s1,s2 : Str} ;
|
[S] = {s1,s2 : VVForm => Str} ;
|
||||||
[Adv] = {s1,s2 : Str} ;
|
[Adv] = {s1,s2 : Str} ;
|
||||||
[NP] = {s1,s2 : NPCase => Str ; a : AgrPes ; animacy : Animacy } ;
|
[NP] = {s1,s2 : Mod => Str} ** BaseNP ;
|
||||||
[AP] = {s1,s2 : Ezafa => Str ; adv : Str} ;
|
[AP] = {s1,s2 : Mod => Str ; adv : Str ; isPre : Bool} ;
|
||||||
[RS] = {s1,s2 : AgrPes => Str };
|
[RS] = {s1,s2 : Agr => Str ; rp : RelPron => Str} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
88
src/persian/ConstructionPes.gf
Normal file
88
src/persian/ConstructionPes.gf
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
--# -path=.:abstract:prelude:api:common
|
||||||
|
concrete ConstructionPes of Construction = CatPes ** open
|
||||||
|
Prelude,
|
||||||
|
ParadigmsPes,
|
||||||
|
(P=ParadigmsPes),
|
||||||
|
SyntaxPes,
|
||||||
|
(S=SyntaxPes),
|
||||||
|
SymbolicPes,
|
||||||
|
StructuralPes,
|
||||||
|
(E=ExtendPes),
|
||||||
|
(R=ResPes),
|
||||||
|
(L=LexiconPes) in {
|
||||||
|
|
||||||
|
lincat
|
||||||
|
Timeunit = N ;
|
||||||
|
Weekday = N ;
|
||||||
|
Monthday = NP ;
|
||||||
|
Month = N ;
|
||||||
|
Year = NP ;
|
||||||
|
Language = N ;
|
||||||
|
|
||||||
|
|
||||||
|
lin
|
||||||
|
weekdayN w = w ;
|
||||||
|
monthN m = m ;
|
||||||
|
|
||||||
|
-- weekdayPN w = mkPN w ;
|
||||||
|
-- monthPN m = mkPN m ;
|
||||||
|
|
||||||
|
timeunitAdv n time =
|
||||||
|
let n_card : Card = n ;
|
||||||
|
n_hours_NP : NP = mkNP n_card time ;
|
||||||
|
in S.mkAdv during_Prep n_hours_NP ; ---- /IL
|
||||||
|
|
||||||
|
weekdayPunctualAdv w = lin Adv (S.mkUtt (mkNP w)) ; -- on Sunday
|
||||||
|
-- TODO
|
||||||
|
weekdayHabitualAdv, -- on Sundays
|
||||||
|
weekdayNextAdv, -- next Sunday
|
||||||
|
weekdayLastAdv = weekdayPunctualAdv ; -- last Sunday
|
||||||
|
|
||||||
|
monthAdv january =
|
||||||
|
let january_NP : NP = mkNP january ;
|
||||||
|
in S.mkAdv in_Prep january_NP ;
|
||||||
|
|
||||||
|
yearAdv y = S.mkAdv in_Prep y ;
|
||||||
|
|
||||||
|
intYear = symb ;
|
||||||
|
intMonthday = symb ;
|
||||||
|
|
||||||
|
languageCN l = mkCN l ;
|
||||||
|
languageNP l = mkNP l ;
|
||||||
|
|
||||||
|
InLanguage l = S.mkAdv in_Prep (mkNP l) ;
|
||||||
|
|
||||||
|
english_Language = mkLanguage "انگلیسی" ;
|
||||||
|
finnish_Language = mkLanguage "فنلاند" ;
|
||||||
|
swedish_Language = mkLanguage "سوئدی" ;
|
||||||
|
arabicLanguage = mkLanguage "عربی" ;
|
||||||
|
finnishLanguage = mkLanguage "فنلاندی" ;
|
||||||
|
frenchLanguage = mkLanguage "فرانسوی" ;
|
||||||
|
persianLanguage = mkLanguage "فارسی" ;
|
||||||
|
romanianLanguage = mkLanguage "رومانیایی" ;
|
||||||
|
polishLanguage = mkLanguage "لهستانی" ;
|
||||||
|
bulgarianLanguage = mkLanguage "بلغاری" ;
|
||||||
|
somaliLanguage = mkLanguage "سومالیایی" ;
|
||||||
|
turkishLanguage = mkLanguage "ترکی" ;
|
||||||
|
kurdishLanguage = mkLanguage "کردی" ;
|
||||||
|
|
||||||
|
-- : Card -> CN -> A -> AP
|
||||||
|
n_units_AP card cn a =
|
||||||
|
let ap = mkAP a in ap ** {
|
||||||
|
s = \\ez =>
|
||||||
|
ap.s ! ez
|
||||||
|
++ (mkUtt (mkNP card cn)).s ---- just guessing /IL
|
||||||
|
} ;
|
||||||
|
|
||||||
|
hungry_VP = mkVP (mkA "گرسنه") ;
|
||||||
|
thirsty_VP = mkVP (mkA "تشنه") ;
|
||||||
|
have_name_Cl p n = mkCl (mkNP (E.GenNP p) L.name_N) n ;
|
||||||
|
what_name_QCl p = mkQCl what_IAdv (mkNP (E.GenNP p) L.name_N) ;
|
||||||
|
|
||||||
|
how_old_QCl p = mkQCl howMuchAge_IAdv (mkNP (mkNP (E.GenNP p)) (P.mkAdv "سال")) ;
|
||||||
|
|
||||||
|
oper
|
||||||
|
howMuchAge_IAdv = lin IAdv {s = "چند"} ;
|
||||||
|
what_IAdv = lin IAdv {s = "چه چیزی"} ;
|
||||||
|
mkLanguage : Str -> N = mkN ;
|
||||||
|
}
|
||||||
38
src/persian/ExtendPes.gf
Normal file
38
src/persian/ExtendPes.gf
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
--# -path=.:../common:../abstract:../prelude
|
||||||
|
|
||||||
|
concrete ExtendPes of Extend =
|
||||||
|
CatPes ** ExtendFunctor - [
|
||||||
|
GenNP, ApposNP, ICompAP, AdvIsNP
|
||||||
|
,GerundNP,GerundCN,GerundAdv,EmbedPresPart
|
||||||
|
]
|
||||||
|
with (Grammar=GrammarPes)
|
||||||
|
** open Prelude, ResPes in {
|
||||||
|
|
||||||
|
lin
|
||||||
|
-- NP -> Quant ; -- this man's
|
||||||
|
GenNP np = np ** {
|
||||||
|
mod = Ezafe ; -- the possessed will get Ezafe
|
||||||
|
s = \\num,cmpd => np2str np -- possesser is unmarked; https://sites.la.utexas.edu/persian_online_resources/language-specific-grammar/ezfe/
|
||||||
|
} ;
|
||||||
|
|
||||||
|
-- : NP -> NP -> NP
|
||||||
|
ApposNP np1 np2 = np1 ** {
|
||||||
|
s = \\m => np1.s ! m ++ np2.s ! m
|
||||||
|
} ;
|
||||||
|
|
||||||
|
ICompAP ap = {s = "چقدر" ++ ap.s ! Bare} ;
|
||||||
|
-- : VP -> CN ; -- publishing of the document (can get a determiner)
|
||||||
|
GerundCN vp = useN (indeclN (showVPH Inf defaultAgr vp)) ;
|
||||||
|
|
||||||
|
-- : VP -> NP ; -- publishing the document (by nature definite)
|
||||||
|
GerundNP vp = indeclNP (showVPH Inf defaultAgr vp) ;
|
||||||
|
|
||||||
|
-- : VP -> Adv ; -- publishing the document (prepositionless adverb)
|
||||||
|
GerundAdv vp = lin Adv {s = showVPH Inf defaultAgr vp} ;
|
||||||
|
|
||||||
|
-- : VP -> SC ;
|
||||||
|
EmbedPresPart vp = lin SC {s = showVPH Inf defaultAgr vp} ;
|
||||||
|
|
||||||
|
-- : Adv -> NP -> Cl -- here is the car / here are the cars
|
||||||
|
AdvIsNP adv np = mkClause (indeclNP adv.s ** {a = np.a}) (UseComp (CompNP np)) ;
|
||||||
|
}
|
||||||
@@ -1,19 +1,10 @@
|
|||||||
concrete ExtraPes of ExtraPesAbs = CatPes **
|
concrete ExtraPes of ExtraPesAbs = CatPes **
|
||||||
open ResPes, Coordination, Prelude, MorphoPes, ParadigmsPes in {
|
open ResPes, ExtendPes, Coordination, Prelude, MorphoPes, ParadigmsPes in {
|
||||||
|
|
||||||
flags coding = utf8;
|
flags coding = utf8;
|
||||||
|
|
||||||
lin
|
lin
|
||||||
GenNP np = {s = \\_ => np.s ! NPC aEzafa ; a = np.a ; fromPron = True} ; -- changed from fromPron=False for Phrasebook
|
GenNP = ExtendPes.GenNP ;
|
||||||
|
|
||||||
-- each_Det = mkDet "هر کwی" "هر کwی" "هر کwی" "هر کwی" Sg ;
|
|
||||||
-- have_V = mkV "رکh-ن";
|
|
||||||
IAdvAdv adv = {s = "تا چه" ++ adv.s} ;
|
IAdvAdv adv = {s = "تا چه" ++ adv.s} ;
|
||||||
-- ICompAP ap = {s = "کتنE" ++ ap.s ! Sg ! Masc ! Dir ! Posit} ;
|
|
||||||
-- cost_V = mkV "قیمت" ;
|
|
||||||
|
|
||||||
-- added for causitives
|
|
||||||
-- make_CV = mkVerb "نْتهنگ" ** {c2 = "" };
|
|
||||||
|
|
||||||
-- for VP conjunction
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,14 +12,12 @@
|
|||||||
ConjunctionPes,
|
ConjunctionPes,
|
||||||
|
|
||||||
PhrasePes,
|
PhrasePes,
|
||||||
TextPes - [Adv],
|
TextPes,
|
||||||
StructuralPes,
|
StructuralPes,
|
||||||
TenseX - [Adv],
|
TenseX,
|
||||||
IdiomPes
|
IdiomPes
|
||||||
** {
|
** {
|
||||||
|
|
||||||
flags startcat = Phr ; unlexer = text ; lexer = text ;
|
flags startcat = Phr ; unlexer = text ; lexer = text ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,40 +1,44 @@
|
|||||||
concrete IdiomPes of Idiom = CatPes ** open Prelude,Predef, ResPes in {
|
concrete IdiomPes of Idiom = CatPes ** open Prelude,ParadigmsPes,ResPes in {
|
||||||
|
|
||||||
flags optimize=all_subs ;
|
flags optimize=all_subs ;
|
||||||
flags coding = utf8;
|
flags coding = utf8;
|
||||||
|
|
||||||
lin
|
lin
|
||||||
|
|
||||||
ImpersCl vp = mkSClause " " (agrPesP3 Sg) vp ;
|
ImpersCl vp = mkSClause " " (agrP3 Sg) vp ;
|
||||||
GenericCl vp = mkSClause "آدم" (agrPesP3 Sg) vp ;
|
GenericCl vp = mkSClause "آدم" (agrP3 Sg) vp ;
|
||||||
|
|
||||||
CleftNP np rs =
|
CleftNP np rs =
|
||||||
let cl = mkSClause (np.s ! NPC bEzafa) (np.a) (predAux auxBe);
|
let cl = mkSClause (np2str np) (np.a) (predV beVerb);
|
||||||
in
|
in
|
||||||
{s = \\t,p,o => cl.s ! t ! p ! o ++ rs.s ! np.a };
|
{s = \\t,p,o => cl.s ! t ! p ! o ++ rs2str Ke np.a rs};
|
||||||
|
|
||||||
CleftAdv ad ss = { s = \\t,b,o => ad.s ++ ss.s};
|
CleftAdv ad ss = { s = \\t,b,o => ad.s ++ ss.s ! Indic};
|
||||||
|
|
||||||
ExistNP np =
|
ExistNP np =
|
||||||
mkSClause " " (agrPesP3 (fromAgr np.a).n)
|
mkSClause [] (agrP3 (fromAgr np.a).n)
|
||||||
(insertObj (\\_ => np.s ! NPC bEzafa) (predAux auxBe)) ;
|
(insertComp (\\_ => np2str np) (predV existVerb)) ;
|
||||||
|
|
||||||
ExistIP ip =
|
ExistNPAdv np adv =
|
||||||
let cl = mkSClause ( ip.s ) (agrPesP3 ip.n) (predAux auxBe);
|
mkSClause [] (agrP3 (fromAgr np.a).n)
|
||||||
in {
|
(insertComp (\\_ => np2str np ++ adv.s)
|
||||||
s = \\t,p,qf => case qf of {
|
(predV existVerb)
|
||||||
QDir => cl.s ! t ! p ! ODir;
|
) ;
|
||||||
QIndir => cl.s ! t! p ! ODir
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
-- ProgrVP vp = insertObj (\\a => vp.obj.s ++ vp.ad ++ vp.comp ! a ++ (vp.s ! VPStem).inf ++ raha (fromAgr a).g (fromAgr a).n ) (predAux auxBe) ;
|
|
||||||
ProgrVP vp = (predProg vp) ;
|
|
||||||
|
|
||||||
|
|
||||||
ImpPl1 vp = {s = "بیایید" ++ (vp.s ! VVForm (agrPesP1 Pl)).inf} ;
|
ExistIP ip =
|
||||||
ImpP3 np vp = {s = "بگذارید" ++ np.s!NPC bEzafa ++ (vp.s ! VVForm (AgPes (fromAgr np.a).n (fromAgr np.a).p)).inf};
|
let cl = mkSClause ip.s (agrP3 ip.n) (predV beVerb);
|
||||||
|
in {s = \\t,p => cl.s ! t ! p ! ODir};
|
||||||
|
|
||||||
|
|
||||||
|
ProgrVP vp = predProg vp ;
|
||||||
|
|
||||||
|
ImpPl1 vp = let a = agrP1 Pl in
|
||||||
|
{s = "بیایید" ++ showVPH (VSubj Pos a) a vp } ;
|
||||||
|
ImpP3 np vp =
|
||||||
|
{s = "بگذارید" ++ np2str np ++ showVPH (VSubj Pos np.a) np.a vp};
|
||||||
|
|
||||||
|
oper
|
||||||
|
existVerb = mkV "وجود" haveVerb ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,7 @@
|
|||||||
--# -path=.:../abstract:../common:../hindustani
|
--# -path=.:alltenses:prelude:../api:../common
|
||||||
|
|
||||||
concrete LangPes of Lang =
|
concrete LangPes of Lang =
|
||||||
GrammarPes,
|
GrammarPes
|
||||||
LexiconPes
|
,LexiconPes
|
||||||
** {
|
,ConstructionPes
|
||||||
|
** {} ;
|
||||||
flags startcat = Phr ; unlexer=unwords ; lexer=words ;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
--# -path=.:prelude:alltenses
|
--# -path=.:prelude:alltenses
|
||||||
|
|
||||||
concrete LexiconPes of Lexicon = CatPes **
|
concrete LexiconPes of Lexicon = CatPes **
|
||||||
--open ResPnb, Prelude in {
|
open ParadigmsPes, Prelude in {
|
||||||
open ParadigmsPes,MorphoPes, Prelude in {
|
|
||||||
|
|
||||||
flags
|
flags
|
||||||
optimize=values ;
|
optimize=values ;
|
||||||
@@ -11,7 +10,7 @@ concrete LexiconPes of Lexicon = CatPes **
|
|||||||
lin
|
lin
|
||||||
|
|
||||||
airplane_N = mkN01 "هواپیما" inanimate ;
|
airplane_N = mkN01 "هواپیما" inanimate ;
|
||||||
answer_V2S = mkV2 (compoundV "جواب" (mkV "دادن" "ده")) "به" False;
|
answer_V2S = mkV2 (compoundV "جواب" giveVerb) "به" False;
|
||||||
apartment_N = mkN01 "آپارتمان" inanimate;
|
apartment_N = mkN01 "آپارتمان" inanimate;
|
||||||
apple_N = mkN01 "سیب" inanimate;
|
apple_N = mkN01 "سیب" inanimate;
|
||||||
art_N = mkN01 "هنر" inanimate;
|
art_N = mkN01 "هنر" inanimate;
|
||||||
@@ -20,9 +19,9 @@ concrete LexiconPes of Lexicon = CatPes **
|
|||||||
bad_A = mkA "بد" ;
|
bad_A = mkA "بد" ;
|
||||||
bank_N = mkN01 "بانک" inanimate;
|
bank_N = mkN01 "بانک" inanimate;
|
||||||
beautiful_A = mkA "زیبا" ;
|
beautiful_A = mkA "زیبا" ;
|
||||||
become_VA = mkV "شدن" "شو";
|
become_VA = mkVA (mkV "شدن" "شو") ;
|
||||||
beer_N = mkN01 "آبجو" inanimate;
|
beer_N = mkN01 "آبجو" inanimate;
|
||||||
beg_V2V = mkV2V (compoundV "خواهش" (mkV "کردن" "کن")) "از" "" False;
|
beg_V2V = mkV2V (compoundV "خواهش" doVerb) "از" False;
|
||||||
big_A = mkA "بزرگ" ;
|
big_A = mkA "بزرگ" ;
|
||||||
bike_N = mkN01 "دوچرخه" inanimate;
|
bike_N = mkN01 "دوچرخه" inanimate;
|
||||||
bird_N = mkN02 "پرنده" animate;
|
bird_N = mkN02 "پرنده" animate;
|
||||||
@@ -36,7 +35,7 @@ concrete LexiconPes of Lexicon = CatPes **
|
|||||||
bread_N = mkN01 "نان" inanimate;
|
bread_N = mkN01 "نان" inanimate;
|
||||||
break_V2 = mkV2 (mkV "شکستن" "شکن") "را";
|
break_V2 = mkV2 (mkV "شکستن" "شکن") "را";
|
||||||
broad_A = mkA "وسیع" ;
|
broad_A = mkA "وسیع" ;
|
||||||
brother_N2 = (mkN01 "برادر" animate) ** {c=""};
|
brother_N2 = mkN2 (mkN01 "برادر" animate) [];
|
||||||
brown_A = mkA ["قهوه ای"] ;
|
brown_A = mkA ["قهوه ای"] ;
|
||||||
butter_N = mkN01 "کره" inanimate;
|
butter_N = mkN01 "کره" inanimate;
|
||||||
buy_V2 = mkV2 (mkV_1 "خریدن") "را";
|
buy_V2 = mkV2 (mkV_1 "خریدن") "را";
|
||||||
@@ -76,12 +75,12 @@ concrete LexiconPes of Lexicon = CatPes **
|
|||||||
empty_A = mkA "خالی" ;
|
empty_A = mkA "خالی" ;
|
||||||
enemy_N = mkN02 "دشمن" animate;
|
enemy_N = mkN02 "دشمن" animate;
|
||||||
factory_N = mkN01 "کارخانه" inanimate;
|
factory_N = mkN01 "کارخانه" inanimate;
|
||||||
father_N2 = (mkN02 "پدر" animate) ** {c=""};
|
father_N2 = mkN2 (mkN02 "پدر" animate) [];
|
||||||
fear_VS = mkV_1 "ترسیدن";
|
fear_VS = mkV_1 "ترسیدن";
|
||||||
find_V2 = mkV2 (compoundV "پیدا" (mkV "کردن" "کن") ) "را";
|
find_V2 = mkV2 (compoundV "پیدا" doVerb) "را";
|
||||||
fish_N = mkN01 "ماهی" animate;
|
fish_N = mkN01 "ماهی" animate;
|
||||||
floor_N = mkN01 "زمین" inanimate; -- Note: floor in persian can have 3 different translations
|
floor_N = mkN01 "زمین" inanimate; -- Note: floor in persian can have 3 different translations
|
||||||
forget_V2 = mkV2 (compoundV "فراموش" (mkV "کردن" "کن")) "را" ;
|
forget_V2 = mkV2 (compoundV "فراموش" doVerb) "را" ;
|
||||||
fridge_N = mkN01 "یخچال" inanimate;
|
fridge_N = mkN01 "یخچال" inanimate;
|
||||||
friend_N = mkN02 "دوست" animate;
|
friend_N = mkN02 "دوست" animate;
|
||||||
fruit_N = mkN01 "میوه" inanimate;
|
fruit_N = mkN01 "میوه" inanimate;
|
||||||
@@ -94,12 +93,11 @@ concrete LexiconPes of Lexicon = CatPes **
|
|||||||
go_V = mkV "رفتن" "رو";
|
go_V = mkV "رفتن" "رو";
|
||||||
green_A = mkA "سبز" ;
|
green_A = mkA "سبز" ;
|
||||||
harbour_N = mkN "بندر" "بنادر" inanimate;
|
harbour_N = mkN "بندر" "بنادر" inanimate;
|
||||||
-- hate_V2 = mkV2 (compoundV "متنفر" (mkToBe "بودن" "باش" "هست")) "از" False; -- needs from/ verb to be
|
hate_V2 = mkV2 (compoundV "متنفر" beVerb) "از" False; -- needs from/ verb to be
|
||||||
hat_N = mkN01 "کلاه" inanimate;
|
hat_N = mkN01 "کلاه" inanimate;
|
||||||
have_V2 = mkV2 haveVerb "را" ;
|
|
||||||
hear_V2 = mkV2 (mkV "شنیدن" "شنو") "را" ;
|
hear_V2 = mkV2 (mkV "شنیدن" "شنو") "را" ;
|
||||||
hill_N = mkN01 "تپه" inanimate;
|
hill_N = mkN01 "تپه" inanimate;
|
||||||
-- hope_VS = compoundV "امیدوار" (mkToBe "بودن" "باش" "هست");
|
hope_VS = compoundV "امیدوار" beVerb;
|
||||||
horse_N = mkN01 "اسب" animate;
|
horse_N = mkN01 "اسب" animate;
|
||||||
hot_A = mkA "داغ" ["داغ داغ"] ;
|
hot_A = mkA "داغ" ["داغ داغ"] ;
|
||||||
house_N = mkN01 "خانه" inanimate;
|
house_N = mkN01 "خانه" inanimate;
|
||||||
@@ -108,35 +106,35 @@ concrete LexiconPes of Lexicon = CatPes **
|
|||||||
iron_N = mkN01 "آهن" inanimate;
|
iron_N = mkN01 "آهن" inanimate;
|
||||||
king_N = mkN "پادشاه" "پادشاهان" animate;
|
king_N = mkN "پادشاه" "پادشاهان" animate;
|
||||||
know_V2 = mkV2 (mkV "شناختن" "شناس") "را";
|
know_V2 = mkV2 (mkV "شناختن" "شناس") "را";
|
||||||
know_VS = (mkV_1 "دانستن");
|
know_VS = (mkV_1 "دانستن") ; -- danestan -> dan ; needs explicit mkV_1
|
||||||
know_VQ = (mkV_1 "دانستن") ;
|
know_VQ = (mkV_1 "دانستن") ;
|
||||||
lake_N = mkN01 "دریاچه" inanimate;
|
lake_N = mkN01 "دریاچه" inanimate;
|
||||||
lamp_N = mkN01 "چراغ" inanimate; -- also "لامپ", but they have different usage
|
lamp_N = mkN01 "چراغ" inanimate; -- also "لامپ", but they have different usage
|
||||||
learn_V2 = mkV2 (compoundV "یاد"(mkV "گرفتن" "گیر")) "را";
|
learn_V2 = mkV2 (compoundV "یاد" takeVerb) "را";
|
||||||
leather_N = mkN01 "چرم" inanimate; -- is uncountable
|
leather_N = mkN01 "چرم" inanimate; -- is uncountable
|
||||||
leave_V2 = mkV2 (compoundV "ترک"(mkV "کردن" "کن")) "را";
|
leave_V2 = mkV2 (compoundV "ترک" doVerb) "را";
|
||||||
like_V2 = mkV2 (compoundV "دوست" haveVerb) "را";
|
like_V2 = mkV2 (compoundV "دوست" haveVerb) "را";
|
||||||
listen_V2 = mkV2 (compoundV "گوش" (mkV "دادن" "ده")) "به" False; -- has a diferent preposition :"به"
|
listen_V2 = mkV2 (compoundV "گوش" giveVerb) "به" False; -- has a diferent preposition :"به"
|
||||||
live_V = compoundV "زندگی" (mkV "کردن" "کن");
|
live_V = compoundV "زندگی" doVerb;
|
||||||
long_A = mkA "بلند" ;
|
long_A = mkA "بلند" ;
|
||||||
lose_V2 = mkV2 (compoundV "گم" (mkV "کردن" "کن")) "را" ;
|
lose_V2 = mkV2 (compoundV "گم" doVerb) "را" ;
|
||||||
love_N = mkN01 "عشق" inanimate;
|
love_N = mkN01 "عشق" inanimate;
|
||||||
love_V2 = mkV2 (compoundV "دوست" haveVerb) "را"; -- also possible: love_V2 = mkV2 (compoundV "عاشق" (mkToBe "بودن" "باش" "هست"));
|
love_V2 = mkV2 (compoundV "دوست" haveVerb) "را"; -- also possible: love_V2 = mkV2 (compoundV "عاشق" beVerb);
|
||||||
man_N = mkN02 "مرد" animate;
|
man_N = mkN02 "مرد" animate;
|
||||||
married_A2 = mkA "متأهل" "";
|
married_A2 = mkA "متأهل" "";
|
||||||
meat_N = mkN01 "گوشت" inanimate;
|
meat_N = mkN01 "گوشت" inanimate;
|
||||||
milk_N = mkN01 "شیر" inanimate;
|
milk_N = mkN01 "شیر" inanimate;
|
||||||
moon_N = mkN01 "ماه" inanimate; -- is this not a proper noun?
|
moon_N = mkN01 "ماه" inanimate; -- is this not a proper noun?
|
||||||
mother_N2 = (mkN02 "مادر" animate) ** {c=""};
|
mother_N2 = mkN2 (mkN02 "مادر" animate) [] ;
|
||||||
mountain_N = mkN01 "کوه" inanimate;
|
mountain_N = mkN01 "کوه" inanimate;
|
||||||
music_N = mkN "موسیقی" "موسیقی" animate;
|
music_N = mkN "موسیقی" "موسیقی" animate;
|
||||||
narrow_A = mkA "باریک" ;
|
narrow_A = mkA "باریک" ;
|
||||||
new_A = mkA "نو" "تازه";
|
new_A = mkA "نو" "تازه";
|
||||||
newspaper_N = mkN01 "روزنامه" inanimate;
|
newspaper_N = mkN01 "روزنامه" inanimate;
|
||||||
oil_N = mkN "نفت" "نفت" inanimate; -- also "روغن"
|
oil_N = mkN "نفت" "نفت" inanimate; -- also "روغن"
|
||||||
old_A = mkA "پیر" "پیرانه";
|
old_A = preA "پیر" "پیرانه" ;
|
||||||
open_V2 = mkV2 (compoundV "باز" (mkV "کردن" "کن")) "را";
|
open_V2 = mkV2 (compoundV "باز" doVerb) "را";
|
||||||
paint_V2A = mkV2 (compoundV "رنگ" (mkV "کردن" "کن")) "را" ;
|
paint_V2A = mkV2 (compoundV "رنگ" doVerb) "را" ;
|
||||||
paper_N = mkN01 "کاغذ" inanimate;
|
paper_N = mkN01 "کاغذ" inanimate;
|
||||||
paris_PN = mkPN "پاریس" inanimate;
|
paris_PN = mkPN "پاریس" inanimate;
|
||||||
peace_N = mkN01 "صلح" inanimate; -- also "آرامش"
|
peace_N = mkN01 "صلح" inanimate; -- also "آرامش"
|
||||||
@@ -144,7 +142,7 @@ concrete LexiconPes of Lexicon = CatPes **
|
|||||||
planet_N = mkN01 "سیّاره" inanimate;
|
planet_N = mkN01 "سیّاره" inanimate;
|
||||||
plastic_N = mkN01 "پلاستیک" inanimate; -- is uncountable
|
plastic_N = mkN01 "پلاستیک" inanimate; -- is uncountable
|
||||||
play_V2 = mkV2 (mkV "نواختن" "نواز") "را" ;
|
play_V2 = mkV2 (mkV "نواختن" "نواز") "را" ;
|
||||||
policeman_N = mkCmpdNoun2 (mkN02 "مأمور" animate) "پلیس";
|
policeman_N = cmpdN (mkN02 "مأمور" animate) (mkN "پلیس");
|
||||||
priest_N = mkN01 "کشیش" animate;
|
priest_N = mkN01 "کشیش" animate;
|
||||||
-- probable_AS = mkAS (regA "محتمل") ;
|
-- probable_AS = mkAS (regA "محتمل") ;
|
||||||
queen_N = mkN01 "ملکه" animate;
|
queen_N = mkN01 "ملکه" animate;
|
||||||
@@ -163,7 +161,7 @@ concrete LexiconPes of Lexicon = CatPes **
|
|||||||
school_N = mkN "مدرسه" "مدارس" inanimate;
|
school_N = mkN "مدرسه" "مدارس" inanimate;
|
||||||
science_N = mkN "علم" "علوم" inanimate; -- also "دانش"
|
science_N = mkN "علم" "علوم" inanimate; -- also "دانش"
|
||||||
sea_N = mkN01 "دریا" inanimate;
|
sea_N = mkN01 "دریا" inanimate;
|
||||||
seek_V2 = mkV2 (compoundV "جستجو" (mkV "کردن" "کن")) "را";
|
seek_V2 = mkV2 (compoundV "جستجو" doVerb) "را";
|
||||||
see_V2 = mkV2 (mkV "دیدن" "بین") "را" ;
|
see_V2 = mkV2 (mkV "دیدن" "بین") "را" ;
|
||||||
sell_V3 = mkV3 (mkV "فروختن" "فروش") "را" "به";
|
sell_V3 = mkV3 (mkV "فروختن" "فروش") "را" "به";
|
||||||
send_V3 = mkV3 (mkV_1 "فرستادن") "را" "برای";
|
send_V3 = mkV3 (mkV_1 "فرستادن") "را" "برای";
|
||||||
@@ -179,7 +177,7 @@ concrete LexiconPes of Lexicon = CatPes **
|
|||||||
small_A = mkA "کوچک" ;
|
small_A = mkA "کوچک" ;
|
||||||
snake_N = mkN01 "مار" animate;
|
snake_N = mkN01 "مار" animate;
|
||||||
sock_N = mkN01 "جوراب" inanimate;
|
sock_N = mkN01 "جوراب" inanimate;
|
||||||
speak_V2 = mkV2 (compoundV "صحبت" (mkV "کردن" "کن")) "" False;
|
speak_V2 = mkV2 (compoundV "صحبت" doVerb) "" False;
|
||||||
star_N = mkN01 "ستاره" animate;
|
star_N = mkN01 "ستاره" animate;
|
||||||
steel_N = mkN01 "فولاد" inanimate; -- also "استیل"
|
steel_N = mkN01 "فولاد" inanimate; -- also "استیل"
|
||||||
stone_N = mkN01 "سنگ" inanimate;
|
stone_N = mkN01 "سنگ" inanimate;
|
||||||
@@ -187,47 +185,47 @@ concrete LexiconPes of Lexicon = CatPes **
|
|||||||
student_N = mkCmpdNoun1 "دانش" (mkN02 "آموز" animate); -- also "دانشجو"
|
student_N = mkCmpdNoun1 "دانش" (mkN02 "آموز" animate); -- also "دانشجو"
|
||||||
stupid_A = mkA "ابله" "ابلهانه" ;
|
stupid_A = mkA "ابله" "ابلهانه" ;
|
||||||
sun_N = mkN01 "خورشید" inanimate; -- is this not a proper noun?!!!
|
sun_N = mkN01 "خورشید" inanimate; -- is this not a proper noun?!!!
|
||||||
switch8off_V2 = mkV2 (compoundV "خاموش" (mkV "کردن" "کن")) "را";
|
switch8off_V2 = mkV2 (compoundV "خاموش" doVerb) "را";
|
||||||
switch8on_V2 = mkV2 (compoundV "روشن" (mkV "کردن" "کن")) "را";
|
switch8on_V2 = mkV2 (compoundV "روشن" doVerb) "را";
|
||||||
table_N = mkN01 "میز" inanimate;
|
table_N = mkN01 "میز" inanimate;
|
||||||
talk_V3 = mkV3 (compoundV "حرف" (mkV "زدن" "زن")) "با" [" درباره ی"];
|
talk_V3 = mkV3 (compoundV "حرف" hitVerb) "با" "دربارۀ";
|
||||||
teacher_N = mkN02 "معلم" animate;
|
teacher_N = mkN02 "معلم" animate;
|
||||||
teach_V2 = mkV2 (compoundV "آموزش" (mkV "دادن" "ده")) "را";
|
teach_V2 = mkV2 (compoundV "آموزش" giveVerb) "را";
|
||||||
television_N = mkN01 "تلوزیون" inanimate;
|
television_N = mkN01 "تلوزیون" inanimate;
|
||||||
thick_A = mkA "کلفت" ;
|
thick_A = mkA "کلفت" ;
|
||||||
thin_A = mkA "نازک" ;
|
thin_A = mkA "نازک" ;
|
||||||
train_N = mkN01 "قطار" inanimate;
|
train_N = mkN01 "قطار" inanimate;
|
||||||
travel_V = compoundV "سفر" (mkV "کردن" "کن");
|
travel_V = compoundV "سفر" doVerb;
|
||||||
tree_N = mkN02 "درخت" animate;
|
tree_N = mkN02 "درخت" animate;
|
||||||
trousers_N = mkN01 "شلوار" inanimate;
|
-- trousers_N = mkN01 "شلوار" inanimate;
|
||||||
ugly_A = mkA "زشت" ;
|
ugly_A = mkA "زشت" ;
|
||||||
understand_V2 = mkV2 (mkV_1 "فهمیدن") "را";
|
understand_V2 = mkV2 (mkV_1 "فهمیدن") "را";
|
||||||
university_N = mkN01 "دانشگاه" inanimate;
|
university_N = mkN01 "دانشگاه" inanimate;
|
||||||
village_N = mkN01 "روستا" inanimate;
|
village_N = mkN01 "روستا" inanimate;
|
||||||
-- wait_V2 = mkV2 (compoundV "منتظر" (mkVToBe "بودن" "باش"));
|
wait_V2 = mkV2 (compoundV "منتظر" beVerb);
|
||||||
walk_V = compoundV "راه" (mkV "رفتن" "رو");
|
walk_V = compoundV "راه" (mkV "رفتن" "رو");
|
||||||
warm_A = mkA "گرم" ;
|
warm_A = mkA "گرم" ;
|
||||||
war_N = mkN01 "جنگ" inanimate;
|
war_N = mkN01 "جنگ" inanimate;
|
||||||
-- watch_V2 = mkV2 (compoundV "مراقب" (mkVToBe "بودن" "باش")); -- check harfe rabt!!!
|
watch_V2 = mkV2 (compoundV "مراقب" beVerb); -- check harfe rabt!!!
|
||||||
water_N = mkN01 "آب" inanimate;
|
water_N = mkN01 "آب" inanimate;
|
||||||
white_A = mkA "سفید" ;
|
white_A = mkA "سفید" ;
|
||||||
window_N = mkN01 "پنجره" inanimate;
|
window_N = mkN01 "پنجره" inanimate;
|
||||||
wine_N = mkN01 "شراب" inanimate;
|
wine_N = mkN01 "شراب" inanimate;
|
||||||
win_V2 = mkV2 (compoundV "برنده" (mkV "شدن" "شو")) "را"; -- also possible with simple verb: mkV_2 "بردن"
|
win_V2 = mkV2 (compoundV "برنده" (mkV "شدن" "شو")) "را"; -- also possible with simple verb: mkV_2 "بردن"
|
||||||
woman_N = mkN02 "زن" animate;
|
woman_N = mkN02 "زن" animate;
|
||||||
-- wonder_VQ = compoundV "متعجب" (mkVToBe "بودن" "باش") ;
|
wonder_VQ = compoundV "متعجب" beVerb ;
|
||||||
wood_N = mkN01 "چوب" inanimate;
|
wood_N = mkN01 "چوب" inanimate;
|
||||||
write_V2 = mkV2 (mkV "نوشتن" "نویس") "را" ;
|
write_V2 = mkV2 (mkV "نوشتن" "نویس") "را" ;
|
||||||
yellow_A = mkA "زرد" ;
|
yellow_A = mkA "زرد" ;
|
||||||
young_A = mkA "جوان""جوانانه" ;
|
young_A = mkA "جوان""جوانانه" ;
|
||||||
do_V2 = mkV2 (compoundV "انجام" (mkV "دادن" "ده")) "را";
|
do_V2 = mkV2 (compoundV "انجام" giveVerb) "را";
|
||||||
now_Adv = ss "حالا" ;
|
now_Adv = ss "حالا" ;
|
||||||
already_Adv = ss "قبلاً" ;
|
already_Adv = ss "قبلاً" ;
|
||||||
song_N = mkN01 "آواز" inanimate;
|
song_N = mkN01 "آواز" inanimate;
|
||||||
add_V3 = mkV3 (compoundV "اضافه" (mkV "کردن" "کن")) "را" "به" ;
|
add_V3 = mkV3 (compoundV "اضافه" doVerb) "را" "به" ;
|
||||||
number_N = mkN01 "عدد" inanimate; -- also "تعداد"
|
number_N = mkN01 "عدد" inanimate; -- also "تعداد"
|
||||||
put_V2 = mkV2 (mkV "گذاشتن" "گذار") "را";
|
put_V2 = mkV2 (mkV "گذاشتن" "گذار") "را";
|
||||||
stop_V = compoundV "توقف" (mkV "کردن" "کن");
|
stop_V = compoundV "توقف" doVerb;
|
||||||
jump_V = mkV_1 "پریدن";
|
jump_V = mkV_1 "پریدن";
|
||||||
{-
|
{-
|
||||||
left_Ord = {s = "چپ" ; n = singular};
|
left_Ord = {s = "چپ" ; n = singular};
|
||||||
@@ -267,7 +265,7 @@ concrete LexiconPes of Lexicon = CatPes **
|
|||||||
fingernail_N = mkN01 "ناخن" inanimate;
|
fingernail_N = mkN01 "ناخن" inanimate;
|
||||||
fire_N = mkN01 "آتش" inanimate;
|
fire_N = mkN01 "آتش" inanimate;
|
||||||
flower_N = mkN01 "گل" inanimate;
|
flower_N = mkN01 "گل" inanimate;
|
||||||
fog_N = mkN01 "مه" inanimate;
|
fog_N = mkN "مه" (mkN "مه") ;
|
||||||
foot_N = mkN01 "پا" inanimate;
|
foot_N = mkN01 "پا" inanimate;
|
||||||
forest_N = mkN01 "جنگل" inanimate;
|
forest_N = mkN01 "جنگل" inanimate;
|
||||||
grass_N = mkN01 "چمن" inanimate;
|
grass_N = mkN01 "چمن" inanimate;
|
||||||
@@ -315,47 +313,46 @@ concrete LexiconPes of Lexicon = CatPes **
|
|||||||
burn_V = mkV "سوختن" "سوز" ;
|
burn_V = mkV "سوختن" "سوز" ;
|
||||||
dig_V = mkV_2 "کندن" ;
|
dig_V = mkV_2 "کندن" ;
|
||||||
fall_V = mkV_1 "افتادن" ;
|
fall_V = mkV_1 "افتادن" ;
|
||||||
-- float_V = compoundV "شناور" (mkToBe "بودن" "باش" "هست") ;
|
float_V = compoundV "شناور" beVerb ;
|
||||||
flow_V = compoundV "جاری" (mkV "شدن" "شو") ;
|
flow_V = compoundV "جاری" (mkV "شدن" "شو") ;
|
||||||
fly_V = compoundV "پرواز" (mkV "کردن" "کن") ;
|
fly_V = compoundV "پرواز" doVerb ;
|
||||||
freeze_V = compoundV "یخ" (mkV "زدن" "زن") ;
|
freeze_V = compoundV "یخ" hitVerb ;
|
||||||
give_V3 = mkV3 (mkV "دادن" "ده") "را" "به";
|
give_V3 = mkV3 giveVerb "را" "به";
|
||||||
laugh_V = mkV_1 "خندیدن" ;
|
laugh_V = mkV_1 "خندیدن" ;
|
||||||
lie_N = mkN01 "دروغ" inanimate;
|
|
||||||
lie_V = compoundV "دروغ" (mkV "گفتن" "گو" );
|
lie_V = compoundV "دروغ" (mkV "گفتن" "گو" );
|
||||||
play_V = compoundV "بازی" (mkV "کردن" "کن");
|
play_V = compoundV "بازی" doVerb;
|
||||||
sew_V = mkV "دوختن" "دوز" ;
|
sew_V = mkV "دوختن" "دوز" ;
|
||||||
sing_V = compoundV "آواز" (mkV_2 "خواندن");
|
sing_V = compoundV "آواز" (mkV_2 "خواندن");
|
||||||
sit_V = mkV "نشستن" "نشین" ;
|
sit_V = mkV "نشستن" "نشین" ;
|
||||||
smell_V = compoundV "بو" (mkV "دادن" "ده");
|
smell_V = compoundV "بو" giveVerb;
|
||||||
spit_V = compoundV "تف" (mkV "کردن" "کن");
|
spit_V = compoundV "تف" doVerb;
|
||||||
stand_V = mkV_1 "ایستادن";
|
stand_V = mkV_1 "ایستادن";
|
||||||
swell_V = compoundV "ورم" (mkV "کردن" "کن");
|
swell_V = compoundV "ورم" doVerb;
|
||||||
swim_V = compoundV "شنا" (mkV "کردن" "کن");
|
swim_V = compoundV "شنا" doVerb;
|
||||||
think_V = compoundV "فکر" (mkV "کردن" "کن");
|
think_V = compoundV "فکر" doVerb;
|
||||||
turn_V = mkV_1 "چرخیدن" ;
|
turn_V = mkV_1 "چرخیدن" ;
|
||||||
vomit_V = compoundV "استفراغ" (mkV "کردن" "کن");
|
vomit_V = compoundV "استفراغ" doVerb;
|
||||||
bite_V2 = mkV2 (compoundV "گاز" (mkV "گرفتن" "گیر")) "را";
|
bite_V2 = mkV2 (compoundV "گاز" takeVerb) "را";
|
||||||
count_V2 = mkV2 (mkV_2 "شماردن") "را";
|
count_V2 = mkV2 (mkV_2 "شماردن") "را";
|
||||||
cut_V2 = mkV2 (mkV_1 "بریدن") ;
|
cut_V2 = mkV2 (mkV_1 "بریدن") ;
|
||||||
fear_V2 = mkV2 (mkV_1 "ترسیدن") "از";
|
fear_V2 = mkV2 (mkV_1 "ترسیدن") "از";
|
||||||
fight_V2 = mkV2 (mkV_1 "جنگیدن") "با" False;
|
fight_V2 = mkV2 (mkV_1 "جنگیدن") "با" False;
|
||||||
hit_V2 = mkV2 (compoundV "ضربه" (mkV "زدن" "زن")) "به" False;
|
hit_V2 = mkV2 (compoundV "ضربه" hitVerb) "به" False;
|
||||||
hold_V2 = mkV2 (compoundV "نگه" haveVerb) "را";
|
hold_V2 = mkV2 (compoundV "نگه" haveVerb) "را";
|
||||||
hunt_V2 = mkV2 (compoundV "شکار" (mkV "کردن" "کن")) "را";
|
hunt_V2 = mkV2 (compoundV "شکار" doVerb) "را";
|
||||||
kill_V2 = mkV2 ( mkV_2 "کشتن") "را";
|
kill_V2 = mkV2 ( mkV_2 "کشتن") "را";
|
||||||
pull_V2 = mkV2 (mkV_1 "کشیدن") "را";
|
pull_V2 = mkV2 (mkV_1 "کشیدن") "را";
|
||||||
push_V2 = mkV2 (compoundV "هل" (mkV "دادن" "ده")) "را" ;
|
push_V2 = mkV2 (compoundV "هل" giveVerb) "را" ;
|
||||||
rub_V2 = mkV2 (mkV_1 "مالیدن") "را";
|
rub_V2 = mkV2 (mkV_1 "مالیدن") "را";
|
||||||
scratch_V2 = mkV2 (mkV_1 "خراشیدن") "را" ;
|
scratch_V2 = mkV2 (mkV_1 "خراشیدن") "را" ;
|
||||||
split_V2 = mkV2 (compoundV "تقسیم" (mkV "کردن" "کن")) "را";
|
split_V2 = mkV2 (compoundV "تقسیم" doVerb) "را";
|
||||||
squeeze_V2 = mkV2 (compoundV "له" (mkV "کردن" "کن")) "را";
|
squeeze_V2 = mkV2 (compoundV "له" doVerb) "را";
|
||||||
stab_V2 = mkV2 (compoundV "چاقو" (mkV "زدن" "زن")) "به" False;
|
stab_V2 = mkV2 (compoundV "چاقو" hitVerb) "به" False;
|
||||||
suck_V2 = mkV2 (mkV_1 "مکیدن") "را" ;
|
suck_V2 = mkV2 (mkV_1 "مکیدن") "را" ;
|
||||||
throw_V2 = mkV2 (compoundV "پرتاب" (mkV "کردن" "کن")) "را";
|
throw_V2 = mkV2 (compoundV "پرتاب" doVerb) "را";
|
||||||
tie_V2 = mkV2 (compoundV "گره" (mkV "زدن" "زن")) "را";
|
tie_V2 = mkV2 (compoundV "گره" hitVerb) "را";
|
||||||
wash_V2 = mkV2 (mkV "شستن" "شور") "را" ; -- also "شوی" which is the very formal form of the present root
|
wash_V2 = mkV2 (mkV "شستن" "شور") "را" ; -- also "شوی" which is the very formal form of the present root
|
||||||
wipe_V2 = mkV2 (compoundV "پاک" (mkV "کردن" "کن")) "را";
|
wipe_V2 = mkV2 (compoundV "پاک" doVerb) "را";
|
||||||
|
|
||||||
---- other_A = regA "دیگر" ;
|
---- other_A = regA "دیگر" ;
|
||||||
|
|
||||||
@@ -364,11 +361,16 @@ concrete LexiconPes of Lexicon = CatPes **
|
|||||||
rule_N = mkN "قانون" "قوانین" inanimate;
|
rule_N = mkN "قانون" "قوانین" inanimate;
|
||||||
|
|
||||||
---- added 4/6/2007
|
---- added 4/6/2007
|
||||||
john_PN = mkPN "جان" inanimate;
|
john_PN = mkPN "جان" animate;
|
||||||
question_N = mkN01 "سؤال" inanimate; -- has variant "پرسش"
|
question_N = mkN01 "سؤال" inanimate; -- has variant "پرسش"
|
||||||
ready_A = mkA "آماده" ["با آمادگی"] ;
|
ready_A = mkA "آماده" ["با آمادگی"] ;
|
||||||
reason_N = mkN "دلیل" "دلایل" inanimate;
|
reason_N = mkN "دلیل" "دلایل" inanimate;
|
||||||
today_Adv = ss "امروز" ;
|
today_Adv = ss "امروز" ;
|
||||||
uncertain_A = mkA "نامعلوم" ["با تردید"];
|
uncertain_A = mkA "نامعلوم" ["با تردید"];
|
||||||
|
|
||||||
|
oper
|
||||||
|
doVerb = mkV "کردن" "کن" ;
|
||||||
|
takeVerb = mkV "گرفتن" "گیر" ;
|
||||||
|
hitVerb = mkV "زدن" "زن" ;
|
||||||
|
giveVerb = mkV "دادن" "ده" ;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +0,0 @@
|
|||||||
--# -path=.:../common:../abstract
|
|
||||||
|
|
||||||
resource MakeStructuralPnb = open CatPnb, ParadigmsPnb, ResPnb, MorphoPnb, NounPnb, Prelude in {
|
|
||||||
|
|
||||||
oper
|
|
||||||
mkSubj : Str -> CatPnb.Subj = \x ->
|
|
||||||
lin Subj {s = x} ;
|
|
||||||
mkNP : Str -> Number -> ResPnb.NP = \s,n ->
|
|
||||||
MassNP (UseN (ParadigmsPnb.mkN s));
|
|
||||||
-- lin NP (regNP s n) ;
|
|
||||||
mkIDet : Str -> Number -> IDet = \s,n ->
|
|
||||||
lin IDet {s = \\_ => s ; n = n} ;
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,507 +1,329 @@
|
|||||||
--# -path=.:../../prelude
|
--# -path=.:../../prelude
|
||||||
--
|
--
|
||||||
----1 A Simple Punjabi Resource Morphology
|
----1 A Simple Persian Resource Morphology
|
||||||
----
|
----
|
||||||
---- Shafqat Virk, Aarne Ranta,2010
|
---- Shafqat Virk, Aarne Ranta,2010
|
||||||
----
|
----
|
||||||
---- This resource morphology contains definitions needed in the resource
|
---- This resource morphology contains definitions needed in the resource
|
||||||
---- syntax. To build a lexicon, it is better to use $ParadigmsPnb$, which
|
---- syntax. To build a lexicon, it is better to use $ParadigmsPes$, which
|
||||||
---- gives a higher-level access to this module.
|
---- gives a higher-level access to this module.
|
||||||
--
|
--
|
||||||
resource MorphoPes = ResPes ** open Prelude,Predef in {
|
resource MorphoPes = ParamX ** open Prelude,Predef in {
|
||||||
|
|
||||||
flags optimize=all ;
|
flags optimize=all ;
|
||||||
coding = utf8;
|
coding = utf8;
|
||||||
|
|
||||||
----2 Nouns
|
---- Orthography
|
||||||
|
|
||||||
oper
|
oper
|
||||||
|
-- Zero-width non-joiner, used for certain morphemes
|
||||||
|
-- See https://en.wikipedia.org/wiki/Persian_alphabet#Word_boundaries
|
||||||
|
ZWNJ : Str = "" ;
|
||||||
|
zwnj : Str -> Str -> Str = \s1,s2 -> s1 + ZWNJ + s2 ;
|
||||||
|
|
||||||
mkN : (x1,x2 : Str) -> Animacy -> Noun =
|
-- kasre : Str = "ِ" ; -- To enable vowels for TTS input
|
||||||
\sg,pl,ani -> {
|
-- fatha : Str = "َ" ;
|
||||||
s = table {
|
kasre,fatha : Str = [] ;
|
||||||
bEzafa => table { Sg => sg ;
|
|
||||||
Pl => pl
|
|
||||||
} ;
|
|
||||||
aEzafa => table { Sg => mkEzafa sg ;
|
|
||||||
Pl => mkEzafa pl
|
|
||||||
} ;
|
|
||||||
enClic => table { Sg => mkEnclic sg ;
|
|
||||||
Pl => mkEnclic pl
|
|
||||||
}
|
|
||||||
};
|
|
||||||
animacy = ani ;
|
|
||||||
definitness = True
|
|
||||||
} ;
|
|
||||||
|
|
||||||
|
|
||||||
|
---- Nouns
|
||||||
|
param
|
||||||
|
Animacy = Animate | Inanimate ;
|
||||||
|
Mod = Bare | Ezafe | Clitic | Poss ;
|
||||||
|
Agr = Ag Number Person ;
|
||||||
|
CmpdStatus = IsCmpd | NotCmpd ;
|
||||||
|
|
||||||
|
------------------------------------------
|
||||||
|
-- Agreement transformations
|
||||||
|
-----------------------------------------
|
||||||
|
oper
|
||||||
|
toAgr : Number -> Person -> Agr = \n,p -> Ag n p ;
|
||||||
|
|
||||||
|
fromAgr : Agr -> {n : Number ; p : Person } = \agr -> case agr of {
|
||||||
|
Ag n p => {n = n ; p = p}
|
||||||
|
} ;
|
||||||
|
|
||||||
|
conjAgr : Agr -> Agr -> Agr = \a0,b0 ->
|
||||||
|
let a = fromAgr a0 ; b = fromAgr b0
|
||||||
|
in toAgr (conjNumber a.n b.n) b.p ;
|
||||||
|
|
||||||
|
giveNumber : Agr -> Number = \a -> case a of {
|
||||||
|
Ag n _ => n
|
||||||
|
} ;
|
||||||
|
|
||||||
|
defaultAgr : Agr = agrP3 Sg ;
|
||||||
|
agrP3 : Number -> Agr = \n -> Ag n P3 ;
|
||||||
|
agrP1 : Number -> Agr = \n -> Ag n P1 ;
|
||||||
|
|
||||||
|
-------------------------
|
||||||
|
-- Ezafe construction
|
||||||
|
------------------------
|
||||||
|
oper
|
||||||
|
|
||||||
|
|
||||||
|
mkPossStem : Str -> Str = \str ->
|
||||||
|
case str of {
|
||||||
|
_ + ("اه"|"او"|"وه")
|
||||||
|
=> str + fatha ;
|
||||||
|
_ + ("ا"|"و") => str + fatha + "ی" ;
|
||||||
|
_ + "ه" => zwnj str "ا" ;
|
||||||
|
_ => str + fatha } ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
mkEzafe : Str -> Str = \str ->
|
||||||
|
case str of {
|
||||||
|
st + "اه" => str + kasre ;
|
||||||
|
st + "وه" => str + kasre ;
|
||||||
|
st + "ه" => zwnj str "ی" ;-- alt. st + "ۀ" ;
|
||||||
|
st + "او" => str + kasre ;
|
||||||
|
st + "وو" => str + kasre ;
|
||||||
|
st + "و" => str + "ی" ;
|
||||||
|
st + "ا" => str + "ی" ;
|
||||||
|
_ => str + kasre
|
||||||
|
};
|
||||||
|
|
||||||
|
mkEnclic : Str -> Str ;
|
||||||
|
mkEnclic str = case str of {
|
||||||
|
st + ("ا"|"و") => zwnj str "یی" ; -- ی after a long vowel to help pronunciation
|
||||||
|
st + "اه" => str + "ی" ; -- here ه is a consonant, so single ی
|
||||||
|
st + ("ی"|"ه") => zwnj str "ای" ; -- after ی or ه as a vowel, add an alif to help pronunciation
|
||||||
|
_ => str + "ی" -- any other case: just a single ی
|
||||||
|
} ;
|
||||||
|
|
||||||
|
modTable : Str -> Mod => Str = \str ->
|
||||||
|
table {Bare => str ;
|
||||||
|
Ezafe => mkEzafe str ;
|
||||||
|
Clitic => mkEnclic str ;
|
||||||
|
Poss => mkPossStem str } ;
|
||||||
|
|
||||||
|
Noun = {
|
||||||
|
s : Number => Mod => Str ;
|
||||||
|
animacy : Animacy ;
|
||||||
|
isCmpd : CmpdStatus -- Affects possession: awkward to use poss. suff. with compound nouns
|
||||||
|
} ;
|
||||||
|
|
||||||
|
mkN : (x1,x2 : Str) -> Animacy -> Noun = \sg,pl,ani -> indeclN sg ** {
|
||||||
|
s = table {Sg => modTable sg ; Pl => modTable pl}
|
||||||
|
} ;
|
||||||
|
|
||||||
|
indeclN : Str -> Noun = \s -> {
|
||||||
|
s = \\_,_ => s ;
|
||||||
|
animacy = Inanimate ; isCmpd = NotCmpd
|
||||||
|
} ;
|
||||||
|
|
||||||
-- masculine nouns end with alif, choTi_hay, ain Translitration: (a, h, e)
|
-- masculine nouns end with alif, choTi_hay, ain Translitration: (a, h, e)
|
||||||
-- Arabic nouns ends with h. also taken as Masc
|
-- Arabic nouns ends with h. also taken as Masc
|
||||||
------------------------------------------------------------------
|
|
||||||
----Verbs
|
|
||||||
------------------------------------------------------------------
|
|
||||||
{-
|
|
||||||
mkVerb : (x1,x2 : Str) -> Verb = \inf,root2 ->
|
|
||||||
let root1 = (tk 1 inf) ;
|
|
||||||
in {
|
|
||||||
s = table {
|
|
||||||
|
|
||||||
Root1 => root1 ;
|
---------------------
|
||||||
Root2 => root2 ;
|
--Determiners
|
||||||
Inf => inf ;
|
--------------------
|
||||||
|
BaseQuant : Type = {
|
||||||
|
mod : Mod } ;
|
||||||
|
|
||||||
VF tense aspect person number => (mkCmnVF root1 root2 tense aspect person number).s
|
Determiner : Type = BaseQuant ** {
|
||||||
-- Caus1 tense person number gender => (mkCmnVF root1 tense person number gender).s ;
|
s : Str ;
|
||||||
-- Caus2 tense person number gender => (mkCmnVF root2 tense person number gender).s
|
sp : Str ; -- stand-alone form for DetNP and possessive pronouns with compound nouns
|
||||||
}
|
n : Number ;
|
||||||
|
isNum : Bool
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
--1. Basic stem form, direct & indirect causatives exists
|
Quant : Type = BaseQuant ** {
|
||||||
-- v1 nechna nechaana nechwana
|
s : Number => CmpdStatus => Str} ;
|
||||||
|
|
||||||
mkVerb1 : (_: Str) -> Verb = \inf ->
|
makeDet : Str -> Number -> Bool -> Determiner = \str,n,b -> {
|
||||||
let root1 = (tk 1 inf) ;
|
s,sp = str;
|
||||||
root2 = (tk 3 inf) ;
|
isNum = b;
|
||||||
in {
|
mod = Bare ;
|
||||||
s = table {
|
n = n
|
||||||
|
};
|
||||||
Root1 => root1 ;
|
|
||||||
Root2 => root2 ;
|
makeQuant : Str -> Str -> Quant = \sg,pl -> {
|
||||||
Inf => inf ;
|
s = table {Sg => \\_ => sg ; Pl => \\_ => pl} ;
|
||||||
|
mod = Bare ;
|
||||||
VF tense aspect person number => (mkCmnVF root1 root2 tense aspect person number).s
|
};
|
||||||
-- Caus1 tense person number gender => (mkCmnVF root1 tense person number gender).s ;
|
|
||||||
-- Caus2 tense person number gender => (mkCmnVF root2 tense person number gender).s
|
|
||||||
}
|
|
||||||
} ;
|
|
||||||
|
|
||||||
|
|
||||||
mkVerb2 : (_: Str) -> Verb = \inf ->
|
|
||||||
let root1 = (tk 1 inf) ;
|
|
||||||
root2 = (tk 2 inf) ;
|
|
||||||
in {
|
|
||||||
s = table {
|
|
||||||
|
|
||||||
Root1 => root1 ;
|
|
||||||
Root2 => root2 ;
|
|
||||||
Inf => inf ;
|
|
||||||
|
|
||||||
VF tense aspect person number => (mkCmnVF root1 root2 tense aspect person number).s
|
|
||||||
-- Caus1 tense person number gender => (mkCmnVF root1 tense person number gender).s ;
|
|
||||||
-- Caus2 tense person number gender => (mkCmnVF root2 tense person number gender).s
|
|
||||||
}
|
|
||||||
} ;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
mkCmnVF : Str -> Str -> VTense -> PAspect -> PPerson -> Number -> {s:Str}= \root1,root2,t,a,p,n ->
|
|
||||||
{s = (mkCmnVF1 root1 root2 t a p n).s ;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
mkCmnVF1 : Str -> Str -> VTense -> PAspect -> PPerson -> Number -> {s:Str}= \root1,root2,t,a,p,n ->
|
|
||||||
{s = let khordh = root1 + "ه";
|
|
||||||
mekhor = "می" ++ root2 ;
|
|
||||||
mekhord = "می" ++ root1 ;
|
|
||||||
mekhordh = "می" ++ khordh ;
|
|
||||||
khah = "خواه" ;
|
|
||||||
mekhah = "می" ++ khah ;
|
|
||||||
bvdh = "بوده"
|
|
||||||
in
|
|
||||||
case <t,a,p,n> of {
|
|
||||||
<PPresent,PPerf,PPers1,Sg> => khordh ++ "ام" ;
|
|
||||||
<PPresent,PPerf,PPers1,Pl> => khordh ++ "ایم" ;
|
|
||||||
<PPresent,PPerf,PPers2,Sg> => khordh ++ "ای" ;
|
|
||||||
<PPresent,PPerf,PPers2,Pl> => khordh ++ "اید" ;
|
|
||||||
<PPresent,PPerf,PPers3,Sg> => khordh ++ "است" ;
|
|
||||||
<PPresent,PPerf,PPers3,Pl> => khordh ++ "اند" ;
|
|
||||||
|
|
||||||
<PPresent,PImperf,PPers1,Sg> => mekhor + "م" ; -- toHave need to have khor instead of mekhor
|
|
||||||
<PPresent,PImperf,PPers1,Pl> => mekhor + "یم" ;
|
|
||||||
<PPresent,PImperf,PPers2,Sg> => mekhor + "ی" ;
|
|
||||||
<PPresent,PImperf,PPers2,Pl> => mekhor + "ید" ;
|
|
||||||
<PPresent,PImperf,PPers3,Sg> => mekhor + "د" ;
|
|
||||||
<PPresent,PImperf,PPers3,Pl> => mekhor + "ند" ;
|
|
||||||
|
|
||||||
<PPresent,Aorist,PPers1,Sg> => "" ;
|
|
||||||
<PPresent,Aorist,PPers1,Pl> => "" ;
|
|
||||||
<PPresent,Aorist,PPers2,Sg> => "" ;
|
|
||||||
<PPresent,Aorist,PPers2,Pl> => "" ;
|
|
||||||
<PPresent,Aorist,PPers3,Sg> => "" ;
|
|
||||||
<PPresent,Aorist,PPers3,Pl> => "" ;
|
|
||||||
|
|
||||||
<PPast,PPerf,PPers1,Sg> => khordh ++ "بودم" ;
|
|
||||||
<PPast,PPerf,PPers1,Pl> => khordh ++ "بودیم" ;
|
|
||||||
<PPast,PPerf,PPers2,Sg> => khordh ++ "بودی" ;
|
|
||||||
<PPast,PPerf,PPers2,Pl> => khordh ++ "بودید" ;
|
|
||||||
<PPast,PPerf,PPers3,Sg> => khordh ++ "بود" ;
|
|
||||||
<PPast,PPerf,PPers3,Pl> => khordh ++ "بودند" ;
|
|
||||||
|
|
||||||
<PPast,PImperf,PPers1,Sg> => mekhord + "م" ; -- toHave need to have khor instead of mekhor
|
|
||||||
<PPast,PImperf,PPers1,Pl> => mekhord + "یم" ;
|
|
||||||
<PPast,PImperf,PPers2,Sg> => mekhord + "ی";
|
|
||||||
<PPast,PImperf,PPers2,Pl> => mekhord + "ید" ;
|
|
||||||
<PPast,PImperf,PPers3,Sg> => mekhord ;
|
|
||||||
<PPast,PImperf,PPers3,Pl> => mekhord + "ند" ;
|
|
||||||
|
|
||||||
<PPast,Aorist,PPers1,Sg> => root1 + "م" ;
|
|
||||||
<PPast,Aorist,PPers1,Pl> => root1 + "یم" ;
|
|
||||||
<PPast,Aorist,PPers2,Sg> => root1 + "ی";
|
|
||||||
<PPast,Aorist,PPers2,Pl> => root1 + "ید" ;
|
|
||||||
<PPast,Aorist,PPers3,Sg> => root1 ;
|
|
||||||
<PPast,Aorist,PPers3,Pl> => root1 + "ند" ;
|
|
||||||
|
|
||||||
-- check this one
|
|
||||||
<PFut,PPerf,PPers1,Sg> => "" ;
|
|
||||||
<PFut,PPerf,PPers1,Pl> => "" ;
|
|
||||||
<PFut,PPerf,PPers2,Sg> => "" ;
|
|
||||||
<PFut,PPerf,PPers2,Pl> => "" ;
|
|
||||||
<PFut,PPerf,PPers3,Sg> => "" ;
|
|
||||||
<PFut,PPerf,PPers3,Pl> => "" ;
|
|
||||||
|
|
||||||
<PFut,PImperf,PPers1,Sg> => mekhah + "م" ++ addBh root2 + "م" ;
|
|
||||||
<PFut,PImperf,PPers1,Pl> => mekhah + "یم" ++ addBh root2 + "یم" ;
|
|
||||||
<PFut,PImperf,PPers2,Sg> => mekhah + "ی" ++ addBh root2 + "ی" ;
|
|
||||||
<PFut,PImperf,PPers2,Pl> => mekhah + "ید" ++ addBh root2 + "ید" ;
|
|
||||||
<PFut,PImperf,PPers3,Sg> => mekhah + "د" ++ addBh root2 + "د" ;
|
|
||||||
<PFut,PImperf,PPers3,Pl> => mekhah + "ند" ++ addBh root2 + "ند" ;
|
|
||||||
|
|
||||||
<PFut,Aorist,PPers1,Sg> => khah + "م" ++ root1 ;
|
|
||||||
<PFut,Aorist,PPers1,Pl> => khah + "یم" ++ root1 ;
|
|
||||||
<PFut,Aorist,PPers2,Sg> => khah + "ی" ++ root1 ;
|
|
||||||
<PFut,Aorist,PPers2,Pl> => khah + "ید" ++ root1 ;
|
|
||||||
<PFut,Aorist,PPers3,Sg> => khah + "د" ++ root1 ;
|
|
||||||
<PFut,Aorist,PPers3,Pl> => khah + "ند" ++ root1 ;
|
|
||||||
|
|
||||||
|
|
||||||
<Infr_Past,PPerf,PPers1,Sg> => khordh ++ bvdh ++ "ام" ;
|
|
||||||
<Infr_Past,PPerf,PPers1,Pl> => khordh ++ bvdh ++ "ایم" ;
|
|
||||||
<Infr_Past,PPerf,PPers2,Sg> => khordh ++ bvdh ++ "ای" ;
|
|
||||||
<Infr_Past,PPerf,PPers2,Pl> => khordh ++ bvdh ++ "اید" ;
|
|
||||||
<Infr_Past,PPerf,PPers3,Sg> => khordh ++ bvdh ++ "است" ;
|
|
||||||
<Infr_Past,PPerf,PPers3,Pl> => khordh ++ bvdh ++ "اند" ;
|
|
||||||
|
|
||||||
<Infr_Past,PImperf,PPers1,Sg> => mekhordh ++ "ام" ; -- toHave need to have khordh instead of mekhor
|
|
||||||
<Infr_Past,PImperf,PPers1,Pl> => mekhordh ++ "ایم" ;
|
|
||||||
<Infr_Past,PImperf,PPers2,Sg> => mekhordh ++ "ای" ;
|
|
||||||
<Infr_Past,PImperf,PPers2,Pl> => mekhordh ++ "اید" ;
|
|
||||||
<Infr_Past,PImperf,PPers3,Sg> => mekhordh ++ "است" ;
|
|
||||||
<Infr_Past,PImperf,PPers3,Pl> => mekhordh ++ "اند" ;
|
|
||||||
|
|
||||||
|
|
||||||
-- check this one
|
|
||||||
<Infr_Past,Aorist,PPers1,Sg> => "" ;
|
|
||||||
<Infr_Past,Aorist,PPers1,Pl> => "" ;
|
|
||||||
<Infr_Past,Aorist,PPers2,Sg> => "" ;
|
|
||||||
<Infr_Past,Aorist,PPers2,Pl> => "" ;
|
|
||||||
<Infr_Past,Aorist,PPers3,Sg> => "" ;
|
|
||||||
<Infr_Past,Aorist,PPers3,Pl> => ""
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
} ;
|
|
||||||
-}
|
|
||||||
mkVerb : (x1,x2 : Str) -> Verb = \inf,root2 ->
|
|
||||||
let root1 = (tk 1 inf) ;
|
|
||||||
impRoot = mkimpRoot root2;
|
|
||||||
in {
|
|
||||||
s = table {
|
|
||||||
|
|
||||||
Root1 => root1 ;
|
|
||||||
Root2 => root2 ;
|
|
||||||
Inf => inf ;
|
|
||||||
Imp Pos Sg => addBh impRoot ;
|
|
||||||
Imp Pos Pl => (addBh impRoot) + "ید" ;
|
|
||||||
Imp Neg Sg => "ن" + impRoot ;
|
|
||||||
Imp Neg Pl => "ن" + impRoot + "ید" ;
|
|
||||||
|
|
||||||
VF pol tense person number => (mkCmnVF root1 root2 pol tense person number).s ;
|
|
||||||
-- VF Neg tense person number => addN (mkCmnVF root1 root2 tense person number).s ;
|
|
||||||
Vvform (AgPes number person) => (mkvVform root2 number person).s
|
|
||||||
}
|
|
||||||
} ;
|
|
||||||
|
|
||||||
mkVerb1 : (_: Str) -> Verb = \inf ->
|
|
||||||
let root1 = (tk 1 inf) ;
|
|
||||||
root2 = (tk 3 inf) ;
|
|
||||||
impRoot = mkimpRoot root2 ;
|
|
||||||
in {
|
|
||||||
s = table {
|
|
||||||
|
|
||||||
Root1 => root1 ;
|
|
||||||
Root2 => root2 ;
|
|
||||||
Inf => inf ;
|
|
||||||
Imp Pos Sg => addBh impRoot ;
|
|
||||||
Imp Pos Pl => (addBh impRoot) + "ید" ;
|
|
||||||
Imp Neg Sg => "ن" + impRoot ;
|
|
||||||
Imp Neg Pl => "ن" + impRoot + "ید" ;
|
|
||||||
|
|
||||||
VF pol tense person number => (mkCmnVF root1 root2 pol tense person number).s ;
|
|
||||||
-- VF Neg tense person number => addN (mkCmnVF root1 root2 tense person number).s ;
|
|
||||||
Vvform (AgPes number person) => (mkvVform root2 number person).s
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
mkVerb2 : (_: Str) -> Verb = \inf ->
|
|
||||||
let root1 = (tk 1 inf) ;
|
|
||||||
root2 = (tk 2 inf) ;
|
|
||||||
impRoot = mkimpRoot root2 ;
|
|
||||||
in {
|
|
||||||
s = table {
|
|
||||||
|
|
||||||
Root1 => root1 ;
|
|
||||||
Root2 => root2 ;
|
|
||||||
Inf => inf ;
|
|
||||||
Imp Pos Sg => addBh impRoot ;
|
|
||||||
Imp Pos Pl => (addBh impRoot) + "ید" ;
|
|
||||||
Imp Neg Sg => "ن" + impRoot ;
|
|
||||||
Imp Neg Pl => "ن" + impRoot + "ید" ;
|
|
||||||
|
|
||||||
VF pol tense person number => (mkCmnVF root1 root2 pol tense person number).s ;
|
|
||||||
-- VF Neg tense person number => addN (mkCmnVF root1 root2 tense person number).s ;
|
|
||||||
Vvform (AgPes number person) => (mkvVform root2 number person).s
|
|
||||||
}
|
|
||||||
} ;
|
|
||||||
|
|
||||||
mkHave : Verb =
|
|
||||||
|
|
||||||
{
|
|
||||||
s = table {
|
|
||||||
|
|
||||||
Root1 => "داشت" ;
|
|
||||||
Root2 => "دار" ;
|
|
||||||
Inf => "داشتن" ;
|
|
||||||
Imp Pos Sg => ["داشته باش"] ;
|
|
||||||
Imp Pos Pl => ["داشته باشید"];
|
|
||||||
Imp Neg Sg => ["نداشته باش"] ;
|
|
||||||
Imp Neg Pl => ["نداشته باشید"] ;
|
|
||||||
|
|
||||||
VF pol tense person number => (toHave pol tense number person).s ;
|
|
||||||
-- VF Neg tense person number => addN (mkCmnVF root1 root2 tense person number).s ;
|
|
||||||
Vvform (AgPes Sg PPers1) => ["داشته باشم"] ;
|
|
||||||
Vvform (AgPes Sg PPers2) => ["داشته باشی"] ;
|
|
||||||
Vvform (AgPes Sg PPers3) => ["داشته باشد"] ;
|
|
||||||
Vvform (AgPes Pl PPers1) => ["داشته باشیم"] ;
|
|
||||||
Vvform (AgPes Pl PPers2) => ["داشته باشید"] ;
|
|
||||||
Vvform (AgPes Pl PPers3) => ["داشته باشند"]
|
|
||||||
}
|
|
||||||
} ;
|
|
||||||
|
|
||||||
|
|
||||||
mkCmnVF : Str -> Str -> Polarity -> VTense2 -> PPerson -> Number -> {s:Str}= \root1,root2,pol,t,p,n ->
|
|
||||||
{s = (mkCmnVF1 root1 root2 pol t p n).s ;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
mkCmnVF1 : Str -> Str -> Polarity -> VTense2 -> PPerson -> Number -> {s:Str}= \root1,root2,pol,t,p,n ->
|
|
||||||
{s = let khordh = root1 + "ه";
|
|
||||||
nkhordh = (addN root1) + "ه" ;
|
|
||||||
mekhor = "می" ++ root2 ;
|
|
||||||
nmekhor = "نمی" ++ root2 ;
|
|
||||||
mekhord = "می" ++ root1 ;
|
|
||||||
nmekhord = "نمی" ++ root1 ;
|
|
||||||
mekhordh = "می" ++ khordh ;
|
|
||||||
nmekhordh = "نمی" ++ khordh ;
|
|
||||||
khah = "خواه" ;
|
|
||||||
nkhah = "نخواه" ;
|
|
||||||
mekhah = "می" ++ khah ;
|
|
||||||
nmekhah = "نمی" ++ khah ;
|
|
||||||
bvdh = "بوده"
|
|
||||||
in
|
|
||||||
case <pol,t,p,n> of {
|
|
||||||
<Pos,PPresent2 PrPerf,PPers1,Sg> => khordh ++ "ام" ;
|
|
||||||
<Pos,PPresent2 PrPerf,PPers1,Pl> => khordh ++ "ایم" ;
|
|
||||||
<Pos,PPresent2 PrPerf,PPers2,Sg> => khordh ++ "ای" ;
|
|
||||||
<Pos,PPresent2 PrPerf,PPers2,Pl> => khordh ++ "اید" ;
|
|
||||||
<Pos,PPresent2 PrPerf,PPers3,Sg> => khordh ++ "است" ;
|
|
||||||
<Pos,PPresent2 PrPerf,PPers3,Pl> => khordh ++ "اند" ;
|
|
||||||
|
|
||||||
<Pos,PPresent2 PrImperf,PPers1,Sg> => mekhor + "م" ;
|
|
||||||
<Pos,PPresent2 PrImperf,PPers1,Pl> => mekhor + "یم" ;
|
|
||||||
<Pos,PPresent2 PrImperf,PPers2,Sg> => mekhor + "ی" ;
|
|
||||||
<Pos,PPresent2 PrImperf,PPers2,Pl> => mekhor + "ید" ;
|
|
||||||
<Pos,PPresent2 PrImperf,PPers3,Sg> => mekhor + "د" ;
|
|
||||||
<Pos,PPresent2 PrImperf,PPers3,Pl> => mekhor + "ند" ;
|
|
||||||
|
|
||||||
|
|
||||||
<Pos,PPast2 PstPerf,PPers1,Sg> => khordh ++ "بودم" ;
|
|
||||||
<Pos,PPast2 PstPerf,PPers1,Pl> => khordh ++ "بودیم" ;
|
|
||||||
<Pos,PPast2 PstPerf,PPers2,Sg> => khordh ++ "بودی" ;
|
|
||||||
<Pos,PPast2 PstPerf,PPers2,Pl> => khordh ++ "بودید" ;
|
|
||||||
<Pos,PPast2 PstPerf,PPers3,Sg> => khordh ++ "بود" ;
|
|
||||||
<Pos,PPast2 PstPerf,PPers3,Pl> => khordh ++ "بودند" ;
|
|
||||||
|
|
||||||
<Pos,PPast2 PstImperf,PPers1,Sg> => mekhord + "م" ;
|
|
||||||
<Pos,PPast2 PstImperf,PPers1,Pl> => mekhord + "یم" ;
|
|
||||||
<Pos,PPast2 PstImperf,PPers2,Sg> => mekhord + "ی";
|
|
||||||
<Pos,PPast2 PstImperf,PPers2,Pl> => mekhord + "ید" ;
|
|
||||||
<Pos,PPast2 PstImperf,PPers3,Sg> => mekhord ;
|
|
||||||
<Pos,PPast2 PstImperf,PPers3,Pl> => mekhord + "ند" ;
|
|
||||||
|
|
||||||
<Pos,PPast2 PstAorist,PPers1,Sg> => root1 + "م" ;
|
|
||||||
<Pos,PPast2 PstAorist,PPers1,Pl> => root1 + "یم" ;
|
|
||||||
<Pos,PPast2 PstAorist,PPers2,Sg> => root1 + "ی";
|
|
||||||
<Pos,PPast2 PstAorist,PPers2,Pl> => root1 + "ید" ;
|
|
||||||
<Pos,PPast2 PstAorist,PPers3,Sg> => root1 ;
|
|
||||||
<Pos,PPast2 PstAorist,PPers3,Pl> => root1 + "ند" ;
|
|
||||||
|
|
||||||
{-
|
|
||||||
<Pos,PFut2 FtImperf,PPers1,Sg> => mekhah + "م" ++ addBh root2 + "م" ;
|
|
||||||
<Pos,PFut2 FtImperf,PPers1,Pl> => mekhah + "یم" ++ addBh root2 + "یم" ;
|
|
||||||
<Pos,PFut2 FtImperf,PPers2,Sg> => mekhah + "ی" ++ addBh root2 + "ی" ;
|
|
||||||
<Pos,PFut2 FtImperf,PPers2,Pl> => mekhah + "ید" ++ addBh root2 + "ید" ;
|
|
||||||
<Pos,PFut2 FtImperf,PPers3,Sg> => mekhah + "د" ++ addBh root2 + "د" ;
|
|
||||||
<Pos,PFut2 FtImperf,PPers3,Pl> => mekhah + "ند" ++ addBh root2 + "ند" ;
|
|
||||||
-}
|
|
||||||
<Pos,PFut2 FtAorist,PPers1,Sg> => khah + "م" ++ root1 ;
|
|
||||||
<Pos,PFut2 FtAorist,PPers1,Pl> => khah + "یم" ++ root1 ;
|
|
||||||
<Pos,PFut2 Ftorist,PPers2,Sg> => khah + "ی" ++ root1 ;
|
|
||||||
<Pos,PFut2 FtAorist,PPers2,Pl> => khah + "ید" ++ root1 ;
|
|
||||||
<Pos,PFut2 FtAorist,PPers3,Sg> => khah + "د" ++ root1 ;
|
|
||||||
<Pos,PFut2 FtAorist,PPers3,Pl> => khah + "ند" ++ root1 ;
|
|
||||||
|
|
||||||
|
|
||||||
<Pos,Infr_Past2 InfrPerf,PPers1,Sg> => khordh ++ bvdh ++ "ام" ;
|
|
||||||
<Pos,Infr_Past2 InfrPerf,PPers1,Pl> => khordh ++ bvdh ++ "ایم" ;
|
|
||||||
<Pos,Infr_Past2 InfrPerf,PPers2,Sg> => khordh ++ bvdh ++ "ای" ;
|
|
||||||
<Pos,Infr_Past2 InfrPerf,PPers2,Pl> => khordh ++ bvdh ++ "اید" ;
|
|
||||||
<Pos,Infr_Past2 InfrPerf,PPers3,Sg> => khordh ++ bvdh ++ "است" ;
|
|
||||||
<Pos,Infr_Past2 InfrPerf,PPers3,Pl> => khordh ++ bvdh ++ "اند" ;
|
|
||||||
|
|
||||||
<Pos,Infr_Past2 InfrImperf,PPers1,Sg> => mekhordh ++ "ام" ;
|
|
||||||
<Pos,Infr_Past2 InfrImperf,PPers1,Pl> => mekhordh ++ "ایم" ;
|
|
||||||
<Pos,Infr_Past2 InfrImperf,PPers2,Sg> => mekhordh ++ "ای" ;
|
|
||||||
<Pos,Infr_Past2 InfrImperf,PPers2,Pl> => mekhordh ++ "اید" ;
|
|
||||||
<Pos,Infr_Past2 InfrImperf,PPers3,Sg> => mekhordh ++ "است" ;
|
|
||||||
<Pos,Infr_Past2 InfrImperf,PPers3,Pl> => mekhordh ++ "اند" ;
|
|
||||||
|
|
||||||
-- negatives
|
|
||||||
|
|
||||||
<Neg,PPresent2 PrPerf,PPers1,Sg> => addN khordh ++ "ام" ;
|
|
||||||
<Neg,PPresent2 PrPerf,PPers1,Pl> => addN khordh ++ "ایم" ;
|
|
||||||
<Neg,PPresent2 PrPerf,PPers2,Sg> => addN khordh ++ "ای" ;
|
|
||||||
<Neg,PPresent2 PrPerf,PPers2,Pl> => addN khordh ++ "اید" ;
|
|
||||||
<Neg,PPresent2 PrPerf,PPers3,Sg> => addN khordh ++ "است" ;
|
|
||||||
<Neg,PPresent2 PrPerf,PPers3,Pl> => addN khordh ++ "اند" ;
|
|
||||||
|
|
||||||
|
|
||||||
<Neg,PPresent2 PrImperf,PPers1,Sg> => nmekhor + "م" ;
|
|
||||||
<Neg,PPresent2 PrImperf,PPers1,Pl> => nmekhor + "یم" ;
|
|
||||||
<Neg,PPresent2 PrImperf,PPers2,Sg> => nmekhor + "ی" ;
|
|
||||||
<Neg,PPresent2 PrImperf,PPers2,Pl> => nmekhor + "ید" ;
|
|
||||||
<Neg,PPresent2 PrImperf,PPers3,Sg> => nmekhor + "د" ;
|
|
||||||
<Neg,PPresent2 PrImperf,PPers3,Pl> => nmekhor + "ند" ;
|
|
||||||
|
|
||||||
<Neg,PPast2 PstPerf,PPers1,Sg> => nkhordh ++ "بودم" ;
|
|
||||||
<Neg,PPast2 PstPerf,PPers1,Pl> => nkhordh ++ "بودیم" ;
|
|
||||||
<Neg,PPast2 PstPerf,PPers2,Sg> => nkhordh ++ "بودی" ;
|
|
||||||
<Neg,PPast2 PstPerf,PPers2,Pl> => nkhordh ++ "بودید" ;
|
|
||||||
<Neg,PPast2 PstPerf,PPers3,Sg> => nkhordh ++ "بود" ;
|
|
||||||
<Neg,PPast2 PstPerf,PPers3,Pl> => nkhordh ++ "بودند" ;
|
|
||||||
|
|
||||||
<Neg,PPast2 PstImperf,PPers1,Sg> => nmekhord + "م" ;
|
|
||||||
<Neg,PPast2 PstImperf,PPers1,Pl> => nmekhord + "یم" ;
|
|
||||||
<Neg,PPast2 PstImperf,PPers2,Sg> => nmekhord + "ی";
|
|
||||||
<Neg,PPast2 PstImperf,PPers2,Pl> => nmekhord + "ید" ;
|
|
||||||
<Neg,PPast2 PstImperf,PPers3,Sg> => nmekhord ;
|
|
||||||
<Neg,PPast2 PstImperf,PPers3,Pl> => nmekhord + "ند" ;
|
|
||||||
|
|
||||||
|
|
||||||
<Neg,PPast2 PstAorist,PPers1,Sg> => addN root1 + "م" ;
|
|
||||||
<Neg,PPast2 PstAorist,PPers1,Pl> => addN root1 + "یم" ;
|
|
||||||
<Neg,PPast2 PstAorist,PPers2,Sg> => addN root1 + "ی";
|
|
||||||
<Neg,PPast2 PstAorist,PPers2,Pl> => addN root1 + "ید" ;
|
|
||||||
<Neg,PPast2 PstAorist,PPers3,Sg> => addN root1 ;
|
|
||||||
<Neg,PPast2 PstAorist,PPers3,Pl> => addN root1 + "ند" ;
|
|
||||||
|
|
||||||
{-
|
|
||||||
<Neg,PFut2 FtImperf,PPers1,Sg> => nmekhah + "م" ++ addBh root2 + "م" ;
|
|
||||||
<Neg,PFut2 FtImperf,PPers1,Pl> => nmekhah + "یم" ++ addBh root2 + "یم" ;
|
|
||||||
<Neg,PFut2 FtImperf,PPers2,Sg> => nmekhah + "ی" ++ addBh root2 + "ی" ;
|
|
||||||
<Neg,PFut2 FtImperf,PPers2,Pl> => nmekhah + "ید" ++ addBh root2 + "ید" ;
|
|
||||||
<Neg,PFut2 FtImperf,PPers3,Sg> => nmekhah + "د" ++ addBh root2 + "د" ;
|
|
||||||
<Neg,PFut2 FtImperf,PPers3,Pl> => nmekhah + "ند" ++ addBh root2 + "ند" ;
|
|
||||||
-}
|
|
||||||
<Neg,PFut2 FtAorist,PPers1,Sg> => nkhah + "م" ++ root1 ;
|
|
||||||
<Neg,PFut2 FtAorist,PPers1,Pl> => nkhah + "یم" ++ root1 ;
|
|
||||||
<Neg,PFut2 Ftorist,PPers2,Sg> => nkhah + "ی" ++ root1 ;
|
|
||||||
<Neg,PFut2 FtAorist,PPers2,Pl> => nkhah + "ید" ++ root1 ;
|
|
||||||
<Neg,PFut2 FtAorist,PPers3,Sg> => nkhah + "د" ++ root1 ;
|
|
||||||
<Neg,PFut2 FtAorist,PPers3,Pl> => nkhah + "ند" ++ root1 ;
|
|
||||||
|
|
||||||
|
|
||||||
<Neg,Infr_Past2 InfrPerf,PPers1,Sg> => nkhordh ++ bvdh ++ "ام" ;
|
|
||||||
<Neg,Infr_Past2 InfrPerf,PPers1,Pl> => nkhordh ++ bvdh ++ "ایم" ;
|
|
||||||
<Neg,Infr_Past2 InfrPerf,PPers2,Sg> => nkhordh ++ bvdh ++ "ای" ;
|
|
||||||
<Neg,Infr_Past2 InfrPerf,PPers2,Pl> => nkhordh ++ bvdh ++ "اید" ;
|
|
||||||
<Neg,Infr_Past2 InfrPerf,PPers3,Sg> => nkhordh ++ bvdh ++ "است" ;
|
|
||||||
<Neg,Infr_Past2 InfrPerf,PPers3,Pl> => nkhordh ++ bvdh ++ "اند" ;
|
|
||||||
|
|
||||||
<Neg,Infr_Past2 InfrImperf,PPers1,Sg> => nmekhordh ++ "ام" ;
|
|
||||||
<Neg,Infr_Past2 InfrImperf,PPers1,Pl> => nmekhordh ++ "ایم" ;
|
|
||||||
<Neg,Infr_Past2 InfrImperf,PPers2,Sg> => nmekhordh ++ "ای" ;
|
|
||||||
<Neg,Infr_Past2 InfrImperf,PPers2,Pl> => nmekhordh ++ "اید" ;
|
|
||||||
<Neg,Infr_Past2 InfrImperf,PPers3,Sg> => nmekhordh ++ "است" ;
|
|
||||||
<Neg,Infr_Past2 InfrImperf,PPers3,Pl> => nmekhordh ++ "اند"
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
} ;
|
|
||||||
|
|
||||||
mkvVform : Str -> Number -> PPerson -> {s: Str} = \root2,n,p ->
|
|
||||||
{s =
|
|
||||||
case <n,p> of {
|
|
||||||
<Sg,PPers1> => addBh root2 + "م" ;
|
|
||||||
<Sg,PPers2> => addBh root2 + "ی" ;
|
|
||||||
<Sg,PPers3> => addBh root2 + "د" ;
|
|
||||||
<Pl,PPers1> => addBh root2 + "یم" ;
|
|
||||||
<Pl,PPers2> => addBh root2 + "ید" ;
|
|
||||||
<Pl,PPers3> => addBh root2 + "ند"
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
mkimpRoot : Str -> Str ;
|
|
||||||
mkimpRoot root =
|
|
||||||
case root of {
|
|
||||||
st + "ی" => st ;
|
|
||||||
_ => root
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
addBh : Str -> Str ;
|
|
||||||
addBh str =
|
|
||||||
case (take 1 str) of {
|
|
||||||
"ا" => "بی" + str ;
|
|
||||||
"آ" => "بیا" + (drop 1 str) ;
|
|
||||||
_ => "ب" + str
|
|
||||||
};
|
|
||||||
|
|
||||||
---------------------
|
|
||||||
--Determiners
|
|
||||||
--------------------
|
|
||||||
|
|
||||||
makeDet : Str -> Number -> Bool -> {s: Str ; n : Number ; isNum : Bool ; fromPron : Bool} =\str,n,b -> {
|
|
||||||
s = str;
|
|
||||||
isNum = b;
|
|
||||||
fromPron = False ;
|
|
||||||
n = n
|
|
||||||
};
|
|
||||||
makeQuant : Str -> Str -> {s : Number => Str ; a : AgrPes ; fromPron : Bool } = \sg,pl -> {
|
|
||||||
s = table {Sg => sg ; Pl => pl} ;
|
|
||||||
fromPron = False ;
|
|
||||||
a = agrPesP3 Sg
|
|
||||||
};
|
|
||||||
---------------------------
|
---------------------------
|
||||||
-- Adjectives
|
-- Adjectives
|
||||||
--------------------------
|
--------------------------
|
||||||
mkAdj : Str -> Str -> Adjective = \adj,adv -> {
|
Adjective : Type = {
|
||||||
s = table { bEzafa => adj;
|
s : Mod => Str ;
|
||||||
aEzafa => mkEzafa adj ;
|
adv : Str ;
|
||||||
enClic => mkEnclic adj
|
isPre : Bool
|
||||||
} ;
|
} ;
|
||||||
adv = adv
|
|
||||||
};
|
mkAdj : Str -> Str -> Adjective = \adj,adv -> {
|
||||||
|
s = table { Bare => adj;
|
||||||
|
Ezafe => mkEzafe adj ;
|
||||||
|
Clitic => mkEnclic adj ;
|
||||||
|
Poss => mkPossStem adj
|
||||||
|
} ;
|
||||||
|
adv = adv ; isPre = False
|
||||||
|
};
|
||||||
|
|
||||||
|
------------------------------------------------------------------
|
||||||
|
-- Verbs
|
||||||
|
------------------------------------------------------------------
|
||||||
|
param
|
||||||
|
VerbForm = Inf -- kardan
|
||||||
|
| PastStem -- kard -- Also used for future stem
|
||||||
|
| PresStem -- kon -- Also imperative stem
|
||||||
|
| PerfStem -- kardeh -- Perfect, pluperfect
|
||||||
|
| PastPart -- konandeh
|
||||||
|
| ImpPrefix Polarity -- mi/nmi, except for be and have
|
||||||
|
| VAor Polarity Agr -- konam
|
||||||
|
| VPerf Polarity Agr -- kardeh am/nkardeh am
|
||||||
|
| VPast Polarity Agr -- kardam/nkardam
|
||||||
|
| VSubj Polarity Agr -- bekonam/nakonam
|
||||||
|
| VImp Polarity Number -- bekon,bekonid/nakon,nakonid
|
||||||
|
;
|
||||||
|
|
||||||
|
oper
|
||||||
|
impRoot : Str -> Str = \root -> case root of {
|
||||||
|
st + "ی" => st ;
|
||||||
|
_ => root
|
||||||
|
};
|
||||||
|
|
||||||
|
mkVerb : (inf,pres : Str) -> Verb = \kardan,kon -> {
|
||||||
|
s = table {
|
||||||
|
Inf => kardan ;
|
||||||
|
PastStem => kard ;
|
||||||
|
PresStem => kon ;
|
||||||
|
PerfStem => kardeh ;
|
||||||
|
PastPart => kon + "نده" ;
|
||||||
|
ImpPrefix Pos => "می" + ZWNJ ++ BIND ;
|
||||||
|
ImpPrefix Neg => "نمی" + ZWNJ ++ BIND ;
|
||||||
|
VAor _ agr => imperfectSuffixD agr kon ; -- for reg verbs, negation comes from prefix
|
||||||
|
VPerf pol agr => perfectSuffix agr (addN pol kardeh) ;
|
||||||
|
VPast pol agr => imperfectSuffix agr (addN pol kard) ;
|
||||||
|
VSubj Pos agr => addBh (imperfectSuffixD agr kon) ;
|
||||||
|
VSubj Neg agr => addN (imperfectSuffixD agr kon) ;
|
||||||
|
VImp Pos Sg => addBh imp ;
|
||||||
|
VImp Pos Pl => addBh imp + "ید" ;
|
||||||
|
VImp Neg Sg => addN imp ;
|
||||||
|
VImp Neg Pl => addN imp + "ید" } ;
|
||||||
|
prefix = [] -- For compound verbs
|
||||||
|
} where {
|
||||||
|
kard = tk 1 kardan ;
|
||||||
|
kardeh = kard + "ه" ;
|
||||||
|
imp = impRoot kon ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
invarV : (inv : Str) -> Verb = \s -> -- truly invariable
|
||||||
|
let invReg = defectiveVerb s s s in invReg **
|
||||||
|
{s = table {ImpPrefix p => invReg.s ! ImpPrefix p ; _ => s}} ;
|
||||||
|
|
||||||
|
defectiveVerb : (inf,pres,past : Str) -> Verb = \bayestan,bayad,bayest ->
|
||||||
|
let invReg = mkVerb bayestan bayad in invReg **
|
||||||
|
{s = \\vf => case vf of {
|
||||||
|
ImpPrefix _ => [] ;
|
||||||
|
VAor pol _ => addN pol bayad ;
|
||||||
|
VImp pol _ => addN pol bayad ;
|
||||||
|
VSubj pol _ => addN pol bayad ;
|
||||||
|
VPast pol _ => addN pol bayest ;
|
||||||
|
VPerf pol _ => addN pol bayest ;
|
||||||
|
_ => invReg.s ! vf }
|
||||||
|
} ;
|
||||||
|
--
|
||||||
|
oper
|
||||||
|
Verb = {s : VerbForm => Str ; prefix : Str} ;
|
||||||
|
|
||||||
|
-- Verbs that end in یدن, ادن or ودن
|
||||||
|
-- Also some verbs that don't: دانستن with stem دان
|
||||||
|
mkVerb1 : (_: Str) -> Verb = \inf -> mkVerb inf (tk 3 inf) ;
|
||||||
|
|
||||||
|
-- Most verbs that end in C+تن or C+دن
|
||||||
|
mkVerb2 : (_: Str) -> Verb = \inf -> mkVerb inf (tk 2 inf) ;
|
||||||
|
|
||||||
|
-------------------
|
||||||
|
-- making negatives
|
||||||
|
-------------------
|
||||||
|
addN = overload {
|
||||||
|
addN : Str -> Str = addN' ;
|
||||||
|
addN : Polarity -> Str -> Str = \p,s ->
|
||||||
|
case p of {Pos => s ; Neg => addN' s}
|
||||||
|
} ;
|
||||||
|
|
||||||
|
addN' : Str -> Str = \str ->
|
||||||
|
case str of {
|
||||||
|
"ا" + st => "نی" + str ;
|
||||||
|
"آ" + st => "نیا" + st ;
|
||||||
|
_ => "ن" + str } ;
|
||||||
|
|
||||||
|
addBh : Str -> Str ;
|
||||||
|
addBh str =
|
||||||
|
case str of {
|
||||||
|
"ا" + st => "بی" + str ;
|
||||||
|
"آ" + st => "بیا" + st ;
|
||||||
|
_ => "ب" + str
|
||||||
|
};
|
||||||
|
|
||||||
|
-- TODO: is this needed anywhere? what does it do? /IL
|
||||||
|
addBh2 : Str -> Str ; -- should use drop instead but it gives linking error
|
||||||
|
addBh2 str1 =
|
||||||
|
case str1 of {
|
||||||
|
"می" + str =>
|
||||||
|
case str of {
|
||||||
|
"ا" + st => Prelude.glue "بی" str ;
|
||||||
|
"آ" + st => Prelude.glue "بیا" st ;
|
||||||
|
_ => Prelude.glue "ب" str
|
||||||
|
};
|
||||||
|
_ => "" -- ????
|
||||||
|
};
|
||||||
|
|
||||||
|
-------------------
|
||||||
|
-- Common suffixes
|
||||||
|
-------------------
|
||||||
|
imperfectSuffix : Agr -> Str -> Str = \ag,s -> s +
|
||||||
|
case ag of {
|
||||||
|
Ag Sg P1 => "م" ;
|
||||||
|
Ag Sg P2 => "ی" ;
|
||||||
|
Ag Sg P3 => [] ;
|
||||||
|
Ag Pl P1 => "یم" ;
|
||||||
|
Ag Pl P2 => "ید" ;
|
||||||
|
Ag Pl P3 => "ند" } ;
|
||||||
|
|
||||||
|
imperfectSuffixD : Agr -> Str -> Str = \ag,s ->
|
||||||
|
case ag of {
|
||||||
|
Ag Sg P3 => s + "د" ;
|
||||||
|
_ => imperfectSuffix ag s } ;
|
||||||
|
|
||||||
|
perfectSuffix : Agr -> Str -> Str = \ag,s ->
|
||||||
|
case ag of {
|
||||||
|
Ag Sg P1 => zwnj s "ام" ;
|
||||||
|
Ag Sg P2 => zwnj s "ای" ;
|
||||||
|
Ag Sg P3 => s ++ "است" ; -- no ZWNJ
|
||||||
|
Ag Pl P1 => zwnj s "ایم" ;
|
||||||
|
Ag Pl P2 => zwnj s "اید" ;
|
||||||
|
Ag Pl P3 => zwnj s "اند" } ;
|
||||||
|
|
||||||
|
pluperfAux : Polarity -> Agr -> Str = \pol,agr ->
|
||||||
|
addN pol (imperfectSuffix agr "بود") ;
|
||||||
|
|
||||||
|
futAux : Polarity -> Agr -> Str = \pol,agr ->
|
||||||
|
addN pol (imperfectSuffixD agr "خواه") ;
|
||||||
|
|
||||||
|
subjAux : Polarity -> Agr -> Str = \pol,agr ->
|
||||||
|
addN pol (imperfectSuffixD agr "باش") ;
|
||||||
|
----------------------------------
|
||||||
|
-- Irregular verbs
|
||||||
|
----------------------------------
|
||||||
|
|
||||||
|
haveVerb : Verb = haveRegV ** {s = table {
|
||||||
|
ImpPrefix _ => [] ;
|
||||||
|
vf => haveRegV.s ! vf }
|
||||||
|
} where { haveRegV = mkVerb "داشتن" "دار" } ;
|
||||||
|
|
||||||
|
beVerb : Verb = beRegV ** {s = table {
|
||||||
|
ImpPrefix _ => [] ;
|
||||||
|
VAor Pos (Ag Sg P3) => "است" ;
|
||||||
|
VAor Pos agr => imperfectSuffix agr "هست" ;
|
||||||
|
VAor Neg agr => imperfectSuffix agr "نیست" ;
|
||||||
|
VSubj pol agr => addN pol (imperfectSuffixD agr "باش") ;
|
||||||
|
VImp Pos Sg => "باش" ;
|
||||||
|
VImp Pos Pl => "باشید" ;
|
||||||
|
VImp Neg Sg => "نباش" ;
|
||||||
|
VImp Neg Pl => "نباشید" ;
|
||||||
|
vf => beRegV.s ! vf }
|
||||||
|
} where { beRegV = mkVerb "بودن" "باش" } ;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -3,138 +3,147 @@ concrete NounPes of Noun = CatPes ** open ResPes, Prelude in {
|
|||||||
flags optimize=all_subs ;
|
flags optimize=all_subs ;
|
||||||
|
|
||||||
lin
|
lin
|
||||||
DetCN det cn = {
|
DetCN det cn = emptyNP ** cn ** {
|
||||||
s = \\_ => case <det.isNum,det.fromPron> of {
|
s = \\m =>
|
||||||
<False,True> => cn.s ! aEzafa ! det.n ++ det.s ; -- det.n ;
|
let num : Number = case det.isNum of {
|
||||||
<False,False> => det.s ++ cn.s ! bEzafa ! det.n ; -- det.n ;
|
True => Sg ; -- noun modified by a number is invariably singular
|
||||||
<True,True> => cn.s ! aEzafa ! Sg ++ det.s ;
|
False => det.n } ;
|
||||||
<True,False> => det.s ++ cn.s ! bEzafa ! Sg
|
mod : Mod = case <cn.isCmpd,det.mod> of {
|
||||||
};
|
<IsCmpd,Poss> => Ezafe ; -- If CN is compound and Det is poss.pron, don't use poss.suff but Ezafe and full form of pronoun
|
||||||
a = agrPesP3 det.n ;
|
_ => det.mod } ;
|
||||||
animacy = cn.animacy
|
detStr : Str = case cn.isCmpd of {
|
||||||
|
NotCmpd => det.s ; -- possessive suffix
|
||||||
|
IsCmpd => det.sp } ; -- full form
|
||||||
|
in case mod of {
|
||||||
|
Bare => detStr ++ cn.s ! num ! m ++ cn.compl ! det.n ; -- det doesn't require a special form, keep the Mod=>Str table
|
||||||
|
x => cn.s ! num ! x ++ detStr ++ cn.compl ! det.n } ; -- det requires a special form
|
||||||
|
a = agrP3 det.n
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
UsePN pn = {s = \\_ => pn.s ; a = agrPesP3 Sg ; animacy = pn.animacy } ;
|
UsePN pn = emptyNP ** pn ** {s = \\_ => pn.s} ;
|
||||||
UsePron p = {s = \\_ => p.s ; a = p.a ; animacy = Animate} ;
|
UsePron p = emptyNP ** p ** {s = \\_ => p.s ; animacy = Animate} ;
|
||||||
|
|
||||||
PredetNP pred np = {
|
PredetNP pred np = np ** {
|
||||||
s = \\ez => pred.s ++ np.s ! ez ;
|
s = \\ez => pred.s ++ np.s ! ez
|
||||||
a = np.a;
|
|
||||||
animacy = np.animacy
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
PPartNP np v2 = {
|
PPartNP np v2 = np ** {
|
||||||
s = \\ez => np.s ! ez ++ partNP (v2.s ! Root1) ;
|
s = \\ez => np.s ! ez ++ partNP v2
|
||||||
a = np.a ;
|
|
||||||
animacy = np.animacy
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
RelNP np rs = {
|
RelNP np rs = np ** {
|
||||||
s = \\ez => np.s ! ez ++ rs.s ! np.a ;
|
s = \\m => case np.relpron of {
|
||||||
a = np.a ;
|
Ance => np.empty ++ rs2str np.relpron np.a rs ;
|
||||||
animacy = np.animacy
|
Ke => np.s ! Clitic ++ rs2str np.relpron np.a rs }
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
AdvNP np adv = {
|
AdvNP np adv = np ** {
|
||||||
s = \\ez => np.s ! NPC aEzafa ++ adv.s ;
|
s = \\ez => np.s ! Ezafe ++ adv.s
|
||||||
a = np.a ;
|
|
||||||
animacy = np.animacy
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
DetQuantOrd quant num ord = {
|
DetQuantOrd quant num ord = {
|
||||||
s = quant.s ! num.n ++ num.s ++ ord.s ;
|
s = quant.s ! num.n ! NotCmpd ++ num.s ++ ord.s ;
|
||||||
isNum = True;
|
sp = quant.s ! num.n ! IsCmpd ++ num.s ++ ord.s ; -- only matters for PossPron
|
||||||
fromPron = quant.fromPron ;
|
isNum = orB num.isNum ord.isNum ;
|
||||||
|
mod = quant.mod ;
|
||||||
n = num.n
|
n = num.n
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
DetQuant quant num = {
|
DetQuant quant num = {
|
||||||
s = quant.s ! num.n ++ num.s;
|
s = quant.s ! num.n ! NotCmpd ++ num.s ;
|
||||||
isNum = True ; -- this does not work in case of 'these women' but works in case of 'five women'
|
sp = quant.s ! num.n ! IsCmpd ++ num.s ; -- only matters for PossPron
|
||||||
fromPron = quant.fromPron ;
|
isNum = num.isNum;
|
||||||
n = num.n
|
mod = quant.mod ;
|
||||||
|
n = num.n
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
DetNP det = {
|
DetNP det = emptyNP ** {
|
||||||
s = \\_ => det.s ; ---- case
|
s = \\_ => det.sp ;
|
||||||
a = agrPesP3 det.n ;
|
a = agrP3 det.n ;
|
||||||
animacy = Inanimate
|
hasAdj = False ;
|
||||||
|
animacy = Inanimate ;
|
||||||
|
relpron = Ance -- TODO check if this works for all Dets
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
PossPron p = {s = \\_ => p.ps ; a = p.a ; fromPron = True} ;
|
PossPron p = {
|
||||||
|
s = \\_ => table {
|
||||||
|
NotCmpd => BIND ++ p.ps ;
|
||||||
|
IsCmpd => p.s } ; -- is a compound
|
||||||
|
a = p.a ;
|
||||||
|
mod = Poss} ; -- is changed into Ezafe in DetCN, if the CN is compound
|
||||||
|
|
||||||
NumSg = {s = [] ; n = Sg} ;
|
NumSg = {s = [] ; n = Sg ; isNum = False} ;
|
||||||
NumPl = {s = [] ; n = Pl} ;
|
NumPl = {s = [] ; n = Pl ; isNum = False} ;
|
||||||
-- from here
|
-- from here
|
||||||
NumCard n = n ** {hasCard = True} ;
|
NumCard n = n ** {isNum = True} ;
|
||||||
|
|
||||||
NumDigits n = {s = n.s ! NCard ; n = n.n} ;
|
NumDigits n = n ** {s = n.s ! NCard; isNum = True} ;
|
||||||
OrdDigits n = {s = n.s ! NOrd; n = n.n} ;
|
OrdDigits n = n ** {s = n.s ! NOrd ; isNum = True ; isPre=False} ;
|
||||||
|
|
||||||
NumNumeral numeral = {s = numeral.s ! NCard; n = numeral.n} ;
|
NumNumeral n = n ** {s = n.s ! NCard; isNum = True} ;
|
||||||
OrdNumeral numeral = {s = numeral.s ! NOrd ; n = numeral.n} ;
|
OrdNumeral n = n ** {s = n.s ! NOrd ; isNum = True ; isPre=False} ;
|
||||||
-- to here
|
-- to here
|
||||||
AdNum adn num = {s = adn.s ++ num.s ; n = num.n} ;
|
AdNum adn num = num ** {s = adn.s ++ num.s} ;
|
||||||
|
|
||||||
OrdSuperl a = {s = a.s ! bEzafa ++ taryn; n = Sg} ; -- check the form of adjective
|
OrdSuperl a = {s = a.s ! Bare ++ taryn; n = Sg ; isNum=False ; isPre = True} ; -- check the form of adjective
|
||||||
|
|
||||||
DefArt = {s = \\_ => [] ; a = defaultAgrPes ; fromPron = False} ;
|
DefArt = {s = \\_,_ => [] ; mod = Bare} ;
|
||||||
IndefArt = {s = table { Sg => IndefArticle ; Pl => []} ; a =defaultAgrPes ; fromPron = False} ;
|
IndefArt = {s = table {Sg => \\_ => IndefArticle ; Pl => \\_ => []} ; mod = Bare} ;
|
||||||
|
|
||||||
MassNP cn = {s =\\c => case c of {
|
MassNP cn = emptyNP ** cn ** {
|
||||||
NPC bEzafa => cn.s ! bEzafa ! Sg ;
|
s = \\m => cn.s ! Sg ! m ++ cn.compl ! Sg ;
|
||||||
NPC aEzafa => cn.s ! aEzafa ! Sg ;
|
a = agrP3 Sg ;
|
||||||
NPC enClic => cn.s ! enClic ! Sg
|
|
||||||
};
|
|
||||||
a = agrPesP3 Sg ;
|
|
||||||
animacy = cn.animacy
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
UseN n = n ;
|
UseN,
|
||||||
UseN2 n = n ;
|
UseN2 = useN ;
|
||||||
|
|
||||||
Use2N3 f = {
|
Use2N3 n3 = useN n3 ** {
|
||||||
s = f.s;
|
c2 = n3.c2 ;
|
||||||
c = f.c2;
|
compl = []
|
||||||
animacy = f.animacy;
|
|
||||||
definitness = True
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
Use3N3 f = {
|
Use3N3 n3 = useN n3 ** {
|
||||||
s = f.s ;
|
c2 = n3.c3 ;
|
||||||
c = f.c3;
|
compl = []
|
||||||
animacy = f.animacy;
|
|
||||||
definitness = True
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
ComplN2 f x = {
|
ComplN2 n2 np = n2 ** {
|
||||||
s = \\ez,n => f.s ! ez ! n ++ f.c ++ x.s ! NPC ez ;
|
s = \\n,m => n2.s ! n ! Ezafe ;
|
||||||
animacy = f.animacy;
|
compl = \\_ => n2.compl ++ n2.c2 ++ np2str np ;
|
||||||
definitness = True
|
hasAdj = False
|
||||||
};
|
};
|
||||||
ComplN3 f x = {
|
|
||||||
s = \\ez,n => f.s ! ez ! n ++ f.c2 ++ x.s ! NPC ez ;
|
ComplN3 n3 np = n3 ** {
|
||||||
c = f.c3;
|
s = \\n,m => n3.s ! n ! Ezafe ;
|
||||||
animacy = f.animacy;
|
compl = n3.c2 ++ np2str np ;
|
||||||
definitness = True;
|
c = n3.c3;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
AdjCN ap cn = {
|
AdjCN ap cn = cn ** {
|
||||||
s = \\ez,n => cn.s ! aEzafa ! n ++ ap.s ! ez; -- check the form of adjective and also cn.s!ez!n changed from cn.s!aEzafa!n to have correct enclicitic form other wise it creats wrong enclictic form of old man
|
s = \\n,m => case ap.isPre of {
|
||||||
animacy = cn.animacy ;
|
True => ap.s ! Bare ++ cn.s ! n ! m ; -- TODO check mod of ap
|
||||||
definitness = cn.definitness
|
False => cn.s ! n ! Ezafe ++ ap.s ! m } ;
|
||||||
|
hasAdj = True
|
||||||
|
} ;
|
||||||
|
|
||||||
|
RelCN cn rs = cn ** {
|
||||||
|
s = \\n,ez => cn.s ! n ! Clitic ;
|
||||||
|
compl = \\n => cn.compl ! n ++ rs2str Ke (agrP3 n) rs ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
RelCN cn rs = {
|
AdvCN cn ad = cn ** {
|
||||||
s = \\ez,n => cn.s ! enClic ! n ++ rs.s ! agrPesP3 n ;
|
s = \\n,m => cn.s ! n ! Ezafe ;
|
||||||
animacy = cn.animacy ;
|
compl = \\n => cn.compl ! n ++ ad.s} ;
|
||||||
definitness = cn.definitness
|
|
||||||
} ;
|
|
||||||
|
|
||||||
AdvCN cn ad = {s = \\ez,n => cn.s ! aEzafa ! n ++ ad.s ; animacy = cn.animacy ; definitness = cn.definitness} ;
|
SentCN cn sc = cn ** {compl = \\n => cn.compl ! n ++ sc.s} ;
|
||||||
|
|
||||||
SentCN cn sc = {s = \\ez,n => cn.s ! ez ! n ++ sc.s ; animacy = cn.animacy ; definitness = cn.definitness} ;
|
-- correct for /city Paris/, incorrect for /king John/
|
||||||
|
-- ApposNP in ExtendPes works for /king John/ (no ezafe).
|
||||||
ApposCN cn np = {s = \\ez,n => cn.s ! ez ! n ++ np.s ! NPC aEzafa ; animacy = cn.animacy ; definitness = True} ; -- ezafa form of city to be used
|
ApposCN cn np = cn ** {s = \\n,m => cn.s ! n ! Ezafe ++ np.s ! m} ;
|
||||||
|
|
||||||
|
-- : CN -> NP -> CN ; -- house of Paris, house of mine
|
||||||
|
PossNP cn np = cn ** {
|
||||||
|
s = \\n,m => cn.s ! n ! Ezafe ; -- TODO or here for "<house of mine> <on the hill>"
|
||||||
|
compl = \\n => cn.compl ! n ++ np2str np } ; -- "<house> <on the hill of mine>"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
--# -path=.:../abstract:../../prelude:../common
|
--# -path=.:../abstract:../prelude:../common
|
||||||
--
|
--
|
||||||
----1 Pnbu Lexical Paradigms
|
----1 Persian Lexical Paradigms
|
||||||
|
|
||||||
resource ParadigmsPes = open
|
resource ParadigmsPes = open
|
||||||
Predef,
|
Predef,
|
||||||
Prelude,
|
Prelude,
|
||||||
MorphoPes,
|
ResPes,
|
||||||
|
(M=MorphoPes),
|
||||||
CatPes
|
CatPes
|
||||||
in {
|
in {
|
||||||
|
|
||||||
@@ -15,124 +16,176 @@ resource ParadigmsPes = open
|
|||||||
--2 Parameters
|
--2 Parameters
|
||||||
|
|
||||||
oper
|
oper
|
||||||
animate : Animacy ;
|
Animacy : Type ; -- Argument to mkN
|
||||||
inanimate : Animacy ;
|
human : Animacy ; -- e.g. /mkN "خواهر" human/ to get the plural خواهران.
|
||||||
singular : Number;
|
nonhuman : Animacy ; -- default animacy for mkN, not needed unless you want to make the animacy explicit or force a plural with ها.
|
||||||
plural : Number;
|
|
||||||
|
|
||||||
singular = Sg ; plural = Pl;
|
Number : Type ; -- Argument to mkDet and mkConj
|
||||||
|
singular : Number ; -- e.g. mkConj "یا" singular
|
||||||
|
plural : Number ; -- e.g. mkConj "و" plural
|
||||||
|
|
||||||
animate = Animate ; inanimate = Inanimate ; --i
|
VVForm : Type ; -- Argument to mkVV
|
||||||
mkN01 : Str -> Animacy -> Noun ;
|
subjunctive : VVForm ; -- The verbal complement of VV is in subjunctive
|
||||||
mkN01 str ani = mkN str (str ++ "ها") ani;
|
indicative : VVForm ; -- The verbal complement of VV is in indicative
|
||||||
mkN02 : Str -> Animacy -> Noun ;
|
|
||||||
mkN02 str ani = case (last str) of {
|
|
||||||
"ه" => mkN str ((init str) + "گان") ani ;
|
|
||||||
("ا"|"و") => mkN str (str + "یان") ani ;
|
|
||||||
_ => mkN str (str+"ان") ani
|
|
||||||
};
|
|
||||||
{-
|
|
||||||
|
|
||||||
|
Mod : Type ; -- Argument to mkDet and mkPrep
|
||||||
|
ezafe : Mod ; -- e.g. mkPrep "برای" ezafe
|
||||||
|
-- poss : Mod ; -- TODO is this needed?
|
||||||
|
--clitic : Mod ; -- TODO is this needed?
|
||||||
--2 Nouns
|
--2 Nouns
|
||||||
|
|
||||||
|
mkN : overload {
|
||||||
|
mkN : (sg : Str) -> N ; -- Takes singular form, returns a nonhuman noun with ها as the plural form.
|
||||||
|
mkN : (sg : Str) -> Animacy -> N ; -- Takes singular form and animacy. Nonhuman plural ها. Human plural ان or an allomorph of it (یان or گان) depending on the singular form.
|
||||||
|
mkN : (sg,pl : Str) -> Animacy -> N ; -- Worst-case constructor: takes singular, plural and animacy. Use for loanwords with Arabic plural, human plurals with ها and nonhuman plurals with ان or its allomorphs.
|
||||||
|
mkN : (possStem : Str) -> N -> N -- Noun with an unexpected possessive stem, e.g. مه where ه is a consonant, not vowel.
|
||||||
|
} ;
|
||||||
|
|
||||||
mkN2 : N -> Prep -> Str -> N2;
|
mkN2 : overload {
|
||||||
mkN2 = \n,p,c -> n ** {lock_N2 = <> ; c2 = p.s ; c3 = c } ;
|
mkN2 : (key : N) -> (to : Str) -> N2 -- Takes a noun and a complementiser, returns a N2.
|
||||||
|
} ;
|
||||||
|
|
||||||
|
mkN3 : overload {
|
||||||
|
mkN3 : (distance : N) -> (from,to : Str) -> N3 -- Takes a noun and two complementisers, returns a N3.
|
||||||
|
} ;
|
||||||
|
|
||||||
mkN3 : N -> Prep -> Str -> Str-> N3 ;
|
|
||||||
mkN3 = \n,p,q,r -> n ** {lock_N3 = <> ; c2 = p.s ; c3 = q ; c4 = r} ;
|
|
||||||
-}
|
|
||||||
-- Compound Nouns
|
-- Compound Nouns
|
||||||
|
|
||||||
mkCmpdNoun1 : Str -> N -> N
|
cmpdN = overload {
|
||||||
= \s,noun -> {s =\\ez,n => s ++ noun.s ! ez ! n ; animacy = noun.animacy ; definitness = noun.definitness ; lock_N = <>};
|
cmpdN : Str -> N -> N -- Compound noun with an invariable modifier /before/ the head. NB. no ezāfe.
|
||||||
mkCmpdNoun2 : N -> Str -> N
|
= mkCmpdNoun1 ; -- e.g. تخم مرغ 'chicken /egg/'
|
||||||
= \noun,s -> {s =\\ez,n => noun.s ! ez ! n ++ s ; animacy = noun.animacy ; definitness =noun.definitness ; lock_N = <>};
|
cmpdN : N -> Str -> N -- Compound noun with an invariable modifier /after/ the head. NB. no ezāfe.
|
||||||
|
= mkCmpdNoun2 ; -- e.g. مأمور پلیس '/officer/ police'.
|
||||||
|
cmpdN : N -> N -> N -- Compound noun with ezafe (Nی N)
|
||||||
|
= \n1,n2 -> n1 ** {
|
||||||
|
s = \\n,m => n1.s ! n ! Ezafe ++ n2.s ! n ! m ;
|
||||||
|
isCmpd = IsCmpd} ;
|
||||||
|
} ;
|
||||||
|
|
||||||
-- Proper names
|
-- Proper names
|
||||||
mkPN : Str -> Animacy -> PN =
|
mkPN : Str -> Animacy -> PN -- Proper noun with given animacy
|
||||||
|
= \str,ani -> lin PN {s = str ; animacy = ani} ;
|
||||||
|
|
||||||
\str,ani -> {s = str ; animacy = ani ; lock_PN = <>} ;
|
|
||||||
|
|
||||||
|
|
||||||
-- Personal Pronouns
|
|
||||||
personalPN : Str -> Number -> PPerson -> Pron =
|
|
||||||
\str,nn,p -> {s = str ; a = AgPes nn p ; ps = str ; lock_Pron = <>};
|
|
||||||
{-
|
|
||||||
-- Demonstration Pronouns
|
|
||||||
demoPN : Str -> Str -> Str -> Quant =
|
|
||||||
\s1,s2,s3 -> let n = makeDemonPronForm s1 s2 s3 in {s = n.s ; a = defaultAgr ; lock_Quant = <>};
|
|
||||||
-- Determiner
|
-- Determiner
|
||||||
-}
|
|
||||||
mkDet = overload {
|
mkDet = overload {
|
||||||
mkDet : Str -> Number -> Det =
|
mkDet : Str -> Number -> Det -- Takes a string, number (sg/pl) and returns a det which is not a numeral
|
||||||
\s1,n -> makeDet s1 n False ** { lock_Det = <>};
|
= \s,n -> lin Det (makeDet s n False);
|
||||||
mkDet : Str -> Number -> Bool -> Det =
|
mkDet : Str -> Number -> Bool -> Det -- As above + a Boolean for whether the det is a numeral
|
||||||
\s1,n,b -> makeDet s1 n b ** { lock_Det = <>};
|
= \s,n,b -> lin Det (makeDet s n b) ;
|
||||||
};
|
mkDet : Str -> Number -> Bool -> Mod -> Det -- As above + Mod for which form the determiner expects its argument to be (default bare)
|
||||||
|
= \s,n,b,m -> lin Det (makeDet s n b ** {mod=m})
|
||||||
|
};
|
||||||
|
|
||||||
{-
|
{-
|
||||||
-- Intergative pronouns
|
|
||||||
mkIP : (x1,x2,x3,x4:Str) -> Number -> Gender -> IP =
|
|
||||||
\s1,s2,s3,s4,n,g -> let p = mkIntPronForm s1 s2 s3 s4 in { s = p.s ; n = n ; g = g ; lock_IP = <>};
|
|
||||||
|
|
||||||
-- AdN
|
-- AdN
|
||||||
mkAdN : Str -> AdN = \s -> ss s ;
|
mkAdN : Str -> AdN = \s -> ss s ;
|
||||||
-}
|
-}
|
||||||
--2 Adjectives
|
--2 Adjectives
|
||||||
|
|
||||||
mkA = overload {
|
mkA : overload {
|
||||||
mkA : Str-> A
|
mkA : Str -> A ; -- Regular adjective, same form for adjective and adverb.
|
||||||
= \str -> mkAdj str str ** { lock_A = <>} ;
|
mkA : (adj,adv : Str) -> A -- Different forms for adjective and adverb.
|
||||||
mkA : Str-> Str -> A
|
} ;
|
||||||
= \str,adv -> mkAdj str adv ** { lock_A = <>} ;
|
|
||||||
mkA : Str -> Str -> A2
|
mkA2 : (married,to : Str) -> A2 -- Takes string and complementiser, returns A2.
|
||||||
= \a,c -> mkAdj a a ** { c2 = c ; lock_A2 = <>} ;
|
= \a,c -> lin A2 (mkAdj a a ** {c2 = c}) ;
|
||||||
} ;
|
|
||||||
|
|
||||||
--2 Verbs
|
--2 Verbs
|
||||||
mkV : Str -> Str -> V
|
mkV = overload {
|
||||||
= \s1, s2 -> mkVerb s1 s2 ** {lock_V = <>} ;
|
mkV : (inf : Str) -> V -- Takes infinitive. Use for predictable verbs: if it ends in vowel+دن, the present stem removes the vowel as well. If it ends in consonant+تن or consonant+دن, present stem only removes تن/دن.
|
||||||
-- mkVerb takes both the Infinitive and the present root(root2) and is applied for iregular verbs
|
= regV ;
|
||||||
haveVerb : V = mkHave ;
|
mkV : (inf,pres : Str) -> V -- Takes infinitive and present root. Use for unpredictable verbs, e.g. دانستن with present stem دان, or irregular, e.g. کردن with present stem کن.
|
||||||
mkV_1 : Str -> V
|
= \s1, s2 -> lin V (mkVerb s1 s2) ;
|
||||||
= \s -> mkVerb1 s ** {lock_V = <>} ;
|
mkV : Str -> V -> V -- Invariable prefix to a verb, e.g. mkV "دوست" haveVerb
|
||||||
|
= compoundV ;
|
||||||
|
} ;
|
||||||
|
|
||||||
mkV_2 : Str -> V
|
|
||||||
= \s -> mkVerb2 s ** {lock_V = <>} ;
|
|
||||||
|
|
||||||
mkV2 = overload {
|
invarV : Str -> V -- no inflection at all
|
||||||
-- mkV2 : Str -> V2
|
= \s -> lin V (M.invarV s);
|
||||||
-- = \s -> mkV s ** {c2 = {s = [] ; c = VTrans} ; lock_V2 = <>} ;
|
defV : (inf,pres,past : Str) -> V -- no personal forms, but past/present difference, like بایستن ('must'),
|
||||||
mkV2 : V -> V2
|
= \i,pr,pa -> lin V (M.defectiveVerb i pr pa) ;
|
||||||
= \v -> v ** {c2 = {s = [] ; ra = [] ; c = VTrans} ; lock_V2 = <>} ;
|
|
||||||
mkV2 : V -> Str -> V2
|
haveVerb : V -- The verb "have", to be used for light verb constructions: e.g. compoundV "دوست" haveVerb. NB. this has different imperative and VV forms from StructuralPes.have_V2.
|
||||||
= \v,ra -> v ** {c2 = {ra = ra ; s = [] ; c = VTrans} ; lock_V2 = <>} ;
|
= lin V M.haveVerb ;
|
||||||
mkV2 : V -> Str -> Bool -> V2
|
beVerb : V -- The verb "be", to be used for light verb constructions: e.g. compoundV "عاشق" beVerb.
|
||||||
= \v,p,b -> v ** {c2 = {ra = [] ; s = p ; c = VTrans} ; lock_V2 = <>} ;
|
= lin V M.beVerb ;
|
||||||
|
|
||||||
|
mkV2 : overload {
|
||||||
|
mkV2 : Str -> V2 ; -- Predictable V2 out of string. No preposition, را for direct object.
|
||||||
|
mkV2 : V -> V2 ; -- V2 out of V. No preposition, را for direct object.
|
||||||
|
mkV2 : (listen : V) -> (to : Prep) -> V2 -- V2 out of V. Use given preposition, no را for direct object.
|
||||||
|
} ;
|
||||||
|
|
||||||
|
mkV3 = overload {
|
||||||
|
mkV3 : Str -> V3 -- Predictable V3, را for direct object, no prepositions.
|
||||||
|
= \s -> lin V3 (regV s ** {c2 = prepOrRa "را" ; c3 = prepOrRa []}) ;
|
||||||
|
mkV3 : V -> (dir,indir : Str) -> V3 -- Takes a verb and two prepositions or را as strings (can be empty).
|
||||||
|
= \v,p,q -> lin V3 (v ** {c2 = prepOrRa p ; c3 = prepOrRa q}) ;
|
||||||
|
mkV3 : V -> (dir,indir : Prep) -> V3 -- Takes a verb and two prepositions
|
||||||
|
= \v,p,q -> lin V3 (v ** {c2 = p ; c3 = q})
|
||||||
|
} ;
|
||||||
|
|
||||||
|
mkVQ = overload {
|
||||||
|
mkVQ : Str -> VQ -- predictable verb with question complement
|
||||||
|
= \s -> lin VQ (regV s) ;
|
||||||
|
mkVQ : V -> VQ -- VQ out of a verb
|
||||||
|
= \v -> lin VQ v
|
||||||
|
} ;
|
||||||
|
|
||||||
|
mkVA = overload {
|
||||||
|
mkVA : Str -> VA -- predictable verb with adjective complement
|
||||||
|
= \s -> lin VA (regV s ** {c2 = prepOrRa []}) ;
|
||||||
|
mkVA : V -> VA -- VA out of a verb
|
||||||
|
= \v -> lin VA (v ** {c2 = prepOrRa []}) ;
|
||||||
|
mkVA : V -> Prep -> VA -- VA out of a verb and preposition
|
||||||
|
= \v,p -> lin VA (v ** {c2 = p}) ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
mkV3 : V -> Str -> Str -> V3;
|
mkVS = overload {
|
||||||
mkV3 v p q = v ** { c2 = p ; c3 = q ; lock_V3 = <>} ;
|
mkVS : Str -> VS -- predictable verb with sentence complement
|
||||||
mkV2V : V -> Str -> Str -> Bool -> V2V ;
|
= \s -> lin VS (regV s) ;
|
||||||
mkV2V v s1 s2 b = v ** {isAux = b ; c1 = s1 ; c2 = s2 ; lock_V2V = <>} ;
|
mkVS : V -> VS -- VS out of a verb
|
||||||
|
= \v -> lin VS v
|
||||||
|
} ;
|
||||||
|
|
||||||
-- compund verbs
|
mkVV = overload {
|
||||||
compoundV = overload {
|
mkVV : Str -> VV -- Predictable VV, subjunctive complement, is auxiliary.
|
||||||
compoundV : Str -> V -> V = \s,v -> {s = \\vf => s ++ v.s ! vf ; lock_V = <>} ;
|
= \s -> lin VV (regV s ** {isAux = True ; compl = subjunctive ; isDef = False}) ;
|
||||||
compoundV : Str -> V2 -> V = \s,v -> {s = \\vf => s ++ v.s ! vf ; lock_V = <>} ;
|
mkVV : V -> VV -- takes its VP complement in subjunctive. Is auxiliary.
|
||||||
};
|
= \v -> v ** {isAux = True ; compl = subjunctive ; isDef = False} ;
|
||||||
|
mkVV : VVForm -> V -> VV -- takes its VP complement in the given VVForm
|
||||||
|
= \vvf,v -> v ** {isAux = True ; compl = vvf ; isDef = False} ;
|
||||||
|
mkVV : (isAux : Bool) -> VVForm -> V -> VV -- takes its VP complement in the given VVForm. Whether it's auxiliary (T/F) given as the first argument.
|
||||||
|
= \isAux,vvf,v -> v ** {isAux = isAux ; compl = vvf ; isDef = False}
|
||||||
|
} ;
|
||||||
|
|
||||||
|
mkV2V = overload {
|
||||||
|
mkV2V : V -> (cN : Str) -> (isAux : Bool) -> V2V -- Verb, complementiser for the noun, whether it's auxiliary.
|
||||||
|
= \v,s,b -> let vv : VV = mkVV b subjunctive v in
|
||||||
|
lin V2V (vv ** {c2 = prepOrRa s}) ;
|
||||||
|
mV2V : VV -> (cN : Str) -> V2V -- V2V out of VV + complementiser for the noun
|
||||||
|
= \vv,s -> lin V2V (vv ** {c2 = prepOrRa s}) ;
|
||||||
|
mV2V : VV -> V2V -- V2V out of VV, را for direct object
|
||||||
|
= \vv -> lin V2V (vv ** {c2 = prepOrRa "را"})
|
||||||
|
} ;
|
||||||
|
|
||||||
invarV : Str -> V -- for verbs like " بایستن " ("must"), which don't inflect
|
|
||||||
= \s -> lin V {s = \\_ => s} ;
|
|
||||||
|
|
||||||
----2 Adverbs
|
----2 Adverbs
|
||||||
mkAdv : Str -> Adv = \str -> {s = str ; lock_Adv = <>};
|
mkAdv : Str -> Adv -- Takes a string, returns an adverb.
|
||||||
|
= \str -> lin Adv {s = str} ;
|
||||||
|
|
||||||
----2 Prepositions
|
----2 Prepositions
|
||||||
|
|
||||||
mkPrep : Str -> Prep ;
|
mkPrep = overload {
|
||||||
mkPrep str = {s = str ; lock_Prep = <>};
|
mkPrep : Str -> Prep -- Takes a string, returns a preposition.
|
||||||
|
= \str -> lin Prep {s = str ; ra = [] ; mod = Bare} ;
|
||||||
|
mkPrep : Str -> Mod -> Prep -- Takes a string and Mod (so far only option is ezafe), returns a preposition.
|
||||||
|
= \str,m -> lin Prep {s = str ; ra = [] ; mod=m}
|
||||||
|
} ;
|
||||||
|
|
||||||
{-
|
{-
|
||||||
--3 Determiners and quantifiers
|
--3 Determiners and quantifiers
|
||||||
|
|
||||||
@@ -141,68 +194,188 @@ oper
|
|||||||
-- mkQuant : (no_sg, no_pl, none_sg, : Str) -> Quant ;
|
-- mkQuant : (no_sg, no_pl, none_sg, : Str) -> Quant ;
|
||||||
-- } ;
|
-- } ;
|
||||||
-}
|
-}
|
||||||
mkQuant = overload {
|
|
||||||
-- mkQuant : Pron -> Quant = \p -> {s = \\_,_,c => p.s!c ;a = p.a ; lock_Quant = <>};
|
|
||||||
mkQuant : Str -> Str -> Quant = \sg,pl -> makeQuant sg pl;
|
|
||||||
} ;
|
|
||||||
{-
|
|
||||||
--2 Conjunctions
|
--2 Conjunctions
|
||||||
mkConj : overload {
|
mkConj = overload {
|
||||||
mkConj : Str -> Conj ; -- and (plural agreement)
|
mkConj : Str -> Conj -- and (plural agreement)
|
||||||
mkConj : Str -> Number -> Conj ; -- or (agrement number given as argument)
|
= \y -> mk2Conj [] y plural ;
|
||||||
mkConj : Str -> Str -> Conj ; -- both ... and (plural)
|
mkConj : Str -> Number -> Conj -- or (agrement number given as argument)
|
||||||
mkConj : Str -> Str -> Number -> Conj ; -- either ... or (agrement number given as argument)
|
= \y,n -> mk2Conj [] y n ;
|
||||||
|
mkConj : Str -> Str -> Conj -- both ... and (plural)
|
||||||
|
= \x,y -> mk2Conj x y plural ;
|
||||||
|
mkConj : Str -> Str -> Number -> Conj -- either ... or (agrement number given as argument)
|
||||||
|
= mk2Conj
|
||||||
} ;
|
} ;
|
||||||
mkConj = overload {
|
|
||||||
mkConj : Str -> Conj = \y -> mk2Conj [] y plural ;
|
mkSubj = overload {
|
||||||
mkConj : Str -> Number -> Conj = \y,n -> mk2Conj [] y n ;
|
mkSubj : Str -> Subj -- Takes its verbal complement in indicative.
|
||||||
mkConj : Str -> Str -> Conj = \x,y -> mk2Conj x y plural ;
|
= \s -> lin Subj {s=s ; compl=indicative} ;
|
||||||
mkConj : Str -> Str -> Number -> Conj = mk2Conj ;
|
mkSubj : VVForm -> Str -> Subj -- Specify whether it takes complement in subjunctive or indicative.
|
||||||
|
= \vvf,s -> lin Subj {s=s ; compl=vvf}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
--.
|
||||||
|
--2 Definitions of paradigms
|
||||||
|
|
||||||
|
-- The definitions should not bother the user of the API. So they are
|
||||||
|
-- hidden from the document.
|
||||||
|
|
||||||
|
Number = ResPes.Number ;
|
||||||
|
singular = Sg ;
|
||||||
|
plural = Pl;
|
||||||
|
|
||||||
|
Animacy = ResPes.Animacy ;
|
||||||
|
human = Animate ;
|
||||||
|
nonhuman = Inanimate ;
|
||||||
|
|
||||||
|
animate = human ;
|
||||||
|
inanimate = nonhuman ;
|
||||||
|
|
||||||
|
VVForm = ResPes.VVForm ;
|
||||||
|
subjunctive = ResPes.Subj ;
|
||||||
|
indicative = Indic ;
|
||||||
|
|
||||||
|
Mod = ResPes.Mod ;
|
||||||
|
ezafe = ResPes.Ezafe ;
|
||||||
|
|
||||||
|
-- Removed mkV_1, mkV_2, mkN01 and mkN02 from public API, still available for
|
||||||
|
-- any applications that open ParadigmsPes. /IL 2019-02-08
|
||||||
|
mkV_1 : Str -> V
|
||||||
|
= \s -> lin V (mkVerb1 s) ;
|
||||||
|
mkV_2 : Str -> V
|
||||||
|
= \s -> lin V (mkVerb2 s) ;
|
||||||
|
|
||||||
|
|
||||||
|
mkN = overload {
|
||||||
|
mkN : (sg : Str) -> N -- Takes singular form, returns a noun with ها as the plural form.
|
||||||
|
= \sg -> mkN01 sg inanimate ;
|
||||||
|
mkN : (sg,pl : Str) -> N -- Takes singular and plural forms. Use for ان or its allomorphs, and loanwords with Arabic plural.
|
||||||
|
= \sg,pl -> M.mkN sg pl inanimate ;
|
||||||
|
mkN : (possStem : Str) -> N -> N -- Noun with an unexpected possessive stem, e.g. مه where ه is a consonant, not vowel.
|
||||||
|
= \ps,n -> possStemN ps n ;
|
||||||
|
|
||||||
|
-- hidden from API
|
||||||
|
mkN : (sg : Str) -> Animacy -> N -- Takes singular form and animacy. Inanimate plural ها. Animate plural ان or an allomorph of it (یان or گان) depending on the singular form.
|
||||||
|
= \sg,ani -> case ani of {
|
||||||
|
Inanimate => mkN01 sg ani ;
|
||||||
|
Animate => mkN02 sg ani } ;
|
||||||
|
mkN : (sg,pl : Str) -> Animacy -> N -- Worst-case constructor: takes singular and plural forms and animacy. Use for e.g. loanwords with Arabic plural, or animate nouns with ها as plural.
|
||||||
|
= \sg,pl,ani -> M.mkN sg pl ani
|
||||||
|
} ;
|
||||||
|
|
||||||
|
possStemN : Str -> N -> N = \possStem,n -> n ** {
|
||||||
|
s = table {num => table {Poss => possStem ;
|
||||||
|
mod => n.s ! num ! mod}
|
||||||
|
}
|
||||||
|
|
||||||
|
} ;
|
||||||
|
|
||||||
|
mkN01 : (sg : Str) -> Animacy -> Noun ; -- Takes singular form and animacy, forms plural with ها
|
||||||
|
mkN01 sg ani =
|
||||||
|
let pl : Str = case last sg of {
|
||||||
|
--"د"|"ذ"|"ر"|"ز"|"ژ" => sg + "ها" ; -- these letters are separated by default
|
||||||
|
_ => zwnj sg "ها" } ; -- Using zero-width non-joiner, defined in MorphoPes
|
||||||
|
in M.mkN sg pl ani ;
|
||||||
|
|
||||||
|
mkN02 : (sg : Str) -> Animacy -> Noun ; -- Takes singular form and animacy, pattern matches singular and forms plural with either گان, یان or ان
|
||||||
|
mkN02 str ani = case last str of {
|
||||||
|
"ه" => M.mkN str (init str + "گان") ani ;
|
||||||
|
("ا"|"و") => M.mkN str (str + "یان") ani ;
|
||||||
|
_ => M.mkN str (str + "ان") ani
|
||||||
|
};
|
||||||
|
|
||||||
mk2Conj : Str -> Str -> Number -> Conj = \x,y,n ->
|
mk2Conj : Str -> Str -> Number -> Conj = \x,y,n ->
|
||||||
lin Conj (sd2 x y ** {n = n}) ;
|
lin Conj (sd2 x y ** {n = n}) ;
|
||||||
|
|
||||||
-- mkV0 : V -> V0 ;
|
mkA = overload {
|
||||||
-- mkVS : V -> VS ;
|
mkA : Str -> A -- Regular adjective, same adj and adv forms.
|
||||||
-- mkV2S : V -> Prep -> V2S ;
|
= \str -> lin A (mkAdj str str);
|
||||||
mkVV : V -> VV = \v -> lin VV (v ** {isAux = False});
|
mkA : Str-> Str -> A -- Takes adj and adv forms
|
||||||
|
= \str,adv -> lin A (mkAdj str adv);
|
||||||
|
mkA : Str -> Str -> A2 -- Takes string and complementiser, returns A2. Hidden from public API, confusing naming. /IL
|
||||||
|
= \a,c -> lin A2 (mkAdj a a ** {c2 = c})
|
||||||
|
} ;
|
||||||
|
|
||||||
|
preA : (adj,adv : Str) -> A = \adj,adv ->
|
||||||
|
lin A ((mkAdj adj adv) ** {isPre=True}) ;
|
||||||
|
|
||||||
|
{-
|
||||||
|
-- Demonstrative Pronouns
|
||||||
|
demoPN : Str -> Str -> Str -> Quant =
|
||||||
|
\s1,s2,s3 -> let n = makeDemonPronForm s1 s2 s3 in {s = n.s ; a = defaultAgr ; lock_Quant = <>};
|
||||||
|
-- Interrogative pronouns
|
||||||
|
mkIP : (x1,x2,x3,x4:Str) -> Number -> Gender -> IP =
|
||||||
|
\s1,s2,s3,s4,n,g -> let p = mkIntPronForm s1 s2 s3 s4 in { s = p.s ; n = n ; g = g ; lock_IP = <>};
|
||||||
|
-}
|
||||||
|
|
||||||
|
mkCmpdNoun1 : Str -> N -> N = \s,noun ->
|
||||||
|
noun ** {
|
||||||
|
s = \\ez,n => s ++ noun.s ! ez ! n ;
|
||||||
|
isCmpd = IsCmpd} ;
|
||||||
|
mkCmpdNoun2 : N -> Str -> N = \noun,s ->
|
||||||
|
noun ** {
|
||||||
|
s = \\ez,n => noun.s ! ez ! n ++ s ;
|
||||||
|
isCmpd = IsCmpd};
|
||||||
|
|
||||||
|
-- hidden from public API
|
||||||
|
compoundV = overload {
|
||||||
|
compoundV : Str -> V -> V
|
||||||
|
= \s,v -> v ** {prefix = s} ;
|
||||||
|
compoundV : Str -> V2 -> V -- hidden from public API
|
||||||
|
= \s,v -> lin V (v ** {prefix = s}) ;
|
||||||
|
};
|
||||||
|
|
||||||
|
regV : Str -> V = \inf ->
|
||||||
|
let pres : Str = case inf of {
|
||||||
|
stem + ("ی"|"ا"|"و") + "دن" => stem ;
|
||||||
|
stem + ("تن"|"دن") => stem }
|
||||||
|
in lin V (mkVerb inf pres) ;
|
||||||
|
|
||||||
|
mkV2 = overload {
|
||||||
|
mkV2 : Str -> V2 -- Predictable V2 with را
|
||||||
|
= \s -> lin V2 (regV s ** {c2 = prepOrRa "را"}) ;
|
||||||
|
mkV2 : Str -> V -> V2 -- Compound V2 with را
|
||||||
|
= \s,v -> lin V2 (v ** {prefix = s ; c2 = prepOrRa "را"}) ;
|
||||||
|
mkV2 : V -> V2
|
||||||
|
= \v -> lin V2 (v ** {c2 = prepOrRa "را"}) ;
|
||||||
|
mkV2 : V -> Prep -> V2
|
||||||
|
= \v,p -> lin V2 (v ** {c2 = p}) ;
|
||||||
|
mkV2 : V -> Str -> V2
|
||||||
|
= \v,ra -> lin V2 (v ** {c2 = prepOrRa ra}) ;
|
||||||
|
mkV2 : V -> Str -> Bool -> V2
|
||||||
|
= \v,p,b -> lin V2 (v ** {c2 = {ra = [] ; s = p ; mod=Bare}}) ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
prepOrRa : Str -> Compl = \s -> case s of {
|
||||||
|
"را" => {s = [] ; ra = "را" ; mod=Bare} ;
|
||||||
|
prep => {s = prep ; ra = []; mod=Bare}
|
||||||
|
} ;
|
||||||
|
|
||||||
|
mkPost : Str -> Prep = \s -> lin Prep {s=[] ; ra=s ; mod=Bare} ;
|
||||||
|
|
||||||
|
mkN2 = overload {
|
||||||
|
mkN2 : Str -> N2 -- Predictable N2 without complement
|
||||||
|
= \s -> lin N2 (mkN01 s inanimate ** {c2,compl = []}) ;
|
||||||
|
mkN2 : N -> N2 -- N2 from without complement
|
||||||
|
= \n -> lin N2 (n ** {c2,compl = []}) ;
|
||||||
|
mkN2 : N -> Str -> N2
|
||||||
|
= \n,c -> lin N2 (n ** {c2 = c ; compl = []}) ;
|
||||||
|
mkN2 : N -> Prep -> Str -> N2 -- hidden from puclic API
|
||||||
|
= \n,p,c -> lin N2 (n ** {c2 = p.s; compl = []})
|
||||||
|
} ;
|
||||||
|
|
||||||
|
mkN3 = overload {
|
||||||
|
mkN3 : N -> Str -> Str -> N3
|
||||||
|
= \n,p,q -> lin N3 (n ** {c2 = p ; c3 = q}) ;
|
||||||
|
mkN3 : N -> Prep -> Str -> Str -> N3 -- hidden from public API
|
||||||
|
= \n,p,q,r -> lin N3 (n ** {c2 = p.s ; c3 = q ; c4 = r}) -- there is no c4
|
||||||
|
} ;
|
||||||
|
|
||||||
|
|
||||||
-- mkV2V : V -> Prep -> Prep -> V2V ;
|
mkQuant = overload {
|
||||||
-- mkVA : V -> VA ;
|
-- mkQuant : Pron -> Quant = \p -> {s = \\_,_,c => p.s!c ;a = p.a ; lock_Quant = <>};
|
||||||
-- mkV2A : V -> Prep -> V2A ;
|
mkQuant : Str -> Str -> Quant -- hidden from public API
|
||||||
-- mkVQ : V -> VQ ;
|
= \sg,pl -> makeQuant sg pl;
|
||||||
-- mkV2Q : V -> Prep -> V2Q ;
|
} ;
|
||||||
--
|
|
||||||
-- mkAS : A -> AS ;
|
|
||||||
-- mkA2S : A -> Prep -> A2S ;
|
|
||||||
-- mkAV : A -> AV ;
|
|
||||||
-- mkA2V : A -> Prep -> A2V ;
|
|
||||||
-- mkA2V a p = a ** {c2 = p.s } ;
|
|
||||||
--
|
|
||||||
---- Notice: Categories $V0, AS, A2S, AV, A2V$ are just $A$.
|
|
||||||
---- $V0$ is just $V$; the second argument is treated as adverb.
|
|
||||||
--
|
|
||||||
-- V0 : Type ;
|
|
||||||
-- AS, A2S, AV, A2V : Type ;
|
|
||||||
--
|
|
||||||
----.
|
|
||||||
----2 Definitions of paradigms
|
|
||||||
----
|
|
||||||
---- The definitions should not bother the user of the API. So they are
|
|
||||||
---- hidden from the document.
|
|
||||||
--
|
|
||||||
-- Gender = MorphoHin.Gender ;
|
|
||||||
-- Number = MorphoHin.Number ;
|
|
||||||
-- Case = MorphoHin.Case ;
|
|
||||||
-- human = Masc ;
|
|
||||||
-- nonhuman = Neutr ;
|
|
||||||
-- masculine = Masc ;
|
|
||||||
-- feminine = Fem ;
|
|
||||||
-- singular = Sg ;
|
|
||||||
-- plural = Pl ;
|
|
||||||
-- nominative = Nom ;
|
|
||||||
-- genitive = Gen ;
|
|
||||||
-}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,26 +2,25 @@ concrete PhrasePes of Phrase = CatPes ** open Prelude, ResPes in {
|
|||||||
|
|
||||||
lin
|
lin
|
||||||
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
|
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
|
||||||
|
UttS s = {s = s.s ! Indic} ;
|
||||||
|
UttImpSg pol imp = {s = pol.s ++ imp.s ! pol.p ! ImpF Sg False} ;
|
||||||
|
UttImpPl pol imp = {s = pol.s ++ imp.s ! pol.p ! ImpF Pl False} ;
|
||||||
|
UttImpPol pol imp = {s = pol.s ++ imp.s ! pol.p ! ImpF Sg True} ;
|
||||||
|
|
||||||
UttS s = s ;
|
UttIP, --- Acc also
|
||||||
UttQS qs = {s = qs.s ! QDir} ;
|
UttQS,
|
||||||
UttImpSg pol imp = {s = pol.s ++ imp.s ! contrNeg True pol.p ! ImpF Sg False} ;
|
UttAdv,
|
||||||
UttImpPl pol imp = {s = pol.s ++ imp.s ! contrNeg True pol.p ! ImpF Pl False} ;
|
UttIAdv,
|
||||||
UttImpPol pol imp = {s = pol.s ++ imp.s ! contrNeg True pol.p ! ImpF Sg True} ;
|
UttCard = \ss -> ss ;
|
||||||
|
|
||||||
UttIP ip = {s = ip.s } ; --- Acc also
|
UttNP np = {s = np2str np} ;
|
||||||
UttIAdv iadv = iadv ;
|
UttCN cn = {s = cn2str cn};
|
||||||
UttNP np = {s = np.s ! NPC bEzafa} ;
|
UttAP ap = {s = ap.s ! Bare} ;
|
||||||
UttVP vp = {s = vp.ad ++ vp.comp ! (AgPes Sg PPers3 ) ++ vp.obj.s ++ vp.inf ++ vp.vComp ! (AgPes Sg PPers3) ++ vp.embComp} ;
|
UttVP vp = {s = showVPH Inf defaultAgr vp} ;
|
||||||
UttAdv adv = {s = adv.s } ;
|
|
||||||
UttCN cn = {s = cn.s ! bEzafa ! Sg };
|
|
||||||
UttCard n = n ;
|
|
||||||
UttAP ap = {s = ap.s ! bEzafa} ;
|
|
||||||
|
|
||||||
|
PConjConj conj = {s = conj.s2} ;
|
||||||
|
|
||||||
|
NoVoc,
|
||||||
NoPConj = {s = []} ;
|
NoPConj = {s = []} ;
|
||||||
PConjConj conj = {s = conj.s2} ; ---
|
VocNP = UttNP ;
|
||||||
|
|
||||||
NoVoc = {s = []} ;
|
|
||||||
VocNP np = {s = np.s ! NPC bEzafa} ;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,41 +4,26 @@ concrete QuestionPes of Question = CatPes ** open ResPes, Prelude in {
|
|||||||
|
|
||||||
lin
|
lin
|
||||||
|
|
||||||
QuestCl cl = {
|
QuestCl cl = {
|
||||||
s = \\t,p,qf => case qf of {
|
s = \\t,p => cl.s ! t ! p ! OQuest
|
||||||
QDir => cl.s ! t ! p ! OQuest;
|
};
|
||||||
QIndir => cl.s ! t! p ! ODir
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
QuestVP qp vp =
|
QuestVP qp vp =
|
||||||
let cl = mkSClause ("") (AgPes qp.n PPers3) vp;
|
let cl = mkSClause [] (Ag qp.n P3) vp;
|
||||||
-- qp1 = qp.s;
|
in {s = \\t,p => qp.s ++ cl.s ! t ! p ! ODir} ;
|
||||||
-- qp2 = qp.s ! Obl ++ "nE"
|
|
||||||
in { s = \\t,p,o => qp.s ++ cl.s ! t ! p ! ODir } ;
|
|
||||||
-- _ => qp1 ++ cl.s ! t ! p ! ODir
|
|
||||||
-- }
|
|
||||||
|
|
||||||
QuestSlash ip slash = {
|
QuestSlash ip slash = {
|
||||||
s = \\t,p,o =>
|
s = \\t,p => slash.subj ++ slash.c2.s ++ ip.s ++ slash.c2.ra
|
||||||
slash.subj ++ slash.c2.s ++ ip.s ++ slash.c2.ra ++
|
++ slash.vp ! t ! p ! ODir
|
||||||
slash.vp ! t ! p ! ODir;
|
};
|
||||||
-- order of whome and john needs to be changed
|
|
||||||
-- AR 18/9/2017 now changed by making ClSlash discontinuous
|
|
||||||
};
|
|
||||||
|
|
||||||
QuestIAdv iadv cl = {
|
QuestIAdv iadv cl = {
|
||||||
s = \\t,p,_ => iadv.s ++ cl.s ! t ! p ! ODir;
|
s = \\t,p => iadv.s ++ cl.s ! t ! p ! ODir
|
||||||
};
|
};
|
||||||
|
|
||||||
QuestIComp icomp np =
|
QuestIComp icomp np =
|
||||||
let cl = mkSClause (np.s ! NPC bEzafa ++ icomp.s) np.a (predAux auxBe);
|
let cl = mkSClause (np2str np ++ icomp.s) np.a (predV beVerb)
|
||||||
in {
|
in {s = \\t,p => cl.s ! t ! p ! ODir};
|
||||||
s = \\t,p,qf => case qf of {
|
|
||||||
QDir => cl.s ! t ! p ! ODir;
|
|
||||||
QIndir => cl.s ! t! p ! ODir
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
PrepIP p ip = {s = p.s ++ ip.s } ;
|
PrepIP p ip = {s = p.s ++ ip.s } ;
|
||||||
|
|
||||||
@@ -48,7 +33,9 @@ concrete QuestionPes of Question = CatPes ** open ResPes, Prelude in {
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
IdetCN idet cn = {
|
IdetCN idet cn = {
|
||||||
s = case idet.isNum of {False => idet.s ++ cn.s ! bEzafa ! idet.n ; True => idet.s ++ cn.s ! bEzafa ! Sg} ;
|
s = case idet.isNum of {
|
||||||
|
False => idet.s ++ cn.s ! idet.n ! Bare ;
|
||||||
|
True => idet.s ++ cn.s ! Sg ! Bare} ;
|
||||||
n = idet.n;
|
n = idet.n;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,19 @@
|
|||||||
Some of the sources are transliterated, in
|
# Persian
|
||||||
|
|
||||||
./src
|
## Language info
|
||||||
|
|
||||||
Before compilation, do
|
* English name: Persian
|
||||||
|
* Autonym: فارسی
|
||||||
|
* ISO code: [Per](https://www.loc.gov/standards/iso639-2/php/langcodes_name.php?code_ID=357) or [Fas](https://www.loc.gov/standards/iso639-2/php/langcodes_name.php?code_ID=357); [Pes](https://iso639-3.sil.org/code/pes) for Iranian Persian
|
||||||
|
|
||||||
gf -s <translit.gfs
|
## Authors
|
||||||
|
|
||||||
to get unicode.
|
* Shafqat Virk (2012)
|
||||||
|
* Elnaz Abolahrar (2012)
|
||||||
|
* Inari Listenmaa (2019-)
|
||||||
|
|
||||||
|
With contributions from Nasrin Mostofian and Aarne Ranta.
|
||||||
|
|
||||||
|
## Publications
|
||||||
|
|
||||||
|
Shafqat Virk and Elnaz Abolahrar, *An Open Source Persian Computational Grammar*. Proceedings of the Eight International Conference on Language Resources and Evaluation (LREC'12). [[Link](http://www.lrec-conf.org/proceedings/lrec2012/pdf/1028_Paper.pdf)]
|
||||||
|
|||||||
@@ -6,48 +6,32 @@ concrete RelativePes of Relative = CatPes ** open ResPes in {
|
|||||||
lin
|
lin
|
||||||
|
|
||||||
RelCl cl = {
|
RelCl cl = {
|
||||||
s = \\t,p,o,agr => "که" ++ cl.s ! t ! p ! o ;
|
s = \\t,p,agr => cl.s ! t ! p ! ODir ;
|
||||||
};
|
rp = IdRP.s
|
||||||
-- RelVP and RelSlash slows the linking process a lot this is why it is commented for test purposes
|
|
||||||
|
|
||||||
RelVP rp vp = {
|
|
||||||
s = \\t,p,o,ag =>
|
|
||||||
let
|
|
||||||
agr = case rp.a of {
|
|
||||||
RNoAg => ag ;
|
|
||||||
RAg a => a
|
|
||||||
} ;
|
|
||||||
cl = mkSClause (rp.s) agr vp;
|
|
||||||
|
|
||||||
-- cl = case t of {
|
|
||||||
-- VPImpPast => mkSClause (rp.s ! (giveNumber agr) ! Obl) agr vp;
|
|
||||||
-- _ => mkSClause (rp.s ! (giveNumber agr) ! Dir) agr vp
|
|
||||||
-- };
|
|
||||||
in
|
|
||||||
cl.s ! t ! p ! ODir ;
|
|
||||||
-- c = Dir
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
RelVP rp vp = {
|
||||||
|
s = \\t,p,ag =>
|
||||||
|
let agr = case rp.a of {
|
||||||
|
RNoAg => ag ;
|
||||||
|
RAg a => a} ;
|
||||||
|
cl = mkSClause [] agr vp;
|
||||||
|
in cl.s ! t ! p ! ODir ;
|
||||||
|
rp = rp.s
|
||||||
|
} ;
|
||||||
|
|
||||||
---- Pied piping: "ت wهعه we رe لْْکنگ". Stranding and empty
|
|
||||||
---- relative are defined in $ExtraHin.gf$ ("تهت we رe لْْکنگ ت",
|
|
||||||
---- "we رe لْْکنگ ت").
|
|
||||||
--
|
|
||||||
RelSlash rp slash = {
|
RelSlash rp slash = {
|
||||||
s = \\t,p,o,agr => rp.s ++ slash.c2.s ++ slash.subj ++ slash.vp ! t ! p ! o ;--case t of { ---- AR 18/8/2017 is this the right place of subj?
|
s = \\t,p,agr => slash.c2.s ++ slash.subj ++ slash.vp ! t ! p ! ODir ;--case t of { ---- AR 18/8/2017 is this the right place of subj?
|
||||||
-- VPImpPast => rp.s ! (giveNumber agr) Obl ++ slash.c2.s ++ slash.s ! t ! p ! o ;
|
rp = rp.s
|
||||||
-- _ => rp.s ! (giveNumber agr) Dir ++ slash.c2.s ++ slash.s ! t ! p ! o
|
|
||||||
-- };
|
|
||||||
-- c = Dir
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
FunRP p np rp = {
|
FunRP p np rp = {
|
||||||
s = np.s ! NPC enClic ++ rp.s ++ p.s ++ getPron np.animacy (fromAgr np.a).n ; -- need to make a special form of relative np by addY
|
s = \\ke => np.s ! Clitic ++ rp.s ! ke ++ p.s ++ getPron np.animacy (fromAgr np.a).n ;
|
||||||
a = RAg np.a
|
a = RAg np.a
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
IdRP = {
|
IdRP = {
|
||||||
s = "که" ;
|
s = table {Ke => "که" ; Ance => "آنچه"} ;
|
||||||
a = RNoAg
|
a = RNoAg
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -7,19 +7,17 @@ concrete SentencePes of Sentence = CatPes ** open Prelude, ResPes,Predef in {
|
|||||||
|
|
||||||
PredVP np vp = mkClause np vp ;
|
PredVP np vp = mkClause np vp ;
|
||||||
|
|
||||||
PredSCVP sc vp = mkSClause ("این" ++ sc.s) (defaultAgrPes) vp ;
|
PredSCVP sc vp = mkSClause ("این" ++ sc.s) defaultAgr vp ;
|
||||||
|
|
||||||
ImpVP vp = {
|
ImpVP vp = {
|
||||||
s = \\pol,n =>
|
s = \\pol,n =>
|
||||||
let
|
let agr = Ag (numImp n) P2 ;
|
||||||
agr = AgPes (numImp n) PPers2 ;
|
vps = vp.prefix ++ vp.s ! VImp pol (numImp n)
|
||||||
in case pol of {
|
in case vp.vvtype of {
|
||||||
CPos => vp.ad ++ vp.comp ! agr ++ vp.obj.s ++ vp.vComp ! agr ++ ((vp.s ! VPImp Pos (numImp n)).inf) ++ vp.embComp;
|
NoVV => vp.ad ++ vp.comp ! agr ++ vp.obj ++ vp.vComp ! agr ! VVPres ++ vps ++ vp.embComp ;
|
||||||
CNeg _ => vp.ad ++ vp.comp ! agr ++ vp.obj.s ++ vp.vComp ! agr ++ ((vp.s ! VPImp Neg (numImp n)).inf) ++ vp.embComp
|
_ => vps ++ vp.ad ++ vp.comp ! agr ++ vp.obj ++ vp.vComp ! agr ! VVPres ++ vp.embComp }
|
||||||
} ;
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|
||||||
SlashVP np vp =
|
SlashVP np vp =
|
||||||
mkSlClause np vp ** {c2 = vp.c2} ;
|
mkSlClause np vp ** {c2 = vp.c2} ;
|
||||||
|
|
||||||
@@ -30,78 +28,42 @@ concrete SentencePes of Sentence = CatPes ** open Prelude, ResPes,Predef in {
|
|||||||
SlashPrep cl prep = {
|
SlashPrep cl prep = {
|
||||||
subj = [] ; ---- AR 18/9/2017 this can destroy SOV ; Cl should be made discont
|
subj = [] ; ---- AR 18/9/2017 this can destroy SOV ; Cl should be made discont
|
||||||
vp = cl.s ;
|
vp = cl.s ;
|
||||||
c2 = { s = prep.s ; ra = [] ; c = VIntrans}
|
c2 = prep ** {ra = []}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
SlashVS np vs slash =
|
SlashVS np vs slash =
|
||||||
mkSlClause np
|
mkSlClause np
|
||||||
(insertObj2 (conjThat ++ slash.s) (predV vs)) **
|
(embComp (conjThat ++ slash.s ! Indic) (predV vs)) **
|
||||||
{c2 = slash.c2} ;
|
{c2 = slash.c2} ;
|
||||||
|
|
||||||
EmbedS s = {s = conjThat ++ s.s} ;
|
EmbedS s = {s = conjThat ++ s.s ! Indic} ;
|
||||||
EmbedQS qs = {s = qs.s ! QIndir} ;
|
EmbedQS qs = qs ;
|
||||||
EmbedVP vp = {s = vp.obj.s ++ vp.inf ++ vp.comp ! defaultAgrPes} ; --- agr
|
EmbedVP vp = {s = showVPH Inf defaultAgr vp} ; --- agr
|
||||||
|
|
||||||
|
|
||||||
UseCl temp p cl =
|
UseCl temp p cl = {
|
||||||
{ s = case <temp.t,temp.a> of {
|
s = \\vvf => temp.s ++ p.s ++ case vvf of {
|
||||||
<Pres,Simul> => temp.s ++ p.s ++ cl.s ! VPres ! p.p ! ODir;
|
Indic => cl.s ! TA temp.t temp.a ! p.p ! ODir ;
|
||||||
<Pres,Anter> => temp.s ++ p.s ++ cl.s ! VPerfPres ! p.p ! ODir;
|
Subj => cl.s ! TA Cond temp.a ! p.p ! ODir }
|
||||||
<Past,Simul> => temp.s ++ p.s ++ cl.s ! VPast ! p.p ! ODir;
|
} ;
|
||||||
<Past,Anter> => temp.s ++ p.s ++ cl.s ! VPerfPast ! p.p ! ODir;
|
|
||||||
<Fut,Simul> => temp.s ++ p.s ++ cl.s ! VFut ! p.p ! ODir;
|
|
||||||
<Fut,Anter> => temp.s ++ p.s ++ cl.s ! VPerfFut ! p.p ! ODir;
|
|
||||||
<Cond,Simul> => temp.s ++ p.s ++ cl.s ! VCondSimul ! p.p ! ODir;
|
|
||||||
<Cond,Anter> => temp.s ++ p.s ++ cl.s ! VCondAnter ! p.p ! ODir -- this needs to be fixed by making SubjPerf in ResPnb
|
|
||||||
|
|
||||||
};
|
UseQCl temp p qcl = let vt = TA temp.t temp.a in {
|
||||||
} ;
|
s = temp.s ++ p.s ++ qcl.s ! vt ! p.p ;
|
||||||
UseQCl temp p cl = {
|
} ;
|
||||||
s = \\q => case <temp.t,temp.a> of {
|
|
||||||
<Pres,Simul> => temp.s ++ p.s ++ cl.s ! VPres ! p.p ! q;
|
|
||||||
<Pres,Anter> => temp.s ++ p.s ++ cl.s ! VPerfPres ! p.p ! q;
|
|
||||||
<Past,Simul> => temp.s ++ p.s ++ cl.s ! VPast ! p.p ! q;
|
|
||||||
<Past,Anter> => temp.s ++ p.s ++ cl.s ! VPerfPast ! p.p ! q;
|
|
||||||
<Fut,Simul> => temp.s ++ p.s ++ cl.s ! VFut ! p.p ! q;
|
|
||||||
<Fut,Anter> => temp.s ++ p.s ++ cl.s ! VPerfFut ! p.p ! q;
|
|
||||||
<Cond,Simul> => temp.s ++ p.s ++ cl.s ! VCondSimul ! p.p ! q;
|
|
||||||
<Cond,Anter> => temp.s ++ p.s ++ cl.s ! VCondAnter ! p.p ! q
|
|
||||||
|
|
||||||
};
|
UseRCl temp p rcl = let vt = TA temp.t temp.a in rcl ** {
|
||||||
} ;
|
s = \\a => temp.s ++ p.s ++ rcl.s ! vt ! p.p ! a
|
||||||
|
} ;
|
||||||
|
|
||||||
UseRCl temp p rcl = {
|
UseSlash temp p cls = cls ** {
|
||||||
s = \\q => case <temp.t,temp.a> of {
|
s = \\vvf => temp.s ++ p.s ++ cls.subj ++ case vvf of {
|
||||||
<Pres,Simul> => temp.s ++ p.s ++ rcl.s ! VPres ! p.p ! ODir ! q;
|
Indic => cls.vp ! TA temp.t temp.a ! p.p ! ODir ;
|
||||||
<Pres,Anter> => temp.s ++ p.s ++ rcl.s ! VPerfPres ! p.p ! ODir ! q;
|
Subj => cls.vp ! TA Cond temp.a ! p.p ! ODir }
|
||||||
<Past,Simul> => temp.s ++ p.s ++ rcl.s ! VPast ! p.p ! ODir ! q;
|
} ;
|
||||||
<Past,Anter> => temp.s ++ p.s ++ rcl.s ! VPerfPast ! p.p ! ODir ! q;
|
|
||||||
<Fut,Simul> => temp.s ++ p.s ++ rcl.s ! VFut ! p.p ! ODir ! q;
|
|
||||||
<Fut,Anter> => temp.s ++ p.s ++ rcl.s ! VPerfFut ! p.p ! ODir ! q;
|
|
||||||
<Cond,Simul> => temp.s ++ p.s ++ rcl.s ! VCondSimul ! p.p ! ODir ! q;
|
|
||||||
<Cond,Anter> => temp.s ++ p.s ++ rcl.s ! VCondAnter ! p.p ! ODir ! q
|
|
||||||
};
|
|
||||||
c = rcl.c
|
|
||||||
} ;
|
|
||||||
|
|
||||||
UseSlash temp p clslash = {
|
AdvS a s = {s = \\vvf => a.s ++ s.s ! vvf} ;
|
||||||
s = temp.s ++ p.s ++ clslash.subj ++
|
|
||||||
case <temp.t,temp.a> of {
|
|
||||||
<Pres,Simul> => clslash.vp ! VPres ! p.p ! ODir;
|
|
||||||
<Pres,Anter> => clslash.vp ! VPerfPres ! p.p ! ODir;
|
|
||||||
<Past,Simul> => clslash.vp ! VPast ! p.p ! ODir ;
|
|
||||||
<Past,Anter> => clslash.vp ! VPerfPast ! p.p ! ODir;
|
|
||||||
<Fut,Simul> => clslash.vp ! VFut ! p.p ! ODir;
|
|
||||||
<Fut,Anter> => clslash.vp ! VPerfFut ! p.p ! ODir;
|
|
||||||
<Cond,Simul> => clslash.vp ! VCondSimul ! p.p ! ODir;
|
|
||||||
<Cond,Anter> => clslash.vp ! VCondSimul ! p.p ! ODir
|
|
||||||
};
|
|
||||||
c2 = clslash.c2
|
|
||||||
} ;
|
|
||||||
|
|
||||||
AdvS a s = {s = a.s ++ s.s} ;
|
RelS s r = {s = \\vvf => s.s ! vvf ++ rs2str Ke (agrP3 Sg) r} ;
|
||||||
|
SSubjS s1 sj s2 = {s = \\vvf => s1.s ! vvf ++ sj.s ++ s2.s ! sj.compl};
|
||||||
RelS s r = {s = s.s ++ r.s ! agrPesP3 Sg} ;
|
|
||||||
SSubjS s sj s = { s = s.s ++ sj.s ++ s.s};
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,102 +5,88 @@ concrete StructuralPes of Structural = CatPes **
|
|||||||
coding = utf8;
|
coding = utf8;
|
||||||
|
|
||||||
lin
|
lin
|
||||||
above_Prep = ss "بالای" ;
|
above_Prep = mkPrep "بالای" ;
|
||||||
after_Prep = ss ["بعد از"] ;
|
after_Prep = mkPrep ["بعد از"] ;
|
||||||
all_Predet = ss ["همه ی"] ;
|
all_Predet = ss ["همه ی"] ;
|
||||||
almost_AdA, almost_AdN = ss "تقریباً" ;
|
almost_AdA, almost_AdN = ss "تقریباً" ;
|
||||||
although_Subj = ss ["با وجود این"] ;
|
although_Subj = mkSubj "با وجود این" ;
|
||||||
always_AdV = ss "همیشه" ;
|
always_AdV = ss "همیشه" ;
|
||||||
and_Conj = sd2 [] "و" ** {n = Pl} ;
|
and_Conj = sd2 [] "و" ** {n = Pl} ;
|
||||||
because_Subj = ss ["برای این"] ;
|
because_Subj = mkSubj "برای این" ;
|
||||||
before_Prep = ss ["قبل از"] ;
|
before_Prep = mkPrep ["قبل از"] ;
|
||||||
behind_Prep = ss "پشت" ;
|
behind_Prep = mkPrep "پشت" ;
|
||||||
between_Prep = ss "بین" ;
|
between_Prep = mkPrep "بین" ;
|
||||||
both7and_DConj = sd2 "هم" ["و هم"] ** {n = Pl} ;
|
both7and_DConj = sd2 "هم" ["و هم"] ** {n = Pl} ;
|
||||||
but_PConj = ss "اما" ;
|
but_PConj = ss "اما" ;
|
||||||
by8agent_Prep = ss "توسط" ;
|
by8agent_Prep = mkPrep "توسط" ;
|
||||||
by8means_Prep = ss "با" ;
|
by8means_Prep = mkPrep "با" ;
|
||||||
-- can8know_VV,can_VV = mkV "سکن" ** { isAux = True} ;
|
-- can8know_VV,can_VV = mkVV (mkV "سکن") ;
|
||||||
can_VV = mkV_1 " توانستن " ** { isAux = True} ; ---- AR
|
can_VV = mkVV (mkV_1 "توانستن") ; ---- AR
|
||||||
during_Prep = ss ["در طول"] ;
|
during_Prep = mkPrep ["در طول"] ;
|
||||||
either7or_DConj = sd2 "یا" "یا" ** {n = Sg} ;
|
either7or_DConj = sd2 "یا" "یا" ** {n = Sg} ;
|
||||||
-- everybody_NP = MassNP (UseN (MorphoPnb.mkN11 ["هر کwی"])); -- not a good way coz need to include NounPnb
|
-- everybody_NP = R.indeclNP "هر کwی";
|
||||||
every_Det = mkDet "هر" Sg ;
|
every_Det = mkDet "هر" Sg ;
|
||||||
-- everything_NP = MassNP (UseN (MorphoPnb.mkN11 ["هر XE"]));
|
-- everything_NP = R.indeclNP ["هر XE"]));
|
||||||
everywhere_Adv = ss ["هر جا"] ;
|
everywhere_Adv = ss ["هر جا"] ;
|
||||||
few_Det = mkDet ["تعداد کمی"] Pl True; -- check
|
few_Det = mkDet ["تعداد کمی"] Pl True; -- check
|
||||||
-- first_Ord = {s = "اولین" ; n = Sg} ; --DEPRECATED
|
for_Prep = mkPrep "برای" Ezafe ;
|
||||||
for_Prep = ss "برای" ;
|
from_Prep = mkPrep "از" ;
|
||||||
from_Prep = ss "از" ;
|
he_Pron = R.agr2pron ! Ag Sg P3 ;
|
||||||
he_Pron = personalPN "او" Sg PPers3 ;
|
|
||||||
here_Adv = ss "اینجا" ;
|
here_Adv = ss "اینجا" ;
|
||||||
here7to_Adv = ss "اینجا" ;
|
here7to_Adv = ss "اینجا" ;
|
||||||
here7from_Adv = ss "اینجا" ;
|
here7from_Adv = ss "اینجا" ;
|
||||||
how_IAdv = ss "چطور" ;
|
how_IAdv = ss "چطور" ;
|
||||||
how8many_IDet = {s = "چند" ; n = Pl ; isNum = True} ;
|
how8many_IDet = {s = "چند" ; n = Pl ; isNum = True} ;
|
||||||
how8much_IAdv = ss "چقدر" ;
|
how8much_IAdv = ss "چقدر" ;
|
||||||
if_Subj = ss "اگر" ;
|
if_Subj = mkSubj subjunctive "اگر" ;
|
||||||
in8front_Prep = ss "جلوی" ;
|
in8front_Prep = mkPrep "جلوی" ;
|
||||||
i_Pron = personalPN "من" Sg PPers1;
|
i_Pron = R.agr2pron ! Ag Sg P1;
|
||||||
in_Prep = ss "در" ;
|
in_Prep = mkPrep "در" ;
|
||||||
it_Pron = personalPN "آن" Sg PPers3;
|
it_Pron = R.agr2pron ! Ag Sg P3;
|
||||||
less_CAdv = {s = "کمتر" ; p = ""} ;
|
less_CAdv = {s = "کمتر" ; p = ""} ;
|
||||||
many_Det = mkDet ["تعداد زیادی"] Pl True; -- check
|
many_Det = mkDet "بسیار" Pl False Ezafe ;
|
||||||
more_CAdv = {s = "بیشتر" ; p = "" } ;
|
more_CAdv = {s = "بیشتر" ; p = "" } ;
|
||||||
most_Predet = ss "اکثر";
|
most_Predet = ss "اکثر";
|
||||||
much_Det = mkDet ["مقدار زیادی"] Pl ;
|
much_Det = mkDet ["مقدار زیادی"] Pl ;
|
||||||
must_VV = invarV " بایستن " ** {isAux = True} ; ---- AR
|
must_VV =
|
||||||
-- must_VV = {
|
let must : VV = mkVV False subjunctive (defV "بایستن" "باید" "باید") ; -- "بایست" is different meaning?
|
||||||
-- s = table {
|
in must ** {isDef=True} ;
|
||||||
-- VVF VInf => ["هوe تْ"] ;
|
-- TODO: past tense forms with مجبور+beVerb
|
||||||
-- VVF VPres => "مست" ;
|
|
||||||
-- VVF VPPart => ["هد تْ"] ;
|
|
||||||
-- VVF VPresPart => ["هونگ تْ"] ;
|
|
||||||
-- VVF VPast => ["هد تْ"] ; --# notpresent
|
|
||||||
-- VVPastNeg => ["هدn'ت تْ"] ; --# notpresent
|
|
||||||
-- VVPresNeg => "مستn'ت"
|
|
||||||
-- } ;
|
|
||||||
-- isAux = True
|
|
||||||
-- } ;
|
|
||||||
-----b no_Phr = ss "نْ" ;
|
|
||||||
|
|
||||||
|
|
||||||
no_Utt = ss "نه" ;
|
no_Utt = ss "نه" ;
|
||||||
on_Prep = ss "روی" ;
|
on_Prep = mkPrep "روی" ;
|
||||||
-- one_Quant = demoPN "یک" ; -- DEPRECATED
|
|
||||||
only_Predet = ss "فقط" ;
|
only_Predet = ss "فقط" ;
|
||||||
or_Conj = sd2 [] "یا" ** {n = Sg} ;
|
or_Conj = sd2 [] "یا" ** {n = Sg} ;
|
||||||
otherwise_PConj = ss ["درغیراین صورت"] ;
|
otherwise_PConj = ss ["درغیراین صورت"] ;
|
||||||
part_Prep = ss "از" ; -- the object following it should be in Ezafa form
|
part_Prep = mkPrep "از" ; -- TODO: the object following it should be in Ezafa form
|
||||||
please_Voc = ss "لطفاً" ;
|
please_Voc = ss "لطفاً" ;
|
||||||
possess_Prep = ss "" ; -- will be handeled in Ezafeh
|
possess_Prep = mkPrep "" ; -- will be handeled in Ezafeh
|
||||||
quite_Adv = ss "کاملاً" ;
|
quite_Adv = ss "کاملاً" ;
|
||||||
she_Pron = personalPN "او" Sg PPers3 ;
|
she_Pron = R.agr2pron ! Ag Sg P3 ;
|
||||||
so_AdA = ss "بسیار" ;
|
so_AdA = ss "بسیار" ;
|
||||||
-- somebody_NP = MassNP (UseN (MorphoPnb.mkN11 "کwی" ));
|
somebody_NP = R.indeclNP "کwی" ;
|
||||||
someSg_Det = mkDet "مقداری" Sg True ;
|
someSg_Det = mkDet "مقداری" Sg True ;
|
||||||
somePl_Det = mkDet "چند" Pl True ;
|
somePl_Det = mkDet "چند" Pl True ;
|
||||||
-- something_NP = MassNP (UseN (MorphoPnb.mkN11 "چیزی"));
|
something_NP = R.indeclNP "چیزی" ;
|
||||||
somewhere_Adv = ss "جایی" ;
|
somewhere_Adv = ss "جایی" ;
|
||||||
that_Quant = mkQuant "آن" "آن";
|
that_Quant = mkQuant "آن" "آن";
|
||||||
that_Subj = ss "آن";
|
that_Subj = mkSubj "آن";
|
||||||
there_Adv = ss "آنجا" ;
|
there_Adv = ss "آنجا" ;
|
||||||
there7to_Adv = ss "آنجا" ;
|
there7to_Adv = ss "آنجا" ;
|
||||||
there7from_Adv = ss "آنجا" ;
|
there7from_Adv = ss "آنجا" ;
|
||||||
therefore_PConj = ss ["به همین دلیل"] ;
|
therefore_PConj = ss ["به همین دلیل"] ;
|
||||||
they_Pron = personalPN ["آن ها"] Pl PPers3 ;
|
they_Pron = R.agr2pron ! Ag Pl P3 ;
|
||||||
this_Quant = mkQuant "این" "این" ;
|
this_Quant = mkQuant "این" "این" ;
|
||||||
through_Prep = ss ["از طریق"] ;
|
through_Prep = mkPrep ["از طریق"] ;
|
||||||
too_AdA = ss "خیلی" ;
|
too_AdA = ss "خیلی" ;
|
||||||
to_Prep = ss "به" ** {lock_Prep = <>};
|
to_Prep = mkPrep "به" ** {lock_Prep = <>};
|
||||||
under_Prep = ss "زیر" ** {lock_Prep = <>};
|
under_Prep = mkPrep "زیر" ** {lock_Prep = <>};
|
||||||
very_AdA = ss "خیلی" ;
|
very_AdA = ss "خیلی" ;
|
||||||
want_VV = mkV "خواستن" "خواه" ** { isAux = False} ;
|
want_VV = mkVV False subjunctive (mkV "خواستن" "خواه") ; --not aux
|
||||||
we_Pron = personalPN "ما" Pl PPers1 ;
|
we_Pron = R.agr2pron ! Ag Pl P1 ;
|
||||||
whatSg_IP = {s = ["چه چیزی"] ; n = Sg } ;
|
whatSg_IP = {s = ["چه چیزی"] ; n = Sg } ;
|
||||||
whatPl_IP = {s = ["چه چیزهایی"] ; n = Pl } ;
|
whatPl_IP = {s = ["چه چیزهایی"] ; n = Pl } ;
|
||||||
when_IAdv = ss "کی" ;
|
when_IAdv = ss "کی" ;
|
||||||
when_Subj = ss "وقتی" ;
|
when_Subj = mkSubj "وقتی" ;
|
||||||
where_IAdv = ss "کجا" ;
|
where_IAdv = ss "کجا" ;
|
||||||
which_IQuant = {s = "کدام" ; n = Sg} ;
|
which_IQuant = {s = "کدام" ; n = Sg} ;
|
||||||
whichPl_IDet = {s = "کدام" ; n = Pl ; isNum = False} ;
|
whichPl_IDet = {s = "کدام" ; n = Pl ; isNum = False} ;
|
||||||
@@ -108,21 +94,21 @@ concrete StructuralPes of Structural = CatPes **
|
|||||||
whoSg_IP = {s = ["چه کسی"] ; n = Sg} ;
|
whoSg_IP = {s = ["چه کسی"] ; n = Sg} ;
|
||||||
whoPl_IP = {s = ["چه کسانی"] ;n = Pl} ;
|
whoPl_IP = {s = ["چه کسانی"] ;n = Pl} ;
|
||||||
why_IAdv = ss "چرا" ;
|
why_IAdv = ss "چرا" ;
|
||||||
without_Prep = ss "بدون" ;
|
without_Prep = mkPrep "بدون" ;
|
||||||
with_Prep = ss "با";
|
with_Prep = mkPrep "با";
|
||||||
-- yes_Phr = ss "بله" ;
|
-- yes_Phr = ss "بله" ;
|
||||||
yes_Utt = ss "بله" ;
|
yes_Utt = ss "بله" ;
|
||||||
youSg_Pron = personalPN "تو" Sg PPers2 ;
|
youSg_Pron = R.agr2pron ! Ag Sg P2 ;
|
||||||
youPl_Pron = personalPN "شما" Pl PPers2 ;
|
youPl_Pron = R.agr2pron ! Ag Pl P2 ;
|
||||||
youPol_Pron = personalPN "شما" Pl PPers2 ;
|
youPol_Pron = R.agr2pron ! Ag Pl P2 ;
|
||||||
-- no_Quant = demoPN "هیچ" ;
|
-- no_Quant = demoPN "هیچ" ;
|
||||||
not_Predet = {s="نه"} ;
|
not_Predet = {s="نه"} ;
|
||||||
if_then_Conj = sd2 "اگر" "آنگاه" ** {n = Sg} ;
|
if_then_Conj = sd2 "اگر" "آنگاه" ** {n = Sg} ;
|
||||||
at_least_AdN = ss "حداقل" ;
|
at_least_AdN = ss "حداقل" ;
|
||||||
at_most_AdN = ss "حداکثر";
|
at_most_AdN = ss "حداکثر";
|
||||||
-- nothing_NP = MassNP (UseN (MorphoPnb.mkN11 "هیچ چیز" ));
|
nothing_NP = R.indeclNP "هیچ" ;
|
||||||
except_Prep = ss ["به جز"] ;
|
except_Prep = mkPrep ["به جز"] ;
|
||||||
-- nobody_NP = MassNP (UseN (MorphoPnb.mkN11 "هیچ کس"));
|
nobody_NP = R.indeclNP "هیچ کس";
|
||||||
|
|
||||||
as_CAdv = {s = ["به اندازه ی"] ; p = ""} ;
|
as_CAdv = {s = ["به اندازه ی"] ; p = ""} ;
|
||||||
|
|
||||||
@@ -132,126 +118,21 @@ concrete StructuralPes of Structural = CatPes **
|
|||||||
|
|
||||||
---- AR from Nasrin
|
---- AR from Nasrin
|
||||||
|
|
||||||
have_V2 = {
|
-- have_V2: "have" as an independent verb.
|
||||||
|
-- MorphoPes.haveVerb: "have" as auxiliary.
|
||||||
|
have_V2 = haveVerb ** {
|
||||||
s = table {
|
s = table {
|
||||||
(VF Pos (PPresent2 PrPerf) PPers1 Sg) => "داشته ام" ;
|
VImp Pos Sg => "داشته باش" ;
|
||||||
(VF Pos (PPresent2 PrPerf) PPers1 Pl) => "داشته ایم" ;
|
VImp Pos Pl => "داشته باشید" ;
|
||||||
(VF Pos (PPresent2 PrPerf) PPers2 Sg) => "داشته ای" ;
|
VImp Neg Sg => "نداشته باش" ;
|
||||||
(VF Pos (PPresent2 PrPerf) PPers2 Pl) => "داشته اید" ;
|
VImp Neg Pl => "نداشته باشید" ;
|
||||||
(VF Pos (PPresent2 PrPerf) PPers3 Sg) => "داشته است" ;
|
VSubj _ (Ag Sg P1) => "داشته باشم" ;
|
||||||
(VF Pos (PPresent2 PrPerf) PPers3 Pl) => "داشته اند" ;
|
VSubj _ (Ag Sg P2) => "داشته باشی" ;
|
||||||
(VF Pos (PPresent2 PrImperf) PPers1 Sg) => "دارم" ;
|
VSubj _ (Ag Sg P3) => "داشته باشد" ;
|
||||||
(VF Pos (PPresent2 PrImperf) PPers1 Pl) => "داریم" ;
|
VSubj _ (Ag Pl P1) => "داشته باشیم" ;
|
||||||
(VF Pos (PPresent2 PrImperf) PPers2 Sg) => " داری" ;
|
VSubj _ (Ag Pl P2) => "داشته باشید" ;
|
||||||
(VF Pos (PPresent2 PrImperf) PPers2 Pl) => "دارید" ;
|
VSubj _ (Ag Pl P3) => "داشته باشند" ;
|
||||||
(VF Pos (PPresent2 PrImperf) PPers3 Sg) => "دارد" ;
|
x => haveVerb.s ! x } ;
|
||||||
(VF Pos (PPresent2 PrImperf) PPers3 Pl) => "دارند" ;
|
c2 = prepOrRa [] -- "را" ; ---- AR 18/9/2017: usually no ra acc. to Nasrin, but this is tricky
|
||||||
(VF Pos (PPast2 PstPerf) PPers1 Sg) => "داشته بودم" ;
|
|
||||||
(VF Pos (PPast2 PstPerf) PPers1 Pl) => "داشته بودیم" ;
|
|
||||||
(VF Pos (PPast2 PstPerf) PPers2 Sg) => "داشته بودی" ;
|
|
||||||
(VF Pos (PPast2 PstPerf) PPers2 Pl) => "داشته بودید" ;
|
|
||||||
(VF Pos (PPast2 PstPerf) PPers3 Sg) => "داشته بود" ;
|
|
||||||
(VF Pos (PPast2 PstPerf) PPers3 Pl) => "داشته بودند" ;
|
|
||||||
(VF Pos (PPast2 PstImperf) PPers1 Sg) => "می داشتم" ;
|
|
||||||
(VF Pos (PPast2 PstImperf) PPers1 Pl) => "می داشتیم" ;
|
|
||||||
(VF Pos (PPast2 PstImperf) PPers2 Sg) => "می داشتی" ;
|
|
||||||
(VF Pos (PPast2 PstImperf) PPers2 Pl) => "می داشتید" ;
|
|
||||||
(VF Pos (PPast2 PstImperf) PPers3 Sg) => "می داشت" ;
|
|
||||||
(VF Pos (PPast2 PstImperf) PPers3 Pl) => "می داشتند" ;
|
|
||||||
(VF Pos (PPast2 PstAorist) PPers1 Sg) => "داشتم" ;
|
|
||||||
(VF Pos (PPast2 PstAorist) PPers1 Pl) => "داشتیم" ;
|
|
||||||
(VF Pos (PPast2 PstAorist) PPers2 Sg) => "داشتی" ;
|
|
||||||
(VF Pos (PPast2 PstAorist) PPers2 Pl) => "داشتید" ;
|
|
||||||
(VF Pos (PPast2 PstAorist) PPers3 Sg) => "داشت" ;
|
|
||||||
(VF Pos (PPast2 PstAorist) PPers3 Pl) => "داشتند" ;
|
|
||||||
(VF Pos (PFut2 FtAorist) PPers1 Sg) => "خواهم داشت" ;
|
|
||||||
(VF Pos (PFut2 FtAorist) PPers1 Pl) => "خواهیم داشت" ;
|
|
||||||
(VF Pos (PFut2 FtAorist) PPers2 Sg) => "خواهی داشت" ;
|
|
||||||
(VF Pos (PFut2 FtAorist) PPers2 Pl) => "خواهید داشت" ;
|
|
||||||
(VF Pos (PFut2 FtAorist) PPers3 Sg) => "خواهد داشت" ;
|
|
||||||
(VF Pos (PFut2 FtAorist) PPers3 Pl) => "خواهند داشت" ;
|
|
||||||
(VF Pos (Infr_Past2 InfrPerf) PPers1 Sg) => "داشته بوده ام" ;
|
|
||||||
(VF Pos (Infr_Past2 InfrPerf) PPers1 Pl) => "داشته بوده ایم" ;
|
|
||||||
(VF Pos (Infr_Past2 InfrPerf) PPers2 Sg) => "داشته بوده ای" ;
|
|
||||||
(VF Pos (Infr_Past2 InfrPerf) PPers2 Pl) => "داشته بوده اید" ;
|
|
||||||
(VF Pos (Infr_Past2 InfrPerf) PPers3 Sg) => "داشته بوده است" ;
|
|
||||||
(VF Pos (Infr_Past2 InfrPerf) PPers3 Pl) => "داشته بوده اند" ;
|
|
||||||
(VF Pos (Infr_Past2 InfrImperf) PPers1 Sg) => "می داشته ام" ;
|
|
||||||
(VF Pos (Infr_Past2 InfrImperf) PPers1 Pl) => "می داشته ایم" ;
|
|
||||||
(VF Pos (Infr_Past2 InfrImperf) PPers2 Sg) => "می داشته ای" ;
|
|
||||||
(VF Pos (Infr_Past2 InfrImperf) PPers2 Pl) => "می داشته اید" ;
|
|
||||||
(VF Pos (Infr_Past2 InfrImperf) PPers3 Sg) => "می داشته است" ;
|
|
||||||
(VF Pos (Infr_Past2 InfrImperf) PPers3 Pl) => "می داشته اند" ;
|
|
||||||
(VF Neg (PPresent2 PrPerf) PPers1 Sg) => "نداشته ام" ;
|
|
||||||
(VF Neg (PPresent2 PrPerf) PPers1 Pl) => "نداشته ایم" ;
|
|
||||||
(VF Neg (PPresent2 PrPerf) PPers2 Sg) => "نداشته ای" ;
|
|
||||||
(VF Neg (PPresent2 PrPerf) PPers2 Pl) => "نداشته اید" ;
|
|
||||||
(VF Neg (PPresent2 PrPerf) PPers3 Sg) => "نداشته است" ;
|
|
||||||
(VF Neg (PPresent2 PrPerf) PPers3 Pl) => "نداشته اند" ;
|
|
||||||
(VF Neg (PPresent2 PrImperf) PPers1 Sg) => "ندارم" ;
|
|
||||||
(VF Neg (PPresent2 PrImperf) PPers1 Pl) => "نداریم" ;
|
|
||||||
(VF Neg (PPresent2 PrImperf) PPers2 Sg) => "نداری" ;
|
|
||||||
(VF Neg (PPresent2 PrImperf) PPers2 Pl) => "ندارید" ;
|
|
||||||
(VF Neg (PPresent2 PrImperf) PPers3 Sg) => "ندارد" ;
|
|
||||||
(VF Neg (PPresent2 PrImperf) PPers3 Pl) => "ندارند" ;
|
|
||||||
(VF Neg (PPast2 PstPerf) PPers1 Sg) => "نداشته بودم" ;
|
|
||||||
(VF Neg (PPast2 PstPerf) PPers1 Pl) => "نداشته بودیم" ;
|
|
||||||
(VF Neg (PPast2 PstPerf) PPers2 Sg) => "نداشته بودی" ;
|
|
||||||
(VF Neg (PPast2 PstPerf) PPers2 Pl) => "نداشته بودید" ;
|
|
||||||
(VF Neg (PPast2 PstPerf) PPers3 Sg) => "نداشته بود" ;
|
|
||||||
(VF Neg (PPast2 PstPerf) PPers3 Pl) => "نداشته بودند" ;
|
|
||||||
(VF Neg (PPast2 PstImperf) PPers1 Sg) => "نمی داشتم" ;
|
|
||||||
(VF Neg (PPast2 PstImperf) PPers1 Pl) => "نمی داشتیم" ;
|
|
||||||
(VF Neg (PPast2 PstImperf) PPers2 Sg) => "نمی داشتی" ;
|
|
||||||
(VF Neg (PPast2 PstImperf) PPers2 Pl) => "نمی داشتید" ;
|
|
||||||
(VF Neg (PPast2 PstImperf) PPers3 Sg) => "نمی داشت" ;
|
|
||||||
(VF Neg (PPast2 PstImperf) PPers3 Pl) => "نمی داشتند" ;
|
|
||||||
(VF Neg (PPast2 PstAorist) PPers1 Sg) => "نداشتم" ;
|
|
||||||
(VF Neg (PPast2 PstAorist) PPers1 Pl) => "نداشتیم" ;
|
|
||||||
(VF Neg (PPast2 PstAorist) PPers2 Sg) => "نداشتی" ;
|
|
||||||
(VF Neg (PPast2 PstAorist) PPers2 Pl) => "نداشتید" ;
|
|
||||||
(VF Neg (PPast2 PstAorist) PPers3 Sg) => "نداشت" ;
|
|
||||||
(VF Neg (PPast2 PstAorist) PPers3 Pl) => "نداشتند" ;
|
|
||||||
(VF Neg (PFut2 FtAorist) PPers1 Sg) => "نخواهم داشت" ;
|
|
||||||
(VF Neg (PFut2 FtAorist) PPers1 Pl) => "نخواهیم داشت" ;
|
|
||||||
(VF Neg (PFut2 FtAorist) PPers2 Sg) => "نخواهی داشت" ;
|
|
||||||
(VF Neg (PFut2 FtAorist) PPers2 Pl) => "نخواهید داشت" ;
|
|
||||||
(VF Neg (PFut2 FtAorist) PPers3 Sg) => "نخواهد داشت" ;
|
|
||||||
(VF Neg (PFut2 FtAorist) PPers3 Pl) => "نخواهند داشت" ;
|
|
||||||
(VF Neg (Infr_Past2 InfrPerf) PPers1 Sg) => "نداشته بوده ام" ;
|
|
||||||
(VF Neg (Infr_Past2 InfrPerf) PPers1 Pl) => "نداشته بوده ایم" ;
|
|
||||||
(VF Neg (Infr_Past2 InfrPerf) PPers2 Sg) => "نداشته بوده ای" ;
|
|
||||||
(VF Neg (Infr_Past2 InfrPerf) PPers2 Pl) => "نداشته بوده اید" ;
|
|
||||||
(VF Neg (Infr_Past2 InfrPerf) PPers3 Sg) => "نداشته بوده است" ;
|
|
||||||
(VF Neg (Infr_Past2 InfrPerf) PPers3 Pl) => "نداشته بوده اند" ;
|
|
||||||
(VF Neg (Infr_Past2 InfrImperf) PPers1 Sg) => "نمی داشته ام" ;
|
|
||||||
(VF Neg (Infr_Past2 InfrImperf) PPers1 Pl) => "نمی داشته ایم" ;
|
|
||||||
(VF Neg (Infr_Past2 InfrImperf) PPers2 Sg) => "نمی داشته ای" ;
|
|
||||||
(VF Neg (Infr_Past2 InfrImperf) PPers2 Pl) => "نمی داشته اید" ;
|
|
||||||
(VF Neg (Infr_Past2 InfrImperf) PPers3 Sg) => "نمی داشته است" ;
|
|
||||||
(VF Neg (Infr_Past2 InfrImperf) PPers3 Pl) => "نمی داشته اند" ;
|
|
||||||
(Vvform (AgPes Sg PPers1)) => "بدارم" ;
|
|
||||||
(Vvform (AgPes Sg PPers2)) => "بداری" ;
|
|
||||||
(Vvform (AgPes Sg PPers3)) => "بدارد" ;
|
|
||||||
(Vvform (AgPes Pl PPers1)) => "بداریم" ;
|
|
||||||
(Vvform (AgPes Pl PPers2)) => "بدارید" ;
|
|
||||||
(Vvform (AgPes Pl PPers3)) => "بدارند" ;
|
|
||||||
(R.Imp Pos Sg) => "بدار" ;
|
|
||||||
(R.Imp Pos Pl) => "بدارید" ;
|
|
||||||
(R.Imp Neg Sg) => "ندار" ;
|
|
||||||
(R.Imp Neg Pl) => "ندارید" ;
|
|
||||||
Inf => "داشتن" ;
|
|
||||||
Root1 => "داشت" ;
|
|
||||||
Root2 => "دار"
|
|
||||||
} ;
|
} ;
|
||||||
c2 = {
|
|
||||||
s = [] ;
|
|
||||||
ra = [] ; --- "را" ; ---- AR 18/9/2017: usually no ra acc. to Nasrin, but this is tricky
|
|
||||||
c = R.VTrans
|
|
||||||
}
|
|
||||||
} ;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -10,25 +10,22 @@ concrete SymbolPes of Symbol = CatPes ** open Prelude, ResPes in {
|
|||||||
IntPN i = {s = i.s ; animacy = Inanimate} ;
|
IntPN i = {s = i.s ; animacy = Inanimate} ;
|
||||||
FloatPN i = {s = i.s ; animacy = Inanimate} ;
|
FloatPN i = {s = i.s ; animacy = Inanimate} ;
|
||||||
NumPN i = {s = i.s ; animacy = Inanimate} ;
|
NumPN i = {s = i.s ; animacy = Inanimate} ;
|
||||||
CNIntNP cn i = {
|
CNIntNP cn i = emptyNP ** cn ** {
|
||||||
s = \\ez => cn.s ! aEzafa ! Sg ++ i.s ;
|
s = \\ez => cn.s ! Sg ! Ezafe ++ i.s ++ cn.compl ! Sg ;
|
||||||
a = agrPesP3 Sg ;
|
a = agrP3 Sg
|
||||||
animacy = cn.animacy
|
|
||||||
} ;
|
} ;
|
||||||
CNSymbNP det cn xs = {
|
CNSymbNP det cn xs = emptyNP ** cn ** {
|
||||||
s = \\ez => det.s ++ cn.s ! aEzafa ! det.n ++ xs.s ;
|
s = \\ez => det.s ++ cn.s ! det.n ! Ezafe ++ xs.s ++ cn.compl ! det.n ;
|
||||||
a = agrPesP3 det.n ;
|
a = agrP3 det.n
|
||||||
animacy = cn.animacy
|
|
||||||
} ;
|
} ;
|
||||||
CNNumNP cn i = {
|
CNNumNP cn i = emptyNP ** cn ** {
|
||||||
s = \\ez => cn.s ! aEzafa ! Sg ++ i.s ;
|
s = \\ez => cn.s ! Sg ! Ezafe ++ i.s ++ cn.compl ! Sg ;
|
||||||
a = agrPesP3 Sg ;
|
a = agrP3 Sg ;
|
||||||
animacy = cn.animacy
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
SymbS sy = sy ;
|
SymbS sy = {s = \\_ => sy.s} ;
|
||||||
SymbNum sy = { s = sy.s ; n = Pl } ;
|
SymbNum sy = { s = sy.s ; n = Pl } ;
|
||||||
SymbOrd sy = { s = sy.s ++ "wN" ; n = Pl} ;
|
SymbOrd sy = { s = sy.s ++ "wN" ; n = Pl; isNum,isPre=False} ;
|
||||||
|
|
||||||
lincat
|
lincat
|
||||||
|
|
||||||
@@ -40,12 +37,6 @@ lin
|
|||||||
BaseSymb = infixSS "تE" ;
|
BaseSymb = infixSS "تE" ;
|
||||||
ConsSymb = infixSS "" ;
|
ConsSymb = infixSS "" ;
|
||||||
|
|
||||||
--oper
|
-- TODO: what are wN and تE? /IL
|
||||||
-- Note: this results in a space before 's, but there's
|
|
||||||
-- not mauch we can do about that.
|
|
||||||
-- addGenitiveS : Str ;
|
|
||||||
-- addGenitiveS s =
|
|
||||||
-- s ++ "از" ;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,49 +1,76 @@
|
|||||||
concrete VerbPes of Verb = CatPes ** open ResPes in {
|
concrete VerbPes of Verb = CatPes ** open ResPes,Prelude in {
|
||||||
|
|
||||||
flags coding = utf8;
|
flags coding = utf8;
|
||||||
flags optimize=all_subs ;
|
flags optimize=all_subs ;
|
||||||
|
|
||||||
lin
|
lin
|
||||||
UseV v = predV v ;
|
UseV = predV ;
|
||||||
SlashV2a v = predV v ** {c2 = {s = v.c2.s ; ra = v.c2.ra ; c = VTrans}} ;
|
SlashV2a v = predVc v;
|
||||||
Slash2V3 v np =
|
Slash2V3 v np = vs v.c3 **
|
||||||
insertObjc (\\_ => np.s ! NPC bEzafa ++ v.c2 ) (predV v ** {c2 = {s = [] ; ra = v.c3 ; c = VTrans}}) ;
|
complSlash (predVc v ** {c2 = v.c2}) np ;
|
||||||
|
Slash3V3 v np = vs v.c2 **
|
||||||
|
complSlash (predVc v ** {c2 = v.c3}) np ;
|
||||||
|
ComplSlash = complSlash ;
|
||||||
|
|
||||||
Slash3V3 v np =
|
ComplVV = insertVV ;
|
||||||
insertObjc (\\_ => v.c3 ++ np.s ! NPC bEzafa) (predV v ** {c2 = {s = [] ; ra = v.c2 ; c = VTrans}}) ;
|
ComplVS v s = embComp (conjThat ++ s.s ! Indic) (predV v) ;
|
||||||
|
ComplVQ v q = embComp (conjThat ++ q.s) (predV v) ;
|
||||||
|
ComplVA v ap = insertObj (appComp v.c2 ap.s) (predV v) ; -- check form of adjective
|
||||||
|
|
||||||
ComplVV v vp = insertVV (infVV v.isAux vp).s (predV v) ;
|
SlashVV vv vps = vps ** ComplVV vv vps ;
|
||||||
ComplVS v s = insertObj2 (conjThat ++ s.s) (predV v) ;
|
SlashV2S v s = predVc v ** embComp (conjThat ++ s.s ! Indic) (predV v) ;
|
||||||
ComplVQ v q = insertObj2 (conjThat ++ q.s ! QIndir) (predV v) ;
|
SlashV2Q v q = predVc v ** embComp q.s (predV v) ;
|
||||||
ComplVA v ap = insertObj (\\_ => ap.s ! bEzafa) (predV v) ; -- check form of adjective
|
SlashV2A v ap = predVc v ** insertObj (appComp v.c2 ap.s) (predV v) ; ---- paint it red , check form of adjective
|
||||||
SlashV2V v vp = insertVV (infVV v.isAux vp).s (predV v) **{c2 = {s = v.c1 ; ra = [] ; c = VTransPost}} ;
|
|
||||||
|
|
||||||
SlashV2S v s = insertObjc2 (conjThat ++ s.s) (predV v ** {c2 = {s = v.c2.s ;ra = [] ; c = VTransPost}}) ;
|
-- : V2V -> VP -> VPSlash ; -- beg (her) to go
|
||||||
SlashV2Q v q = insertObjc2 ( q.s ! QIndir) (predV v ** {c2 = {s = v.c2.s ; ra = [] ;c = VTransPost}}) ;
|
SlashV2V v2v vp = predVc v2v ** {
|
||||||
SlashV2A v ap = insertObjc3 ( ap.s ! bEzafa) (predV v ** {c2 = {s = [] ; ra = v.c2.ra ;c = VTransPost}}) ; ---- paint it red , check form of adjective
|
agrObj = \\agr => if_then_Str v2v.isAux conjThat []
|
||||||
|
++ showVPH (case v2v.compl of {
|
||||||
|
Subj => VSubj Pos agr ;
|
||||||
|
Indic => VAor Pos agr })
|
||||||
|
agr -- this will agree with the object added by ComplSlash
|
||||||
|
vp ;
|
||||||
|
c2 = v2v.c2 ; -- preposition for the direct object comes from V2V
|
||||||
|
} ;
|
||||||
|
|
||||||
ComplSlash vp np = insertObjPre (\\_ => np.s ! NPC bEzafa ) vp ;
|
-- : V2V -> NP -> VPSlash -> VPSlash ; -- beg me to buy
|
||||||
SlashVV vv vp =
|
SlashV2VNP v2v np vps = predVc v2v ** {
|
||||||
-- insertObj (infVV vv.isAux vp).s (predV vv) **
|
comp = \\a => if_then_Str v2v.isAux conjThat [] -- that
|
||||||
insertVV (infVV vv.isAux vp).s (predV vv) **
|
++ appComp v2v.c2 np.s ; -- I
|
||||||
{c2 = vp.c2} ;
|
-- ∅ is placed in comp
|
||||||
SlashV2VNP vv np vp =
|
vComp = \\_,_ => showVPH (case v2v.compl of { -- buy
|
||||||
insertObjPre (\\_ => np.s ! NPC bEzafa )
|
Subj => VSubj Pos np.a ;
|
||||||
-- (insertObjc (infVV vv.isAux vp).s (predVc vv)) **
|
Indic => VAor Pos np.a })
|
||||||
(insertVVc (infVV vv.isAux vp).s (predVc vv)) **
|
np.a -- agreement fixed to np.a
|
||||||
{c2 = vp.c2} ;
|
<vps : VPH> ;
|
||||||
|
c2 = vps.c2 -- preposition for the direct object comes from VPSlash
|
||||||
|
} ;
|
||||||
|
|
||||||
|
-- : VP -> Prep -> VPSlash ;
|
||||||
|
VPSlashPrep vp prep = vp ** vs prep ;
|
||||||
|
|
||||||
UseComp comp = insertObj comp.s (predAux auxBe) ;
|
|
||||||
|
|
||||||
AdvVP vp adv = insertAdV adv.s vp ;
|
AdvVP vp adv = insertAdV adv.s vp ;
|
||||||
|
|
||||||
AdVVP adv vp = insertAdV adv.s vp ;
|
AdVVP adv vp = insertAdV adv.s vp ;
|
||||||
ReflVP v = insertObjPre (\\a => reflPron ! a) v ;
|
ReflVP v = insertCompPre reflPron v ;
|
||||||
PassV2 v = predV v ; -- need to be fixed
|
PassV2 v = predV v ; -- need to be fixed
|
||||||
CompAP ap ={s = \\_ => ap.s ! bEzafa} ; -- check form of adjective
|
|
||||||
CompNP np = {s = \\a => np.s ! NPC bEzafa} ;
|
|
||||||
CompAdv adv = {s = \\_ => adv.s } ;
|
|
||||||
CompCN cn = {s = \\a => cn.s ! bEzafa ! giveNumber a } ;
|
|
||||||
|
|
||||||
|
UseComp comp = insertComp comp.s (predV beVerb) ;
|
||||||
|
CompAP ap = {s = \\_ => ap.s ! Bare} ; -- check form of adjective
|
||||||
|
CompAdv adv = {s = \\_ => adv.s } ;
|
||||||
|
|
||||||
|
-- see https://sites.la.utexas.edu/persian_online_resources/nouns/noun-in-a-predicative-position/
|
||||||
|
CompCN cn = {
|
||||||
|
s = \\a => cn.s ! giveNumber a
|
||||||
|
! case cn.hasAdj of {
|
||||||
|
False => Bare ;
|
||||||
|
True => Clitic }
|
||||||
|
} ;
|
||||||
|
|
||||||
|
CompNP np = {
|
||||||
|
s = \\a => np.s ! case np.hasAdj of {
|
||||||
|
False => Bare ;
|
||||||
|
True => Clitic }
|
||||||
|
} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,48 +0,0 @@
|
|||||||
concrete AdjectivePes of Adjective = CatPes ** open ResPes, Prelude in {
|
|
||||||
|
|
||||||
flags coding = utf8;
|
|
||||||
lin
|
|
||||||
|
|
||||||
PositA a = a ;
|
|
||||||
UseComparA a = a;
|
|
||||||
|
|
||||||
ComparA a np = {
|
|
||||||
s =\\ez => a.s ! ez ++ "tr" ++ "Az" ++ np.s ! NPC bEzafa ;
|
|
||||||
adv = a.adv
|
|
||||||
} ;
|
|
||||||
|
|
||||||
---- $SuperlA$ belongs to determiner syntax in $Noun$.
|
|
||||||
|
|
||||||
ComplA2 a np = {
|
|
||||||
s =\\ez => np.s ! NPC bEzafa ++ a.c2 ++ a.s ! ez ;
|
|
||||||
adv = a.adv
|
|
||||||
} ;
|
|
||||||
|
|
||||||
ReflA2 a = {
|
|
||||||
s =\\ez => a.s ! ez ++ "" ; -- need to be fixed
|
|
||||||
adv = a.adv
|
|
||||||
} ;
|
|
||||||
|
|
||||||
SentAP ap sc = {
|
|
||||||
s =\\ez => ap.s! ez ++ sc.s ;
|
|
||||||
adv = ap.adv
|
|
||||||
} ;
|
|
||||||
|
|
||||||
AdAP ada ap = {
|
|
||||||
s =\\ez => ada.s ++ ap.s ! ez ;
|
|
||||||
adv = ap.adv
|
|
||||||
} ;
|
|
||||||
|
|
||||||
UseA2 a = a ;
|
|
||||||
|
|
||||||
CAdvAP cadv ap np = {
|
|
||||||
s =\\ez => cadv.s ++ np.s ! NPC bEzafa ++ ap.s ! ez ;
|
|
||||||
adv = ap.adv
|
|
||||||
};
|
|
||||||
|
|
||||||
AdjOrd ord = { s =\\_ => ord.s ; adv = ""};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
AdvAP ap adv = {s =\\ez => ap.s ! ez ++ adv.s ; adv = ap.adv};
|
|
||||||
}
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
concrete AdverbPes of Adverb = CatPes ** open ResPes, Prelude in {
|
|
||||||
|
|
||||||
flags coding = utf8;
|
|
||||||
lin
|
|
||||||
-- PositAdvAdj a = {s = a.s ! bEzafa } ;
|
|
||||||
PositAdvAdj a = {s = a.adv } ;
|
|
||||||
ComparAdvAdj cadv a np = {
|
|
||||||
s = a.adv ++ cadv.p ++ cadv.s ++ np.s ! NPC bEzafa ;
|
|
||||||
} ;
|
|
||||||
ComparAdvAdjS cadv a s = {
|
|
||||||
s = a.adv ++ cadv.p ++ cadv.s ++ s.s;
|
|
||||||
} ;
|
|
||||||
|
|
||||||
PrepNP prep np = {s = prep.s ++ np.s ! NPC bEzafa } ;
|
|
||||||
|
|
||||||
AdAdv ada adv = { s = ada.s ++ adv.s} ;
|
|
||||||
|
|
||||||
-- SubjS = cc2 ;
|
|
||||||
SubjS sub snt = {s = sub.s ++ "kh" ++ snt.s } ;
|
|
||||||
AdnCAdv cadv = {s = cadv.s ++ "Az"} ;
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
concrete IdiomPes of Idiom = CatPes ** open Prelude,Predef, ResPes in {
|
|
||||||
|
|
||||||
flags optimize=all_subs ;
|
|
||||||
flags coding = utf8;
|
|
||||||
|
|
||||||
lin
|
|
||||||
|
|
||||||
ImpersCl vp = mkSClause " " (agrPesP3 Sg) vp ;
|
|
||||||
GenericCl vp = mkSClause "A:dm" (agrPesP3 Sg) vp ;
|
|
||||||
|
|
||||||
CleftNP np rs =
|
|
||||||
let cl = mkSClause (np.s ! NPC bEzafa) (np.a) (predAux auxBe);
|
|
||||||
in
|
|
||||||
{s = \\t,p,o => cl.s ! t ! p ! o ++ rs.s ! np.a };
|
|
||||||
|
|
||||||
CleftAdv ad ss = { s = \\t,b,o => ad.s ++ ss.s};
|
|
||||||
|
|
||||||
ExistNP np =
|
|
||||||
mkSClause " " (agrPesP3 (fromAgr np.a).n)
|
|
||||||
(insertObj (\\_ => np.s ! NPC bEzafa) (predAux auxBe)) ;
|
|
||||||
|
|
||||||
ExistIP ip =
|
|
||||||
let cl = mkSClause ( ip.s ) (agrPesP3 ip.n) (predAux auxBe);
|
|
||||||
in {
|
|
||||||
s = \\t,p,qf => case qf of {
|
|
||||||
QDir => cl.s ! t ! p ! ODir;
|
|
||||||
QIndir => cl.s ! t! p ! ODir
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
-- ProgrVP vp = insertObj (\\a => vp.obj.s ++ vp.ad ++ vp.comp ! a ++ (vp.s ! VPStem).inf ++ raha (fromAgr a).g (fromAgr a).n ) (predAux auxBe) ;
|
|
||||||
ProgrVP vp = (predProg vp) ;
|
|
||||||
|
|
||||||
|
|
||||||
ImpPl1 vp = {s = "byAyyd" ++ (vp.s ! VVForm (agrPesP1 Pl)).inf} ;
|
|
||||||
ImpP3 np vp = {s = "bgWAryd" ++ np.s!NPC bEzafa ++ (vp.s ! VVForm (AgPes (fromAgr np.a).n (fromAgr np.a).p)).inf};
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,374 +0,0 @@
|
|||||||
--# -path=.:prelude:alltenses
|
|
||||||
|
|
||||||
concrete LexiconPes of Lexicon = CatPes **
|
|
||||||
--open ResPnb, Prelude in {
|
|
||||||
open ParadigmsPes,MorphoPes, Prelude in {
|
|
||||||
|
|
||||||
flags
|
|
||||||
optimize=values ;
|
|
||||||
coding = utf8;
|
|
||||||
|
|
||||||
lin
|
|
||||||
|
|
||||||
airplane_N = mkN01 "hvApymA" inanimate ;
|
|
||||||
answer_V2S = mkV2 (compoundV "jvAb" (mkV "dAdn" "dh")) "bh" False;
|
|
||||||
apartment_N = mkN01 "A:pArtmAn" inanimate;
|
|
||||||
apple_N = mkN01 "syb" inanimate;
|
|
||||||
art_N = mkN01 "hnr" inanimate;
|
|
||||||
ask_V2Q = mkV2 (mkV_1 "prsydn") "Az" False;
|
|
||||||
baby_N = mkN01 "bc^h" animate; -- has variant "kvdk"
|
|
||||||
bad_A = mkA "bd" ;
|
|
||||||
bank_N = mkN01 "bAnk" inanimate;
|
|
||||||
beautiful_A = mkA "zybA" ;
|
|
||||||
become_VA = mkV "Cdn" "Cv";
|
|
||||||
beer_N = mkN01 "A:bjv" inanimate;
|
|
||||||
beg_V2V = mkV2V (compoundV "KvAhC" (mkV "krdn" "kn")) "Az" "" False;
|
|
||||||
big_A = mkA "bzrg" ;
|
|
||||||
bike_N = mkN01 "dvc^rKh" inanimate;
|
|
||||||
bird_N = mkN02 "prndh" animate;
|
|
||||||
black_A = mkA "syAh" ;
|
|
||||||
blue_A = mkA "A:by" ;
|
|
||||||
boat_N = mkN01 "qAyq" inanimate;
|
|
||||||
book_N = mkN01 "ktAb" inanimate;
|
|
||||||
boot_N = mkN01 "c^kmh" inanimate; -- has variant "pvtyn"
|
|
||||||
boss_N = mkN02 "kArfrmA" animate;
|
|
||||||
boy_N = mkN02 "psr" animate;
|
|
||||||
bread_N = mkN01 "nAn" inanimate;
|
|
||||||
break_V2 = mkV2 (mkV "Ckstn" "Ckn") "rA";
|
|
||||||
broad_A = mkA "vsyc" ;
|
|
||||||
brother_N2 = (mkN01 "brAdr" animate) ** {c=""};
|
|
||||||
brown_A = mkA ["qhvh Ay"] ;
|
|
||||||
butter_N = mkN01 "krh" inanimate;
|
|
||||||
buy_V2 = mkV2 (mkV_1 "Krydn") "rA";
|
|
||||||
camera_N = mkN01 "dvrbyn" inanimate;
|
|
||||||
cap_N = mkCmpdNoun1 "klAh" (mkN01 "kp" animate);
|
|
||||||
car_N = mkN01 "mACyn" inanimate; -- has variant "Atvmbyl"
|
|
||||||
carpet_N = mkN01 "frC" inanimate;
|
|
||||||
cat_N = mkN01 "grbh" animate;
|
|
||||||
ceiling_N = mkN01 "sqf" inanimate;
|
|
||||||
chair_N = mkN01 "Sndly" inanimate;
|
|
||||||
cheese_N = mkN01 "pnyr" inanimate;
|
|
||||||
child_N = mkN02 "frznd" animate; -- has variant "bc^h"
|
|
||||||
church_N = mkN01 "klysA" inanimate;
|
|
||||||
city_N = mkN01 "Chr" inanimate;
|
|
||||||
clean_A = mkA "tmyz" ;
|
|
||||||
clever_A = mkA "bAhvC" ["bA hvCmndy"];
|
|
||||||
close_V2 = mkV2 (mkV "bstn" "bnd") "rA";
|
|
||||||
coat_N = mkN01 "kt" inanimate;
|
|
||||||
cold_A = mkA "srd" ;
|
|
||||||
come_V = mkV "A:mdn" "A:y" ;
|
|
||||||
computer_N = mkN01 "kAmpyvtr" inanimate; -- also vaiant "rAyAnh"
|
|
||||||
country_N = mkN01 "kCvr" inanimate;
|
|
||||||
|
|
||||||
-- Note: cousin inflects for gender and for being a mother's or a father's relatives in persian
|
|
||||||
-- The following is an example which is the daughter of your mom's brother
|
|
||||||
cousin_N = mkCmpdNoun1 "dKtr" (mkN01 "dAyy" animate);
|
|
||||||
cow_N = mkN01 "gAv" animate;
|
|
||||||
die_V = mkV "mrdn" "myr" ;
|
|
||||||
dirty_A = mkA "kt-yf" ;
|
|
||||||
distance_N3 = (mkN "fASlh" "fvASl" inanimate ) ** {c2="Az" ; c3 = "tA"};
|
|
||||||
doctor_N = mkN01 "dktr" animate; -- has variant "pzCk", but only a doctor in medicine
|
|
||||||
dog_N = mkN01 "sg" animate;
|
|
||||||
door_N = mkN01 "dr" inanimate;
|
|
||||||
drink_V2 = mkV2 (mkV_1 "nvCydn") "rA";
|
|
||||||
-- easy_A2V = mkA "A:sAn" "" ;
|
|
||||||
eat_V2 = mkV2 (mkV_2 "Kvrdn") "rA" ;
|
|
||||||
empty_A = mkA "KAly" ;
|
|
||||||
enemy_N = mkN02 "dCmn" animate;
|
|
||||||
factory_N = mkN01 "kArKAnh" inanimate;
|
|
||||||
father_N2 = (mkN02 "pdr" animate) ** {c=""};
|
|
||||||
fear_VS = mkV_1 "trsydn";
|
|
||||||
find_V2 = mkV2 (compoundV "pydA" (mkV "krdn" "kn") ) "rA";
|
|
||||||
fish_N = mkN01 "mAhy" animate;
|
|
||||||
floor_N = mkN01 "zmyn" inanimate; -- Note: floor in persian can have 3 different translations
|
|
||||||
forget_V2 = mkV2 (compoundV "frAmvC" (mkV "krdn" "kn")) "rA" ;
|
|
||||||
fridge_N = mkN01 "yKc^Al" inanimate;
|
|
||||||
friend_N = mkN02 "dvst" animate;
|
|
||||||
fruit_N = mkN01 "myvh" inanimate;
|
|
||||||
-- fun_AV = mkAV "jAlb" ;
|
|
||||||
garden_N = mkN01 "bAG" inanimate;
|
|
||||||
girl_N = mkN02 "dKtr" animate;
|
|
||||||
glove_N = mkN01 "dstkC" inanimate;
|
|
||||||
gold_N = mkN01 "TlA" inanimate;
|
|
||||||
good_A = mkA "Kvb" ;
|
|
||||||
go_V = mkV "rftn" "rv";
|
|
||||||
green_A = mkA "sbz" ;
|
|
||||||
harbour_N = mkN "bndr" "bnAdr" inanimate;
|
|
||||||
-- hate_V2 = mkV2 (compoundV "mtnfr" (mkToBe "bvdn" "bAC" "hst")) "Az" False; -- needs from/ verb to be
|
|
||||||
hat_N = mkN01 "klAh" inanimate;
|
|
||||||
have_V2 = mkV2 haveVerb "rA" ;
|
|
||||||
hear_V2 = mkV2 (mkV "Cnydn" "Cnv") "rA" ;
|
|
||||||
hill_N = mkN01 "tph" inanimate;
|
|
||||||
-- hope_VS = compoundV "AmydvAr" (mkToBe "bvdn" "bAC" "hst");
|
|
||||||
horse_N = mkN01 "Asb" animate;
|
|
||||||
hot_A = mkA "dAG" ["dAG dAG"] ;
|
|
||||||
house_N = mkN01 "KAnh" inanimate;
|
|
||||||
important_A = mkA "mhm" ["bA Ahmyt"];
|
|
||||||
industry_N = mkN "Snct" "SnAyc" inanimate;
|
|
||||||
iron_N = mkN01 "A:hn" inanimate;
|
|
||||||
king_N = mkN "pAdCAh" "pAdCAhAn" animate;
|
|
||||||
know_V2 = mkV2 (mkV "CnAKtn" "CnAs") "rA";
|
|
||||||
know_VS = (mkV_1 "dAnstn");
|
|
||||||
know_VQ = (mkV_1 "dAnstn") ;
|
|
||||||
lake_N = mkN01 "dryAc^h" inanimate;
|
|
||||||
lamp_N = mkN01 "c^rAG" inanimate; -- also "lAmp", but they have different usage
|
|
||||||
learn_V2 = mkV2 (compoundV "yAd"(mkV "grftn" "gyr")) "rA";
|
|
||||||
leather_N = mkN01 "c^rm" inanimate; -- is uncountable
|
|
||||||
leave_V2 = mkV2 (compoundV "trk"(mkV "krdn" "kn")) "rA";
|
|
||||||
like_V2 = mkV2 (compoundV "dvst" haveVerb) "rA";
|
|
||||||
listen_V2 = mkV2 (compoundV "gvC" (mkV "dAdn" "dh")) "bh" False; -- has a diferent preposition :"bh"
|
|
||||||
live_V = compoundV "zndgy" (mkV "krdn" "kn");
|
|
||||||
long_A = mkA "blnd" ;
|
|
||||||
lose_V2 = mkV2 (compoundV "gm" (mkV "krdn" "kn")) "rA" ;
|
|
||||||
love_N = mkN01 "cCq" inanimate;
|
|
||||||
love_V2 = mkV2 (compoundV "dvst" haveVerb) "rA"; -- also possible: love_V2 = mkV2 (compoundV "cACq" (mkToBe "bvdn" "bAC" "hst"));
|
|
||||||
man_N = mkN02 "mrd" animate;
|
|
||||||
married_A2 = mkA "mtA?hl" "";
|
|
||||||
meat_N = mkN01 "gvCt" inanimate;
|
|
||||||
milk_N = mkN01 "Cyr" inanimate;
|
|
||||||
moon_N = mkN01 "mAh" inanimate; -- is this not a proper noun?
|
|
||||||
mother_N2 = (mkN02 "mAdr" animate) ** {c=""};
|
|
||||||
mountain_N = mkN01 "kvh" inanimate;
|
|
||||||
music_N = mkN "mvsyqy" "mvsyqy" animate;
|
|
||||||
narrow_A = mkA "bAryk" ;
|
|
||||||
new_A = mkA "nv" "tAzh";
|
|
||||||
newspaper_N = mkN01 "rvznAmh" inanimate;
|
|
||||||
oil_N = mkN "nft" "nft" inanimate; -- also "rvGn"
|
|
||||||
old_A = mkA "pyr" "pyrAnh";
|
|
||||||
open_V2 = mkV2 (compoundV "bAz" (mkV "krdn" "kn")) "rA";
|
|
||||||
paint_V2A = mkV2 (compoundV "rng" (mkV "krdn" "kn")) "rA" ;
|
|
||||||
paper_N = mkN01 "kAGW" inanimate;
|
|
||||||
paris_PN = mkPN "pArys" inanimate;
|
|
||||||
peace_N = mkN01 "SlH" inanimate; -- also "A:rAmC"
|
|
||||||
pen_N = mkN01 "qlm" inanimate; -- has variant "KvdkAr"
|
|
||||||
planet_N = mkN01 "syv2Arh" inanimate;
|
|
||||||
plastic_N = mkN01 "plAstyk" inanimate; -- is uncountable
|
|
||||||
play_V2 = mkV2 (mkV "nvAKtn" "nvAz") "rA" ;
|
|
||||||
policeman_N = mkCmpdNoun2 (mkN02 "mA?mvr" animate) "plys";
|
|
||||||
priest_N = mkN01 "kCyC" animate;
|
|
||||||
-- probable_AS = mkAS (regA "mHtml") ;
|
|
||||||
queen_N = mkN01 "mlkh" animate;
|
|
||||||
radio_N = mkN01 "rAdyv" inanimate;
|
|
||||||
rain_V0 = compoundV "bArAn" (mkV "A:mdn" "A:y" ) ;
|
|
||||||
read_V2 = mkV2 (mkV_2 "KvAndn") "rA";
|
|
||||||
red_A = mkA "qrmz" ;
|
|
||||||
religion_N = mkN "mWhb" "mWAhb" inanimate;
|
|
||||||
restaurant_N = mkN01 "rstvrAn" inanimate;
|
|
||||||
river_N = mkN01 "rvdKAnh" inanimate;
|
|
||||||
rock_N = mkN01 "SKrh" inanimate;
|
|
||||||
roof_N = mkN01 "bAm" inanimate; -- has variant "sqf"
|
|
||||||
rubber_N = mkN01 "pAkkn" inanimate; -- also "lAstyk"
|
|
||||||
run_V = mkV_1 "dvydn" ;
|
|
||||||
say_VS = mkV "gftn" "gvy" ;
|
|
||||||
school_N = mkN "mdrsh" "mdArs" inanimate;
|
|
||||||
science_N = mkN "clm" "clvm" inanimate; -- also "dAnC"
|
|
||||||
sea_N = mkN01 "dryA" inanimate;
|
|
||||||
seek_V2 = mkV2 (compoundV "jstjv" (mkV "krdn" "kn")) "rA";
|
|
||||||
see_V2 = mkV2 (mkV "dydn" "byn") "rA" ;
|
|
||||||
sell_V3 = mkV3 (mkV "frvKtn" "frvC") "rA" "bh";
|
|
||||||
send_V3 = mkV3 (mkV_1 "frstAdn") "rA" "brAy";
|
|
||||||
sheep_N = mkN01 "gvsfnd" animate;
|
|
||||||
ship_N = mkN01 "kCty" inanimate;
|
|
||||||
shirt_N = mkN01 "pyrAhn" inanimate;
|
|
||||||
shoe_N = mkN01 "kfC" inanimate;
|
|
||||||
shop_N = mkN01 "frvCgAh" inanimate; -- has variant "mGAzh"
|
|
||||||
short_A = mkA "kvtAh" ;
|
|
||||||
silver_N = mkN "nqrh" ["nqrh jAt"] inanimate; -- add new function which applies + "jAt"
|
|
||||||
sister_N = mkN02 "KvAhr" animate;
|
|
||||||
sleep_V = mkV_1 "KvAbydn" ;
|
|
||||||
small_A = mkA "kvc^k" ;
|
|
||||||
snake_N = mkN01 "mAr" animate;
|
|
||||||
sock_N = mkN01 "jvrAb" inanimate;
|
|
||||||
speak_V2 = mkV2 (compoundV "SHbt" (mkV "krdn" "kn")) "" False;
|
|
||||||
star_N = mkN01 "stArh" animate;
|
|
||||||
steel_N = mkN01 "fvlAd" inanimate; -- also "Astyl"
|
|
||||||
stone_N = mkN01 "sng" inanimate;
|
|
||||||
stove_N = mkN01 "AjAq" inanimate;
|
|
||||||
student_N = mkCmpdNoun1 "dAnC" (mkN02 "A:mvz" animate); -- also "dAnCjv"
|
|
||||||
stupid_A = mkA "Ablh" "AblhAnh" ;
|
|
||||||
sun_N = mkN01 "KvrCyd" inanimate; -- is this not a proper noun?!!!
|
|
||||||
switch8off_V2 = mkV2 (compoundV "KAmvC" (mkV "krdn" "kn")) "rA";
|
|
||||||
switch8on_V2 = mkV2 (compoundV "rvCn" (mkV "krdn" "kn")) "rA";
|
|
||||||
table_N = mkN01 "myz" inanimate;
|
|
||||||
talk_V3 = mkV3 (compoundV "Hrf" (mkV "zdn" "zn")) "bA" [" drbArh y"];
|
|
||||||
teacher_N = mkN02 "mclm" animate;
|
|
||||||
teach_V2 = mkV2 (compoundV "A:mvzC" (mkV "dAdn" "dh")) "rA";
|
|
||||||
television_N = mkN01 "tlvzyvn" inanimate;
|
|
||||||
thick_A = mkA "klft" ;
|
|
||||||
thin_A = mkA "nAzk" ;
|
|
||||||
train_N = mkN01 "qTAr" inanimate;
|
|
||||||
travel_V = compoundV "sfr" (mkV "krdn" "kn");
|
|
||||||
tree_N = mkN02 "drKt" animate;
|
|
||||||
trousers_N = mkN01 "ClvAr" inanimate;
|
|
||||||
ugly_A = mkA "zCt" ;
|
|
||||||
understand_V2 = mkV2 (mkV_1 "fhmydn") "rA";
|
|
||||||
university_N = mkN01 "dAnCgAh" inanimate;
|
|
||||||
village_N = mkN01 "rvstA" inanimate;
|
|
||||||
-- wait_V2 = mkV2 (compoundV "mntZr" (mkVToBe "bvdn" "bAC"));
|
|
||||||
walk_V = compoundV "rAh" (mkV "rftn" "rv");
|
|
||||||
warm_A = mkA "grm" ;
|
|
||||||
war_N = mkN01 "jng" inanimate;
|
|
||||||
-- watch_V2 = mkV2 (compoundV "mrAqb" (mkVToBe "bvdn" "bAC")); -- check harfe rabt!!!
|
|
||||||
water_N = mkN01 "A:b" inanimate;
|
|
||||||
white_A = mkA "sfyd" ;
|
|
||||||
window_N = mkN01 "pnjrh" inanimate;
|
|
||||||
wine_N = mkN01 "CrAb" inanimate;
|
|
||||||
win_V2 = mkV2 (compoundV "brndh" (mkV "Cdn" "Cv")) "rA"; -- also possible with simple verb: mkV_2 "brdn"
|
|
||||||
woman_N = mkN02 "zn" animate;
|
|
||||||
-- wonder_VQ = compoundV "mtcjb" (mkVToBe "bvdn" "bAC") ;
|
|
||||||
wood_N = mkN01 "c^vb" inanimate;
|
|
||||||
write_V2 = mkV2 (mkV "nvCtn" "nvys") "rA" ;
|
|
||||||
yellow_A = mkA "zrd" ;
|
|
||||||
young_A = mkA "jvAn""jvAnAnh" ;
|
|
||||||
do_V2 = mkV2 (compoundV "AnjAm" (mkV "dAdn" "dh")) "rA";
|
|
||||||
now_Adv = ss "HAlA" ;
|
|
||||||
already_Adv = ss "qblAa." ;
|
|
||||||
song_N = mkN01 "A:vAz" inanimate;
|
|
||||||
add_V3 = mkV3 (compoundV "ADAfh" (mkV "krdn" "kn")) "rA" "bh" ;
|
|
||||||
number_N = mkN01 "cdd" inanimate; -- also "tcdAd"
|
|
||||||
put_V2 = mkV2 (mkV "gWACtn" "gWAr") "rA";
|
|
||||||
stop_V = compoundV "tvqf" (mkV "krdn" "kn");
|
|
||||||
jump_V = mkV_1 "prydn";
|
|
||||||
{-
|
|
||||||
left_Ord = {s = "c^p" ; n = singular};
|
|
||||||
right_Ord = {s= "rAst" ; n = singular};
|
|
||||||
-}
|
|
||||||
far_Adv = ss "dvr" ;
|
|
||||||
correct_A = mkA "drst" ;
|
|
||||||
dry_A = mkA "KCk" ["bh KCky"] ;
|
|
||||||
dull_A = mkA ["mlAl A:vr"] ["bh Trzy mlAl A:vr"] ;
|
|
||||||
full_A = mkA "pr" ;
|
|
||||||
heavy_A = mkA "sngyn" ;
|
|
||||||
near_A = mkA "nzdyk" ;
|
|
||||||
rotten_A = mkA "KrAb" ;
|
|
||||||
round_A = mkA "grd" ;
|
|
||||||
sharp_A = mkA "tyz" ;
|
|
||||||
smooth_A = mkA "nrm" ;
|
|
||||||
straight_A = mkA "mstqym" "mstqymAa.";
|
|
||||||
wet_A = mkA "Kys" ;
|
|
||||||
wide_A = mkA "phn" ;
|
|
||||||
animal_N = mkN "HyvAn" "HyvAnAt" animate;
|
|
||||||
ashes_N = mkN01 "KAkstr" inanimate;
|
|
||||||
back_N = mkN01 "kmr" inanimate;
|
|
||||||
bark_N = mkN01 "cvcv" inanimate;
|
|
||||||
belly_N = mkN01 "Ckm" inanimate;
|
|
||||||
blood_N = mkN01 "Kvn" inanimate;
|
|
||||||
bone_N = mkN01 "AstKvAn" inanimate;
|
|
||||||
breast_N = mkN01 "synh" inanimate;
|
|
||||||
cloud_N = mkN01 "Abr" inanimate;
|
|
||||||
day_N = mkN01 "rvz" inanimate;
|
|
||||||
dust_N = mkN01 "GbAr" inanimate;
|
|
||||||
ear_N = mkN01 "gvC" inanimate;
|
|
||||||
earth_N = mkN01 "zmyn" inanimate; -- also "KAk"
|
|
||||||
egg_N = mkCmpdNoun1 "tKm" (mkN01 "mrG" inanimate);
|
|
||||||
eye_N = mkN01 "c^Cm" inanimate ;
|
|
||||||
fat_N = mkN01 "c^rby" inanimate;
|
|
||||||
feather_N = mkN01 "pr" inanimate;
|
|
||||||
fingernail_N = mkN01 "nAKn" inanimate;
|
|
||||||
fire_N = mkN01 "A:tC" inanimate;
|
|
||||||
flower_N = mkN01 "gl" inanimate;
|
|
||||||
fog_N = mkN01 "mh" inanimate;
|
|
||||||
foot_N = mkN01 "pA" inanimate;
|
|
||||||
forest_N = mkN01 "jngl" inanimate;
|
|
||||||
grass_N = mkN01 "c^mn" inanimate;
|
|
||||||
guts_N = mkN01 "ChAmt" inanimate;
|
|
||||||
hair_N = mkN01 "mv" inanimate;
|
|
||||||
hand_N = mkN01 "dst" inanimate;
|
|
||||||
head_N = mkN01 "sr" inanimate;
|
|
||||||
heart_N = mkN01 "qlb" inanimate;
|
|
||||||
horn_N = mkN01 "bvq" inanimate; -- also "CAK"
|
|
||||||
husband_N = mkN02 "Cvhr" animate;
|
|
||||||
ice_N = mkN01 "yK" inanimate;
|
|
||||||
knee_N = mkN01 "zAnv" inanimate;
|
|
||||||
leaf_N = mkN01 "brg" inanimate;
|
|
||||||
leg_N = mkN01 "pA" inanimate;
|
|
||||||
liver_N = mkN01 "rvdKAnh" inanimate;
|
|
||||||
louse_N = mkN01 "CpC" inanimate;
|
|
||||||
mouth_N = mkN01 "dhAn" inanimate;
|
|
||||||
name_N = mkN01 "nAm" inanimate; -- has variant "Asm"
|
|
||||||
neck_N = mkN01 "grdn" inanimate;
|
|
||||||
night_N = mkN01 "Cb" inanimate;
|
|
||||||
nose_N = mkN01 "byny" inanimate;
|
|
||||||
person_N = mkN "CKS" "ACKAS" animate;
|
|
||||||
rain_N = mkN01 "bArAn" inanimate;
|
|
||||||
road_N = mkN01 "jAdh" inanimate;
|
|
||||||
root_N = mkN01 "ryCh" inanimate;
|
|
||||||
rope_N = mkN01 "TnAb" inanimate;
|
|
||||||
salt_N = mkN01 "nmk" inanimate;
|
|
||||||
sand_N = mkN01 "mAsh" inanimate;
|
|
||||||
seed_N = mkN01 "dAnh" inanimate;
|
|
||||||
skin_N = mkN01 "pvst" inanimate;
|
|
||||||
sky_N = mkN01 "A:smAn" inanimate;
|
|
||||||
smoke_N = mkN01 "dvd" inanimate;
|
|
||||||
snow_N = mkN01 "brf" inanimate;
|
|
||||||
stick_N = mkN01 "trkh" inanimate;
|
|
||||||
tail_N = mkN01 "dm" inanimate;
|
|
||||||
tongue_N = mkN01 "zbAn" inanimate;
|
|
||||||
tooth_N = mkN01 "dndAn" inanimate;
|
|
||||||
wife_N = mkN02 "hmsr" animate;
|
|
||||||
wind_N = mkN01 "bAd" inanimate;
|
|
||||||
wing_N = mkN01 "bAl" inanimate;
|
|
||||||
worm_N = mkN01 "krm" inanimate;
|
|
||||||
year_N = mkN01 "sAl" inanimate;
|
|
||||||
blow_V = mkV_1 "dmydn" ;
|
|
||||||
breathe_V = compoundV "nfs" (mkV_1 "kCydn");
|
|
||||||
burn_V = mkV "svKtn" "svz" ;
|
|
||||||
dig_V = mkV_2 "kndn" ;
|
|
||||||
fall_V = mkV_1 "AftAdn" ;
|
|
||||||
-- float_V = compoundV "CnAvr" (mkToBe "bvdn" "bAC" "hst") ;
|
|
||||||
flow_V = compoundV "jAry" (mkV "Cdn" "Cv") ;
|
|
||||||
fly_V = compoundV "prvAz" (mkV "krdn" "kn") ;
|
|
||||||
freeze_V = compoundV "yK" (mkV "zdn" "zn") ;
|
|
||||||
give_V3 = mkV3 (mkV "dAdn" "dh") "rA" "bh";
|
|
||||||
laugh_V = mkV_1 "Kndydn" ;
|
|
||||||
lie_N = mkN01 "drvG" inanimate;
|
|
||||||
lie_V = compoundV "drvG" (mkV "gftn" "gv" );
|
|
||||||
play_V = compoundV "bAzy" (mkV "krdn" "kn");
|
|
||||||
sew_V = mkV "dvKtn" "dvz" ;
|
|
||||||
sing_V = compoundV "A:vAz" (mkV_2 "KvAndn");
|
|
||||||
sit_V = mkV "nCstn" "nCyn" ;
|
|
||||||
smell_V = compoundV "bv" (mkV "dAdn" "dh");
|
|
||||||
spit_V = compoundV "tf" (mkV "krdn" "kn");
|
|
||||||
stand_V = mkV_1 "AystAdn";
|
|
||||||
swell_V = compoundV "vrm" (mkV "krdn" "kn");
|
|
||||||
swim_V = compoundV "CnA" (mkV "krdn" "kn");
|
|
||||||
think_V = compoundV "fkr" (mkV "krdn" "kn");
|
|
||||||
turn_V = mkV_1 "c^rKydn" ;
|
|
||||||
vomit_V = compoundV "AstfrAG" (mkV "krdn" "kn");
|
|
||||||
bite_V2 = mkV2 (compoundV "gAz" (mkV "grftn" "gyr")) "rA";
|
|
||||||
count_V2 = mkV2 (mkV_2 "CmArdn") "rA";
|
|
||||||
cut_V2 = mkV2 (mkV_1 "brydn") ;
|
|
||||||
fear_V2 = mkV2 (mkV_1 "trsydn") "Az";
|
|
||||||
fight_V2 = mkV2 (mkV_1 "jngydn") "bA" False;
|
|
||||||
hit_V2 = mkV2 (compoundV "Drbh" (mkV "zdn" "zn")) "bh" False;
|
|
||||||
hold_V2 = mkV2 (compoundV "ngh" haveVerb) "rA";
|
|
||||||
hunt_V2 = mkV2 (compoundV "CkAr" (mkV "krdn" "kn")) "rA";
|
|
||||||
kill_V2 = mkV2 ( mkV_2 "kCtn") "rA";
|
|
||||||
pull_V2 = mkV2 (mkV_1 "kCydn") "rA";
|
|
||||||
push_V2 = mkV2 (compoundV "hl" (mkV "dAdn" "dh")) "rA" ;
|
|
||||||
rub_V2 = mkV2 (mkV_1 "mAlydn") "rA";
|
|
||||||
scratch_V2 = mkV2 (mkV_1 "KrACydn") "rA" ;
|
|
||||||
split_V2 = mkV2 (compoundV "tqsym" (mkV "krdn" "kn")) "rA";
|
|
||||||
squeeze_V2 = mkV2 (compoundV "lh" (mkV "krdn" "kn")) "rA";
|
|
||||||
stab_V2 = mkV2 (compoundV "c^Aqv" (mkV "zdn" "zn")) "bh" False;
|
|
||||||
suck_V2 = mkV2 (mkV_1 "mkydn") "rA" ;
|
|
||||||
throw_V2 = mkV2 (compoundV "prtAb" (mkV "krdn" "kn")) "rA";
|
|
||||||
tie_V2 = mkV2 (compoundV "grh" (mkV "zdn" "zn")) "rA";
|
|
||||||
wash_V2 = mkV2 (mkV "Cstn" "Cvr") "rA" ; -- also "Cvy" which is the very formal form of the present root
|
|
||||||
wipe_V2 = mkV2 (compoundV "pAk" (mkV "krdn" "kn")) "rA";
|
|
||||||
|
|
||||||
---- other_A = regA "dygr" ;
|
|
||||||
|
|
||||||
grammar_N = mkCmpdNoun1 "dstvr" (mkN01 "zbAn" inanimate);
|
|
||||||
language_N = mkN01 "zbAn" inanimate;
|
|
||||||
rule_N = mkN "qAnvn" "qvAnyn" inanimate;
|
|
||||||
|
|
||||||
---- added 4/6/2007
|
|
||||||
john_PN = mkPN "jAn" inanimate;
|
|
||||||
question_N = mkN01 "sw?Al" inanimate; -- has variant "prsC"
|
|
||||||
ready_A = mkA "A:mAdh" ["bA A:mAdgy"] ;
|
|
||||||
reason_N = mkN "dlyl" "dlAyl" inanimate;
|
|
||||||
today_Adv = ss "Amrvz" ;
|
|
||||||
uncertain_A = mkA "nAmclvm" ["bA trdyd"];
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,507 +0,0 @@
|
|||||||
--# -path=.:../../prelude
|
|
||||||
--
|
|
||||||
----1 A Simple Punjabi Resource Morphology
|
|
||||||
----
|
|
||||||
---- Shafqat Virk, Aarne Ranta,2010
|
|
||||||
----
|
|
||||||
---- This resource morphology contains definitions needed in the resource
|
|
||||||
---- syntax. To build a lexicon, it is better to use $ParadigmsPnb$, which
|
|
||||||
---- gives a higher-level access to this module.
|
|
||||||
--
|
|
||||||
resource MorphoPes = ResPes ** open Prelude,Predef in {
|
|
||||||
|
|
||||||
flags optimize=all ;
|
|
||||||
coding = utf8;
|
|
||||||
|
|
||||||
----2 Nouns
|
|
||||||
|
|
||||||
oper
|
|
||||||
|
|
||||||
mkN : (x1,x2 : Str) -> Animacy -> Noun =
|
|
||||||
\sg,pl,ani -> {
|
|
||||||
s = table {
|
|
||||||
bEzafa => table { Sg => sg ;
|
|
||||||
Pl => pl
|
|
||||||
} ;
|
|
||||||
aEzafa => table { Sg => mkEzafa sg ;
|
|
||||||
Pl => mkEzafa pl
|
|
||||||
} ;
|
|
||||||
enClic => table { Sg => mkEnclic sg ;
|
|
||||||
Pl => mkEnclic pl
|
|
||||||
}
|
|
||||||
};
|
|
||||||
animacy = ani ;
|
|
||||||
definitness = True
|
|
||||||
} ;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- masculine nouns end with alif, choTi_hay, ain Translitration: (a, h, e)
|
|
||||||
-- Arabic nouns ends with h. also taken as Masc
|
|
||||||
------------------------------------------------------------------
|
|
||||||
----Verbs
|
|
||||||
------------------------------------------------------------------
|
|
||||||
{-
|
|
||||||
mkVerb : (x1,x2 : Str) -> Verb = \inf,root2 ->
|
|
||||||
let root1 = (tk 1 inf) ;
|
|
||||||
in {
|
|
||||||
s = table {
|
|
||||||
|
|
||||||
Root1 => root1 ;
|
|
||||||
Root2 => root2 ;
|
|
||||||
Inf => inf ;
|
|
||||||
|
|
||||||
VF tense aspect person number => (mkCmnVF root1 root2 tense aspect person number).s
|
|
||||||
-- Caus1 tense person number gender => (mkCmnVF root1 tense person number gender).s ;
|
|
||||||
-- Caus2 tense person number gender => (mkCmnVF root2 tense person number gender).s
|
|
||||||
}
|
|
||||||
} ;
|
|
||||||
|
|
||||||
--1. Basic stem form, direct & indirect causatives exists
|
|
||||||
-- v1 nechna nechaana nechwana
|
|
||||||
|
|
||||||
mkVerb1 : (_: Str) -> Verb = \inf ->
|
|
||||||
let root1 = (tk 1 inf) ;
|
|
||||||
root2 = (tk 3 inf) ;
|
|
||||||
in {
|
|
||||||
s = table {
|
|
||||||
|
|
||||||
Root1 => root1 ;
|
|
||||||
Root2 => root2 ;
|
|
||||||
Inf => inf ;
|
|
||||||
|
|
||||||
VF tense aspect person number => (mkCmnVF root1 root2 tense aspect person number).s
|
|
||||||
-- Caus1 tense person number gender => (mkCmnVF root1 tense person number gender).s ;
|
|
||||||
-- Caus2 tense person number gender => (mkCmnVF root2 tense person number gender).s
|
|
||||||
}
|
|
||||||
} ;
|
|
||||||
|
|
||||||
|
|
||||||
mkVerb2 : (_: Str) -> Verb = \inf ->
|
|
||||||
let root1 = (tk 1 inf) ;
|
|
||||||
root2 = (tk 2 inf) ;
|
|
||||||
in {
|
|
||||||
s = table {
|
|
||||||
|
|
||||||
Root1 => root1 ;
|
|
||||||
Root2 => root2 ;
|
|
||||||
Inf => inf ;
|
|
||||||
|
|
||||||
VF tense aspect person number => (mkCmnVF root1 root2 tense aspect person number).s
|
|
||||||
-- Caus1 tense person number gender => (mkCmnVF root1 tense person number gender).s ;
|
|
||||||
-- Caus2 tense person number gender => (mkCmnVF root2 tense person number gender).s
|
|
||||||
}
|
|
||||||
} ;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
mkCmnVF : Str -> Str -> VTense -> PAspect -> PPerson -> Number -> {s:Str}= \root1,root2,t,a,p,n ->
|
|
||||||
{s = (mkCmnVF1 root1 root2 t a p n).s ;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
mkCmnVF1 : Str -> Str -> VTense -> PAspect -> PPerson -> Number -> {s:Str}= \root1,root2,t,a,p,n ->
|
|
||||||
{s = let khordh = root1 + "h";
|
|
||||||
mekhor = "my" ++ root2 ;
|
|
||||||
mekhord = "my" ++ root1 ;
|
|
||||||
mekhordh = "my" ++ khordh ;
|
|
||||||
khah = "KvAh" ;
|
|
||||||
mekhah = "my" ++ khah ;
|
|
||||||
bvdh = "bvdh"
|
|
||||||
in
|
|
||||||
case <t,a,p,n> of {
|
|
||||||
<PPresent,PPerf,PPers1,Sg> => khordh ++ "Am" ;
|
|
||||||
<PPresent,PPerf,PPers1,Pl> => khordh ++ "Aym" ;
|
|
||||||
<PPresent,PPerf,PPers2,Sg> => khordh ++ "Ay" ;
|
|
||||||
<PPresent,PPerf,PPers2,Pl> => khordh ++ "Ayd" ;
|
|
||||||
<PPresent,PPerf,PPers3,Sg> => khordh ++ "Ast" ;
|
|
||||||
<PPresent,PPerf,PPers3,Pl> => khordh ++ "And" ;
|
|
||||||
|
|
||||||
<PPresent,PImperf,PPers1,Sg> => mekhor + "m" ; -- toHave need to have khor instead of mekhor
|
|
||||||
<PPresent,PImperf,PPers1,Pl> => mekhor + "ym" ;
|
|
||||||
<PPresent,PImperf,PPers2,Sg> => mekhor + "y" ;
|
|
||||||
<PPresent,PImperf,PPers2,Pl> => mekhor + "yd" ;
|
|
||||||
<PPresent,PImperf,PPers3,Sg> => mekhor + "d" ;
|
|
||||||
<PPresent,PImperf,PPers3,Pl> => mekhor + "nd" ;
|
|
||||||
|
|
||||||
<PPresent,Aorist,PPers1,Sg> => "" ;
|
|
||||||
<PPresent,Aorist,PPers1,Pl> => "" ;
|
|
||||||
<PPresent,Aorist,PPers2,Sg> => "" ;
|
|
||||||
<PPresent,Aorist,PPers2,Pl> => "" ;
|
|
||||||
<PPresent,Aorist,PPers3,Sg> => "" ;
|
|
||||||
<PPresent,Aorist,PPers3,Pl> => "" ;
|
|
||||||
|
|
||||||
<PPast,PPerf,PPers1,Sg> => khordh ++ "bvdm" ;
|
|
||||||
<PPast,PPerf,PPers1,Pl> => khordh ++ "bvdym" ;
|
|
||||||
<PPast,PPerf,PPers2,Sg> => khordh ++ "bvdy" ;
|
|
||||||
<PPast,PPerf,PPers2,Pl> => khordh ++ "bvdyd" ;
|
|
||||||
<PPast,PPerf,PPers3,Sg> => khordh ++ "bvd" ;
|
|
||||||
<PPast,PPerf,PPers3,Pl> => khordh ++ "bvdnd" ;
|
|
||||||
|
|
||||||
<PPast,PImperf,PPers1,Sg> => mekhord + "m" ; -- toHave need to have khor instead of mekhor
|
|
||||||
<PPast,PImperf,PPers1,Pl> => mekhord + "ym" ;
|
|
||||||
<PPast,PImperf,PPers2,Sg> => mekhord + "y";
|
|
||||||
<PPast,PImperf,PPers2,Pl> => mekhord + "yd" ;
|
|
||||||
<PPast,PImperf,PPers3,Sg> => mekhord ;
|
|
||||||
<PPast,PImperf,PPers3,Pl> => mekhord + "nd" ;
|
|
||||||
|
|
||||||
<PPast,Aorist,PPers1,Sg> => root1 + "m" ;
|
|
||||||
<PPast,Aorist,PPers1,Pl> => root1 + "ym" ;
|
|
||||||
<PPast,Aorist,PPers2,Sg> => root1 + "y";
|
|
||||||
<PPast,Aorist,PPers2,Pl> => root1 + "yd" ;
|
|
||||||
<PPast,Aorist,PPers3,Sg> => root1 ;
|
|
||||||
<PPast,Aorist,PPers3,Pl> => root1 + "nd" ;
|
|
||||||
|
|
||||||
-- check this one
|
|
||||||
<PFut,PPerf,PPers1,Sg> => "" ;
|
|
||||||
<PFut,PPerf,PPers1,Pl> => "" ;
|
|
||||||
<PFut,PPerf,PPers2,Sg> => "" ;
|
|
||||||
<PFut,PPerf,PPers2,Pl> => "" ;
|
|
||||||
<PFut,PPerf,PPers3,Sg> => "" ;
|
|
||||||
<PFut,PPerf,PPers3,Pl> => "" ;
|
|
||||||
|
|
||||||
<PFut,PImperf,PPers1,Sg> => mekhah + "m" ++ addBh root2 + "m" ;
|
|
||||||
<PFut,PImperf,PPers1,Pl> => mekhah + "ym" ++ addBh root2 + "ym" ;
|
|
||||||
<PFut,PImperf,PPers2,Sg> => mekhah + "y" ++ addBh root2 + "y" ;
|
|
||||||
<PFut,PImperf,PPers2,Pl> => mekhah + "yd" ++ addBh root2 + "yd" ;
|
|
||||||
<PFut,PImperf,PPers3,Sg> => mekhah + "d" ++ addBh root2 + "d" ;
|
|
||||||
<PFut,PImperf,PPers3,Pl> => mekhah + "nd" ++ addBh root2 + "nd" ;
|
|
||||||
|
|
||||||
<PFut,Aorist,PPers1,Sg> => khah + "m" ++ root1 ;
|
|
||||||
<PFut,Aorist,PPers1,Pl> => khah + "ym" ++ root1 ;
|
|
||||||
<PFut,Aorist,PPers2,Sg> => khah + "y" ++ root1 ;
|
|
||||||
<PFut,Aorist,PPers2,Pl> => khah + "yd" ++ root1 ;
|
|
||||||
<PFut,Aorist,PPers3,Sg> => khah + "d" ++ root1 ;
|
|
||||||
<PFut,Aorist,PPers3,Pl> => khah + "nd" ++ root1 ;
|
|
||||||
|
|
||||||
|
|
||||||
<Infr_Past,PPerf,PPers1,Sg> => khordh ++ bvdh ++ "Am" ;
|
|
||||||
<Infr_Past,PPerf,PPers1,Pl> => khordh ++ bvdh ++ "Aym" ;
|
|
||||||
<Infr_Past,PPerf,PPers2,Sg> => khordh ++ bvdh ++ "Ay" ;
|
|
||||||
<Infr_Past,PPerf,PPers2,Pl> => khordh ++ bvdh ++ "Ayd" ;
|
|
||||||
<Infr_Past,PPerf,PPers3,Sg> => khordh ++ bvdh ++ "Ast" ;
|
|
||||||
<Infr_Past,PPerf,PPers3,Pl> => khordh ++ bvdh ++ "And" ;
|
|
||||||
|
|
||||||
<Infr_Past,PImperf,PPers1,Sg> => mekhordh ++ "Am" ; -- toHave need to have khordh instead of mekhor
|
|
||||||
<Infr_Past,PImperf,PPers1,Pl> => mekhordh ++ "Aym" ;
|
|
||||||
<Infr_Past,PImperf,PPers2,Sg> => mekhordh ++ "Ay" ;
|
|
||||||
<Infr_Past,PImperf,PPers2,Pl> => mekhordh ++ "Ayd" ;
|
|
||||||
<Infr_Past,PImperf,PPers3,Sg> => mekhordh ++ "Ast" ;
|
|
||||||
<Infr_Past,PImperf,PPers3,Pl> => mekhordh ++ "And" ;
|
|
||||||
|
|
||||||
|
|
||||||
-- check this one
|
|
||||||
<Infr_Past,Aorist,PPers1,Sg> => "" ;
|
|
||||||
<Infr_Past,Aorist,PPers1,Pl> => "" ;
|
|
||||||
<Infr_Past,Aorist,PPers2,Sg> => "" ;
|
|
||||||
<Infr_Past,Aorist,PPers2,Pl> => "" ;
|
|
||||||
<Infr_Past,Aorist,PPers3,Sg> => "" ;
|
|
||||||
<Infr_Past,Aorist,PPers3,Pl> => ""
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
} ;
|
|
||||||
-}
|
|
||||||
mkVerb : (x1,x2 : Str) -> Verb = \inf,root2 ->
|
|
||||||
let root1 = (tk 1 inf) ;
|
|
||||||
impRoot = mkimpRoot root2;
|
|
||||||
in {
|
|
||||||
s = table {
|
|
||||||
|
|
||||||
Root1 => root1 ;
|
|
||||||
Root2 => root2 ;
|
|
||||||
Inf => inf ;
|
|
||||||
Imp Pos Sg => addBh impRoot ;
|
|
||||||
Imp Pos Pl => (addBh impRoot) + "yd" ;
|
|
||||||
Imp Neg Sg => "n" + impRoot ;
|
|
||||||
Imp Neg Pl => "n" + impRoot + "yd" ;
|
|
||||||
|
|
||||||
VF pol tense person number => (mkCmnVF root1 root2 pol tense person number).s ;
|
|
||||||
-- VF Neg tense person number => addN (mkCmnVF root1 root2 tense person number).s ;
|
|
||||||
Vvform (AgPes number person) => (mkvVform root2 number person).s
|
|
||||||
}
|
|
||||||
} ;
|
|
||||||
|
|
||||||
mkVerb1 : (_: Str) -> Verb = \inf ->
|
|
||||||
let root1 = (tk 1 inf) ;
|
|
||||||
root2 = (tk 3 inf) ;
|
|
||||||
impRoot = mkimpRoot root2 ;
|
|
||||||
in {
|
|
||||||
s = table {
|
|
||||||
|
|
||||||
Root1 => root1 ;
|
|
||||||
Root2 => root2 ;
|
|
||||||
Inf => inf ;
|
|
||||||
Imp Pos Sg => addBh impRoot ;
|
|
||||||
Imp Pos Pl => (addBh impRoot) + "yd" ;
|
|
||||||
Imp Neg Sg => "n" + impRoot ;
|
|
||||||
Imp Neg Pl => "n" + impRoot + "yd" ;
|
|
||||||
|
|
||||||
VF pol tense person number => (mkCmnVF root1 root2 pol tense person number).s ;
|
|
||||||
-- VF Neg tense person number => addN (mkCmnVF root1 root2 tense person number).s ;
|
|
||||||
Vvform (AgPes number person) => (mkvVform root2 number person).s
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
mkVerb2 : (_: Str) -> Verb = \inf ->
|
|
||||||
let root1 = (tk 1 inf) ;
|
|
||||||
root2 = (tk 2 inf) ;
|
|
||||||
impRoot = mkimpRoot root2 ;
|
|
||||||
in {
|
|
||||||
s = table {
|
|
||||||
|
|
||||||
Root1 => root1 ;
|
|
||||||
Root2 => root2 ;
|
|
||||||
Inf => inf ;
|
|
||||||
Imp Pos Sg => addBh impRoot ;
|
|
||||||
Imp Pos Pl => (addBh impRoot) + "yd" ;
|
|
||||||
Imp Neg Sg => "n" + impRoot ;
|
|
||||||
Imp Neg Pl => "n" + impRoot + "yd" ;
|
|
||||||
|
|
||||||
VF pol tense person number => (mkCmnVF root1 root2 pol tense person number).s ;
|
|
||||||
-- VF Neg tense person number => addN (mkCmnVF root1 root2 tense person number).s ;
|
|
||||||
Vvform (AgPes number person) => (mkvVform root2 number person).s
|
|
||||||
}
|
|
||||||
} ;
|
|
||||||
|
|
||||||
mkHave : Verb =
|
|
||||||
|
|
||||||
{
|
|
||||||
s = table {
|
|
||||||
|
|
||||||
Root1 => "dACt" ;
|
|
||||||
Root2 => "dAr" ;
|
|
||||||
Inf => "dACtn" ;
|
|
||||||
Imp Pos Sg => ["dACth bAC"] ;
|
|
||||||
Imp Pos Pl => ["dACth bACyd"];
|
|
||||||
Imp Neg Sg => ["ndACth bAC"] ;
|
|
||||||
Imp Neg Pl => ["ndACth bACyd"] ;
|
|
||||||
|
|
||||||
VF pol tense person number => (toHave pol tense number person).s ;
|
|
||||||
-- VF Neg tense person number => addN (mkCmnVF root1 root2 tense person number).s ;
|
|
||||||
Vvform (AgPes Sg PPers1) => ["dACth bACm"] ;
|
|
||||||
Vvform (AgPes Sg PPers2) => ["dACth bACy"] ;
|
|
||||||
Vvform (AgPes Sg PPers3) => ["dACth bACd"] ;
|
|
||||||
Vvform (AgPes Pl PPers1) => ["dACth bACym"] ;
|
|
||||||
Vvform (AgPes Pl PPers2) => ["dACth bACyd"] ;
|
|
||||||
Vvform (AgPes Pl PPers3) => ["dACth bACnd"]
|
|
||||||
}
|
|
||||||
} ;
|
|
||||||
|
|
||||||
|
|
||||||
mkCmnVF : Str -> Str -> Polarity -> VTense2 -> PPerson -> Number -> {s:Str}= \root1,root2,pol,t,p,n ->
|
|
||||||
{s = (mkCmnVF1 root1 root2 pol t p n).s ;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
mkCmnVF1 : Str -> Str -> Polarity -> VTense2 -> PPerson -> Number -> {s:Str}= \root1,root2,pol,t,p,n ->
|
|
||||||
{s = let khordh = root1 + "h";
|
|
||||||
nkhordh = (addN root1) + "h" ;
|
|
||||||
mekhor = "my" ++ root2 ;
|
|
||||||
nmekhor = "nmy" ++ root2 ;
|
|
||||||
mekhord = "my" ++ root1 ;
|
|
||||||
nmekhord = "nmy" ++ root1 ;
|
|
||||||
mekhordh = "my" ++ khordh ;
|
|
||||||
nmekhordh = "nmy" ++ khordh ;
|
|
||||||
khah = "KvAh" ;
|
|
||||||
nkhah = "nKvAh" ;
|
|
||||||
mekhah = "my" ++ khah ;
|
|
||||||
nmekhah = "nmy" ++ khah ;
|
|
||||||
bvdh = "bvdh"
|
|
||||||
in
|
|
||||||
case <pol,t,p,n> of {
|
|
||||||
<Pos,PPresent2 PrPerf,PPers1,Sg> => khordh ++ "Am" ;
|
|
||||||
<Pos,PPresent2 PrPerf,PPers1,Pl> => khordh ++ "Aym" ;
|
|
||||||
<Pos,PPresent2 PrPerf,PPers2,Sg> => khordh ++ "Ay" ;
|
|
||||||
<Pos,PPresent2 PrPerf,PPers2,Pl> => khordh ++ "Ayd" ;
|
|
||||||
<Pos,PPresent2 PrPerf,PPers3,Sg> => khordh ++ "Ast" ;
|
|
||||||
<Pos,PPresent2 PrPerf,PPers3,Pl> => khordh ++ "And" ;
|
|
||||||
|
|
||||||
<Pos,PPresent2 PrImperf,PPers1,Sg> => mekhor + "m" ;
|
|
||||||
<Pos,PPresent2 PrImperf,PPers1,Pl> => mekhor + "ym" ;
|
|
||||||
<Pos,PPresent2 PrImperf,PPers2,Sg> => mekhor + "y" ;
|
|
||||||
<Pos,PPresent2 PrImperf,PPers2,Pl> => mekhor + "yd" ;
|
|
||||||
<Pos,PPresent2 PrImperf,PPers3,Sg> => mekhor + "d" ;
|
|
||||||
<Pos,PPresent2 PrImperf,PPers3,Pl> => mekhor + "nd" ;
|
|
||||||
|
|
||||||
|
|
||||||
<Pos,PPast2 PstPerf,PPers1,Sg> => khordh ++ "bvdm" ;
|
|
||||||
<Pos,PPast2 PstPerf,PPers1,Pl> => khordh ++ "bvdym" ;
|
|
||||||
<Pos,PPast2 PstPerf,PPers2,Sg> => khordh ++ "bvdy" ;
|
|
||||||
<Pos,PPast2 PstPerf,PPers2,Pl> => khordh ++ "bvdyd" ;
|
|
||||||
<Pos,PPast2 PstPerf,PPers3,Sg> => khordh ++ "bvd" ;
|
|
||||||
<Pos,PPast2 PstPerf,PPers3,Pl> => khordh ++ "bvdnd" ;
|
|
||||||
|
|
||||||
<Pos,PPast2 PstImperf,PPers1,Sg> => mekhord + "m" ;
|
|
||||||
<Pos,PPast2 PstImperf,PPers1,Pl> => mekhord + "ym" ;
|
|
||||||
<Pos,PPast2 PstImperf,PPers2,Sg> => mekhord + "y";
|
|
||||||
<Pos,PPast2 PstImperf,PPers2,Pl> => mekhord + "yd" ;
|
|
||||||
<Pos,PPast2 PstImperf,PPers3,Sg> => mekhord ;
|
|
||||||
<Pos,PPast2 PstImperf,PPers3,Pl> => mekhord + "nd" ;
|
|
||||||
|
|
||||||
<Pos,PPast2 PstAorist,PPers1,Sg> => root1 + "m" ;
|
|
||||||
<Pos,PPast2 PstAorist,PPers1,Pl> => root1 + "ym" ;
|
|
||||||
<Pos,PPast2 PstAorist,PPers2,Sg> => root1 + "y";
|
|
||||||
<Pos,PPast2 PstAorist,PPers2,Pl> => root1 + "yd" ;
|
|
||||||
<Pos,PPast2 PstAorist,PPers3,Sg> => root1 ;
|
|
||||||
<Pos,PPast2 PstAorist,PPers3,Pl> => root1 + "nd" ;
|
|
||||||
|
|
||||||
{-
|
|
||||||
<Pos,PFut2 FtImperf,PPers1,Sg> => mekhah + "m" ++ addBh root2 + "m" ;
|
|
||||||
<Pos,PFut2 FtImperf,PPers1,Pl> => mekhah + "ym" ++ addBh root2 + "ym" ;
|
|
||||||
<Pos,PFut2 FtImperf,PPers2,Sg> => mekhah + "y" ++ addBh root2 + "y" ;
|
|
||||||
<Pos,PFut2 FtImperf,PPers2,Pl> => mekhah + "yd" ++ addBh root2 + "yd" ;
|
|
||||||
<Pos,PFut2 FtImperf,PPers3,Sg> => mekhah + "d" ++ addBh root2 + "d" ;
|
|
||||||
<Pos,PFut2 FtImperf,PPers3,Pl> => mekhah + "nd" ++ addBh root2 + "nd" ;
|
|
||||||
-}
|
|
||||||
<Pos,PFut2 FtAorist,PPers1,Sg> => khah + "m" ++ root1 ;
|
|
||||||
<Pos,PFut2 FtAorist,PPers1,Pl> => khah + "ym" ++ root1 ;
|
|
||||||
<Pos,PFut2 Ftorist,PPers2,Sg> => khah + "y" ++ root1 ;
|
|
||||||
<Pos,PFut2 FtAorist,PPers2,Pl> => khah + "yd" ++ root1 ;
|
|
||||||
<Pos,PFut2 FtAorist,PPers3,Sg> => khah + "d" ++ root1 ;
|
|
||||||
<Pos,PFut2 FtAorist,PPers3,Pl> => khah + "nd" ++ root1 ;
|
|
||||||
|
|
||||||
|
|
||||||
<Pos,Infr_Past2 InfrPerf,PPers1,Sg> => khordh ++ bvdh ++ "Am" ;
|
|
||||||
<Pos,Infr_Past2 InfrPerf,PPers1,Pl> => khordh ++ bvdh ++ "Aym" ;
|
|
||||||
<Pos,Infr_Past2 InfrPerf,PPers2,Sg> => khordh ++ bvdh ++ "Ay" ;
|
|
||||||
<Pos,Infr_Past2 InfrPerf,PPers2,Pl> => khordh ++ bvdh ++ "Ayd" ;
|
|
||||||
<Pos,Infr_Past2 InfrPerf,PPers3,Sg> => khordh ++ bvdh ++ "Ast" ;
|
|
||||||
<Pos,Infr_Past2 InfrPerf,PPers3,Pl> => khordh ++ bvdh ++ "And" ;
|
|
||||||
|
|
||||||
<Pos,Infr_Past2 InfrImperf,PPers1,Sg> => mekhordh ++ "Am" ;
|
|
||||||
<Pos,Infr_Past2 InfrImperf,PPers1,Pl> => mekhordh ++ "Aym" ;
|
|
||||||
<Pos,Infr_Past2 InfrImperf,PPers2,Sg> => mekhordh ++ "Ay" ;
|
|
||||||
<Pos,Infr_Past2 InfrImperf,PPers2,Pl> => mekhordh ++ "Ayd" ;
|
|
||||||
<Pos,Infr_Past2 InfrImperf,PPers3,Sg> => mekhordh ++ "Ast" ;
|
|
||||||
<Pos,Infr_Past2 InfrImperf,PPers3,Pl> => mekhordh ++ "And" ;
|
|
||||||
|
|
||||||
-- negatives
|
|
||||||
|
|
||||||
<Neg,PPresent2 PrPerf,PPers1,Sg> => addN khordh ++ "Am" ;
|
|
||||||
<Neg,PPresent2 PrPerf,PPers1,Pl> => addN khordh ++ "Aym" ;
|
|
||||||
<Neg,PPresent2 PrPerf,PPers2,Sg> => addN khordh ++ "Ay" ;
|
|
||||||
<Neg,PPresent2 PrPerf,PPers2,Pl> => addN khordh ++ "Ayd" ;
|
|
||||||
<Neg,PPresent2 PrPerf,PPers3,Sg> => addN khordh ++ "Ast" ;
|
|
||||||
<Neg,PPresent2 PrPerf,PPers3,Pl> => addN khordh ++ "And" ;
|
|
||||||
|
|
||||||
|
|
||||||
<Neg,PPresent2 PrImperf,PPers1,Sg> => nmekhor + "m" ;
|
|
||||||
<Neg,PPresent2 PrImperf,PPers1,Pl> => nmekhor + "ym" ;
|
|
||||||
<Neg,PPresent2 PrImperf,PPers2,Sg> => nmekhor + "y" ;
|
|
||||||
<Neg,PPresent2 PrImperf,PPers2,Pl> => nmekhor + "yd" ;
|
|
||||||
<Neg,PPresent2 PrImperf,PPers3,Sg> => nmekhor + "d" ;
|
|
||||||
<Neg,PPresent2 PrImperf,PPers3,Pl> => nmekhor + "nd" ;
|
|
||||||
|
|
||||||
<Neg,PPast2 PstPerf,PPers1,Sg> => nkhordh ++ "bvdm" ;
|
|
||||||
<Neg,PPast2 PstPerf,PPers1,Pl> => nkhordh ++ "bvdym" ;
|
|
||||||
<Neg,PPast2 PstPerf,PPers2,Sg> => nkhordh ++ "bvdy" ;
|
|
||||||
<Neg,PPast2 PstPerf,PPers2,Pl> => nkhordh ++ "bvdyd" ;
|
|
||||||
<Neg,PPast2 PstPerf,PPers3,Sg> => nkhordh ++ "bvd" ;
|
|
||||||
<Neg,PPast2 PstPerf,PPers3,Pl> => nkhordh ++ "bvdnd" ;
|
|
||||||
|
|
||||||
<Neg,PPast2 PstImperf,PPers1,Sg> => nmekhord + "m" ;
|
|
||||||
<Neg,PPast2 PstImperf,PPers1,Pl> => nmekhord + "ym" ;
|
|
||||||
<Neg,PPast2 PstImperf,PPers2,Sg> => nmekhord + "y";
|
|
||||||
<Neg,PPast2 PstImperf,PPers2,Pl> => nmekhord + "yd" ;
|
|
||||||
<Neg,PPast2 PstImperf,PPers3,Sg> => nmekhord ;
|
|
||||||
<Neg,PPast2 PstImperf,PPers3,Pl> => nmekhord + "nd" ;
|
|
||||||
|
|
||||||
|
|
||||||
<Neg,PPast2 PstAorist,PPers1,Sg> => addN root1 + "m" ;
|
|
||||||
<Neg,PPast2 PstAorist,PPers1,Pl> => addN root1 + "ym" ;
|
|
||||||
<Neg,PPast2 PstAorist,PPers2,Sg> => addN root1 + "y";
|
|
||||||
<Neg,PPast2 PstAorist,PPers2,Pl> => addN root1 + "yd" ;
|
|
||||||
<Neg,PPast2 PstAorist,PPers3,Sg> => addN root1 ;
|
|
||||||
<Neg,PPast2 PstAorist,PPers3,Pl> => addN root1 + "nd" ;
|
|
||||||
|
|
||||||
{-
|
|
||||||
<Neg,PFut2 FtImperf,PPers1,Sg> => nmekhah + "m" ++ addBh root2 + "m" ;
|
|
||||||
<Neg,PFut2 FtImperf,PPers1,Pl> => nmekhah + "ym" ++ addBh root2 + "ym" ;
|
|
||||||
<Neg,PFut2 FtImperf,PPers2,Sg> => nmekhah + "y" ++ addBh root2 + "y" ;
|
|
||||||
<Neg,PFut2 FtImperf,PPers2,Pl> => nmekhah + "yd" ++ addBh root2 + "yd" ;
|
|
||||||
<Neg,PFut2 FtImperf,PPers3,Sg> => nmekhah + "d" ++ addBh root2 + "d" ;
|
|
||||||
<Neg,PFut2 FtImperf,PPers3,Pl> => nmekhah + "nd" ++ addBh root2 + "nd" ;
|
|
||||||
-}
|
|
||||||
<Neg,PFut2 FtAorist,PPers1,Sg> => nkhah + "m" ++ root1 ;
|
|
||||||
<Neg,PFut2 FtAorist,PPers1,Pl> => nkhah + "ym" ++ root1 ;
|
|
||||||
<Neg,PFut2 Ftorist,PPers2,Sg> => nkhah + "y" ++ root1 ;
|
|
||||||
<Neg,PFut2 FtAorist,PPers2,Pl> => nkhah + "yd" ++ root1 ;
|
|
||||||
<Neg,PFut2 FtAorist,PPers3,Sg> => nkhah + "d" ++ root1 ;
|
|
||||||
<Neg,PFut2 FtAorist,PPers3,Pl> => nkhah + "nd" ++ root1 ;
|
|
||||||
|
|
||||||
|
|
||||||
<Neg,Infr_Past2 InfrPerf,PPers1,Sg> => nkhordh ++ bvdh ++ "Am" ;
|
|
||||||
<Neg,Infr_Past2 InfrPerf,PPers1,Pl> => nkhordh ++ bvdh ++ "Aym" ;
|
|
||||||
<Neg,Infr_Past2 InfrPerf,PPers2,Sg> => nkhordh ++ bvdh ++ "Ay" ;
|
|
||||||
<Neg,Infr_Past2 InfrPerf,PPers2,Pl> => nkhordh ++ bvdh ++ "Ayd" ;
|
|
||||||
<Neg,Infr_Past2 InfrPerf,PPers3,Sg> => nkhordh ++ bvdh ++ "Ast" ;
|
|
||||||
<Neg,Infr_Past2 InfrPerf,PPers3,Pl> => nkhordh ++ bvdh ++ "And" ;
|
|
||||||
|
|
||||||
<Neg,Infr_Past2 InfrImperf,PPers1,Sg> => nmekhordh ++ "Am" ;
|
|
||||||
<Neg,Infr_Past2 InfrImperf,PPers1,Pl> => nmekhordh ++ "Aym" ;
|
|
||||||
<Neg,Infr_Past2 InfrImperf,PPers2,Sg> => nmekhordh ++ "Ay" ;
|
|
||||||
<Neg,Infr_Past2 InfrImperf,PPers2,Pl> => nmekhordh ++ "Ayd" ;
|
|
||||||
<Neg,Infr_Past2 InfrImperf,PPers3,Sg> => nmekhordh ++ "Ast" ;
|
|
||||||
<Neg,Infr_Past2 InfrImperf,PPers3,Pl> => nmekhordh ++ "And"
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
} ;
|
|
||||||
|
|
||||||
mkvVform : Str -> Number -> PPerson -> {s: Str} = \root2,n,p ->
|
|
||||||
{s =
|
|
||||||
case <n,p> of {
|
|
||||||
<Sg,PPers1> => addBh root2 + "m" ;
|
|
||||||
<Sg,PPers2> => addBh root2 + "y" ;
|
|
||||||
<Sg,PPers3> => addBh root2 + "d" ;
|
|
||||||
<Pl,PPers1> => addBh root2 + "ym" ;
|
|
||||||
<Pl,PPers2> => addBh root2 + "yd" ;
|
|
||||||
<Pl,PPers3> => addBh root2 + "nd"
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
mkimpRoot : Str -> Str ;
|
|
||||||
mkimpRoot root =
|
|
||||||
case root of {
|
|
||||||
st + "y" => st ;
|
|
||||||
_ => root
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
addBh : Str -> Str ;
|
|
||||||
addBh str =
|
|
||||||
case (take 1 str) of {
|
|
||||||
"A" => "by" + str ;
|
|
||||||
"A:" => "byA" + (drop 1 str) ;
|
|
||||||
_ => "b" + str
|
|
||||||
};
|
|
||||||
|
|
||||||
---------------------
|
|
||||||
--Determiners
|
|
||||||
--------------------
|
|
||||||
|
|
||||||
makeDet : Str -> Number -> Bool -> {s: Str ; n : Number ; isNum : Bool ; fromPron : Bool} =\str,n,b -> {
|
|
||||||
s = str;
|
|
||||||
isNum = b;
|
|
||||||
fromPron = False ;
|
|
||||||
n = n
|
|
||||||
};
|
|
||||||
makeQuant : Str -> Str -> {s : Number => Str ; a : AgrPes ; fromPron : Bool } = \sg,pl -> {
|
|
||||||
s = table {Sg => sg ; Pl => pl} ;
|
|
||||||
fromPron = False ;
|
|
||||||
a = agrPesP3 Sg
|
|
||||||
};
|
|
||||||
---------------------------
|
|
||||||
-- Adjectives
|
|
||||||
--------------------------
|
|
||||||
mkAdj : Str -> Str -> Adjective = \adj,adv -> {
|
|
||||||
s = table { bEzafa => adj;
|
|
||||||
aEzafa => mkEzafa adj ;
|
|
||||||
enClic => mkEnclic adj
|
|
||||||
} ;
|
|
||||||
adv = adv
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,140 +0,0 @@
|
|||||||
--# -path=.:../abstract:../common:
|
|
||||||
concrete NumeralPes of Numeral = CatPes [Numeral,Digits] ** open ResPes,Prelude in {
|
|
||||||
|
|
||||||
flags coding = utf8;
|
|
||||||
|
|
||||||
param DForm = unit | teen | ten | hundreds |thousands;
|
|
||||||
param DSize = sg | r2 | r3 | r4 | r5 | r6 | r7 | r8 | r9 ;
|
|
||||||
param Size = singl | less100 | more100 ;
|
|
||||||
|
|
||||||
|
|
||||||
lincat
|
|
||||||
Digit = {s : DForm => CardOrd => Str} ;
|
|
||||||
Sub10 = {s : DForm => CardOrd => Str ; n : Number} ;
|
|
||||||
Sub100 = {s : CardOrd => Str ; n : Number} ;
|
|
||||||
Sub1000 = {s : CardOrd => Str ; n : Number} ;
|
|
||||||
Sub1000000 = {s : CardOrd => Str ; n : Number} ;
|
|
||||||
|
|
||||||
lin num x = x ;
|
|
||||||
-- 2 12 20 200
|
|
||||||
lin n2 = mkNum "dv" "dvAzdh" "byst" "dvyst" ;
|
|
||||||
lin n3 = mkNum3 "sh" "syzdh" "sy" "sySd" "svm" ;
|
|
||||||
lin n4 = mkNum "c^hAr" "c^hArdh" "c^hl" "c^hArSd" ;
|
|
||||||
lin n5 = mkNum "pnj" "pAnzdh" "pnjAh" "pAnSd" ;
|
|
||||||
lin n6 = mkNum "CC" "CAnzdh" "CSt" "CCSd" ;
|
|
||||||
lin n7 = mkNum "hft" "hfdh" "hftAd" "hftSd" ;
|
|
||||||
lin n8 = mkNum "hCt" "hjdh" "hCtAd" "hCtSd" ;
|
|
||||||
lin n9 = mkNum "nh" "nvzdh" "nvd" "nhSd" ;
|
|
||||||
|
|
||||||
lin pot01 = mkNum3 "yk" "yAzdh" "dh" "ykSd" "hzAr" ** {n = Sg} ;
|
|
||||||
|
|
||||||
lin pot0 d = d ** {n = Pl} ;
|
|
||||||
|
|
||||||
lin pot110 = {s = table { NCard => "dh" ;
|
|
||||||
NOrd => "dhm" };
|
|
||||||
n = Pl} ;
|
|
||||||
lin pot111 = {s = table { NCard => "yAzdh" ;
|
|
||||||
NOrd => "yAzdhm" };
|
|
||||||
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 = d.s ! ten} ** {n = Pl} ;
|
|
||||||
|
|
||||||
lin pot1plus d e = {
|
|
||||||
s = \\o => d.s ! ten ! NCard ++"v" ++e.s ! unit ! o ; n = Pl} ;
|
|
||||||
|
|
||||||
lin pot1as2 n = n ;
|
|
||||||
|
|
||||||
lin pot2 d = {s = d.s ! hundreds} ** {n = Pl} ;
|
|
||||||
lin pot2plus d e = {
|
|
||||||
s = \\o => d.s ! hundreds ! NCard ++ "v" ++ e.s ! o ; n = Pl} ; -- remove "??"
|
|
||||||
|
|
||||||
lin pot2as3 n = n ;
|
|
||||||
|
|
||||||
lin pot3 n = { s = \\o => n.s ! NCard ++ "hzAr" ; n = Pl} ;
|
|
||||||
|
|
||||||
lin pot3plus n m = {
|
|
||||||
s = \\o => n.s ! NCard ++ "hzAr" ++ "v" ++ m.s ! o; n = Pl} ; -- missing word "????????" after NCard
|
|
||||||
|
|
||||||
-- numerals as sequences of digits
|
|
||||||
|
|
||||||
lincat
|
|
||||||
Dig = TDigit ;
|
|
||||||
|
|
||||||
lin
|
|
||||||
IDig d = d ** {tail = T1} ;
|
|
||||||
{-
|
|
||||||
IIDig d i = {
|
|
||||||
s = \\o,c => d.s ! NCard ++ commaIf i.tail ++ i.s ! o ! c ;
|
|
||||||
n = Pl ;
|
|
||||||
-- tail = inc i.tail
|
|
||||||
} ;
|
|
||||||
-}
|
|
||||||
D_0 = mkDig "?" ;
|
|
||||||
D_1 = mk3Dig "?" "" Pl;
|
|
||||||
D_2 = mk2Dig "?" "";
|
|
||||||
D_3 = mk2Dig "?" "svm" ;
|
|
||||||
D_4 = mkDig "?" ;
|
|
||||||
D_5 = mkDig "?" ;
|
|
||||||
D_6 = mkDig "?" ;
|
|
||||||
D_7 = mkDig "?" ;
|
|
||||||
D_8 = mkDig "?" ;
|
|
||||||
D_9 = mkDig "?" ;
|
|
||||||
|
|
||||||
-- lin IDig d = { s = \\_ => d.s ; n = Sg} ;
|
|
||||||
lin IIDig d dg = { s = \\df => d.s ! NCard ++ dg.s ! df ; n = Pl};
|
|
||||||
|
|
||||||
oper
|
|
||||||
commaIf : DTail -> Str = \t -> case t of {
|
|
||||||
T3 => "," ;
|
|
||||||
_ => []
|
|
||||||
} ;
|
|
||||||
|
|
||||||
inc : DTail -> DTail = \t -> case t of {
|
|
||||||
T1 => T2 ;
|
|
||||||
T2 => T3 ;
|
|
||||||
T3 => T1
|
|
||||||
} ;
|
|
||||||
|
|
||||||
mk2Dig : Str -> Str -> TDigit = \c,o -> mk3Dig c o Pl ;
|
|
||||||
mkDig : Str -> TDigit = \c -> mk2Dig c (c + "m") ;
|
|
||||||
|
|
||||||
mk3Dig : Str -> Str -> Number -> TDigit = \c,o,n -> {
|
|
||||||
-- s = table {NCard => regGenitiveS c ; NOrd => regGenitiveS o} ;
|
|
||||||
s = table {NCard => c ; NOrd => o} ;
|
|
||||||
n = n
|
|
||||||
} ;
|
|
||||||
|
|
||||||
oper TDigit = {
|
|
||||||
n : Number ;
|
|
||||||
s : CardOrd => Str
|
|
||||||
} ;
|
|
||||||
|
|
||||||
|
|
||||||
oper
|
|
||||||
mkNum : Str -> Str -> Str -> Str -> {s : DForm => CardOrd => Str} =
|
|
||||||
\two, twelve, twenty, twohundred->
|
|
||||||
{s = table {
|
|
||||||
unit => table {NCard => two ; NOrd => (two + "myn") | (two + "m")};
|
|
||||||
teen => table {NCard => twelve ; NOrd => (twelve + "myn") | (twelve + "m")} ;
|
|
||||||
ten => table {NCard => twenty ; NOrd => (twenty + "myn") | (twenty + "m")};
|
|
||||||
hundreds => table {NCard => twohundred ; NOrd => (twohundred +"myn") | (twohundred + "m")};
|
|
||||||
thousands => table {NCard => (two + "hzAr" ); NOrd => (two + "hzAr" + "m") | (two + "hzAr" +"myn" )}
|
|
||||||
|
|
||||||
}};
|
|
||||||
|
|
||||||
mkNum3 : Str -> Str -> Str -> Str -> Str -> {s : DForm => CardOrd => Str} =
|
|
||||||
\two, twelve, twenty, twohundred, second->
|
|
||||||
{s = table {
|
|
||||||
unit => table {NCard => two ; NOrd => second};
|
|
||||||
teen => table {NCard => twelve ; NOrd => (twelve + "myn") | (twelve + "m")} ;
|
|
||||||
ten => table {NCard => twenty ; NOrd => (twenty + "myn") | (twenty + "m")};
|
|
||||||
hundreds => table {NCard => twohundred ; NOrd => (twohundred +"myn") | (twohundred + "m")};
|
|
||||||
thousands => table {NCard => (two + "hzAr" ); NOrd => (two + "hzAr" + "m") | (two + "hzAr"+ "myn" )}
|
|
||||||
|
|
||||||
}};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,206 +0,0 @@
|
|||||||
--# -path=.:../abstract:../../prelude:../common
|
|
||||||
--
|
|
||||||
----1 Pnbu Lexical Paradigms
|
|
||||||
|
|
||||||
resource ParadigmsPes = open
|
|
||||||
Predef,
|
|
||||||
Prelude,
|
|
||||||
MorphoPes,
|
|
||||||
CatPes
|
|
||||||
in {
|
|
||||||
|
|
||||||
flags optimize=all ;
|
|
||||||
coding = utf8;
|
|
||||||
|
|
||||||
--2 Parameters
|
|
||||||
|
|
||||||
oper
|
|
||||||
animate : Animacy ;
|
|
||||||
inanimate : Animacy ;
|
|
||||||
singular : Number;
|
|
||||||
plural : Number;
|
|
||||||
|
|
||||||
singular = Sg ; plural = Pl;
|
|
||||||
|
|
||||||
animate = Animate ; inanimate = Inanimate ; --i
|
|
||||||
mkN01 : Str -> Animacy -> Noun ;
|
|
||||||
mkN01 str ani = mkN str (str ++ "hA") ani;
|
|
||||||
mkN02 : Str -> Animacy -> Noun ;
|
|
||||||
mkN02 str ani = case (last str) of {
|
|
||||||
"h" => mkN str ((init str) + "gAn") ani ;
|
|
||||||
("A"|"v") => mkN str (str + "yAn") ani ;
|
|
||||||
_ => mkN str (str+"An") ani
|
|
||||||
};
|
|
||||||
{-
|
|
||||||
|
|
||||||
--2 Nouns
|
|
||||||
|
|
||||||
|
|
||||||
mkN2 : N -> Prep -> Str -> N2;
|
|
||||||
mkN2 = \n,p,c -> n ** {lock_N2 = <> ; c2 = p.s ; c3 = c } ;
|
|
||||||
|
|
||||||
mkN3 : N -> Prep -> Str -> Str-> N3 ;
|
|
||||||
mkN3 = \n,p,q,r -> n ** {lock_N3 = <> ; c2 = p.s ; c3 = q ; c4 = r} ;
|
|
||||||
-}
|
|
||||||
-- Compound Nouns
|
|
||||||
|
|
||||||
mkCmpdNoun1 : Str -> N -> N
|
|
||||||
= \s,noun -> {s =\\ez,n => s ++ noun.s ! ez ! n ; animacy = noun.animacy ; definitness = noun.definitness ; lock_N = <>};
|
|
||||||
mkCmpdNoun2 : N -> Str -> N
|
|
||||||
= \noun,s -> {s =\\ez,n => noun.s ! ez ! n ++ s ; animacy = noun.animacy ; definitness =noun.definitness ; lock_N = <>};
|
|
||||||
|
|
||||||
|
|
||||||
-- Proper names
|
|
||||||
mkPN : Str -> Animacy -> PN =
|
|
||||||
|
|
||||||
\str,ani -> {s = str ; animacy = ani ; lock_PN = <>} ;
|
|
||||||
|
|
||||||
|
|
||||||
-- Personal Pronouns
|
|
||||||
personalPN : Str -> Number -> PPerson -> Pron =
|
|
||||||
\str,nn,p -> {s = str ; a = AgPes nn p ; ps = str ; lock_Pron = <>};
|
|
||||||
{-
|
|
||||||
-- Demonstration Pronouns
|
|
||||||
demoPN : Str -> Str -> Str -> Quant =
|
|
||||||
\s1,s2,s3 -> let n = makeDemonPronForm s1 s2 s3 in {s = n.s ; a = defaultAgr ; lock_Quant = <>};
|
|
||||||
-- Determiner
|
|
||||||
-}
|
|
||||||
mkDet = overload {
|
|
||||||
mkDet : Str -> Number -> Det =
|
|
||||||
\s1,n -> makeDet s1 n False ** { lock_Det = <>};
|
|
||||||
mkDet : Str -> Number -> Bool -> Det =
|
|
||||||
\s1,n,b -> makeDet s1 n b ** { lock_Det = <>};
|
|
||||||
};
|
|
||||||
{-
|
|
||||||
-- Intergative pronouns
|
|
||||||
mkIP : (x1,x2,x3,x4:Str) -> Number -> Gender -> IP =
|
|
||||||
\s1,s2,s3,s4,n,g -> let p = mkIntPronForm s1 s2 s3 s4 in { s = p.s ; n = n ; g = g ; lock_IP = <>};
|
|
||||||
|
|
||||||
-- AdN
|
|
||||||
mkAdN : Str -> AdN = \s -> ss s ;
|
|
||||||
-}
|
|
||||||
--2 Adjectives
|
|
||||||
|
|
||||||
mkA = overload {
|
|
||||||
mkA : Str-> A
|
|
||||||
= \str -> mkAdj str str ** { lock_A = <>} ;
|
|
||||||
mkA : Str-> Str -> A
|
|
||||||
= \str,adv -> mkAdj str adv ** { lock_A = <>} ;
|
|
||||||
mkA : Str -> Str -> A2
|
|
||||||
= \a,c -> mkAdj a a ** { c2 = c ; lock_A2 = <>} ;
|
|
||||||
} ;
|
|
||||||
|
|
||||||
--2 Verbs
|
|
||||||
mkV : Str -> Str -> V
|
|
||||||
= \s1, s2 -> mkVerb s1 s2 ** {lock_V = <>} ;
|
|
||||||
-- mkVerb takes both the Infinitive and the present root(root2) and is applied for iregular verbs
|
|
||||||
haveVerb : V = mkHave ;
|
|
||||||
mkV_1 : Str -> V
|
|
||||||
= \s -> mkVerb1 s ** {lock_V = <>} ;
|
|
||||||
|
|
||||||
mkV_2 : Str -> V
|
|
||||||
= \s -> mkVerb2 s ** {lock_V = <>} ;
|
|
||||||
|
|
||||||
mkV2 = overload {
|
|
||||||
-- mkV2 : Str -> V2
|
|
||||||
-- = \s -> mkV s ** {c2 = {s = [] ; c = VTrans} ; lock_V2 = <>} ;
|
|
||||||
mkV2 : V -> V2
|
|
||||||
= \v -> v ** {c2 = {s = [] ; ra = [] ; c = VTrans} ; lock_V2 = <>} ;
|
|
||||||
mkV2 : V -> Str -> V2
|
|
||||||
= \v,ra -> v ** {c2 = {ra = ra ; s = [] ; c = VTrans} ; lock_V2 = <>} ;
|
|
||||||
mkV2 : V -> Str -> Bool -> V2
|
|
||||||
= \v,p,b -> v ** {c2 = {ra = [] ; s = p ; c = VTrans} ; lock_V2 = <>} ;
|
|
||||||
} ;
|
|
||||||
|
|
||||||
mkV3 : V -> Str -> Str -> V3;
|
|
||||||
mkV3 v p q = v ** { c2 = p ; c3 = q ; lock_V3 = <>} ;
|
|
||||||
mkV2V : V -> Str -> Str -> Bool -> V2V ;
|
|
||||||
mkV2V v s1 s2 b = v ** {isAux = b ; c1 = s1 ; c2 = s2 ; lock_V2V = <>} ;
|
|
||||||
|
|
||||||
-- compund verbs
|
|
||||||
compoundV = overload {
|
|
||||||
compoundV : Str -> V -> V = \s,v -> {s = \\vf => s ++ v.s ! vf ; lock_V = <>} ;
|
|
||||||
compoundV : Str -> V2 -> V = \s,v -> {s = \\vf => s ++ v.s ! vf ; lock_V = <>} ;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
----2 Adverbs
|
|
||||||
mkAdv : Str -> Adv = \str -> {s = str ; lock_Adv = <>};
|
|
||||||
|
|
||||||
----2 Prepositions
|
|
||||||
|
|
||||||
mkPrep : Str -> Prep ;
|
|
||||||
mkPrep str = {s = str ; lock_Prep = <>};
|
|
||||||
{-
|
|
||||||
--3 Determiners and quantifiers
|
|
||||||
|
|
||||||
-- mkQuant : overload {
|
|
||||||
-- mkQuant : Pron -> Quant ;
|
|
||||||
-- mkQuant : (no_sg, no_pl, none_sg, : Str) -> Quant ;
|
|
||||||
-- } ;
|
|
||||||
-}
|
|
||||||
mkQuant = overload {
|
|
||||||
-- mkQuant : Pron -> Quant = \p -> {s = \\_,_,c => p.s!c ;a = p.a ; lock_Quant = <>};
|
|
||||||
mkQuant : Str -> Str -> Quant = \sg,pl -> makeQuant sg pl;
|
|
||||||
} ;
|
|
||||||
{-
|
|
||||||
--2 Conjunctions
|
|
||||||
mkConj : overload {
|
|
||||||
mkConj : Str -> Conj ; -- and (plural agreement)
|
|
||||||
mkConj : Str -> Number -> Conj ; -- or (agrement number given as argument)
|
|
||||||
mkConj : Str -> Str -> Conj ; -- both ... and (plural)
|
|
||||||
mkConj : Str -> Str -> Number -> Conj ; -- either ... or (agrement number given as argument)
|
|
||||||
} ;
|
|
||||||
mkConj = overload {
|
|
||||||
mkConj : Str -> Conj = \y -> mk2Conj [] y plural ;
|
|
||||||
mkConj : Str -> Number -> Conj = \y,n -> mk2Conj [] y n ;
|
|
||||||
mkConj : Str -> Str -> Conj = \x,y -> mk2Conj x y plural ;
|
|
||||||
mkConj : Str -> Str -> Number -> Conj = mk2Conj ;
|
|
||||||
} ;
|
|
||||||
|
|
||||||
mk2Conj : Str -> Str -> Number -> Conj = \x,y,n ->
|
|
||||||
lin Conj (sd2 x y ** {n = n}) ;
|
|
||||||
|
|
||||||
-- mkV0 : V -> V0 ;
|
|
||||||
-- mkVS : V -> VS ;
|
|
||||||
-- mkV2S : V -> Prep -> V2S ;
|
|
||||||
mkVV : V -> VV = \v -> lin VV (v ** {isAux = False});
|
|
||||||
|
|
||||||
|
|
||||||
-- mkV2V : V -> Prep -> Prep -> V2V ;
|
|
||||||
-- mkVA : V -> VA ;
|
|
||||||
-- mkV2A : V -> Prep -> V2A ;
|
|
||||||
-- mkVQ : V -> VQ ;
|
|
||||||
-- mkV2Q : V -> Prep -> V2Q ;
|
|
||||||
--
|
|
||||||
-- mkAS : A -> AS ;
|
|
||||||
-- mkA2S : A -> Prep -> A2S ;
|
|
||||||
-- mkAV : A -> AV ;
|
|
||||||
-- mkA2V : A -> Prep -> A2V ;
|
|
||||||
-- mkA2V a p = a ** {c2 = p.s } ;
|
|
||||||
--
|
|
||||||
---- Notice: Categories $V0, AS, A2S, AV, A2V$ are just $A$.
|
|
||||||
---- $V0$ is just $V$; the second argument is treated as adverb.
|
|
||||||
--
|
|
||||||
-- V0 : Type ;
|
|
||||||
-- AS, A2S, AV, A2V : Type ;
|
|
||||||
--
|
|
||||||
----.
|
|
||||||
----2 Definitions of paradigms
|
|
||||||
----
|
|
||||||
---- The definitions should not bother the user of the API. So they are
|
|
||||||
---- hidden from the document.
|
|
||||||
--
|
|
||||||
-- Gender = MorphoHin.Gender ;
|
|
||||||
-- Number = MorphoHin.Number ;
|
|
||||||
-- Case = MorphoHin.Case ;
|
|
||||||
-- human = Masc ;
|
|
||||||
-- nonhuman = Neutr ;
|
|
||||||
-- masculine = Masc ;
|
|
||||||
-- feminine = Fem ;
|
|
||||||
-- singular = Sg ;
|
|
||||||
-- plural = Pl ;
|
|
||||||
-- nominative = Nom ;
|
|
||||||
-- genitive = Gen ;
|
|
||||||
-}
|
|
||||||
}
|
|
||||||
@@ -1,54 +0,0 @@
|
|||||||
concrete RelativePes of Relative = CatPes ** open ResPes in {
|
|
||||||
|
|
||||||
flags optimize=all_subs ;
|
|
||||||
coding = utf8;
|
|
||||||
|
|
||||||
lin
|
|
||||||
|
|
||||||
RelCl cl = {
|
|
||||||
s = \\t,p,o,agr => "kh" ++ cl.s ! t ! p ! o ;
|
|
||||||
};
|
|
||||||
-- RelVP and RelSlash slows the linking process a lot this is why it is commented for test purposes
|
|
||||||
|
|
||||||
RelVP rp vp = {
|
|
||||||
s = \\t,p,o,ag =>
|
|
||||||
let
|
|
||||||
agr = case rp.a of {
|
|
||||||
RNoAg => ag ;
|
|
||||||
RAg a => a
|
|
||||||
} ;
|
|
||||||
cl = mkSClause (rp.s) agr vp;
|
|
||||||
|
|
||||||
-- cl = case t of {
|
|
||||||
-- VPImpPast => mkSClause (rp.s ! (giveNumber agr) ! Obl) agr vp;
|
|
||||||
-- _ => mkSClause (rp.s ! (giveNumber agr) ! Dir) agr vp
|
|
||||||
-- };
|
|
||||||
in
|
|
||||||
cl.s ! t ! p ! ODir ;
|
|
||||||
-- c = Dir
|
|
||||||
} ;
|
|
||||||
|
|
||||||
|
|
||||||
---- Pied piping: "at which we are looking". Stranding and empty
|
|
||||||
---- relative are defined in $ExtraHin.gf$ ("that we are looking at",
|
|
||||||
---- "we are looking at").
|
|
||||||
--
|
|
||||||
RelSlash rp slash = {
|
|
||||||
s = \\t,p,o,agr => rp.s ++ slash.c2.s ++ slash.s ! t ! p ! o ;--case t of {
|
|
||||||
-- VPImpPast => rp.s ! (giveNumber agr) Obl ++ slash.c2.s ++ slash.s ! t ! p ! o ;
|
|
||||||
-- _ => rp.s ! (giveNumber agr) Dir ++ slash.c2.s ++ slash.s ! t ! p ! o
|
|
||||||
-- };
|
|
||||||
-- c = Dir
|
|
||||||
} ;
|
|
||||||
|
|
||||||
FunRP p np rp = {
|
|
||||||
s = np.s ! NPC enClic ++ rp.s ++ p.s ++ getPron np.animacy (fromAgr np.a).n ; -- need to make a special form of relative np by addY
|
|
||||||
a = RAg np.a
|
|
||||||
} ;
|
|
||||||
|
|
||||||
IdRP = {
|
|
||||||
s = "kh" ;
|
|
||||||
a = RNoAg
|
|
||||||
} ;
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,863 +0,0 @@
|
|||||||
--# -path=.:../abstract:../common:../../prelude
|
|
||||||
--
|
|
||||||
--1 Pnbu auxiliary operations.
|
|
||||||
--
|
|
||||||
-- This module contains operations that are needed to make the
|
|
||||||
-- resource syntax work.
|
|
||||||
|
|
||||||
resource ResPes = ParamX ** open Prelude,Predef in {
|
|
||||||
|
|
||||||
flags optimize=all ;
|
|
||||||
coding = utf8;
|
|
||||||
|
|
||||||
param
|
|
||||||
|
|
||||||
Order = ODir | OQuest ;
|
|
||||||
|
|
||||||
Animacy = Animate | Inanimate ;
|
|
||||||
PMood = Del | Imper | PCond ;
|
|
||||||
PPerson = PPers1
|
|
||||||
| PPers2
|
|
||||||
| PPers3;
|
|
||||||
|
|
||||||
VerbForm1 = VF Polarity VTense2 PPerson Number
|
|
||||||
| Vvform AgrPes
|
|
||||||
| Imp Polarity Number
|
|
||||||
| Inf
|
|
||||||
| Root1 | Root2 ;
|
|
||||||
VTense2 = PPresent2 PrAspect | PPast2 PstAspect | PFut2 FtAspect| Infr_Past2 InfrAspect;
|
|
||||||
PrAspect = PrPerf | PrImperf ;
|
|
||||||
PstAspect = PstPerf | PstImperf | PstAorist ;
|
|
||||||
FtAspect = FtAorist ; -- just keep FtAorist
|
|
||||||
InfrAspect = InfrPerf | InfrImperf ;
|
|
||||||
|
|
||||||
AgrPes = AgPes Number PPerson;
|
|
||||||
Ezafa = bEzafa | aEzafa | enClic;
|
|
||||||
NPCase = NPC Ezafa ;
|
|
||||||
CardOrd = NCard | NOrd ;
|
|
||||||
RAgr = RNoAg | RAg AgrPes ;
|
|
||||||
-- RCase = RC Number Case ;
|
|
||||||
param
|
|
||||||
CPolarity =
|
|
||||||
CPos
|
|
||||||
|CNeg Bool; -- contracted or not
|
|
||||||
|
|
||||||
oper
|
|
||||||
|
|
||||||
Noun = {s : Ezafa => Number => Str ; animacy : Animacy ; definitness : Bool } ;
|
|
||||||
|
|
||||||
Verb = {s : VerbForm1 => Str} ;
|
|
||||||
|
|
||||||
Compl : Type = {s : Str ; ra : Str ; c : VType} ;
|
|
||||||
|
|
||||||
Adjective = {s:Ezafa => Str ; adv : Str} ;
|
|
||||||
|
|
||||||
NP : Type = {s : NPCase => Str ; a : AgrPes ; animacy : Animacy } ;
|
|
||||||
Determiner = {s : Str ; n :Number ; isNum : Bool ; fromPron : Bool} ;
|
|
||||||
VPHSlash = VPH ** {c2 : Compl} ;
|
|
||||||
|
|
||||||
oper
|
|
||||||
contrNeg : Bool -> Polarity -> CPolarity = \b,p -> case p of {
|
|
||||||
Pos => CPos ;
|
|
||||||
Neg => CNeg b
|
|
||||||
} ;
|
|
||||||
|
|
||||||
-----------------------
|
|
||||||
--- Verb Phrase
|
|
||||||
-----------------------
|
|
||||||
|
|
||||||
oper
|
|
||||||
|
|
||||||
VPH : Type = {
|
|
||||||
s : VPHForm => {inf : Str} ;
|
|
||||||
obj : {s : Str ; a : AgrPes} ;
|
|
||||||
subj : VType ;
|
|
||||||
comp : AgrPes => Str;
|
|
||||||
vComp : AgrPes => Str;
|
|
||||||
inf : Str;
|
|
||||||
ad : Str;
|
|
||||||
embComp : Str ;
|
|
||||||
wish : Bool ;
|
|
||||||
} ;
|
|
||||||
param
|
|
||||||
|
|
||||||
VPHForm =
|
|
||||||
VPTense Polarity VPPTense AgrPes -- 9 * 12
|
|
||||||
-- | VPReq
|
|
||||||
| VPImp Polarity Number
|
|
||||||
-- | VPReqFut
|
|
||||||
| VVForm AgrPes
|
|
||||||
| VPStem1
|
|
||||||
| VPStem2
|
|
||||||
;
|
|
||||||
|
|
||||||
VPHTense =
|
|
||||||
VPres -- impf hum nahim "I go"
|
|
||||||
| VPast -- impf Ta nahim "I went"
|
|
||||||
| VFut -- fut na/nahim "I shall go"
|
|
||||||
| VPerfPres -- perf hum na/nahim "I have gone"
|
|
||||||
| VPerfPast -- perf Ta na/nahim "I had gone"
|
|
||||||
| VPerfFut
|
|
||||||
| VCondSimul
|
|
||||||
| VCondAnter -- subj na "I may go"
|
|
||||||
;
|
|
||||||
|
|
||||||
|
|
||||||
VType = VIntrans | VTrans | VTransPost ;
|
|
||||||
|
|
||||||
VPPTense =
|
|
||||||
VPPres Anteriority
|
|
||||||
|VPPast Anteriority
|
|
||||||
|VPFutr Anteriority
|
|
||||||
|VPCond Anteriority ;
|
|
||||||
oper
|
|
||||||
|
|
||||||
predV : Verb -> VPH = \verb -> {
|
|
||||||
s = \\vh =>
|
|
||||||
case vh of {
|
|
||||||
VPTense pol (VPPres Simul) (AgPes n p) => { inf = verb.s ! VF pol (PPresent2 PrImperf) p n } ;
|
|
||||||
VPTense pol (VPPres Anter) (AgPes n p) => { inf = verb.s ! VF pol (PPresent2 PrPerf) p n } ;
|
|
||||||
VPTense pol (VPPast Simul) (AgPes n p) => { inf =verb.s ! VF pol (PPast2 PstAorist) p n } ;
|
|
||||||
VPTense pol (VPPast Anter) (AgPes n p) => { inf =verb.s ! VF pol (PPast2 PstPerf) p n } ;
|
|
||||||
VPTense pol (VPFutr Simul) (AgPes n p) => { inf = verb.s ! VF pol (PFut2 FtAorist) p n } ;
|
|
||||||
VPTense pol (VPFutr Anter) (AgPes n p) => { inf = verb.s ! VF pol (PPresent2 PrPerf) p n } ; -- this is to be confirmed
|
|
||||||
VPTense pol (VPCond Simul) (AgPes n p) => { inf = verb.s ! VF pol (PPast2 PstImperf) p n } ;
|
|
||||||
VPTense pol (VPCond Anter) (AgPes n p) => { inf = verb.s ! VF pol (PPast2 PstImperf) p n } ;
|
|
||||||
VVForm (AgPes n p) => {inf = verb.s ! Vvform (AgPes n p)} ;
|
|
||||||
VPStem1 => { inf = verb.s ! Root1};
|
|
||||||
VPStem2 => { inf = verb.s ! Root2} ;
|
|
||||||
VPImp pol n => { inf = verb.s ! Imp pol n}
|
|
||||||
|
|
||||||
};
|
|
||||||
obj = {s = [] ; a = defaultAgrPes} ;
|
|
||||||
subj = VIntrans ;
|
|
||||||
inf = verb.s ! Inf;
|
|
||||||
ad = [];
|
|
||||||
embComp = [];
|
|
||||||
wish = False ;
|
|
||||||
vComp = \\_ => [] ;
|
|
||||||
comp = \\_ => []
|
|
||||||
} ;
|
|
||||||
|
|
||||||
predVc : (Verb ** {c2,c1 : Str}) -> VPHSlash = \verb ->
|
|
||||||
predV verb ** {c2 = {s = verb.c1 ; ra = [] ; c = VTrans} } ;
|
|
||||||
----------------------
|
|
||||||
-- Verb Phrase complimantation
|
|
||||||
------------------------
|
|
||||||
{-
|
|
||||||
insertObject : NP -> VPHSlash -> VPH = \np,vps -> {
|
|
||||||
s = vps.s ;
|
|
||||||
-- obj = {s = variants { vps.obj.s ++ np.s ++ vps.c2.s ; vps.obj.s ++ np.s } ; a = np.a} ;
|
|
||||||
obj = {s = case vps.c2.s of {
|
|
||||||
"rA" => np.s ++ vps.c2.s ++ vps.obj.s;
|
|
||||||
_ => vps.c2.s ++ np.s ++ vps.obj.s
|
|
||||||
};
|
|
||||||
a = np.a} ;
|
|
||||||
subj = vps.c2.c ;
|
|
||||||
inf = vps.inf;
|
|
||||||
ad = vps.ad;
|
|
||||||
embComp = vps.embComp;
|
|
||||||
-- wish = vps.wish ;
|
|
||||||
comp = vps.comp
|
|
||||||
} ;
|
|
||||||
-}
|
|
||||||
insertObjc : (AgrPes => Str) -> VPHSlash -> VPHSlash = \obj,vp ->
|
|
||||||
insertObj obj vp ** {c2 = vp.c2} ;
|
|
||||||
insertVVc : (AgrPes => Str) -> VPHSlash -> VPHSlash = \obj,vp ->
|
|
||||||
insertVV obj vp ** {c2 = vp.c2} ;
|
|
||||||
|
|
||||||
{-
|
|
||||||
insertSubj : PPerson -> Str -> Str = \p,s ->
|
|
||||||
case p of { Pers1 => s ++ "wN" ; _ => s ++ "E"};
|
|
||||||
-}
|
|
||||||
insertObj : (AgrPes => Str) -> VPH -> VPH = \obj1,vp -> {
|
|
||||||
s = vp.s ;
|
|
||||||
obj = vp.obj ;
|
|
||||||
subj = vp.subj ;
|
|
||||||
inf = vp.inf;
|
|
||||||
ad = vp.ad;
|
|
||||||
embComp = vp.embComp;
|
|
||||||
wish = vp.wish ;
|
|
||||||
vComp = vp.vComp ;
|
|
||||||
comp = \\a => vp.comp ! a ++ obj1 ! a
|
|
||||||
} ;
|
|
||||||
|
|
||||||
insertVV : (AgrPes => Str) -> VPH -> VPH = \obj1,vp -> {
|
|
||||||
s = vp.s ;
|
|
||||||
-- obj = vp.obj ;
|
|
||||||
obj = vp.obj ;
|
|
||||||
subj = vp.subj ;
|
|
||||||
inf = vp.inf;
|
|
||||||
ad = vp.ad;
|
|
||||||
embComp = vp.embComp;
|
|
||||||
wish = True ;
|
|
||||||
vComp = \\a => vp.comp ! a ++ obj1 ! a ;
|
|
||||||
comp = vp.comp
|
|
||||||
} ;
|
|
||||||
|
|
||||||
insertObj2 : (Str) -> VPH -> VPH = \obj1,vp -> {
|
|
||||||
s = vp.s;
|
|
||||||
obj = vp.obj ;
|
|
||||||
subj = vp.subj ;
|
|
||||||
inf = vp.inf;
|
|
||||||
ad = vp.ad;
|
|
||||||
embComp = vp.embComp ++ obj1;
|
|
||||||
wish = vp.wish ;
|
|
||||||
vComp = vp.vComp ;
|
|
||||||
comp = \\a => vp.comp ! a -- ++ obj1
|
|
||||||
|
|
||||||
} ;
|
|
||||||
insertObj3 : (Str) -> VPH -> VPH = \obj1,vp -> {
|
|
||||||
s = vp.s;
|
|
||||||
obj = {s = obj1 ++ vp.obj.s ; a = vp.obj.a };
|
|
||||||
subj = vp.subj ;
|
|
||||||
inf = vp.inf;
|
|
||||||
ad = vp.ad;
|
|
||||||
embComp = vp.embComp;
|
|
||||||
wish = vp.wish ;
|
|
||||||
vComp = vp.vComp ;
|
|
||||||
comp = vp.comp
|
|
||||||
|
|
||||||
} ;
|
|
||||||
|
|
||||||
|
|
||||||
insertObjc2 : Str -> VPHSlash -> VPHSlash = \obj,vp ->
|
|
||||||
insertObj2 obj vp ** {c2 = vp.c2} ;
|
|
||||||
insertObjc3 : Str -> VPHSlash -> VPHSlash = \obj,vp ->
|
|
||||||
insertObj3 obj vp ** {c2 = vp.c2} ;
|
|
||||||
{-
|
|
||||||
infVP : Bool -> VPH -> Agr -> Str = \isAux,vp,a ->
|
|
||||||
vp.obj.s ++ vp.inf ++ vp.comp ! a ;
|
|
||||||
-}
|
|
||||||
infVV : Bool -> VPH -> {s : AgrPes => Str} = \isAux,vp ->
|
|
||||||
{s = \\agr => case agr of {
|
|
||||||
AgPes n p => (vp.ad ++ vp.comp ! (toAgr n p)) ++ (vp.s ! VVForm (AgPes n p)).inf }};
|
|
||||||
|
|
||||||
insertObjPre : (AgrPes => Str) -> VPHSlash -> VPH = \obj,vp -> {
|
|
||||||
s = vp.s ;
|
|
||||||
obj = vp.obj ;
|
|
||||||
inf = vp.inf ;
|
|
||||||
subj = vp.subj ;
|
|
||||||
ad = vp.ad ;
|
|
||||||
embComp = vp.embComp;
|
|
||||||
wish = vp.wish ;
|
|
||||||
vComp = vp.vComp ;
|
|
||||||
-- comp = \\a => case vp.c2.s of {"rA" => obj ! a ++ vp.c2.s ++ vp.comp ! a ; _ => vp.c2.s ++ obj ! a ++ vp.comp ! a} -- gives linking error
|
|
||||||
comp = \\a => vp.c2.s ++ obj ! a ++ vp.c2.ra ++ vp.comp ! a
|
|
||||||
} ;
|
|
||||||
|
|
||||||
insertAdV : Str -> VPH -> VPH = \ad,vp -> {
|
|
||||||
s = vp.s ;
|
|
||||||
obj = vp.obj ;
|
|
||||||
inf = vp.inf ;
|
|
||||||
subj = vp.subj;
|
|
||||||
ad = vp.ad ++ ad ;
|
|
||||||
embComp = vp.embComp;
|
|
||||||
wish = vp.wish ;
|
|
||||||
vComp = vp.vComp ;
|
|
||||||
comp = vp.comp
|
|
||||||
} ;
|
|
||||||
|
|
||||||
conjThat : Str = "kh" ;
|
|
||||||
{- checkPron : NP -> Str -> Str = \np,str -> case (np.isPron) of {
|
|
||||||
True => np.s ! NPC Obl;
|
|
||||||
False => np.s ! NPC Obl ++ str} ;
|
|
||||||
|
|
||||||
insertEmbCompl : VPH -> Str -> VPH = \vp,emb -> {
|
|
||||||
s = vp.s ;
|
|
||||||
obj = vp.obj ;
|
|
||||||
inf = vp.inf ;
|
|
||||||
subj = vp.subj;
|
|
||||||
ad = vp.ad;
|
|
||||||
embComp = vp.embComp ++ emb;
|
|
||||||
wish = vp.wish ;
|
|
||||||
comp = vp.comp
|
|
||||||
} ;
|
|
||||||
|
|
||||||
insertTrans : VPH -> VType -> VPH = \vp,vtype -> {
|
|
||||||
s = vp.s ;
|
|
||||||
obj = vp.obj ;
|
|
||||||
inf = vp.inf ;
|
|
||||||
subj = case vtype of {VIntrans => VTransPost ; VTrans => VTrans ; _ => vtype} ; -- still some problem not working properly
|
|
||||||
ad = vp.ad;
|
|
||||||
embComp = vp.embComp ;
|
|
||||||
wish = vp.wish ;
|
|
||||||
comp = vp.comp
|
|
||||||
} ;
|
|
||||||
-}
|
|
||||||
---------------------------
|
|
||||||
--- Clauses
|
|
||||||
---------------------------
|
|
||||||
Clause : Type = {s : VPHTense => Polarity => Order => Str} ;
|
|
||||||
mkClause : NP -> VPH -> Clause = \np,vp -> {
|
|
||||||
s = \\vt,b,ord =>
|
|
||||||
let
|
|
||||||
subj = np.s ! NPC bEzafa;
|
|
||||||
agr = np.a ;
|
|
||||||
n = (fromAgr agr).n;
|
|
||||||
p = (fromAgr agr).p;
|
|
||||||
vps = case <b,vt> of {
|
|
||||||
|
|
||||||
<Pos,VPres> => vp.s ! VPTense Pos (VPPres Simul) (AgPes n p) ;
|
|
||||||
<Neg,VPres> => vp.s ! VPTense Neg (VPPres Simul) (AgPes n p) ;
|
|
||||||
<Pos,VPerfPres> => vp.s ! VPTense Pos (VPPres Anter) (AgPes n p) ;
|
|
||||||
<Neg,VPerfPres> => vp.s ! VPTense Neg (VPPres Anter) (AgPes n p) ;
|
|
||||||
<Pos,VPast> => vp.s ! VPTense Pos (VPPast Simul) (AgPes n p) ;
|
|
||||||
<Neg,VPast> => vp.s ! VPTense Neg (VPPast Simul) (AgPes n p) ;
|
|
||||||
<Pos,VPerfPast> => vp.s ! VPTense Pos (VPPast Anter) (AgPes n p) ;
|
|
||||||
<Pos,VFut> => case vp.wish of
|
|
||||||
{True => vp.s ! VPTense Pos (VPPres Simul) (AgPes n p) ;
|
|
||||||
False => vp.s ! VPTense Pos (VPFutr Simul) (AgPes n p) };
|
|
||||||
<Pos,VPerfFut> => case vp.wish of
|
|
||||||
{True => vp.s ! VPTense Pos (VPPres Anter) (AgPes n p) ;
|
|
||||||
False => vp.s ! VPTense Pos (VPFutr Anter) (AgPes n p) }; -- verb form need to be confirmed
|
|
||||||
<Pos,VCondSimul> => vp.s ! VPTense Pos (VPCond Simul) (AgPes n p) ;
|
|
||||||
<Pos,VCondAnter> => vp.s ! VPTense Pos (VPCond Anter) (AgPes n p); -- verb form to be confirmed
|
|
||||||
<Neg,VPerfPast> => vp.s ! VPTense Neg (VPPast Anter) (AgPes n p) ;
|
|
||||||
<Neg,VFut> => case vp.wish of
|
|
||||||
{True => vp.s ! VPTense Neg (VPPres Simul) (AgPes n p) ;
|
|
||||||
False => vp.s ! VPTense Neg (VPFutr Simul) (AgPes n p) };
|
|
||||||
<Neg,VPerfFut> => case vp.wish of
|
|
||||||
{True => vp.s ! VPTense Neg (VPPres Anter) (AgPes n p) ;
|
|
||||||
False => vp.s ! VPTense Neg (VPFutr Anter) (AgPes n p) }; -- verb form need to be confirmed
|
|
||||||
<Neg,VCondSimul> => vp.s ! VPTense Neg (VPCond Simul) (AgPes n p) ;
|
|
||||||
<Neg,VCondAnter> => vp.s ! VPTense Neg (VPCond Anter) (AgPes n p) -- verb form to be confirmed
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
quest =
|
|
||||||
case ord of
|
|
||||||
{ ODir => [];
|
|
||||||
OQuest => "A:yA" };
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
in
|
|
||||||
|
|
||||||
quest ++ subj ++ vp.ad ++ vp.comp ! np.a ++ vp.obj.s ++ vps.inf ++ vp.vComp ! np.a ++ vp.embComp
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
--Clause : Type = {s : VPHTense => Polarity => Order => Str} ;
|
|
||||||
mkSClause : Str -> AgrPes -> VPH -> Clause = \subj,agr,vp -> {
|
|
||||||
s = \\vt,b,ord =>
|
|
||||||
let
|
|
||||||
n = (fromAgr agr).n;
|
|
||||||
p = (fromAgr agr).p;
|
|
||||||
vps = case <b,vt> of {
|
|
||||||
|
|
||||||
<Pos,VPres> => vp.s ! VPTense Pos (VPPres Simul) (AgPes n p) ;
|
|
||||||
<Neg,VPres> => vp.s ! VPTense Neg (VPPres Simul) (AgPes n p) ;
|
|
||||||
<Pos,VPerfPres> => vp.s ! VPTense Pos (VPPres Anter) (AgPes n p) ;
|
|
||||||
<Neg,VPerfPres> => vp.s ! VPTense Neg (VPPres Anter) (AgPes n p) ;
|
|
||||||
<Pos,VPast> => vp.s ! VPTense Pos (VPPast Simul) (AgPes n p) ;
|
|
||||||
<Neg,VPast> => vp.s ! VPTense Neg (VPPast Simul) (AgPes n p) ;
|
|
||||||
<Pos,VPerfPast> => vp.s ! VPTense Pos (VPPast Anter) (AgPes n p) ;
|
|
||||||
<Pos,VFut> => case vp.wish of
|
|
||||||
{True => vp.s ! VPTense Pos (VPPres Simul) (AgPes n p) ;
|
|
||||||
False => vp.s ! VPTense Pos (VPFutr Simul) (AgPes n p) };
|
|
||||||
<Pos,VPerfFut> => case vp.wish of
|
|
||||||
{True => vp.s ! VPTense Pos (VPPres Anter) (AgPes n p) ;
|
|
||||||
False => vp.s ! VPTense Pos (VPFutr Anter) (AgPes n p) }; -- verb form need to be confirmed
|
|
||||||
<Pos,VCondSimul> => vp.s ! VPTense Pos (VPCond Simul) (AgPes n p) ;
|
|
||||||
<Pos,VCondAnter> => vp.s ! VPTense Pos (VPCond Anter) (AgPes n p); -- verb form to be confirmed
|
|
||||||
<Neg,VPerfPast> => vp.s ! VPTense Neg (VPPast Anter) (AgPes n p) ;
|
|
||||||
<Neg,VFut> => case vp.wish of
|
|
||||||
{True => vp.s ! VPTense Neg (VPPres Simul) (AgPes n p) ;
|
|
||||||
False => vp.s ! VPTense Neg (VPFutr Simul) (AgPes n p) };
|
|
||||||
<Neg,VPerfFut> => case vp.wish of
|
|
||||||
{True => vp.s ! VPTense Neg (VPPres Anter) (AgPes n p) ;
|
|
||||||
False => vp.s ! VPTense Neg (VPFutr Anter) (AgPes n p) }; -- verb form need to be confirmed
|
|
||||||
<Neg,VCondSimul> => vp.s ! VPTense Neg (VPCond Simul) (AgPes n p) ;
|
|
||||||
<Neg,VCondAnter> => vp.s ! VPTense Neg (VPCond Anter) (AgPes n p) -- verb form to be confirmed
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
quest =
|
|
||||||
case ord of
|
|
||||||
{ ODir => [];
|
|
||||||
OQuest => "A:yA" };
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
in
|
|
||||||
|
|
||||||
quest ++ subj ++ vp.ad ++ vp.comp ! agr ++ vp.obj.s ++ vps.inf ++ vp.vComp ! agr ++ vp.embComp
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
predAux : Aux -> VPH = \verb -> {
|
|
||||||
s = \\vh =>
|
|
||||||
|
|
||||||
case vh of {
|
|
||||||
VPTense pol (VPPres Simul) (AgPes n p) => { inf = verb.inf ! AX pol (AuxPresent PrImperf) p n } ;
|
|
||||||
VPTense pol (VPPres Anter) (AgPes n p) => { inf = verb.inf ! AX pol (AuxPresent PrPerf) p n } ;
|
|
||||||
VPTense pol (VPPast Simul) (AgPes n p) => { inf = verb.inf ! AX pol (AuxPast PstAorist) p n } ;
|
|
||||||
VPTense pol (VPPast Anter) (AgPes n p) => { inf = verb.inf ! AX pol (AuxPresent PrPerf) p n } ;
|
|
||||||
VPTense pol (VPFutr Simul) (AgPes n p) => { inf = verb.inf ! AX pol (AuxFut FtAorist) p n } ;
|
|
||||||
VPTense pol (VPFutr Anter) (AgPes n p) => { inf = verb.inf ! AX pol (AuxFut FtAorist) p n } ; -- this is to be confirmed
|
|
||||||
VPTense pol (VPCond Simul) (AgPes n p) => { inf = verb.inf ! AX pol (AuxFut FtAorist) p n } ;
|
|
||||||
VPTense pol (VPCond Anter) (AgPes n p) => { inf = verb.inf ! AX pol (AuxPast PstImperf) p n } ;
|
|
||||||
VVForm (AgPes n p) => {inf = ""} ; -- to be checked
|
|
||||||
VPStem1 => { inf = ""};
|
|
||||||
VPStem2 => { inf = "bvd"} ;
|
|
||||||
VPImp _ _ => { inf = ""} -- need to be confirmed
|
|
||||||
-- _ => { inf = ""}
|
|
||||||
};
|
|
||||||
obj = {s = [] ; a = defaultAgrPes} ;
|
|
||||||
subj = VIntrans ;
|
|
||||||
inf = "bvdn";
|
|
||||||
ad = [];
|
|
||||||
embComp = [];
|
|
||||||
wish = False ;
|
|
||||||
vComp = \\_ => [] ;
|
|
||||||
comp = \\_ => []
|
|
||||||
} ;
|
|
||||||
|
|
||||||
|
|
||||||
Aux = {
|
|
||||||
inf : AuxForm => Str ;
|
|
||||||
} ;
|
|
||||||
|
|
||||||
auxBe : Aux = {
|
|
||||||
inf = table {
|
|
||||||
|
|
||||||
AX pol tense person number => (mkAux pol tense person number).s
|
|
||||||
} ;
|
|
||||||
} ;
|
|
||||||
|
|
||||||
mkAux : Polarity -> AuxTense -> PPerson -> Number -> {s:Str}= \pol,t,p,n ->
|
|
||||||
{s =
|
|
||||||
let bodh = "bvdh" ;
|
|
||||||
nbodh = "nbvdh" ;
|
|
||||||
hast = "hst" ;
|
|
||||||
nhast = "nyst" ;
|
|
||||||
bod = "bvd" ;
|
|
||||||
khah = "KvAh" ;
|
|
||||||
mekhah = "my" ++ khah ;
|
|
||||||
bash = "bAC" ;
|
|
||||||
nbod = "nbvd" ;
|
|
||||||
nkhah = "nKvAh" ;
|
|
||||||
nmekhah = "nmy" ++ khah ;
|
|
||||||
nbash = "nbAC"
|
|
||||||
in
|
|
||||||
case <pol,t,p,n> of {
|
|
||||||
<Pos,AuxPresent PrPerf,PPers1,Sg> => bodh ++ "Am" ;
|
|
||||||
<Pos,AuxPresent PrPerf,PPers1,Pl> => bodh ++ "Aym" ;
|
|
||||||
<Pos,AuxPresent PrPerf,PPers2,Sg> => bodh ++ "Ay" ;
|
|
||||||
<Pos,AuxPresent PrPerf,PPers2,Pl> => bodh ++ "Ayd" ;
|
|
||||||
<Pos,AuxPresent PrPerf,PPers3,Sg> => bodh ++ "Ast" ;
|
|
||||||
<Pos,AuxPresent PrPerf,PPers3,Pl> => bodh ++ "And" ;
|
|
||||||
|
|
||||||
<Pos,AuxPresent PrImperf,PPers1,Sg> => hast + "m" ;
|
|
||||||
<Pos,AuxPresent PrImperf,PPers1,Pl> => hast + "ym" ;
|
|
||||||
<Pos,AuxPresent PrImperf,PPers2,Sg> => hast + "y" ;
|
|
||||||
<Pos,AuxPresent PrImperf,PPers2,Pl> => hast + "yd" ;
|
|
||||||
<Pos,AuxPresent PrImperf,PPers3,Sg> => "Ast" ;
|
|
||||||
<Pos,AuxPresent PrImperf,PPers3,Pl> => hast + "nd" ;
|
|
||||||
|
|
||||||
|
|
||||||
<Pos,AuxPast PstPerf,PPers1,Sg> => "";
|
|
||||||
<Pos,AuxPast PstPerf,PPers1,Pl> => "" ;
|
|
||||||
<Pos,AuxPast PstPerf,PPers2,Sg> => "" ;
|
|
||||||
<Pos,AuxPast PstPerf,PPers2,Pl> => "" ;
|
|
||||||
<Pos,AuxPast PstPerf,PPers3,Sg> => "" ;
|
|
||||||
<Pos,AuxPast PstPerf,PPers3,Pl> => "" ;
|
|
||||||
|
|
||||||
<Pos,AuxPast PstImperf,PPers1,Sg> => "my" ++ bod + "m" ;
|
|
||||||
<Pos,AuxPast PstImperf,PPers1,Pl> => "my" ++ bod + "ym" ;
|
|
||||||
<Pos,AuxPast PstImperf,PPers2,Sg> => "my" ++ bod + "y";
|
|
||||||
<Pos,AuxPast PstImperf,PPers2,Pl> => "my" ++ bod + "yd" ;
|
|
||||||
<Pos,AuxPast PstImperf,PPers3,Sg> => "my" ++ bod ;
|
|
||||||
<Pos,AuxPast PstImperf,PPers3,Pl> => "my" ++ bod + "nd" ;
|
|
||||||
|
|
||||||
<Pos,AuxPast PstAorist,PPers1,Sg> => bod + "m" ;
|
|
||||||
<Pos,AuxPast PstAorist,PPers1,Pl> => bod + "ym" ;
|
|
||||||
<Pos,AuxPast PstAorist,PPers2,Sg> => bod + "y";
|
|
||||||
<Pos,AuxPast PstAorist,PPers2,Pl> => bod + "yd" ;
|
|
||||||
<Pos,AuxPast PstAorist,PPers3,Sg> => bod ;
|
|
||||||
<Pos,AuxPast PstAorist,PPers3,Pl> => bod + "nd" ;
|
|
||||||
|
|
||||||
{-
|
|
||||||
<Pos,AuxFut FtImperf,PPers1,Sg> => mekhah + "m" ++ bash + "m" ;
|
|
||||||
<Pos,AuxFut FtImperf,PPers1,Pl> => mekhah + "ym" ++ bash + "ym" ;
|
|
||||||
<Pos,AuxFut FtImperf,PPers2,Sg> => mekhah + "y" ++ bash + "y" ;
|
|
||||||
<Pos,AuxFut FtImperf,PPers2,Pl> => mekhah + "yd" ++ bash + "yd" ;
|
|
||||||
<Pos,AuxFut FtImperf,PPers3,Sg> => mekhah + "d" ++ bash + "d" ;
|
|
||||||
<Pos,AuxFut FtImperf,PPers3,Pl> => mekhah + "nd" ++ bash + "nd" ;
|
|
||||||
-}
|
|
||||||
<Pos,AuxFut FtAorist,PPers1,Sg> => khah + "m" ++ bod ;
|
|
||||||
<Pos,AuxFut FtAorist,PPers1,Pl> => khah + "ym" ++ bod ;
|
|
||||||
<Pos,AuxFut Ftorist,PPers2,Sg> => khah + "y" ++ bod ;
|
|
||||||
<Pos,AuxFut FtAorist,PPers2,Pl> => khah + "yd" ++ bod ;
|
|
||||||
<Pos,AuxFut FtAorist,PPers3,Sg> => khah + "d" ++ bod ;
|
|
||||||
<Pos,AuxFut FtAorist,PPers3,Pl> => khah + "nd" ++ bod ;
|
|
||||||
|
|
||||||
-- nagatives
|
|
||||||
|
|
||||||
<Neg,AuxPresent PrPerf,PPers1,Sg> => nbodh ++ "Am" ;
|
|
||||||
<Neg,AuxPresent PrPerf,PPers1,Pl> => nbodh ++ "Aym" ;
|
|
||||||
<Neg,AuxPresent PrPerf,PPers2,Sg> => nbodh ++ "Ay" ;
|
|
||||||
<Neg,AuxPresent PrPerf,PPers2,Pl> => nbodh ++ "Ayd" ;
|
|
||||||
<Neg,AuxPresent PrPerf,PPers3,Sg> => nbodh ++ "Ast" ;
|
|
||||||
<Neg,AuxPresent PrPerf,PPers3,Pl> => nbodh ++ "And" ;
|
|
||||||
|
|
||||||
<Neg,AuxPresent PrImperf,PPers1,Sg> => nhast + "m" ;
|
|
||||||
<Neg,AuxPresent PrImperf,PPers1,Pl> => nhast + "ym" ;
|
|
||||||
<Neg,AuxPresent PrImperf,PPers2,Sg> => nhast + "y" ;
|
|
||||||
<Neg,AuxPresent PrImperf,PPers2,Pl> => nhast + "yd" ;
|
|
||||||
<Neg,AuxPresent PrImperf,PPers3,Sg> => "nyst" ;
|
|
||||||
<Neg,AuxPresent PrImperf,PPers3,Pl> => nhast + "nd" ;
|
|
||||||
|
|
||||||
|
|
||||||
<Neg,AuxPast PstPerf,PPers1,Sg> => "";
|
|
||||||
<Neg,AuxPast PstPerf,PPers1,Pl> => "" ;
|
|
||||||
<Neg,AuxPast PstPerf,PPers2,Sg> => "" ;
|
|
||||||
<Neg,AuxPast PstPerf,PPers2,Pl> => "" ;
|
|
||||||
<Neg,AuxPast PstPerf,PPers3,Sg> => "" ;
|
|
||||||
<Neg,AuxPast PstPerf,PPers3,Pl> => "" ;
|
|
||||||
|
|
||||||
<Neg,AuxPast PstImperf,PPers1,Sg> => "nmy" ++ bod + "m" ;
|
|
||||||
<Neg,AuxPast PstImperf,PPers1,Pl> => "nmy" ++ bod + "ym" ;
|
|
||||||
<Neg,AuxPast PstImperf,PPers2,Sg> => "nmy" ++ bod + "y";
|
|
||||||
<Neg,AuxPast PstImperf,PPers2,Pl> => "nmy" ++ bod + "yd" ;
|
|
||||||
<Neg,AuxPast PstImperf,PPers3,Sg> => "nmy" ++ bod ;
|
|
||||||
<Neg,AuxPast PstImperf,PPers3,Pl> => "nmy" ++ bod + "nd" ;
|
|
||||||
|
|
||||||
<Neg,AuxPast PstAorist,PPers1,Sg> => nbod + "m" ;
|
|
||||||
<Neg,AuxPast PstAorist,PPers1,Pl> => nbod + "ym" ;
|
|
||||||
<Neg,AuxPast PstAorist,PPers2,Sg> => nbod + "y";
|
|
||||||
<Neg,AuxPast PstAorist,PPers2,Pl> => nbod + "yd" ;
|
|
||||||
<Neg,AuxPast PstAorist,PPers3,Sg> => nbod ;
|
|
||||||
<Neg,AuxPast PstAorist,PPers3,Pl> => nbod + "nd" ;
|
|
||||||
|
|
||||||
{-
|
|
||||||
<Neg,AuxFut FtImperf,PPers1,Sg> => nmekhah + "m" ++ bash + "m" ;
|
|
||||||
<Neg,AuxFut FtImperf,PPers1,Pl> => nmekhah + "ym" ++ bash + "ym" ;
|
|
||||||
<Neg,AuxFut FtImperf,PPers2,Sg> => nmekhah + "y" ++ bash + "y" ;
|
|
||||||
<Neg,AuxFut FtImperf,PPers2,Pl> => nmekhah + "yd" ++ bash + "yd" ;
|
|
||||||
<Neg,AuxFut FtImperf,PPers3,Sg> => nmekhah + "d" ++ bash + "d" ;
|
|
||||||
<Neg,AuxFut FtImperf,PPers3,Pl> => nmekhah + "nd" ++ bash + "nd" ;
|
|
||||||
-}
|
|
||||||
<Neg,AuxFut FtAorist,PPers1,Sg> => nkhah + "m" ++ bod ;
|
|
||||||
<Neg,AuxFut FtAorist,PPers1,Pl> => nkhah + "ym" ++ bod ;
|
|
||||||
<Neg,AuxFut Ftorist,PPers2,Sg> => nkhah + "y" ++ bod ;
|
|
||||||
<Neg,AuxFut FtAorist,PPers2,Pl> => nkhah + "yd" ++ bod ;
|
|
||||||
<Neg,AuxFut FtAorist,PPers3,Sg> => nkhah + "d" ++ bod ;
|
|
||||||
<Neg,AuxFut FtAorist,PPers3,Pl> => nkhah + "nd" ++ bod
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{-
|
|
||||||
<Infr_Past2 InfrPerf,PPers1,Sg> => khordh ++ bvdh ++ "Am" ;
|
|
||||||
<Infr_Past2 InfrPerf,PPers1,Pl> => khordh ++ bvdh ++ "Aym" ;
|
|
||||||
<Infr_Past2 InfrPerf,PPers2,Sg> => khordh ++ bvdh ++ "Ay" ;
|
|
||||||
<Infr_Past2 InfrPerf,PPers2,Pl> => khordh ++ bvdh ++ "Ayd" ;
|
|
||||||
<Infr_Past2 InfrPerf,PPers3,Sg> => khordh ++ bvdh ++ "Ast" ;
|
|
||||||
<Infr_Past2 InfrPerf,PPers3,Pl> => khordh ++ bvdh ++ "And" ;
|
|
||||||
|
|
||||||
<Infr_Past2 InfrImperf,PPers1,Sg> => mekhordh ++ "Am" ;
|
|
||||||
<Infr_Past2 InfrImperf,PPers1,Pl> => mekhordh ++ "Aym" ;
|
|
||||||
<Infr_Past2 InfrImperf,PPers2,Sg> => mekhordh ++ "Ay" ;
|
|
||||||
<Infr_Past2 InfrImperf,PPers2,Pl> => mekhordh ++ "Ayd" ;
|
|
||||||
<Infr_Past2 InfrImperf,PPers3,Sg> => mekhordh ++ "Ast" ;
|
|
||||||
<Infr_Past2 InfrImperf,PPers3,Pl> => mekhordh ++ "And"
|
|
||||||
|
|
||||||
|
|
||||||
-}
|
|
||||||
}
|
|
||||||
} ;
|
|
||||||
|
|
||||||
param
|
|
||||||
AuxTense = AuxPresent PrAspect | AuxPast PstAspect | AuxFut FtAspect ;
|
|
||||||
AuxForm = AX Polarity AuxTense PPerson Number ;
|
|
||||||
|
|
||||||
|
|
||||||
oper
|
|
||||||
toHave : Polarity -> VTense2 -> Number -> PPerson -> {s:Str} = \pol,t,n,p -> {
|
|
||||||
s = let dasht = "dACt";
|
|
||||||
ndasht = "ndACt" ;
|
|
||||||
dashteh = "dACth";
|
|
||||||
ndashteh = "ndACth" ;
|
|
||||||
dar = "dAr" ;
|
|
||||||
ndar = "ndAr" ;
|
|
||||||
khah = "KvAh" ;
|
|
||||||
nkhah = "nKvAh" ;
|
|
||||||
bvdh = "bvdh" ;
|
|
||||||
in case <pol,t,p,n> of {
|
|
||||||
<Pos,PPresent2 PrPerf,PPers1,Sg> => dashteh ++ "Am" ;
|
|
||||||
<Pos,PPresent2 PrPerf,PPers1,Pl> => dashteh ++ "Aym" ;
|
|
||||||
<Pos,PPresent2 PrPerf,PPers2,Sg> => dashteh ++ "Ay" ;
|
|
||||||
<Pos,PPresent2 PrPerf,PPers2,Pl> => dashteh ++ "Ayd" ;
|
|
||||||
<Pos,PPresent2 PrPerf,PPers3,Sg> => dashteh ++ "Ast" ;
|
|
||||||
<Pos,PPresent2 PrPerf,PPers3,Pl> => dashteh ++ "And" ;
|
|
||||||
|
|
||||||
<Pos,PPresent2 PrImperf,PPers1,Sg> => dar + "m" ;
|
|
||||||
<Pos,PPresent2 PrImperf,PPers1,Pl> => dar + "ym" ;
|
|
||||||
<Pos,PPresent2 PrImperf,PPers2,Sg> => dar + "y" ;
|
|
||||||
<Pos,PPresent2 PrImperf,PPers2,Pl> => dar + "yd" ;
|
|
||||||
<Pos,PPresent2 PrImperf,PPers3,Sg> => dar + "d" ;
|
|
||||||
<Pos,PPresent2 PrImperf,PPers3,Pl> => dar + "nd" ;
|
|
||||||
|
|
||||||
|
|
||||||
<Pos,PPast2 PstPerf,PPers1,Sg> => dashteh ++ "bvdm" ;
|
|
||||||
<Pos,PPast2 PstPerf,PPers1,Pl> => dashteh ++ "bvdym" ;
|
|
||||||
<Pos,PPast2 PstPerf,PPers2,Sg> => dashteh ++ "bvdy" ;
|
|
||||||
<Pos,PPast2 PstPerf,PPers2,Pl> => dashteh ++ "bvdyd" ;
|
|
||||||
<Pos,PPast2 PstPerf,PPers3,Sg> => dashteh ++ "bvd" ;
|
|
||||||
<Pos,PPast2 PstPerf,PPers3,Pl> => dashteh ++ "bvdnd" ;
|
|
||||||
|
|
||||||
<Pos,PPast2 PstImperf,PPers1,Sg> => dasht + "m" ;
|
|
||||||
<Pos,PPast2 PstImperf,PPers1,Pl> => dasht + "ym" ;
|
|
||||||
<Pos,PPast2 PstImperf,PPers2,Sg> => dasht + "y";
|
|
||||||
<Pos,PPast2 PstImperf,PPers2,Pl> => dasht + "yd" ;
|
|
||||||
<Pos,PPast2 PstImperf,PPers3,Sg> => dasht ;
|
|
||||||
<Pos,PPast2 PstImperf,PPers3,Pl> => dasht + "nd" ;
|
|
||||||
|
|
||||||
<Pos,PPast2 PstAorist,PPers1,Sg> => dasht + "m" ;
|
|
||||||
<Pos,PPast2 PstAorist,PPers1,Pl> => dasht + "ym" ;
|
|
||||||
<Pos,PPast2 PstAorist,PPers2,Sg> => dasht + "y";
|
|
||||||
<Pos,PPast2 PstAorist,PPers2,Pl> => dasht + "yd" ;
|
|
||||||
<Pos,PPast2 PstAorist,PPers3,Sg> => dasht ;
|
|
||||||
<Pos,PPast2 PstAorist,PPers3,Pl> => dasht + "nd" ;
|
|
||||||
|
|
||||||
|
|
||||||
<Pos,PFut2 FtAorist,PPers1,Sg> => khah + "m" ++ dasht ;
|
|
||||||
<Pos,PFut2 FtAorist,PPers1,Pl> => khah + "ym" ++ dasht ;
|
|
||||||
<Pos,PFut2 Ftorist,PPers2,Sg> => khah + "y" ++ dasht ;
|
|
||||||
<Pos,PFut2 FtAorist,PPers2,Pl> => khah + "yd" ++ dasht ;
|
|
||||||
<Pos,PFut2 FtAorist,PPers3,Sg> => khah + "d" ++ dasht ;
|
|
||||||
<Pos,PFut2 FtAorist,PPers3,Pl> => khah + "nd" ++ dasht ;
|
|
||||||
|
|
||||||
|
|
||||||
<Pos,Infr_Past2 InfrPerf,PPers1,Sg> => dashteh ++ bvdh ++ "Am" ;
|
|
||||||
<Pos,Infr_Past2 InfrPerf,PPers1,Pl> => dashteh ++ bvdh ++ "Aym" ;
|
|
||||||
<Pos,Infr_Past2 InfrPerf,PPers2,Sg> => dashteh ++ bvdh ++ "Ay" ;
|
|
||||||
<Pos,Infr_Past2 InfrPerf,PPers2,Pl> => dashteh ++ bvdh ++ "Ayd" ;
|
|
||||||
<Pos,Infr_Past2 InfrPerf,PPers3,Sg> => dashteh ++ bvdh ++ "Ast" ;
|
|
||||||
<Pos,Infr_Past2 InfrPerf,PPers3,Pl> => dashteh ++ bvdh ++ "And" ;
|
|
||||||
|
|
||||||
<Pos,Infr_Past2 InfrImperf,PPers1,Sg> => dashteh ++ "Am" ;
|
|
||||||
<Pos,Infr_Past2 InfrImperf,PPers1,Pl> => dashteh ++ "Aym" ;
|
|
||||||
<Pos,Infr_Past2 InfrImperf,PPers2,Sg> => dashteh ++ "Ay" ;
|
|
||||||
<Pos,Infr_Past2 InfrImperf,PPers2,Pl> => dashteh ++ "Ayd" ;
|
|
||||||
<Pos,Infr_Past2 InfrImperf,PPers3,Sg> => dashteh ++ "Ast" ;
|
|
||||||
<Pos,Infr_Past2 InfrImperf,PPers3,Pl> => dashteh ++ "And" ;
|
|
||||||
|
|
||||||
-- negatives
|
|
||||||
|
|
||||||
<Neg,PPresent2 PrPerf,PPers1,Sg> => ndashteh ++ "Am" ;
|
|
||||||
<Neg,PPresent2 PrPerf,PPers1,Pl> => ndashteh ++ "Aym" ;
|
|
||||||
<Neg,PPresent2 PrPerf,PPers2,Sg> => ndashteh ++ "Ay" ;
|
|
||||||
<Neg,PPresent2 PrPerf,PPers2,Pl> => ndashteh ++ "Ayd" ;
|
|
||||||
<Neg,PPresent2 PrPerf,PPers3,Sg> => ndashteh ++ "Ast" ;
|
|
||||||
<Neg,PPresent2 PrPerf,PPers3,Pl> => ndashteh ++ "And" ;
|
|
||||||
|
|
||||||
<Neg,PPresent2 PrImperf,PPers1,Sg> => ndar + "m" ;
|
|
||||||
<Neg,PPresent2 PrImperf,PPers1,Pl> => ndar + "ym" ;
|
|
||||||
<Neg,PPresent2 PrImperf,PPers2,Sg> => ndar + "y" ;
|
|
||||||
<Neg,PPresent2 PrImperf,PPers2,Pl> => ndar + "yd" ;
|
|
||||||
<Neg,PPresent2 PrImperf,PPers3,Sg> => ndar + "d" ;
|
|
||||||
<Neg,PPresent2 PrImperf,PPers3,Pl> => ndar + "nd" ;
|
|
||||||
|
|
||||||
|
|
||||||
<Neg,PPast2 PstPerf,PPers1,Sg> => ndashteh ++ "bvdm" ;
|
|
||||||
<Neg,PPast2 PstPerf,PPers1,Pl> => ndashteh ++ "bvdym" ;
|
|
||||||
<Neg,PPast2 PstPerf,PPers2,Sg> => ndashteh ++ "bvdy" ;
|
|
||||||
<Neg,PPast2 PstPerf,PPers2,Pl> => ndashteh ++ "bvdyd" ;
|
|
||||||
<Neg,PPast2 PstPerf,PPers3,Sg> => ndashteh ++ "bvd" ;
|
|
||||||
<Neg,PPast2 PstPerf,PPers3,Pl> => ndashteh ++ "bvdnd" ;
|
|
||||||
|
|
||||||
<Neg,PPast2 PstImperf,PPers1,Sg> => ndasht + "m" ;
|
|
||||||
<Neg,PPast2 PstImperf,PPers1,Pl> => ndasht + "ym" ;
|
|
||||||
<Neg,PPast2 PstImperf,PPers2,Sg> => ndasht + "y";
|
|
||||||
<Neg,PPast2 PstImperf,PPers2,Pl> => ndasht + "yd" ;
|
|
||||||
<Neg,PPast2 PstImperf,PPers3,Sg> => ndasht ;
|
|
||||||
<Neg,PPast2 PstImperf,PPers3,Pl> => ndasht + "nd" ;
|
|
||||||
|
|
||||||
<Neg,PPast2 PstAorist,PPers1,Sg> => ndasht + "m" ;
|
|
||||||
<Neg,PPast2 PstAorist,PPers1,Pl> => ndasht + "ym" ;
|
|
||||||
<Neg,PPast2 PstAorist,PPers2,Sg> => ndasht + "y";
|
|
||||||
<Neg,PPast2 PstAorist,PPers2,Pl> => ndasht + "yd" ;
|
|
||||||
<Neg,PPast2 PstAorist,PPers3,Sg> => ndasht ;
|
|
||||||
<Neg,PPast2 PstAorist,PPers3,Pl> => ndasht + "nd" ;
|
|
||||||
|
|
||||||
|
|
||||||
<Neg,PFut2 FtAorist,PPers1,Sg> => nkhah + "m" ++ dasht ;
|
|
||||||
<Neg,PFut2 FtAorist,PPers1,Pl> => nkhah + "ym" ++ dasht ;
|
|
||||||
<Neg,PFut2 Ftorist,PPers2,Sg> => nkhah + "y" ++ dasht ;
|
|
||||||
<Neg,PFut2 FtAorist,PPers2,Pl> => nkhah + "yd" ++ dasht ;
|
|
||||||
<Neg,PFut2 FtAorist,PPers3,Sg> => nkhah + "d" ++ dasht ;
|
|
||||||
<Neg,PFut2 FtAorist,PPers3,Pl> => nkhah + "nd" ++ dasht ;
|
|
||||||
|
|
||||||
|
|
||||||
<Neg,Infr_Past2 InfrPerf,PPers1,Sg> => ndashteh ++ bvdh ++ "Am" ;
|
|
||||||
<Neg,Infr_Past2 InfrPerf,PPers1,Pl> => ndashteh ++ bvdh ++ "Aym" ;
|
|
||||||
<Neg,Infr_Past2 InfrPerf,PPers2,Sg> => ndashteh ++ bvdh ++ "Ay" ;
|
|
||||||
<Neg,Infr_Past2 InfrPerf,PPers2,Pl> => ndashteh ++ bvdh ++ "Ayd" ;
|
|
||||||
<Neg,Infr_Past2 InfrPerf,PPers3,Sg> => ndashteh ++ bvdh ++ "Ast" ;
|
|
||||||
<Neg,Infr_Past2 InfrPerf,PPers3,Pl> => ndashteh ++ bvdh ++ "And" ;
|
|
||||||
|
|
||||||
<Neg,Infr_Past2 InfrImperf,PPers1,Sg> => ndashteh ++ "Am" ;
|
|
||||||
<Neg,Infr_Past2 InfrImperf,PPers1,Pl> => ndashteh ++ "Aym" ;
|
|
||||||
<Neg,Infr_Past2 InfrImperf,PPers2,Sg> => ndashteh ++ "Ay" ;
|
|
||||||
<Neg,Infr_Past2 InfrImperf,PPers2,Pl> => ndashteh ++ "Ayd" ;
|
|
||||||
<Neg,Infr_Past2 InfrImperf,PPers3,Sg> => ndashteh ++ "Ast" ;
|
|
||||||
<Neg,Infr_Past2 InfrImperf,PPers3,Pl> => ndashteh ++ "And"
|
|
||||||
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
} ;
|
|
||||||
|
|
||||||
predProg : VPH -> VPH = \verb -> {
|
|
||||||
s = \\vh =>
|
|
||||||
case vh of {
|
|
||||||
VPTense pol (VPPres Simul) (AgPes n p) => { inf = (toHave Pos (PPresent2 PrImperf) n p).s ++ (verb.s ! VPTense pol (VPPres Simul) (AgPes n p)).inf } ;
|
|
||||||
VPTense pol (VPPres Anter) (AgPes n p) => { inf = (verb.s ! VPTense pol (VPPres Anter) (AgPes n p)).inf } ;
|
|
||||||
VPTense pol (VPPast Simul) (AgPes n p) => { inf = (toHave Pos (PPast2 PstAorist) n p).s ++ (verb.s ! VPTense pol (VPCond Simul) (AgPes n p)).inf } ;
|
|
||||||
VPTense pol (VPPast Anter) (AgPes n p) => { inf = (verb.s ! VPTense pol (VPPast Anter) (AgPes n p)).inf } ;
|
|
||||||
VPTense pol (VPFutr Simul) (AgPes n p) => { inf = (verb.s ! VPTense pol (VPFutr Simul) (AgPes n p)).inf } ;
|
|
||||||
VPTense pol (VPFutr Anter) (AgPes n p) => { inf = (verb.s ! VPTense pol (VPFutr Anter) (AgPes n p)).inf } ; -- this is to be confirmed
|
|
||||||
VPTense pol (VPCond Simul) (AgPes n p) => { inf = (toHave Pos (PPast2 PstAorist) n p).s ++ (verb.s ! VPTense pol (VPCond Simul) (AgPes n p)).inf } ;
|
|
||||||
VPTense pol (VPCond Anter) (AgPes n p) => { inf = (toHave Pos (PPast2 PstAorist) n p).s ++ (verb.s ! VPTense pol (VPCond Anter) (AgPes n p)).inf } ;
|
|
||||||
VVForm (AgPes n p) => {inf = (verb.s ! VVForm (AgPes n p)).inf} ;
|
|
||||||
VPStem1 => { inf = (verb.s ! VPStem1).inf};
|
|
||||||
VPStem2 => { inf = (verb.s ! VPStem2).inf} ;
|
|
||||||
VPImp pol n => { inf = (verb.s ! VPImp pol n).inf} -- need to be confirmed
|
|
||||||
-- _ => { inf = (verb.s ! VPStem1).inf}
|
|
||||||
};
|
|
||||||
|
|
||||||
obj = verb.obj ;
|
|
||||||
subj = VIntrans ;
|
|
||||||
inf = verb.inf;
|
|
||||||
ad = verb.ad;
|
|
||||||
wish = verb.wish;
|
|
||||||
vComp = verb.vComp ;
|
|
||||||
embComp = verb.embComp ;
|
|
||||||
comp = verb.comp
|
|
||||||
} ;
|
|
||||||
|
|
||||||
-------------------------
|
|
||||||
-- Ezafa construction
|
|
||||||
------------------------
|
|
||||||
oper
|
|
||||||
mkEzafa : Str -> Str ;
|
|
||||||
mkEzafa str = case str of {
|
|
||||||
st + "Ah" => str ;
|
|
||||||
st + "vh" => str ;
|
|
||||||
st + "h" => str ++ "y" ;
|
|
||||||
st + "Av" => str ;
|
|
||||||
st + "vv" => str ;
|
|
||||||
st + "v" => str + "y" ;
|
|
||||||
st + "A" => str + "y" ;
|
|
||||||
_ => str
|
|
||||||
};
|
|
||||||
mkEnclic : Str -> Str ;
|
|
||||||
mkEnclic str = case str of {
|
|
||||||
st + "A" => str ++ "yy" ;
|
|
||||||
st + "v" => str ++ "yy" ;
|
|
||||||
st + "y" => str ++ "yy" ;
|
|
||||||
st + "h" => str ++ "yy" ;
|
|
||||||
_ => str + "y"
|
|
||||||
};
|
|
||||||
|
|
||||||
IndefArticle : Str ;
|
|
||||||
IndefArticle = "yk";
|
|
||||||
taryn : Str ;
|
|
||||||
taryn = "tryn" ;
|
|
||||||
|
|
||||||
---------------
|
|
||||||
-- making negatives
|
|
||||||
---------------
|
|
||||||
addN : Str -> Str ;
|
|
||||||
addN str =
|
|
||||||
case str of {
|
|
||||||
"A" + st => "ny" + str ;
|
|
||||||
"A:" + st => "nyA" + st ;
|
|
||||||
_ => "n" + str
|
|
||||||
};
|
|
||||||
addBh2 : Str -> Str ; -- should use drop instead but it gives linking error
|
|
||||||
addBh2 str1 =
|
|
||||||
case str1 of {
|
|
||||||
"my" + str =>
|
|
||||||
case str of {
|
|
||||||
"A" + st => Prelude.glue "by" str ; -- need to use '+' but it gives linking error
|
|
||||||
"A:" + st => Prelude.glue "byA" st ;
|
|
||||||
_ => Prelude.glue "b" str
|
|
||||||
};
|
|
||||||
_ => ""
|
|
||||||
};
|
|
||||||
|
|
||||||
-----------------------------
|
|
||||||
-- Noun Phrase
|
|
||||||
-----------------------------
|
|
||||||
{-toNP : Str -> Str = \pn, npc -> case npc of {
|
|
||||||
NPC c => pn ! c ;
|
|
||||||
NPObj => pn ! Dir ;
|
|
||||||
NPErg => pn ! Obl
|
|
||||||
} ;
|
|
||||||
-}
|
|
||||||
|
|
||||||
partNP : Str -> Str = \str -> (Prelude.glue str "h") ++ "Cdh" ;
|
|
||||||
-- partNP : Str -> Str = \str -> str + "h" ++ "Cdh" ;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
------------------------------------------
|
|
||||||
-- Agreement transformations
|
|
||||||
-----------------------------------------
|
|
||||||
toAgr : Number -> PPerson -> AgrPes = \n,p ->
|
|
||||||
AgPes n p;
|
|
||||||
|
|
||||||
|
|
||||||
fromAgr : AgrPes -> {n : Number ; p : PPerson } = \agr -> case agr of {
|
|
||||||
AgPes n p => {n = n ; p = p }
|
|
||||||
} ;
|
|
||||||
|
|
||||||
conjAgrPes : AgrPes -> AgrPes -> AgrPes = \a0,b0 ->
|
|
||||||
let a = fromAgr a0 ; b = fromAgr b0
|
|
||||||
in
|
|
||||||
toAgr
|
|
||||||
(conjNumber a.n b.n)
|
|
||||||
b.p;
|
|
||||||
|
|
||||||
giveNumber : AgrPes -> Number =\a -> case a of {
|
|
||||||
AgPes n _ => n
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
-- defaultAgr : Agr = agrP3 Sg Inanimate ;
|
|
||||||
-- agrP3 : Number -> Animacy -> Agr = \n,a -> Ag n PPers3 a ;
|
|
||||||
defaultAgrPes : AgrPes = agrPesP3 Sg ;
|
|
||||||
agrPesP3 : Number -> AgrPes = \n -> AgPes n PPers3 ;
|
|
||||||
-- personalAgr : Agr = agrP1 Sg ;
|
|
||||||
agrPesP1 : Number -> AgrPes = \n -> AgPes n PPers1 ;
|
|
||||||
|
|
||||||
--------------------------------------------------------
|
|
||||||
-- Reflexive Pronouns
|
|
||||||
-----------------------------------
|
|
||||||
|
|
||||||
reflPron : AgrPes => Str = table {
|
|
||||||
AgPes Sg PPers1 => "Kvdm" ;
|
|
||||||
AgPes Sg PPers2 => "Kvdt" ;
|
|
||||||
AgPes Sg PPers3 => "KvdC" ;
|
|
||||||
AgPes Pl PPers1 => "KvdmAn" ;
|
|
||||||
AgPes Pl PPers2 => "KvdtAn" ;
|
|
||||||
AgPes Pl PPers3 => "KvdCAn"
|
|
||||||
|
|
||||||
} ;
|
|
||||||
|
|
||||||
getPron : Animacy -> Number -> Str = \ani,number ->
|
|
||||||
case <ani,number> of {
|
|
||||||
<Animate,Sg> => "Av" ;
|
|
||||||
<Animate,Pl> => ["A:n hA"] ;
|
|
||||||
<Inanimate,Sg> => "A:n" ;
|
|
||||||
<Inanimate,Pl> => ["A:n hA"]
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,103 +0,0 @@
|
|||||||
concrete SentencePes of Sentence = CatPes ** open Prelude, ResPes,Predef in {
|
|
||||||
|
|
||||||
flags optimize=all_subs ;
|
|
||||||
coding = utf8;
|
|
||||||
|
|
||||||
lin
|
|
||||||
|
|
||||||
PredVP np vp = mkClause np vp ;
|
|
||||||
|
|
||||||
PredSCVP sc vp = mkSClause ("Ayn" ++ sc.s) (defaultAgrPes) vp ;
|
|
||||||
|
|
||||||
ImpVP vp = {
|
|
||||||
s = \\pol,n =>
|
|
||||||
let
|
|
||||||
agr = AgPes (numImp n) PPers2 ;
|
|
||||||
in case pol of {
|
|
||||||
CPos => vp.ad ++ vp.comp ! agr ++ vp.obj.s ++ vp.vComp ! agr ++ ((vp.s ! VPImp Pos (numImp n)).inf) ++ vp.embComp;
|
|
||||||
CNeg _ => vp.ad ++ vp.comp ! agr ++ vp.obj.s ++ vp.vComp ! agr ++ ((vp.s ! VPImp Neg (numImp n)).inf) ++ vp.embComp
|
|
||||||
} ;
|
|
||||||
} ;
|
|
||||||
|
|
||||||
|
|
||||||
SlashVP np vp =
|
|
||||||
mkClause np vp ** {c2 = vp.c2} ;
|
|
||||||
|
|
||||||
AdvSlash slash adv = {
|
|
||||||
s = \\t,p,o => adv.s ++ slash.s ! t ! p ! o ;
|
|
||||||
c2 = slash.c2
|
|
||||||
} ;
|
|
||||||
|
|
||||||
SlashPrep cl prep = cl ** {c2 = { s = prep.s ; ra = [] ; c = VIntrans}} ;
|
|
||||||
|
|
||||||
SlashVS np vs slash =
|
|
||||||
mkClause np
|
|
||||||
(insertObj2 (conjThat ++ slash.s) (predV vs)) **
|
|
||||||
{c2 = slash.c2} ;
|
|
||||||
|
|
||||||
EmbedS s = {s = conjThat ++ s.s} ;
|
|
||||||
EmbedQS qs = {s = qs.s ! QIndir} ;
|
|
||||||
EmbedVP vp = {s = vp.obj.s ++ vp.inf ++ vp.comp ! defaultAgrPes} ; --- agr
|
|
||||||
|
|
||||||
|
|
||||||
UseCl temp p cl =
|
|
||||||
{ s = case <temp.t,temp.a> of {
|
|
||||||
<Pres,Simul> => temp.s ++ p.s ++ cl.s ! VPres ! p.p ! ODir;
|
|
||||||
<Pres,Anter> => temp.s ++ p.s ++ cl.s ! VPerfPres ! p.p ! ODir;
|
|
||||||
<Past,Simul> => temp.s ++ p.s ++ cl.s ! VPast ! p.p ! ODir;
|
|
||||||
<Past,Anter> => temp.s ++ p.s ++ cl.s ! VPerfPast ! p.p ! ODir;
|
|
||||||
<Fut,Simul> => temp.s ++ p.s ++ cl.s ! VFut ! p.p ! ODir;
|
|
||||||
<Fut,Anter> => temp.s ++ p.s ++ cl.s ! VPerfFut ! p.p ! ODir;
|
|
||||||
<Cond,Simul> => temp.s ++ p.s ++ cl.s ! VCondSimul ! p.p ! ODir;
|
|
||||||
<Cond,Anter> => temp.s ++ p.s ++ cl.s ! VCondAnter ! p.p ! ODir -- this needs to be fixed by making SubjPerf in ResPnb
|
|
||||||
|
|
||||||
};
|
|
||||||
} ;
|
|
||||||
UseQCl temp p cl = {
|
|
||||||
s = \\q => case <temp.t,temp.a> of {
|
|
||||||
<Pres,Simul> => temp.s ++ p.s ++ cl.s ! VPres ! p.p ! q;
|
|
||||||
<Pres,Anter> => temp.s ++ p.s ++ cl.s ! VPerfPres ! p.p ! q;
|
|
||||||
<Past,Simul> => temp.s ++ p.s ++ cl.s ! VPast ! p.p ! q;
|
|
||||||
<Past,Anter> => temp.s ++ p.s ++ cl.s ! VPerfPast ! p.p ! q;
|
|
||||||
<Fut,Simul> => temp.s ++ p.s ++ cl.s ! VFut ! p.p ! q;
|
|
||||||
<Fut,Anter> => temp.s ++ p.s ++ cl.s ! VPerfFut ! p.p ! q;
|
|
||||||
<Cond,Simul> => temp.s ++ p.s ++ cl.s ! VCondSimul ! p.p ! q;
|
|
||||||
<Cond,Anter> => temp.s ++ p.s ++ cl.s ! VCondAnter ! p.p ! q
|
|
||||||
|
|
||||||
};
|
|
||||||
} ;
|
|
||||||
|
|
||||||
UseRCl temp p rcl = {
|
|
||||||
s = \\q => case <temp.t,temp.a> of {
|
|
||||||
<Pres,Simul> => temp.s ++ p.s ++ rcl.s ! VPres ! p.p ! ODir ! q;
|
|
||||||
<Pres,Anter> => temp.s ++ p.s ++ rcl.s ! VPerfPres ! p.p ! ODir ! q;
|
|
||||||
<Past,Simul> => temp.s ++ p.s ++ rcl.s ! VPast ! p.p ! ODir ! q;
|
|
||||||
<Past,Anter> => temp.s ++ p.s ++ rcl.s ! VPerfPast ! p.p ! ODir ! q;
|
|
||||||
<Fut,Simul> => temp.s ++ p.s ++ rcl.s ! VFut ! p.p ! ODir ! q;
|
|
||||||
<Fut,Anter> => temp.s ++ p.s ++ rcl.s ! VPerfFut ! p.p ! ODir ! q;
|
|
||||||
<Cond,Simul> => temp.s ++ p.s ++ rcl.s ! VCondSimul ! p.p ! ODir ! q;
|
|
||||||
<Cond,Anter> => temp.s ++ p.s ++ rcl.s ! VCondAnter ! p.p ! ODir ! q
|
|
||||||
};
|
|
||||||
c = rcl.c
|
|
||||||
} ;
|
|
||||||
|
|
||||||
UseSlash temp p clslash = {
|
|
||||||
s = case <temp.t,temp.a> of {
|
|
||||||
<Pres,Simul> => temp.s ++ p.s ++ clslash.s ! VPres ! p.p ! ODir;
|
|
||||||
<Pres,Anter> => temp.s ++ p.s ++ clslash.s ! VPerfPres ! p.p ! ODir;
|
|
||||||
<Past,Simul> => temp.s ++ p.s ++ clslash.s ! VPast ! p.p ! ODir ;
|
|
||||||
<Past,Anter> => temp.s ++ p.s ++ clslash.s ! VPerfPast ! p.p ! ODir;
|
|
||||||
<Fut,Simul> => temp.s ++ p.s ++ clslash.s ! VFut ! p.p ! ODir;
|
|
||||||
<Fut,Anter> => temp.s ++ p.s ++ clslash.s ! VPerfFut ! p.p ! ODir;
|
|
||||||
<Cond,Simul> => temp.s ++ p.s ++ clslash.s ! VCondSimul ! p.p ! ODir;
|
|
||||||
<Cond,Anter> => temp.s ++ p.s ++ clslash.s ! VCondSimul ! p.p ! ODir
|
|
||||||
};
|
|
||||||
c2 = clslash.c2
|
|
||||||
} ;
|
|
||||||
|
|
||||||
AdvS a s = {s = a.s ++ s.s} ;
|
|
||||||
|
|
||||||
RelS s r = {s = s.s ++ r.s ! agrPesP3 Sg} ;
|
|
||||||
SSubjS s sj s = { s = s.s ++ sj.s ++ s.s};
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,133 +0,0 @@
|
|||||||
concrete StructuralPes of Structural = CatPes **
|
|
||||||
open MorphoPes, ParadigmsPes, Prelude, NounPes in {
|
|
||||||
|
|
||||||
flags optimize=all ;
|
|
||||||
coding = utf8;
|
|
||||||
|
|
||||||
lin
|
|
||||||
above_Prep = ss "bAlAy" ;
|
|
||||||
after_Prep = ss ["bcd Az"] ;
|
|
||||||
all_Predet = ss ["hmh y"] ;
|
|
||||||
almost_AdA, almost_AdN = ss "tqrybAa." ;
|
|
||||||
although_Subj = ss ["bA vjvd Ayn"] ;
|
|
||||||
always_AdV = ss "hmyCh" ;
|
|
||||||
and_Conj = sd2 [] "v" ** {n = Pl} ;
|
|
||||||
because_Subj = ss ["brAy Ayn"] ;
|
|
||||||
before_Prep = ss ["qbl Az"] ;
|
|
||||||
behind_Prep = ss "pCt" ;
|
|
||||||
between_Prep = ss "byn" ;
|
|
||||||
both7and_DConj = sd2 "hm" ["v hm"] ** {n = Pl} ;
|
|
||||||
but_PConj = ss "AmA" ;
|
|
||||||
by8agent_Prep = ss "tvsT" ;
|
|
||||||
by8means_Prep = ss "bA" ;
|
|
||||||
-- can8know_VV,can_VV = mkV "skna" ** { isAux = True} ;
|
|
||||||
during_Prep = ss ["dr Tvl"] ;
|
|
||||||
either7or_DConj = sd2 "yA" "yA" ** {n = Sg} ;
|
|
||||||
-- everybody_NP = MassNP (UseN (MorphoPnb.mkN11 ["hr kwy"])); -- not a good way coz need to include NounPnb
|
|
||||||
every_Det = mkDet "hr" Sg ;
|
|
||||||
-- everything_NP = MassNP (UseN (MorphoPnb.mkN11 ["hr XE"]));
|
|
||||||
everywhere_Adv = ss ["hr jA"] ;
|
|
||||||
few_Det = mkDet ["tcdAd kmy"] Pl True; -- check
|
|
||||||
-- first_Ord = {s = "Avlyn" ; n = Sg} ; --DEPRECATED
|
|
||||||
for_Prep = ss "brAy" ;
|
|
||||||
from_Prep = ss "Az" ;
|
|
||||||
he_Pron = personalPN "Av" Sg PPers3 ;
|
|
||||||
here_Adv = ss "AynjA" ;
|
|
||||||
here7to_Adv = ss "AynjA" ;
|
|
||||||
here7from_Adv = ss "AynjA" ;
|
|
||||||
how_IAdv = ss "c^Tvr" ;
|
|
||||||
how8many_IDet = {s = "c^nd" ; n = Pl ; isNum = True} ;
|
|
||||||
how8much_IAdv = ss "c^qdr" ;
|
|
||||||
if_Subj = ss "Agr" ;
|
|
||||||
in8front_Prep = ss "jlvy" ;
|
|
||||||
i_Pron = personalPN "mn" Sg PPers1;
|
|
||||||
in_Prep = ss "dr" ;
|
|
||||||
it_Pron = personalPN "A:n" Sg PPers3;
|
|
||||||
less_CAdv = {s = "kmtr" ; p = ""} ;
|
|
||||||
many_Det = mkDet ["tcdAd zyAdy"] Pl True; -- check
|
|
||||||
more_CAdv = {s = "byCtr" ; p = "" } ;
|
|
||||||
most_Predet = ss "Akt-r";
|
|
||||||
much_Det = mkDet ["mqdAr zyAdy"] Pl ;
|
|
||||||
-- must_VV = {
|
|
||||||
-- s = table {
|
|
||||||
-- VVF VInf => ["have to"] ;
|
|
||||||
-- VVF VPres => "must" ;
|
|
||||||
-- VVF VPPart => ["had to"] ;
|
|
||||||
-- VVF VPresPart => ["having to"] ;
|
|
||||||
-- VVF VPast => ["had to"] ; --# notpresent
|
|
||||||
-- VVPastNeg => ["hadn't to"] ; --# notpresent
|
|
||||||
-- VVPresNeg => "mustn't"
|
|
||||||
-- } ;
|
|
||||||
-- isAux = True
|
|
||||||
-- } ;
|
|
||||||
-----b no_Phr = ss "no" ;
|
|
||||||
|
|
||||||
|
|
||||||
no_Utt = ss "nh" ;
|
|
||||||
on_Prep = ss "rvy" ;
|
|
||||||
-- one_Quant = demoPN "yk" ; -- DEPRECATED
|
|
||||||
only_Predet = ss "fqT" ;
|
|
||||||
or_Conj = sd2 [] "yA" ** {n = Sg} ;
|
|
||||||
otherwise_PConj = ss ["drGyrAyn Svrt"] ;
|
|
||||||
part_Prep = ss "Az" ; -- the object following it should be in Ezafa form
|
|
||||||
please_Voc = ss "lTfAa." ;
|
|
||||||
possess_Prep = ss "" ; -- will be handeled in Ezafeh
|
|
||||||
quite_Adv = ss "kAmlAa." ;
|
|
||||||
she_Pron = personalPN "Av" Sg PPers3 ;
|
|
||||||
so_AdA = ss "bsyAr" ;
|
|
||||||
-- somebody_NP = MassNP (UseN (MorphoPnb.mkN11 "kwy" ));
|
|
||||||
someSg_Det = mkDet "mqdAry" Sg True ;
|
|
||||||
somePl_Det = mkDet "c^nd" Pl True ;
|
|
||||||
-- something_NP = MassNP (UseN (MorphoPnb.mkN11 "c^yzy"));
|
|
||||||
somewhere_Adv = ss "jAyy" ;
|
|
||||||
that_Quant = mkQuant "A:n" "A:n";
|
|
||||||
that_Subj = ss "A:n";
|
|
||||||
there_Adv = ss "A:njA" ;
|
|
||||||
there7to_Adv = ss "A:njA" ;
|
|
||||||
there7from_Adv = ss "A:njA" ;
|
|
||||||
therefore_PConj = ss ["bh hmyn dlyl"] ;
|
|
||||||
they_Pron = personalPN ["A:n hA"] Pl PPers3 ;
|
|
||||||
this_Quant = mkQuant "Ayn" "Ayn" ;
|
|
||||||
through_Prep = ss ["Az Tryq"] ;
|
|
||||||
too_AdA = ss "Kyly" ;
|
|
||||||
to_Prep = ss "bh" ** {lock_Prep = <>};
|
|
||||||
under_Prep = ss "zyr" ** {lock_Prep = <>};
|
|
||||||
very_AdA = ss "Kyly" ;
|
|
||||||
want_VV = mkV "KvAstn" "KvAh" ** { isAux = False} ;
|
|
||||||
we_Pron = personalPN "mA" Pl PPers1 ;
|
|
||||||
whatSg_IP = {s = ["c^h c^yzy"] ; n = Sg } ;
|
|
||||||
whatPl_IP = {s = ["c^h c^yzhAyy"] ; n = Pl } ;
|
|
||||||
when_IAdv = ss "ky" ;
|
|
||||||
when_Subj = ss "vqty" ;
|
|
||||||
where_IAdv = ss "kjA" ;
|
|
||||||
which_IQuant = {s = "kdAm" ; n = Sg} ;
|
|
||||||
whichPl_IDet = {s = "kdAm" ; n = Pl ; isNum = False} ;
|
|
||||||
whichSg_IDet = { s = "kdAm" ; n = Sg ; isNum = False} ;
|
|
||||||
whoSg_IP = {s = ["c^h ksy"] ; n = Sg} ;
|
|
||||||
whoPl_IP = {s = ["c^h ksAny"] ;n = Pl} ;
|
|
||||||
why_IAdv = ss "c^rA" ;
|
|
||||||
without_Prep = ss "bdvn" ;
|
|
||||||
with_Prep = ss "bA";
|
|
||||||
-- yes_Phr = ss "blh" ;
|
|
||||||
yes_Utt = ss "blh" ;
|
|
||||||
youSg_Pron = personalPN "tv" Sg PPers2 ;
|
|
||||||
youPl_Pron = personalPN "CmA" Pl PPers2 ;
|
|
||||||
youPol_Pron = personalPN "CmA" Pl PPers2 ;
|
|
||||||
-- no_Quant = demoPN "hyc^" ;
|
|
||||||
not_Predet = {s="nh"} ;
|
|
||||||
if_then_Conj = sd2 "Agr" "A:ngAh" ** {n = Sg} ;
|
|
||||||
at_least_AdN = ss "HdAql" ;
|
|
||||||
at_most_AdN = ss "HdAkt-r";
|
|
||||||
-- nothing_NP = MassNP (UseN (MorphoPnb.mkN11 "hyc^ c^yz" ));
|
|
||||||
except_Prep = ss ["bh jz"] ;
|
|
||||||
-- nobody_NP = MassNP (UseN (MorphoPnb.mkN11 "hyc^ ks"));
|
|
||||||
|
|
||||||
as_CAdv = {s = ["bh AndAzh y"] ; p = ""} ;
|
|
||||||
|
|
||||||
have_V2 = mkV2 (mkV "dACtn" "dAr") "rA" ;
|
|
||||||
|
|
||||||
language_title_Utt = ss "persian" ;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
rf -file=src/LexiconPes.gf | ps -env=quotes -to_persian | wf -file=LexiconPes.gf
|
|
||||||
rf -file=src/ParadigmsPes.gf | ps -env=quotes -to_persian | wf -file=ParadigmsPes.gf
|
|
||||||
rf -file=src/MorphoPes.gf | ps -env=quotes -to_persian | wf -file=MorphoPes.gf
|
|
||||||
rf -file=src/StructuralPes.gf | ps -env=quotes -to_persian | wf -file=StructuralPes.gf
|
|
||||||
rf -file=src/ResPes.gf | ps -env=quotes -to_persian | wf -file=ResPes.gf
|
|
||||||
rf -file=src/AdjectivePes.gf | ps -env=quotes -to_persian | wf -file=AdjectivePes.gf
|
|
||||||
rf -file=src/IdiomPes.gf | ps -env=quotes -to_persian | wf -file=IdiomPes.gf
|
|
||||||
rf -file=src/RelativePes.gf | ps -env=quotes -to_persian | wf -file=RelativePes.gf
|
|
||||||
rf -file=src/AdverbPes.gf | ps -env=quotes -to_persian | wf -file=AdverbPes.gf
|
|
||||||
rf -file=src/SentencePes.gf | ps -env=quotes -to_persian | wf -file=SentencePes.gf
|
|
||||||
rf -file=src/NumeralPes.gf | ps -env=quotes -to_persian | wf -file=NumeralPes.gf
|
|
||||||
rf -file=src/SymbolPes.gf | ps -env=quotes -to_persian | wf -file=SymbolPes.gf
|
|
||||||
rf -file=src/ExtraPes.gf | ps -env=quotes -to_persian | wf -file=ExtraPes.gf
|
|
||||||
@@ -2,6 +2,6 @@
|
|||||||
|
|
||||||
concrete AllPor of AllPorAbs =
|
concrete AllPor of AllPorAbs =
|
||||||
LangPor,
|
LangPor,
|
||||||
IrregPor,
|
|
||||||
ExtendPor
|
ExtendPor
|
||||||
** {} ;
|
** open ExtraPor, IrregPor
|
||||||
|
in {} ;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
concrete ConstructionPor of Construction = CatPor **
|
concrete ConstructionPor of Construction = CatPor **
|
||||||
open SyntaxPor, SymbolicPor, ParadigmsPor, BeschPor,
|
open SyntaxPor, SymbolicPor, ParadigmsPor, BeschPor,
|
||||||
(L = LexiconPor), (B = DiffPor), (R = ResPor),
|
(L = LexiconPor), (D = DiffPor), (R = ResPor),
|
||||||
(S = SyntaxPor), (C = CommonRomance), CommonRomance,
|
(S = SyntaxPor), (C = CommonRomance), CommonRomance,
|
||||||
Prelude in {
|
Prelude in {
|
||||||
flags coding=utf8 ;
|
flags coding=utf8 ;
|
||||||
@@ -17,24 +17,34 @@ lin
|
|||||||
has_age_VP card = mkVP have_V2 (mkNP <lin Card card : Card> L.year_N) ;
|
has_age_VP card = mkVP have_V2 (mkNP <lin Card card : Card> L.year_N) ;
|
||||||
|
|
||||||
have_name_Cl x y = mkCl x (mkV2 (reflV (mkV "chamar"))) y ;
|
have_name_Cl x y = mkCl x (mkV2 (reflV (mkV "chamar"))) y ;
|
||||||
married_Cl x y = mkCl (lin NP x) L.married_A2 (lin NP y) | mkCl (mkNP and_Conj (lin NP x) (lin NP y)) (mkA "casado") ;
|
married_Cl x y = mkCl (lin NP x) L.married_A2 (lin NP y)
|
||||||
|
| mkCl (mkNP and_Conj (lin NP x) (lin NP y)) (mkA "casado") ;
|
||||||
|
|
||||||
what_name_QCl x = mkQCl how_IAdv (mkCl (lin NP x) (reflV (mkV "chamar"))) ;
|
what_name_QCl x = mkQCl how_IAdv (mkCl (lin NP x) (reflV (mkV "chamar"))) ;
|
||||||
how_old_QCl x = mkQCl (mkIP how8many_IDet L.year_N) x have_V2 ;
|
how_old_QCl x = mkQCl (mkIP how8many_IDet L.year_N) x have_V2 ;
|
||||||
how_far_QCl x = mkQCl (lin IAdv (ss "a que distância")) (mkCl x B.estar_V) ;
|
how_far_QCl x = mkQCl (lin IAdv (ss "a que distância")) (mkCl x D.stare_V) ;
|
||||||
|
|
||||||
-- some more things
|
-- some more things
|
||||||
weather_adjCl ap = mkCl (mkVP (mkVA (mkV (fazer_Besch "fazer"))) (lin AP ap)) ;
|
weather_adjCl ap = mkCl (mkVP (mkVA (mkV (fazer_Besch "fazer"))) (lin AP ap)) ;
|
||||||
|
|
||||||
is_right_VP = mkVP (mkVA B.estar_V) (mkAP (mkA "certo")) ;
|
is_right_VP = mkVP (mkVA D.stare_V) (mkAP (mkA "certo")) ;
|
||||||
is_wrong_VP = mkVP (mkVA B.estar_V) (mkAP (mkA "errado")) ;
|
is_wrong_VP = mkVP (mkVA D.stare_V) (mkAP (mkA "errado")) ;
|
||||||
|
|
||||||
n_units_AP card cn a = mkAP (lin AdA (mkUtt (mkNP <lin Card card : Card> (lin CN cn)))) (lin A a) ;
|
n_units_AP card cn a = mkAP (lin AdA (mkUtt (mkNP <lin Card card : Card> (lin CN cn))))
|
||||||
|
(lin A a) ;
|
||||||
|
n_units_of_NP card cn np = mkNP card (mkCN (lin N2 cn) np) ;
|
||||||
|
n_unit_CN card cn cn =
|
||||||
|
let s : Str = "de" ++ card.s ! cn.g ++ cn.s ! card.n ;
|
||||||
|
adj : A = mkA s s s s s ;
|
||||||
|
in mkCN adj cn ;
|
||||||
|
|
||||||
bottle_of_CN np = mkCN (lin N2 (mkN2 (mkN "garrafa" feminine) part_Prep)) np ;
|
bottle_of_CN np = mkCN (lin N2 (mkN2 (mkN "garrafa" feminine) part_Prep)) np ;
|
||||||
cup_of_CN np = mkCN (lin N2 (mkN2 (mkN "copo") part_Prep)) np ;
|
cup_of_CN np = mkCN (lin N2 (mkN2 (mkN "copo") part_Prep)) np ;
|
||||||
glass_of_CN np = mkCN (lin N2 (mkN2 (mkN "taça") part_Prep)) np ;
|
glass_of_CN np = mkCN (lin N2 (mkN2 (mkN "taça") part_Prep)) np ;
|
||||||
|
|
||||||
|
-- falta X para NP ser Y
|
||||||
|
few_X_short_of_Y np cn cn = variants {} ;
|
||||||
|
|
||||||
{-
|
{-
|
||||||
-- spatial deixis and motion verbs
|
-- spatial deixis and motion verbs
|
||||||
|
|
||||||
@@ -48,11 +58,11 @@ lin
|
|||||||
go_there_VP = mkVP (mkVP L.go_V) there_Adv ;
|
go_there_VP = mkVP (mkVP L.go_V) there_Adv ;
|
||||||
come_there_VP = mkVP (mkVP L.come_V) there_Adv ;
|
come_there_VP = mkVP (mkVP L.come_V) there_Adv ;
|
||||||
come_from_there_VP = mkVP (mkVP L.come_V) (mkAdv "de allí") ; -- "de allá"
|
come_from_there_VP = mkVP (mkVP L.come_V) (mkAdv "de allí") ; -- "de allá"
|
||||||
-}
|
-}
|
||||||
|
|
||||||
lincat
|
lincat
|
||||||
Timeunit = N ;
|
Timeunit = N ;
|
||||||
Hour = {s : Str ; pe : Period ; n : Number} ;
|
Hour = {s : Str ; pe : Period ; n : ParadigmsPor.Number} ;
|
||||||
Weekday = N ;
|
Weekday = N ;
|
||||||
Monthday = NP ;
|
Monthday = NP ;
|
||||||
Month = N ;
|
Month = N ;
|
||||||
@@ -97,15 +107,15 @@ lin
|
|||||||
twentyThreeHour = mkHour "23" Noite Pl ;
|
twentyThreeHour = mkHour "23" Noite Pl ;
|
||||||
twentyFourHour = {s = "meia-noite" ; pe = None ; n = Sg} ;
|
twentyFourHour = {s = "meia-noite" ; pe = None ; n = Sg} ;
|
||||||
|
|
||||||
timeHour h = mkAdv (R.a ! Fem ! h.n ++ h.s ++ period ! h.pe) ;
|
timeHour h = ParadigmsPor.mkAdv (R.a ! Fem ! h.n ++ h.s ++ period ! h.pe) ;
|
||||||
|
|
||||||
timeHourMinute h m = let
|
timeHourMinute h m = let
|
||||||
min = m.s ! Masc
|
min = m.s ! Masc
|
||||||
in
|
in
|
||||||
mkAdv (R.a ! Fem ! h.n ++ h.s ++ "e" ++ min ++ period ! h.pe) ;
|
ParadigmsPor.mkAdv (R.a ! Fem ! h.n ++ h.s ++ "e" ++ min ++ period ! h.pe) ;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
mkHour : Str -> Period -> Number -> {s : Str ; pe : Period ; n : Number} ;
|
mkHour : Str -> Period -> ParadigmsPor.Number -> {s : Str ; pe : Period ; n : ParadigmsPor.Number} ;
|
||||||
mkHour num pe n = S.mkUtt (S.mkCard num) ** {pe = pe ; n = n} ;
|
mkHour num pe n = S.mkUtt (S.mkCard num) ** {pe = pe ; n = n} ;
|
||||||
|
|
||||||
period : Period => Str ;
|
period : Period => Str ;
|
||||||
@@ -215,4 +225,4 @@ lin thai_Language = mkLanguage "tailandês" ;
|
|||||||
lin turkish_Language = mkLanguage "turco" ;
|
lin turkish_Language = mkLanguage "turco" ;
|
||||||
lin urdu_Language = mkLanguage "urdu" ;
|
lin urdu_Language = mkLanguage "urdu" ;
|
||||||
|
|
||||||
}
|
} ;
|
||||||
|
|||||||
128537
src/portuguese/DictPor.gf
Normal file
128537
src/portuguese/DictPor.gf
Normal file
File diff suppressed because it is too large
Load Diff
128533
src/portuguese/DictPorAbs.gf
Normal file
128533
src/portuguese/DictPorAbs.gf
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,6 +1,6 @@
|
|||||||
--# -path=.:../romance:../abstract:../common:../prelude
|
--# -path=.:../romance:../abstract:../common:../prelude
|
||||||
|
|
||||||
instance DiffPor of DiffRomance - [partAgr,vpAgrSubj,vpAgrClits] = open CommonRomance, PhonoPor, BeschPor, Prelude in {
|
instance DiffPor of DiffRomance - [iAdvQuestionInv,chooseTA,otherInv,partAgr,stare_V,vpAgrSubj,vpAgrClits] = open CommonRomance, PhonoPor, BeschPor, Prelude in {
|
||||||
|
|
||||||
flags optimize=noexpand ;
|
flags optimize=noexpand ;
|
||||||
coding=utf8 ;
|
coding=utf8 ;
|
||||||
@@ -8,7 +8,7 @@ instance DiffPor of DiffRomance - [partAgr,vpAgrSubj,vpAgrClits] = open CommonRo
|
|||||||
param
|
param
|
||||||
Prepos = P_de | P_a | P_em | P_por ;
|
Prepos = P_de | P_a | P_em | P_por ;
|
||||||
|
|
||||||
VType = VHabere | VRefl ;
|
VType = VTer | VHaver | VRefl ;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
partAgr : VType -> Bool ;
|
partAgr : VType -> Bool ;
|
||||||
@@ -55,28 +55,50 @@ instance DiffPor of DiffRomance - [partAgr,vpAgrSubj,vpAgrClits] = open CommonRo
|
|||||||
defaultPronArg ;
|
defaultPronArg ;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
mkImperative b p vp =
|
mkImperative isPol p vp =
|
||||||
\\pol,g,n =>
|
\\pol,g,n => case pol of {
|
||||||
let
|
RPos => neg.p1 ++ imper ++ bindHyphenIf refl.isRefl ++ refl.pron
|
||||||
pe = case b of {True => P3 ; _ => p} ;
|
++ bindHyphenIf hasClit ++ clit ++ compl ;
|
||||||
agr = {g = g ; n = n ; p = pe} ;
|
RNeg _ => neg.p1 ++ refl.pron ++ clit ++ subj ++ compl
|
||||||
refl = case vp.s.vtyp of {
|
} where {
|
||||||
VRefl => <reflPron n pe Acc,True> ;
|
pe : Person = case <isPol,p> of {<_,P1> => P1 ; <True,_> => P2 ; <_,_> => P3} ;
|
||||||
_ => <[],False>
|
refl = case vp.s.vtyp of {
|
||||||
} ;
|
VRefl => {pron = reflPron n pe Acc ; isRefl = True} ;
|
||||||
|
_ => {pron = [] ; isRefl = False}
|
||||||
|
} ;
|
||||||
|
clit = vp.clit1 ++ vp.clit2 ;
|
||||||
|
hasClit = vp.clit3.hasClit ;
|
||||||
|
imper = vp.s.s ! vImper n pe ;
|
||||||
|
subj = vp.s.s ! VFin (VPres Conjunct) n pe ;
|
||||||
|
neg = vp.neg ! pol ;
|
||||||
|
agr = {g = g ; n = n ; p = pe} ;
|
||||||
|
compl = neg.p2 ++ vp.comp ! agr ++ vp.ext ! pol
|
||||||
|
} ;
|
||||||
|
|
||||||
clpr = <vp.clit1 ++ vp.clit2, [],vp.clit3.hasClit> ;
|
bindHyphenIf : Bool -> Str ;
|
||||||
verb = vp.s.s ! vImper n pe ;
|
bindHyphenIf b = case b of {
|
||||||
neg = vp.neg ! pol ;
|
True => BIND ++ "-" ++ BIND ;
|
||||||
compl = neg.p2 ++ clpr.p2 ++ vp.comp ! agr ++ vp.ext ! pol
|
_ => []
|
||||||
in
|
} ;
|
||||||
neg.p1 ++ verb ++ bindIf refl.p2 ++ refl.p1 ++ bindIf clpr.p3 ++ clpr.p1 ++ compl ;
|
|
||||||
|
param
|
||||||
|
Copula = SerCop | EstarCop | FicarCop ;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
CopulaType = Bool ;
|
CopulaType = Copula ;
|
||||||
selectCopula = \isEstar -> case isEstar of {True => estar_V ; False => copula} ;
|
selectCopula coptyp = case coptyp of {
|
||||||
serCopula = False ;
|
SerCop => essere_V ;
|
||||||
estarCopula = True ;
|
EstarCop => stare_V ;
|
||||||
|
FicarCop => ficar_V
|
||||||
|
} ;
|
||||||
|
|
||||||
|
serCopula = SerCop ;
|
||||||
|
estarCopula = EstarCop ;
|
||||||
|
ficarCopula = FicarCop ;
|
||||||
|
|
||||||
|
oper
|
||||||
|
iAdvQuestionInv : Direct = DDir ;
|
||||||
|
otherInv : Direct = DDir ;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
-- the other Cases are defined in ResRomance
|
-- the other Cases are defined in ResRomance
|
||||||
@@ -107,7 +129,7 @@ instance DiffPor of DiffRomance - [partAgr,vpAgrSubj,vpAgrClits] = open CommonRo
|
|||||||
|
|
||||||
oper
|
oper
|
||||||
a : Gender => Number => Str ;
|
a : Gender => Number => Str ;
|
||||||
a = genNumForms "a" "à" "aos" "às" ;
|
a = genNumForms "ao" "à" "aos" "às" ;
|
||||||
|
|
||||||
de : Gender => Number => Str ;
|
de : Gender => Number => Str ;
|
||||||
de = genNumForms "do" "da" "dos" "das" ;
|
de = genNumForms "do" "da" "dos" "das" ;
|
||||||
@@ -137,7 +159,12 @@ instance DiffPor of DiffRomance - [partAgr,vpAgrSubj,vpAgrClits] = open CommonRo
|
|||||||
possCase = \_,_,c -> prepCase c ;
|
possCase = \_,_,c -> prepCase c ;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
auxVerb : VType -> (VF => Str) = \_ -> haver_V.s ;
|
auxVerb : VType -> (VF => Str) ;
|
||||||
|
auxVerb vt = case vt of {
|
||||||
|
VTer => ter_V.s ;
|
||||||
|
VHaver => haver_V.s ;
|
||||||
|
_ => ter_V.s
|
||||||
|
} ;
|
||||||
|
|
||||||
negation : RPolarity => (Str * Str) = table {
|
negation : RPolarity => (Str * Str) = table {
|
||||||
RPos => <[],[]> ;
|
RPos => <[],[]> ;
|
||||||
@@ -199,6 +226,23 @@ instance DiffPor of DiffRomance - [partAgr,vpAgrSubj,vpAgrClits] = open CommonRo
|
|||||||
vpAgrClit : Agr -> VPAgr = \a ->
|
vpAgrClit : Agr -> VPAgr = \a ->
|
||||||
vpAgrNone ;
|
vpAgrNone ;
|
||||||
|
|
||||||
|
oper
|
||||||
|
chooseTA : RTense -> Anteriority
|
||||||
|
-> (VF => Str) -> (VF => Str)
|
||||||
|
-> Number -> Person -> Mood -> Str -> Str * Str ;
|
||||||
|
chooseTA t a verb vaux n p m part = case <t,a> of {
|
||||||
|
<RPast,Simul> => <verb ! VFin (VImperf m) n p, []> ; --# notpresent
|
||||||
|
<RPast,Anter> => <vaux ! VFin (VImperf m) n p, part> ; --# notpresent
|
||||||
|
<RFut,Simul> => <verb ! VFin VFut n p, []> ; --# notpresent
|
||||||
|
<RFut,Anter> => <vaux ! VFin VFut n p, part> ; --# notpresent
|
||||||
|
<RCond,Simul> => <verb ! VFin VCondit n p, []> ; --# notpresent
|
||||||
|
<RCond,Anter> => <vaux ! VFin VCondit n p, part> ; --# notpresent
|
||||||
|
<RPasse,Simul> => <verb ! VFin VPasse n p, []> ; --# notpresent
|
||||||
|
<RPasse,Anter> => <vaux ! VFin VPasse n p, part> ; --# notpresent
|
||||||
|
<RPres,Anter> => <verb ! VFin VPasse n p, []> ; --# notpresent
|
||||||
|
<RPres,Simul> => <verb ! VFin (VPres m) n p, []>
|
||||||
|
} ;
|
||||||
|
|
||||||
-- oper's opers
|
-- oper's opers
|
||||||
oper
|
oper
|
||||||
argPron : Gender -> Number -> Person -> Case -> Str =
|
argPron : Gender -> Number -> Person -> Case -> Str =
|
||||||
@@ -216,22 +260,23 @@ instance DiffPor of DiffRomance - [partAgr,vpAgrSubj,vpAgrClits] = open CommonRo
|
|||||||
\g,n,p -> case <<g,n,p> : Gender * Number * Person> of {
|
\g,n,p -> case <<g,n,p> : Gender * Number * Person> of {
|
||||||
<_,Sg,P1> => cases "me" "mim" ;
|
<_,Sg,P1> => cases "me" "mim" ;
|
||||||
<_,Sg,P2> => cases "te" "ti" ;
|
<_,Sg,P2> => cases "te" "ti" ;
|
||||||
<_,Pl,P1> => cases "nos" "nós" ; --- nosotros
|
<_,Pl,P1> => cases "nos" "nós" ;
|
||||||
<_,Pl,P2> => cases "vos" "vós" ; --- vosotros
|
<_,Pl,P2> => cases "vos" "vós" ;
|
||||||
<Fem,Sg,P3> => cases3 "a" "sua" "ela" ;
|
<Fem,Sg,P3> => cases3 "a" "sua" "ela" ;
|
||||||
<_, Sg,P3> => cases3 "o" "seu" "ele" ;
|
<_, Sg,P3> => cases3 "o" "seu" "ele" ;
|
||||||
<Fem,Pl,P3> => cases3 "as" "suas" "elas" ;
|
<Fem,Pl,P3> => cases3 "as" "suas" "elas" ;
|
||||||
<_, Pl,P3> => cases3 "os" "seus" "eles"
|
<_, Pl,P3> => cases3 "os" "seus" "eles"
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
estar_V : Verb = verboV (estar_Besch "estar") ;
|
essere_V : Verb = verboV (ser_Besch "ser") ;
|
||||||
|
stare_V : Verb = verboV (estar_Besch "estar") ;
|
||||||
|
|
||||||
|
ter_V : Verb = verboV (ter_Besch "ter") ;
|
||||||
haver_V : Verb = verboV (haver_Besch "haver") ;
|
haver_V : Verb = verboV (haver_Besch "haver") ;
|
||||||
|
|
||||||
ficar_V : Verb = verboV (ficar_Besch "ficar") ;
|
ficar_V : Verb = verboV (ficar_Besch "ficar") ;
|
||||||
|
|
||||||
verboV : Verbum -> Verb ;
|
verboV : Verbum -> Verb ;
|
||||||
-- make a verb of type haver
|
-- make a verb of type haver
|
||||||
verboV v = verbBesch v ** {vtyp = VHabere ; p = [] ; lock_V = <>} ;
|
verboV v = verbBesch v ** {vtyp = VTer ; p = [] } ;
|
||||||
|
|
||||||
}
|
} ;
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ oper
|
|||||||
heading : N -> Str = \n -> (nounHeading n).s ;
|
heading : N -> Str = \n -> (nounHeading n).s ;
|
||||||
|
|
||||||
lin
|
lin
|
||||||
InflectionN, InflectionN3, InflectionN3 = \noun -> {
|
InflectionN, InflectionN2, InflectionN3 = \noun -> {
|
||||||
t = "n" ;
|
t = "n" ;
|
||||||
s1 = heading1 (heading noun_Category ++
|
s1 = heading1 (heading noun_Category ++
|
||||||
case noun.g of {
|
case noun.g of {
|
||||||
@@ -111,8 +111,8 @@ lin
|
|||||||
InflectionVV v = {
|
InflectionVV v = {
|
||||||
t = "v" ;
|
t = "v" ;
|
||||||
s1 = heading1 (heading verb_Category) ++
|
s1 = heading1 (heading verb_Category) ++
|
||||||
paragraph (verbExample (S.mkCl S.she_NP v (S.mkVP (L.sleep_V)))) ;
|
paragraph (verbExample (S.mkCl S.she_NP (lin VV v) (S.mkVP L.sleep_V))) ;
|
||||||
s2 = inflVerb v
|
s2 = inflVerb (lin VV v)
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
InflectionVS v = {
|
InflectionVS v = {
|
||||||
@@ -223,4 +223,4 @@ oper
|
|||||||
{- --# notpresent
|
{- --# notpresent
|
||||||
-}
|
-}
|
||||||
|
|
||||||
}
|
} ;
|
||||||
|
|||||||
@@ -1,131 +1,52 @@
|
|||||||
--# -path=alltenses:../common:../abstract
|
--# -path=alltenses:../common:../abstract:../romance
|
||||||
|
concrete ExtendPor of Extend = CatPor ** ExtendRomanceFunctor -
|
||||||
concrete ExtendPor of Extend =
|
|
||||||
CatPor ** ExtendFunctor -
|
|
||||||
[
|
[
|
||||||
AdAdV,
|
CompoundAP,
|
||||||
AdjAsCN,
|
CompoundN,
|
||||||
AdjAsNP,
|
ExistsNP,
|
||||||
ApposNP,
|
GenRP,
|
||||||
BaseVPS,
|
GenRP,
|
||||||
ByVP,
|
ICompAP,
|
||||||
CompBareCN,
|
InOrderToVP,
|
||||||
ComplBareVS,
|
WithoutVP,
|
||||||
ComplSlashPartLast,
|
iFem_Pron,
|
||||||
CompoundAP,
|
theyFem_Pron,
|
||||||
CompoundN,
|
weFem_Pron,
|
||||||
CompVP,
|
youFem_Pron,
|
||||||
ConjVPS,
|
youPlFem_Pron,
|
||||||
ConsVPS,
|
youPolFem_Pron,
|
||||||
--EmptyRelSlash,
|
youPolPlFem_Pron,
|
||||||
ExistsNP,
|
youPolPl_Pron
|
||||||
GenIP,
|
] -- don't forget to put the names of your own
|
||||||
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
|
-- definitions here
|
||||||
with
|
with
|
||||||
(Grammar = GrammarPor), (Syntax = SyntaxPor) **
|
(Grammar = GrammarPor), (Syntax = SyntaxPor), (ResRomance = ResPor) **
|
||||||
open
|
open
|
||||||
GrammarPor,
|
|
||||||
ResPor,
|
|
||||||
MorphoPor,
|
MorphoPor,
|
||||||
Coordination,
|
Coordination,
|
||||||
Prelude,
|
Prelude,
|
||||||
ParadigmsPor,
|
ParadigmsPor,
|
||||||
|
(L = LexiconPor),
|
||||||
(S = StructuralPor) in {
|
(S = StructuralPor) in {
|
||||||
|
|
||||||
lin
|
lin
|
||||||
GenNP np =
|
ExistsNP np =
|
||||||
let denp = (np.s ! ResPor.genitive).ton in {
|
mkClause [] True False np.a
|
||||||
s = \\_,_,_,_ => [] ;
|
(insertComplement (\\_ => (np.s ! Nom).ton)
|
||||||
sp = \\_,_,_ => denp ;
|
(predV exist_V)) ;
|
||||||
s2 = denp ;
|
|
||||||
isNeg = False ;
|
GenRP nu cn = {
|
||||||
|
s = \\_b,_aagr,_c => cujo ! g ! n ++ num ++ cn.s ! n ;
|
||||||
|
a = aagr g n ;
|
||||||
|
hasAgr = True
|
||||||
|
} where {
|
||||||
|
cujo = genNumForms "cujo" "cuja" "cujos" "cujas" ;
|
||||||
|
g = cn.g ;
|
||||||
|
n = nu.n ;
|
||||||
|
num = if_then_Str nu.isNum (nu.s ! g) []
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
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
|
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 = {
|
|
||||||
s = table {
|
|
||||||
Nom => let pn = p.s ! Nom in {c1 = pn.c1 ; c2 = pn.c2 ; comp = [] ; ton = pn.ton} ;
|
|
||||||
c => p.s ! c
|
|
||||||
} ;
|
|
||||||
a = p.a ;
|
|
||||||
poss = p.poss ;
|
|
||||||
hasClit = p.hasClit ;
|
|
||||||
isPol = p.isPol ;
|
|
||||||
isNeg = False
|
|
||||||
} ;
|
|
||||||
|
|
||||||
ICompAP ap = {
|
ICompAP ap = {
|
||||||
s =\\a => "o quão" ++ ap.s ! (genNum2Aform a.g a.n) ;
|
s =\\a => "o quão" ++ ap.s ! (genNum2Aform a.g a.n) ;
|
||||||
cop = serCopula
|
cop = serCopula
|
||||||
@@ -135,63 +56,9 @@ concrete ExtendPor of Extend =
|
|||||||
s = "o quão" ++ adv.s
|
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 ;
|
|
||||||
copTyp = serCopula
|
|
||||||
} ;
|
|
||||||
|
|
||||||
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 ! (genNum2Aform Masc n) ;
|
|
||||||
g = Masc
|
|
||||||
} ;
|
|
||||||
|
|
||||||
AdjAsNP ap = heavyNP {
|
|
||||||
s = \\_c => ap.s ! ASg Masc APred ;
|
|
||||||
a = Ag Masc Sg P3
|
|
||||||
} ;
|
|
||||||
|
|
||||||
oper
|
oper
|
||||||
pastPartAP : VPSlash -> Str -> AP ;
|
exist_V : V ;
|
||||||
pastPartAP vps agent = lin AP {
|
exist_V = mkV "existir" ;
|
||||||
s = \\af => vps.comp ! (aform2aagr af ** {p = P3}) ++ vps.s.s ! VPart (aform2gender af) (aform2number af) ++ agent ;
|
|
||||||
isPre = False ;
|
|
||||||
copTyp = serCopula
|
|
||||||
} ;
|
|
||||||
|
|
||||||
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
|
lin
|
||||||
CompoundN noun noun2 = { -- order is different because that's needed for correct translation from english
|
CompoundN noun noun2 = { -- order is different because that's needed for correct translation from english
|
||||||
@@ -209,71 +76,15 @@ concrete ExtendPor of Extend =
|
|||||||
copTyp = adj.copTyp
|
copTyp = adj.copTyp
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
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 = {
|
WithoutVP vp = {
|
||||||
s = "sem" ++ gerundStr vp
|
s = "sem" ++ infStr vp
|
||||||
} ;
|
|
||||||
|
|
||||||
ByVP vp = {
|
|
||||||
s = "by" ++ gerundStr vp
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
InOrderToVP vp = {
|
InOrderToVP vp = {
|
||||||
s = "a fim de" ++ gerundStr vp
|
s = "a fim de" ++ infStr 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
|
lin
|
||||||
-- Romance
|
|
||||||
iFem_Pron = pronAgr S.i_Pron Fem Sg P1 ;
|
iFem_Pron = pronAgr S.i_Pron Fem Sg P1 ;
|
||||||
weFem_Pron = pronAgr S.we_Pron Fem Pl P1 ;
|
weFem_Pron = pronAgr S.we_Pron Fem Pl P1 ;
|
||||||
youFem_Pron = pronAgr S.youSg_Pron Fem Sg P3 ;
|
youFem_Pron = pronAgr S.youSg_Pron Fem Sg P3 ;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
-- the Extra* modules are to be deprecated in favour of the Extend*
|
-- the Extra* modules are to be deprecated in favour of the Extend*
|
||||||
-- module.
|
-- module.
|
||||||
concrete ExtraPor of ExtraPorAbs = ExtraRomancePor **
|
concrete ExtraPor of ExtraPorAbs = ExtraRomancePor **
|
||||||
open CommonRomance, PhonoPor, MorphoPor, ParadigmsPor, ParamX, ResPor, BeschPor, (B = IrregBeschPor), (E = ExtendPor),
|
open CommonRomance, PhonoPor, MorphoPor, ParadigmsPor, ParamX, ResPor, BeschPor, (B = IrregPor), (E = ExtendPor),
|
||||||
Prelude in {
|
Prelude in {
|
||||||
flags coding=utf8 ;
|
flags coding=utf8 ;
|
||||||
|
|
||||||
@@ -45,4 +45,4 @@ concrete ExtraPor of ExtraPorAbs = ExtraRomancePor **
|
|||||||
|
|
||||||
UseComp_estar comp = insertComplement comp.s (predV B.estar_V) ;
|
UseComp_estar comp = insertComplement comp.s (predV B.estar_V) ;
|
||||||
|
|
||||||
}
|
} ;
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ concrete IdiomPor of Idiom = CatPor **
|
|||||||
in
|
in
|
||||||
vp.s.s ! VGer ++ clpr.p1 ++ obj
|
vp.s.s ! VGer ++ clpr.p1 ++ obj
|
||||||
)
|
)
|
||||||
(predV B.estar_V) ;
|
(predV B.stare_V) ;
|
||||||
|
|
||||||
ImpPl1 vp = {s =
|
ImpPl1 vp = {s =
|
||||||
mkImperative False P1 vp ! RPos ! Masc ! Pl ; --- fem
|
mkImperative False P1 vp ! RPos ! Masc ! Pl ; --- fem
|
||||||
@@ -56,7 +56,7 @@ concrete IdiomPor of Idiom = CatPor **
|
|||||||
s = "deixe" ++ (np.s ! Nom).ton ++ infVP vp np.a ;
|
s = "deixe" ++ (np.s ! Nom).ton ++ infVP vp np.a ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
SelfAdvVP vp = vp ;
|
SelfAdvVP vp = variants {} ;
|
||||||
|
|
||||||
SelfAdVVP = insertComplement (
|
SelfAdVVP = insertComplement (
|
||||||
\\agr => case agr of {
|
\\agr => case agr of {
|
||||||
@@ -68,6 +68,6 @@ concrete IdiomPor of Idiom = CatPor **
|
|||||||
}
|
}
|
||||||
) ;
|
) ;
|
||||||
|
|
||||||
SelfNP np = np ;
|
SelfNP np = variants {} ;
|
||||||
|
|
||||||
} ;
|
} ;
|
||||||
|
|||||||
@@ -1,360 +0,0 @@
|
|||||||
--# -path=.:../romance:../common:../abstract:../prelude
|
|
||||||
|
|
||||||
concrete IrregBeschPor of IrregBeschPorAbs = CatPor **
|
|
||||||
open ParadigmsPor, BeschPor in {
|
|
||||||
|
|
||||||
flags optimize=noexpand ;
|
|
||||||
coding=utf8 ;
|
|
||||||
|
|
||||||
-- machine-generated file: do not edit directly!
|
|
||||||
|
|
||||||
-- look up your verb here. if you don't find it, see if
|
|
||||||
-- if you can find out what is its paradigm and then add it!
|
|
||||||
|
|
||||||
lin
|
|
||||||
acontecer_V = mkV (acontecer_Besch "acontecer") ;
|
|
||||||
acudir_V = mkV (acudir_Besch "acudir") ;
|
|
||||||
bulir_V = mkV (acudir_Besch "bulir") ;
|
|
||||||
cuspir_V = mkV (acudir_Besch "cuspir") ;
|
|
||||||
sacudir_V = mkV (acudir_Besch "sacudir") ;
|
|
||||||
subir_V = mkV (acudir_Besch "subir") ;
|
|
||||||
sumir_V = mkV (acudir_Besch "sumir") ;
|
|
||||||
consumir_V = mkV (acudir_Besch "consumir") ;
|
|
||||||
adequar_V = mkV (adequar_Besch "adequar") ;
|
|
||||||
agredir_V = mkV (agredir_Besch "agredir") ;
|
|
||||||
denegrir_V = mkV (agredir_Besch "denegrir") ;
|
|
||||||
prevenir_V = mkV (agredir_Besch "prevenir") ;
|
|
||||||
progredir_V = mkV (agredir_Besch "progredir") ;
|
|
||||||
transgredir_V = mkV (agredir_Besch "transgredir") ;
|
|
||||||
anunciar_V = mkV (anunciar_Besch "anunciar") ;
|
|
||||||
abreviar_V = mkV (anunciar_Besch "abreviar") ;
|
|
||||||
acariciar_V = mkV (anunciar_Besch "acariciar") ;
|
|
||||||
afiar_V = mkV (anunciar_Besch "afiar") ;
|
|
||||||
aliviar_V = mkV (anunciar_Besch "aliviar") ;
|
|
||||||
apreciar_V = mkV (anunciar_Besch "apreciar") ;
|
|
||||||
assobiar_V = mkV (anunciar_Besch "assobiar") ;
|
|
||||||
avaliar_V = mkV (anunciar_Besch "avaliar") ;
|
|
||||||
avariar_V = mkV (anunciar_Besch "avariar") ;
|
|
||||||
criar_V = mkV (anunciar_Besch "criar") ;
|
|
||||||
denunciar_V = mkV (anunciar_Besch "denunciar") ;
|
|
||||||
desviar_V = mkV (anunciar_Besch "desviar") ;
|
|
||||||
enfiar_V = mkV (anunciar_Besch "enfiar") ;
|
|
||||||
enviar_V = mkV (anunciar_Besch "enviar") ;
|
|
||||||
iniciar_V = mkV (anunciar_Besch "iniciar") ;
|
|
||||||
principiar_V = mkV (anunciar_Besch "principiar") ;
|
|
||||||
pronunciar_V = mkV (anunciar_Besch "pronunciar") ;
|
|
||||||
renunciar_V = mkV (anunciar_Besch "renunciar") ;
|
|
||||||
aprazer_V = mkV (aprazer_Besch "aprazer") ;
|
|
||||||
desprazer_V = mkV (aprazer_Besch "desprazer") ;
|
|
||||||
aquecer_V = mkV (aquecer_Besch "aquecer") ;
|
|
||||||
agradecer_V = mkV (aquecer_Besch "agradecer") ;
|
|
||||||
amarelecer_V = mkV (aquecer_Besch "amarelecer") ;
|
|
||||||
amolecer_V = mkV (aquecer_Besch "amolecer") ;
|
|
||||||
arrefecer_V = mkV (aquecer_Besch "arrefecer") ;
|
|
||||||
empecer_V = mkV (aquecer_Besch "empecer") ;
|
|
||||||
entretecer_V = mkV (aquecer_Besch "entretecer") ;
|
|
||||||
entristecer_V = mkV (aquecer_Besch "entristecer") ;
|
|
||||||
escurecer_V = mkV (aquecer_Besch "escurecer") ;
|
|
||||||
estremecer_V = mkV (aquecer_Besch "estremecer") ;
|
|
||||||
favorecer_V = mkV (aquecer_Besch "favorecer") ;
|
|
||||||
merecer_V = mkV (aquecer_Besch "merecer") ;
|
|
||||||
oferecer_V = mkV (aquecer_Besch "oferecer") ;
|
|
||||||
parecer_V = mkV (aquecer_Besch "parecer") ;
|
|
||||||
perecer_V = mkV (aquecer_Besch "perecer") ;
|
|
||||||
reverdecer_V = mkV (aquecer_Besch "reverdecer") ;
|
|
||||||
tecer_V = mkV (aquecer_Besch "tecer") ;
|
|
||||||
arguir_V = mkV (arguir_Besch "arguir") ;
|
|
||||||
redarguir_V = mkV (arguir_Besch "redarguir") ;
|
|
||||||
averiguar_V = mkV (averiguar_Besch "averiguar") ;
|
|
||||||
aguar_V = mkV (averiguar_Besch "aguar") ;
|
|
||||||
apaniguar_V = mkV (averiguar_Besch "apaniguar") ;
|
|
||||||
apaziguar_V = mkV (averiguar_Besch "apaziguar") ;
|
|
||||||
apropinquar_V = mkV (averiguar_Besch "apropinquar") ;
|
|
||||||
deliquar_V = mkV (averiguar_Besch "deliquar") ;
|
|
||||||
desaguar_V = mkV (averiguar_Besch "desaguar") ;
|
|
||||||
enxaguar_V = mkV (averiguar_Besch "enxaguar") ;
|
|
||||||
obliquar_V = mkV (averiguar_Besch "obliquar") ;
|
|
||||||
caber_V = mkV (caber_Besch "caber") ;
|
|
||||||
chegar_V = mkV (chegar_Besch "chegar") ;
|
|
||||||
chover_V = mkV (chover_Besch "chover") ;
|
|
||||||
começar_V = mkV (começar_Besch "começar") ;
|
|
||||||
comerciar_V = mkV (comerciar_Besch "comerciar") ;
|
|
||||||
agenciar_V = mkV (comerciar_Besch "agenciar") ;
|
|
||||||
licenciar_V = mkV (comerciar_Besch "licenciar") ;
|
|
||||||
negociar_V = mkV (comerciar_Besch "negociar") ;
|
|
||||||
obsequiar_V = mkV (comerciar_Besch "obsequiar") ;
|
|
||||||
premiar_V = mkV (comerciar_Besch "premiar") ;
|
|
||||||
providenciar_V = mkV (comerciar_Besch "providenciar") ;
|
|
||||||
sentenciar_V = mkV (comerciar_Besch "sentenciar") ;
|
|
||||||
silenciar_V = mkV (comerciar_Besch "silenciar") ;
|
|
||||||
comprar_V = mkV (comprar_Besch "comprar") ;
|
|
||||||
crer_V = mkV (crer_Besch "crer") ;
|
|
||||||
descrer_V = mkV (crer_Besch "descrer") ;
|
|
||||||
dar_V = mkV (dar_Besch "dar") ;
|
|
||||||
destruir_V = mkV (destruir_Besch "destruir") ;
|
|
||||||
construir_V = mkV (destruir_Besch "construir") ;
|
|
||||||
reconstruir_V = mkV (destruir_Besch "reconstruir") ;
|
|
||||||
distribuir_V = mkV (distribuir_Besch "distribuir") ;
|
|
||||||
imbuir_V = mkV (distribuir_Besch "imbuir") ;
|
|
||||||
afluir_V = mkV (distribuir_Besch "afluir") ;
|
|
||||||
confluir_V = mkV (distribuir_Besch "confluir") ;
|
|
||||||
fluir_V = mkV (distribuir_Besch "fluir") ;
|
|
||||||
influir_V = mkV (distribuir_Besch "influir") ;
|
|
||||||
refluir_V = mkV (distribuir_Besch "refluir") ;
|
|
||||||
atribuir_V = mkV (distribuir_Besch "atribuir") ;
|
|
||||||
contribuir_V = mkV (distribuir_Besch "contribuir") ;
|
|
||||||
retribuir_V = mkV (distribuir_Besch "retribuir") ;
|
|
||||||
instituir_V = mkV (distribuir_Besch "instituir") ;
|
|
||||||
restituir_V = mkV (distribuir_Besch "restituir") ;
|
|
||||||
substituir_V = mkV (distribuir_Besch "substituir") ;
|
|
||||||
divergir_V = mkV (divergir_Besch "divergir") ;
|
|
||||||
aspergir_V = mkV (divergir_Besch "aspergir") ;
|
|
||||||
convergir_V = mkV (divergir_Besch "convergir") ;
|
|
||||||
dizer_V = mkV (dizer_Besch "dizer") ;
|
|
||||||
bendizer_V = mkV (dizer_Besch "bendizer") ;
|
|
||||||
condizer_V = mkV (dizer_Besch "condizer") ;
|
|
||||||
contradizer_V = mkV (dizer_Besch "contradizer") ;
|
|
||||||
desdizer_V = mkV (dizer_Besch "desdizer") ;
|
|
||||||
maldizer_V = mkV (dizer_Besch "maldizer") ;
|
|
||||||
predizer_V = mkV (dizer_Besch "predizer") ;
|
|
||||||
doer_V = mkV (doer_Besch "doer") ;
|
|
||||||
dormir_V = mkV (dormir_Besch "dormir") ;
|
|
||||||
cobrir_V = mkV (dormir_Besch "cobrir") ;
|
|
||||||
descobrir_V = mkV (dormir_Besch "descobrir") ;
|
|
||||||
encobrir_V = mkV (dormir_Besch "encobrir") ;
|
|
||||||
recobrir_V = mkV (dormir_Besch "recobrir") ;
|
|
||||||
explodir_V = mkV (dormir_Besch "explodir") ;
|
|
||||||
engolir_V = mkV (dormir_Besch "engolir") ;
|
|
||||||
tossir_V = mkV (dormir_Besch "tossir") ;
|
|
||||||
erguer_V = mkV (erguer_Besch "erguer") ;
|
|
||||||
soerguer_V = mkV (erguer_Besch "soerguer") ;
|
|
||||||
estar_V = mkV (estar_Besch "estar") ;
|
|
||||||
extinguir_V = mkV (extinguir_Besch "extinguir") ;
|
|
||||||
falir_V = mkV (falir_Besch "falir") ;
|
|
||||||
aguerrir_V = mkV (falir_Besch "aguerrir") ;
|
|
||||||
combalir_V = mkV (falir_Besch "combalir") ;
|
|
||||||
desflorir_V = mkV (falir_Besch "desflorir") ;
|
|
||||||
florir_V = mkV (falir_Besch "florir") ;
|
|
||||||
reflorir_V = mkV (falir_Besch "reflorir") ;
|
|
||||||
renhir_V = mkV (falir_Besch "renhir") ;
|
|
||||||
fazer_V = mkV (fazer_Besch "fazer") ;
|
|
||||||
afazer_V = mkV (fazer_Besch "afazer") ;
|
|
||||||
contrafazer_V = mkV (fazer_Besch "contrafazer") ;
|
|
||||||
desfazer_V = mkV (fazer_Besch "desfazer") ;
|
|
||||||
liquefazer_V = mkV (fazer_Besch "liquefazer") ;
|
|
||||||
perfazer_V = mkV (fazer_Besch "perfazer") ;
|
|
||||||
rarefazer_V = mkV (fazer_Besch "rarefazer") ;
|
|
||||||
refazer_V = mkV (fazer_Besch "refazer") ;
|
|
||||||
satisfazer_V = mkV (fazer_Besch "satisfazer") ;
|
|
||||||
ficar_V = mkV (ficar_Besch "ficar") ;
|
|
||||||
frigir_V = mkV (frigir_Besch "frigir") ;
|
|
||||||
fugir_V = mkV (fugir_Besch "fugir") ;
|
|
||||||
garantir_V = mkV (garantir_Besch "garantir") ;
|
|
||||||
haver_V = mkV (haver_Besch "haver") ;
|
|
||||||
abolir_V = mkV (imergir_Besch "abolir") ;
|
|
||||||
banir_V = mkV (imergir_Besch "banir") ;
|
|
||||||
brandir_V = mkV (imergir_Besch "brandir") ;
|
|
||||||
brunir_V = mkV (imergir_Besch "brunir") ;
|
|
||||||
emergir_V = mkV (imergir_Besch "emergir") ;
|
|
||||||
empedernir_V = mkV (imergir_Besch "empedernir") ;
|
|
||||||
exaurir_V = mkV (imergir_Besch "exaurir") ;
|
|
||||||
extorquir_V = mkV (imergir_Besch "extorquir") ;
|
|
||||||
fremir_V = mkV (imergir_Besch "fremir") ;
|
|
||||||
fulgir_V = mkV (imergir_Besch "fulgir") ;
|
|
||||||
jungir_V = mkV (imergir_Besch "jungir") ;
|
|
||||||
retorquir_V = mkV (imergir_Besch "retorquir") ;
|
|
||||||
submergir_V = mkV (imergir_Besch "submergir") ;
|
|
||||||
ungir_V = mkV (imergir_Besch "ungir") ;
|
|
||||||
colorir_V = mkV (imergir_Besch "colorir") ;
|
|
||||||
demolir_V = mkV (imergir_Besch "demolir") ;
|
|
||||||
ir_V = mkV (ir_Besch "ir") ;
|
|
||||||
jazer_V = mkV (jazer_Besch "jazer") ;
|
|
||||||
ler_V = mkV (ler_Besch "ler") ;
|
|
||||||
reler_V = mkV (ler_Besch "reler") ;
|
|
||||||
tresler_V = mkV (ler_Besch "tresler") ;
|
|
||||||
moer_V = mkV (moer_Besch "moer") ;
|
|
||||||
roer_V = mkV (moer_Besch "roer") ;
|
|
||||||
neviscar_V = mkV (neviscar_Besch "neviscar") ;
|
|
||||||
odiar_V = mkV (odiar_Besch "odiar") ;
|
|
||||||
ansiar_V = mkV (odiar_Besch "ansiar") ;
|
|
||||||
incendiar_V = mkV (odiar_Besch "incendiar") ;
|
|
||||||
mediar_V = mkV (odiar_Besch "mediar") ;
|
|
||||||
remediar_V = mkV (odiar_Besch "remediar") ;
|
|
||||||
ouvir_V = mkV (ouvir_Besch "ouvir") ;
|
|
||||||
pedir_V = mkV (pedir_Besch "pedir") ;
|
|
||||||
despedir_V = mkV (pedir_Besch "despedir") ;
|
|
||||||
expedir_V = mkV (pedir_Besch "expedir") ;
|
|
||||||
reexpedir_V = mkV (pedir_Besch "reexpedir") ;
|
|
||||||
impedir_V = mkV (pedir_Besch "impedir") ;
|
|
||||||
desimpedir_V = mkV (pedir_Besch "desimpedir") ;
|
|
||||||
medir_V = mkV (pedir_Besch "medir") ;
|
|
||||||
perder_V = mkV (perder_Besch "perder") ;
|
|
||||||
perdoar_V = mkV (perdoar_Besch "perdoar") ;
|
|
||||||
abalroar_V = mkV (perdoar_Besch "abalroar") ;
|
|
||||||
abençoar_V = mkV (perdoar_Besch "abençoar") ;
|
|
||||||
amaldiçoar_V = mkV (perdoar_Besch "amaldiçoar") ;
|
|
||||||
aperfeiçoar_V = mkV (perdoar_Besch "aperfeiçoar") ;
|
|
||||||
apregoar_V = mkV (perdoar_Besch "apregoar") ;
|
|
||||||
coar_V = mkV (perdoar_Besch "coar") ;
|
|
||||||
doar_V = mkV (perdoar_Besch "doar") ;
|
|
||||||
entoar_V = mkV (perdoar_Besch "entoar") ;
|
|
||||||
esboroar_V = mkV (perdoar_Besch "esboroar") ;
|
|
||||||
povoar_V = mkV (perdoar_Besch "povoar") ;
|
|
||||||
soar_V = mkV (perdoar_Besch "soar") ;
|
|
||||||
toar_V = mkV (perdoar_Besch "toar") ;
|
|
||||||
voar_V = mkV (perdoar_Besch "voar") ;
|
|
||||||
poder_V = mkV (poder_Besch "poder") ;
|
|
||||||
polir_V = mkV (polir_Besch "polir") ;
|
|
||||||
pôr_V = mkV (pôr_Besch "pôr") ;
|
|
||||||
apor_V = mkV (pôr_Besch "apor") ;
|
|
||||||
compor_V = mkV (pôr_Besch "compor") ;
|
|
||||||
contrapor_V = mkV (pôr_Besch "contrapor") ;
|
|
||||||
decompor_V = mkV (pôr_Besch "decompor") ;
|
|
||||||
descompor_V = mkV (pôr_Besch "descompor") ;
|
|
||||||
dispor_V = mkV (pôr_Besch "dispor") ;
|
|
||||||
expor_V = mkV (pôr_Besch "expor") ;
|
|
||||||
impor_V = mkV (pôr_Besch "impor") ;
|
|
||||||
opor_V = mkV (pôr_Besch "opor") ;
|
|
||||||
propor_V = mkV (pôr_Besch "propor") ;
|
|
||||||
repor_V = mkV (pôr_Besch "repor") ;
|
|
||||||
supor_V = mkV (pôr_Besch "supor") ;
|
|
||||||
prazer_V = mkV (prazer_Besch "prazer") ;
|
|
||||||
precaver_V = mkV (precaver_Besch "precaver") ;
|
|
||||||
preferir_V = mkV (preferir_Besch "preferir") ;
|
|
||||||
aderir_V = mkV (preferir_Besch "aderir") ;
|
|
||||||
aferir_V = mkV (preferir_Besch "aferir") ;
|
|
||||||
conferir_V = mkV (preferir_Besch "conferir") ;
|
|
||||||
deferir_V = mkV (preferir_Besch "deferir") ;
|
|
||||||
diferir_V = mkV (preferir_Besch "diferir") ;
|
|
||||||
digerir_V = mkV (preferir_Besch "digerir") ;
|
|
||||||
ferir_V = mkV (preferir_Besch "ferir") ;
|
|
||||||
inferir_V = mkV (preferir_Besch "inferir") ;
|
|
||||||
inserir_V = mkV (preferir_Besch "inserir") ;
|
|
||||||
proferir_V = mkV (preferir_Besch "proferir") ;
|
|
||||||
referir_V = mkV (preferir_Besch "referir") ;
|
|
||||||
repelir_V = mkV (preferir_Besch "repelir") ;
|
|
||||||
repetir_V = mkV (preferir_Besch "repetir") ;
|
|
||||||
sugerir_V = mkV (preferir_Besch "sugerir") ;
|
|
||||||
transferir_V = mkV (preferir_Besch "transferir") ;
|
|
||||||
proibir_V = mkV (proibir_Besch "proibir") ;
|
|
||||||
coibir_V = mkV (proibir_Besch "coibir") ;
|
|
||||||
proteger_V = mkV (proteger_Besch "proteger") ;
|
|
||||||
eleger_V = mkV (proteger_Besch "eleger") ;
|
|
||||||
reger_V = mkV (proteger_Besch "reger") ;
|
|
||||||
prover_V = mkV (prover_Besch "prover") ;
|
|
||||||
querer_V = mkV (querer_Besch "querer") ;
|
|
||||||
reaver_V = mkV (reaver_Besch "reaver") ;
|
|
||||||
recear_V = mkV (recear_Besch "recear") ;
|
|
||||||
acarear_V = mkV (recear_Besch "acarear") ;
|
|
||||||
afear_V = mkV (recear_Besch "afear") ;
|
|
||||||
altear_V = mkV (recear_Besch "altear") ;
|
|
||||||
apear_V = mkV (recear_Besch "apear") ;
|
|
||||||
arquear_V = mkV (recear_Besch "arquear") ;
|
|
||||||
asnear_V = mkV (recear_Besch "asnear") ;
|
|
||||||
costear_V = mkV (recear_Besch "costear") ;
|
|
||||||
custear_V = mkV (recear_Besch "custear") ;
|
|
||||||
enfrear_V = mkV (recear_Besch "enfrear") ;
|
|
||||||
frear_V = mkV (recear_Besch "frear") ;
|
|
||||||
olear_V = mkV (recear_Besch "olear") ;
|
|
||||||
passear_V = mkV (recear_Besch "passear") ;
|
|
||||||
pear_V = mkV (recear_Besch "pear") ;
|
|
||||||
pentear_V = mkV (recear_Besch "pentear") ;
|
|
||||||
pratear_V = mkV (recear_Besch "pratear") ;
|
|
||||||
presentear_V = mkV (recear_Besch "presentear") ;
|
|
||||||
recrear_V = mkV (recear_Besch "recrear") ;
|
|
||||||
saborear_V = mkV (recear_Besch "saborear") ;
|
|
||||||
sofrear_V = mkV (recear_Besch "sofrear") ;
|
|
||||||
redigir_V = mkV (redigir_Besch "redigir") ;
|
|
||||||
afligir_V = mkV (redigir_Besch "afligir") ;
|
|
||||||
agir_V = mkV (redigir_Besch "agir") ;
|
|
||||||
coligir_V = mkV (redigir_Besch "coligir") ;
|
|
||||||
corrigir_V = mkV (redigir_Besch "corrigir") ;
|
|
||||||
erigir_V = mkV (redigir_Besch "erigir") ;
|
|
||||||
exigir_V = mkV (redigir_Besch "exigir") ;
|
|
||||||
fingir_V = mkV (redigir_Besch "fingir") ;
|
|
||||||
frangir_V = mkV (redigir_Besch "frangir") ;
|
|
||||||
infligir_V = mkV (redigir_Besch "infligir") ;
|
|
||||||
transigir_V = mkV (redigir_Besch "transigir") ;
|
|
||||||
refletir_V = mkV (refletir_Besch "refletir") ;
|
|
||||||
fletir_V = mkV (refletir_Besch "fletir") ;
|
|
||||||
defletir_V = mkV (refletir_Besch "defletir") ;
|
|
||||||
infletir_V = mkV (refletir_Besch "infletir") ;
|
|
||||||
remir_V = mkV (remir_Besch "remir") ;
|
|
||||||
requerer_V = mkV (requerer_Besch "requerer") ;
|
|
||||||
reunir_V = mkV (reunir_Besch "reunir") ;
|
|
||||||
rir_V = mkV (rir_Besch "rir") ;
|
|
||||||
sorrir_V = mkV (rir_Besch "sorrir") ;
|
|
||||||
saber_V = mkV (saber_Besch "saber") ;
|
|
||||||
dessaber_V = mkV (saber_Besch "dessaber") ;
|
|
||||||
sair_V = mkV (sair_Besch "sair") ;
|
|
||||||
cair_V = mkV (sair_Besch "cair") ;
|
|
||||||
decair_V = mkV (sair_Besch "decair") ;
|
|
||||||
descair_V = mkV (sair_Besch "descair") ;
|
|
||||||
recair_V = mkV (sair_Besch "recair") ;
|
|
||||||
trair_V = mkV (sair_Besch "trair") ;
|
|
||||||
atrair_V = mkV (sair_Besch "atrair") ;
|
|
||||||
contrair_V = mkV (sair_Besch "contrair") ;
|
|
||||||
distrair_V = mkV (sair_Besch "distrair") ;
|
|
||||||
extrair_V = mkV (sair_Besch "extrair") ;
|
|
||||||
protrair_V = mkV (sair_Besch "protrair") ;
|
|
||||||
retrair_V = mkV (sair_Besch "retrair") ;
|
|
||||||
subtrair_V = mkV (sair_Besch "subtrair") ;
|
|
||||||
saudar_V = mkV (saudar_Besch "saudar") ;
|
|
||||||
seguir_V = mkV (seguir_Besch "seguir") ;
|
|
||||||
conseguir_V = mkV (seguir_Besch "conseguir") ;
|
|
||||||
perseguir_V = mkV (seguir_Besch "perseguir") ;
|
|
||||||
prosseguir_V = mkV (seguir_Besch "prosseguir") ;
|
|
||||||
sentir_V = mkV (sentir_Besch "sentir") ;
|
|
||||||
assentir_V = mkV (sentir_Besch "assentir") ;
|
|
||||||
consentir_V = mkV (sentir_Besch "consentir") ;
|
|
||||||
pressentir_V = mkV (sentir_Besch "pressentir") ;
|
|
||||||
ressentir_V = mkV (sentir_Besch "ressentir") ;
|
|
||||||
mentir_V = mkV (sentir_Besch "mentir") ;
|
|
||||||
desmentir_V = mkV (sentir_Besch "desmentir") ;
|
|
||||||
ser_V = mkV (ser_Besch "ser") ;
|
|
||||||
servir_V = mkV (servir_Besch "servir") ;
|
|
||||||
concernir_V = mkV (servir_Besch "concernir") ;
|
|
||||||
discernir_V = mkV (servir_Besch "discernir") ;
|
|
||||||
cerzir_V = mkV (servir_Besch "cerzir") ;
|
|
||||||
despir_V = mkV (servir_Besch "despir") ;
|
|
||||||
vestir_V = mkV (servir_Besch "vestir") ;
|
|
||||||
investir_V = mkV (servir_Besch "investir") ;
|
|
||||||
revestir_V = mkV (servir_Besch "revestir") ;
|
|
||||||
ter_V = mkV (ter_Besch "ter") ;
|
|
||||||
conter_V = mkV (ter_Besch "conter") ;
|
|
||||||
deter_V = mkV (ter_Besch "deter") ;
|
|
||||||
entreter_V = mkV (ter_Besch "entreter") ;
|
|
||||||
reter_V = mkV (ter_Besch "reter") ;
|
|
||||||
suster_V = mkV (ter_Besch "suster") ;
|
|
||||||
traduzir_V = mkV (traduzir_Besch "traduzir") ;
|
|
||||||
abduzir_V = mkV (traduzir_Besch "abduzir") ;
|
|
||||||
aduzir_V = mkV (traduzir_Besch "aduzir") ;
|
|
||||||
conduzir_V = mkV (traduzir_Besch "conduzir") ;
|
|
||||||
deduzir_V = mkV (traduzir_Besch "deduzir") ;
|
|
||||||
induzir_V = mkV (traduzir_Besch "induzir") ;
|
|
||||||
introduzir_V = mkV (traduzir_Besch "introduzir") ;
|
|
||||||
luzir_V = mkV (traduzir_Besch "luzir") ;
|
|
||||||
perluzir_V = mkV (traduzir_Besch "perluzir") ;
|
|
||||||
produzir_V = mkV (traduzir_Besch "produzir") ;
|
|
||||||
reduzir_V = mkV (traduzir_Besch "reduzir") ;
|
|
||||||
reluzir_V = mkV (traduzir_Besch "reluzir") ;
|
|
||||||
seduzir_V = mkV (traduzir_Besch "seduzir") ;
|
|
||||||
trazer_V = mkV (trazer_Besch "trazer") ;
|
|
||||||
valer_V = mkV (valer_Besch "valer") ;
|
|
||||||
desvaler_V = mkV (valer_Besch "desvaler") ;
|
|
||||||
equivaler_V = mkV (valer_Besch "equivaler") ;
|
|
||||||
vender_V = mkV (vender_Besch "vender") ;
|
|
||||||
ver_V = mkV (ver_Besch "ver") ;
|
|
||||||
antever_V = mkV (ver_Besch "antever") ;
|
|
||||||
entrever_V = mkV (ver_Besch "entrever") ;
|
|
||||||
prever_V = mkV (ver_Besch "prever") ;
|
|
||||||
rever_V = mkV (ver_Besch "rever") ;
|
|
||||||
vir_V = mkV (vir_Besch "vir") ;
|
|
||||||
advir_V = mkV (vir_Besch "advir") ;
|
|
||||||
convir_V = mkV (vir_Besch "convir") ;
|
|
||||||
desavir_V = mkV (vir_Besch "desavir") ;
|
|
||||||
intervir_V = mkV (vir_Besch "intervir") ;
|
|
||||||
porvir_V = mkV (vir_Besch "porvir") ;
|
|
||||||
sobrevir_V = mkV (vir_Besch "sobrevir") ;
|
|
||||||
|
|
||||||
} ;
|
|
||||||
@@ -1,354 +0,0 @@
|
|||||||
--# -path=.:../romance:../common:../abstract:../prelude
|
|
||||||
|
|
||||||
abstract IrregBeschPorAbs = Cat ** {
|
|
||||||
flags coding=utf8 ;
|
|
||||||
|
|
||||||
-- machine-generated file: do not edit directly!
|
|
||||||
|
|
||||||
fun
|
|
||||||
acontecer_V : V ;
|
|
||||||
acudir_V : V ;
|
|
||||||
bulir_V : V ;
|
|
||||||
cuspir_V : V ;
|
|
||||||
sacudir_V : V ;
|
|
||||||
subir_V : V ;
|
|
||||||
sumir_V : V ;
|
|
||||||
consumir_V : V ;
|
|
||||||
adequar_V : V ;
|
|
||||||
agredir_V : V ;
|
|
||||||
denegrir_V : V ;
|
|
||||||
prevenir_V : V ;
|
|
||||||
progredir_V : V ;
|
|
||||||
transgredir_V : V ;
|
|
||||||
anunciar_V : V ;
|
|
||||||
abreviar_V : V ;
|
|
||||||
acariciar_V : V ;
|
|
||||||
afiar_V : V ;
|
|
||||||
aliviar_V : V ;
|
|
||||||
apreciar_V : V ;
|
|
||||||
assobiar_V : V ;
|
|
||||||
avaliar_V : V ;
|
|
||||||
avariar_V : V ;
|
|
||||||
criar_V : V ;
|
|
||||||
denunciar_V : V ;
|
|
||||||
desviar_V : V ;
|
|
||||||
enfiar_V : V ;
|
|
||||||
enviar_V : V ;
|
|
||||||
iniciar_V : V ;
|
|
||||||
principiar_V : V ;
|
|
||||||
pronunciar_V : V ;
|
|
||||||
renunciar_V : V ;
|
|
||||||
aprazer_V : V ;
|
|
||||||
desprazer_V : V ;
|
|
||||||
aquecer_V : V ;
|
|
||||||
agradecer_V : V ;
|
|
||||||
amarelecer_V : V ;
|
|
||||||
amolecer_V : V ;
|
|
||||||
arrefecer_V : V ;
|
|
||||||
empecer_V : V ;
|
|
||||||
entretecer_V : V ;
|
|
||||||
entristecer_V : V ;
|
|
||||||
escurecer_V : V ;
|
|
||||||
estremecer_V : V ;
|
|
||||||
favorecer_V : V ;
|
|
||||||
merecer_V : V ;
|
|
||||||
oferecer_V : V ;
|
|
||||||
parecer_V : V ;
|
|
||||||
perecer_V : V ;
|
|
||||||
reverdecer_V : V ;
|
|
||||||
tecer_V : V ;
|
|
||||||
arguir_V : V ;
|
|
||||||
redarguir_V : V ;
|
|
||||||
averiguar_V : V ;
|
|
||||||
aguar_V : V ;
|
|
||||||
apaniguar_V : V ;
|
|
||||||
apaziguar_V : V ;
|
|
||||||
apropinquar_V : V ;
|
|
||||||
deliquar_V : V ;
|
|
||||||
desaguar_V : V ;
|
|
||||||
enxaguar_V : V ;
|
|
||||||
obliquar_V : V ;
|
|
||||||
caber_V : V ;
|
|
||||||
chegar_V : V ;
|
|
||||||
chover_V : V ;
|
|
||||||
começar_V : V ;
|
|
||||||
comerciar_V : V ;
|
|
||||||
agenciar_V : V ;
|
|
||||||
licenciar_V : V ;
|
|
||||||
negociar_V : V ;
|
|
||||||
obsequiar_V : V ;
|
|
||||||
premiar_V : V ;
|
|
||||||
providenciar_V : V ;
|
|
||||||
sentenciar_V : V ;
|
|
||||||
silenciar_V : V ;
|
|
||||||
comprar_V : V ;
|
|
||||||
crer_V : V ;
|
|
||||||
descrer_V : V ;
|
|
||||||
dar_V : V ;
|
|
||||||
destruir_V : V ;
|
|
||||||
construir_V : V ;
|
|
||||||
reconstruir_V : V ;
|
|
||||||
distribuir_V : V ;
|
|
||||||
imbuir_V : V ;
|
|
||||||
afluir_V : V ;
|
|
||||||
confluir_V : V ;
|
|
||||||
fluir_V : V ;
|
|
||||||
influir_V : V ;
|
|
||||||
refluir_V : V ;
|
|
||||||
atribuir_V : V ;
|
|
||||||
contribuir_V : V ;
|
|
||||||
retribuir_V : V ;
|
|
||||||
instituir_V : V ;
|
|
||||||
restituir_V : V ;
|
|
||||||
substituir_V : V ;
|
|
||||||
divergir_V : V ;
|
|
||||||
aspergir_V : V ;
|
|
||||||
convergir_V : V ;
|
|
||||||
dizer_V : V ;
|
|
||||||
bendizer_V : V ;
|
|
||||||
condizer_V : V ;
|
|
||||||
contradizer_V : V ;
|
|
||||||
desdizer_V : V ;
|
|
||||||
maldizer_V : V ;
|
|
||||||
predizer_V : V ;
|
|
||||||
doer_V : V ;
|
|
||||||
dormir_V : V ;
|
|
||||||
cobrir_V : V ;
|
|
||||||
descobrir_V : V ;
|
|
||||||
encobrir_V : V ;
|
|
||||||
recobrir_V : V ;
|
|
||||||
explodir_V : V ;
|
|
||||||
engolir_V : V ;
|
|
||||||
tossir_V : V ;
|
|
||||||
erguer_V : V ;
|
|
||||||
soerguer_V : V ;
|
|
||||||
estar_V : V ;
|
|
||||||
extinguir_V : V ;
|
|
||||||
falir_V : V ;
|
|
||||||
aguerrir_V : V ;
|
|
||||||
combalir_V : V ;
|
|
||||||
desflorir_V : V ;
|
|
||||||
florir_V : V ;
|
|
||||||
reflorir_V : V ;
|
|
||||||
renhir_V : V ;
|
|
||||||
fazer_V : V ;
|
|
||||||
afazer_V : V ;
|
|
||||||
contrafazer_V : V ;
|
|
||||||
desfazer_V : V ;
|
|
||||||
liquefazer_V : V ;
|
|
||||||
perfazer_V : V ;
|
|
||||||
rarefazer_V : V ;
|
|
||||||
refazer_V : V ;
|
|
||||||
satisfazer_V : V ;
|
|
||||||
ficar_V : V ;
|
|
||||||
frigir_V : V ;
|
|
||||||
fugir_V : V ;
|
|
||||||
garantir_V : V ;
|
|
||||||
haver_V : V ;
|
|
||||||
abolir_V : V ;
|
|
||||||
banir_V : V ;
|
|
||||||
brandir_V : V ;
|
|
||||||
brunir_V : V ;
|
|
||||||
emergir_V : V ;
|
|
||||||
empedernir_V : V ;
|
|
||||||
exaurir_V : V ;
|
|
||||||
extorquir_V : V ;
|
|
||||||
fremir_V : V ;
|
|
||||||
fulgir_V : V ;
|
|
||||||
jungir_V : V ;
|
|
||||||
retorquir_V : V ;
|
|
||||||
submergir_V : V ;
|
|
||||||
ungir_V : V ;
|
|
||||||
colorir_V : V ;
|
|
||||||
demolir_V : V ;
|
|
||||||
ir_V : V ;
|
|
||||||
jazer_V : V ;
|
|
||||||
ler_V : V ;
|
|
||||||
reler_V : V ;
|
|
||||||
tresler_V : V ;
|
|
||||||
moer_V : V ;
|
|
||||||
roer_V : V ;
|
|
||||||
neviscar_V : V ;
|
|
||||||
odiar_V : V ;
|
|
||||||
ansiar_V : V ;
|
|
||||||
incendiar_V : V ;
|
|
||||||
mediar_V : V ;
|
|
||||||
remediar_V : V ;
|
|
||||||
ouvir_V : V ;
|
|
||||||
pedir_V : V ;
|
|
||||||
despedir_V : V ;
|
|
||||||
expedir_V : V ;
|
|
||||||
reexpedir_V : V ;
|
|
||||||
impedir_V : V ;
|
|
||||||
desimpedir_V : V ;
|
|
||||||
medir_V : V ;
|
|
||||||
perder_V : V ;
|
|
||||||
perdoar_V : V ;
|
|
||||||
abalroar_V : V ;
|
|
||||||
abençoar_V : V ;
|
|
||||||
amaldiçoar_V : V ;
|
|
||||||
aperfeiçoar_V : V ;
|
|
||||||
apregoar_V : V ;
|
|
||||||
coar_V : V ;
|
|
||||||
doar_V : V ;
|
|
||||||
entoar_V : V ;
|
|
||||||
esboroar_V : V ;
|
|
||||||
povoar_V : V ;
|
|
||||||
soar_V : V ;
|
|
||||||
toar_V : V ;
|
|
||||||
voar_V : V ;
|
|
||||||
poder_V : V ;
|
|
||||||
polir_V : V ;
|
|
||||||
pôr_V : V ;
|
|
||||||
apor_V : V ;
|
|
||||||
compor_V : V ;
|
|
||||||
contrapor_V : V ;
|
|
||||||
decompor_V : V ;
|
|
||||||
descompor_V : V ;
|
|
||||||
dispor_V : V ;
|
|
||||||
expor_V : V ;
|
|
||||||
impor_V : V ;
|
|
||||||
opor_V : V ;
|
|
||||||
propor_V : V ;
|
|
||||||
repor_V : V ;
|
|
||||||
supor_V : V ;
|
|
||||||
prazer_V : V ;
|
|
||||||
precaver_V : V ;
|
|
||||||
preferir_V : V ;
|
|
||||||
aderir_V : V ;
|
|
||||||
aferir_V : V ;
|
|
||||||
conferir_V : V ;
|
|
||||||
deferir_V : V ;
|
|
||||||
diferir_V : V ;
|
|
||||||
digerir_V : V ;
|
|
||||||
ferir_V : V ;
|
|
||||||
inferir_V : V ;
|
|
||||||
inserir_V : V ;
|
|
||||||
proferir_V : V ;
|
|
||||||
referir_V : V ;
|
|
||||||
repelir_V : V ;
|
|
||||||
repetir_V : V ;
|
|
||||||
sugerir_V : V ;
|
|
||||||
transferir_V : V ;
|
|
||||||
proibir_V : V ;
|
|
||||||
coibir_V : V ;
|
|
||||||
proteger_V : V ;
|
|
||||||
eleger_V : V ;
|
|
||||||
reger_V : V ;
|
|
||||||
prover_V : V ;
|
|
||||||
querer_V : V ;
|
|
||||||
reaver_V : V ;
|
|
||||||
recear_V : V ;
|
|
||||||
acarear_V : V ;
|
|
||||||
afear_V : V ;
|
|
||||||
altear_V : V ;
|
|
||||||
apear_V : V ;
|
|
||||||
arquear_V : V ;
|
|
||||||
asnear_V : V ;
|
|
||||||
costear_V : V ;
|
|
||||||
custear_V : V ;
|
|
||||||
enfrear_V : V ;
|
|
||||||
frear_V : V ;
|
|
||||||
olear_V : V ;
|
|
||||||
passear_V : V ;
|
|
||||||
pear_V : V ;
|
|
||||||
pentear_V : V ;
|
|
||||||
pratear_V : V ;
|
|
||||||
presentear_V : V ;
|
|
||||||
recrear_V : V ;
|
|
||||||
saborear_V : V ;
|
|
||||||
sofrear_V : V ;
|
|
||||||
redigir_V : V ;
|
|
||||||
afligir_V : V ;
|
|
||||||
agir_V : V ;
|
|
||||||
coligir_V : V ;
|
|
||||||
corrigir_V : V ;
|
|
||||||
erigir_V : V ;
|
|
||||||
exigir_V : V ;
|
|
||||||
fingir_V : V ;
|
|
||||||
frangir_V : V ;
|
|
||||||
infligir_V : V ;
|
|
||||||
transigir_V : V ;
|
|
||||||
refletir_V : V ;
|
|
||||||
fletir_V : V ;
|
|
||||||
defletir_V : V ;
|
|
||||||
infletir_V : V ;
|
|
||||||
remir_V : V ;
|
|
||||||
requerer_V : V ;
|
|
||||||
reunir_V : V ;
|
|
||||||
rir_V : V ;
|
|
||||||
sorrir_V : V ;
|
|
||||||
saber_V : V ;
|
|
||||||
dessaber_V : V ;
|
|
||||||
sair_V : V ;
|
|
||||||
cair_V : V ;
|
|
||||||
decair_V : V ;
|
|
||||||
descair_V : V ;
|
|
||||||
recair_V : V ;
|
|
||||||
trair_V : V ;
|
|
||||||
atrair_V : V ;
|
|
||||||
contrair_V : V ;
|
|
||||||
distrair_V : V ;
|
|
||||||
extrair_V : V ;
|
|
||||||
protrair_V : V ;
|
|
||||||
retrair_V : V ;
|
|
||||||
subtrair_V : V ;
|
|
||||||
saudar_V : V ;
|
|
||||||
seguir_V : V ;
|
|
||||||
conseguir_V : V ;
|
|
||||||
perseguir_V : V ;
|
|
||||||
prosseguir_V : V ;
|
|
||||||
sentir_V : V ;
|
|
||||||
assentir_V : V ;
|
|
||||||
consentir_V : V ;
|
|
||||||
pressentir_V : V ;
|
|
||||||
ressentir_V : V ;
|
|
||||||
mentir_V : V ;
|
|
||||||
desmentir_V : V ;
|
|
||||||
ser_V : V ;
|
|
||||||
servir_V : V ;
|
|
||||||
concernir_V : V ;
|
|
||||||
discernir_V : V ;
|
|
||||||
cerzir_V : V ;
|
|
||||||
despir_V : V ;
|
|
||||||
vestir_V : V ;
|
|
||||||
investir_V : V ;
|
|
||||||
revestir_V : V ;
|
|
||||||
ter_V : V ;
|
|
||||||
conter_V : V ;
|
|
||||||
deter_V : V ;
|
|
||||||
entreter_V : V ;
|
|
||||||
reter_V : V ;
|
|
||||||
suster_V : V ;
|
|
||||||
traduzir_V : V ;
|
|
||||||
abduzir_V : V ;
|
|
||||||
aduzir_V : V ;
|
|
||||||
conduzir_V : V ;
|
|
||||||
deduzir_V : V ;
|
|
||||||
induzir_V : V ;
|
|
||||||
introduzir_V : V ;
|
|
||||||
luzir_V : V ;
|
|
||||||
perluzir_V : V ;
|
|
||||||
produzir_V : V ;
|
|
||||||
reduzir_V : V ;
|
|
||||||
reluzir_V : V ;
|
|
||||||
seduzir_V : V ;
|
|
||||||
trazer_V : V ;
|
|
||||||
valer_V : V ;
|
|
||||||
desvaler_V : V ;
|
|
||||||
equivaler_V : V ;
|
|
||||||
vender_V : V ;
|
|
||||||
ver_V : V ;
|
|
||||||
antever_V : V ;
|
|
||||||
entrever_V : V ;
|
|
||||||
prever_V : V ;
|
|
||||||
rever_V : V ;
|
|
||||||
vir_V : V ;
|
|
||||||
advir_V : V ;
|
|
||||||
convir_V : V ;
|
|
||||||
desavir_V : V ;
|
|
||||||
intervir_V : V ;
|
|
||||||
porvir_V : V ;
|
|
||||||
sobrevir_V : V ;
|
|
||||||
|
|
||||||
} ;
|
|
||||||
@@ -1,9 +1,553 @@
|
|||||||
--# -path=.:../romance:../abstract:../common:../prelude
|
--# -path=.:../romance:../common:../abstract:../prelude
|
||||||
|
|
||||||
concrete IrregPor of IrregPorAbs = CatPor **
|
concrete IrregPor of IrregPorAbs = CatPor **
|
||||||
open ParadigmsPor, BeschPor in {
|
open ParadigmsPor, BeschPor in {
|
||||||
|
|
||||||
flags optimize=values ;
|
flags optimize=noexpand ;
|
||||||
coding=utf8 ;
|
coding=utf8 ;
|
||||||
|
|
||||||
}
|
-- machine-generated file: do not edit directly! see
|
||||||
|
-- https://gitlab.com/odanoburu/gf-pt
|
||||||
|
|
||||||
|
-- look up your verb here. if you don't find it, see if
|
||||||
|
-- if you can find out what is its paradigm and then add it!
|
||||||
|
|
||||||
|
lin acontecer_V = mkV (acontecer_Besch "acontecer") ;
|
||||||
|
lin conhecer_V = mkV (acontecer_Besch "conhecer") ;
|
||||||
|
lin coalescer_V = mkV (acontecer_Besch "coalescer") ;
|
||||||
|
lin comparecer_V = mkV (acontecer_Besch "comparecer") ;
|
||||||
|
lin compadecer_V = mkV (acontecer_Besch "compadecer") ;
|
||||||
|
lin contorcer_V = mkV (acontecer_Besch "contorcer") ;
|
||||||
|
lin convalescer_V = mkV (acontecer_Besch "convalescer") ;
|
||||||
|
lin convencer_V = mkV (acontecer_Besch "convencer") ;
|
||||||
|
lin acudir_V = mkV (acudir_Besch "acudir") ;
|
||||||
|
lin bulir_V = mkV (acudir_Besch "bulir") ;
|
||||||
|
lin cuspir_V = mkV (acudir_Besch "cuspir") ;
|
||||||
|
lin sacudir_V = mkV (acudir_Besch "sacudir") ;
|
||||||
|
lin subir_V = mkV (acudir_Besch "subir") ;
|
||||||
|
lin sumir_V = mkV (acudir_Besch "sumir") ;
|
||||||
|
lin consumir_V = mkV (acudir_Besch "consumir") ;
|
||||||
|
lin adequar_V = mkV (adequar_Besch "adequar") ;
|
||||||
|
lin agredir_V = mkV (agredir_Besch "agredir") ;
|
||||||
|
lin denegrir_V = mkV (agredir_Besch "denegrir") ;
|
||||||
|
lin prevenir_V = mkV (agredir_Besch "prevenir") ;
|
||||||
|
lin progredir_V = mkV (agredir_Besch "progredir") ;
|
||||||
|
lin transgredir_V = mkV (agredir_Besch "transgredir") ;
|
||||||
|
lin anunciar_V = mkV (anunciar_Besch "anunciar") ;
|
||||||
|
lin abreviar_V = mkV (anunciar_Besch "abreviar") ;
|
||||||
|
lin acariciar_V = mkV (anunciar_Besch "acariciar") ;
|
||||||
|
lin afiar_V = mkV (anunciar_Besch "afiar") ;
|
||||||
|
lin aliviar_V = mkV (anunciar_Besch "aliviar") ;
|
||||||
|
lin apreciar_V = mkV (anunciar_Besch "apreciar") ;
|
||||||
|
lin assobiar_V = mkV (anunciar_Besch "assobiar") ;
|
||||||
|
lin avaliar_V = mkV (anunciar_Besch "avaliar") ;
|
||||||
|
lin avariar_V = mkV (anunciar_Besch "avariar") ;
|
||||||
|
lin criar_V = mkV (anunciar_Besch "criar") ;
|
||||||
|
lin denunciar_V = mkV (anunciar_Besch "denunciar") ;
|
||||||
|
lin desviar_V = mkV (anunciar_Besch "desviar") ;
|
||||||
|
lin enfiar_V = mkV (anunciar_Besch "enfiar") ;
|
||||||
|
lin enviar_V = mkV (anunciar_Besch "enviar") ;
|
||||||
|
lin iniciar_V = mkV (anunciar_Besch "iniciar") ;
|
||||||
|
lin principiar_V = mkV (anunciar_Besch "principiar") ;
|
||||||
|
lin pronunciar_V = mkV (anunciar_Besch "pronunciar") ;
|
||||||
|
lin renunciar_V = mkV (anunciar_Besch "renunciar") ;
|
||||||
|
lin assediar_V = mkV (anunciar_Besch "assediar") ;
|
||||||
|
lin aprazer_V = mkV (aprazer_Besch "aprazer") ;
|
||||||
|
lin desprazer_V = mkV (aprazer_Besch "desprazer") ;
|
||||||
|
lin aquecer_V = mkV (aquecer_Besch "aquecer") ;
|
||||||
|
lin agradecer_V = mkV (aquecer_Besch "agradecer") ;
|
||||||
|
lin amarelecer_V = mkV (aquecer_Besch "amarelecer") ;
|
||||||
|
lin amolecer_V = mkV (aquecer_Besch "amolecer") ;
|
||||||
|
lin arrefecer_V = mkV (aquecer_Besch "arrefecer") ;
|
||||||
|
lin empecer_V = mkV (aquecer_Besch "empecer") ;
|
||||||
|
lin entretecer_V = mkV (aquecer_Besch "entretecer") ;
|
||||||
|
lin entristecer_V = mkV (aquecer_Besch "entristecer") ;
|
||||||
|
lin escurecer_V = mkV (aquecer_Besch "escurecer") ;
|
||||||
|
lin estremecer_V = mkV (aquecer_Besch "estremecer") ;
|
||||||
|
lin favorecer_V = mkV (aquecer_Besch "favorecer") ;
|
||||||
|
lin merecer_V = mkV (aquecer_Besch "merecer") ;
|
||||||
|
lin oferecer_V = mkV (aquecer_Besch "oferecer") ;
|
||||||
|
lin parecer_V = mkV (aquecer_Besch "parecer") ;
|
||||||
|
lin perecer_V = mkV (aquecer_Besch "perecer") ;
|
||||||
|
lin reverdecer_V = mkV (aquecer_Besch "reverdecer") ;
|
||||||
|
lin tecer_V = mkV (aquecer_Besch "tecer") ;
|
||||||
|
lin esquecer_V = mkV (aquecer_Besch "esquecer") ;
|
||||||
|
lin escarnecer_V = mkV (aquecer_Besch "escarnecer") ;
|
||||||
|
lin escurecer_V = mkV (aquecer_Besch "escurecer") ;
|
||||||
|
lin arguir_V = mkV (arguir_Besch "arguir") ;
|
||||||
|
lin redarguir_V = mkV (arguir_Besch "redarguir") ;
|
||||||
|
lin averiguar_V = mkV (averiguar_Besch "averiguar") ;
|
||||||
|
lin aguar_V = mkV (averiguar_Besch "aguar") ;
|
||||||
|
lin apaniguar_V = mkV (averiguar_Besch "apaniguar") ;
|
||||||
|
lin apaziguar_V = mkV (averiguar_Besch "apaziguar") ;
|
||||||
|
lin apropinquar_V = mkV (averiguar_Besch "apropinquar") ;
|
||||||
|
lin deliquar_V = mkV (averiguar_Besch "deliquar") ;
|
||||||
|
lin desaguar_V = mkV (averiguar_Besch "desaguar") ;
|
||||||
|
lin enxaguar_V = mkV (averiguar_Besch "enxaguar") ;
|
||||||
|
lin obliquar_V = mkV (averiguar_Besch "obliquar") ;
|
||||||
|
lin caber_V = mkV (caber_Besch "caber") ;
|
||||||
|
lin chegar_V = mkV (chegar_Besch "chegar") ;
|
||||||
|
lin rogar_V = mkV (chegar_Besch "rogar") ;
|
||||||
|
lin jogar_V = mkV (chegar_Besch "jogar") ;
|
||||||
|
lin julgar_V = mkV (chegar_Besch "julgar") ;
|
||||||
|
lin interrogar_V = mkV (chegar_Besch "interrogar") ;
|
||||||
|
lin intrigar_V = mkV (chegar_Besch "intrigar") ;
|
||||||
|
lin investigar_V = mkV (chegar_Besch "investigar") ;
|
||||||
|
lin enxergar_V = mkV (chegar_Besch "enxergar") ;
|
||||||
|
lin enrugar_V = mkV (chegar_Besch "enrugar") ;
|
||||||
|
lin escorregar_V = mkV (chegar_Besch "escorregar") ;
|
||||||
|
lin esmagar_V = mkV (chegar_Besch "esmagar") ;
|
||||||
|
lin esfregar_V = mkV (chegar_Besch "esfregar") ;
|
||||||
|
lin irrigar_V = mkV (chegar_Besch "irrigar") ;
|
||||||
|
lin interligar_V = mkV (chegar_Besch "interligar") ;
|
||||||
|
lin instigar_V = mkV (chegar_Besch "instigar") ;
|
||||||
|
lin largar_V = mkV (chegar_Besch "largar") ;
|
||||||
|
lin legalizar_V = mkV (chegar_Besch "legalizar") ;
|
||||||
|
lin ligar_V = mkV (chegar_Besch "ligar") ;
|
||||||
|
lin litigar_V = mkV (chegar_Besch "litigar") ;
|
||||||
|
lin madrugar_V = mkV (chegar_Besch "madrugar") ;
|
||||||
|
lin esfregar_V = mkV (chegar_Besch "esfregar") ;
|
||||||
|
lin apagar_V = mkV (chegar_Besch "apagar") ;
|
||||||
|
lin tragar_V = mkV (chegar_Besch "tragar") ;
|
||||||
|
lin chover_V = mkV (chover_Besch "chover") ;
|
||||||
|
lin começar_V = mkV (começar_Besch "começar") ;
|
||||||
|
lin caçar_V = mkV (começar_Besch "caçar") ;
|
||||||
|
lin coçar_V = mkV (começar_Besch "coçar") ;
|
||||||
|
lin comerciar_V = mkV (comerciar_Besch "comerciar") ;
|
||||||
|
lin agenciar_V = mkV (comerciar_Besch "agenciar") ;
|
||||||
|
lin licenciar_V = mkV (comerciar_Besch "licenciar") ;
|
||||||
|
lin negociar_V = mkV (comerciar_Besch "negociar") ;
|
||||||
|
lin obsequiar_V = mkV (comerciar_Besch "obsequiar") ;
|
||||||
|
lin premiar_V = mkV (comerciar_Besch "premiar") ;
|
||||||
|
lin providenciar_V = mkV (comerciar_Besch "providenciar") ;
|
||||||
|
lin sentenciar_V = mkV (comerciar_Besch "sentenciar") ;
|
||||||
|
lin silenciar_V = mkV (comerciar_Besch "silenciar") ;
|
||||||
|
lin comprar_V = mkV (comprar_Besch "comprar") ;
|
||||||
|
lin pintar_V = mkV (comprar_Besch "pintar") ;
|
||||||
|
lin perguntar_V = mkV (comprar_Besch "perguntar") ;
|
||||||
|
lin quebrar_V = mkV (comprar_Besch "quebrar") ;
|
||||||
|
lin fechar_V = mkV (comprar_Besch "fechar") ;
|
||||||
|
lin contar_V = mkV (comprar_Besch "contar") ;
|
||||||
|
lin cortar_V = mkV (comprar_Besch "cortar") ;
|
||||||
|
lin compilar_V = mkV (comprar_Besch "compilar") ;
|
||||||
|
lin lutar_V = mkV (comprar_Besch "lutar") ;
|
||||||
|
lin encontrar_V = mkV (comprar_Besch "encontrar") ;
|
||||||
|
lin encomendar_V = mkV (comprar_Besch "encomendar") ;
|
||||||
|
lin encalacrar_V = mkV (comprar_Besch "encalacrar") ;
|
||||||
|
lin encaminhar_V = mkV (comprar_Besch "encaminhar") ;
|
||||||
|
lin estampar_V = mkV (comprar_Besch "estampar") ;
|
||||||
|
lin encanar_V = mkV (comprar_Besch "encanar") ;
|
||||||
|
lin encampar_V = mkV (comprar_Besch "encampar") ;
|
||||||
|
lin encantar_V = mkV (comprar_Besch "encantar") ;
|
||||||
|
lin encapotar_V = mkV (comprar_Besch "encapotar") ;
|
||||||
|
lin encarar_V = mkV (comprar_Besch "encarar") ;
|
||||||
|
lin encarcerar_V = mkV (comprar_Besch "encarcerar") ;
|
||||||
|
lin matar_V = mkV (comprar_Besch "matar") ;
|
||||||
|
lin menosprezar_V = mkV (comprar_Besch "menosprezar") ;
|
||||||
|
lin marchar_V = mkV (comprar_Besch "marchar") ;
|
||||||
|
lin maravilhar_V = mkV (comprar_Besch "maravilhar") ;
|
||||||
|
lin marombar_V = mkV (comprar_Besch "marombar") ;
|
||||||
|
lin respirar_V = mkV (comprar_Besch "respirar") ;
|
||||||
|
lin martirizar_V = mkV (comprar_Besch "martirizar") ;
|
||||||
|
lin martelar_V = mkV (comprar_Besch "martelar") ;
|
||||||
|
lin mascarar_V = mkV (comprar_Besch "mascarar") ;
|
||||||
|
lin masturbar_V = mkV (comprar_Besch "masturbar") ;
|
||||||
|
lin materializar_V = mkV (comprar_Besch "materializar") ;
|
||||||
|
lin matizar_V = mkV (comprar_Besch "matizar") ;
|
||||||
|
lin mazelar_V = mkV (comprar_Besch "mazelar") ;
|
||||||
|
lin mecanizar_V = mkV (comprar_Besch "mecanizar") ;
|
||||||
|
lin mediocrizar_V = mkV (comprar_Besch "mediocrizar") ;
|
||||||
|
lin meditar_V = mkV (comprar_Besch "meditar") ;
|
||||||
|
lin melar_V = mkV (comprar_Besch "melar") ;
|
||||||
|
lin melhorar_V = mkV (comprar_Besch "melhorar") ;
|
||||||
|
lin memorizar_V = mkV (comprar_Besch "memorizar") ;
|
||||||
|
lin mencionar_V = mkV (comprar_Besch "mencionar") ;
|
||||||
|
lin mensurar_V = mkV (comprar_Besch "mensurar") ;
|
||||||
|
lin assoprar_V = mkV (comprar_Besch "assoprar") ;
|
||||||
|
lin metralhar_V = mkV (comprar_Besch "metralhar") ;
|
||||||
|
lin migrar_V = mkV (comprar_Besch "migrar") ;
|
||||||
|
lin militar_V = mkV (comprar_Besch "militar") ;
|
||||||
|
lin militarizar_V = mkV (comprar_Besch "militarizar") ;
|
||||||
|
lin mimar_V = mkV (comprar_Besch "mimar") ;
|
||||||
|
lin mimetizar_V = mkV (comprar_Besch "mimetizar") ;
|
||||||
|
lin mirar_V = mkV (comprar_Besch "mirar") ;
|
||||||
|
lin misturar_V = mkV (comprar_Besch "misturar") ;
|
||||||
|
lin mobilizar_V = mkV (comprar_Besch "mobilizar") ;
|
||||||
|
lin modelar_V = mkV (comprar_Besch "modelar") ;
|
||||||
|
lin modernizar_V = mkV (comprar_Besch "modernizar") ;
|
||||||
|
lin modular_V = mkV (comprar_Besch "modular") ;
|
||||||
|
lin monopolizar_V = mkV (comprar_Besch "monopolizar") ;
|
||||||
|
lin moralizar_V = mkV (comprar_Besch "moralizar") ;
|
||||||
|
lin mostrar_V = mkV (comprar_Besch "mostrar") ;
|
||||||
|
lin motivar_V = mkV (comprar_Besch "motivar") ;
|
||||||
|
lin motorizar_V = mkV (comprar_Besch "motorizar") ;
|
||||||
|
lin movimentar_V = mkV (comprar_Besch "movimentar") ;
|
||||||
|
lin multar_V = mkV (comprar_Besch "multar") ;
|
||||||
|
lin mundanizar_V = mkV (comprar_Besch "mundanizar") ;
|
||||||
|
lin mutilar_V = mkV (comprar_Besch "mutilar") ;
|
||||||
|
lin gostar_V = mkV (comprar_Besch "gostar") ;
|
||||||
|
lin gabar_V = mkV (comprar_Besch "gabar") ;
|
||||||
|
lin galopar_V = mkV (comprar_Besch "galopar") ;
|
||||||
|
lin gangrenar_V = mkV (comprar_Besch "gangrenar") ;
|
||||||
|
lin ganhar_V = mkV (comprar_Besch "ganhar") ;
|
||||||
|
lin garimpar_V = mkV (comprar_Besch "garimpar") ;
|
||||||
|
lin gastar_V = mkV (comprar_Besch "gastar") ;
|
||||||
|
lin generalizar_V = mkV (comprar_Besch "generalizar") ;
|
||||||
|
lin gerar_V = mkV (comprar_Besch "gerar") ;
|
||||||
|
lin girar_V = mkV (comprar_Besch "girar") ;
|
||||||
|
lin gravar_V = mkV (comprar_Besch "gravar") ;
|
||||||
|
lin grelhar_V = mkV (comprar_Besch "grelhar") ;
|
||||||
|
lin gritar_V = mkV (comprar_Besch "gritar") ;
|
||||||
|
lin guardar_V = mkV (comprar_Besch "guardar") ;
|
||||||
|
lin guerrilhar_V = mkV (comprar_Besch "guerrilhar") ;
|
||||||
|
lin guinchar_V = mkV (comprar_Besch "guinchar") ;
|
||||||
|
lin guisar_V = mkV (comprar_Besch "guisar") ;
|
||||||
|
lin herdar_V = mkV (comprar_Besch "herdar") ;
|
||||||
|
lin hibernar_V = mkV (comprar_Besch "hibernar") ;
|
||||||
|
lin hipnotizar_V = mkV (comprar_Besch "hipnotizar") ;
|
||||||
|
lin honrar_V = mkV (comprar_Besch "honrar") ;
|
||||||
|
lin horripular_V = mkV (comprar_Besch "horripular") ;
|
||||||
|
lin hospedar_V = mkV (comprar_Besch "hospedar") ;
|
||||||
|
lin humanizar_V = mkV (comprar_Besch "humanizar") ;
|
||||||
|
lin humilhar_V = mkV (comprar_Besch "humilhar") ;
|
||||||
|
lin humorizar_V = mkV (comprar_Besch "humorizar") ;
|
||||||
|
lin idealizar_V = mkV (comprar_Besch "idealizar") ;
|
||||||
|
lin idolatrar_V = mkV (comprar_Besch "idolatrar") ;
|
||||||
|
lin implementar_V = mkV (comprar_Besch "implementar") ;
|
||||||
|
lin implantar_V = mkV (comprar_Besch "implantar") ;
|
||||||
|
lin incrementar_V = mkV (comprar_Besch "incrementar") ;
|
||||||
|
lin indignar_V = mkV (comprar_Besch "indignar") ;
|
||||||
|
lin informar_V = mkV (comprar_Besch "informar") ;
|
||||||
|
lin escutar_V = mkV (comprar_Besch "escutar") ;
|
||||||
|
lin amar_V = mkV (comprar_Besch "amar") ;
|
||||||
|
lin tirar_V = mkV (comprar_Besch "tirar") ;
|
||||||
|
lin empurrar_V = mkV (comprar_Besch "empurrar") ;
|
||||||
|
lin falar_V = mkV (comprar_Besch "falar") ;
|
||||||
|
lin separar_V = mkV (comprar_Besch "separar") ;
|
||||||
|
lin apertar_V = mkV (comprar_Besch "apertar") ;
|
||||||
|
lin chupar_V = mkV (comprar_Besch "chupar") ;
|
||||||
|
lin ensinar_V = mkV (comprar_Besch "ensinar") ;
|
||||||
|
lin atar_V = mkV (comprar_Besch "atar") ;
|
||||||
|
lin esperar_V = mkV (comprar_Besch "esperar") ;
|
||||||
|
lin lavar_V = mkV (comprar_Besch "lavar") ;
|
||||||
|
lin somar_V = mkV (comprar_Besch "somar") ;
|
||||||
|
lin sensualizar_V = mkV (comprar_Besch "sensualizar") ;
|
||||||
|
lin saltar_V = mkV (comprar_Besch "saltar") ;
|
||||||
|
lin congelar_V = mkV (comprar_Besch "congelar") ;
|
||||||
|
lin virar_V = mkV (comprar_Besch "virar") ;
|
||||||
|
lin escavar_V = mkV (comprar_Besch "escavar") ;
|
||||||
|
lin costurar_V = mkV (comprar_Besch "costurar") ;
|
||||||
|
lin cantar_V = mkV (comprar_Besch "cantar") ;
|
||||||
|
lin sentar_V = mkV (comprar_Besch "sentar") ;
|
||||||
|
lin parar_V = mkV (comprar_Besch "parar") ;
|
||||||
|
lin nadar_V = mkV (comprar_Besch "nadar") ;
|
||||||
|
lin pensar_V = mkV (comprar_Besch "pensar") ;
|
||||||
|
lin vomitar_V = mkV (comprar_Besch "vomitar") ;
|
||||||
|
lin caminhar_V = mkV (comprar_Besch "caminhar") ;
|
||||||
|
lin crer_V = mkV (crer_Besch "crer") ;
|
||||||
|
lin descrer_V = mkV (crer_Besch "descrer") ;
|
||||||
|
lin dar_V = mkV (dar_Besch "dar") ;
|
||||||
|
lin destruir_V = mkV (destruir_Besch "destruir") ;
|
||||||
|
lin construir_V = mkV (destruir_Besch "construir") ;
|
||||||
|
lin reconstruir_V = mkV (destruir_Besch "reconstruir") ;
|
||||||
|
lin distribuir_V = mkV (distribuir_Besch "distribuir") ;
|
||||||
|
lin imbuir_V = mkV (distribuir_Besch "imbuir") ;
|
||||||
|
lin afluir_V = mkV (distribuir_Besch "afluir") ;
|
||||||
|
lin confluir_V = mkV (distribuir_Besch "confluir") ;
|
||||||
|
lin fluir_V = mkV (distribuir_Besch "fluir") ;
|
||||||
|
lin influir_V = mkV (distribuir_Besch "influir") ;
|
||||||
|
lin refluir_V = mkV (distribuir_Besch "refluir") ;
|
||||||
|
lin atribuir_V = mkV (distribuir_Besch "atribuir") ;
|
||||||
|
lin contribuir_V = mkV (distribuir_Besch "contribuir") ;
|
||||||
|
lin retribuir_V = mkV (distribuir_Besch "retribuir") ;
|
||||||
|
lin instituir_V = mkV (distribuir_Besch "instituir") ;
|
||||||
|
lin restituir_V = mkV (distribuir_Besch "restituir") ;
|
||||||
|
lin substituir_V = mkV (distribuir_Besch "substituir") ;
|
||||||
|
lin divergir_V = mkV (divergir_Besch "divergir") ;
|
||||||
|
lin aspergir_V = mkV (divergir_Besch "aspergir") ;
|
||||||
|
lin convergir_V = mkV (divergir_Besch "convergir") ;
|
||||||
|
lin dizer_V = mkV (dizer_Besch "dizer") ;
|
||||||
|
lin bendizer_V = mkV (dizer_Besch "bendizer") ;
|
||||||
|
lin condizer_V = mkV (dizer_Besch "condizer") ;
|
||||||
|
lin contradizer_V = mkV (dizer_Besch "contradizer") ;
|
||||||
|
lin desdizer_V = mkV (dizer_Besch "desdizer") ;
|
||||||
|
lin maldizer_V = mkV (dizer_Besch "maldizer") ;
|
||||||
|
lin predizer_V = mkV (dizer_Besch "predizer") ;
|
||||||
|
lin doer_V = mkV (doer_Besch "doer") ;
|
||||||
|
lin dormir_V = mkV (dormir_Besch "dormir") ;
|
||||||
|
lin cobrir_V = mkV (dormir_Besch "cobrir") ;
|
||||||
|
lin descobrir_V = mkV (dormir_Besch "descobrir") ;
|
||||||
|
lin encobrir_V = mkV (dormir_Besch "encobrir") ;
|
||||||
|
lin recobrir_V = mkV (dormir_Besch "recobrir") ;
|
||||||
|
lin explodir_V = mkV (dormir_Besch "explodir") ;
|
||||||
|
lin engolir_V = mkV (dormir_Besch "engolir") ;
|
||||||
|
lin erguer_V = mkV (erguer_Besch "erguer") ;
|
||||||
|
lin soerguer_V = mkV (erguer_Besch "soerguer") ;
|
||||||
|
lin estar_V = mkV (estar_Besch "estar") ;
|
||||||
|
lin extinguir_V = mkV (extinguir_Besch "extinguir") ;
|
||||||
|
lin falir_V = mkV (falir_Besch "falir") ;
|
||||||
|
lin aguerrir_V = mkV (falir_Besch "aguerrir") ;
|
||||||
|
lin combalir_V = mkV (falir_Besch "combalir") ;
|
||||||
|
lin desflorir_V = mkV (falir_Besch "desflorir") ;
|
||||||
|
lin florir_V = mkV (falir_Besch "florir") ;
|
||||||
|
lin reflorir_V = mkV (falir_Besch "reflorir") ;
|
||||||
|
lin renhir_V = mkV (falir_Besch "renhir") ;
|
||||||
|
lin parir_V = mkV (falir_Besch "parir") ;
|
||||||
|
lin fazer_V = mkV (fazer_Besch "fazer") ;
|
||||||
|
lin afazer_V = mkV (fazer_Besch "afazer") ;
|
||||||
|
lin contrafazer_V = mkV (fazer_Besch "contrafazer") ;
|
||||||
|
lin desfazer_V = mkV (fazer_Besch "desfazer") ;
|
||||||
|
lin liquefazer_V = mkV (fazer_Besch "liquefazer") ;
|
||||||
|
lin perfazer_V = mkV (fazer_Besch "perfazer") ;
|
||||||
|
lin rarefazer_V = mkV (fazer_Besch "rarefazer") ;
|
||||||
|
lin refazer_V = mkV (fazer_Besch "refazer") ;
|
||||||
|
lin satisfazer_V = mkV (fazer_Besch "satisfazer") ;
|
||||||
|
lin ficar_V = mkV (ficar_Besch "ficar") ;
|
||||||
|
lin buscar_V = mkV (ficar_Besch "buscar") ;
|
||||||
|
lin frigir_V = mkV (frigir_Besch "frigir") ;
|
||||||
|
lin fugir_V = mkV (fugir_Besch "fugir") ;
|
||||||
|
lin garantir_V = mkV (garantir_Besch "garantir") ;
|
||||||
|
lin partir_V = mkV (garantir_Besch "partir") ;
|
||||||
|
lin haver_V = mkV (haver_Besch "haver") ;
|
||||||
|
lin abolir_V = mkV (imergir_Besch "abolir") ;
|
||||||
|
lin banir_V = mkV (imergir_Besch "banir") ;
|
||||||
|
lin brandir_V = mkV (imergir_Besch "brandir") ;
|
||||||
|
lin brunir_V = mkV (imergir_Besch "brunir") ;
|
||||||
|
lin emergir_V = mkV (imergir_Besch "emergir") ;
|
||||||
|
lin empedernir_V = mkV (imergir_Besch "empedernir") ;
|
||||||
|
lin exaurir_V = mkV (imergir_Besch "exaurir") ;
|
||||||
|
lin extorquir_V = mkV (imergir_Besch "extorquir") ;
|
||||||
|
lin fremir_V = mkV (imergir_Besch "fremir") ;
|
||||||
|
lin fulgir_V = mkV (imergir_Besch "fulgir") ;
|
||||||
|
lin jungir_V = mkV (imergir_Besch "jungir") ;
|
||||||
|
lin retorquir_V = mkV (imergir_Besch "retorquir") ;
|
||||||
|
lin submergir_V = mkV (imergir_Besch "submergir") ;
|
||||||
|
lin ungir_V = mkV (imergir_Besch "ungir") ;
|
||||||
|
lin colorir_V = mkV (imergir_Besch "colorir") ;
|
||||||
|
lin demolir_V = mkV (imergir_Besch "demolir") ;
|
||||||
|
lin ir_V = mkV (ir_Besch "ir") ;
|
||||||
|
lin jazer_V = mkV (jazer_Besch "jazer") ;
|
||||||
|
lin ler_V = mkV (ler_Besch "ler") ;
|
||||||
|
lin reler_V = mkV (ler_Besch "reler") ;
|
||||||
|
lin tresler_V = mkV (ler_Besch "tresler") ;
|
||||||
|
lin moer_V = mkV (moer_Besch "moer") ;
|
||||||
|
lin roer_V = mkV (moer_Besch "roer") ;
|
||||||
|
lin neviscar_V = mkV (neviscar_Besch "neviscar") ;
|
||||||
|
lin odiar_V = mkV (odiar_Besch "odiar") ;
|
||||||
|
lin ansiar_V = mkV (odiar_Besch "ansiar") ;
|
||||||
|
lin incendiar_V = mkV (odiar_Besch "incendiar") ;
|
||||||
|
lin mediar_V = mkV (odiar_Besch "mediar") ;
|
||||||
|
lin remediar_V = mkV (odiar_Besch "remediar") ;
|
||||||
|
lin ouvir_V = mkV (ouvir_Besch "ouvir") ;
|
||||||
|
lin pedir_V = mkV (pedir_Besch "pedir") ;
|
||||||
|
lin despedir_V = mkV (pedir_Besch "despedir") ;
|
||||||
|
lin expedir_V = mkV (pedir_Besch "expedir") ;
|
||||||
|
lin reexpedir_V = mkV (pedir_Besch "reexpedir") ;
|
||||||
|
lin impedir_V = mkV (pedir_Besch "impedir") ;
|
||||||
|
lin desimpedir_V = mkV (pedir_Besch "desimpedir") ;
|
||||||
|
lin medir_V = mkV (pedir_Besch "medir") ;
|
||||||
|
lin perder_V = mkV (perder_Besch "perder") ;
|
||||||
|
lin perdoar_V = mkV (perdoar_Besch "perdoar") ;
|
||||||
|
lin abalroar_V = mkV (perdoar_Besch "abalroar") ;
|
||||||
|
lin abençoar_V = mkV (perdoar_Besch "abençoar") ;
|
||||||
|
lin amaldiçoar_V = mkV (perdoar_Besch "amaldiçoar") ;
|
||||||
|
lin aperfeiçoar_V = mkV (perdoar_Besch "aperfeiçoar") ;
|
||||||
|
lin apregoar_V = mkV (perdoar_Besch "apregoar") ;
|
||||||
|
lin coar_V = mkV (perdoar_Besch "coar") ;
|
||||||
|
lin doar_V = mkV (perdoar_Besch "doar") ;
|
||||||
|
lin entoar_V = mkV (perdoar_Besch "entoar") ;
|
||||||
|
lin esboroar_V = mkV (perdoar_Besch "esboroar") ;
|
||||||
|
lin povoar_V = mkV (perdoar_Besch "povoar") ;
|
||||||
|
lin soar_V = mkV (perdoar_Besch "soar") ;
|
||||||
|
lin toar_V = mkV (perdoar_Besch "toar") ;
|
||||||
|
lin voar_V = mkV (perdoar_Besch "voar") ;
|
||||||
|
lin poder_V = mkV (poder_Besch "poder") ;
|
||||||
|
lin polir_V = mkV (polir_Besch "polir") ;
|
||||||
|
lin pôr_V = mkV (pôr_Besch "pôr") ;
|
||||||
|
lin apor_V = mkV (pôr_Besch "apor") ;
|
||||||
|
lin compor_V = mkV (pôr_Besch "compor") ;
|
||||||
|
lin contrapor_V = mkV (pôr_Besch "contrapor") ;
|
||||||
|
lin decompor_V = mkV (pôr_Besch "decompor") ;
|
||||||
|
lin descompor_V = mkV (pôr_Besch "descompor") ;
|
||||||
|
lin dispor_V = mkV (pôr_Besch "dispor") ;
|
||||||
|
lin expor_V = mkV (pôr_Besch "expor") ;
|
||||||
|
lin impor_V = mkV (pôr_Besch "impor") ;
|
||||||
|
lin opor_V = mkV (pôr_Besch "opor") ;
|
||||||
|
lin propor_V = mkV (pôr_Besch "propor") ;
|
||||||
|
lin repor_V = mkV (pôr_Besch "repor") ;
|
||||||
|
lin supor_V = mkV (pôr_Besch "supor") ;
|
||||||
|
lin prazer_V = mkV (prazer_Besch "prazer") ;
|
||||||
|
lin precaver_V = mkV (precaver_Besch "precaver") ;
|
||||||
|
lin preferir_V = mkV (preferir_Besch "preferir") ;
|
||||||
|
lin aderir_V = mkV (preferir_Besch "aderir") ;
|
||||||
|
lin aferir_V = mkV (preferir_Besch "aferir") ;
|
||||||
|
lin conferir_V = mkV (preferir_Besch "conferir") ;
|
||||||
|
lin deferir_V = mkV (preferir_Besch "deferir") ;
|
||||||
|
lin diferir_V = mkV (preferir_Besch "diferir") ;
|
||||||
|
lin digerir_V = mkV (preferir_Besch "digerir") ;
|
||||||
|
lin ferir_V = mkV (preferir_Besch "ferir") ;
|
||||||
|
lin inferir_V = mkV (preferir_Besch "inferir") ;
|
||||||
|
lin inserir_V = mkV (preferir_Besch "inserir") ;
|
||||||
|
lin proferir_V = mkV (preferir_Besch "proferir") ;
|
||||||
|
lin referir_V = mkV (preferir_Besch "referir") ;
|
||||||
|
lin repelir_V = mkV (preferir_Besch "repelir") ;
|
||||||
|
lin repetir_V = mkV (preferir_Besch "repetir") ;
|
||||||
|
lin sugerir_V = mkV (preferir_Besch "sugerir") ;
|
||||||
|
lin transferir_V = mkV (preferir_Besch "transferir") ;
|
||||||
|
lin proibir_V = mkV (proibir_Besch "proibir") ;
|
||||||
|
lin coibir_V = mkV (proibir_Besch "coibir") ;
|
||||||
|
lin proteger_V = mkV (proteger_Besch "proteger") ;
|
||||||
|
lin eleger_V = mkV (proteger_Besch "eleger") ;
|
||||||
|
lin reger_V = mkV (proteger_Besch "reger") ;
|
||||||
|
lin prover_V = mkV (prover_Besch "prover") ;
|
||||||
|
lin querer_V = mkV (querer_Besch "querer") ;
|
||||||
|
lin reaver_V = mkV (reaver_Besch "reaver") ;
|
||||||
|
lin recear_V = mkV (recear_Besch "recear") ;
|
||||||
|
lin acarear_V = mkV (recear_Besch "acarear") ;
|
||||||
|
lin afear_V = mkV (recear_Besch "afear") ;
|
||||||
|
lin altear_V = mkV (recear_Besch "altear") ;
|
||||||
|
lin apear_V = mkV (recear_Besch "apear") ;
|
||||||
|
lin arquear_V = mkV (recear_Besch "arquear") ;
|
||||||
|
lin asnear_V = mkV (recear_Besch "asnear") ;
|
||||||
|
lin costear_V = mkV (recear_Besch "costear") ;
|
||||||
|
lin custear_V = mkV (recear_Besch "custear") ;
|
||||||
|
lin enfrear_V = mkV (recear_Besch "enfrear") ;
|
||||||
|
lin frear_V = mkV (recear_Besch "frear") ;
|
||||||
|
lin olear_V = mkV (recear_Besch "olear") ;
|
||||||
|
lin passear_V = mkV (recear_Besch "passear") ;
|
||||||
|
lin pear_V = mkV (recear_Besch "pear") ;
|
||||||
|
lin pentear_V = mkV (recear_Besch "pentear") ;
|
||||||
|
lin pratear_V = mkV (recear_Besch "pratear") ;
|
||||||
|
lin presentear_V = mkV (recear_Besch "presentear") ;
|
||||||
|
lin recrear_V = mkV (recear_Besch "recrear") ;
|
||||||
|
lin saborear_V = mkV (recear_Besch "saborear") ;
|
||||||
|
lin sofrear_V = mkV (recear_Besch "sofrear") ;
|
||||||
|
lin esfaquear_V = mkV (recear_Besch "esfaquear") ;
|
||||||
|
lin escassear_V = mkV (recear_Besch "escassear") ;
|
||||||
|
lin escarcear_V = mkV (recear_Besch "escarcear") ;
|
||||||
|
lin escamotear_V = mkV (recear_Besch "escamotear") ;
|
||||||
|
lin esfoguear_V = mkV (recear_Besch "esfoguear") ;
|
||||||
|
lin estear_V = mkV (recear_Besch "estear") ;
|
||||||
|
lin esbofetear_V = mkV (recear_Besch "esbofetear") ;
|
||||||
|
lin espernear_V = mkV (recear_Besch "espernear") ;
|
||||||
|
lin redigir_V = mkV (redigir_Besch "redigir") ;
|
||||||
|
lin afligir_V = mkV (redigir_Besch "afligir") ;
|
||||||
|
lin agir_V = mkV (redigir_Besch "agir") ;
|
||||||
|
lin coligir_V = mkV (redigir_Besch "coligir") ;
|
||||||
|
lin corrigir_V = mkV (redigir_Besch "corrigir") ;
|
||||||
|
lin erigir_V = mkV (redigir_Besch "erigir") ;
|
||||||
|
lin exigir_V = mkV (redigir_Besch "exigir") ;
|
||||||
|
lin fingir_V = mkV (redigir_Besch "fingir") ;
|
||||||
|
lin frangir_V = mkV (redigir_Besch "frangir") ;
|
||||||
|
lin infligir_V = mkV (redigir_Besch "infligir") ;
|
||||||
|
lin transigir_V = mkV (redigir_Besch "transigir") ;
|
||||||
|
lin refletir_V = mkV (refletir_Besch "refletir") ;
|
||||||
|
lin fletir_V = mkV (refletir_Besch "fletir") ;
|
||||||
|
lin defletir_V = mkV (refletir_Besch "defletir") ;
|
||||||
|
lin infletir_V = mkV (refletir_Besch "infletir") ;
|
||||||
|
lin remir_V = mkV (remir_Besch "remir") ;
|
||||||
|
lin requerer_V = mkV (requerer_Besch "requerer") ;
|
||||||
|
lin reunir_V = mkV (reunir_Besch "reunir") ;
|
||||||
|
lin rir_V = mkV (rir_Besch "rir") ;
|
||||||
|
lin sorrir_V = mkV (rir_Besch "sorrir") ;
|
||||||
|
lin saber_V = mkV (saber_Besch "saber") ;
|
||||||
|
lin dessaber_V = mkV (saber_Besch "dessaber") ;
|
||||||
|
lin sair_V = mkV (sair_Besch "sair") ;
|
||||||
|
lin cair_V = mkV (sair_Besch "cair") ;
|
||||||
|
lin decair_V = mkV (sair_Besch "decair") ;
|
||||||
|
lin descair_V = mkV (sair_Besch "descair") ;
|
||||||
|
lin recair_V = mkV (sair_Besch "recair") ;
|
||||||
|
lin trair_V = mkV (sair_Besch "trair") ;
|
||||||
|
lin atrair_V = mkV (sair_Besch "atrair") ;
|
||||||
|
lin contrair_V = mkV (sair_Besch "contrair") ;
|
||||||
|
lin distrair_V = mkV (sair_Besch "distrair") ;
|
||||||
|
lin extrair_V = mkV (sair_Besch "extrair") ;
|
||||||
|
lin protrair_V = mkV (sair_Besch "protrair") ;
|
||||||
|
lin retrair_V = mkV (sair_Besch "retrair") ;
|
||||||
|
lin subtrair_V = mkV (sair_Besch "subtrair") ;
|
||||||
|
lin saudar_V = mkV (saudar_Besch "saudar") ;
|
||||||
|
lin seguir_V = mkV (seguir_Besch "seguir") ;
|
||||||
|
lin conseguir_V = mkV (seguir_Besch "conseguir") ;
|
||||||
|
lin perseguir_V = mkV (seguir_Besch "perseguir") ;
|
||||||
|
lin prosseguir_V = mkV (seguir_Besch "prosseguir") ;
|
||||||
|
lin sentir_V = mkV (sentir_Besch "sentir") ;
|
||||||
|
lin assentir_V = mkV (sentir_Besch "assentir") ;
|
||||||
|
lin consentir_V = mkV (sentir_Besch "consentir") ;
|
||||||
|
lin pressentir_V = mkV (sentir_Besch "pressentir") ;
|
||||||
|
lin ressentir_V = mkV (sentir_Besch "ressentir") ;
|
||||||
|
lin mentir_V = mkV (sentir_Besch "mentir") ;
|
||||||
|
lin desmentir_V = mkV (sentir_Besch "desmentir") ;
|
||||||
|
lin ser_V = mkV (ser_Besch "ser") ;
|
||||||
|
lin servir_V = mkV (servir_Besch "servir") ;
|
||||||
|
lin concernir_V = mkV (servir_Besch "concernir") ;
|
||||||
|
lin discernir_V = mkV (servir_Besch "discernir") ;
|
||||||
|
lin cerzir_V = mkV (servir_Besch "cerzir") ;
|
||||||
|
lin despir_V = mkV (servir_Besch "despir") ;
|
||||||
|
lin vestir_V = mkV (servir_Besch "vestir") ;
|
||||||
|
lin investir_V = mkV (servir_Besch "investir") ;
|
||||||
|
lin revestir_V = mkV (servir_Besch "revestir") ;
|
||||||
|
lin ter_V = mkV (ter_Besch "ter") ;
|
||||||
|
lin conter_V = mkV (ter_Besch "conter") ;
|
||||||
|
lin deter_V = mkV (ter_Besch "deter") ;
|
||||||
|
lin entreter_V = mkV (ter_Besch "entreter") ;
|
||||||
|
lin reter_V = mkV (ter_Besch "reter") ;
|
||||||
|
lin suster_V = mkV (ter_Besch "suster") ;
|
||||||
|
lin traduzir_V = mkV (traduzir_Besch "traduzir") ;
|
||||||
|
lin abduzir_V = mkV (traduzir_Besch "abduzir") ;
|
||||||
|
lin aduzir_V = mkV (traduzir_Besch "aduzir") ;
|
||||||
|
lin conduzir_V = mkV (traduzir_Besch "conduzir") ;
|
||||||
|
lin deduzir_V = mkV (traduzir_Besch "deduzir") ;
|
||||||
|
lin induzir_V = mkV (traduzir_Besch "induzir") ;
|
||||||
|
lin introduzir_V = mkV (traduzir_Besch "introduzir") ;
|
||||||
|
lin luzir_V = mkV (traduzir_Besch "luzir") ;
|
||||||
|
lin perluzir_V = mkV (traduzir_Besch "perluzir") ;
|
||||||
|
lin produzir_V = mkV (traduzir_Besch "produzir") ;
|
||||||
|
lin reduzir_V = mkV (traduzir_Besch "reduzir") ;
|
||||||
|
lin reluzir_V = mkV (traduzir_Besch "reluzir") ;
|
||||||
|
lin seduzir_V = mkV (traduzir_Besch "seduzir") ;
|
||||||
|
lin trazer_V = mkV (trazer_Besch "trazer") ;
|
||||||
|
lin valer_V = mkV (valer_Besch "valer") ;
|
||||||
|
lin desvaler_V = mkV (valer_Besch "desvaler") ;
|
||||||
|
lin equivaler_V = mkV (valer_Besch "equivaler") ;
|
||||||
|
lin vender_V = mkV (vender_Besch "vender") ;
|
||||||
|
lin responder_V = mkV (vender_Besch "responder") ;
|
||||||
|
lin beber_V = mkV (vender_Besch "beber") ;
|
||||||
|
lin comer_V = mkV (vender_Besch "comer") ;
|
||||||
|
lin temer_V = mkV (vender_Besch "temer") ;
|
||||||
|
lin bater_V = mkV (vender_Besch "bater") ;
|
||||||
|
lin benzer_V = mkV (vender_Besch "benzer") ;
|
||||||
|
lin morder_V = mkV (vender_Besch "morder") ;
|
||||||
|
lin aprender_V = mkV (vender_Besch "aprender") ;
|
||||||
|
lin entender_V = mkV (vender_Besch "entender") ;
|
||||||
|
lin envolver_V = mkV (vender_Besch "envolver") ;
|
||||||
|
lin esbater_V = mkV (vender_Besch "esbater") ;
|
||||||
|
lin remover_V = mkV (vender_Besch "remover") ;
|
||||||
|
lin remeter_V = mkV (vender_Besch "remeter") ;
|
||||||
|
lin remexer_V = mkV (vender_Besch "remexer") ;
|
||||||
|
lin resolver_V = mkV (vender_Besch "resolver") ;
|
||||||
|
lin reviver_V = mkV (vender_Besch "reviver") ;
|
||||||
|
lin morrer_V = mkV (vender_Besch "morrer") ;
|
||||||
|
lin viver_V = mkV (vender_Besch "viver") ;
|
||||||
|
lin correr_V = mkV (vender_Besch "correr") ;
|
||||||
|
lin coser_V = mkV (vender_Besch "coser") ;
|
||||||
|
lin ver_V = mkV (ver_Besch "ver") ;
|
||||||
|
lin antever_V = mkV (ver_Besch "antever") ;
|
||||||
|
lin entrever_V = mkV (ver_Besch "entrever") ;
|
||||||
|
lin prever_V = mkV (ver_Besch "prever") ;
|
||||||
|
lin rever_V = mkV (ver_Besch "rever") ;
|
||||||
|
lin vir_V = mkV (vir_Besch "vir") ;
|
||||||
|
lin advir_V = mkV (vir_Besch "advir") ;
|
||||||
|
lin convir_V = mkV (vir_Besch "convir") ;
|
||||||
|
lin desavir_V = mkV (vir_Besch "desavir") ;
|
||||||
|
lin intervir_V = mkV (vir_Besch "intervir") ;
|
||||||
|
lin porvir_V = mkV (vir_Besch "porvir") ;
|
||||||
|
lin sobrevir_V = mkV (vir_Besch "sobrevir") ;
|
||||||
|
lin suar_V = mkV (suar_Besch "suar") ;
|
||||||
|
lin flutuar_V = mkV (suar_Besch "flutuar") ;
|
||||||
|
lin viajar_V = mkV (viajar_Besch "viajar") ;
|
||||||
|
lin peneirar_V = mkV (peneirar_Besch "peneirar") ;
|
||||||
|
lin cheirar_V = mkV (peneirar_Besch "cheirar") ;
|
||||||
|
lin queixar_V = mkV (peneirar_Besch "queixar") ;
|
||||||
|
lin queimar_V = mkV (peneirar_Besch "queimar") ;
|
||||||
|
|
||||||
|
} ;
|
||||||
|
|||||||
@@ -1,4 +1,549 @@
|
|||||||
|
--# -path=.:../romance:../common:../abstract:../prelude
|
||||||
|
|
||||||
abstract IrregPorAbs = Cat ** {
|
abstract IrregPorAbs = Cat ** {
|
||||||
flags coding=utf8 ;
|
flags coding=utf8 ;
|
||||||
|
|
||||||
}
|
-- machine-generated file: do not edit directly!
|
||||||
|
-- see https://gitlab.com/odanoburu/gf-pt
|
||||||
|
|
||||||
|
fun
|
||||||
|
acontecer_V : V ;
|
||||||
|
conhecer_V : V ;
|
||||||
|
coalescer_V : V ;
|
||||||
|
comparecer_V : V ;
|
||||||
|
compadecer_V : V ;
|
||||||
|
contorcer_V : V ;
|
||||||
|
convalescer_V : V ;
|
||||||
|
convencer_V : V ;
|
||||||
|
acudir_V : V ;
|
||||||
|
bulir_V : V ;
|
||||||
|
cuspir_V : V ;
|
||||||
|
sacudir_V : V ;
|
||||||
|
subir_V : V ;
|
||||||
|
sumir_V : V ;
|
||||||
|
consumir_V : V ;
|
||||||
|
adequar_V : V ;
|
||||||
|
agredir_V : V ;
|
||||||
|
denegrir_V : V ;
|
||||||
|
prevenir_V : V ;
|
||||||
|
progredir_V : V ;
|
||||||
|
transgredir_V : V ;
|
||||||
|
anunciar_V : V ;
|
||||||
|
abreviar_V : V ;
|
||||||
|
acariciar_V : V ;
|
||||||
|
afiar_V : V ;
|
||||||
|
aliviar_V : V ;
|
||||||
|
apreciar_V : V ;
|
||||||
|
assobiar_V : V ;
|
||||||
|
avaliar_V : V ;
|
||||||
|
avariar_V : V ;
|
||||||
|
criar_V : V ;
|
||||||
|
denunciar_V : V ;
|
||||||
|
desviar_V : V ;
|
||||||
|
enfiar_V : V ;
|
||||||
|
enviar_V : V ;
|
||||||
|
iniciar_V : V ;
|
||||||
|
principiar_V : V ;
|
||||||
|
pronunciar_V : V ;
|
||||||
|
renunciar_V : V ;
|
||||||
|
assediar_V : V ;
|
||||||
|
aprazer_V : V ;
|
||||||
|
desprazer_V : V ;
|
||||||
|
aquecer_V : V ;
|
||||||
|
agradecer_V : V ;
|
||||||
|
amarelecer_V : V ;
|
||||||
|
amolecer_V : V ;
|
||||||
|
arrefecer_V : V ;
|
||||||
|
empecer_V : V ;
|
||||||
|
entretecer_V : V ;
|
||||||
|
entristecer_V : V ;
|
||||||
|
escurecer_V : V ;
|
||||||
|
estremecer_V : V ;
|
||||||
|
favorecer_V : V ;
|
||||||
|
merecer_V : V ;
|
||||||
|
oferecer_V : V ;
|
||||||
|
parecer_V : V ;
|
||||||
|
perecer_V : V ;
|
||||||
|
reverdecer_V : V ;
|
||||||
|
tecer_V : V ;
|
||||||
|
esquecer_V : V ;
|
||||||
|
escarnecer_V : V ;
|
||||||
|
escurecer_V : V ;
|
||||||
|
arguir_V : V ;
|
||||||
|
redarguir_V : V ;
|
||||||
|
averiguar_V : V ;
|
||||||
|
aguar_V : V ;
|
||||||
|
apaniguar_V : V ;
|
||||||
|
apaziguar_V : V ;
|
||||||
|
apropinquar_V : V ;
|
||||||
|
deliquar_V : V ;
|
||||||
|
desaguar_V : V ;
|
||||||
|
enxaguar_V : V ;
|
||||||
|
obliquar_V : V ;
|
||||||
|
caber_V : V ;
|
||||||
|
chegar_V : V ;
|
||||||
|
rogar_V : V ;
|
||||||
|
jogar_V : V ;
|
||||||
|
julgar_V : V ;
|
||||||
|
interrogar_V : V ;
|
||||||
|
intrigar_V : V ;
|
||||||
|
investigar_V : V ;
|
||||||
|
enxergar_V : V ;
|
||||||
|
enrugar_V : V ;
|
||||||
|
escorregar_V : V ;
|
||||||
|
esmagar_V : V ;
|
||||||
|
esfregar_V : V ;
|
||||||
|
irrigar_V : V ;
|
||||||
|
interligar_V : V ;
|
||||||
|
instigar_V : V ;
|
||||||
|
largar_V : V ;
|
||||||
|
legalizar_V : V ;
|
||||||
|
ligar_V : V ;
|
||||||
|
litigar_V : V ;
|
||||||
|
madrugar_V : V ;
|
||||||
|
esfregar_V : V ;
|
||||||
|
apagar_V : V ;
|
||||||
|
tragar_V : V ;
|
||||||
|
chover_V : V ;
|
||||||
|
começar_V : V ;
|
||||||
|
caçar_V : V ;
|
||||||
|
coçar_V : V ;
|
||||||
|
comerciar_V : V ;
|
||||||
|
agenciar_V : V ;
|
||||||
|
licenciar_V : V ;
|
||||||
|
negociar_V : V ;
|
||||||
|
obsequiar_V : V ;
|
||||||
|
premiar_V : V ;
|
||||||
|
providenciar_V : V ;
|
||||||
|
sentenciar_V : V ;
|
||||||
|
silenciar_V : V ;
|
||||||
|
comprar_V : V ;
|
||||||
|
pintar_V : V ;
|
||||||
|
perguntar_V : V ;
|
||||||
|
quebrar_V : V ;
|
||||||
|
fechar_V : V ;
|
||||||
|
contar_V : V ;
|
||||||
|
cortar_V : V ;
|
||||||
|
compilar_V : V ;
|
||||||
|
lutar_V : V ;
|
||||||
|
encontrar_V : V ;
|
||||||
|
encomendar_V : V ;
|
||||||
|
encalacrar_V : V ;
|
||||||
|
encaminhar_V : V ;
|
||||||
|
estampar_V : V ;
|
||||||
|
encanar_V : V ;
|
||||||
|
encampar_V : V ;
|
||||||
|
encantar_V : V ;
|
||||||
|
encapotar_V : V ;
|
||||||
|
encarar_V : V ;
|
||||||
|
encarcerar_V : V ;
|
||||||
|
matar_V : V ;
|
||||||
|
menosprezar_V : V ;
|
||||||
|
marchar_V : V ;
|
||||||
|
maravilhar_V : V ;
|
||||||
|
marombar_V : V ;
|
||||||
|
respirar_V : V ;
|
||||||
|
martirizar_V : V ;
|
||||||
|
martelar_V : V ;
|
||||||
|
mascarar_V : V ;
|
||||||
|
masturbar_V : V ;
|
||||||
|
materializar_V : V ;
|
||||||
|
matizar_V : V ;
|
||||||
|
mazelar_V : V ;
|
||||||
|
mecanizar_V : V ;
|
||||||
|
mediocrizar_V : V ;
|
||||||
|
meditar_V : V ;
|
||||||
|
melar_V : V ;
|
||||||
|
melhorar_V : V ;
|
||||||
|
memorizar_V : V ;
|
||||||
|
mencionar_V : V ;
|
||||||
|
mensurar_V : V ;
|
||||||
|
assoprar_V : V ;
|
||||||
|
metralhar_V : V ;
|
||||||
|
migrar_V : V ;
|
||||||
|
militar_V : V ;
|
||||||
|
militarizar_V : V ;
|
||||||
|
mimar_V : V ;
|
||||||
|
mimetizar_V : V ;
|
||||||
|
mirar_V : V ;
|
||||||
|
misturar_V : V ;
|
||||||
|
mobilizar_V : V ;
|
||||||
|
modelar_V : V ;
|
||||||
|
modernizar_V : V ;
|
||||||
|
modular_V : V ;
|
||||||
|
monopolizar_V : V ;
|
||||||
|
moralizar_V : V ;
|
||||||
|
mostrar_V : V ;
|
||||||
|
motivar_V : V ;
|
||||||
|
motorizar_V : V ;
|
||||||
|
movimentar_V : V ;
|
||||||
|
multar_V : V ;
|
||||||
|
mundanizar_V : V ;
|
||||||
|
mutilar_V : V ;
|
||||||
|
gostar_V : V ;
|
||||||
|
gabar_V : V ;
|
||||||
|
galopar_V : V ;
|
||||||
|
gangrenar_V : V ;
|
||||||
|
ganhar_V : V ;
|
||||||
|
garimpar_V : V ;
|
||||||
|
gastar_V : V ;
|
||||||
|
generalizar_V : V ;
|
||||||
|
gerar_V : V ;
|
||||||
|
girar_V : V ;
|
||||||
|
gravar_V : V ;
|
||||||
|
grelhar_V : V ;
|
||||||
|
gritar_V : V ;
|
||||||
|
guardar_V : V ;
|
||||||
|
guerrilhar_V : V ;
|
||||||
|
guinchar_V : V ;
|
||||||
|
guisar_V : V ;
|
||||||
|
herdar_V : V ;
|
||||||
|
hibernar_V : V ;
|
||||||
|
hipnotizar_V : V ;
|
||||||
|
honrar_V : V ;
|
||||||
|
horripular_V : V ;
|
||||||
|
hospedar_V : V ;
|
||||||
|
humanizar_V : V ;
|
||||||
|
humilhar_V : V ;
|
||||||
|
humorizar_V : V ;
|
||||||
|
idealizar_V : V ;
|
||||||
|
idolatrar_V : V ;
|
||||||
|
implementar_V : V ;
|
||||||
|
implantar_V : V ;
|
||||||
|
incrementar_V : V ;
|
||||||
|
indignar_V : V ;
|
||||||
|
informar_V : V ;
|
||||||
|
escutar_V : V ;
|
||||||
|
amar_V : V ;
|
||||||
|
tirar_V : V ;
|
||||||
|
empurrar_V : V ;
|
||||||
|
falar_V : V ;
|
||||||
|
separar_V : V ;
|
||||||
|
apertar_V : V ;
|
||||||
|
chupar_V : V ;
|
||||||
|
ensinar_V : V ;
|
||||||
|
atar_V : V ;
|
||||||
|
esperar_V : V ;
|
||||||
|
lavar_V : V ;
|
||||||
|
somar_V : V ;
|
||||||
|
sensualizar_V : V ;
|
||||||
|
saltar_V : V ;
|
||||||
|
congelar_V : V ;
|
||||||
|
virar_V : V ;
|
||||||
|
escavar_V : V ;
|
||||||
|
costurar_V : V ;
|
||||||
|
cantar_V : V ;
|
||||||
|
sentar_V : V ;
|
||||||
|
parar_V : V ;
|
||||||
|
nadar_V : V ;
|
||||||
|
pensar_V : V ;
|
||||||
|
vomitar_V : V ;
|
||||||
|
caminhar_V : V ;
|
||||||
|
crer_V : V ;
|
||||||
|
descrer_V : V ;
|
||||||
|
dar_V : V ;
|
||||||
|
destruir_V : V ;
|
||||||
|
construir_V : V ;
|
||||||
|
reconstruir_V : V ;
|
||||||
|
distribuir_V : V ;
|
||||||
|
imbuir_V : V ;
|
||||||
|
afluir_V : V ;
|
||||||
|
confluir_V : V ;
|
||||||
|
fluir_V : V ;
|
||||||
|
influir_V : V ;
|
||||||
|
refluir_V : V ;
|
||||||
|
atribuir_V : V ;
|
||||||
|
contribuir_V : V ;
|
||||||
|
retribuir_V : V ;
|
||||||
|
instituir_V : V ;
|
||||||
|
restituir_V : V ;
|
||||||
|
substituir_V : V ;
|
||||||
|
divergir_V : V ;
|
||||||
|
aspergir_V : V ;
|
||||||
|
convergir_V : V ;
|
||||||
|
dizer_V : V ;
|
||||||
|
bendizer_V : V ;
|
||||||
|
condizer_V : V ;
|
||||||
|
contradizer_V : V ;
|
||||||
|
desdizer_V : V ;
|
||||||
|
maldizer_V : V ;
|
||||||
|
predizer_V : V ;
|
||||||
|
doer_V : V ;
|
||||||
|
dormir_V : V ;
|
||||||
|
cobrir_V : V ;
|
||||||
|
descobrir_V : V ;
|
||||||
|
encobrir_V : V ;
|
||||||
|
recobrir_V : V ;
|
||||||
|
explodir_V : V ;
|
||||||
|
engolir_V : V ;
|
||||||
|
tossir_V : V ;
|
||||||
|
erguer_V : V ;
|
||||||
|
soerguer_V : V ;
|
||||||
|
estar_V : V ;
|
||||||
|
extinguir_V : V ;
|
||||||
|
falir_V : V ;
|
||||||
|
aguerrir_V : V ;
|
||||||
|
combalir_V : V ;
|
||||||
|
desflorir_V : V ;
|
||||||
|
florir_V : V ;
|
||||||
|
reflorir_V : V ;
|
||||||
|
renhir_V : V ;
|
||||||
|
parir_V : V ;
|
||||||
|
fazer_V : V ;
|
||||||
|
afazer_V : V ;
|
||||||
|
contrafazer_V : V ;
|
||||||
|
desfazer_V : V ;
|
||||||
|
liquefazer_V : V ;
|
||||||
|
perfazer_V : V ;
|
||||||
|
rarefazer_V : V ;
|
||||||
|
refazer_V : V ;
|
||||||
|
satisfazer_V : V ;
|
||||||
|
ficar_V : V ;
|
||||||
|
buscar_V : V ;
|
||||||
|
frigir_V : V ;
|
||||||
|
fugir_V : V ;
|
||||||
|
garantir_V : V ;
|
||||||
|
partir_V : V ;
|
||||||
|
haver_V : V ;
|
||||||
|
abolir_V : V ;
|
||||||
|
banir_V : V ;
|
||||||
|
brandir_V : V ;
|
||||||
|
brunir_V : V ;
|
||||||
|
emergir_V : V ;
|
||||||
|
empedernir_V : V ;
|
||||||
|
exaurir_V : V ;
|
||||||
|
extorquir_V : V ;
|
||||||
|
fremir_V : V ;
|
||||||
|
fulgir_V : V ;
|
||||||
|
jungir_V : V ;
|
||||||
|
retorquir_V : V ;
|
||||||
|
submergir_V : V ;
|
||||||
|
ungir_V : V ;
|
||||||
|
colorir_V : V ;
|
||||||
|
demolir_V : V ;
|
||||||
|
ir_V : V ;
|
||||||
|
jazer_V : V ;
|
||||||
|
ler_V : V ;
|
||||||
|
reler_V : V ;
|
||||||
|
tresler_V : V ;
|
||||||
|
moer_V : V ;
|
||||||
|
roer_V : V ;
|
||||||
|
neviscar_V : V ;
|
||||||
|
odiar_V : V ;
|
||||||
|
ansiar_V : V ;
|
||||||
|
incendiar_V : V ;
|
||||||
|
mediar_V : V ;
|
||||||
|
remediar_V : V ;
|
||||||
|
ouvir_V : V ;
|
||||||
|
pedir_V : V ;
|
||||||
|
despedir_V : V ;
|
||||||
|
expedir_V : V ;
|
||||||
|
reexpedir_V : V ;
|
||||||
|
impedir_V : V ;
|
||||||
|
desimpedir_V : V ;
|
||||||
|
medir_V : V ;
|
||||||
|
perder_V : V ;
|
||||||
|
perdoar_V : V ;
|
||||||
|
abalroar_V : V ;
|
||||||
|
abençoar_V : V ;
|
||||||
|
amaldiçoar_V : V ;
|
||||||
|
aperfeiçoar_V : V ;
|
||||||
|
apregoar_V : V ;
|
||||||
|
coar_V : V ;
|
||||||
|
doar_V : V ;
|
||||||
|
entoar_V : V ;
|
||||||
|
esboroar_V : V ;
|
||||||
|
povoar_V : V ;
|
||||||
|
soar_V : V ;
|
||||||
|
toar_V : V ;
|
||||||
|
voar_V : V ;
|
||||||
|
poder_V : V ;
|
||||||
|
polir_V : V ;
|
||||||
|
pôr_V : V ;
|
||||||
|
apor_V : V ;
|
||||||
|
compor_V : V ;
|
||||||
|
contrapor_V : V ;
|
||||||
|
decompor_V : V ;
|
||||||
|
descompor_V : V ;
|
||||||
|
dispor_V : V ;
|
||||||
|
expor_V : V ;
|
||||||
|
impor_V : V ;
|
||||||
|
opor_V : V ;
|
||||||
|
propor_V : V ;
|
||||||
|
repor_V : V ;
|
||||||
|
supor_V : V ;
|
||||||
|
prazer_V : V ;
|
||||||
|
precaver_V : V ;
|
||||||
|
preferir_V : V ;
|
||||||
|
aderir_V : V ;
|
||||||
|
aferir_V : V ;
|
||||||
|
conferir_V : V ;
|
||||||
|
deferir_V : V ;
|
||||||
|
diferir_V : V ;
|
||||||
|
digerir_V : V ;
|
||||||
|
ferir_V : V ;
|
||||||
|
inferir_V : V ;
|
||||||
|
inserir_V : V ;
|
||||||
|
proferir_V : V ;
|
||||||
|
referir_V : V ;
|
||||||
|
repelir_V : V ;
|
||||||
|
repetir_V : V ;
|
||||||
|
sugerir_V : V ;
|
||||||
|
transferir_V : V ;
|
||||||
|
proibir_V : V ;
|
||||||
|
coibir_V : V ;
|
||||||
|
proteger_V : V ;
|
||||||
|
eleger_V : V ;
|
||||||
|
reger_V : V ;
|
||||||
|
prover_V : V ;
|
||||||
|
querer_V : V ;
|
||||||
|
reaver_V : V ;
|
||||||
|
recear_V : V ;
|
||||||
|
acarear_V : V ;
|
||||||
|
afear_V : V ;
|
||||||
|
altear_V : V ;
|
||||||
|
apear_V : V ;
|
||||||
|
arquear_V : V ;
|
||||||
|
asnear_V : V ;
|
||||||
|
costear_V : V ;
|
||||||
|
custear_V : V ;
|
||||||
|
enfrear_V : V ;
|
||||||
|
frear_V : V ;
|
||||||
|
olear_V : V ;
|
||||||
|
passear_V : V ;
|
||||||
|
pear_V : V ;
|
||||||
|
pentear_V : V ;
|
||||||
|
pratear_V : V ;
|
||||||
|
presentear_V : V ;
|
||||||
|
recrear_V : V ;
|
||||||
|
saborear_V : V ;
|
||||||
|
sofrear_V : V ;
|
||||||
|
esfaquear_V : V ;
|
||||||
|
escassear_V : V ;
|
||||||
|
escarcear_V : V ;
|
||||||
|
escamotear_V : V ;
|
||||||
|
esfoguear_V : V ;
|
||||||
|
estear_V : V ;
|
||||||
|
esbofetear_V : V ;
|
||||||
|
espernear_V : V ;
|
||||||
|
redigir_V : V ;
|
||||||
|
afligir_V : V ;
|
||||||
|
agir_V : V ;
|
||||||
|
coligir_V : V ;
|
||||||
|
corrigir_V : V ;
|
||||||
|
erigir_V : V ;
|
||||||
|
exigir_V : V ;
|
||||||
|
fingir_V : V ;
|
||||||
|
frangir_V : V ;
|
||||||
|
infligir_V : V ;
|
||||||
|
transigir_V : V ;
|
||||||
|
refletir_V : V ;
|
||||||
|
fletir_V : V ;
|
||||||
|
defletir_V : V ;
|
||||||
|
infletir_V : V ;
|
||||||
|
remir_V : V ;
|
||||||
|
requerer_V : V ;
|
||||||
|
reunir_V : V ;
|
||||||
|
rir_V : V ;
|
||||||
|
sorrir_V : V ;
|
||||||
|
saber_V : V ;
|
||||||
|
dessaber_V : V ;
|
||||||
|
sair_V : V ;
|
||||||
|
cair_V : V ;
|
||||||
|
decair_V : V ;
|
||||||
|
descair_V : V ;
|
||||||
|
recair_V : V ;
|
||||||
|
trair_V : V ;
|
||||||
|
atrair_V : V ;
|
||||||
|
contrair_V : V ;
|
||||||
|
distrair_V : V ;
|
||||||
|
extrair_V : V ;
|
||||||
|
protrair_V : V ;
|
||||||
|
retrair_V : V ;
|
||||||
|
subtrair_V : V ;
|
||||||
|
saudar_V : V ;
|
||||||
|
seguir_V : V ;
|
||||||
|
conseguir_V : V ;
|
||||||
|
perseguir_V : V ;
|
||||||
|
prosseguir_V : V ;
|
||||||
|
sentir_V : V ;
|
||||||
|
assentir_V : V ;
|
||||||
|
consentir_V : V ;
|
||||||
|
pressentir_V : V ;
|
||||||
|
ressentir_V : V ;
|
||||||
|
mentir_V : V ;
|
||||||
|
desmentir_V : V ;
|
||||||
|
ser_V : V ;
|
||||||
|
servir_V : V ;
|
||||||
|
concernir_V : V ;
|
||||||
|
discernir_V : V ;
|
||||||
|
cerzir_V : V ;
|
||||||
|
despir_V : V ;
|
||||||
|
vestir_V : V ;
|
||||||
|
investir_V : V ;
|
||||||
|
revestir_V : V ;
|
||||||
|
ter_V : V ;
|
||||||
|
conter_V : V ;
|
||||||
|
deter_V : V ;
|
||||||
|
entreter_V : V ;
|
||||||
|
reter_V : V ;
|
||||||
|
suster_V : V ;
|
||||||
|
traduzir_V : V ;
|
||||||
|
abduzir_V : V ;
|
||||||
|
aduzir_V : V ;
|
||||||
|
conduzir_V : V ;
|
||||||
|
deduzir_V : V ;
|
||||||
|
induzir_V : V ;
|
||||||
|
introduzir_V : V ;
|
||||||
|
luzir_V : V ;
|
||||||
|
perluzir_V : V ;
|
||||||
|
produzir_V : V ;
|
||||||
|
reduzir_V : V ;
|
||||||
|
reluzir_V : V ;
|
||||||
|
seduzir_V : V ;
|
||||||
|
trazer_V : V ;
|
||||||
|
valer_V : V ;
|
||||||
|
desvaler_V : V ;
|
||||||
|
equivaler_V : V ;
|
||||||
|
vender_V : V ;
|
||||||
|
responder_V : V ;
|
||||||
|
beber_V : V ;
|
||||||
|
comer_V : V ;
|
||||||
|
temer_V : V ;
|
||||||
|
bater_V : V ;
|
||||||
|
benzer_V : V ;
|
||||||
|
morder_V : V ;
|
||||||
|
aprender_V : V ;
|
||||||
|
entender_V : V ;
|
||||||
|
envolver_V : V ;
|
||||||
|
esbater_V : V ;
|
||||||
|
remover_V : V ;
|
||||||
|
remeter_V : V ;
|
||||||
|
remexer_V : V ;
|
||||||
|
resolver_V : V ;
|
||||||
|
reviver_V : V ;
|
||||||
|
morrer_V : V ;
|
||||||
|
viver_V : V ;
|
||||||
|
correr_V : V ;
|
||||||
|
coser_V : V ;
|
||||||
|
ver_V : V ;
|
||||||
|
antever_V : V ;
|
||||||
|
entrever_V : V ;
|
||||||
|
prever_V : V ;
|
||||||
|
rever_V : V ;
|
||||||
|
vir_V : V ;
|
||||||
|
advir_V : V ;
|
||||||
|
convir_V : V ;
|
||||||
|
desavir_V : V ;
|
||||||
|
intervir_V : V ;
|
||||||
|
porvir_V : V ;
|
||||||
|
sobrevir_V : V ;
|
||||||
|
suar_V : V ;
|
||||||
|
flutuar_V : V ;
|
||||||
|
viajar_V : V ;
|
||||||
|
peneirar_V : V ;
|
||||||
|
cheirar_V : V ;
|
||||||
|
queixar_V : V ;
|
||||||
|
queimar_V : V ;
|
||||||
|
|
||||||
|
} ;
|
||||||
|
|||||||
@@ -2,8 +2,9 @@ CompCN {"um"} DET det head
|
|||||||
ComplVS {"que"} SCONJ mark head
|
ComplVS {"que"} SCONJ mark head
|
||||||
EmbedS {"que"} PRON nsubj head
|
EmbedS {"que"} PRON nsubj head
|
||||||
EmbedVP {"de"} ADP mark head
|
EmbedVP {"de"} ADP mark head
|
||||||
|
ExistNPAdv {"existe", "há"} AUX aux head
|
||||||
ExtAdvS,SubjS,VocNP {","} PUNCT punct head
|
ExtAdvS,SubjS,VocNP {","} PUNCT punct head
|
||||||
PassV2 {"era","sido"} AUX aux:pass head
|
PassV2 {"era","sido","foi"} AUX aux:pass head
|
||||||
PredVP {"há"} AUX aux head
|
PredVP {"há"} AUX aux head
|
||||||
PredVP {"se"} PRON expl head
|
PredVP {"se"} PRON expl head
|
||||||
ProgrVP {"estavam"} AUX aux head
|
ProgrVP {"estavam"} AUX aux head
|
||||||
@@ -11,5 +12,8 @@ SelfAdVVP {"ela"} PRON obl head
|
|||||||
SelfAdVVP {"própria"} DET det head
|
SelfAdVVP {"própria"} DET det head
|
||||||
SlashV2a,UseComp,UseV {"não"} ADV advmod head
|
SlashV2a,UseComp,UseV {"não"} ADV advmod head
|
||||||
SlashV2V {"a"} ADP mark head
|
SlashV2V {"a"} ADP mark head
|
||||||
UseComp,ProgrVP,QuestIComp {"é","sou","são","está","estão","estava"} VERB cop head
|
UseComp,ProgrVP,QuestIComp {"é","sou","são","está","estão","estava","estou"} VERB cop head
|
||||||
UsePN {"de","por"} ADP case head
|
UsePN {"de","por"} ADP case head
|
||||||
|
|
||||||
|
-- morphological feature labels
|
||||||
|
-- missing
|
||||||
@@ -10,12 +10,12 @@ flags
|
|||||||
lin
|
lin
|
||||||
easy_A2V = mkA2V (mkA "fácil") dative genitive ;
|
easy_A2V = mkA2V (mkA "fácil") dative genitive ;
|
||||||
married_A2 = mkA2 (mkA "casado") (mkPrep "com") ;
|
married_A2 = mkA2 (mkA "casado") (mkPrep "com") ;
|
||||||
probable_AS = mkAS (prefA (mkA "provável" "provavelmente")) ;
|
probable_AS = mkAS (prefixA (mkA "provável")) ;
|
||||||
fun_AV = mkAV (mkA "divertido") genitive ;
|
fun_AV = mkAV (mkA "divertido") genitive ;
|
||||||
-- A
|
-- A
|
||||||
bad_A = prefA (mkA (mkA "mau") (mkA "pior")) ;
|
bad_A = prefixA (mkA (mkA "mau") (mkA "pior")) ;
|
||||||
beautiful_A = prefA (mkA "belo") ; -- bela
|
beautiful_A = prefixA (mkA "belo") ; -- bela
|
||||||
big_A = prefA (mkA "grande") ;
|
big_A = prefixA (mkA "grande") ;
|
||||||
black_A = mkA "preto" ; -- preta
|
black_A = mkA "preto" ; -- preta
|
||||||
blue_A = mkA "azul" ;
|
blue_A = mkA "azul" ;
|
||||||
broad_A = mkA "largo" ;
|
broad_A = mkA "largo" ;
|
||||||
@@ -29,7 +29,7 @@ lin
|
|||||||
dull_A = mkA "desafilado" ;
|
dull_A = mkA "desafilado" ;
|
||||||
empty_A = mkA "vazio" ;
|
empty_A = mkA "vazio" ;
|
||||||
full_A = mkA "cheio" ;
|
full_A = mkA "cheio" ;
|
||||||
good_A = prefA (mkA (mkA "bom") (mkA "melhor")) ; ---- adv?
|
good_A = prefixA (mkA (mkA "bom") (mkA "melhor")) ; ---- adv?
|
||||||
green_A = mkA "verde" ;
|
green_A = mkA "verde" ;
|
||||||
heavy_A = mkA "pesado" ;
|
heavy_A = mkA "pesado" ;
|
||||||
hot_A = mkA "quente" ;
|
hot_A = mkA "quente" ;
|
||||||
@@ -37,28 +37,28 @@ lin
|
|||||||
long_A = mkA "longo" ;
|
long_A = mkA "longo" ;
|
||||||
narrow_A = mkA "estreito" ;
|
narrow_A = mkA "estreito" ;
|
||||||
near_A = mkA "perto" ;
|
near_A = mkA "perto" ;
|
||||||
new_A = prefA (mkA "novo") ;
|
new_A = prefixA (mkA "novo") ;
|
||||||
old_A = prefA (mkA "velho") ;
|
old_A = prefixA (mkA "velho") ;
|
||||||
ready_A = adjCopula (mkA "pronto") D.estarCopula ;
|
ready_A = mkA (mkA "pronto") D.estarCopula ;
|
||||||
red_A = mkA "vermelho" ;
|
red_A = mkA "vermelho" ;
|
||||||
rotten_A = mkA "podre" ;
|
rotten_A = mkA "podre" ;
|
||||||
round_A = mkA "redondo" ;
|
round_A = mkA "redondo" ;
|
||||||
sharp_A = mkA "afiado" ; -- pontiagudo
|
sharp_A = mkA "afiado" ; -- pontiagudo
|
||||||
short_A = mkA "curto" ; --- breve, pequeno, baixo
|
short_A = mkA "curto" ; --- breve, pequeno, baixo
|
||||||
small_A = prefA (mkA "pequeno") ;
|
small_A = prefixA (mkA "pequeno") ;
|
||||||
smooth_A = mkA "liso" ; -- suave
|
smooth_A = mkA "liso" ; -- suave
|
||||||
straight_A = mkA "direto" ; -- reto
|
straight_A = mkA "direto" ; -- reto
|
||||||
stupid_A = mkA "estúpido" ;
|
stupid_A = mkA "estúpido" ;
|
||||||
thick_A = mkA "grosso" ;
|
thick_A = mkA "grosso" ;
|
||||||
thin_A = mkA "fino" ; -- delgado, magro
|
thin_A = mkA "fino" ; -- delgado, magro
|
||||||
ugly_A = mkA "feio" ;
|
ugly_A = mkA "feio" ;
|
||||||
uncertain_A = mkA "incerto" ;
|
uncertain_A = mkA (mkA "incerto") D.estarCopula ;
|
||||||
warm_A = mkA "quente" ;
|
warm_A = mkA "quente" ;
|
||||||
wet_A = mkA "molhado" ;
|
wet_A = mkA "molhado" ;
|
||||||
white_A = compADeg (mkA "branco") ;
|
white_A = compADeg (mkA "branco") ;
|
||||||
wide_A = mkA "largo" ; -- extenso
|
wide_A = mkA "largo" ; -- extenso
|
||||||
yellow_A = mkA "amarelo" ;
|
yellow_A = mkA "amarelo" ;
|
||||||
young_A = prefA (mkA "jovem" "juvenilmente") ;
|
young_A = prefixA (mkA "jovem") ;
|
||||||
already_Adv = mkAdv "já" ;
|
already_Adv = mkAdv "já" ;
|
||||||
far_Adv = mkAdv "longe" ; ----?
|
far_Adv = mkAdv "longe" ; ----?
|
||||||
now_Adv = mkAdv "agora" ;
|
now_Adv = mkAdv "agora" ;
|
||||||
@@ -191,7 +191,7 @@ lin
|
|||||||
question_N = mkN "pergunta" ;
|
question_N = mkN "pergunta" ;
|
||||||
radio_N = mkN "rádio" ;
|
radio_N = mkN "rádio" ;
|
||||||
rain_N = mkN "chuva" ;
|
rain_N = mkN "chuva" ;
|
||||||
reason_N = mkN "razão" ;
|
reason_N = mkN "razão" feminine ;
|
||||||
religion_N = mkN "religião" ;
|
religion_N = mkN "religião" ;
|
||||||
restaurant_N = mkN "restaurante" ;
|
restaurant_N = mkN "restaurante" ;
|
||||||
river_N = mkN "rio" ;
|
river_N = mkN "rio" ;
|
||||||
@@ -232,7 +232,7 @@ lin
|
|||||||
table_N = mkN "mesa" ;
|
table_N = mkN "mesa" ;
|
||||||
tail_N = mkN "rabo" ;
|
tail_N = mkN "rabo" ;
|
||||||
teacher_N = mkN "professor" ;
|
teacher_N = mkN "professor" ;
|
||||||
television_N = mkN "televisão" ;
|
television_N = mkN "televisão" feminine ;
|
||||||
tongue_N = mkN "língua" ;
|
tongue_N = mkN "língua" ;
|
||||||
tooth_N = mkN "dente" ;
|
tooth_N = mkN "dente" ;
|
||||||
train_N = mkN "trem" ;
|
train_N = mkN "trem" ;
|
||||||
@@ -256,7 +256,7 @@ lin
|
|||||||
paris_PN = mkPN "Paris" feminine ;
|
paris_PN = mkPN "Paris" feminine ;
|
||||||
-- V
|
-- V
|
||||||
rain_V0 = mkV0 (mkV (chover_Besch "chover")) ;
|
rain_V0 = mkV0 (mkV (chover_Besch "chover")) ;
|
||||||
paint_V2A = mkV2A (mkV "pintar") accusative (mkPrep "em") ;
|
paint_V2A = mkV2A (mkV "pintar") accusative (mkPrep "de") ;
|
||||||
ask_V2Q = mkV2Q (mkV "perguntar") dative ;
|
ask_V2Q = mkV2Q (mkV "perguntar") dative ;
|
||||||
answer_V2S = mkV2S (mkV "responder") dative ;
|
answer_V2S = mkV2S (mkV "responder") dative ;
|
||||||
beg_V2V = mkV2V (mkV "rogar") accusative dative ; -- pedir
|
beg_V2V = mkV2V (mkV "rogar") accusative dative ; -- pedir
|
||||||
@@ -276,12 +276,12 @@ lin
|
|||||||
hate_V2 = mkV2 (mkV (odiar_Besch "odiar")) ;
|
hate_V2 = mkV2 (mkV (odiar_Besch "odiar")) ;
|
||||||
hear_V2 = mkV2 (mkV "ouvir") ;
|
hear_V2 = mkV2 (mkV "ouvir") ;
|
||||||
hit_V2 = mkV2 (mkV "bater") ;
|
hit_V2 = mkV2 (mkV "bater") ;
|
||||||
hold_V2 = mkV2 ter_V ;
|
hold_V2 = mkV2 have_V ;
|
||||||
hunt_V2 = mkV2 (mkV "caçar") ;
|
hunt_V2 = mkV2 (mkV "caçar") ;
|
||||||
kill_V2 = mkV2 (mkV "matar") ;
|
kill_V2 = mkV2 (mkV "matar" "morto") ;
|
||||||
know_V2 = mkV2 (mkV "conhecer") ;
|
know_V2 = mkV2 (mkV "conhecer") ;
|
||||||
learn_V2 = mkV2 (mkV "aprender") ;
|
learn_V2 = mkV2 (mkV "aprender") ;
|
||||||
leave_V2 = mkV2 (mkV "partir") ;
|
leave_V2 = mkV2 (mkV "partir") genitive ;
|
||||||
like_V2 = mkV2 (mkV "gostar") genitive ;
|
like_V2 = mkV2 (mkV "gostar") genitive ;
|
||||||
listen_V2 = mkV2 (mkV "escutar") ;
|
listen_V2 = mkV2 (mkV "escutar") ;
|
||||||
lose_V2 = mkV2 (mkV (perder_Besch "perder")) ;
|
lose_V2 = mkV2 (mkV (perder_Besch "perder")) ;
|
||||||
@@ -301,7 +301,7 @@ lin
|
|||||||
squeeze_V2 = mkV2 (mkV "apertar") ;
|
squeeze_V2 = mkV2 (mkV "apertar") ;
|
||||||
stab_V2 = mkV2 (mkV (recear_Besch "esfaquear")) ;
|
stab_V2 = mkV2 (mkV (recear_Besch "esfaquear")) ;
|
||||||
suck_V2 = mkV2 (mkV "chupar") ;
|
suck_V2 = mkV2 (mkV "chupar") ;
|
||||||
switch8off_V2 = mkV2 (mkV "apagar") ;
|
switch8off_V2 = mkV2 (mkV "desligar") ;
|
||||||
switch8on_V2 = mkV2 (mkV "ligar") ; -- acender
|
switch8on_V2 = mkV2 (mkV "ligar") ; -- acender
|
||||||
teach_V2 = mkV2 (mkV "ensinar") ;
|
teach_V2 = mkV2 (mkV "ensinar") ;
|
||||||
throw_V2 = mkV2 (mkV "jogar") ;
|
throw_V2 = mkV2 (mkV "jogar") ;
|
||||||
@@ -319,11 +319,11 @@ lin
|
|||||||
send_V3 = mkV3 (mkV "enviar") dative ; -- mandar
|
send_V3 = mkV3 (mkV "enviar") dative ; -- mandar
|
||||||
talk_V3 = mkV3 (mkV "falar") dative genitive ;
|
talk_V3 = mkV3 (mkV "falar") dative genitive ;
|
||||||
become_VA = reflV (mkV "tornar") ;
|
become_VA = reflV (mkV "tornar") ;
|
||||||
know_VQ = mkVQ saber_V ;
|
know_VQ = mkVQ know_V ;
|
||||||
wonder_VQ = mkVQ (reflV (mkV "perguntar")) ;
|
wonder_VQ = mkVQ (reflV (mkV "perguntar")) ;
|
||||||
fear_VS = mkVS (mkV "temer") ;
|
fear_VS = subjVS (mkV "temer") ;
|
||||||
hope_VS = mkVS (mkV "esperar") ;
|
hope_VS = subjVS (mkV "esperar") ;
|
||||||
know_VS = mkVS saber_V ;
|
know_VS = mkVS know_V ;
|
||||||
say_VS = mkVS (mkV (dizer_Besch "dizer")) ;
|
say_VS = mkVS (mkV (dizer_Besch "dizer")) ;
|
||||||
-- V
|
-- V
|
||||||
blow_V = mkV "assoprar" ;
|
blow_V = mkV "assoprar" ;
|
||||||
@@ -347,7 +347,7 @@ lin
|
|||||||
sew_V = mkV "costurar" ;
|
sew_V = mkV "costurar" ;
|
||||||
sing_V = mkV "cantar" ;
|
sing_V = mkV "cantar" ;
|
||||||
sit_V = reflV (mkV "sentar") ;
|
sit_V = reflV (mkV "sentar") ;
|
||||||
sleep_V = mkV "dormir" ;
|
sleep_V = mkV (dormir_Besch "dormir") ;
|
||||||
smell_V = mkV "cheirar" ;
|
smell_V = mkV "cheirar" ;
|
||||||
spit_V = mkV "cuspir" ;
|
spit_V = mkV "cuspir" ;
|
||||||
stand_V = mkV (estar_Besch "estar") ; ---- "estar de pé" ;
|
stand_V = mkV (estar_Besch "estar") ; ---- "estar de pé" ;
|
||||||
@@ -363,10 +363,10 @@ lin
|
|||||||
alas_Interj = ss "infelizmente" ;
|
alas_Interj = ss "infelizmente" ;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
saber_V : V ;
|
know_V : V ;
|
||||||
saber_V = mkV (saber_Besch "saber") ;
|
know_V = mkV (saber_Besch "saber") ;
|
||||||
|
|
||||||
ter_V : V ;
|
have_V : V ;
|
||||||
ter_V = mkV (ter_Besch "ter") ;
|
have_V = mkV (ter_Besch "ter") ;
|
||||||
|
|
||||||
} ;
|
} ;
|
||||||
|
|||||||
@@ -14,8 +14,6 @@ resource MorphoPor = CommonRomance, ResPor **
|
|||||||
coding=utf8 ;
|
coding=utf8 ;
|
||||||
--2 Nouns
|
--2 Nouns
|
||||||
--
|
--
|
||||||
-- The following macro is useful for creating the forms of
|
|
||||||
-- number-dependent tables, such as common nouns.
|
|
||||||
|
|
||||||
oper
|
oper
|
||||||
-- For example:
|
-- For example:
|
||||||
@@ -43,29 +41,40 @@ oper
|
|||||||
nomCanal : Str -> Number => Str = \canal ->
|
nomCanal : Str -> Number => Str = \canal ->
|
||||||
numForms canal (init canal + "is") ;
|
numForms canal (init canal + "is") ;
|
||||||
|
|
||||||
acuteVowel : Str -> Str = \v ->
|
nomReptil : Str -> Number => Str = \reptil ->
|
||||||
|
numForms reptil (tk 2 reptil + "eis") ;
|
||||||
|
|
||||||
|
nomNounNoun : Str -> Str -> Number => Str = \couve,flor ->
|
||||||
|
let couves = mkNomReg' couve ;
|
||||||
|
flores = mkNomReg' flor
|
||||||
|
in numForms (couve + "-" + flor) (couves.s ! Pl + "-" + flores.s ! Pl) ;
|
||||||
|
|
||||||
|
nomVerbNoun : Str -> Str -> Number => Str = \guarda,chuva ->
|
||||||
|
let chuvas = mkNomReg' chuva
|
||||||
|
in numForms (guarda + "-" + chuva) (guarda + "-" + chuvas.s ! Pl) ;
|
||||||
|
|
||||||
|
nomChapeudesol : Str -> Str -> Str -> Number => Str = \chapeu,de,sol ->
|
||||||
|
let chapeus = mkNomReg' chapeu
|
||||||
|
in numForms (chapeu + "-" + de + "-" + sol) (chapeus.s ! Pl + "-" + de + "-" + sol) ;
|
||||||
|
|
||||||
|
vowelToAcute : Str -> Str = \v ->
|
||||||
case v of {
|
case v of {
|
||||||
"a" => "á" ;
|
"a" => "á" ;
|
||||||
"e" => "é" ;
|
"e" => "é" ;
|
||||||
"i" => "í" ;
|
"i" => "í" ;
|
||||||
"o" => "ó" ;
|
"o" => "ó" ;
|
||||||
"u" => "ú" ;
|
"u" => "ú" ;
|
||||||
_ => error "input must be vowel character."
|
_ => error ("input" ++ v ++ "must be vowel character.")
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
nomReptil : Str -> Number => Str = \reptil ->
|
diacriticToVowel : Str -> Str = \v ->
|
||||||
numForms reptil (tk 2 reptil + "eis") ;
|
case v of {
|
||||||
|
("á"|"â"|"ã") => "a" ;
|
||||||
nomFenol : Str -> Number => Str = \fenol ->
|
("é"|"ê") => "e" ;
|
||||||
case fenol of {
|
"í" => "i" ;
|
||||||
fen + v@("a"|"e"|"i"|"o"|"u") + "l" => numForms fenol (fen + acuteVowel v + "is")
|
("ó"|"ô"|"õ") => "o" ;
|
||||||
};
|
"ú" => "u" ;
|
||||||
|
_ => error ("input" ++ v ++ "must be a vowel character with an accent.")
|
||||||
nomVowelL : Str -> Number => Str = \nom ->
|
|
||||||
-- papel -> papéis, móvel -> móveis
|
|
||||||
case occurs "áéíúó" nom of {
|
|
||||||
PTrue => nomCanal nom ;
|
|
||||||
PFalse => nomFenol nom
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- Common nouns are inflected in number and have an inherent gender.
|
-- Common nouns are inflected in number and have an inherent gender.
|
||||||
@@ -76,41 +85,65 @@ oper
|
|||||||
mkNounIrreg : Str -> Str -> Gender -> Noun = \mec,mecs ->
|
mkNounIrreg : Str -> Str -> Gender -> Noun = \mec,mecs ->
|
||||||
mkNoun (numForms mec mecs) ;
|
mkNoun (numForms mec mecs) ;
|
||||||
|
|
||||||
smartGenNoun : Str -> Gender -> Noun = \vinho,g -> case vinho of {
|
|
||||||
rapa + ("z"|"s") => -- capataz/Masc, flor/Fem, obus/Masc
|
|
||||||
mkNoun (nomRapaz vinho) g ;
|
|
||||||
can + "al" => -- canal/Masc, vogal/Fem
|
|
||||||
mkNoun (nomCanal vinho) g ;
|
|
||||||
pap + "el" => -- cascavel/Fem, infiel/Masc
|
|
||||||
mkNoun (nomVowelL vinho) g ;
|
|
||||||
home + "m" => -- homem/Masc, nuvem/nuvens
|
|
||||||
mkNoun (nomNuvem vinho) g ;
|
|
||||||
tóra + "x" => -- tórax/Masc, xerox/Fem
|
|
||||||
mkNoun (nomAreia vinho) g ;
|
|
||||||
_ =>
|
|
||||||
mkNoun (nomVinho vinho) g
|
|
||||||
} ;
|
|
||||||
|
|
||||||
mkNomReg : Str -> Noun = \vinho -> case vinho of {
|
mkNomReg : Str -> Noun = \vinho -> case vinho of {
|
||||||
cas + ("a" | "ã" | "dade" | "tude" | "ise" | "ite") =>
|
chapéu + "-" + de + "-" + sol => mkNoun (nomChapeudesol chapéu de sol) Masc ;
|
||||||
-- casa, artesã, saudade, juventude, marquise, artrite
|
|
||||||
mkNoun (nomVinho vinho) Fem ;
|
-- use nomVerbNoun for compounds of verb+noun
|
||||||
va + "gem" =>
|
couve + "-" + flor => mkNoun (nomNounNoun couve flor) Masc ;
|
||||||
mkNoun (nomNuvem vinho) Fem ;
|
|
||||||
certid + "ão" => -- other rules depend on stress, can this be built with gf?
|
_ => mkNomReg' vinho
|
||||||
mkNoun (nomFalcao vinho) Fem ;
|
|
||||||
proble + ("ma" | "n" | "o" | "á") => -- problema, líquen, carro, maracujá
|
|
||||||
mkNoun (nomVinho vinho) Masc ;
|
|
||||||
can + "r" => -- feminine words ending with 'r' usually are also masculine
|
|
||||||
mkNoun (nomRapaz vinho) Masc ;
|
|
||||||
can + ("i" | "u") + "l" => -- canil, azul | what about fóssil?
|
|
||||||
mkNoun (nomCanal vinho) Masc ;
|
|
||||||
fen + "ol" => mkNoun (nomVowelL vinho) Masc ;
|
|
||||||
urub + "u" => mkNoun (nomVinho vinho) Masc ;
|
|
||||||
_ => smartGenNoun vinho Masc
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
--2 Adjectives
|
mkNomReg' : Str -> Noun = \vinho -> case vinho of {
|
||||||
|
|
||||||
|
-- casa, artesã, saudade, juventude, marquise, artrite
|
||||||
|
cas + ("a"|"ã"|"dade"|"tude"|"ise"|"ite") =>
|
||||||
|
mkNoun (nomVinho vinho) Fem ;
|
||||||
|
|
||||||
|
va + "gem" => mkNoun (nomNuvem vinho) Fem ;
|
||||||
|
|
||||||
|
-- if syllable stress is not on -ão, orthographical rules say that
|
||||||
|
-- it should be marked with an accented letter
|
||||||
|
s + ("ó"|"â"|"á"|"ê"|"é"|"ô"|"í"|"ú") + t + "ão"
|
||||||
|
=> mkNoun (nomVinho vinho) Masc ; -- although gender is still not predictable, counterexample *bênção
|
||||||
|
|
||||||
|
-- fails for e.g. *coração, but the productive morpheme -ção is
|
||||||
|
-- feminine (https://en.wiktionary.org/wiki/-%C3%A7%C3%A3o#Suffix)
|
||||||
|
revolu + "ção" => mkNoun (nomFalcao vinho) Fem ;
|
||||||
|
|
||||||
|
certid + "ão" =>
|
||||||
|
mkNoun (nomFalcao vinho) Masc ;
|
||||||
|
|
||||||
|
-- problema, carro, maracujá
|
||||||
|
-- proble + ("ma"|"o"|"á") =>
|
||||||
|
-- mkNoun (nomVinho vinho) Masc ;
|
||||||
|
|
||||||
|
ma + ("r"|"z"|"n") => mkNoun (nomRapaz vinho) Masc ;
|
||||||
|
|
||||||
|
-- fóssil, míssil, móbil, portátil, útil
|
||||||
|
f + ("ó"|"á"|"é"|"í"|"ú") + s + "il" => mkNoun (nomReptil vinho) Masc ;
|
||||||
|
|
||||||
|
can + ("a"|"e"|"o"|"u") + "l" => mkNoun (nomCanal vinho) Masc ;
|
||||||
|
|
||||||
|
can + "il" => mkNoun (numForms vinho (can + "is")) Masc ;
|
||||||
|
|
||||||
|
home + "m" => mkNoun (nomNuvem vinho) Masc ;
|
||||||
|
|
||||||
|
g + v@("á"|"é"|"í"|"ó"|"ú"|"ê") + "s" => mkNoun (numForms vinho (g + (diacriticToVowel v) + "ses")) Masc ;
|
||||||
|
|
||||||
|
ônibu + "s" => mkNoun (nomAreia vinho) Masc ;
|
||||||
|
|
||||||
|
--urub + "u" => mkNoun (nomVinho vinho) Masc ;
|
||||||
|
|
||||||
|
-- tórax/Masc, xerox/Fem
|
||||||
|
tóra + "x" => mkNoun (nomAreia vinho) Masc ;
|
||||||
|
|
||||||
|
_ => mkNoun (nomVinho vinho) Masc
|
||||||
|
|
||||||
|
} ;
|
||||||
|
|
||||||
|
--3 Adjectives
|
||||||
--
|
--
|
||||||
-- Adjectives are conveniently seen as gender-dependent nouns. Here
|
-- Adjectives are conveniently seen as gender-dependent nouns. Here
|
||||||
-- are some patterns. First one that describes the worst case.
|
-- are some patterns. First one that describes the worst case.
|
||||||
@@ -124,78 +157,45 @@ oper
|
|||||||
}
|
}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
mkAdj2 : (_,_: Str) -> Adj ;
|
mkAdj4 : (_,_,_,_ : Str) -> Adj ;
|
||||||
mkAdj2 aj av = let
|
mkAdj4 ms fs mp fp =
|
||||||
adj = mkAdjReg aj
|
let adv : Str = case fs of {
|
||||||
|
exeg + vo@("é"|"á"|"í"|"ó"|"ú"|"ê"|"ô") + tica
|
||||||
|
=> exeg + (diacriticToVowel vo) + tica ;
|
||||||
|
|
||||||
|
comu + "m" => comu ; -- for Brazilian Portuguese
|
||||||
|
|
||||||
|
_ => fs
|
||||||
|
} + "mente" ;
|
||||||
in {
|
in {
|
||||||
s = table {
|
s = table {
|
||||||
ASg g _ => adj.s ! ASg g APred ;
|
ASg g _ => genForms ms fs ! g ;
|
||||||
APl g => adj.s ! APl g ;
|
APl g => genForms mp fp ! g ;
|
||||||
AA => av
|
AA => adv
|
||||||
}
|
}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- Then the regular and invariant patterns.
|
mkAdjFromNouns : Noun -> Noun -> Adj ;
|
||||||
|
mkAdjFromNouns nm nf = mkAdj4 (nm.s ! Sg) (nf.s ! Sg) (nm.s ! Pl) (nf.s ! Pl) ;
|
||||||
|
|
||||||
adjPreto : Str -> Adj = \preto ->
|
mkAdjReg2 : Str -> Str -> Adj ;
|
||||||
let
|
mkAdjReg2 ms fs = mkAdjFromNouns (mkNomReg ms) (mkNomReg fs) ;
|
||||||
pret = Predef.tk 1 preto
|
|
||||||
in
|
|
||||||
mkAdj preto (pret + "a") (pret + "os") (pret + "as") (pret + "amente") ;
|
|
||||||
|
|
||||||
-- masculine and feminine are identical:
|
|
||||||
-- adjectives ending with -e, -a and many but not all that end in a
|
|
||||||
-- consonant
|
|
||||||
adjUtil : Str -> Str -> Adj = \útil,úteis ->
|
|
||||||
mkAdj útil útil úteis úteis (útil + "mente") ;
|
|
||||||
|
|
||||||
-- adjectives that end in consonant but have different masc and fem
|
|
||||||
-- forms español, hablador ...
|
|
||||||
adjOuvidor : Str -> Str -> Adj = \ouvidor,ouvidora ->
|
|
||||||
mkAdj ouvidor ouvidora (ouvidor + "es") (ouvidor + "as") (ouvidora + "mente") ;
|
|
||||||
|
|
||||||
adjBlu : Str -> Adj = \blu ->
|
|
||||||
mkAdj blu blu blu blu blu ; --- blasé
|
|
||||||
|
|
||||||
-- francês francesa franceses francesas
|
|
||||||
adjFrances : Str -> Adj = \francês ->
|
|
||||||
let franc : Str = Predef.tk 2 francês ;
|
|
||||||
frances : Str = franc + "es" ;
|
|
||||||
in mkAdj francês (frances + "a") (frances + "es") (frances + "as") (frances + "amente") ;
|
|
||||||
|
|
||||||
|
|
||||||
-- alemão alemã alemães alemãs
|
|
||||||
-- is there really a need for this? is it as useful as the spanish
|
|
||||||
-- one?
|
|
||||||
adjVo : Str -> Adj = \alemão ->
|
|
||||||
let alemã : Str = init alemão ;
|
|
||||||
alem : Str = init alemã ;
|
|
||||||
ã : Str = last alemã ;
|
|
||||||
v : Str = case ã of {
|
|
||||||
"ã" => "a"
|
|
||||||
} ;
|
|
||||||
alemvo : Str = alem + v + "o" ;
|
|
||||||
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")
|
|
||||||
(europe + "iamente") ;
|
|
||||||
|
|
||||||
|
-- smart paradigm for adjectives amounts to guessing the feminine
|
||||||
|
-- form from the masculine form given, and then using the noun smart
|
||||||
|
-- paradigm for the plural forms
|
||||||
mkAdjReg : Str -> Adj = \a ->
|
mkAdjReg : Str -> Adj = \a ->
|
||||||
case a of {
|
let mkAdj : Str -> Adj = mkAdjReg2 a ;
|
||||||
pret + "o" => adjPreto a ;
|
in case a of {
|
||||||
anarquist + v@("e" | "a") => adjUtil a (a + "s") ;
|
alem + "ão" => mkAdj (alem + "ã") ; -- fails for patrão/patroa
|
||||||
ouvido + "r" => adjOuvidor a (ouvido + "ra") ;
|
pret + "o" => mkAdj (pret + "a") ;
|
||||||
chin + "ês" => adjFrances a ;
|
ouvido + "r" => mkAdj (ouvido + "ra") ;
|
||||||
europ + "eu" => adjEuropeu a ;
|
chin + "ês" => mkAdj (chin + "esa") ;
|
||||||
alem + "ão" => adjVo a ;
|
europ + "eu" => mkAdj (europ + "eia") ;
|
||||||
provav + v@("e" | "i") + "l" => adjUtil a (provav + "eis") ; -- fails at pueril
|
_ => mkAdj a
|
||||||
nomina + "l" => adjUtil a (nomina + "is") ;
|
|
||||||
jove + "m" => adjUtil a (jove + "ns") ;
|
|
||||||
_ => adjUtil a (a + "s")
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
--2 Personal pronouns
|
--4 Personal pronouns
|
||||||
--
|
--
|
||||||
-- All the eight personal pronouns can be built by the following macro.
|
-- All the eight personal pronouns can be built by the following macro.
|
||||||
-- The use of "ne" as atonic genitive is debatable.
|
-- The use of "ne" as atonic genitive is debatable.
|
||||||
@@ -241,7 +241,7 @@ oper
|
|||||||
(pronAgr pron g n p) ** pronLin você o lhe Você ;
|
(pronAgr pron g n p) ** pronLin você o lhe Você ;
|
||||||
|
|
||||||
|
|
||||||
--2 Determiners
|
--5 Determiners
|
||||||
--
|
--
|
||||||
-- Determiners, traditionally called indefinite pronouns, are
|
-- Determiners, traditionally called indefinite pronouns, are
|
||||||
-- inflected in gender and number, like adjectives.
|
-- inflected in gender and number, like adjectives.
|
||||||
@@ -281,4 +281,4 @@ oper
|
|||||||
n = number
|
n = number
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
}
|
} ;
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ concrete NumeralPor of Numeral = CatPor [Numeral,Digits] **
|
|||||||
regCard vigesimo = case vigesimo of {
|
regCard vigesimo = case vigesimo of {
|
||||||
-- to handle milhão case (in ParseExtend module)
|
-- to handle milhão case (in ParseExtend module)
|
||||||
milh + "ão" => \g, n -> genNumForms vigesimo vigesimo (milh + "ões") vigesimo ! g ! n;
|
milh + "ão" => \g, n -> genNumForms vigesimo vigesimo (milh + "ões") vigesimo ! g ! n;
|
||||||
_ => pronForms (adjPreto vigesimo)
|
_ => pronForms (mkAdjReg vigesimo)
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
spl : (CardOrd => Str) -> {s : CardOrd => Str ; n : Number} = \s -> {
|
spl : (CardOrd => Str) -> {s : CardOrd => Str ; n : Number} = \s -> {
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
--# -path=.:../romance:../common:../abstract:../prelude
|
--# -path=.:../romance:../common:../abstract:../prelude
|
||||||
|
|
||||||
|
-- ATTENTION: this module is documented with gfdoc; please be mindful --%
|
||||||
|
-- of the way comments are structured; read gfdoc's documentation if --%
|
||||||
|
-- you intend to change any comments in any way. --%
|
||||||
|
|
||||||
--1 Portuguese Lexical Paradigms
|
--1 Portuguese Lexical Paradigms
|
||||||
--
|
--
|
||||||
--
|
--
|
||||||
@@ -13,7 +17,10 @@
|
|||||||
-- The main difference with $MorphoPor.gf$ is that the types referred
|
-- The main difference with $MorphoPor.gf$ is that the types referred
|
||||||
-- to are compiled resource grammar types. We have moreover had the
|
-- to are compiled resource grammar types. We have moreover had the
|
||||||
-- design principle of always having existing forms, rather than
|
-- design principle of always having existing forms, rather than
|
||||||
-- stems, as string arguments of the paradigms.
|
-- stems, as string arguments of the paradigms. Another important
|
||||||
|
-- difference with $MorphoPor.gf$ is that this API is committed to
|
||||||
|
-- backward-compatibility in a way that $MorphoPor.gf$ is not, so you
|
||||||
|
-- are discouraged to use the latter.
|
||||||
--
|
--
|
||||||
-- The structure of functions for each word class $C$ is the
|
-- The structure of functions for each word class $C$ is the
|
||||||
-- following: first we give a handful of patterns that aim to cover
|
-- following: first we give a handful of patterns that aim to cover
|
||||||
@@ -64,58 +71,57 @@ oper
|
|||||||
-- 'dative' "a").
|
-- 'dative' "a").
|
||||||
|
|
||||||
accusative : Prep ; -- direct object
|
accusative : Prep ; -- direct object
|
||||||
accusative = complAcc ** {lock_Prep = <>} ;
|
accusative = lin Prep complAcc ;
|
||||||
|
|
||||||
genitive : Prep ; -- preposition "de" and its contractions
|
genitive : Prep ; -- preposition "de" and its contractions
|
||||||
genitive = complGen ** {lock_Prep = <>} ;
|
genitive = lin Prep complGen ;
|
||||||
|
|
||||||
dative : Prep ; -- preposition "a" and its contractions
|
dative : Prep ; -- preposition "a" and its contractions
|
||||||
dative = complDat ** {lock_Prep = <>} ;
|
dative = lin Prep complDat ;
|
||||||
|
|
||||||
mkPrep = overload {
|
mkPrep = overload {
|
||||||
mkPrep : Str -> Prep = -- other preposition
|
mkPrep : Str -> Prep -- other preposition
|
||||||
\p -> {s = p ; c = Acc ; isDir = False ; lock_Prep = <>} ;
|
= \p -> lin Prep {s = p ; c = Acc ; isDir = False} ;
|
||||||
mkPrep : Str -> Case -> Prep =
|
mkPrep : Str -> Case -> Prep -- compound prepositions, e.g. "antes de", made as ``mkPrep "antes" genitive``
|
||||||
-- compound prepositions, e.g. "antes de", made as mkPrep
|
= \p,c -> lin Prep {s = p ; c = c ; isDir = False}
|
||||||
-- "antes" genitive
|
|
||||||
\p,c -> {s = p ; c = c ; isDir = False ; lock_Prep = <>}
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|
||||||
--2 Nouns
|
--2 Nouns
|
||||||
|
|
||||||
regN : Str -> N ;
|
regN : Str -> N ; --%
|
||||||
regN x = mkNomReg x ** {lock_N = <>} ;
|
regN x = lin N (mkNomReg x) ;
|
||||||
|
|
||||||
femN : N -> N ;
|
femN : N -> N ; --%
|
||||||
femN x = {s = x.s ; g = feminine ; lock_N = <>} ;
|
femN n = n ** {g = feminine} ;
|
||||||
|
|
||||||
mascN : N -> N ;
|
mascN : N -> N ; --%
|
||||||
mascN x = {s = x.s ; g = masculine ; lock_N = <>} ;
|
mascN n = n ** {g = masculine} ;
|
||||||
|
|
||||||
mk2N : (bastão, bastões : Str) -> Gender -> N ;
|
mk2N : (bastão, bastões : Str) -> Gender -> N ; --%
|
||||||
mk2N x y g = mkNounIrreg x y g ** {lock_N = <>} ;
|
mk2N x y g = lin N (mkNounIrreg x y g) ;
|
||||||
|
|
||||||
--- [] update this docstring
|
|
||||||
-- The regular function takes the singular form and the gender, and
|
-- The regular function takes the singular form and the gender, and
|
||||||
-- computes the plural and the gender by a heuristic. The heuristic
|
-- computes the plural and the gender by a heuristic (see MorphoPor
|
||||||
-- says that the gender is feminine for nouns ending with "a" or
|
-- for which heuristic).
|
||||||
-- "z", and masculine for all other words. Nouns ending with "a",
|
|
||||||
-- "o", "e" have the plural with "s", those ending with "z" have
|
|
||||||
-- "ces" in plural; all other nouns have "es" as plural ending. The
|
|
||||||
-- accent is not dealt with.
|
|
||||||
mkN = overload {
|
mkN = overload {
|
||||||
-- predictable; "-a" for feminine, otherwise Masculine
|
|
||||||
mkN : (luz : Str) -> N = regN ;
|
mkN : (revolução : Str) -> N -- predictable nouns
|
||||||
-- force plural
|
= regN ;
|
||||||
mkN : (alemão, alemães : Str) -> N =
|
|
||||||
\s,p -> regN s ** {s = numForms s p} ;
|
mkN : (alemão, alemães : Str) -> N -- force noun plural, guess gender
|
||||||
|
= \s,p -> regN s ** {s = numForms s p} ;
|
||||||
-- force gender
|
-- force gender
|
||||||
mkN : Str -> Gender -> N =
|
mkN : (mapa : Str) -> Gender -> N -- force gender, guess plural
|
||||||
\s,g -> regN s ** {g = g} ;
|
= \s,g -> regN s ** {g = g} ;
|
||||||
-- The worst case has two forms (singular + plural) and the
|
|
||||||
-- gender.
|
mkN : (mão, mãos : Str) -> Gender -> N -- the worst case demands two forms (singular + plural) and the gender.
|
||||||
mkN : (bastão,bastões : Str) -> Gender -> N = mk2N
|
= mk2N ;
|
||||||
|
|
||||||
|
mkN : (número : N) -> (de_telefone : Str) -> N -- compound noun with non-inflecting second art, e.g. "número" + "de telefone"
|
||||||
|
= compN ;
|
||||||
|
|
||||||
|
mkN : (forma, finita : N) -> N -- compound with inflecting second part, e.g. "forma" + "finita"
|
||||||
|
= compNN
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
--3 Compound nouns
|
--3 Compound nouns
|
||||||
@@ -125,32 +131,32 @@ oper
|
|||||||
-- could be formed in syntax, but we give a shortcut here since they
|
-- could be formed in syntax, but we give a shortcut here since they
|
||||||
-- are frequent in lexica.
|
-- are frequent in lexica.
|
||||||
|
|
||||||
compN : N -> Str -> N ; -- compound, e.g. "número" + "de telefone"
|
compN : N -> Str -> N ; --%
|
||||||
compN x y = {s = \\n => x.s ! n ++ y ; g = x.g ; lock_N = <>} ;
|
compN x y = x ** {s = \\n => x.s ! n ++ y} ;
|
||||||
|
|
||||||
compNN : N -> N -> N ; -- compound, e.g. "forma" + "finita"
|
compNN : N -> N -> N ; --%
|
||||||
compNN x y = x ** {s = \\n => x.s ! n ++ y.s ! n} ;
|
compNN x y = x ** {s = \\n => x.s ! n ++ y.s ! n} ;
|
||||||
|
|
||||||
--3 Relational nouns
|
--3 Relational nouns
|
||||||
--
|
--
|
||||||
-- Relational nouns ("filha de x") need a case and a preposition.
|
-- Relational nouns ("filha de x") need a case and a preposition.
|
||||||
|
|
||||||
mkN2 : N -> Prep -> N2 ; -- relational noun with prepositio
|
mkN2 : N -> Prep -> N2 ; -- relational noun with preposition, e.g. "comida para (viagem)"
|
||||||
mkN2 = \n,p -> n ** {lock_N2 = <> ; c2 = p} ;
|
mkN2 = \n,p -> lin N2 (n ** {c2 = p}) ;
|
||||||
|
|
||||||
-- The most common cases are the genitive "de" and the dative "a",
|
-- The most common cases are the genitive "de" and the dative "a",
|
||||||
-- with the empty preposition.
|
-- with the empty preposition.
|
||||||
|
|
||||||
deN2 : N -> N2 ; -- relational noun with preposition "de"
|
deN2 : N -> N2 ; -- relational noun with preposition "de", e.g. "filho de (fulano)"
|
||||||
deN2 n = mkN2 n genitive ;
|
deN2 n = mkN2 n genitive ;
|
||||||
|
|
||||||
aN2 : N -> N2 ; -- relational noun with preposition "a"
|
aN2 : N -> N2 ; -- relational noun with preposition "a", e.g. "molho a francesa"
|
||||||
aN2 n = mkN2 n dative ;
|
aN2 n = mkN2 n dative ;
|
||||||
|
|
||||||
-- Three-place relational nouns ("a conexão de x a y") need two
|
-- Three-place relational nouns ("a conexão de x a y") need two
|
||||||
-- prepositions.
|
-- prepositions.
|
||||||
mkN3 : N -> Prep -> Prep -> N3 ; -- prepositions for two complements
|
mkN3 : N -> Prep -> Prep -> N3 ; -- relational noun with two prepositions for two complements, e.g. "a relação de (fulana) com (cicrana)"
|
||||||
mkN3 = \n,p,q -> n ** {lock_N3 = <> ; c2 = p ; c3 = q} ;
|
mkN3 = \n,p,q -> lin N3 (n ** {c2 = p ; c3 = q}) ;
|
||||||
|
|
||||||
--3 Relational common noun phrases
|
--3 Relational common noun phrases
|
||||||
--
|
--
|
||||||
@@ -165,7 +171,7 @@ oper
|
|||||||
-- Proper names need a string and a gender. The default gender is
|
-- Proper names need a string and a gender. The default gender is
|
||||||
-- feminine for names ending with "a", otherwise masculine.
|
-- feminine for names ending with "a", otherwise masculine.
|
||||||
|
|
||||||
regPN : Str -> PN ; -- feminine for "-a", otherwise masculine
|
regPN : Str -> PN ; --%
|
||||||
regPN x = mk2PN x g where {
|
regPN x = mk2PN x g where {
|
||||||
g = case last x of {
|
g = case last x of {
|
||||||
"a" => feminine ;
|
"a" => feminine ;
|
||||||
@@ -173,87 +179,92 @@ oper
|
|||||||
}
|
}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
mk2PN : Str -> Gender -> PN ; -- Pilar
|
mk2PN : Str -> Gender -> PN ; --%
|
||||||
mk2PN x g = {s = x ; g = g} ** {lock_PN = <>} ;
|
mk2PN x g = lin PN {s = x ; g = g} ;
|
||||||
|
|
||||||
mkPN = overload {
|
mkPN = overload {
|
||||||
-- feminine for "-a"
|
|
||||||
mkPN : (Anna : Str) -> PN = regPN ;
|
mkPN : (Anna : Str) -> PN -- regular proper noun: feminine for "-a", else masculine
|
||||||
-- force gender
|
= regPN ;
|
||||||
mkPN : (Pilar : Str) -> Gender -> PN = mk2PN ;
|
|
||||||
-- gender from Noun
|
mkPN : (Pilar : Str) -> Gender -> PN -- force gender of proper noun
|
||||||
mkPN : N -> PN = \n -> lin PN {s = n.s ! Sg ; g = n.g} ;
|
= mk2PN ;
|
||||||
|
mkPN : N -> PN -- build proper noun from noun, taking gender and singular form
|
||||||
|
= \n -> lin PN {s = n.s ! Sg ; g = n.g} ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
--2 Adjectives
|
--2 Adjectives
|
||||||
compADeg : A -> A ;
|
compADeg : A -> A ; --%
|
||||||
compADeg a = lin A {
|
compADeg a = a ** {
|
||||||
s = table {
|
s = table {
|
||||||
Posit => a.s ! Posit ;
|
Posit => a.s ! Posit ;
|
||||||
_ => \\f => "mais" ++ a.s ! Posit ! f
|
_ => \\f => "mais" ++ a.s ! Posit ! f
|
||||||
} ;
|
} ;
|
||||||
isPre = a.isPre ;
|
|
||||||
copTyp = a.copTyp
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
regA : Str -> A ;
|
liftAdj : Adj -> A ; --%
|
||||||
regA a = compADeg (lin A {s = \\_ => (mkAdjReg a).s ; isPre = False ; copTyp = serCopula}) ;
|
liftAdj adj = compADeg (lin A {s = \\_ => adj.s ; isPre = False ; copTyp = serCopula}) ;
|
||||||
|
|
||||||
mk2A : (único,unicamente : Str) -> A ;
|
regA : Str -> A ; --%
|
||||||
mk2A adj adv = compADeg {s = \\_ => (mkAdj2 adj adv).s ; isPre = False ;
|
regA a = liftAdj (mkAdjReg a) ;
|
||||||
copTyp = serCopula ;
|
|
||||||
lock_A = <>} ;
|
|
||||||
|
|
||||||
mk5A : (preto,preta,pretos,pretas,pretamente : Str) -> A ;
|
mk2A : (patrão,patroa : Str) -> A ; --%
|
||||||
mk5A a b c d e = compADeg {s = \\_ => (mkAdj a b c d e).s ;
|
mk2A ms fs = liftAdj (mkAdjReg2 ms fs) ;
|
||||||
isPre = False ; copTyp = serCopula ;
|
|
||||||
lock_A = <>} ;
|
|
||||||
|
|
||||||
adjCopula : A -> CopulaType -> A ;
|
mk4A : (bobão,bobona,bobões,bobonas : Str) -> A ; --%
|
||||||
|
mk4A a b c d = liftAdj (mkAdj4 a b c d) ;
|
||||||
|
|
||||||
|
mk5A : (preto,preta,pretos,pretas,pretamente : Str) -> A ; --%
|
||||||
|
mk5A a b c d e = liftAdj (mkAdj a b c d e) ;
|
||||||
|
|
||||||
|
adjCopula : A -> CopulaType -> A ; --%
|
||||||
adjCopula a cop = a ** {copTyp = cop} ;
|
adjCopula a cop = a ** {copTyp = cop} ;
|
||||||
|
|
||||||
mkADeg : A -> A -> A ;
|
mkADeg : A -> A -> A ; --%
|
||||||
mkADeg a b = lin A {
|
mkADeg a b = a ** {
|
||||||
s = table {
|
s = table {
|
||||||
Posit => a.s ! Posit ;
|
Posit => a.s ! Posit ;
|
||||||
_ => b.s ! Posit
|
_ => b.s ! Posit
|
||||||
-- Compar => b.s ! Posit ;
|
-- Compar => b.s ! Posit ;
|
||||||
-- Superl => "o" ++ b.s ! Posit ;
|
-- Superl => "o" ++ b.s ! Posit ;
|
||||||
} ;
|
}
|
||||||
isPre = a.isPre ;
|
|
||||||
copTyp = a.copTyp
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
invarA : Str -> A ; -- invariable adjective, e.g. "simples"
|
||||||
|
invarA a = liftAdj (mkAdj4 a a a a) ;
|
||||||
|
|
||||||
mkNonInflectA : A -> Str -> A ;
|
mkNonInflectA : A -> Str -> A ;
|
||||||
mkNonInflectA = \blanco,hueso -> blanco ** {s = \\x,y => blanco.s ! x ! y ++ hueso } ;
|
mkNonInflectA blanco hueso = blanco ** {
|
||||||
|
s = \\x,y => blanco.s ! x ! y ++ hueso
|
||||||
|
} ;
|
||||||
|
|
||||||
mkA = overload {
|
mkA = overload {
|
||||||
|
|
||||||
-- For regular adjectives, all forms are derived from the masculine
|
-- For regular adjectives, all forms are derived from the
|
||||||
-- singular. The types of adjectives that are recognized are "alto",
|
-- masculine singular. The types of adjectives that are recognized
|
||||||
-- "fuerte", "util". Comparison is formed by "mas".
|
-- are "alto", "forte", "útil" and others. Comparison is formed by "mais".
|
||||||
mkA : (bobo : Str) -> A
|
mkA : (bobo : Str) -> A -- predictable adjective
|
||||||
= regA ; -- predictable adjective
|
= regA ;
|
||||||
|
|
||||||
-- Some adjectives need the feminine form separately.
|
mkA : (espanhol,espanhola : Str) -> A -- some adjectives need the feminine form separately
|
||||||
mkA : (espanhol,espanhola : Str) -> A
|
|
||||||
= mk2A ;
|
= mk2A ;
|
||||||
|
|
||||||
-- One-place adjectives compared with "mais" need five forms in the
|
mkA : (burrão,burrona,burrões,burronas : Str) -> A -- provide masculine and feminine singular and plural forms (very rarely does one need to specify the adverbial form)
|
||||||
-- worst case (masc and fem singular, masc plural, adverbial).
|
= mk4A ;
|
||||||
mkA : (bobo,boba,bobos,bobas,bobamente : Str) -> A = mk5A ;
|
|
||||||
|
|
||||||
-- In the worst case, two separate adjectives are given: the positive
|
mkA : (gabarolas,gabarolas,gabarolas,gabarolas,gabarolamente : Str) -> A -- one-place adjectives compared with "mais" need five forms in the worst case (masc and fem singular, masc and fem plural, adverbial).
|
||||||
-- ("bueno"), and the comparative ("mejor").
|
= mk5A ;
|
||||||
-- special comparison with "mais" as default
|
|
||||||
mkA : (bom : A) -> (melhor : A) -> A
|
--
|
||||||
|
mkA : (bom : A) -> (melhor : A) -> A -- two separate adjectives are given: the positive ("bom"), and the comparative ("melhor"). Comparison with "mais" is the default.
|
||||||
= mkADeg ;
|
= mkADeg ;
|
||||||
|
|
||||||
mkA : (blanco : A) -> (hueso : Str) -> A -- noninflecting component after the adjective
|
mkA : (blanco : A) -> (hueso : Str) -> A -- noninflecting component after the adjective
|
||||||
= mkNonInflectA ;
|
= mkNonInflectA ;
|
||||||
|
|
||||||
mkA : A -> CopulaType -> A -- force copula type
|
mkA : A -> CopulaType -> A -- force copula type, e.g. "João está doente" instead of "João é doente". Choose among ``serCopula``, ``estarCopula``, and ``ficarCopula``.
|
||||||
= adjCopula ;
|
= adjCopula ;
|
||||||
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- The functions above create postfix adjectives. To switch them to
|
-- The functions above create postfix adjectives. To switch them to
|
||||||
@@ -261,43 +272,58 @@ oper
|
|||||||
-- in "bom vinho"), the following function is provided.
|
-- in "bom vinho"), the following function is provided.
|
||||||
|
|
||||||
prefixA : A -> A ; -- adjective before noun (default after noun)
|
prefixA : A -> A ; -- adjective before noun (default after noun)
|
||||||
prefixA = prefA ;
|
prefixA a = a ** {isPre = True} ;
|
||||||
|
|
||||||
prefA : A -> A ;
|
|
||||||
prefA a = lin A {s = a.s ; isPre = True ; copTyp = a.copTyp} ;
|
|
||||||
|
|
||||||
--3 Two-place adjectives
|
--3 Two-place adjectives
|
||||||
--
|
--
|
||||||
-- Two-place adjectives need a preposition for their second argument.
|
-- Two-place adjectives need a preposition for their second argument.
|
||||||
|
|
||||||
mkA2 : A -> Prep -> A2 ; -- e.g. "casado" + dative
|
mkA2 : A -> Prep -> A2 ; -- two-place adjectives, e.g. "casado" + "com"
|
||||||
mkA2 a p = a ** {c2 = p ; lock_A2 = <>} ;
|
mkA2 a p = lin A2 a ** {c2 = p} ;
|
||||||
|
|
||||||
--2 Adverbs
|
--2 Adverbs
|
||||||
|
|
||||||
-- Adverbs are not inflected. Most lexical ones have position after
|
-- Adverbs are not inflected. Most lexical ones have position after
|
||||||
-- the verb.
|
-- the verb.
|
||||||
|
|
||||||
mkAdv : Str -> Adv ;
|
mkAdv : Str -> Adv ; -- after the verb adverb
|
||||||
mkAdv x = ss x ** {lock_Adv = <>} ;
|
mkAdv x = lin Adv (ss x) ;
|
||||||
|
|
||||||
-- Some appear next to the verb (e.g. "sempre").
|
-- Some appear next to the verb (e.g. "sempre").
|
||||||
|
|
||||||
mkAdV : Str -> AdV ;
|
mkAdV : Str -> AdV ; -- before the verb adverb, e.g. "nunca"
|
||||||
mkAdV x = ss x ** {lock_AdV = <>} ;
|
mkAdV x = lin AdV (ss x) ;
|
||||||
|
|
||||||
-- Adverbs modifying adjectives and sentences can also be formed.
|
-- Adverbs modifying adjectives and sentences can also be formed.
|
||||||
|
|
||||||
mkAdA : Str -> AdA ;
|
mkAdA : Str -> AdA ; -- adverb modifying adjectives, e.g. "muito"
|
||||||
mkAdA x = ss x ** {lock_AdA = <>} ;
|
mkAdA x = lin AdA (ss x) ;
|
||||||
|
|
||||||
mkAdN : Str -> AdN ;
|
mkAdN : Str -> AdN ; -- adverb modifying numeral, e.g. "pelo menos"
|
||||||
mkAdN x = ss x ** {lock_AdN = <>} ;
|
mkAdN x = lin AdN (ss x) ;
|
||||||
|
|
||||||
--2 Verbs
|
--2 Verbs
|
||||||
|
|
||||||
regV : Str -> V ;
|
VType : Type ; -- verb is reflexive / verb uses auxiliar X
|
||||||
regV v =
|
VType = MorphoPor.VType ;
|
||||||
|
|
||||||
|
auxTer : VType ; -- "ter" as auxiliary verb
|
||||||
|
auxTer = VTer ;
|
||||||
|
|
||||||
|
auxHaver : VType ; -- "haver" as auxiliary verb
|
||||||
|
auxHaver = VHaver ;
|
||||||
|
|
||||||
|
auxRefl : VType ; -- verb is reflexive
|
||||||
|
auxRefl = VRefl ;
|
||||||
|
|
||||||
|
regV : Str -> V ; --%
|
||||||
|
regV s = case s of {
|
||||||
|
chamar + "-se" => reflV (regV' chamar) ;
|
||||||
|
_ => regV' s
|
||||||
|
} ;
|
||||||
|
|
||||||
|
regV' : Str -> V ; --%
|
||||||
|
regV' v =
|
||||||
let
|
let
|
||||||
xr = Predef.dp 2 v ; -- -ar
|
xr = Predef.dp 2 v ; -- -ar
|
||||||
z = Predef.dp 1 (Predef.tk 2 v) ; -- i in -iar
|
z = Predef.dp 1 (Predef.tk 2 v) ; -- i in -iar
|
||||||
@@ -331,55 +357,48 @@ oper
|
|||||||
in lin V (verboV (paradigm v)) ;
|
in lin V (verboV (paradigm v)) ;
|
||||||
|
|
||||||
mkV = overload {
|
mkV = overload {
|
||||||
--- [ ] update
|
|
||||||
-- Regular verbs are ones inflected like "cortar", "dever", or
|
|
||||||
-- "partir". The regular verb function is the first conjugation
|
|
||||||
-- ("ar") recognizes the variations corresponding to the patterns
|
|
||||||
-- "actuar, cazar, guiar, pagar, sacar". The module $BeschPor$ gives
|
|
||||||
-- the complete set of "Bescherelle" conjugations.
|
|
||||||
|
|
||||||
mkV : (pagar : Str) -> V = \s -> case s of {
|
-- Regular verbs are ones inflected like "cortar", "dever", or
|
||||||
chamar + "-se" => reflV (regV chamar) ;
|
-- "partir". This smart paradigm recognizes other patterns, but
|
||||||
_ => regV s
|
-- it is not perfect. The module $BeschPor$ gives the complete set
|
||||||
} ; -- regular in "-ar", "-er", "-ir"
|
-- of "Bescherelle" conjugations.
|
||||||
|
|
||||||
-- Verbs with vowel alternation in the stem - easiest to give with two
|
mkV : (pagar : Str) -> V -- predictable verb, e.g., "comer", "chamar-se"
|
||||||
-- forms, e.g. "mostrar"/"muestro".
|
= regV ;
|
||||||
-- mkV : (mostrar,muestro : Str) -> V = regAltV ;
|
|
||||||
-- rm'ed as is uncommon in Por
|
mkV : (abrir,aberto : Str) -> V -- deviant past participle, e.g. abrir - aberto
|
||||||
|
= \v,pp -> special_ppV (regV v) pp ;
|
||||||
|
|
||||||
-- Most irregular verbs are found in $IrregPor$. If this is not
|
-- Most irregular verbs are found in $IrregPor$. If this is not
|
||||||
-- enough, the module $BeschPor$ gives all the patterns of the
|
-- enough, the module $BeschPor$ gives all the patterns of the
|
||||||
-- "Bescherelle" book. To use them in the category $V$, wrap them with
|
-- "Bescherelle" book. To use them in the category $V$, wrap them with
|
||||||
-- the function
|
-- the function
|
||||||
|
|
||||||
mkV : Verbum -> V = \v -> -- import verb constructed with BeschPor
|
mkV : Verbum -> V -- import verb constructed with BeschPor
|
||||||
lin V (verboV v) ;
|
= \v -> lin V (verboV v) ;
|
||||||
|
|
||||||
|
mkV : V -> Str -> V -- particle verb
|
||||||
|
= \v,p -> v ** {p = p} ;
|
||||||
|
|
||||||
|
mkV : V -> VType -> V -- choose auxiliary verb or make verb reflexive
|
||||||
|
= \v,vt -> v ** {vtyp = vt} ;
|
||||||
|
|
||||||
-- particle verb
|
|
||||||
mkV : V -> Str -> V =
|
|
||||||
\v,p -> v ** {p = p} ; -- to recognize particles in dict, not
|
|
||||||
-- yet in lincat V
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- To form reflexive verbs:
|
-- To form reflexive verbs:
|
||||||
|
|
||||||
reflV : V -> V ; -- reflexive verb
|
reflV : V -> V ; -- force reflexive verb, e.g. ``reflV "chamar"``
|
||||||
reflV v = v ** {vtyp = VRefl} ;
|
reflV v = v ** {vtyp = VRefl} ;
|
||||||
|
|
||||||
-- Verbs with a deviant passive participle: just give the participle
|
-- Verbs with a deviant passive participle: just give the participle
|
||||||
-- in masculine singular form as second argument.
|
-- in masculine singular form as second argument.
|
||||||
|
|
||||||
special_ppV : V -> Str -> V ;
|
special_ppV : V -> Str -> V ; -- force past participle, e.g. abrir - aberto
|
||||||
-- deviant past participle, e.g. abrir - aberto
|
special_ppV ve pa = ve ** {
|
||||||
special_ppV ve pa = {
|
|
||||||
s = table {
|
s = table {
|
||||||
VPart g n => (adjPreto pa).s ! (genNum2Aform g n) ;
|
VPart g n => (mkAdjReg pa).s ! (genNum2Aform g n) ;
|
||||||
p => ve.s ! p
|
p => ve.s ! p
|
||||||
} ;
|
}
|
||||||
lock_V = <> ;
|
|
||||||
p = ve.p ;
|
|
||||||
vtyp = VHabere
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|
||||||
@@ -387,22 +406,24 @@ oper
|
|||||||
--
|
--
|
||||||
-- Two-place verbs need a preposition, except the special case with
|
-- Two-place verbs need a preposition, except the special case with
|
||||||
-- direct object. (transitive verbs).
|
-- direct object. (transitive verbs).
|
||||||
dirV2 : V -> V2 ;
|
dirV2 : V -> V2 ; --%
|
||||||
dirV2 v = mk2V2 v accusative ;
|
dirV2 v = mk2V2 v accusative ;
|
||||||
|
|
||||||
mk2V2 : V -> Prep -> V2 ;
|
mk2V2 : V -> Prep -> V2 ; --%
|
||||||
mk2V2 v p = lin V2 (v ** {c2 = p}) ;
|
mk2V2 v p = lin V2 (v ** {c2 = p}) ;
|
||||||
|
|
||||||
mkV2 = overload {
|
mkV2 = overload {
|
||||||
mkV2 : Str -> V2 = -- regular, direct object
|
mkV2 : (amar : Str) -> V2 -- predictable verb with direct object
|
||||||
\s -> dirV2 (regV s) ;
|
= \s -> dirV2 (regV s) ;
|
||||||
mkV2 : V -> V2 = dirV2 ; -- direct object
|
mkV2 : V -> V2 -- verb with direct object (no preposition)
|
||||||
mkV2 : V -> Prep -> V2 = mk2V2 -- other object
|
= dirV2 ;
|
||||||
|
mkV2 : V -> Prep -> V2 -- verb with other object
|
||||||
|
= mk2V2
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- You can reuse a $V2$ verb in $V$.
|
-- You can reuse a $V2$ verb in $V$.
|
||||||
|
|
||||||
v2V : V2 -> V ;
|
v2V : V2 -> V ; -- coerce ``V2`` to ``V``
|
||||||
v2V v = lin V v ;
|
v2V v = lin V v ;
|
||||||
|
|
||||||
--3 Three-place verbs
|
--3 Three-place verbs
|
||||||
@@ -411,105 +432,105 @@ oper
|
|||||||
-- the first one or both can be absent.
|
-- the first one or both can be absent.
|
||||||
|
|
||||||
mkV3 = overload {
|
mkV3 = overload {
|
||||||
mkV3 : Str -> V3 = \s -> dirdirV3 (regV s) ;
|
mkV3 : (dar : Str) -> V3 -- dar (+ accusative + dative), e.g. "ele dá um cachorro a Paris"
|
||||||
mkV3 : V -> V3 = dirdirV3 ; -- donner (+ accusative + dative)
|
= \s -> dirdirV3 (regV s) ;
|
||||||
mkV3 : V -> Prep -> V3 = dirV3 ; -- placer (+ accusative) + dans
|
mkV3 : V -> V3 -- dar (+ accusative + dative)
|
||||||
mkV3 : V -> Prep -> Prep -> V3 = mmkV3 -- parler + dative + genitive
|
= dirdirV3 ;
|
||||||
|
mkV3 : V -> Prep -> V3 -- force one preposition, e.g. "ele vende a João um cachorro"
|
||||||
|
= dirV3 ;
|
||||||
|
mkV3 : V -> Prep -> Prep -> V3 -- force prepositions, e.g. "ela fala de Paris a João"
|
||||||
|
= mmkV3
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
dirV3 : V -> Prep -> V3 ;
|
dirV3 : V -> Prep -> V3 ; --%
|
||||||
-- e.g. dar,(accusative),a
|
|
||||||
dirV3 v p = mmkV3 v accusative p ;
|
dirV3 v p = mmkV3 v accusative p ;
|
||||||
|
|
||||||
dirdirV3 : V -> V3 ;
|
dirdirV3 : V -> V3 ; --%
|
||||||
-- e.g. dar,(dative),(accusative)
|
|
||||||
dirdirV3 v = mmkV3 v dative accusative ;
|
dirdirV3 v = mmkV3 v dative accusative ;
|
||||||
|
|
||||||
mmkV3 : V -> Prep -> Prep -> V3 ;
|
mmkV3 : V -> Prep -> Prep -> V3 ; --%
|
||||||
-- falar a (fulano) de (cicrano)
|
mmkV3 v p q = lin V3 v ** {c2 = p ; c3 = q} ;
|
||||||
mmkV3 v p q = v ** {c2 = p ; c3 = q ; lock_V3 = <>} ;
|
|
||||||
|
|
||||||
--3 Other complement patterns
|
--3 Other complement patterns
|
||||||
--
|
--
|
||||||
-- Verbs and adjectives can take complements such as sentences,
|
-- Verbs and adjectives can take complements such as sentences,
|
||||||
-- questions, verb phrases, and adjectives.
|
-- questions, verb phrases, and adjectives.
|
||||||
|
|
||||||
mkV0 : V -> V0 ; --%
|
-- Notice: $V0$ is just $V$.
|
||||||
mkV0 v = v ** {lock_V0 = <>} ;
|
V0 : Type -- zero-place verbs, e.g. "chover"
|
||||||
|
= V ;
|
||||||
|
|
||||||
mkVS : V -> VS ;
|
mkV0 : V -> V0 ; -- "chover"
|
||||||
mkVS v = v ** {m = \\_ => Indic ; lock_VS = <>} ; ---- more moods
|
mkV0 v = lin V0 v ;
|
||||||
|
|
||||||
subjVS : V -> VS ;
|
mkVS : V -> VS ; -- complement sentence in the indicative mood, e.g. "eu sei que meu cachorro viverá"
|
||||||
subjVS v = v ** {m = \\_ => Conjunct ; lock_VS = <>} ;
|
mkVS v = lin VS v ** {m = \\_ => Indic} ;
|
||||||
|
|
||||||
mkVV : V -> VV ;
|
subjVS : V -> VS ; -- complement sentence in the subjunctive mood, e.g. "eu temo que meu cachorro morra"
|
||||||
-- plain infinitive: "quero falar"
|
subjVS v = lin VS v ** {m = \\_ => Conjunct} ;
|
||||||
mkVV v = v ** {c2 = complAcc ; lock_VV = <>} ;
|
|
||||||
|
|
||||||
deVV : V -> VV ;
|
mkVV : V -> VV ; -- plain infinitive: "quero falar"
|
||||||
-- "terminar de falar"
|
mkVV = makeVV accusative ;
|
||||||
deVV v = v ** {c2 = complGen ; lock_VV = <>} ;
|
|
||||||
|
|
||||||
aVV : V -> VV ;
|
deVV : V -> VV ; -- "terminar de falar"
|
||||||
-- "aprender a falar"
|
deVV = makeVV genitive ;
|
||||||
aVV v = v ** {c2 = complDat ; lock_VV = <>} ;
|
|
||||||
|
|
||||||
mkVA : V -> VA ;
|
aVV : V -> VV ; -- "aprender a falar"
|
||||||
mkVA v = v ** {lock_VA = <>} ;
|
aVV = makeVV dative ;
|
||||||
|
|
||||||
mkVQ : V -> VQ ;
|
makeVV : Prep -> V -> VV ; --%
|
||||||
mkVQ v = v ** {lock_VQ = <>} ;
|
makeVV p v = lin VV v ** {c2 = p} ;
|
||||||
|
|
||||||
mkV2Q : V -> Prep -> V2Q ;
|
mkVA : V -> VA ; -- "ela se tornou direta"
|
||||||
mkV2Q v p = mk2V2 v p ** {lock_V2Q = <>} ;
|
mkVA v = lin VA v ;
|
||||||
|
|
||||||
mmkV2 : V -> Prep -> V2 ;
|
mkVQ : V -> VQ ; -- "nós nos perguntamos se você ama alguém"
|
||||||
mmkV2 v p = v ** {c2 = p ; lock_V2 = <>} ;
|
mkVQ v = lin VQ v ;
|
||||||
|
|
||||||
|
mkV2Q : V -> Prep -> V2Q ; -- "pergunte a João se ele bebe água"
|
||||||
|
mkV2Q v p = lin V2Q (mk2V2 v p) ;
|
||||||
|
|
||||||
|
mmkV2 : V -> Prep -> V2 ; --%
|
||||||
|
mmkV2 v p = lin V2 (v ** {c2 = p}) ;
|
||||||
|
|
||||||
mkV2S = overload {
|
mkV2S = overload {
|
||||||
mkV2S : V -> V2S =
|
mkV2S : V -> V2S -- "ele respondeu a João que ela vivia"
|
||||||
\v -> mmkV2 v dative ** {mn,mp = Indic ; lock_V2S = <>} ;
|
= \v -> lin V2S (mmkV2 v dative ** {mn,mp = Indic}) ;
|
||||||
mkV2S : V -> Prep -> V2S =
|
mkV2S : V -> Prep -> V2S -- force preposition
|
||||||
\v,p -> mmkV2 v p ** {mn,mp = Indic ; lock_V2S = <>} ;
|
= \v,p -> lin V2S (mmkV2 v p ** {mn,mp = Indic}) ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
mkV2V = overload {
|
mkV2V = overload {
|
||||||
mkV2V : V -> V2V =
|
mkV2V : V -> V2V -- verb with verb complement in the accusative and NP complement in the dative
|
||||||
\v -> mmkV3 v accusative dative ** {lock_V2V = <>} ;
|
= \v -> lin V2V (mmkV3 v accusative dative) ;
|
||||||
mkV2V : V -> Prep -> Prep -> V2V =
|
mkV2V : V -> Prep -> Prep -> V2V -- "ele rogou a Paris para viver"
|
||||||
\v,p,q -> mmkV3 v p q ** {lock_V2V = <>} ;
|
= \v,p,q -> lin V2V (mmkV3 v p q) ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
mkV2A = overload {
|
mkV2A = overload {
|
||||||
mkV2A : V -> V2A =
|
mkV2A : V -> V2A -- verb with NP and AP complement (in the dative)
|
||||||
\v -> mmkV3 v accusative dative ** {lock_V2A = <>} ;
|
= \v -> lin V2A (mmkV3 v accusative dative) ;
|
||||||
mkV2A : V -> Prep -> Prep -> V2A =
|
mkV2A : V -> Prep -> Prep -> V2A -- ele pintou a casa de branco
|
||||||
\v,p,q -> mmkV3 v p q ** {lock_V2A = <>} ;
|
= \v,p,q -> lin V2A (mmkV3 v p q) ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
mkAS : A -> AS ; --%
|
mkAS : A -> AS ; --%
|
||||||
mkAS v = v ** {lock_AS = <>} ; ---- more moods
|
mkAS v = lin AS v ;
|
||||||
|
|
||||||
mkA2S : A -> Prep -> A2S ; --%
|
mkA2S : A -> Prep -> A2S ; --%
|
||||||
mkA2S v p = mkA2 v p ** {lock_A2S = <>} ;
|
mkA2S v p = lin A2S (mkA2 v p) ;
|
||||||
|
|
||||||
mkAV : A -> Prep -> AV ; --%
|
mkAV : A -> Prep -> AV ; --%
|
||||||
mkAV v p = v ** {c = p.p1 ; s2 = p.p2 ; lock_AV = <>} ;
|
mkAV v p = lin AV (v ** {c = p.p1 ; s2 = p.p2}) ;
|
||||||
|
|
||||||
mkA2V : A -> Prep -> Prep -> A2V ; --%
|
mkA2V : A -> Prep -> Prep -> A2V ; --%
|
||||||
mkA2V v p q = mkA2 v p ** {s3 = q.p2 ; c3 = q.p1 ; lock_A2V = <>} ;
|
mkA2V v p q = lin A2V (mkA2 v p ** {s3 = q.p2 ; c3 = q.p1}) ;
|
||||||
|
|
||||||
-- Notice: $V0$ is just $V$.
|
|
||||||
|
|
||||||
V0 : Type ; --%
|
|
||||||
V0 : Type = V ;
|
|
||||||
|
|
||||||
-- Notice: categories $AS, A2S, AV, A2V$ are just $A$, and the second
|
-- Notice: categories $AS, A2S, AV, A2V$ are just $A$, and the second
|
||||||
-- argument is given as an adverb.
|
-- argument is given as an adverb.
|
||||||
AS, A2S, AV, A2V : Type ; --%
|
AS, A2S, AV, A2V : Type ; --%
|
||||||
AS, AV : Type = A ;
|
AS, AV : Type = A ; --%
|
||||||
A2S, A2V : Type = A2 ;
|
A2S, A2V : Type = A2 ; --%
|
||||||
|
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -517,13 +538,14 @@ oper
|
|||||||
|
|
||||||
-- To form a noun phrase that can also be plural,
|
-- To form a noun phrase that can also be plural,
|
||||||
-- you can use the worst-case function.
|
-- you can use the worst-case function.
|
||||||
makeNP : Str -> Gender -> Number -> NP ;
|
makeNP : Str -> Gender -> Number -> NP ; --%
|
||||||
makeNP x g n = {s = (pn2np (mk2PN x g)).s;
|
makeNP x g n = {s = (pn2np (mk2PN x g)).s;
|
||||||
a = agrP3 g n ;
|
a = agrP3 g n ;
|
||||||
hasClit = False ;
|
hasClit = False ;
|
||||||
isPol = False ;
|
isPol = False ;
|
||||||
isNeg = False} ** {lock_NP = <>} ;
|
isNeg = False} ** {lock_NP = <>} ;
|
||||||
|
|
||||||
reflVerboV : Verbum -> V = \ve -> reflV (lin V (verboV ve)) ;
|
reflVerboV : Verbum -> V = \ve -> reflV (lin V (verboV ve)) ; --%
|
||||||
|
|
||||||
|
|
||||||
} ;
|
} ;
|
||||||
|
|||||||
@@ -1,26 +1,42 @@
|
|||||||
# -*- mode:org -*-
|
# -*- mode:org -*-
|
||||||
#+TITLE: Portuguese
|
#+TITLE: Portuguese
|
||||||
|
|
||||||
The Portuguese Resource Grammar is built using the Romance functor at
|
|
||||||
=romance/=. It mostly follows Brazilian Portuguese.
|
|
||||||
|
|
||||||
* language information
|
* language information
|
||||||
- English name: Portuguese
|
- English name: Portuguese
|
||||||
- Autonym: Português
|
- Autonym: Português
|
||||||
- ISO code: Por
|
- ISO code: Por
|
||||||
|
|
||||||
|
* implementation information
|
||||||
|
The Portuguese Resource Grammar is built using the Romance functor at
|
||||||
|
=romance/=, and it mostly follows Brazilian Portuguese.
|
||||||
|
|
||||||
|
Romance instantiations differ mostly in their morphological modules
|
||||||
|
and in the constructions defined in the =Diff*= modules. One relevant
|
||||||
|
difference for Portuguese is that it uses the /pretérito perfeito/
|
||||||
|
instead of the auxiliary verb in the present + participle for the RGL
|
||||||
|
present anterior tense.
|
||||||
|
|
||||||
* data
|
* data
|
||||||
# post data sources and add IrregPor and DictPor
|
The code used to generate the modules below is in this [[http://gitlab.com/odanoburu/gf-pt][repository]].
|
||||||
** BeschPor
|
|
||||||
|
** Dict
|
||||||
|
This module contains nouns and adjectives defined from the forms in
|
||||||
|
this [[https://github.com/LFG-PTBR/MorphoBr/][morphological resource]]. Variants are not used. =fun= names are
|
||||||
|
the word's lemmas, plus optional distinguishing feature (e.g.,
|
||||||
|
/número_N/ for /número/ but /abade_Fem_N/ for /abadessa/).
|
||||||
|
|
||||||
|
** Besch
|
||||||
The =BeschPor= module contains the complete inflection tables for all
|
The =BeschPor= module contains the complete inflection tables for all
|
||||||
Portuguese verbs, divided in paradigms following the following books:
|
Portuguese verbs, divided in paradigms following the following books:
|
||||||
|
|
||||||
- Ryan, M. A. Conjugação dos Verbos em Português. Ática, 1991.
|
- Ryan, M. A. Conjugação dos Verbos em Português. Ática, 1991.
|
||||||
- Freire, A. N. Bescherelle: portugais, les verbes. Hatier, 2008.
|
- Freire, A. N. Bescherelle: portugais, les verbes. Hatier, 2008.
|
||||||
|
|
||||||
** IrregBeschPor
|
** Irreg
|
||||||
In this lexicon module you will find Portuguese verbs defined using
|
In this lexicon module you will find Portuguese verbs defined using
|
||||||
the paradigms in BeschPor. Please contribute to this list!
|
the paradigms in =BeschPor=. Please contribute to this list by editing
|
||||||
|
this [[https://gitlab.com/odanoburu/gf-pt/blob/master/tools/besch/verbs.besch][file]]! (you need only add the verb lemma in the correct paradigm
|
||||||
|
line)
|
||||||
|
|
||||||
* history and applications
|
* history and applications
|
||||||
- mini resource grammars: a [[https://github.com/GrammaticalFramework/gf-summerschool-2018/tree/master/resource][version]] for [[http://school.grammaticalframework.org/2018/][GFSS2018]], [[https://github.com/GrammaticalFramework/gf-contrib/tree/master/mini][mini]] and [[https://github.com/GrammaticalFramework/gf-contrib/tree/master/mini/newmini][newmini]]
|
- mini resource grammars: a [[https://github.com/GrammaticalFramework/gf-summerschool-2018/tree/master/resource][version]] for [[http://school.grammaticalframework.org/2018/][GFSS2018]], [[https://github.com/GrammaticalFramework/gf-contrib/tree/master/mini][mini]] and [[https://github.com/GrammaticalFramework/gf-contrib/tree/master/mini/newmini][newmini]]
|
||||||
|
|||||||
@@ -62,12 +62,12 @@ concrete StructuralPor of Structural = CatPor **
|
|||||||
but_PConj = ss "mas" ;
|
but_PConj = ss "mas" ;
|
||||||
by8agent_Prep = mkPrep [] ablative ; -- por
|
by8agent_Prep = mkPrep [] ablative ; -- por
|
||||||
by8means_Prep = mkPrep [] ablative ; -- por
|
by8means_Prep = mkPrep [] ablative ; -- por
|
||||||
can8know_VV = mkVV B.saber_V ;
|
can8know_VV = mkVV B.know_V ;
|
||||||
can_VV = mkVV (mkV (poder_Besch "poder")) ;
|
can_VV = mkVV (mkV (poder_Besch "poder")) ;
|
||||||
during_Prep = mkPrep "durante" ;
|
during_Prep = mkPrep "durante" ;
|
||||||
either7or_DConj = {s1,s2 = "ou" ; n = Sg} ;
|
either7or_DConj = {s1,s2 = "ou" ; n = Sg} ;
|
||||||
everybody_NP = makeNP "todos" Masc Pl ;
|
everybody_NP = makeNP "todos" Masc Pl ;
|
||||||
every_Det = mkDeterminer "cada" "cada" Sg False ;
|
every_Det = mkDeterminer "todo" "toda" Sg False ;
|
||||||
everything_NP = pn2np (mkPN "tudo" Masc) ;
|
everything_NP = pn2np (mkPN "tudo" Masc) ;
|
||||||
everywhere_Adv = ss ["em toda parte"] ;
|
everywhere_Adv = ss ["em toda parte"] ;
|
||||||
except_Prep = mkPrep "exceto" ;
|
except_Prep = mkPrep "exceto" ;
|
||||||
@@ -105,7 +105,7 @@ concrete StructuralPor of Structural = CatPor **
|
|||||||
s2 = [] ; isNeg = True
|
s2 = [] ; isNeg = True
|
||||||
} ;
|
} ;
|
||||||
no_Utt = ss "não" ;
|
no_Utt = ss "não" ;
|
||||||
not_Predet = {s = \\a,c => prepCase c ++ "não" ; c = Nom ; a = PNoAg} ;
|
not_Predet = {s = \\a,c => prepCase c ++ "nem" ; c = Nom ; a = PNoAg} ;
|
||||||
nobody_NP = pn2npNeg (mkPN "ninguém") ;
|
nobody_NP = pn2npNeg (mkPN "ninguém") ;
|
||||||
nothing_NP = pn2npNeg (mkPN "nada") ;
|
nothing_NP = pn2npNeg (mkPN "nada") ;
|
||||||
|
|
||||||
@@ -160,8 +160,9 @@ concrete StructuralPor of Structural = CatPor **
|
|||||||
|
|
||||||
lin
|
lin
|
||||||
as_CAdv = X.mkCAdv "tão" conjThan ; ----
|
as_CAdv = X.mkCAdv "tão" conjThan ; ----
|
||||||
have_V2 = dirV2 B.ter_V ;
|
have_V2 = dirV2 B.have_V ;
|
||||||
that_Subj = {s = "que" ; m = Conjunct} ;
|
that_Subj = {s = "que" ; m = Conjunct} ;
|
||||||
|
|
||||||
lin language_title_Utt = ss "português" ;
|
lin language_title_Utt = ss "português" ;
|
||||||
|
|
||||||
} ;
|
} ;
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
concrete TextPor of Text = CommonX - [Temp,TTAnt,Tense,TPres,TPast,TFut,TCond] ** open Prelude in {
|
concrete TextPor of Text = CommonX - [Temp,TTAnt,Tense,TPres,TPast,TFut,TCond]
|
||||||
|
** open Prelude in {
|
||||||
|
|
||||||
flags coding=utf8 ;
|
flags coding=utf8 ;
|
||||||
|
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ interface DiffRomance = open CommonRomance, Prelude in {
|
|||||||
|
|
||||||
oper mkImperative : Bool -> Person -> VP -> RPolarity => Gender => Number => Str ;
|
oper mkImperative : Bool -> Person -> VP -> RPolarity => Gender => Number => Str ;
|
||||||
|
|
||||||
-- To render the copula (ser/estar in Spa,Cat)
|
-- To render the copula (ser/estar in Spa,Cat,Por)
|
||||||
|
|
||||||
oper CopulaType : PType ;
|
oper CopulaType : PType ;
|
||||||
oper selectCopula : CopulaType -> Verb ;
|
oper selectCopula : CopulaType -> Verb ;
|
||||||
@@ -63,6 +63,10 @@ interface DiffRomance = open CommonRomance, Prelude in {
|
|||||||
|
|
||||||
oper iAdvQuestionInv : Direct = DInv ; -- except Fre
|
oper iAdvQuestionInv : Direct = DInv ; -- except Fre
|
||||||
|
|
||||||
|
oper iCompQuestionInv : Direct = DInv ; -- for Cat,Por,Spa where otherInv will be DDir
|
||||||
|
|
||||||
|
oper otherInv : Direct = DInv ; -- except Cat, Por, Spa
|
||||||
|
|
||||||
--2 Constants that must derivatively depend on language
|
--2 Constants that must derivatively depend on language
|
||||||
|
|
||||||
param NPForm = Ton Case | Aton Case | Poss {g : Gender ; n : Number} ; --- AAgr
|
param NPForm = Ton Case | Aton Case | Poss {g : Gender ; n : Number} ; --- AAgr
|
||||||
@@ -169,5 +173,25 @@ oper
|
|||||||
|
|
||||||
contractInf : Bool -> Bool -> Bool = \_,_ -> False ; -- only True in Ita, by orB
|
contractInf : Bool -> Bool -> Bool = \_,_ -> False ; -- only True in Ita, by orB
|
||||||
|
|
||||||
}
|
chooseTA : RTense -> Anteriority
|
||||||
|
-> (VF => Str) -> (VF => Str)
|
||||||
|
-> Number -> Person -> Mood -> Str -> Str * Str ;
|
||||||
|
chooseTA t a verb vaux n p m part = case <t,a> of {
|
||||||
|
<RPast,Simul> => <verb ! VFin (VImperf m) n p, []> ; --# notpresent
|
||||||
|
<RPast,Anter> => <vaux ! VFin (VImperf m) n p, part> ; --# notpresent
|
||||||
|
<RFut,Simul> => <verb ! VFin VFut n p, []> ; --# notpresent
|
||||||
|
<RFut,Anter> => <vaux ! VFin VFut n p, part> ; --# notpresent
|
||||||
|
<RCond,Simul> => <verb ! VFin VCondit n p, []> ; --# notpresent
|
||||||
|
<RCond,Anter> => <vaux ! VFin VCondit n p, part> ; --# notpresent
|
||||||
|
<RPasse,Simul> => <verb ! VFin VPasse n p, []> ; --# notpresent
|
||||||
|
<RPasse,Anter> => <vaux ! VFin VPasse n p, part> ; --# notpresent
|
||||||
|
<RPres,Anter> => <vaux ! VFin (VPres m) n p, part> ; --# notpresent
|
||||||
|
<RPres,Simul> => <verb ! VFin (VPres m) n p, []>
|
||||||
|
} ;
|
||||||
|
|
||||||
|
oper
|
||||||
|
essere_V : Verb ;
|
||||||
|
stare_V : Verb ;
|
||||||
|
stare_V = essere_V ;
|
||||||
|
|
||||||
|
} ;
|
||||||
|
|||||||
268
src/romance/ExtendRomanceFunctor.gf
Normal file
268
src/romance/ExtendRomanceFunctor.gf
Normal file
@@ -0,0 +1,268 @@
|
|||||||
|
incomplete concrete ExtendRomanceFunctor of Extend =
|
||||||
|
Cat ** open Grammar, ResRomance in {
|
||||||
|
|
||||||
|
lincat
|
||||||
|
RNP = Grammar.NP ;
|
||||||
|
RNPList = Grammar.ListNP ;
|
||||||
|
|
||||||
|
---- 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 ;
|
||||||
|
|
||||||
|
BaseVPI = variants {} ;
|
||||||
|
ConsVPI = variants {} ;
|
||||||
|
BaseVPS2 = variants {} ;
|
||||||
|
ConsVPS2 = variants {} ;
|
||||||
|
BaseVPI2 = variants {} ;
|
||||||
|
ConsVPI2 = variants {} ;
|
||||||
|
|
||||||
|
--GenNP = variants {} ;
|
||||||
|
GenNP np =
|
||||||
|
let denp = (np.s ! ResRomance.genitive).ton in {
|
||||||
|
s = \\_,_,_,_ => [] ;
|
||||||
|
sp = \\_,_,_ => denp ;
|
||||||
|
s2 = denp ;
|
||||||
|
isNeg = False ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
GenIP ip = {s = \\_,_,c => ip.s ! c} ;
|
||||||
|
GenRP = variants {} ; -- Num -> CN -> RP ; -- whose car
|
||||||
|
|
||||||
|
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
|
||||||
|
} ;
|
||||||
|
|
||||||
|
StrandQuestSlash = QuestSlash ; -- whom does John live with ; DEFAULT with whom does John live
|
||||||
|
StrandRelSlash = RelSlash ; -- that he lives in ; DEFAULT in which he lives
|
||||||
|
|
||||||
|
EmptyRelSlash = variants {} ;
|
||||||
|
-- --TODO debug this definition
|
||||||
|
-- EmptyRelSlash cls = {
|
||||||
|
-- s = \\agr,t,a,p,m => cls.s ! agr ! DDir ! t ! a ! p ! m ++ cls.c2.s ;
|
||||||
|
-- c = Nom
|
||||||
|
-- } ;
|
||||||
|
|
||||||
|
lin
|
||||||
|
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 ;
|
||||||
|
|
||||||
|
MkVPI vp = variants {} ; -- Temp -> Pol -> VP -> VPI ; -- to sleep / hasn't slept
|
||||||
|
ConjVPI = variants {} ; -- Conj -> [VPI] -> VPI ; -- has walked and won't sleep
|
||||||
|
ComplVPIVV = variants {} ; -- VV -> VPI -> VP ; -- want to sleep and to walk
|
||||||
|
MkVPS2 = variants {} ; -- : Temp -> Pol -> VPSlash -> VPS2 ; -- has loved
|
||||||
|
ConjVPS2 = variants {} ; -- : Conj -> [VPS2] -> VPS2 ; -- has loved and now hates
|
||||||
|
ComplVPS2 = variants {} ; -- : VPS2 -> NP -> VPS ; -- has loved and now hates that person
|
||||||
|
MkVPI2 = variants {} ; -- : Ant -> Pol -> VPSlash -> VPI2 ; -- to have loved
|
||||||
|
ConjVPI2 = variants {} ; -- : Conj -> [VPI2] -> VPI2 ; -- to love and have hated
|
||||||
|
ComplVPI2 = variants {} ; -- : VPI2 -> NP -> VPI ; -- to love and hate that person
|
||||||
|
|
||||||
|
lin
|
||||||
|
ProDrop p = p ** {
|
||||||
|
s = table {
|
||||||
|
Nom => let pn = p.s ! Nom
|
||||||
|
in {c1 = pn.c1 ; c2 = pn.c2 ; comp = [] ; ton = pn.ton} ;
|
||||||
|
c => p.s ! c
|
||||||
|
} ;
|
||||||
|
isNeg = False
|
||||||
|
} ;
|
||||||
|
|
||||||
|
ICompAP = variants {} ; -- AP -> IComp ; -- "how old"
|
||||||
|
IAdvAdv = variants {} ; -- Adv -> IAdv ; -- "how often"
|
||||||
|
|
||||||
|
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} ;
|
||||||
|
|
||||||
|
FocusObj = variants {} ; -- NP -> SSlash -> Utt ; -- her I love
|
||||||
|
FocusAdv = variants {} ; -- Adv -> S -> Utt ; -- today I will sleep
|
||||||
|
FocusAdV = variants {} ; -- AdV -> S -> Utt ; -- never will I sleep
|
||||||
|
FocusAP = variants {} ; -- AP -> NP -> Utt ; -- green was the tree
|
||||||
|
|
||||||
|
lin
|
||||||
|
EmbedPresPart = variants {} ; -- VP -> SC ; -- looking at Mary (is fun)
|
||||||
|
|
||||||
|
PresPartAP vp = {
|
||||||
|
s = \\af => gerVP vp (aform2aagr af ** {p = P3}) ;
|
||||||
|
isPre = False ;
|
||||||
|
copTyp = serCopula
|
||||||
|
} ;
|
||||||
|
|
||||||
|
PassVPSlash vps = passVPSlash vps [] ;
|
||||||
|
PassAgentVPSlash vps np = passVPSlash vps (let by = <Grammar.by8agent_Prep : Prep> in by.s ++ (np.s ! by.c).ton) ;
|
||||||
|
|
||||||
|
PastPartAP vps = pastPartAP vps [] ;
|
||||||
|
PastPartAgentAP vps np = pastPartAP vps (let by = <Grammar.by8agent_Prep : Prep> in by.s ++ (np.s ! by.c).ton) ;
|
||||||
|
|
||||||
|
ExistsNP = variants {} ;
|
||||||
|
|
||||||
|
NominalizeVPSlashNP = variants {} ; -- VPSlash -> NP -> NP ;
|
||||||
|
|
||||||
|
ExistCN cn = ExistNP (DetCN (DetQuant IndefArt NumSg) cn) ;
|
||||||
|
ExistMassCN cn = ExistNP (MassNP cn) ;
|
||||||
|
ExistPluralCN cn = ExistNP (DetCN (DetQuant IndefArt NumPl) cn) ;
|
||||||
|
AdvIsNP adv np = mkClause adv.s False False np.a (UseComp_estar (CompNP np)) ;
|
||||||
|
|
||||||
|
lin
|
||||||
|
ComplBareVS = ComplVS ; -- VS -> S -> VP ; -- say she runs ; DEFAULT say that she runs
|
||||||
|
SlashBareV2S = SlashV2S ; -- V2S -> S -> VPSlash ; -- answer (to him) it is good ; DEFAULT answer that it is good
|
||||||
|
ComplDirectVS vs utt = AdvVP (UseV <lin V vs : V>) (lin Adv {s = ":" ++ quoted utt.s}) ; -- DEFAULT complement added as Adv in quotes
|
||||||
|
ComplDirectVQ vq utt = AdvVP (UseV <lin V vq : V>) (lin Adv {s = ":" ++ quoted utt.s}) ; -- DEFAULT complement added as Adv in quotes
|
||||||
|
FrontComplDirectVS = variants {} ; -- NP -> VS -> Utt -> Cl ; -- "I am here", she said
|
||||||
|
FrontComplDirectVQ = variants {} ; -- NP -> VQ -> Utt -> Cl ; -- "where", she asked
|
||||||
|
PredAPVP ap vp = ImpersCl (UseComp (CompAP (SentAP ap (EmbedVP vp)))) ; -- DEFAULT it is (good to walk)
|
||||||
|
|
||||||
|
AdjAsCN ap = {
|
||||||
|
s =\\n => ap.s ! (genNum2Aform Masc n) ;
|
||||||
|
g = Masc
|
||||||
|
} ;
|
||||||
|
|
||||||
|
AdjAsNP ap = heavyNP {
|
||||||
|
s = \\_c => ap.s ! ASg Masc APred ;
|
||||||
|
a = Ag Masc Sg P3
|
||||||
|
} ;
|
||||||
|
|
||||||
|
lin
|
||||||
|
ReflRNP = variants {} ; -- VPSlash -> RNP -> VP ; -- love my family and myself
|
||||||
|
ReflPron = variants {} ; -- RNP ; -- myself
|
||||||
|
ReflPoss = variants {} ; -- Num -> CN -> RNP ; -- my car(s)
|
||||||
|
PredetRNP = variants {} ; -- Predet -> RNP -> RNP ; -- all my brothers
|
||||||
|
ConjRNP = variants {} ; -- Conj -> RNPList -> RNP ; -- my family, John and myself
|
||||||
|
Base_rr_RNP = variants {} ; -- RNP -> RNP -> RNPList ; -- my family, myself
|
||||||
|
Base_nr_RNP = variants {} ; -- NP -> RNP -> RNPList ; -- John, myself
|
||||||
|
Base_rn_RNP = variants {} ; -- RNP -> NP -> RNPList ; -- myself, John
|
||||||
|
Cons_rr_RNP = variants {} ; -- RNP -> RNPList -> RNPList ; -- my family, myself, John
|
||||||
|
Cons_nr_RNP = variants {} ; -- NP -> RNPList -> RNPList ; -- John, my family, myself
|
||||||
|
ComplGenVV = variants {} ; -- VV -> Ant -> Pol -> VP -> VP ; -- want not to have slept
|
||||||
|
ComplSlashPartLast = ComplSlash ;
|
||||||
|
|
||||||
|
CompoundN = variants {} ; -- N -> N -> N ; -- control system / controls system / control-system
|
||||||
|
CompoundAP = variants {} ; -- N -> A -> AP ; -- language independent / language-independent
|
||||||
|
|
||||||
|
lin
|
||||||
|
GerundNP vp = let
|
||||||
|
neutrAgr = Ag Masc Sg P3
|
||||||
|
in heavyNP {
|
||||||
|
s = \\_ => gerVP vp neutrAgr ;
|
||||||
|
a = neutrAgr
|
||||||
|
} ;
|
||||||
|
|
||||||
|
GerundCN vp = {
|
||||||
|
s = \\n => gerVP vp {g = Masc ; n = n ; p = P3} ;
|
||||||
|
g = Masc
|
||||||
|
} ;
|
||||||
|
|
||||||
|
GerundAdv vp = {
|
||||||
|
s = gerundStr vp
|
||||||
|
} ;
|
||||||
|
|
||||||
|
lin
|
||||||
|
PurposeVP vp = {
|
||||||
|
s = infVP vp (Ag Masc Sg P3)
|
||||||
|
} ;
|
||||||
|
|
||||||
|
WithoutVP = variants {} ; -- VP -> Adv ; -- without publishing the document
|
||||||
|
|
||||||
|
ByVP vp = {
|
||||||
|
s = gerundStr vp
|
||||||
|
} ;
|
||||||
|
|
||||||
|
InOrderToVP = variants {} ; -- VP -> Adv ; -- (in order) to publish the document
|
||||||
|
|
||||||
|
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
|
||||||
|
} ;
|
||||||
|
|
||||||
|
lin
|
||||||
|
CompS = variants {} ; -- S -> Comp ; -- (the fact is) that she sleeps
|
||||||
|
CompQS = variants {} ; -- QS -> Comp ; -- (the question is) who sleeps
|
||||||
|
|
||||||
|
--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
|
||||||
|
} ;
|
||||||
|
|
||||||
|
lin
|
||||||
|
DetNPMasc = DetNP ;
|
||||||
|
DetNPFem = DetNP ;
|
||||||
|
|
||||||
|
lin
|
||||||
|
iFem_Pron = i_Pron ; -- DEFAULT I (masc)
|
||||||
|
youFem_Pron = youSg_Pron ; -- DEFAULT you (masc)
|
||||||
|
weFem_Pron = we_Pron ; -- DEFAULT we (masc)
|
||||||
|
youPlFem_Pron = youPl_Pron ; -- DEFAULT you plural (masc)
|
||||||
|
theyFem_Pron = they_Pron ; -- DEFAULT they (masc)
|
||||||
|
youPolFem_Pron = youPol_Pron ; -- DEFAULT you polite (masc)
|
||||||
|
youPolPl_Pron = youPl_Pron ; -- DEFAULT you plural (masc)
|
||||||
|
youPolPlFem_Pron = youPl_Pron ; -- DEFAULT you plural (masc)
|
||||||
|
|
||||||
|
lin
|
||||||
|
UseComp_estar comp = insertComplement comp.s (predV stare_V) ;
|
||||||
|
UncontractedNeg = {s = [] ; p = RNeg False} ;
|
||||||
|
UttAccNP = UttNP ; -- him (accusative) ; DEFAULT he
|
||||||
|
UttDatNP np = UttAccNP (lin NP np) ; -- him(dative) ; DEFAULT he
|
||||||
|
UttAccIP = UttIP ; -- whom (accusative) ; DEFAULT who
|
||||||
|
UttDatIP ip = UttAccIP (lin IP ip) ; -- whom (dative) ; DEFAULT who
|
||||||
|
UttVPShort = UttVP ;
|
||||||
|
|
||||||
|
oper
|
||||||
|
quoted : Str -> Str = \s -> "\"" ++ s ++ "\"" ; ---- TODO bind ; move to Prelude?
|
||||||
|
|
||||||
|
oper
|
||||||
|
gerundStr : VP -> Str ;
|
||||||
|
gerundStr vp = gerVP vp (Ag Masc Sg P3) ;
|
||||||
|
|
||||||
|
infStr : VP -> Str ;
|
||||||
|
infStr vp = infVP vp (Ag Masc Sg P3) ;
|
||||||
|
|
||||||
|
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 ;
|
||||||
|
copTyp = serCopula
|
||||||
|
} ;
|
||||||
|
|
||||||
|
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 ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
} ;
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user