mirror of
https://github.com/mrkkrp/megaparsec.git
synced 2024-12-27 02:02:42 +03:00
43 lines
1.4 KiB
Haskell
43 lines
1.4 KiB
Haskell
-----------------------------------------------------------------------------
|
|
-- |
|
|
-- Module : Text.ParserCombinators.Parsec.Expr
|
|
-- Copyright : (c) Paolo Martini 2007
|
|
-- License : BSD-style (see the LICENSE file)
|
|
--
|
|
-- Maintainer : derek.a.elkins@gmail.com
|
|
-- Stability : provisional
|
|
-- Portability : portable
|
|
--
|
|
-- Parsec compatibility module
|
|
--
|
|
-----------------------------------------------------------------------------
|
|
|
|
module Text.ParserCombinators.Parsec.Expr
|
|
( Assoc (AssocNone,AssocLeft,AssocRight),
|
|
Operator(..),
|
|
OperatorTable,
|
|
buildExpressionParser
|
|
) where
|
|
|
|
import Text.Parsec.Expr(Assoc(..))
|
|
import qualified Text.Parsec.Expr as N
|
|
import Text.ParserCombinators.Parsec(GenParser)
|
|
|
|
import Control.Monad.Identity
|
|
|
|
data Operator tok st a = Infix (GenParser tok st (a -> a -> a)) Assoc
|
|
| Prefix (GenParser tok st (a -> a))
|
|
| Postfix (GenParser tok st (a -> a))
|
|
|
|
type OperatorTable tok st a = [[Operator tok st a]]
|
|
|
|
convert :: Operator tok st a -> N.Operator [tok] st Identity a
|
|
convert (Infix p a) = N.Infix p a
|
|
convert (Prefix p) = N.Prefix p
|
|
convert (Postfix p) = N.Postfix p
|
|
|
|
buildExpressionParser :: OperatorTable tok st a
|
|
-> GenParser tok st a
|
|
-> GenParser tok st a
|
|
buildExpressionParser = N.buildExpressionParser . map (map convert)
|