summaryrefslogtreecommitdiff
path: root/contrib/eaglesconv/EaglesParser.hs
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/eaglesconv/EaglesParser.hs')
-rw-r--r--contrib/eaglesconv/EaglesParser.hs239
1 files changed, 0 insertions, 239 deletions
diff --git a/contrib/eaglesconv/EaglesParser.hs b/contrib/eaglesconv/EaglesParser.hs
deleted file mode 100644
index 6fc64d3b8..000000000
--- a/contrib/eaglesconv/EaglesParser.hs
+++ /dev/null
@@ -1,239 +0,0 @@
--- Copyright (C) 2011 Nikita Frolov
-
--- An early version of the parser that requires somewhat more memory. Kept for
--- nostalgic reasons.
-
-module EaglesParser where
-
-import qualified Data.Text as T
-import Data.List
-import qualified Data.Map as M
-
-type Forms = M.Map Tag T.Text
-
-data Tag = A Case Number Gender Animacy Form Degree Extra Obscene
- | Adv Degree Extra Obscene
- | AdvPron Extra
- | Ord Case Number Gender Animacy
- | AdjPron Case Number Gender Animacy Extra
- | Frag Extra
- | Conj Extra
- | Inter Extra Obscene
- | Num Case Number Gender Animacy Extra
- | Part Extra
- | Prep Extra
- | N Case Number Gender Animacy Name Extra Obscene
- | Pron Case Number Gender Animacy Extra
- | V Mood Number Gender Tense Person Aspect Voice Trans Extra Obscene
- | P Case Number Gender Tense Form Aspect Voice Trans Extra Obscene
- deriving (Show, Ord, Eq)
-
-parseTag :: T.Text -> Tag
-parseTag tag = case (T.unpack tag) of {
- ('A':c:n:g:a:f:cmp:e:o:[]) -> A (readCase c) (readNumber n)
- (readGender g) (readAnimacy a)
- (readForm f) (readDegree cmp)
- (readExtra e) (readObscene o) ;
- ('D':cmp:e:o:[]) -> Adv (readDegree cmp)
- (readExtra e) (readObscene o) ;
- ('P':e:[]) -> AdvPron (readExtra e) ;
- ('Y':c:n:g:a:[]) -> Ord (readCase c) (readNumber n)
- (readGender g) (readAnimacy a) ;
- ('R':c:n:g:a:e:[]) -> AdjPron (readCase c) (readNumber n)
- (readGender g) (readAnimacy a) (readExtra e) ;
- ('M':e:[]) -> Frag (readExtra e) ;
- ('C':e:[]) -> Conj (readExtra e) ;
- ('J':e:o:[]) -> Inter (readExtra e) (readObscene o) ;
- ('Z':c:n:g:a:e:[]) -> Num (readCase c) (readNumber n)
- (readGender g) (readAnimacy a) (readExtra e) ;
- ('T':e:[]) -> Part (readExtra e) ;
- ('B':e:[]) -> Prep (readExtra e) ;
- ('N':_:c:n:g:a:name:e:o:_:[]) -> N (readCase c) (readNumber n)
- (readGender g) (readAnimacy a)
- (readName name)
- (readExtra e) (readObscene o) ;
- ('N':_:c:n:g:a:name:e:o:[]) -> N (readCase c) (readNumber n)
- (readGender g) (readAnimacy a)
- (readName name)
- (readExtra e) (readObscene o) ;
- ('E':c:n:g:a:e:[]) -> Pron (readCase c) (readNumber n)
- (readGender g) (readAnimacy a) (readExtra e) ;
- ('V':m:n:g:t:'P':p:a:v:tr:e:o:[]) -> V (readMood m) (readNumber n)
- (readGender g) (readTense t)
- (readPerson p) (readAspect a)
- (readVoice v) (readTrans tr)
- (readExtra e) (readObscene o) ;
- ('V':m:n:g:t:'0':a:v:tr:e:o:[]) -> V (readMood m) (readNumber n)
- (readGender g) (readTense t)
- NP (readAspect a)
- (readVoice v) (readTrans tr)
- (readExtra e) (readObscene o) ;
- ('V':m:n:g:t:p:a:v:tr:e:o:[]) -> V (readMood m) (readNumber n)
- (readGender g) (readTense t)
- (readPerson p) (readAspect a)
- (readVoice v) (readTrans tr)
- (readExtra e) (readObscene o) ;
- ('Q':c:n:g:t:f:a:v:tr:e:o:[]) -> P (readCase c) (readNumber n)
- (readGender g) (readTense t)
- (readForm f) (readAspect a)
- (readVoice v) (readTrans tr)
- (readExtra e) (readObscene o) ;
- _ -> error $ "Parse error: " ++ T.unpack tag }
-
-data Case = Nom | Gen | Dat | Acc | Inst | Prepos | Partit | Loc | Voc | NC
- deriving (Show, Ord, Eq)
-
-readCase 'N' = Nom
-readCase 'G' = Gen
-readCase 'D' = Dat
-readCase 'F' = Acc
-readCase 'C' = Inst
-readCase 'O' = Prepos
-readCase 'P' = Partit
-readCase 'L' = Loc
-readCase 'V' = Voc
-readCase '0' = NC
-
-data Number = Sg | Pl | NN deriving (Show, Ord, Eq)
-
-readNumber 'S' = Sg
-readNumber 'P' = Pl
-readNumber '0' = NN
-
-data Gender = Masc | Fem | Neut | Common | NG deriving (Show, Ord, Eq)
-
-readGender 'F' = Fem
-readGender 'M' = Masc
-readGender 'A' = Neut
-readGender 'C' = Common
-readGender '0' = NG
-
-data Animacy = Animate | Inanimate | NA deriving (Show, Ord, Eq)
-
-readAnimacy 'A' = Animate
-readAnimacy 'I' = Inanimate
-readAnimacy '0' = NA
-
-data Form = Short | Full | NF deriving (Show, Ord, Eq)
-
-readForm 'S' = Short
-readForm 'F' = Full
-readForm '0' = NF
-
-data Degree = Pos | Comp | Super | ND deriving (Show, Ord, Eq)
-
-readDegree 'E' = Super
-readDegree 'C' = Comp
-readDegree 'P' = Pos
-readDegree '0' = ND
-
-data Extra = Introductory | Difficult | Distorted | Predicative
- | Colloquial | Rare | Abbreviation | Obsolete | NE deriving (Show, Ord, Eq)
-
-readExtra 'P' = Introductory
-readExtra 'D' = Difficult
-readExtra 'V' = Distorted
-readExtra 'R' = Predicative
-readExtra 'I' = Colloquial
-readExtra 'A' = Rare
-readExtra 'B' = Abbreviation
-readExtra 'E' = Obsolete
-readExtra '0' = NE
-
-data Obscene = Obscene | NO deriving (Show, Ord, Eq)
-
-readObscene 'H' = Obscene
-readObscene '0' = NO
-
-data Name = Topo | Proper | Patro | Family | NNa deriving (Show, Ord, Eq)
-
-readName 'G' = Topo
-readName 'N' = Proper
-readName 'S' = Patro
-readName 'F' = Family
-readName '0' = NNa
-
-data Mood = Gerund | Inf | Ind | Imp | NM deriving (Show, Ord, Eq)
-
-readMood 'G' = Gerund
-readMood 'I' = Inf
-readMood 'D' = Ind
-readMood 'M' = Imp
-readMood '0' = NM
-
-data Tense = Pres | Fut | Past | NT deriving (Show, Ord, Eq)
-
-readTense 'P' = Pres
-readTense 'F' = Fut
-readTense 'S' = Past
-readTense '0' = NT
-
-data Person = P1 | P2 | P3 | NP deriving (Show, Ord, Eq)
-
-readPerson '1' = P1
-readPerson '2' = P2
-readPerson '3' = P3
-
-data Aspect = Perf | Imperf | NAs deriving (Show, Ord, Eq)
-
-readAspect 'F' = Perf
-readAspect 'N' = Imperf
-readAspect '0' = NAs
-
-data Voice = Act | Pass | NV deriving (Show, Ord, Eq)
-
-readVoice 'A' = Act
-readVoice 'S' = Pass
-readVoice '0' = NV
-
-data Trans = Trans | Intrans | NTr deriving (Show, Ord, Eq)
-
-readTrans 'M' = Trans
-readTrans 'A' = Intrans
-readTrans '0' = NTr
-
-isOpenCat :: Tag -> Bool
-isOpenCat (A _ _ _ _ _ _ _ _) = True
-isOpenCat (N _ _ _ _ _ _ _) = True
-isOpenCat (V _ _ _ _ _ _ _ _ _ _) = True
-isOpenCat (Adv _ _ _) = True
-isOpenCat _ = False
-
-noun :: Forms -> (Case, Number) -> T.Text
-noun forms (c, n) = findForm matchNoun forms
- where matchNoun (N c' n' _ _ _ _ _) = c == c' && n == n'
- matchNoun _ = False
-
-adj :: Forms -> Degree -> T.Text
-adj forms d = findForm matchAdj forms
- where matchAdj (A _ _ _ _ _ d' _ _) = d == d
- matchAdj _ = False
-
-verbPres :: Forms -> (Number, Person) -> T.Text
-verbPres forms (n, p) = findForm matchPres forms
- where matchPres (V Ind n' _ Pres p' _ Act _ _ _) = n == n' && p == p'
- matchPres _ = False
-
-verbPast :: Forms -> (Number, Gender) -> T.Text
-verbPast forms (n, g) = findForm matchPast forms
- where matchPast (V Ind n' g' Past _ _ Act _ _ _) = n == n' && g == g'
- matchPast _ = False
-
-verbImp :: Forms -> T.Text
-verbImp forms = findForm matchImp forms
- where matchImp (V Imp _ _ _ _ _ _ _ _ _) = True
- matchImp _ = False
-
-verbInf :: Forms -> T.Text
-verbInf forms = findForm matchInf forms
- where matchInf (V Inf _ _ _ _ _ _ _ _ _) = True
- matchInf _ = False
-
-adv :: Forms -> T.Text
-adv forms = findForm matchAdv forms
- where matchAdv (Adv d _ _) = d == Pos
- matchAdv _ = False
-
-findForm match forms = case find match (M.keys forms) of
- Just tag -> forms M.! tag
- Nothing -> findForm (\ _ -> True) forms \ No newline at end of file