Skip to content

Commit d4c96de

Browse files
chamecobmcutler
authored andcommitted
Fix lexer bug when C++-style comments are not EOL terminated (#60)
1 parent 79a90af commit d4c96de

File tree

4 files changed

+10
-6
lines changed

4 files changed

+10
-6
lines changed

src/Lichen/Lexer.hs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ module Lichen.Lexer where
44

55
import Data.Aeson
66
import Data.Foldable()
7+
import Data.Functor (($>))
78
import Data.Semigroup ((<>))
89
import qualified Data.List.NonEmpty as NE
910
import qualified Data.ByteString as BS
@@ -51,6 +52,9 @@ reserved s = try (string s >> notFollowedBy (alphaNumChar <|> char '_') >> pure
5152
operator :: String -> Parser String
5253
operator = try . string
5354

55+
term :: Parser Char
56+
term = char '\r' <|> (head <$> eol) <|> (eof $> '\n')
57+
5458
-- Parse a C-style character literal. Ex: 'a', '@'.
5559
charLit :: Parser String
5660
charLit = char '\'' *> manyTill (noneOf ['\'']) (char '\'' <|> (eof >> pure ' '))

src/Lichen/Lexer/C.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ sc :: Parser ()
3939
sc = void (many spaceChar)
4040

4141
onetoken :: Parser (Tagged Tok)
42-
onetoken = wrap (("//"++) <$> (operator "//" *> manyTill anyChar (char '\r' <|> (head <$> eol)))) Comment
43-
<|> wrap (("#"++) <$> (operator "#" *> manyTill anyChar (char '\r' <|> (head <$> eol)))) Comment
42+
onetoken = wrap (("//"++) <$> (operator "//" *> manyTill anyChar term)) Comment
43+
<|> wrap (("#"++) <$> (operator "#" *> manyTill anyChar term)) Comment
4444
<|> wrap (("/**/"++) <$> (operator "/*" *> manyTill anyChar (head <$> operator "*/"))) Comment
4545
<|> wrap (reserved "auto") Auto
4646
<|> wrap (reserved "break") Break

src/Lichen/Plagiarism/Main.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@ import System.FilePath
77

88
import Data.Aeson
99
import Data.Semigroup ((<>))
10-
import qualified Data.Set as Set
10+
--import qualified Data.Set as Set
1111
import qualified Data.Text as T
1212
import qualified Data.ByteString.Lazy as BS
1313

1414
import Control.Monad.Reader
15-
import Control.Monad.Except
15+
--import Control.Monad.Except
1616

1717
import Options.Applicative
1818

src/Lichen/Plagiarism/Provided.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
module Lichen.Plagiarism.Provided where
22

33
import qualified Data.Set as Set
4-
import qualified Data.Map.Strict as Map
4+
--import qualified Data.Map.Strict as Map
55

66
import Lichen.Plagiarism.Submitty
77

88
providedFingerprints :: FilePath -> Set.Set Fingerprint
9-
providedFingerprints pc = undefined
9+
providedFingerprints _ = undefined

0 commit comments

Comments
 (0)