zasni-gerna (empty) → 0.0.1
raw patch · 5 files changed
+2072/−0 lines, 5 filesdep +basedep +papillonsetup-changed
Dependencies added: base, papillon
Files
- LICENSE +27/−0
- Setup.hs +3/−0
- src/Language/Lojban/Parser/ZasniGerna.hs +23/−0
- src/Language/Lojban/Parser/ZasniGerna/Parser.hs +1986/−0
- zasni-gerna.cabal +33/−0
+ LICENSE view
@@ -0,0 +1,27 @@+Copyright (c) 2011, Yoshikuni Jujo+All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++ * Redistributions of source code must retain the above copyright notice,+ this list of conditions and the following disclaimer.++ * Redistributions in binary form must reproduce the above copyright+ notice, this list of conditions and the following disclaimer in the+ documentation and/or other materials provided with the distribution.++ * Neither the name of the Yoshikuni Jujo nor the names of its+ contributors may be used to endorse or promote products derived from+ this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE+ARE DISCLAIMED. IN NO EVEN SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ Setup.hs view
@@ -0,0 +1,3 @@+import Distribution.Simple++main = defaultMain
+ src/Language/Lojban/Parser/ZasniGerna.hs view
@@ -0,0 +1,23 @@+module Language.Lojban.Parser.ZasniGerna (+ parse,+ Text(..),+ Free(..),+ Terminator(..),+ Separator(..),+ Connective(..),+ BO(..),+ CO(..),+ Relative(..),+ Initiator(..),+ Mex(..),+ Lerfu,+ Tag(..),+ Prefix(..),+ Suffix(..),+ Linkargs(..),+ Word(..),+ ZEI(..),+ BU(..)+ ) where++import Language.Lojban.Parser.ZasniGerna.Parser
+ src/Language/Lojban/Parser/ZasniGerna/Parser.hs view
@@ -0,0 +1,1986 @@+{-# LANGUAGE TypeFamilies, QuasiQuotes #-}++module Language.Lojban.Parser.ZasniGerna.Parser where++import Text.Papillon+import Data.Maybe++parse :: String -> Either String (Free, Text, Terminator)+parse src+ | Right (r, _) <- parsed = Right r+ | Left l <- parsed = Left $ showParseError l+ where+ parsed = runError $ gerna_text $ gerna_parse src++showParseError :: ParseError (Pos String) Gerna_Derivs -> String+showParseError pe =+ unwords (map (showReading d) ns) ++ (if null ns then "" else " ") +++ m ++ c ++ " at position: " ++ show p+ where+ [c, m, _] = ($ pe) `map` [peCode, peMessage, peComment]+ ns = peReading pe+ d = peDerivs pe+ p = pePositionS pe++showReading :: Gerna_Derivs -> String -> String+showReading d n+ | n == "char", Right (c, _) <- runError $ gerna_char d = show c+ | otherwise = "yet: " ++ n++maybeCons :: Maybe a -> [a] -> [a]+maybeCons mx xs = maybe xs (: xs) mx++data Text+ = NIhO Text [(Separator, Text)]+ | I Text [(Separator, Text)]+ | ICon Text [(Separator, Connective, Text)]+ | IBO Text [(Separator, Connective, BO, Text)]+ | BridiTail Text Text+ | Con Text [(Connective, Text)]+ | ConBO Text [(Connective, BO, Text)]+ | Gihek Text [(Connective, Text, Text)]+ | GihekBO Text [(Connective, BO, Text, Text)]+ | TanruCO Text [(CO, Text)]+ | Tanru [Text]+ | TanruBO Text [(BO, Text)]+ | Q Mex Text+ | QS Mex Text Terminator Relative+ | Gek Connective Text Connective Text+ | LE Initiator Relative Mex Text Terminator+ | Terms [Text] Terminator+ | Bridi Text Text+ | ZOhU Text Text+ | Tag Tag Text+ | Tags [Tag] Text+ | TagKU Tag Terminator+ | Rel Text Relative+ | RelSelbri Relative Text+ | CEI Text Initiator Text+ | BRIVLA String+ | BRIVLAF String Free+ | BBRIVLA [String] String+ | BBRIVLAF [String] String Free+ | CMEVLA String+ | CMEVLAF String Free+ | BCMEVLA [String] String+ | BCMEVLAF [String] String Free+ | KOhA String+ | KOhAF String Free+ | BKOhA [String] String+ | BKOhAF [String] String Free+ | GOhA String+ | GOhAF String Free+ | BGOhA [String] String+ | BGOhAF [String] String Free+ | MOI Mex Suffix+ | MEMOI Text Suffix+ | MESumti Initiator Text Terminator+ | MEMex Initiator Mex Terminator+ | MEJoik Initiator Connective Terminator+ | NU Initiator Text Terminator+ | KE Initiator Text Terminator+ | Prefix Prefix Text+ | Link Text Linkargs+ | LI Initiator Mex Terminator+ | LU Initiator Text Terminator+ | LAhE Initiator Relative Text Terminator+ | NAhEBO Prefix BO Relative Text Terminator+ | Clause Word+ | ClauseF Word Free+ | BClause [String] Word+ | BClauseF [String] Word Free+ | Lergum [Lerfu] Terminator+ | TUhE Initiator Text Terminator+ deriving Show++data Relative+ = GOI Initiator Text Terminator+ | NOI Initiator Text Terminator+ | ZIhE Relative [(Separator, Relative)]+ | RelSumti Text+ | VR VUhO Relative+ | NR+ deriving Show++data Linkargs+ = BE Initiator Text Terminator+ | BEI Initiator Text [(Separator, Text)] Terminator+ deriving Show++data Tag+ = BAI String+ | BAIF String Free+ | BBAI [String] String+ | BBAIF [String] String Free+ | FA String+ | FAF String Free+ | BFA [String] String+ | BFAF [String] String Free+ | NA String+ | NAF String Free+ | BNA [String] String+ | BNAF [String] String Free+ | TTags [Tag]+ | TTagCons Tag [(Connective, Tag)]+ | MexROI Mex Suffix+ | FIhO Initiator Text Terminator+ | PrefixTag Prefix Tag+ deriving Show++data Mex+ = MRel Mex Relative+ | MJoik Mex [(Connective, Mex)]+ | Ms [Mex] Terminator+ | P1 String+ | P1F String Free+ | BP1 [String] String+ | BP1F [String] String Free+ | Stub String+ | NQ+ | Lerfu Word+ | LerfuF Word Free+ | BLerfu [String] Word+ | BLerfuF [String] Word Free+ | NIhE Initiator Text Terminator+ | VEI Initiator Mex Terminator+ | MLAhE Initiator Mex Terminator+ | MNAhEBO Prefix BO Mex Terminator+ deriving Show++type Lerfu = Mex++data Connective+ = GA String+ | GAF String Free+ | BGA [String] String+ | BGAF [String] String Free+ | GI String+ | GIF String Free+ | BGI [String] String+ | BGIF [String] String Free+ | JOI String+ | JOIF String Free+ | BJOI [String] String+ | BJOIF [String] String Free+ | GIhA String+ | GIhAF String Free+ | BGIhA [String] String+ | BGIhAF [String] String Free+ | JOIGI Connective Connective+ | NACon Tag Connective+ | SECon Prefix Connective+ | NASECon Tag Prefix Connective+ | TAGGI Tag Connective+ | NC+ deriving Show++data Initiator+ = Init String+ | InitF String Free+ | BInit [String] String+ | BInitF [String] String Free+ deriving Show++data Terminator+ = Term String+ | TermF String Free+ | BTerm [String] String+ | BTermF [String] String Free+ | NT+ deriving Show++data Separator+ = Sep String+ | SepF String Free+ | BSep [String] String+ | BSepF [String] String Free+ deriving Show++data Prefix+ = NAhE String+ | NAhEF String Free+ | BNAhE [String] String+ | BNAhEF[String] String Free+ | SE String+ | SEF String Free+ | BSE [String] String+ | BSEF [String] String Free+ | JAI String+ | JAIF String Free+ | BJAI [String] String+ | BJAIF [String] String Free+ | JAITag Prefix Tag+ | XI String+ | XIF String Free+ | BXI [String] String+ | BXIF [String] String Free+ deriving Show++data BO = BO String+ | BOF String Free+ | BBO [String] String+ | BBOF [String] String Free+ | TagBO Tag BO+ deriving Show++data CO = CO String+ | COF String Free+ | BCO [String] String+ | BCOF [String] String Free+ deriving Show++data Suffix+ = Suffix String+ | SuffixF String Free+ | BSuffix [String] String+ | BSuffixF [String] String Free+ deriving Show++data VUhO+ = VUhO String+ | VUhOF String Free+ | BVUhO [String] String+ | BVUhOF [String] String Free+ deriving Show++data Free+ = UI String+ | UIF String Free+ | BUI [String] String+ | BUIF [String] String Free+ | DOI String+ | DOIF String Free+ | BDOI [String] String+ | BDOIF [String] String Free+ | COI String+ | COIF String Free+ | BCOI [String] String+ | BCOIF [String] String Free+ | COIs [Free] Terminator+ | Vocative [Free] Text Terminator+ | FXI Prefix Mex+ | MAI Mex Suffix+ | SEI Initiator Text Terminator+ | TO Initiator Text Terminator+ | NF+ deriving Show++data Word+ = BUStr Word [([BU], [ZEI])] [BU]+ | ZEIStr Word [([ZEI], [BU])] [ZEI]+ | ZO String+ | LOhU [String]+ | ZOI String String String+ | Word String+ deriving Show++data ZEI = ZEI String deriving Show+data BU = BU deriving Show++baheFree ::+ (a -> c) -> (a -> f -> c) -> ([b] -> a -> c) -> ([b] -> a -> f -> c) ->+ [b] -> a -> Maybe f -> c+baheFree a _ _ _ [] x Nothing = a x+baheFree _ af _ _ [] x (Just f) = af x f+baheFree _ _ ba _ b x Nothing = ba b x+baheFree _ _ _ baf b x (Just f) = baf b x f++data Either3 a b c = E1 a | E2 b | E3 c deriving Show++either3 :: Either3 a b c -> (a -> d) -> (b -> d) -> (c -> d) -> d+either3 (E1 x) f _ _ = f x+either3 (E2 y) _ f _ = f y+either3 (E3 z) _ _ f = f z++mkSelbri :: [Text] -> [(CO, Text)] -> Maybe Relative ->+ Maybe (Initiator, Text) -> Text+mkSelbri [s] [] rel cei = let+ b = maybe s (Rel s) rel in+ maybe b (uncurry $ CEI b) cei+mkSelbri [s] cs rel cei = let+ b = TanruCO s cs+ b' = maybe b (Rel b) rel in+ maybe b' (uncurry $ CEI b') cei+mkSelbri ss [] rel cei = let+ b = Tanru ss+ b' = maybe b (Rel b) rel in+ maybe b' (uncurry $ CEI b') cei+mkSelbri ss cs rel cei = let+ b = Tanru ss+ b' = TanruCO b cs+ b'' = maybe b' (Rel b) rel in+ maybe b'' (uncurry $ CEI b'') cei++mkBridiTail :: [Tag] -> Connective -> Text -> Connective -> Text -> [Text] ->+ Maybe Terminator -> Text+mkBridiTail [] ge b1 gi b2 [] Nothing = Gek ge b1 gi b2+mkBridiTail [] ge b1 gi b2 terms vau =+ BridiTail (Gek ge b1 gi b2) $ Terms terms $ fromMaybe NT vau+mkBridiTail tag ge b1 gi b2 [] Nothing = Tags tag $ Gek ge b1 gi b2+mkBridiTail tag ge b1 gi b2 terms vau = Tags tag $+ BridiTail (Gek ge b1 gi b2) $ Terms terms $ fromMaybe NT vau++mkGihekBO :: Connective -> Maybe Tag -> BO -> Text -> [Text] -> Maybe Terminator ->+ (Connective, BO, Text, Text)+mkGihekBO g tag bo b terms v =+ (g, maybe bo (flip TagBO bo) tag, b, Terms terms $ fromMaybe NT v)++mkMex1 :: [Mex] -> Maybe Terminator -> Mex+mkMex1 [m] Nothing = m+mkMex1 ms v = Ms ms $ fromMaybe NT v++mkConnective :: Maybe Tag -> Maybe Prefix -> Connective -> Connective+mkConnective (Just n) (Just s) c = NASECon n s c+mkConnective (Just n) _ c = NACon n c+mkConnective _ (Just s) c = SECon s c+mkConnective _ _ c = c++mkTags :: [Tag] -> Tag+mkTags [t] = t+mkTags ts = TTags ts++mkTagCons :: [Tag] -> [(Connective, Tag)] -> Tag+mkTagCons [t] [] = t+mkTagCons [t] cts = TTagCons t cts+mkTagCons ts [] = TTags ts+mkTagCons ts cts = TTagCons (TTags ts) cts++mkVocative :: [Free] -> Maybe Text -> Maybe Terminator -> Free+mkVocative [c] Nothing Nothing = c+mkVocative cs (Just s) dohu = Vocative cs s $ fromMaybe NT dohu+mkVocative cs _ dohu = COIs cs $ fromMaybe NT dohu++[papillon|++prefix: "gerna_"++-- ****** A. GRAMMAR ******++-- 1. Text Paragraphs Statement++text :: (Free, Text, Terminator)+ = _:words_SU* _:SI_tail* ps:post p:paragraphs f:FAhO_?+ { (fromMaybe NF ps, p, fromMaybe NT f) }++paragraphs :: Text = p:paragraph ps:(n:NIhO_ p:paragraph { (n, p) })*+ { if null ps then p else NIhO p ps }++paragraph :: Text = s:statement is:(i:I_ s:statement { (i, s) })*+ { if null is then s else I s is }++statement :: Text = s:statement_1 is:+ ( i:I_ j:joik s:statement_1 { (i, j, s) }+ )*+ { if null is then s else ICon s is }++statement_1 :: Text = s:sentence is:+ ( i:I_ j:joik? t:tag? b:BO_ s:sentence+ { (i, fromMaybe NC j, maybe b (flip TagBO b) t, s) }+ )* { if null is then s else IBO s is }++-- 2. Sentence Bridi++sentence :: Text+ = tc:(t:term+ c:CU_? { Terms t $ fromMaybe NT c })? b:bridi_tail+ { maybe b (flip Bridi b) tc }+ / te:TUhE_ p:paragraphs tu:TUhU_ { TUhE te p tu }+ / ge:gek s1:sentence gi:GI_ s2:sentence { Gek ge s1 gi s2 }+ / t:term+ z:ZOhU_ s:sentence { ZOhU (Terms t z) s }+ / t:term* v:VAU_? { Terms t $ fromMaybe NT v }++bridi_tail :: Text = b:bridi_tail_1 gb:+ ( g:gihek b:bridi_tail_1 t:term* v:VAU_?+ { (g, b, Terms t $ fromMaybe NT v) }+ )* { if null gb then b else Gihek b gb }++bridi_tail_1 :: Text = b:bridi_tail_2 gb:+ ( g:gihek tg:tag? bo:BO_ b':bridi_tail_2 t:term* v:VAU_?+ { mkGihekBO g tg bo b' t v } )*+ { if null gb then b else GihekBO b gb }++bridi_tail_2 :: Text+ = s:selbri t:term* v:VAU_?+ { if null t && isNothing v then s else+ BridiTail s $ Terms t $ fromMaybe NT v }+ / tn:(t:tag { t } / n:NA_ { n })* ge:gek b1:bridi_tail gi:GI_+ b2:bridi_tail t:term* v:VAU_?+ { mkBridiTail tn ge b1 gi b2 t v }++-- 3. Term Sumti++term :: Text+ = f:FA_? s:sumti { maybe s (flip Tag s) f }+ / t:tag? s:sumti { maybe s (flip Tag s) t }+ / f:FA_ k:KU_? { TagKU f $ fromMaybe NT k }+ / t:tag k:KU_? { TagKU t $ fromMaybe NT k }+ / n:NA_ k:KU_? { TagKU n $ fromMaybe NT k }+ / ge:gek t1:term+ v:VAU_? gi:GI_ t2:term+ v:VAU_?+ { Gek ge (Terms t1 $ fromMaybe NT v)+ gi (Terms t2 $ fromMaybe NT v) }++sumti :: Text = s1:sumti_1 js:(j:joik s2:sumti_1 { (j, s2) })*+ vr:(v:VUhO_ r:rels { VR v r })?+ { if null js then s1 else let c = Con s1 js in+ maybe c (Rel c) vr }++sumti_1 :: Text = s1:sumti_2 jss:+ ( j:joik t:tag? bw:BO_ s2:sumti_2+ { (j, maybe bw (\t -> TagBO t bw) t, s2) }+ )* { if null jss then s1 else ConBO s1 jss }++sumti_2 :: Text+ = q:quantifier? s:bare_sumti { maybe s (flip Q s) q }+ / q:quantifier s:selbri k:KU_? r:rels? { QS q s (fromMaybe NT k)+ (fromMaybe NR r) }+ / ge:gek s1:sumti gi:GI_ s2:sumti { Gek ge s1 gi s2 }++bare_sumti :: Text = s:+ ( d:description { d }+ / li:LI_ m:mex lo:LOhO_? { LI li m $ fromMaybe NT lo }+ / z:ZO_word_ { z }+ / lu:LU_ p:paragraphs li:LIhU_? { LU lu p $ fromMaybe NT li }+ / l:LOhU_words_LEhU_ { l }+ / z:ZOI_anything_ { z }+ / k:KOhA_ { k }+ / !_:tag !_:selbri ls:(l:lerfu { l })+ b:BOI_?+ { Lergum ls $ fromMaybe NT b }+ / !_:tag !_:selbri+ ln:(l:LAhE_ { Left l } / n:NAhE_ b:BO_ { Right (n, b) })+ r:rels? s:sumti lu:LUhU_? { either+ (\l -> LAhE l+ (fromMaybe NR r)+ s+ (fromMaybe NT lu))+ (\(n, b) -> NAhEBO n b+ (fromMaybe NR r)+ s+ (fromMaybe NT lu))+ ln }+ ) r:rels? { maybe s (Rel s) r }++description :: Text = l:LE_ rs:(r:rels { r } / s:bare_sumti { RelSumti s })?+ q:quantifier? ss:(s:selbri { s } / s:bare_sumti { s }) k:KU_?+ { LE l (fromMaybe NR rs) (fromMaybe NQ q) ss (fromMaybe NT k) }++-- 4. Mex++quantifier :: Mex+ = !_:bare_sumti !_:selbri m:mex r:rels? { maybe m (MRel m) r }++mex :: Mex = m:mex_1 jm:(j:joik m':mex_1 { (j, m') })*+ { if null jm then m else MJoik m jm }++mex_1 :: Mex+ = p:PA_+ b:BOI_? { mkMex1 p b }+ / l:lerfu+ b:BOI_? { mkMex1 l b }+ / n:NIhE_ s:selbri t:TEhU_? { NIhE n s $ fromMaybe NT t }+ / vei:VEI_ m:mex veho:VEhO_? { VEI vei m $ fromMaybe NT veho }+ / lnb:(l:LAhE_ { Left l } / n:NAhE_ b:BO_ { Right (n, b) })+ m:mex luhu:LUhU_?+ { either+ (\l -> MLAhE l m $ fromMaybe NT luhu)+ (\(n, b) -> MNAhEBO n b m $ fromMaybe NT luhu)+ lnb }++lerfu :: Lerfu+ = b:BY_ { b }+ / b:word_BU_ { b }++-- 5. Relative++rels :: Relative = r:rel rs:(z:ZIhE_ r:rel { (z, r) })*+ { if null rs then r else ZIhE r rs }++rel :: Relative+ = goi:GOI_ t:term gehu:GEhU_? { GOI goi t $ fromMaybe NT gehu }+ / n:NOI_ s:sentence k:KUhO_? { NOI n s $ fromMaybe NT k }++-- 6. Selbri Tanru unit++selbri :: Text+ = sl:selbri_1+ cs:(c:CO_ s:selbri_1 { (c, s) })* r:rels?+ cei:(c:CEI_ s:selbri { (c, s) })? { mkSelbri sl cs r cei }+ / t:tag s:selbri { Tag t s }+ / n:NA_ s:selbri { Tag n s }++selbri_1 :: Text = s:selbri_2 js:(j:joik s2:selbri_2 { (j, s2) })*+ { if null js then s else Con s js }++selbri_2 :: Text = s:selbri_3 jbs:+ ( j:joik t:tag? b:BO_ s:selbri_3+ { (j, maybe b (\t -> TagBO t b) t, s) }+ )* { if null jbs then s else ConBO s jbs }++selbri_3 :: Text = t:tanru_unit bts:(b:BO_ t:tanru_unit { (b, t) })*+ { if null bts then t else TanruBO t bts }++tanru_unit :: Text+ = t:tanru_unit_1 l:linkargs? { maybe t (Link t) l }++tanru_unit_1 :: Text+ = b:BRIVLA_ { b }+ / z:word_ZEI_word_ { z }+ / c:CMEVLA_ { c }+ / g:GOhA_ { g }+ / m:mex mo:MOI_ { MOI m mo }+ / me:ME_ smj:(s:sumti { E1 s } / m:mex { E2 m } / j:joik { E3 j })+ mehu:MEhU_? moi:MOI_?+ { let b = either3 smj+ (\s -> MESumti me s $ fromMaybe NT mehu)+ (\m -> MEMex me m $ fromMaybe NT mehu)+ (\j -> MEJoik me j $ fromMaybe NT mehu) in+ maybe b (MEMOI b) moi }+ / n:NU_ s:sentence k:KEI_? { NU n s $ fromMaybe NT k }+ / ke:KE_ s:selbri k:KEhE_? { KE ke s $ fromMaybe NT k }+ / p:+ ( s:SE_ { s }+ / j:JAI_ t:tag? { maybe j (JAITag j) t }+ / n:NAhE_ { n }+ ) t:tanru_unit_1 { Prefix p t }++-- 7. Link args++linkargs :: Linkargs+ = be:BE_ t:term bts:(b:BEI_ t':term { (b, t') })* beho:BEhO_?+ { if null bts then BE be t $ fromMaybe NT beho+ else BEI be t bts $ fromMaybe NT beho }++-- 8. Connective++joik :: Connective+ = n:NA_? s:SE_? j:JOI_ { mkConnective n s j }++gihek :: Connective+ = n:NA_? s:SE_? g:GIhA_ { mkConnective n s g }++gek :: Connective+ = s:SE_? g:GA_ { maybe g (flip SECon g) s }+ / s:SE_? j:JOI_ g:GI_ { maybe (JOIGI j g) (flip SECon $ JOIGI j g) s }+ / t:tag_unit+ jt:(j:joik t':tag_unit+ { (j, mkTags t') })* g:GI_+ { TAGGI (mkTagCons t jt) g }++-- 9. Tense Modal++tag :: Tag+ = t:tag_unit+ jt:(j:joik t':tag_unit+ { (j, mkTags t') })* !_:GI_+ { mkTagCons t jt }++tag_unit :: Tag+ = b:BAI_ { b }+ / m:mex r:ROI_ { MexROI m r }+ / fi:FIhO_ s:selbri fe:FEhU_? { FIhO fi s $+ fromMaybe NT fe }+ / p:(n:NAhE_ { n } / s:SE_ { s }) t:tag_unit { PrefixTag p t }++-- 10. Free modifier++-- stub+free :: Free+ = u:UI_ { u }+ / x:XI_ m:mex_1 { FXI x m }+ / m:mex_1 mai:MAI_ { MAI m mai }+ / sei:SEI_ tc:(t:term+ c:CU_? { Terms t $ fromMaybe NT c })?+ s:selbri sehu:SEhU_?+ { SEI sei (maybe s (flip Bridi s) tc) $ fromMaybe NT sehu }+ / to:TO_ p:paragraphs toi:TOI_? { TO to p $ fromMaybe NT toi }+ / v:vocative { v }++vocative :: Free+ = cd:(c:COI_+ d:DOI_? { c ++ maybeToList d } / d:DOI_ { [d] })+ rss:(r:rels? s:selbri { Just $ maybe s (flip RelSelbri s) r } /+ s:sumti? { s }) dohu:DOhU_?+ { mkVocative cd rss dohu }++-- ****** B. LOW LEVEL GRAMMAR ******++--- 11. SELMAhO ---++BRIVLA_ :: Text = pr:pre b:BRIVLA ps:post { baheFree BRIVLA BRIVLAF+ BBRIVLA BBRIVLAF+ pr b ps }++CMEVLA_ :: Text = pr:pre c:CMEVLA ps:post { baheFree CMEVLA CMEVLAF+ BCMEVLA BCMEVLAF+ pr c ps }++BAI_ :: Tag = pr:pre b:BAI ps:post { baheFree BAI BAIF+ BBAI BBAIF+ pr b ps }++BE_ :: Initiator = pr:pre b:BE ps:post { baheFree Init InitF+ BInit BInitF+ pr b ps }++BEI_ :: Separator = pr:pre b:BEI ps:post { baheFree Sep SepF+ BSep BSepF+ pr b ps }++BEhO_ :: Terminator = pr:pre b:BEhO ps:post { baheFree Term TermF+ BTerm BTermF+ pr b ps }++BO_ :: BO = pr:pre b:BO ps:post { baheFree BO BOF+ BBO BBOF+ pr b ps }++BOI_ :: Terminator = pr:pre b:BOI ps:post { baheFree Term TermF+ BTerm BTermF+ pr b ps }++BY_ :: Lerfu = pr:pre b:BY ps:lerfu_post { baheFree Lerfu LerfuF+ BLerfu BLerfuF+ pr (Word b) ps }++CEI_ :: Initiator = pr:pre c:CEI ps:post { baheFree Init InitF+ BInit BInitF+ pr c ps }++CO_ :: CO = pr:pre c:CO ps:post { baheFree CO COF+ BCO BCOF+ pr c ps }++COI_ :: Free = pr:pre c:COI ps:vocative_post { baheFree COI COIF+ BCOI BCOIF+ pr c ps }++CU_ :: Terminator = pr:pre c:CU ps:post { baheFree Term TermF+ BTerm BTermF+ pr c ps }++DOI_ :: Free = pr:pre d:DOI ps:post { baheFree DOI DOIF+ BDOI BDOIF+ pr d ps }++DOhU_ :: Terminator = pr:pre d:DOhU ps:post { baheFree Term TermF+ BTerm BTermF+ pr d ps }++FA_ :: Tag = pr:pre f:FA ps:post { baheFree FA FAF+ BFA BFAF+ pr f ps }++FAhO_ :: Terminator = pr:pre f:FAhO ps:post { baheFree Term TermF+ BTerm BTermF+ pr f ps }++FIhO_ :: Initiator = pr:pre f:FIhO ps:post { baheFree Init InitF+ BInit BInitF+ pr f ps }++FEhU_ :: Terminator = pr:pre f:FEhU ps:post { baheFree Term TermF+ BTerm BTermF+ pr f ps }++GA_ :: Connective = pr:pre g:GA ps:post { baheFree GA GAF+ BGA BGAF+ pr g ps }++GEhU_ :: Terminator = pr:pre g:GEhU ps:post { baheFree Term TermF+ BTerm BTermF+ pr g ps }++GI_ :: Connective = pr:pre g:GI ps:post { baheFree GI GIF+ BGI BGIF+ pr g ps }++GIhA_ :: Connective = pr:pre g:GIhA ps:post { baheFree GIhA GIhAF+ BGIhA BGIhAF+ pr g ps }++GOI_ :: Initiator = pr:pre g:GOI ps:post { baheFree Init InitF+ BInit BInitF+ pr g ps }++GOhA_ :: Text = pr:pre g:GOhA ps:post { baheFree GOhA GOhAF+ BGOhA BGOhAF+ pr g ps }++I_ :: Separator = pr:pre i:SelmahoI ps:post { baheFree Sep SepF+ BSep BSepF+ pr i ps }++JAI_ :: Prefix = pr:pre j:JAI ps:post { baheFree JAI JAIF+ BJAI BJAIF+ pr j ps }++JOI_ :: Connective = pr:pre j:JOI ps:post { baheFree JOI JOIF+ BJOI BJOIF+ pr j ps }++KE_ :: Initiator = pr:pre k:KE ps:post { baheFree Init InitF+ BInit BInitF+ pr k ps }++KEhE_ :: Terminator = pr:pre k:KEhE ps:post { baheFree Term TermF+ BTerm BTermF+ pr k ps }++KEI_ :: Terminator = pr:pre k:KEI ps:post { baheFree Term TermF+ BTerm BTermF+ pr k ps }++KOhA_ :: Text = pr:pre k:KOhA ps:post { baheFree KOhA KOhAF+ BKOhA BKOhAF+ pr k ps }++KU_ :: Terminator = pr:pre k:KU ps:post { baheFree Term TermF+ BTerm BTermF+ pr k ps }++KUhO_ :: Terminator = pr:pre k:KUhO ps:post { baheFree Term TermF+ BTerm BTermF+ pr k ps }++LAhE_ :: Initiator = pr:pre l:LAhE ps:post { baheFree Init InitF+ BInit BInitF+ pr l ps }++LE_ :: Initiator = pr:pre l:LE ps:post { baheFree Init InitF+ BInit BInitF+ pr l ps }++LI_ :: Initiator = pr:pre l:LI ps:post { baheFree Init InitF+ BInit BInitF+ pr l ps }++LIhU_ :: Terminator = pr:pre l:LIhU ps:post { baheFree Term TermF+ BTerm BTermF+ pr l ps }++LOhO_ :: Terminator = pr:pre l:LOhO ps:post { baheFree Term TermF+ BTerm BTermF+ pr l ps }++LU_ :: Initiator = pr:pre l:LU ps:post { baheFree Init InitF+ BInit BInitF+ pr l ps }++LUhU_ :: Terminator = pr:pre l:LUhU ps:post { baheFree Term TermF+ BTerm BTermF+ pr l ps }++MAI_ :: Suffix = pr:pre m:MAI ps:post { baheFree Suffix SuffixF+ BSuffix BSuffixF+ pr m ps }++ME_ :: Initiator = pr:pre m:ME ps:post { baheFree Init InitF+ BInit BInitF+ pr m ps }++MEhU_ :: Terminator = pr:pre m:MEhU ps:post { baheFree Term TermF+ BTerm BTermF+ pr m ps }++MOI_ :: Suffix = pr:pre m:MOI ps:post { baheFree Suffix SuffixF+ BSuffix BSuffixF+ pr m ps }++NA_ :: Tag = pr:pre n:NA ps:post { baheFree NA NAF+ BNA BNAF+ pr n ps }++NAhE_ :: Prefix = pr:pre n:NAhE ps:post { baheFree NAhE NAhEF+ BNAhE BNAhEF+ pr n ps }++NIhE_ :: Initiator = pr:pre n:NIhE ps:post { baheFree Init InitF+ BInit BInitF+ pr n ps }++NIhO_ :: Separator = pr:pre n:NIhO ps:post { baheFree Sep SepF+ BSep BSepF+ pr n ps }++NOI_ :: Initiator = pr:pre n:NOI ps:post { baheFree Init InitF+ BInit BInitF+ pr n ps }++NU_ :: Initiator = pr:pre n:NU ps:post { baheFree Init InitF+ BInit BInitF+ pr n ps }++PA_ :: Mex = pr:pre p:PA ps:number_post { baheFree P1 P1F+ BP1 BP1F+ pr p ps }++ROI_ :: Suffix = pr:pre r:ROI ps:post { baheFree Suffix SuffixF+ BSuffix BSuffixF+ pr r ps }++SE_ :: Prefix = pr:pre s:SE ps:post { baheFree SE SEF+ BSE BSEF+ pr s ps }++SEI_ :: Initiator = pr:pre s:SEI ps:post { baheFree Init InitF+ BInit BInitF+ pr s ps }++SEhU_ :: Terminator = pr:pre s:SEhU ps:post { baheFree Term TermF+ BTerm BTermF+ pr s ps }++TEhU_ :: Terminator = pr:pre t:TEhU ps:post { baheFree Term TermF+ BTerm BTermF+ pr t ps }++TO_ :: Initiator = pr:pre t:TO ps:post { baheFree Init InitF+ BInit BInitF+ pr t ps }++TOI_ :: Terminator = pr:pre t:TOI ps:post { baheFree Term TermF+ BTerm BTermF+ pr t ps }++TUhE_ :: Initiator = pr:pre t:TUhE ps:post { baheFree Init InitF+ BInit BInitF+ pr t ps }++TUhU_ :: Terminator = pr:pre t:TUhU ps:post { baheFree Term TermF+ BTerm BTermF+ pr t ps }++UI_ :: Free = pr:pre u:UI ps:post { baheFree UI UIF+ BUI BUIF+ pr u ps }++VAU_ :: Terminator = pr:pre v:VAU ps:post { baheFree Term TermF+ BTerm BTermF+ pr v ps }++VEI_ :: Initiator = pr:pre v:VEI ps:post { baheFree Init InitF+ BInit BInitF+ pr v ps }++VEhO_ :: Terminator = pr:pre v:VEhO ps:post { baheFree Term TermF+ BTerm BTermF+ pr v ps }++VUhO_ :: VUhO = pr:pre v:VUhO ps:post { baheFree VUhO VUhOF+ BVUhO BVUhOF+ pr v ps }++XI_ :: Prefix = pr:pre x:XI ps:post { baheFree XI XIF+ BXI BXIF+ pr x ps }++ZIhE_ :: Separator = pr:pre z:ZIhE ps:post { baheFree Sep SepF+ BSep BSepF+ pr z ps }++ZOhU_ :: Terminator = pr:pre z:ZOhU ps:post { baheFree Term TermF+ BTerm BTermF+ pr z ps }++--- 12. Pseudo SELMAhO ---++word_ZEI_word_ :: Text = pr:pre z:word_ZEI_word ps:post { baheFree Clause ClauseF+ BClause BClauseF+ pr z ps }++word_BU_ :: Lerfu = pr:pre b:word_BU ps:post { baheFree Lerfu LerfuF+ BLerfu BLerfuF+ pr b ps }++ZO_word_ :: Text = pr:pre z:ZO_word ps:post { baheFree Clause ClauseF+ BClause BClauseF+ pr z ps }++LOhU_words_LEhU_ :: Text = pr:pre l:LOhU_words_LEhU ps:post+ { baheFree Clause ClauseF+ BClause BClauseF+ pr l ps }++ZOI_anything_ :: Text = pr:pre z:ZOI_anything ps:post { baheFree Clause ClauseF+ BClause BClauseF+ pr z ps }++--- 13. Word Modifiers ---++pre :: [String] = bs:(_:word_SI* b:BAhE { b })* _:word_SI*+ { bs }++post :: Maybe Free = !_:BU_tail !_:ZEI_tail f:free? { f }++number_post :: Maybe Free = !_:BU_tail !_:ZEI_tail fr:(!_:PA_ f:free { f })?+ { fr }++lerfu_post :: Maybe Free = !_:BU_tail !_:ZEI_tail fr:(!_:lerfu f:free { f })?+ { fr }++vocative_post :: Maybe Free = !_:BU_tail !_:ZEI_tail fr:(!_:vocative f:free { f })?+ { fr }++-- ****** C. MAGIC WORD CONSTRUCTS ******++words_SU :: [Word] = ws:+ ( z:word_ZEI_word { z }+ / b:word_BU { b }+ / z:ZO_word { z }+ / l:LOhU_words_LEhU { l }+ / z:ZOI_anything { z }+ / !_:SU a:any_word { Word a }+ )* _:SU_tail { ws }++word_SI :: Word = w:+ ( z:word_ZEI_word { z }+ / b:word_BU { b }+ / z:ZO_word { z }+ / l:LOhU_words_LEhU { l }+ / z:ZOI_anything { z }+ / a:any_word { Word a }+ ) _:SI_tail { w }++word_BU :: Word = w:+ ( z:ZO_word { z }+ / l:LOhU_words_LEhU { l }+ / z:ZOI_anything { z }+ / a:any_word { Word a }+ ) bzs:+ ( bts:(bt:BU_tail { bt })*+ zts:(zt:ZEI_tail { zt })+ { (bts, zts) }+ )* b:BU_tail+ { BUStr w bzs b }++word_ZEI_word :: Word = w:+ ( z:ZO_word { z }+ / l:LOhU_words_LEhU { l }+ / z:ZOI_anything { z }+ / a:any_word { Word a }+ ) zbs:+ ( zts:(zt:ZEI_tail { zt } )*+ bts:(bt:BU_tail { bt })+ { (zts, bts) }+ )* z:ZEI_tail+ { ZEIStr w zbs z }++SU_tail :: () = _:word_SI* _:SU++SI_tail :: () = _:word_SI* _:SI++BU_tail :: BU = _:word_SI* _:BU { BU }++ZEI_tail :: ZEI = _:word_SI* _:ZEI w:any_word { ZEI w }++ZO_word :: Word = _:ZO w:any_word { ZO w }++LOhU_words_LEhU :: Word = _:LOhU ws:+ ( !_:LEhU w:any_word { w }+ )* _:LEhU { LOhU ws }++ZOI_anything :: Word = z:ZOI sep:any_word str:+ ( !w:any_word[w == sep] c:anything { c }+ )* sep':any_word[sep == sep'] { ZOI z sep $ unwords str }++-- ****** D. WORDS ******++anything :: String = _:Y* ns:non_space+ { ns }++any_word :: String+ = c:CMEVLA { c }+ / b:BRIVLA { b }+ / c:CMAVO { c }++CMEVLA :: String = _:Y* c:cmevla { c }+BRIVLA :: String = _:Y* b:brivla { b }+CMAVO :: String = _:Y* c:cmavo { c }++BAI :: String = _:Y* &_:cmavo r:+ ( c:c a:a h:h a:a { [c, a, h, a] }+ / p:p u:u h:h i:i { [p, u, h, i] }+ / n:n u:u h:h o:o { [n, u, h, o] }+ / k:k a:a h:h e:e { [k, a, h, e] }+ / c:c u:u h:h e:e { [c, u, h, e] }+ / n:n a:a u:u { [n, a, u] }+ / r:r u:u h:h i:i { [r, u, h, i] }+ / t:t a:a h:h e:e { [t, a, h, e] }+ / d:d i:i h:h i':i { [d, i, h, i'] }+ / n:n a:a h:h o:o { [n, a, h, o] }+ / v:v e:e h:h u:u { [v, e, h, u] }+ / v:v e:e h:h a:a { [v, e, h, a] }+ / v:v e:e h:h i:i { [v, e, h, i] }+ / v:v e:e h:h e:e { [v, e, h, e] }+ / v:v i:i h:h i:i { [v, i, h, i] }+ / v:v i:i h:h a:a { [v, i, h, a] }+ / v:v i:i h:h u:u { [v, i, h, u] }+ / v:v i:i h:h e:e { [v, i, h, e] }+ / v:v i:i !_:h !_:nucleus { [v, i] }+ / v:v a:a !_:h !_:nucleus { [v, a] }+ / v:v u:u !_:h !_:nucleus { [v, u] }+ / d:d u:u h:h a:a { [d, u, h, a] }+ / b:b e:e h:h a:a { [b, e, h, a] }+ / n:n e:e h:h u:u { [n, e, h, u] }+ / v:v u:u h:h a:a { [v, u, h, a] }+ / g:g a:a h:h u:u { [g, a, h, u] }+ / t:t i:i h:h a:a { [t, i, h, a] }+ / n:n i:i h:h a:a { [n, i, h, a] }+ / c:c a:a h:h u:u { [c, a, h, u] }+ / z:z u:u h:h a:a { [z, u, h, a] }+ / r:r i:i h:h u:u { [r, i, h, u] }+ / r:r u:u h:h u:u { [r, u, h, u] }+ / r:r e:e h:h o:o { [r, e, h, o] }+ / t:t e:e h:h e':e { [t, e, h, e'] }+ / b:b u:u h:h u':u { [b, u, h, u'] }+ / n:n e:e h:h a:a { [n, e, h, a] }+ / p:p a:a h:h o:o { [p, a, h, o] }+ / n:n e:e h:h i:i { [n, e, h, i] }+ / t:t o:o h:h o':o { [t, o, h, o'] }+ / z:z o:o h:h i:i { [z, o, h, i] }+ / z:z e:e h:h o:o { [z, e, h, o] }+ / z:z o:o h:h a:a { [z, o, h, a] }+ / f:f a:a h:h a':a { [f, a, h, a'] }+ / z:z e:e h:h u:u { [z, e, h, u] }+ / z:z e:e h:h a:a { [z, e, h, a] }+ / z:z e:e h:h i:i { [z, e, h, i] }+ / z:z e:e h:h e:e { [z, e, h, e] }+ / c:c o:o h:h i:i { [c, o, h, i] }+ / p:p u:u h:h o:o { [p, u, h, o] }+ / c:c o:o h:h u:u { [c, o, h, u] }+ / m:m o:o h:h u:u { [m, o, h, u] }+ / c:c a:a h:h o:o { [c, a, h, o] }+ / c:c o:o h:h a:a { [c, o, h, a] }+ / d:d e:e h:h a:a { [d, e, h, a] }+ / b:b a:a h:h o:o { [b, a, h, o] }+ / d:d i:i h:h a:a { [d, i, h, a] }+ / z:z a:a h:h o:o { [z, a, h, o] }+ / z:z u:u !_:h !_:nucleus { [z, u] }+ / z:z a:a !_:h !_:nucleus { [z, a] }+ / z:z i:i !_:h !_:nucleus { [z, i] }+ / b:b a:a !_:h !_:nucleus { [b, a] }+ / p:p u:u !_:h !_:nucleus { [p, u] }+ / c:c a:a !_:h !_:nucleus { [c, a] }+ / k:k i:i !_:h !_:nucleus { [k, i] }+ / d:d u:u h:h o:o { [d, u, h, o] }+ / s:s i:i h:h u:u { [s, i, h, u] }+ / z:z a:a u:u { [z, a, u] }+ / k:k i:i h:h i':i { [k, i, h, i'] }+ / d:d u:u h:h i:i { [d, u, h, i] }+ / c:c u:u h:h u':u { [c, u, h, u'] }+ / t:t u:u h:h i:i { [t, u, h, i] }+ / t:t i:i h:h u:u { [t, i, h, u] }+ / d:d i:i h:h o:o { [d, i, h, o] }+ / j:j i:i h:h u:u { [j, i, h, u] }+ / r:r i:i h:h a:a { [r, i, h, a] }+ / n:n i:i h:h i':i { [n, i, h, i'] }+ / m:m u:u h:h i:i { [m, u, h, i] }+ / k:k i:i h:h u:u { [k, i, h, u] }+ / v:v a:a h:h u:u { [v, a, h, u] }+ / k:k o:o i:i { [k, o, i] }+ / c:c a:a h:h i:i { [c, a, h, i] }+ / t:t a:a h:h i:i { [t, a, h, i] }+ / p:p u:u h:h e:e { [p, u, h, e] }+ / j:j a:a h:h i:i { [j, a, h, i] }+ / k:k a:a i:i { [k, a, i] }+ / b:b a:a i:i { [b, a, i] }+ / f:f i:i h:h e:e { [f, i, h, e] }+ / d:d e:e h:h i:i { [d, e, h, i] }+ / c:c i:i h:h o:o { [c, i, h, o] }+ / m:m a:a u:u { [m, a, u] }+ / m:m u:u h:h u':u { [m, u, h, u'] }+ / r:r i:i h:h i':i { [r, i, h, i'] }+ / r:r a:a h:h i:i { [r, a, h, i] }+ / k:k a:a h:h a:a { [k, a, h, a] }+ / p:p a:a h:h u:u { [p, a, h, u] }+ / p:p a:a h:h a:a { [p, a, h, a] }+ / l:l e:e h:h a:a { [l, e, h, a] }+ / k:k u:u h:h u:u { [k, u, h, u] }+ / t:t a:a i:i { [t, a, i] }+ / b:b a:a u:u { [b, a, u] }+ / m:m a:a h:h i:i { [m, a, h, i] }+ / c:c i:i h:h e:e { [c, i, h, e] }+ / f:f a:a u:u { [f, a, u] }+ / p:p o:o h:h i:i { [p, o, h, i] }+ / c:c a:a u:u { [c, a, u] }+ / m:m a:a h:h e:e { [m, a, h, e] }+ / c:c i:i h:h u:u { [c, i, h, u] }+ / r:r a:a h:h a':a { [r, a, h, a'] }+ / p:p u:u h:h a:a { [p, u, h, a] }+ / l:l i:i h:h e:e { [l, i, h, e] }+ / l:l a:a h:h u:u { [l, a, h, u] }+ / b:b a:a h:h i:i { [b, a, h, i] }+ / k:k a:a h:h i:i { [k, a, h, i] }+ / s:s a:a u:u { [s, a, u] }+ / f:f a:a h:h e:e { [f, a, h, e] }+ / b:b e:e h:h i:i { [b, e, h, i] }+ / t:t i:i h:h i':i { [t, i, h, i'] }+ / j:j a:a h:h e:e { [j, a, h, e] }+ / g:g a:a h:h a':a { [g, a, h, a'] }+ / v:v a:a h:h o:o { [v, a, h, o] }+ / j:j i:i h:h o:o { [j, i, h, o] }+ / m:m e:e h:h a:a { [m, e, h, a] }+ / d:d o:o h:h e:e { [d, o, h, e] }+ / j:j i:i h:h e:e { [j, i, h, e] }+ / p:p i:i h:h o:o { [p, i, h, o] }+ / g:g a:a u:u { [g, a, u] }+ / z:z u:u h:h e:e { [z, u, h, e] }+ / m:m e:e h:h e':e { [m, e, h, e'] }+ / r:r a:a i:i { [r, a, i] }+ ) &_:post_cmavo { r }++BAhE :: String = _:Y* &_:cmavo r:+ ( b:b a:a h:h e:e { [b, a, h, e] }+ / z:z a:a h:h e:e { [z, a, h, e] }+ ) &_:post_cmavo+ { r }++BE :: String = _:Y* &_:cmavo r:(b:b e:e { [b, e] }) &_:post_cmavo+ { r }++BEI :: String = _:Y* &_:cmavo r:(b:b e:e i:i { [b, e, i] }) &_:post_cmavo+ { r }++BEhO :: String = _:Y* &_:cmavo r:(b:b e:e h:h o:o { [b, e, h, o] }) &_:post_cmavo+ { r }++BO :: String = _:Y* &_:cmavo r:(b:b o:o { [b, o] }) &_:post_cmavo+ { r }++BOI :: String = _:Y* &_:cmavo r:(b:b o:o i:i { [b, o, i] }) &_:post_cmavo+ { r }++BU :: String = _:Y* &_:cmavo r:(b:b u:u { [b, u] }) &_:post_cmavo+ { r }++BY :: String = _:Y* &_:cmavo r:+ ( t:t e:e i:i { [t, e, i] }+ / f:f o:o i:i { [f, o, i] }+ / c:c e:e h:h a:a { [c, e, h, a] }+ / l:l a:a u:u { [l, a, u] }+ / z:z a:a i:i { [z, a, i] }+ / t:t a:a u:u { [t, a, u] }+ / j:j o:o h:h o:o { [j, o, h, o] }+ / r:r u:u h:h o:o { [r, u, h, o] }+ / g:g e:e h:h o:o { [g, e, h, o] }+ / j:j e:e h:h o:o { [j, e, h, o] }+ / l:l o:o h:h a:a { [l, o, h, a] }+ / n:n a:a h:h a:a { [n, a, h, a] }+ / s:s e:e h:h e:e { [s, e, h, e] }+ / t:t o:o h:h a:a { [t, o, h, a] }+ / g:g a:a h:h e:e { [g, a, h, e] }+ / y:y h:h y:y { [y, h, y] }+ / b:b y:y { [b, y] }+ / c:c y:y { [c, y] }+ / d:d y:y { [d, y] }+ / f:f y:y { [f, y] }+ / g:g y:y { [g, y] }+ / j:j y:y { [j, y] }+ / k:k y:y { [k, y] }+ / l:l y:y { [l, y] }+ / m:m y:y { [m, y] }+ / n:n y:y { [n, y] }+ / p:p y:y { [p, y] }+ / r:r y:y { [r, y] }+ / s:s y:y { [s, y] }+ / t:t y:y { [t, y] }+ / v:v y:y { [v, y] }+ / x:x y:y { [x, y] }+ / z:z y:y { [z, y] }+ ) &_:post_cmavo { r }++CEI :: String = _:Y* &_:cmavo r:(c:c e:e i:i { [c, e, i] }) &_:post_cmavo+ { r }++CO :: String = _:Y* &_:cmavo r:(c:c o:o { [c, o] }) &_:post_cmavo+ { r }++COI :: String = _:Y* &_:cmavo r:+ ( j:j u:u h:h i:i { [j, u, h, i] }+ / c:c o:o i:i { [c, o, i] }+ / f:f i:i h:h i':i { [f, i, h, i'] }+ / t:t a:a h:h a':a { [t, a, h, a'] }+ / m:m u:u h:h o:o { [m, u, h, o] }+ / f:f e:e h:h o:o { [f, e, h, o] }+ / c:c o:o h:h o':o { [c, o, h, o'] }+ / p:p e:e h:h u:u { [p, e, h, u] }+ / k:k e:e h:h o:o { [k, e, h, o] }+ / n:n u:u h:h e:e { [n, u, h, e] }+ / r:r e:e h:h i:i { [r, e, h, i] }+ / b:b e:e h:h e':e { [b, e, h, e'] }+ / j:j e:e h:h e':e { [j, e, h, e'] }+ / m:m i:i h:h e:e { [m, i, h, e] }+ / k:k i:i h:h e:e { [k, i, h, e] }+ / v:v i:i h:h o:o { [v, i, h, o] }+ ) &_:post_cmavo { r }++CU :: String = _:Y* &_:cmavo r:(c:c u:u { [c, u] }) &_:post_cmavo+ { r }++DOI :: String = _:Y* &_:cmavo r:(d:d o:o i:i { [d, o, i] }) &_:post_cmavo+ { r }++DOhU :: String = _:Y* &_:cmavo r:(d:d o:o h:h u:u { [d, o, h, u] }) &_:post_cmavo+ { r }++FA :: String = _:Y* &_:cmavo r:+ ( f:f a:a i:i { [f, a, i] }+ / f:f a:a { [f, a] }+ / f:f e:e { [f, e] }+ / f:f o:o { [f, o] }+ / f:f u:u { [f, u] }+ / f:f i:i h:h a:a { [f, i, h, a] }+ / f:f i:i { [f, i] }+ ) &_:post_cmavo { r }++FAhO :: String = _:Y* &_:cmavo r:(f:f a:a h:h o:o { [f, a, h, o] }) &_:post_cmavo+ { r }++FEhU :: String = _:Y* &_:cmavo r:(f:f e:e h:h u:u { [f, e, h, u] }) &_:post_cmavo+ { r }++FIhO :: String = _:Y* &_:cmavo r:(f:f i:i h:h o:o { [f, i, h, o] }) &_:post_cmavo+ { r }++GA :: String = _:Y* &_:cmavo r:+ ( g:g e:e h:h i:i { [g, e, h, i] }+ / g:g e:e { [g, e] }+ / g:g o:o { [g, o] }+ / g:g a:a { [g, a] }+ / g:g u:u { [g, u] }+ ) &_:post_cmavo { r }++GEhU :: String = _:Y* &_:cmavo r:(g:g e:e h:h u:u { [g, e, h, u] }) &_:post_cmavo+ { r }++GI :: String = _:Y* &_:cmavo r:(g:g i:i { [g, i] }) &_:post_cmavo+ { r }++GIhA :: String = _:Y* &_:cmavo r:+ ( g:g i:i h:h e:e { [g, i, h, e] }+ / g:g i:i h:h i:i { [g, i, h, i] }+ / g:g i:i h:h o:o { [g, i, h, o] }+ / g:g i:i h:h a:a { [g, i, h, a] }+ / g:g i:i h:h u:u { [g, i, h, u] }+ ) &_:post_cmavo { r }++GOI :: String = _:Y* &_:cmavo r:+ ( n:n o:o h:h u:u { [n, o, h, u] }+ / n:n e:e { [n, e] }+ / g:g o:o i:i { [g, o, i] }+ / p:p o:o h:h u:u { [p, o, h, u] }+ / p:p e:e { [p, e] }+ / p:p o:o { [p, o] }+ ) &_:post_cmavo { r }++GOhA :: String = _:Y* &_:cmavo r:+ ( m:m o:o { [m, o] }+ / n:n e:e i:i { [n, e, i] }+ / g:g o:o h:h u:u { [g, o, h, u] }+ / g:g o:o h:h o':o { [g, o, h, o'] }+ / g:g o:o h:h i:i { [g, o, h, i] }+ / n:n o:o h:h a:a { [n, o, h, a] }+ / g:g o:o h:h e:e { [g, o, h, e] }+ / g:g o:o h:h a:a { [g, o, h, a] }+ / d:d u:u { [d, u] }+ / b:b u:u h:h a:a { [b, u, h, a] }+ / b:b u:u h:h e:e { [b, u, h, e] }+ / b:b u:u h:h i:i { [b, u, h, i] }+ / c:c o:o h:h e:e { [c, o, h, e] }+ ) &_:post_cmavo { r }++SelmahoI :: String = _:Y* &_:cmavo r:(i:i { [i] }) &_:post_cmavo { r }++JAI :: String = _:Y* &_:cmavo r:(j:j a:a i:i { [j, a, i] }) &_:post_cmavo+ { r }++JOI :: String = _:Y* &_:cmavo r:+ ( f:f a:a h:h u:u { [f, a, h, u] }+ / p:p i:i h:h u:u { [p, i, h, u] }+ / j:j o:o i:i { [j, o, i] }+ / c:c e:e h:h o:o { [c, e, h, o] }+ / c:c e:e { [c, e] }+ / j:j o:o h:h u:u { [j, o, h, u] }+ / k:k u:u h:h a:a { [k, u, h, a] }+ / j:j o:o h:h e:e { [j, o, h, e] }+ / j:j u:u h:h e:e { [j, u, h, e] }+ / j:j o:o h:h i:i { [j, o, h, i] }+ / j:j e:e h:h i:i { [j, e, h, i] }+ / j:j e:e { [j, e] }+ / j:j o:o { [j, o] }+ / j:j a:a { [j, a] }+ / j:j u:u { [j, u] }+ / a:a { [a] }+ / e:e { [e] }+ / j:j i:i { [j, i] }+ / o:o { [o] }+ / u:u { [u] }+ / m:m i:i h:h i':i { [m, i, h, i'] }+ / b:b i:i h:h o:o { [b, i, h, o] }+ / b:b i:i h:h i':i { [b, i, h, i'] }+ / g:g e:e h:h a:a { [g, e, h, a] }+ / f:f u:u h:h u':u { [f, u, h, u'] }+ / p:p i:i h:h i':i { [p, i, h, i'] }+ / f:f e:e h:h i:i { [f, e, h, i] }+ / v:v u:u h:h u':u { [v, u, h, u'] }+ / s:s u:u h:h i:i { [s, u, h, i] }+ / j:j u:u h:h u:u { [j, u, h, u] }+ / g:g e:e i:i { [g, e, i] }+ / p:p a:a h:h i:i { [p, a, h, i] }+ / f:f a:a h:h i:i { [f, a, h, i] }+ / t:t e:e h:h a:a { [t, e, h, a] }+ / c:c u:u h:h a:a { [c, u, h, a] }+ / v:v a:a h:h a':a { [v, a, h, a'] }+ / n:n e:e h:h o:o { [n, e, h, o] }+ / d:d e:e h:h o:o { [d, e, h, o] }+ / f:f e:e h:h a:a { [f, e, h, a] }+ / s:s a:a h:h o:o { [s, a, h, o] }+ / r:r e:e h:h a:a { [r, e, h, a] }+ / r:r i:i h:h o:o { [r, i, h, o] }+ / s:s a:a h:h i:i { [s, a, h, i] }+ / p:p i:i h:h a:a { [p, i, h, a] }+ / s:s i:i h:h i:i { [s, i, h, i] }+ ) &_:post_cmavo { r }++KE :: String = _:Y* &_:cmavo r:(k:k e:e { [k, e] }) &_:post_cmavo+ { r }++KEhE :: String = _:Y* &_:cmavo r:(k:k e:e h:h e':e { [k, e, h, e'] }) &_:post_cmavo+ { r }++KEI :: String = _:Y* &_:cmavo r:(k:k e:e i:i { [k, e, i] }) &_:post_cmavo+ { r }++KOhA :: String = _:Y* &_:cmavo r:+ ( d:d a:a h:h u:u { [d, a, h, u] }+ / d:d a:a h:h e:e { [d, a, h, e] }+ / d:d i:i h:h u:u { [d, i, h, u] }+ / d:d i:i h:h e:e { [d, i, h, e] }+ / d:d e:e h:h u:u { [d, e, h, u] }+ / d:d e:e h:h e:e { [d, e, h, e] }+ / d:d e:e i:i { [d, e, i] }+ / d:d o:o h:h i:i { [d, o, h, i] }+ / m:m i:i h:h o:o { [m, i, h, o] }+ / m:m a:a h:h a:a { [m, a, h, a] }+ / m:m i:i h:h a:a { [m, i, h, a] }+ / d:d o:o h:h o':o { [d, o, h, o'] }+ / k:k o:o h:h a:a { [k, o, h, a] }+ / f:f o:o h:h u:u { [f, o, h, u] }+ / k:k o:o h:h e:e { [k, o, h, e] }+ / k:k o:o h:h i:i { [k, o, h, i] }+ / k:k o:o h:h o':o { [k, o, h, o'] }+ / k:k o:o h:h u:u { [k, o, h, u] }+ / f:f o:o h:h a:a { [f, o, h, a] }+ / f:f o:o h:h e:e { [f, o, h, e] }+ / f:f o:o h:h i:i { [f, o, h, i] }+ / f:f o:o h:h o':o { [f, o, h, o'] }+ / v:v o:o h:h a:a { [v, o, h, a] }+ / v:v o:o h:h e:e { [v, o, h, e] }+ / v:v o:o h:h i:i { [v, o, h, i] }+ / v:v o:o h:h o:o { [v, o, h, o] }+ / v:v o:o h:h u:u { [v, o, h, u] }+ / r:r u:u { [r, u] }+ / r:r i:i { [r, i] }+ / r:r a:a { [r, a] }+ / t:t a:a { [t, a] }+ / t:t u:u { [t, u] }+ / t:t i:i { [t, i] }+ / z:z i:i h:h o:o { [z, i, h, o] }+ / k:k e:e h:h a:a { [k, e, h, a] }+ / m:m a:a { [m, a] }+ / z:z u:u h:h i:i { [z, u, h, i] }+ / z:z o:o h:h e:e { [z, o, h, e] }+ / c:c e:e h:h u:u { [c, e, h, u] }+ / d:d a:a { [d, a] }+ / d:d e:e { [d, e] }+ / d:d i:i { [d, i] }+ / k:k o:o { [k, o] }+ / m:m i:i { [m, i] }+ / d:d o:o { [d, o] }+ ) &_:post_cmavo { r }++KU :: String = _:Y* &_:cmavo r:(k:k u:u { [k, u] }) &_:post_cmavo+ { r }++KUhO :: String = _:Y* &_:cmavo r:(k:k u:u h:h o:o { [k, u, h, o] }) &_:post_cmavo+ { r }++LAhE :: String = _:Y* &_:cmavo r:+ ( t:t u:u h:h a:a { [t, u, h, a] }+ / l:l u:u h:h a:a { [l, u, h, a] }+ / l:l u:u h:h o:o { [l, u, h, o] }+ / l:l a:a h:h e:e { [l, a, h, e] }+ / v:v u:u h:h i:i { [v, u, h, i] }+ / l:l u:u h:h i:i { [l, u, h, i] }+ / l:l u:u h:h e:e { [l, u, h, e] }+ ) &_:post_cmavo { r }++LE :: String = _:Y* &_:cmavo r:+ ( l:l a:a i:i { [l, a, i] }+ / l:l a:a h:h i:i { [l, a, h, i] }+ / l:l a:a { [l, a] }+ / l:l e:e i:i { [l, e, i] }+ / l:l o:o i:i { [l, o, i] }+ / l:l e:e h:h i:i { [l, e, h, i] }+ / l:l o:o h:h i:i { [l, o, h, i] }+ / l:l o:o { [l, o] }+ / l:l e:e { [l, e] }+ ) &_:post_cmavo { r }++LEhU :: String = _:Y* &_:cmavo r:(l:l e:e h:h u:u { [l, e, h, u] }) &_:post_cmavo+ { r }++LI :: String = _:Y* &_:cmavo r:(l:l i:i { [l, i] }) &_:post_cmavo+ { r }++LIhU :: String = _:Y* &_:cmavo r:(l:l i:i h:h u:u { [l, i, h, u] }) &_:post_cmavo+ { r }++LOhO :: String = _:Y* &_:cmavo r:(l:l o:o h:h o:o { [l, o, h, o] }) &_:post_cmavo+ { r }++LOhU :: String = _:Y* &_:cmavo r:(l:l o:o h:h u:u { [l, o, h, u] }) &_:post_cmavo+ { r }++LU :: String = _:Y* &_:cmavo r:(l:l u:u { [l, u] }) &_:post_cmavo+ { r }++LUhU :: String = _:Y* &_:cmavo r:(l:l u:u h:h u:u { [l, u, h, u] }) &_:post_cmavo+ { r }++MAI :: String = _:Y* &_:cmavo r:+ ( m:m o:o h:h o:o { [m, o, h, o] }+ / m:m a:a i:i { [m, a, i] }+ ) &_:post_cmavo { r }++ME :: String = _:Y* &_:cmavo r:+ ( m:m e:e { [m, e] }+ / n:n u:u h:h a:a { [n, u, h, a] }+ ) &_:post_cmavo { r }++MEhU :: String = _:Y* &_:cmavo r:(m:m e:e h:h u:u { [m, e, h, u] }) &_:post_cmavo+ { r }++MOI :: String = _:Y* &_:cmavo r:+ ( m:m e:e h:h u:u { [m, e, h, u] }+ / m:m e:e i:i { [m, e, i] }+ / m:m o:o i:i { [m, o, i] }+ / s:s i:i h:h e:e { [s, i, h, e] }+ / c:c u:u h:h o:o { [c, u, h, o] }+ / v:v a:a h:h e:e { [v, a, h, e] }+ ) &_:post_cmavo { r }++NA :: String = _:Y* &_:cmavo r:+ ( j:j a:a h:h a:a { [j, a, h, a] }+ / n:n a:a { [n, a] }+ ) &_:post_cmavo { r }++NAhE :: String = _:Y* &_:cmavo r:+ ( f:f e:e h:h e:e { [f, e, h, e] }+ / m:m o:o h:h i:i { [m, o, h, i] }+ / t:t o:o h:h e:e { [t, o, h, e] }+ / j:j e:e h:h a:a { [j, e, h, a] }+ / n:n a:a h:h e:e { [n, a, h, e] }+ / n:n o:o h:h e:e { [n, o, h, e] }+ ) &_:post_cmavo { r }++NIhE :: String = _:Y* &_:cmavo r:(n:n i:i h:h e:e { [n, i, h, e] }) &_:post_cmavo+ { r }++NIhO :: String = _:Y* &_:cmavo r:+ ( n:n i:i h:h o:o { [n, i, h, o] }+ / n:n o:o h:h i:i { [n, o, h, i] }+ ) &_:post_cmavo { r }++NOI :: String = _:Y* &_:cmavo r:+ ( v:v o:o i:i { [v, o, i] }+ / n:n o:o i:i { [n, o, i] }+ / p:p o:o i:i { [p, o, i] }+ ) &_:post_cmavo { r }++NU :: String = _:Y* &_:cmavo r:+ ( n:n i:i { [n, i] }+ / d:d u:u h:h u:u { [d, u, h, u] }+ / s:s i:i h:h o:o { [s, i, h, o] }+ / n:n u:u { [n, u] }+ / l:l i:i h:h i:i { [l, i, h, i] }+ / k:k a:a { [k, a] }+ / j:j e:e i:i { [j, e, i] }+ / s:s u:u h:h u:u { [s, u, h, u] }+ / z:z u:u h:h o:o { [z, u, h, o] }+ / m:m u:u h:h e:e { [m, u, h, e] }+ / p:p u:u h:h u:u { [p, u, h, u] }+ / z:z a:a h:h i:i { [z, a, h, i] }+ ) &_:post_cmavo { r }++PA :: String = _:Y* &_:cmavo r:+ ( d:d a:a u:u { [d, a, u] }+ / f:f e:e i:i { [f, e, i] }+ / g:g a:a i:i { [g, a, i] }+ / j:j a:a u:u { [j, a, u] }+ / r:r e:e i:i { [r, e, i] }+ / v:v a:a i:i { [v, a, i] }+ / p:p i:i h:h e:e { [p, i, h, e] }+ / p:p i:i { [p, i] }+ / f:f i:i h:h u:u { [f, i, h, u] }+ / z:z a:a h:h u:u { [z, a, h, u] }+ / m:m e:e h:h i:i { [m, e, h, i] }+ / n:n i:i h:h u:u { [n, i, h, u] }+ / k:k i:i h:h o:o { [k, i, h, o] }+ / c:c e:e h:h i:i { [c, e, h, i] }+ / m:m a:a h:h u:u { [m, a, h, u] }+ / r:r a:a h:h e:e { [r, a, h, e] }+ / d:d a:a h:h a:a { [d, a, h, a] }+ / s:s o:o h:h a:a { [s, o, h, a] }+ / j:j i:i h:h i':i { [j, i, h, i'] }+ / s:s u:u h:h o:o { [s, u, h, o] }+ / s:s u:u h:h e:e { [s, u, h, e] }+ / r:r o:o { [r, o] }+ / r:r a:a u:u { [r, a, u] }+ / s:s o:o h:h u:u { [s, o, h, u] }+ / s:s o:o h:h i:i { [s, o, h, i] }+ / s:s o:o h:h e:e { [s, o, h, e] }+ / s:s o:o h:h o':o { [s, o, h, o'] }+ / m:m o:o h:h a:a { [m, o, h, a] }+ / d:d u:u h:h e:e { [d, u, h, e] }+ / t:t e:e h:h o:o { [t, e, h, o] }+ / x:x o:o { [x, o] }+ / p:p a:a i:i { [p, a, i] }+ / n:n o:o h:h o:o { [n, o, h, o] }+ / n:n o:o { [n, o] }+ / p:p a:a { [p, a] }+ / r:r e:e { [r, e] }+ / c:c i:i { [c, i] }+ / v:v o:o { [v, o] }+ / m:m u:u { [m, u] }+ / x:x a:a { [x, a] }+ / z:z e:e { [z, e] }+ / b:b i:i { [b, i] }+ / s:s o:o { [s, o] }+ ) &_:post_cmavo { r }++ROI :: String = _:Y* &_:cmavo r:+ ( r:r e:e h:h u:u { [r, e, h, u] }+ / r:r o:o i:i { [r, o, i] }+ ) &_:post_cmavo { r }++SE :: String = _:Y* &_:cmavo r:+ ( s:s e:e { [s, e] }+ / t:t e:e { [t, e] }+ / v:v e:e { [v, e] }+ / x:x e:e { [x, e] }+ ) &_:post_cmavo { r }++SEI :: String = _:Y* &_:cmavo r:(s:s e:e i:i { [s, e, i] }) &_:post_cmavo+ { r }++SEhU :: String = _:Y* &_:cmavo r:(s:s e:e h:h u:u { [s, e, h, u] }) &_:post_cmavo+ { r }++SI :: String = _:Y* &_:cmavo r:(s:s i:i { [s, i] }) &_:post_cmavo+ { r }++SU :: String = _:Y* &_:cmavo r:(s:s u:u { [s, u] }) &_:post_cmavo+ { r }++TEhU :: String = _:Y* &_:cmavo r:(t:t e:e h:h u:u { [t, e, h, u] }) &_:post_cmavo+ { r }++TO :: String = _:Y* &_:cmavo r:(t:t o:o { [t, o] }) &_:post_cmavo+ { r }++TOI :: String = _:Y* &_:cmavo r:(t:t o:o i:i { [t, o, i] }) &_:post_cmavo+ { r }++TUhE :: String = _:Y* &_:cmavo r:(t:t u:u h:h e:e { [t, u, h, e] }) &_:post_cmavo+ { r }++TUhU :: String = _:Y* &_:cmavo r:(t:t u:u h:h u':u { [t, u, h, u'] }) &_:post_cmavo+ { r }++UI :: String = _:Y* &_:cmavo result:+ ( r:r a:a h:h o:o { [r, a, h, o] }+ / k:k e:e h:h i:i { [k, e, h, i] }+ / g:g a:a h:h o:o { [g, a, h, o] }+ / n:n a:a i:i { [n, a, i] }+ / p:p e:e i:i { [p, e, i] }+ / c:c a:a i:i { [c, a, i] }+ / c:c u:u h:h i:i { [c, u, h, i] }+ / s:s a:a i:i { [s, a, i] }+ / r:r u:u h:h e:e { [r, u, h, e] }+ / d:d a:a h:h o:o { [d, a, h, o] }+ / f:f u:u h:h e:e { [f, u, h, e] }+ / f:f u:u h:h o:o { [f, u, h, o] }+ / i:i h:h a:a { [i, h, a] }+ / i:i e:e { [i, e] }+ / a:a h:h e:e { [a, h, e] }+ / u:u h:h i:i { [u, h, i] }+ / i:i h:h o:o { [i, h, o] }+ / i:i h:h e:e { [i, h, e] }+ / a:a h:h a':a { [a, h, a'] }+ / i:i a:a { [i, a] }+ / o:o h:h i:i { [o, h, i] }+ / o:o h:h e:e { [o, h, e] }+ / e:e h:h e':e { [e, h, e'] }+ / o:o i:i { [o, i] }+ / u:u o:o { [u, o] }+ / e:e h:h i:i { [e, h, i] }+ / u:u h:h o:o { [u, h, o] }+ / a:a u:u { [a, u] }+ / u:u a:a { [u, a] }+ / a:a h:h i:i { [a, h, i] }+ / i:i h:h u:u { [i, h, u] }+ / i:i i':i { [i, i'] }+ / u:u h:h a:a { [u, h, a] }+ / u:u i:i { [u, i] }+ / a:a h:h o:o { [a, h, o] }+ / a:a i:i { [a, i] }+ / a:a h:h u:u { [a, h, u] }+ / i:i u:u { [i, u] }+ / e:e i:i { [e, i] }+ / o:o h:h o':o { [o, h, o'] }+ / e:e h:h a:a { [e, h, a] }+ / u:u u':u { [u, u'] }+ / o:o h:h a:a { [o, h, a] }+ / o:o h:h u:u { [o, h, u] }+ / u:u h:h u':u { [u, h, u'] }+ / e:e h:h o:o { [e, h, o] }+ / i:i o:o { [i, o] }+ / e:e h:h u:u { [e, h, u] }+ / u:u e:e { [u, e] }+ / i:i h:h i':i { [i, h, i'] }+ / u:u h:h e:e { [u, h, e] }+ / b:b a:a h:h a:a { [b, a, h, a] }+ / j:j a:a h:h o:o { [j, a, h, o] }+ / c:c a:a h:h e:e { [c, a, h, e] }+ / s:s u:u h:h a:a { [s, u, h, a] }+ / t:t i:i h:h e:e { [t, i, h, e] }+ / k:k a:a h:h u:u { [k, a, h, u] }+ / s:s e:e h:h o:o { [s, e, h, o] }+ / z:z a:a h:h a:a { [z, a, h, a] }+ / p:p e:e h:h i:i { [p, e, h, i] }+ / r:r u:u h:h a:a { [r, u, h, a] }+ / j:j u:u h:h a:a { [j, u, h, a] }+ / t:t a:a h:h o:o { [t, a, h, o] }+ / r:r a:a h:h u:u { [r, a, h, u] }+ / l:l i:i h:h a:a { [l, i, h, a] }+ / b:b a:a h:h u:u { [b, a, h, u] }+ / m:m u:u h:h a:a { [m, u, h, a] }+ / d:d o:o h:h a:a { [d, o, h, a] }+ / t:t o:o h:h u:u { [t, o, h, u] }+ / v:v a:a h:h i:i { [v, a, h, i] }+ / p:p a:a h:h e:e { [p, a, h, e] }+ / z:z u:u h:h u:u { [z, u, h, u] }+ / s:s a:a h:h e:e { [s, a, h, e] }+ / l:l a:a h:h a':a { [l, a, h, a'] }+ / k:k e:e h:h u:u { [k, e, h, u] }+ / s:s a:a h:h u:u { [s, a, h, u] }+ / d:d a:a h:h i:i { [d, a, h, i] }+ / j:j e:e h:h u:u { [j, e, h, u] }+ / s:s a:a h:h a':a { [s, a, h, a'] }+ / k:k a:a u:u { [k, a, u] }+ / t:t a:a h:h u:u { [t, a, h, u] }+ / n:n a:a h:h i:i { [n, a, h, i] }+ / j:j o:o h:h a:a { [j, o, h, a] }+ / b:b i:i h:h u:u { [b, i, h, u] }+ / l:l i:i h:h o:o { [l, i, h, o] }+ / p:p a:a u:u { [p, a, u] }+ / m:m i:i h:h u:u { [m, i, h, u] }+ / k:k u:u n:n i:i { [k, u, n, i] }+ / j:j i:i h:h a:a { [j, i, h, a] }+ / s:s i:i h:h a:a { [s, i, h, a] }+ / p:p o:o h:h o':o { [p, o, h, o'] }+ / p:p e:e h:h a:a { [p, e, h, a] }+ / r:r o:o h:h i:i { [r, o, h, i] }+ / r:r o:o h:h e:e { [r, o, h, e] }+ / r:r o:o h:h o':o { [r, o, h, o'] }+ / r:r o:o h:h u:u { [r, o, h, u] }+ / r:r o:o h:h a:a { [r, o, h, a] }+ / r:r e:e h:h e:e { [r, e, h, e] }+ / l:l e:e h:h o:o { [l, e, h, o] }+ / j:j u:u h:h o:o { [j, u, h, o] }+ / f:f u:u h:h i:i { [f, u, h, i] }+ / d:d a:a i:i { [d, a, i] }+ / g:g a:a h:h i:i { [g, a, h, i] }+ / z:z o:o h:h o:o { [z, o, h, o] }+ / b:b e:e h:h u:u { [b, e, h, u] }+ / r:r i:i h:h e:e { [r, i, h, e] }+ / s:s e:e h:h i:i { [s, e, h, i] }+ / s:s e:e h:h a:a { [s, e, h, a] }+ / v:v u:u h:h e:e { [v, u, h, e] }+ / k:k i:i h:h a:a { [k, i, h, a] }+ / x:x u:u { [x, u] }+ / g:g e:e h:h e':e { [g, e, h, e'] }+ / b:b u:u h:h o:o { [b, u, h, o] }+ ) &_:post_cmavo { result }++VAU :: String = _:Y* &_:cmavo r:(v:v a:a u:u { [v, a, u] }) &_:post_cmavo+ { r }++VEI :: String = _:Y* &_:cmavo r:(v:v e:e i:i { [v, e, i] }) &_:post_cmavo+ { r }++VEhO :: String = _:Y* &_:cmavo r:(v:v e:e h:h o:o { [v, e, h, o] }) &_:post_cmavo+ { r }++VUhO :: String = _:Y* &_:cmavo r:(v:v u:u h:h o:o { [v, u, h, o] }) &_:post_cmavo+ { r }++XI :: String = _:Y* &_:cmavo r:(x:x i:i { [x, i] }) &_:post_cmavo+ { r }++ZEI :: String = _:Y* &_:cmavo r:(z:z e:e i:i { [z, e, i] }) &_:post_cmavo+ { r }++ZIhE :: String = _:Y* &_:cmavo r:(z:z i:i h:h e:e { [z, i, h, e] }) &_:post_cmavo+ { r }++ZO :: String = _:Y* &_:cmavo r:(z:z o:o { [z, o] }) &_:post_cmavo+ { r }++ZOI :: String = _:Y* &_:cmavo r:+ ( z:z o:o i:i { [z, o, i] }+ / l:l a:a h:h o:o { [l, a, h, o] }+ ) &_:post_cmavo { r }++ZOhU :: String = _:Y* &_:cmavo r:(z:z o:o h:h u:u { [z, o, h, u] }) &_:post_cmavo+ { r }++-- ****** E. MORPHOLOGY ******++cmevla :: String+ = j:jbocme { j }+ / z:zifcme { z }++jbocme :: String = &_:zifcme s:+ (o:onset n:nucleus c:coda? { o ++ n ++ maybeToList c })+ &_:space'+ { concat s }++zifcme :: String = !_:h cs:+ ( v:V { [v] }+ / vv:VV { vv }+ / y:y { [y] }+ / i:I { [i] }+ / h:h { [h] }+ / c:C !_:space' { [c] }+ )* c:C &_:space' { concat cs ++ [c] }++cmavo :: String+ = !_:cmevla !_:CVCy_lujvo c:C? i:I? n:nucleus+ hns:(h:h n:nucleus { h : n })* &_:post_cmavo+ { catMaybes [c, i] +++ n ++ concat hns }++CVCy_lujvo :: ()+ = _:C _:V _:C _:y _:initial_rafsi*+ _:(_:final_rafsi / _:gismu / _:fuhivla / _:type_3_fuhivla)++post_cmavo :: () = _:space' / !_:nucleus _:cmavo / _:brivla++brivla :: String+ = g:gismu { g }+ / !_:h f:fuhivla { f }+ / t3f:type_3_fuhivla { t3f }+ / l:lujvo { l }++lujvo :: String = !_:cmavo !_:h ir:initial_rafsi+ b:+ ( fr:final_rafsi { fr }+ / g:gismu { g }+ / f:fuhivla { f }+ / t3f:type_3_fuhivla { t3f }+ ) { concat ir ++ b }++type_3_fuhivla :: String+ = !_:cmevla c:classifier s:syllable+ &_:space'+ { concat $ c : s }++fuhivla :: String+ = !_:cmevla !_:cmavo !_:rafsi_string !_:slinkuhi+ s0:syllable ss:syllable+ &_:space' { concat $ s0 : ss }++gismu :: String+ = fr:full_rafsi &_:space' { fr }++final_rafsi :: String+ = !_:cmevla sr: short_rafsi &_:space' { sr }++initial_rafsi :: String+ = ylr:y_less_rafsi { ylr }+ / yr:y_rafsi { yr }+ / fr:fuhivla_rafsi { fr }+ / t3r:type_3_rafsi { t3r }+ / br:brivla_rafsi { br }++brivla_rafsi :: String+ = !_:cmavo !_:slinkuhi s0:syllable ss:syllable+ h:h y:y+ { concat (s0 : ss) +++ [h, y] }++type_3_rafsi :: String+ = c:classifier s:syllable* o:onset y:y { c ++ concat s ++ o +++ [y] }++fuhivla_rafsi :: String+ = !_:cmavo !_:rafsi_string !_:slinkuhi s:syllable+ o:onset y:y+ { concat s ++ o ++ [y] }++slinkuhi :: String+ = c:C rs:rafsi_string { c : rs }++rafsi_string :: String = ylrs:y_less_rafsi* b:+ ( g:gismu { g }+ / f:final_rafsi { f }+ / yr:y_rafsi { yr }+ / cc:CC y:y { cc ++ [y] }+ / h:h y:y { [h, y] }+ / fr:full_rafsi h:h y:y { fr ++ [h, y] }+ ) { concat ylrs ++ b }++y_less_rafsi :: String+ = sr:short_rafsi &_:rafsi_string { sr }++classifier :: String+ = c1:C v:V c2:C cr:CR { c1 : v : c2 : cr }+ / cc:CC v:V cr:CR { cc ++ v : cr }+ / c:C v:V cr:CR { c : v : cr }+ / yr:y_rafsi r:R { yr ++ [r] }++full_rafsi :: String+ = c1:C v1:V c2:C c3:C v2:V { [c1, v1, c2, c3, v2] }+ / cc:CC v1:V c:C v2:V { cc ++ [v1, c, v2] }++y_rafsi :: String+ = c1:C v:V c2:C c3:C y:y { [c1, v, c2, c3, y] }+ / cc:CC v:V c:C y:y { cc ++ [v, c, y] }+ / c1:C v:V c2:C y:y { [c1, v, c2, y] }++short_rafsi :: String+ = c1:C v:V c2:C { [c1, v, c2] }+ / cc:CC v:V { cc ++ [v] }+ / c:C vv:VV r:R? { c : vv +++ maybeToList r }+ / c:C v1:V h:h v2:V r:R? { c : v1 : h : v2 :+ maybeToList r }++syllable :: String+ = o:onset !_:y n:nucleus c:coda? { o ++ n ++ maybeToList c }++coda :: Char+ = !_:onset c:C { c }++onset :: String = o:+ ( h:h { [h] }+ / c:C? i:I { maybeCons c [i] }+ / a:affricate { a }+ / s:sibilant? m:middle? l:liquid? { catMaybes [s, m, l] }+ ) &_:nucleus { o }++sibilant :: Char+ = c:c { c }+ / s:s !_:x { s }+ / j:j !_:n !_:l !_:r { j }+ / z:z !_:n !_:l !_:r { z }++middle :: Char+ = p:p { p }+ / b:b { b }+ / f:f { f }+ / v:v { v }+ / m:m { m }+ / t:t !_:l { t }+ / d:d !_:l { d }+ / n:n !_:l !_:r { n }+ / k:k { k }+ / g:g { g }+ / x:x { x }++liquid :: Char+ = l:l { l }+ / r:r { r }++CC :: String+ = &_:onset c1:C c2:C { [c1, c2] }++CR :: String+ = c:C r:R { [c, r] }+ / r:r n:n &_:C { [r, n] }+ / r:r l:l &_:n { [r, l] }+ / r:r l:l &_:affricate { [r, l] }+ / n:n l:l &_:r { [n, l] }++R :: Char+ = r:r &_:C { r }+ / n:n &_:r { n }++C :: Char+ = v:voiced { v }+ / u:unvoiced { u }+ / l:l { l }+ / m:m { m }+ / n:n { n }+ / r:r { r }++affricate :: String+ = t:t c:c { [t, c] }+ / t:t s:s { [t, s] }+ / d:d j:j { [d, j] }+ / d:d z:z { [d, z] }++voiced :: Char+ = b:b { b }+ / d:d { d }+ / g:g { g }+ / j:j { j }+ / v:v { v }+ / z:z { z }++unvoiced :: Char+ = c:c { c }+ / f:f { f }+ / k:k { k }+ / p:p { p }+ / s:s { s }+ / t:t { t }+ / x:x { x }++l :: Char = 'l' !_:h !_:l { 'l' }+m :: Char = 'm' !_:h !_:m !_:z { 'm' }+n :: Char = 'n' !_:h !_:n !_:affricate { 'n' }+r :: Char = 'r' !_:h !_:r { 'r' }++b :: Char = 'b' !_:h !_:b !_:unvoiced { 'b' }+d :: Char = 'd' !_:h !_:d !_:unvoiced { 'd' }+g :: Char = 'g' !_:h !_:g !_:unvoiced { 'g' }+v :: Char = 'v' !_:h !_:v !_:unvoiced { 'v' }+j :: Char = 'j' !_:h !_:j !_:z !_:unvoiced { 'j' }+z :: Char = 'z' !_:h !_:z !_:j !_:unvoiced { 'z' }++s :: Char = 's' !_:h !_:s !_:c !_:voiced { 's' }+c :: Char = 'c' !_:h !_:c !_:s !_:x !_:voiced { 'c' }+x :: Char = 'x' !_:h !_:x !_:c !_:k !_:voiced { 'x' }+k :: Char = 'k' !_:h !_:k !_:x !_:voiced { 'k' }+f :: Char = 'f' !_:h !_:f !_:voiced { 'f' }+p :: Char = 'p' !_:h !_:p !_:voiced { 'p' }+t :: Char = 't' !_:h !_:t !_:voiced { 't' }+h :: Char = '\'' &_:nucleus { '\'' }+I :: Char = c:(i:i { i } / u:u { u }) &_:nucleus { c }++nucleus :: String+ = v:V { [v] }+ / vv:VV { vv }+ / y:y { [y] }++VV :: String = vv:+ ( a:a i:i { [a, i] } / a:a u:u { [a, u] }+ / e:e i:i { [e, i] } / o:o i:i { [o, i] }) !_:nucleus !_:I+ { vv }+ ++V :: Char = v:(a:a { a } / e:e { e } / i:i { i } / o:o { o } / u:u { u })+ !_:nucleus { v }++a :: Char = 'a' { 'a' }+e :: Char = 'e' { 'e' }+i :: Char = 'i' { 'i' }+o :: Char = 'o' { 'o' }+u :: Char = 'u' { 'u' }+y :: Char = 'y' !_:nucleus { 'y' }++Y :: String+ = ys:('y' { 'y' })+ !_:nucleus { ys }+ / _:space { "" }++non_space :: Char+ = !_:space c { c }++space' :: ()+ = _:space / !_++space :: ()+ = c:[c `elem` ".\t\n\r?!\x0020"]++|]
+ zasni-gerna.cabal view
@@ -0,0 +1,33 @@+build-type: Simple+cabal-version: >= 1.8++name: zasni-gerna+version: 0.0.1+stability: Experimental+author: Yoshikuni Jujo <PAF01143@nifty.ne.jp>+maintainer: Yoshikuni Jujo <PAF01143@nifty.ne.jp>+homepage: https://skami.iocikun.jp/haskell/packages/zasni-gerna++license: BSD3+license-file: LICENSE++category: Language+synopsis: lojban parser (zasni gerna)+description:+ lojban zasni gerna parser++source-repository head+ type: git+ location: git://github.com/YoshikuniJujo/zasni-gerna.git++source-repository this+ type: git+ location: git://github.com/YoshikuniJujo/zasni-gerna.git+ tag: 0.0.1++library+ hs-source-dirs: src+ exposed-modules: Language.Lojban.Parser.ZasniGerna+ other-modules: Language.Lojban.Parser.ZasniGerna.Parser+ build-depends: base > 3 && < 5, papillon+ ghc-options: -Wall