@@ -1,7 +1,7 @@
11{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances #-}
22
3−module Core.CoreParser(parseTerm, parseFile, parseDef, pTerm, iName, idrisDef,
4− maybeWithNS) where
3+module Core.CoreParser(parseTerm, parseFile, parseDef, pTerm, iName,
4+ idrisLexer, maybeWithNS) where
55
66import Core.TT
77
@@ -11,6 +11,7 @@ import Text.ParserCombinators.Parsec.Language
1111import qualified Text.ParserCombinators.Parsec.Token as PTok
1212
1313import Control.Monad.State
14+import Data.Char
1415import Debug.Trace
1516
1617type TokenParser a = PTok.TokenParser a
@@ -36,8 +37,31 @@ iOpStart = oneOf ":!#$%&*+./<=>?@\\^|-~"
3637iOpLetter = oneOf ":!#$%&*+./<=>?@\\^|-~"
3738-- <|> letter
3839
39−lexer :: TokenParser a
40−lexer = PTok.makeTokenParser idrisDef
40+idrisLexer :: TokenParser a
41+idrisLexer = (PTok.makeTokenParser idrisDef) { PTok.whiteSpace = lexWS }
42+
43+lexer = idrisLexer
44+
45+lexWS = skipMany (simpleSpace <|> oneLineComment <|> multiLineComment <?> "")
46+ where
47+
48+ simpleSpace = skipMany1 (satisfy isSpace)
49+ oneLineComment = do try (string ("--"))
50+ satisfy (/= '|')
51+ skipMany (satisfy (/= '\n'))
52+ return ()
53+ multiLineComment = do try (string "{-")
54+ satisfy (/= '|')
55+ inCommentMulti
56+
57+ inCommentMulti
58+ = do{ try (string "-}") ; return () }
59+ <|> do{ multiLineComment ; inCommentMulti }
60+ <|> do{ skipMany1 (noneOf startEnd) ; inCommentMulti }
61+ <|> do{ oneOf startEnd ; inCommentMulti }
62+ <?> "end of comment"
63+ where
64+ startEnd = "-}{"
4165
4266whiteSpace= PTok.whiteSpace lexer
4367lexeme = PTok.lexeme lexer