ptera-th-0.1.0.0: README.md
# Ptera: A Generator for Parsers
[](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