Support for single line comment syntax using --
This commit is contained in:
parent
14b95f90b5
commit
2e539eb545
13
src/Lexer.hs
13
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
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user