peg-matching-0.1.0.0: src/Quote/Peg.hs
{-|
Module : Quote.Peg
Description : QuasiQuoter for PEGs (Parsing Expression Grammars).
Copyright : (c) Guilherme Drummond, Rodrigo Ribeiro, 2025
License : BSD-3-Clause
Maintainer : rodrigo.ribeiro@ufop.edu.br
Stability : experimental
Portability : POSIX
This module provides QuasiQuoters for PEGs (Parsing Expression Grammars),
including definitions, expressions, and PEG operators.
-}
module Quote.Peg
( grammar
) where
import Quote.Base ( topLevel, parseIO, location', setPosition )
import qualified Parser.Peg as Peg
import Language.Haskell.TH (runIO)
import Language.Haskell.TH.Quote (dataToExpQ, QuasiQuoter(..))
{-|
QuasiQuoter for PEG grammar syntax.
Parses a grammar string at compile time and converts it into a Template
Haskell expression.
-}
grammar :: QuasiQuoter
grammar = QuasiQuoter {
quoteExp = \ str -> do
l <- location'
c <- runIO $ parseIO (setPosition l *> topLevel Peg.grammar) str
dataToExpQ (const Nothing) c
, quotePat = undefined
, quoteType = undefined
, quoteDec = undefined
}