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 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

View File

@ -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)