ptera 0.1.0.0 → 0.2.0.0
raw patch · 5 files changed
+9/−75 lines, 5 files
Files
- README.md +1/−61
- ptera.cabal +1/−1
- src/Language/Parser/Ptera.hs +2/−1
- src/Language/Parser/Ptera/Syntax.hs +2/−9
- src/Language/Parser/Ptera/Syntax/SafeGrammar.hs +3/−3
README.md view
@@ -1,67 +1,7 @@-# Ptera: A Generator for Parsers+# Ptera: A Parser Generator for PEGs [](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