aboutsummaryrefslogtreecommitdiffstats
path: root/src/Choc/Parser.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Choc/Parser.hs')
-rw-r--r--src/Choc/Parser.hs41
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