Support for single line comment syntax using --

This commit is contained in:
James Eversole 2024-12-28 07:15:25 -06:00
parent 14b95f90b5
commit 2e539eb545
2 changed files with 13 additions and 3 deletions

View File

@ -3,6 +3,8 @@ module Lexer where
import Research import Research
import Text.Megaparsec import Text.Megaparsec
import Text.Megaparsec.Char import Text.Megaparsec.Char
import Control.Monad (void)
import Data.Void import Data.Void
import qualified Data.Set as Set import qualified Data.Set as Set
@ -21,6 +23,7 @@ data LToken
| LOpenBracket | LOpenBracket
| LCloseBracket | LCloseBracket
| LNewline | LNewline
| LComment String
deriving (Show, Eq, Ord) deriving (Show, Eq, Ord)
keywordT :: Lexer LToken keywordT :: Lexer LToken
@ -72,8 +75,16 @@ closeBracket = char ']' *> pure LCloseBracket
lnewline :: Lexer LToken lnewline :: Lexer LToken
lnewline = char '\n' *> pure LNewline lnewline = char '\n' *> pure LNewline
comment :: Lexer LToken
comment = do
string "--"
content <- many (satisfy (/= '\n'))
optional (char '\n')
pure (LComment content)
sc :: Lexer () sc :: Lexer ()
sc = skipMany (char ' ' <|> char '\t') sc = skipMany (void (char ' ') <|> void (char '\t') <|> void comment)
saplingLexer :: Lexer [LToken] saplingLexer :: Lexer [LToken]
saplingLexer = many (sc *> choice saplingLexer = many (sc *> choice

View File

@ -5,11 +5,10 @@ import Lexer
import Parser import Parser
import Research import Research
import Control.Monad (void)
import Data.List (intercalate) import Data.List (intercalate)
import qualified Data.Map as Map import qualified Data.Map as Map
import System.Console.Haskeline import System.Console.Haskeline
import System.IO (hFlush, stdout) import System.IO (hFlush, stdout)
repl :: Map.Map String T -> IO () repl :: Map.Map String T -> IO ()
repl env = runInputT defaultSettings (loop env) repl env = runInputT defaultSettings (loop env)