Skip to content

Commit

Permalink
Fix lexer bug when C++-style comments are not EOL terminated (#60)
Browse files Browse the repository at this point in the history
  • Loading branch information
chameco authored and bmcutler committed Feb 19, 2018
1 parent 79a90af commit d4c96de
Show file tree
Hide file tree
Showing 4 changed files with 10 additions and 6 deletions.
4 changes: 4 additions & 0 deletions src/Lichen/Lexer.hs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ module Lichen.Lexer where

import Data.Aeson
import Data.Foldable()
import Data.Functor (($>))
import Data.Semigroup ((<>))
import qualified Data.List.NonEmpty as NE
import qualified Data.ByteString as BS
Expand Down Expand Up @@ -51,6 +52,9 @@ reserved s = try (string s >> notFollowedBy (alphaNumChar <|> char '_') >> pure
operator :: String -> Parser String
operator = try . string

term :: Parser Char
term = char '\r' <|> (head <$> eol) <|> (eof $> '\n')

-- Parse a C-style character literal. Ex: 'a', '@'.
charLit :: Parser String
charLit = char '\'' *> manyTill (noneOf ['\'']) (char '\'' <|> (eof >> pure ' '))
Expand Down
4 changes: 2 additions & 2 deletions src/Lichen/Lexer/C.hs
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@ sc :: Parser ()
sc = void (many spaceChar)

onetoken :: Parser (Tagged Tok)
onetoken = wrap (("//"++) <$> (operator "//" *> manyTill anyChar (char '\r' <|> (head <$> eol)))) Comment
<|> wrap (("#"++) <$> (operator "#" *> manyTill anyChar (char '\r' <|> (head <$> eol)))) Comment
onetoken = wrap (("//"++) <$> (operator "//" *> manyTill anyChar term)) Comment
<|> wrap (("#"++) <$> (operator "#" *> manyTill anyChar term)) Comment
<|> wrap (("/**/"++) <$> (operator "/*" *> manyTill anyChar (head <$> operator "*/"))) Comment
<|> wrap (reserved "auto") Auto
<|> wrap (reserved "break") Break
Expand Down
4 changes: 2 additions & 2 deletions src/Lichen/Plagiarism/Main.hs
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ import System.FilePath

import Data.Aeson
import Data.Semigroup ((<>))
import qualified Data.Set as Set
--import qualified Data.Set as Set
import qualified Data.Text as T
import qualified Data.ByteString.Lazy as BS

import Control.Monad.Reader
import Control.Monad.Except
--import Control.Monad.Except

import Options.Applicative

Expand Down
4 changes: 2 additions & 2 deletions src/Lichen/Plagiarism/Provided.hs
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
module Lichen.Plagiarism.Provided where

import qualified Data.Set as Set
import qualified Data.Map.Strict as Map
--import qualified Data.Map.Strict as Map

import Lichen.Plagiarism.Submitty

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

0 comments on commit d4c96de

Please sign in to comment.