module PropLexer(module PropLexer{-,LexerFlags(..)-}) where
--import LexerOptions
import HsLexerPass1(lexerPass0,lexerPass0',startPos)
import HsTokens
This module defines the lexical analyser for the P-logic extension of Haskell.
Differences from the plain Haskell 98 lexical syntax:
pLexerPass0 plogic =
if plogic
then propLexerPass0
else lexerPass0
where
propLexerPass0 = propLexerPass0' startPos
propLexerPass0' pos = concatMap plogicTokens . lexerPass0' pos
plogicTokens t@(Varid,ps@(_,s)) =
case s of
"assert" -> [(Reservedid,ps)]
"property" -> [(Reservedid,ps)]
_ -> [t]
plogicTokens t@(NestedComment,ps@(p,'{':'-':'P':':':s)) =
propLexerPass0' p (adjust s)
plogicTokens t = [t]
-- Replace the delimiting "{-P:" and "-}" with the same amount of space
-- to preserve layout.
adjust s = " "++reverse (" "++drop 2 (reverse s))