aboutsummaryrefslogtreecommitdiffstats
path: root/src/Choc/Parser.hs
diff options
context:
space:
mode:
authorYann Herklotz <git@yannherklotz.com>2022-03-13 11:07:40 +0000
committerYann Herklotz <git@yannherklotz.com>2022-03-13 11:07:40 +0000
commitcf44e166a956bb7a00f9185291f02c54d213be0f (patch)
tree87617eab467af8d5a27145f75c9e1145f2423be6 /src/Choc/Parser.hs
parent425e96636c1311b52a9e72c004cd1e74deb37bf0 (diff)
downloadchoc-cf44e166a956bb7a00f9185291f02c54d213be0f.tar.gz
choc-cf44e166a956bb7a00f9185291f02c54d213be0f.zip
Adding simply typed lambda calculus
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