commit a9432777e59e2dd828222df8739fa3ac6c9cc8ca
parent fe62e63c2288e71e0bd2f87e562ada6ddc786a9d
Author: James Eversole <james@eversole.co>
Date: Sat, 28 Dec 2024 07:15:25 -0600
Support for single line comment syntax using --
Diffstat:
2 files changed, 13 insertions(+), 3 deletions(-)
diff --git a/src/Lexer.hs b/src/Lexer.hs
@@ -3,6 +3,8 @@ module Lexer where
import Research
import Text.Megaparsec
import Text.Megaparsec.Char
+
+import Control.Monad (void)
import Data.Void
import qualified Data.Set as Set
@@ -21,6 +23,7 @@ data LToken
| LOpenBracket
| LCloseBracket
| LNewline
+ | LComment String
deriving (Show, Eq, Ord)
keywordT :: Lexer LToken
@@ -72,8 +75,16 @@ closeBracket = char ']' *> pure LCloseBracket
lnewline :: Lexer LToken
lnewline = char '\n' *> pure LNewline
+comment :: Lexer LToken
+comment = do
+ string "--"
+ content <- many (satisfy (/= '\n'))
+ optional (char '\n')
+ pure (LComment content)
+
+
sc :: Lexer ()
-sc = skipMany (char ' ' <|> char '\t')
+sc = skipMany (void (char ' ') <|> void (char '\t') <|> void comment)
saplingLexer :: Lexer [LToken]
saplingLexer = many (sc *> choice
diff --git a/src/REPL.hs b/src/REPL.hs
@@ -5,11 +5,10 @@ import Lexer
import Parser
import Research
-import Control.Monad (void)
import Data.List (intercalate)
import qualified Data.Map as Map
import System.Console.Haskeline
-import System.IO (hFlush, stdout)
+import System.IO (hFlush, stdout)
repl :: Map.Map String T -> IO ()
repl env = runInputT defaultSettings (loop env)