packages feed

ptera 0.1.0.0 → 0.2.0.0

raw patch · 5 files changed

+9/−75 lines, 5 files

Files

README.md view
@@ -1,67 +1,7 @@-# Ptera: A Generator for Parsers+# Ptera: A Parser Generator for PEGs  [![Hackage](https://img.shields.io/hackage/v/ptera.svg)](https://hackage.haskell.org/package/ptera) -## Installation--Add dependencies on `package.cabal`:--```-build-depends:-    base,-    bytestring,-    ptera,          -- main-    ptera-th,       -- for outputing parser with Template Haskell-    charset,-    template-haskell,-```--## Usage--Write parser rules:--```haskell-data Terminal-    = Digit-    | SymPlus-    | SymMulti-    deriving (Eq, Show, Enum)--data NonTerminal-    | Expr-    | Sum-    | Product-    | Value-    deriving (Eq, Show, Enum)--type ParseRule = Rule Terminal NonTerminal---data Ast-    = GenValue-    | GenSum (NonEmpty Ast)-    | GenProduct Ast Ast--rExpr :: ParseRule Ast-rExpr = rule Expr rSum--rSum :: ParseRule Ast-rSum = rule Sum do-    (rProduct <,> manyP do token SymPlus *> rProduct) <&> \(e, es) -> GenSum do e :| es--rProduct :: ParseRule Ast-rProduct = rule Product do-    orP-        [-            (rValue <* token SymMulti <,> rProduct) <&> \(e1, e2) -> GenProduct e1 e2,-            rValue-        ]--rValue :: ParseRule Ast-rValue = rule Value do token Digit *> pure GenValue-```- ## Examples  * Small language: https://github.com/mizunashi-mana/ptera/tree/master/example/small-lang-* Haskell2010: https://github.com/mizunashi-mana/ptera/tree/master/example/haskell2010
ptera.cabal view
@@ -2,7 +2,7 @@ build-type:          Custom  name:                ptera-version:             0.1.0.0+version:             0.2.0.0 license:             Apache-2.0 OR MPL-2.0 license-file:        LICENSE copyright:           (c) 2021 Mizunashi Mana
src/Language/Parser/Ptera.hs view
@@ -15,7 +15,8 @@                                                                 runParser) import qualified Language.Parser.Ptera.Runner                  as Runner import           Language.Parser.Ptera.Scanner                 hiding (T)-import           Language.Parser.Ptera.Syntax                  hiding (T, semAct, semActM)+import           Language.Parser.Ptera.Syntax                  hiding (T,+                                                                semAct, semActM)  type Parser = Runner.T 
src/Language/Parser/Ptera/Syntax.hs view
@@ -36,10 +36,9 @@     SafeGrammar.fixGrammar,     SafeGrammar.ruleExpr,     (SafeGrammar.<^>),+    SafeGrammar.eps,     (<:>),-    eps,     (<::>),-    epsM,     SafeGrammar.var,     SafeGrammar.varA,     SafeGrammar.tok,@@ -49,7 +48,7 @@  import           Language.Parser.Ptera.Prelude -import qualified Language.Parser.Ptera.Data.HFList as HFList+import qualified Language.Parser.Ptera.Data.HFList        as HFList import qualified Language.Parser.Ptera.Syntax.SafeGrammar as SafeGrammar  @@ -71,18 +70,12 @@  infixl 4 <:> -eps :: (HList '[] -> a) -> AltM ctx rules tokens elem a-eps act = SafeGrammar.eps do semAct act- (<::>)     :: SafeGrammar.Expr rules tokens elem us -> (HList us -> ActionTask ctx a)     -> AltM ctx rules tokens elem a e <::> act = e SafeGrammar.<:> semActM act  infixl 4 <::>--epsM :: (HList '[] -> ActionTask ctx a) -> AltM ctx rules tokens elem a-epsM act = SafeGrammar.eps do semActM act   type HList = HFList.T Identity
src/Language/Parser/Ptera/Syntax/SafeGrammar.hs view
@@ -38,7 +38,7 @@  import qualified Data.HashMap.Strict                  as HashMap import qualified Language.Parser.Ptera.Data.HEnum     as HEnum-import qualified Language.Parser.Ptera.Data.HFList     as HFList+import qualified Language.Parser.Ptera.Data.HFList    as HFList import qualified Language.Parser.Ptera.Syntax.Grammar as SyntaxGrammar import           Prelude                              (String) import qualified Type.Membership                      as Membership@@ -215,8 +215,8 @@  infixl 4 <:> -eps :: action '[] a -> Alt action rules tokens elem a-eps act = UnsafeAlt do SyntaxGrammar.Alt HFList.HFNil Nothing act+eps :: Expr rules tokens elem '[]+eps = UnsafeExpr HFList.HFNil  (<^>)     :: Expr rules tokens elem us1 -> Expr rules tokens elem us2