{
module Language.C.Comments.Lexer where
}
%wrapper "posn"
-- We have to recognize strings, so we don't grab pseudo-comments inside them.
-- Just copypasted from src/Language/C/Parser/Lexer.x
$octdigit = 0-7
$hexdigit = [0-9a-fA-F]
@charesc = \\([ntvbrfaeE\\\?\'\"]|$octdigit{1,3}|x$hexdigit+)
$instr = \0-\255 # [ \\ \" \n \r ] -- valid character in a string literal
@string = \"($instr|@charesc)*\"
-- Regexp for C comments, credit to http://ostermiller.org/findcomment.html
@multiLineComment = \/\*([^\*]|[\r\n]|(\*+([^\*\/]|[\r\n])))*\*+\/
@singleLineComment = \/\/.*
tokens :-
@string { \pos s -> (s , Nothing) }
@multiLineComment { \pos s -> (" ", Just (pos,s,MultiLine)) }
@singleLineComment { \pos s -> (" ", Just (pos,s,SingleLine)) }
.|\n { \pos s -> (s , Nothing) }
{
-- | Comments can be either single- or multi-line style.
data CommentFormat = SingleLine | MultiLine deriving (Eq,Show)
}