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 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
|
||||||
|
@ -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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user