From 279f04cb63e45ceb9a9df82540d5362565b8b37b Mon Sep 17 00:00:00 2001 From: "Juan J. Martinez" Date: Fri, 12 Aug 2022 22:53:06 +0100 Subject: Initial import --- src/Lexer.hs | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 src/Lexer.hs (limited to 'src/Lexer.hs') diff --git a/src/Lexer.hs b/src/Lexer.hs new file mode 100644 index 0000000..4938cfe --- /dev/null +++ b/src/Lexer.hs @@ -0,0 +1,49 @@ +module Lexer where + +import Text.Parsec +import Text.Parsec.Language (emptyDef) +import Text.Parsec.String (Parser) +import qualified Text.Parsec.Token as T + +scanner :: T.TokenParser () +scanner = T.makeTokenParser style + where + ops = ["+", "*", "-", ";"] + names = ["module", "private", "def", "return", "->"] + style = + emptyDef + { T.commentLine = "//", + T.reservedOpNames = ops, + T.reservedNames = names + } + +integer :: Parser Integer +integer = T.integer scanner + +parens :: Parser a -> Parser a +parens = T.parens scanner + +braces :: Parser a -> Parser a +braces = T.braces scanner + +commaSep :: Parser a -> Parser [a] +commaSep = T.commaSep scanner + +colonSep :: Parser String +colonSep = T.colon scanner + +identifier :: Parser String +identifier = T.identifier scanner + +reserved :: String -> Parser () +reserved = T.reserved scanner + +reservedOp :: String -> Parser () +reservedOp = T.reservedOp scanner + +scan :: Parser a -> Parser a +scan p = do + T.whiteSpace scanner + r <- p + eof + return r -- cgit v1.2.3