diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -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.
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,3 @@
+import Distribution.Simple
+
+main = defaultMain
diff --git a/src/Language/Lojban/Parser/ZasniGerna.hs b/src/Language/Lojban/Parser/ZasniGerna.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/Lojban/Parser/ZasniGerna.hs
@@ -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
diff --git a/src/Language/Lojban/Parser/ZasniGerna/Parser.hs b/src/Language/Lojban/Parser/ZasniGerna/Parser.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/Lojban/Parser/ZasniGerna/Parser.hs
@@ -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"]
+
+|]
diff --git a/zasni-gerna.cabal b/zasni-gerna.cabal
new file mode 100644
--- /dev/null
+++ b/zasni-gerna.cabal
@@ -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
