diff options
Diffstat (limited to 'src/Choc/Parser.hs')
-rw-r--r-- | src/Choc/Parser.hs | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/Choc/Parser.hs b/src/Choc/Parser.hs new file mode 100644 index 0000000..24e4004 --- /dev/null +++ b/src/Choc/Parser.hs @@ -0,0 +1,41 @@ +module Choc.Parser ( + module Text.Parsec, + Parser, + lexeme, + reservedOp, + reserved, + symbol, + parens, + integer) where + +import Text.Parsec +import qualified Text.Parsec.Token as T +import Text.Parsec.Language (emptyDef) +import Data.Functor.Identity (Identity) + +type Parser a = Parsec String () a + +lexer :: T.GenTokenParser String u Identity +lexer = T.makeTokenParser (emptyDef { + T.commentLine = ";", + T.reservedNames = ["L", "B", "C"], + T.reservedOpNames = ["->"] + }) + +lexeme :: Parser a -> Parser a +lexeme = T.lexeme lexer + +reservedOp :: String -> Parser () +reservedOp = T.reservedOp lexer + +reserved :: String -> ParsecT String u Identity () +reserved = T.reserved lexer + +symbol :: String -> Parser String +symbol = T.symbol lexer + +parens :: Parser a -> Parser a +parens a = lexeme $ between (symbol "(") (symbol ")") a + +integer :: Parser Integer +integer = T.integer lexer |