@@ -1,7 +1,7 @@
1{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances #-}
1{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances #-}
3−module Core.CoreParser(parseTerm, parseFile, parseDef, pTerm, iName, idrisDef,
3+module Core.CoreParser(parseTerm, parseFile, parseDef, pTerm, iName,
4− maybeWithNS) where
4+ idrisLexer, maybeWithNS) where
6import Core.TT
6import Core.TT
@@ -11,6 +11,7 @@ import Text.ParserCombinators.Parsec.Language
11import qualified Text.ParserCombinators.Parsec.Token as PTok
11import qualified Text.ParserCombinators.Parsec.Token as PTok
13import Control.Monad.State
13import Control.Monad.State
14import Debug.Trace
15import Debug.Trace
16type TokenParser a = PTok.TokenParser a
17type TokenParser a = PTok.TokenParser a
@@ -36,8 +37,31 @@ iOpStart = oneOf ":!#$%&*+./<=>?@\\^|-~"
36iOpLetter = oneOf ":!#$%&*+./<=>?@\\^|-~"
37iOpLetter = oneOf ":!#$%&*+./<=>?@\\^|-~"
37-- <|> letter
38-- <|> letter
39−lexer :: TokenParser a
40+idrisLexer :: TokenParser a
40−lexer = PTok.makeTokenParser idrisDef
41+idrisLexer = (PTok.makeTokenParser idrisDef) { PTok.whiteSpace = lexWS }
45+lexWS = skipMany (simpleSpace <|> oneLineComment <|> multiLineComment <?> "")
48+ simpleSpace = skipMany1 (satisfy isSpace)
49+ oneLineComment = do try (string ("--"))
51+ skipMany (satisfy (/= '\n'))
53+ multiLineComment = do try (string "{-")
58+ = do{ try (string "-}") ; return () }
59+ <|> do{ multiLineComment ; inCommentMulti }
60+ <|> do{ skipMany1 (noneOf startEnd) ; inCommentMulti }
61+ <|> do{ oneOf startEnd ; inCommentMulti }
42whiteSpace= PTok.whiteSpace lexer
66whiteSpace= PTok.whiteSpace lexer
43lexeme = PTok.lexeme lexer
67lexeme = PTok.lexeme lexer