distributors-0.3.0.0: Unifying Parsers, Printers & Grammars
Copyright(C) 2026 - Eitan Chatav
LicenseBSD-style (see the file LICENSE)
MaintainerEitan Chatav <eitan.chatav@gmail.com>
Stabilityprovisional
Portabilitynon-portable
Safe HaskellSafe-Inferred
LanguageHaskell2010

Control.Lens.Grammar.BackusNaur

Description

Synopsis

BackusNaurForm

class BackusNaurForm bnf where Source #

BackusNaurForm grammar combinators formalize rule abstraction and general recursion. Context-free Grammars support the BackusNaurForm interface.

Minimal complete definition

Nothing

Methods

rule :: String -> bnf -> bnf Source #

For a BackusNaurForm parser instance, rule can be used to detail parse errors.

rule name bnf = ruleRec name (\_ -> bnf)

ruleRec :: String -> (bnf -> bnf) -> bnf Source #

General recursion, using ruleRec, rules can refer to themselves.

Instances

Instances details
BackusNaurForm RegBnf Source # 
Instance details

Defined in Control.Lens.Grammar

(Ord rule, NonTerminalSymbol rule) => BackusNaurForm (Bnf rule) Source # 
Instance details

Defined in Control.Lens.Grammar.BackusNaur

Methods

rule :: String -> Bnf rule -> Bnf rule Source #

ruleRec :: String -> (Bnf rule -> Bnf rule) -> Bnf rule Source #

BackusNaurForm k => BackusNaurForm (Grammor k a b) Source # 
Instance details

Defined in Data.Profunctor.Grammar

Methods

rule :: String -> Grammor k a b -> Grammor k a b Source #

ruleRec :: String -> (Grammor k a b -> Grammor k a b) -> Grammor k a b Source #

BackusNaurForm (Parsor s m a b) Source # 
Instance details

Defined in Data.Profunctor.Grammar

Methods

rule :: String -> Parsor s m a b -> Parsor s m a b Source #

ruleRec :: String -> (Parsor s m a b -> Parsor s m a b) -> Parsor s m a b Source #

BackusNaurForm (Printor s m a b) Source # 
Instance details

Defined in Data.Profunctor.Grammar

Methods

rule :: String -> Printor s m a b -> Printor s m a b Source #

ruleRec :: String -> (Printor s m a b -> Printor s m a b) -> Printor s m a b Source #

data Bnf rule Source #

A Bnf consists of a distinguished starting rule and a set of named rules, supporting the BackusNaurForm interface.

Constructors

Bnf 

Fields

Instances

Instances details
(Ord rule, TokenAlgebra token rule) => TokenAlgebra token (Bnf rule) Source # 
Instance details

Defined in Control.Lens.Grammar.BackusNaur

Methods

tokenClass :: TokenTest token -> Bnf rule Source #

(Ord rule, TerminalSymbol token rule) => TerminalSymbol token (Bnf rule) Source # 
Instance details

Defined in Control.Lens.Grammar.BackusNaur

Methods

terminal :: [token] -> Bnf rule Source #

(Ord rule, Tokenized token rule) => Tokenized token (Bnf rule) Source # 
Instance details

Defined in Control.Lens.Grammar.BackusNaur

Methods

anyToken :: Bnf rule Source #

token :: token -> Bnf rule Source #

oneOf :: Foldable f => f token -> Bnf rule Source #

notOneOf :: Foldable f => f token -> Bnf rule Source #

asIn :: Categorize token -> Bnf rule Source #

notAsIn :: Categorize token -> Bnf rule Source #

(Ord rule, Monoid rule) => Monoid (Bnf rule) Source # 
Instance details

Defined in Control.Lens.Grammar.BackusNaur

Methods

mempty :: Bnf rule #

mappend :: Bnf rule -> Bnf rule -> Bnf rule #

mconcat :: [Bnf rule] -> Bnf rule #

(Ord rule, Semigroup rule) => Semigroup (Bnf rule) Source # 
Instance details

Defined in Control.Lens.Grammar.BackusNaur

Methods

(<>) :: Bnf rule -> Bnf rule -> Bnf rule #

sconcat :: NonEmpty (Bnf rule) -> Bnf rule #

stimes :: Integral b => b -> Bnf rule -> Bnf rule #

(Read rule, Ord rule) => Read (Bnf rule) Source # 
Instance details

Defined in Control.Lens.Grammar.BackusNaur

Methods

readsPrec :: Int -> ReadS (Bnf rule) #

readList :: ReadS [Bnf rule] #

readPrec :: ReadPrec (Bnf rule) #

readListPrec :: ReadPrec [Bnf rule] #

Show rule => Show (Bnf rule) Source # 
Instance details

Defined in Control.Lens.Grammar.BackusNaur

Methods

showsPrec :: Int -> Bnf rule -> ShowS #

show :: Bnf rule -> String #

showList :: [Bnf rule] -> ShowS #

(Ord rule, NonTerminalSymbol rule) => BackusNaurForm (Bnf rule) Source # 
Instance details

Defined in Control.Lens.Grammar.BackusNaur

Methods

rule :: String -> Bnf rule -> Bnf rule Source #

ruleRec :: String -> (Bnf rule -> Bnf rule) -> Bnf rule Source #

(Ord rule, KleeneStarAlgebra rule) => KleeneStarAlgebra (Bnf rule) Source # 
Instance details

Defined in Control.Lens.Grammar.BackusNaur

Methods

starK :: Bnf rule -> Bnf rule Source #

plusK :: Bnf rule -> Bnf rule Source #

optK :: Bnf rule -> Bnf rule Source #

(>|<) :: Bnf rule -> Bnf rule -> Bnf rule Source #

zeroK :: Bnf rule Source #

(Ord rule, NonTerminalSymbol rule) => NonTerminalSymbol (Bnf rule) Source # 
Instance details

Defined in Control.Lens.Grammar.BackusNaur

Methods

nonTerminal :: String -> Bnf rule Source #

Eq rule => Eq (Bnf rule) Source # 
Instance details

Defined in Control.Lens.Grammar.BackusNaur

Methods

(==) :: Bnf rule -> Bnf rule -> Bool #

(/=) :: Bnf rule -> Bnf rule -> Bool #

Ord rule => Ord (Bnf rule) Source # 
Instance details

Defined in Control.Lens.Grammar.BackusNaur

Methods

compare :: Bnf rule -> Bnf rule -> Ordering #

(<) :: Bnf rule -> Bnf rule -> Bool #

(<=) :: Bnf rule -> Bnf rule -> Bool #

(>) :: Bnf rule -> Bnf rule -> Bool #

(>=) :: Bnf rule -> Bnf rule -> Bool #

max :: Bnf rule -> Bnf rule -> Bnf rule #

min :: Bnf rule -> Bnf rule -> Bnf rule #

(Categorized token, HasTrie token) => Matching [token] (Bnf (RegEx token)) Source # 
Instance details

Defined in Control.Lens.Grammar.BackusNaur

Methods

(=~) :: [token] -> Bnf (RegEx token) -> Bool Source #

liftBnf0 :: Ord a => a -> Bnf a Source #

Lift a rule to a Bnf.

liftBnf1 :: (Coercible a b, Ord b) => (a -> b) -> Bnf a -> Bnf b Source #

Lift a function of rules to Bnfs.

liftBnf2 :: (Coercible a c, Coercible b c, Ord c) => (a -> b -> c) -> Bnf a -> Bnf b -> Bnf c Source #

Lift a binary function of rules to Bnfs.

Matching

class Matching word pattern | pattern -> word where Source #

Does a word match a pattern?

Methods

(=~) :: word -> pattern -> Bool infix 2 Source #

Instances

Instances details
Matching String RegBnf Source # 
Instance details

Defined in Control.Lens.Grammar

Methods

(=~) :: String -> RegBnf -> Bool Source #

Matching String RegString Source # 
Instance details

Defined in Control.Lens.Grammar

Methods

(=~) :: String -> RegString -> Bool Source #

Matching s k => Matching s (Grammor k a b) Source # 
Instance details

Defined in Data.Profunctor.Grammar

Methods

(=~) :: s -> Grammor k a b -> Bool Source #

AsEmpty s => Matching s (Parsor s List a b) Source # 
Instance details

Defined in Data.Profunctor.Grammar

Methods

(=~) :: s -> Parsor s List a b -> Bool Source #

Matching s (APrism s t a b) Source # 
Instance details

Defined in Control.Lens.Grammar.BackusNaur

Methods

(=~) :: s -> APrism s t a b -> Bool Source #

(Categorized token, HasTrie token) => Matching [token] (Bnf (RegEx token)) Source # 
Instance details

Defined in Control.Lens.Grammar.BackusNaur

Methods

(=~) :: [token] -> Bnf (RegEx token) -> Bool Source #

(Categorized token, HasTrie token) => Matching [token] (RegEx token) Source # 
Instance details

Defined in Control.Lens.Grammar.BackusNaur

Methods

(=~) :: [token] -> RegEx token -> Bool Source #

diffB :: (Categorized token, HasTrie token) => [token] -> Bnf (RegEx token) -> Bnf (RegEx token) Source #

The Brzozowski derivative of a RegExtended Bnf, with memoization.

word =~ diffB prefix pattern = prefix <> word =~ pattern