diff options
author | Yann Herklotz <git@yannherklotz.com> | 2022-03-13 11:07:40 +0000 |
---|---|---|
committer | Yann Herklotz <git@yannherklotz.com> | 2022-03-13 11:07:40 +0000 |
commit | cf44e166a956bb7a00f9185291f02c54d213be0f (patch) | |
tree | 87617eab467af8d5a27145f75c9e1145f2423be6 /src/Choc/Parser.hs | |
parent | 425e96636c1311b52a9e72c004cd1e74deb37bf0 (diff) | |
download | choc-cf44e166a956bb7a00f9185291f02c54d213be0f.tar.gz choc-cf44e166a956bb7a00f9185291f02c54d213be0f.zip |
Adding simply typed lambda calculus
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 |