on master help sign in
Fixed interaction of expressions with operators and external syntax
commit13073a1e1d0cb57aa14de370c1b7c049dc9a0308 authorAhmad Salim Al-Sibahi <asal@itu.dk> dateTue 24 Feb 2015, 21:09 (12 years ago) parent0aa98b4
2 files changed+12−1
src/Idris/ParseHelpers.hs+8−1 src/Idris/Parser.hs+4
src/Idris/ParseHelpers.hs+8−1
@@ -323,10 +323,17 @@ opChars = ":!#$%&*+./<=>?@\\^|-~"
323323operatorLetter :: MonadicParsing m => m Char
324324operatorLetter = oneOf opChars
325325
326+
327+commentMarkers :: [String]
328+commentMarkers = [ "--", "|||" ]
329+
330+invalidOperators :: [String]
331+invalidOperators = [":", "=>", "->", "<-", "=", "?=", "|", "**", "==>", "\\"]
332+
326333-- | Parses an operator
327334operator :: MonadicParsing m => m String
328335operator = do op <- token . some $ operatorLetter
329− when (op `elem` [":", "=>", "->", "<-", "=", "?=", "|", "**", "==>", "\\", ",", "--", "|||"]) $
336+ when (op `elem` (invalidOperators ++ commentMarkers)) $
330337 fail $ op ++ " is not a valid operator"
331338 return op
332339
src/Idris/Parser.hs+4
@@ -291,6 +291,10 @@ syntaxRule syn
291291
292292 mkSimple' (Expr e : Expr e1 : es) = SimpleExpr e : SimpleExpr e1 :
293293 mkSimple es
294+ -- Can't parse a full expression followed by operator like characters due to ambiguity
295+ mkSimple' (Expr e : Symbol s : es)
296+ | takeWhile (`elem` opChars) ts /= "" && ts `notElem` invalidOperators = SimpleExpr e : Symbol s : mkSimple' es
297+ where ts = dropWhile isSpace . dropWhileEnd isSpace $ s
294298 mkSimple' (e : es) = e : mkSimple' es
295299 mkSimple' [] = []
296300