diff options
Diffstat (limited to 'src/Language/SimpleShell/Parser/Common/Lexeme.hs')
-rw-r--r-- | src/Language/SimpleShell/Parser/Common/Lexeme.hs | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/Language/SimpleShell/Parser/Common/Lexeme.hs b/src/Language/SimpleShell/Parser/Common/Lexeme.hs new file mode 100644 index 0000000..c0a6fd6 --- /dev/null +++ b/src/Language/SimpleShell/Parser/Common/Lexeme.hs @@ -0,0 +1,40 @@ +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE FlexibleContexts #-} + +module Language.SimpleShell.Parser.Common.Lexeme + ( lexeme + , symbol + , commentFirstChars + ) +where + + +import Control.Monad (void) +import Data.Text (Text) +import Text.Megaparsec (MonadParsec) +import Text.Megaparsec.Char (space1) +import qualified Text.Megaparsec.Char.Lexer as L + ( lexeme + , symbol + , space + , skipLineComment + , skipBlockComment + ) + + +-- Must be kept in sync with 'commentFirstChars'. +sc :: (MonadParsec e Text m) => m () +sc = L.space + space1 + (L.skipLineComment "//") + (L.skipBlockComment "/*" "*/") + +-- | List of all characters that may start a comment. +commentFirstChars :: [Char] +commentFirstChars = "/" + +lexeme :: (MonadParsec e Text m) => m a -> m a +lexeme = L.lexeme sc + +symbol :: (MonadParsec e Text m) => Text -> m () +symbol = void . L.symbol sc |