From be4957ee599e7e14c934e61f3d91354760b38acd Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Sun, 21 Jul 2024 16:15:17 +0200 Subject: Initial commit --- src/Language/Elna/Parser.hs | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 src/Language/Elna/Parser.hs (limited to 'src/Language/Elna/Parser.hs') diff --git a/src/Language/Elna/Parser.hs b/src/Language/Elna/Parser.hs new file mode 100644 index 0000000..bf5b4e5 --- /dev/null +++ b/src/Language/Elna/Parser.hs @@ -0,0 +1,37 @@ +module Language.Elna.Parser + ( Parser + , programP + ) where + +import Control.Monad (void) +import Data.Text (Text) +import Data.Void (Void) +import Language.Elna.AST + ( Statement(..) + , Program(..) + ) +import Text.Megaparsec (Parsec) +import Text.Megaparsec.Char (space1) +import qualified Text.Megaparsec.Char.Lexer as Lexer + +type Parser = Parsec Void Text + +space :: Parser () +space = Lexer.space space1 (Lexer.skipLineComment "//") + $ Lexer.skipBlockComment "{" "}" + +lexeme :: forall a. Parser a -> Parser a +lexeme = Lexer.lexeme space + +symbol :: Text -> Parser Text +symbol = Lexer.symbol space + +beginP :: Parser () +beginP = void $ symbol "begin" + +endP :: Parser () +endP = void $ symbol "end" + +programP :: Parser Program +programP = beginP >> endP >> symbol "." + >> pure (Program mempty mempty mempty $ CompoundStatement mempty) -- cgit v1.2.3