git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Merge pull request #1127 from kRITZCREEK/master

Numeric literals with leading zeros #1125

commit4942fe92e2b2f079efbe844127973be8272b707f authorGary Burgess <gary.burgess@gmail.com> dateMon 25 May 2015, 00:04 (11 years ago) parent76940aa4c20689
3 files changed+17−4
examples/failing/LeadingZeros1.purs+3 examples/failing/LeadingZeros2.purs+3 src/Language/PureScript/Parser/Lexer.hs+11−4
examples/failing/LeadingZeros1.pursnew file+3
@@ -0,0 +1,3 @@
1+module Main where
2+
3+x = 01
examples/failing/LeadingZeros2.pursnew file+3
@@ -0,0 +1,3 @@
1+module Main where
2+
3+x = 00.1
src/Language/PureScript/Parser/Lexer.hs+11−4
@@ -240,12 +240,19 @@ parseToken = P.choice
240240 parseStringLiteral :: P.Parsec String u String
241241 parseStringLiteral = blockString <|> PT.stringLiteral tokenParser
242242 where
243− delimeter = P.try (P.string "\"\"\"")
244− blockString = delimeter >> P.manyTill P.anyChar delimeter
243+ delimiter = P.try (P.string "\"\"\"")
244+ blockString = delimiter >> P.manyTill P.anyChar delimiter
245245
246246 parseNumber :: P.Parsec String u (Either Integer Double)
247− parseNumber = (Right <$> P.try (PT.float tokenParser) <|>
248− Left <$> P.try (PT.natural tokenParser)) P.<?> "number"
247+ parseNumber = (consumeLeadingZero >> P.parserZero) <|>
248+ (Right <$> P.try (PT.float tokenParser) <|>
249+ Left <$> P.try (PT.natural tokenParser))
250+ P.<?> "number"
251+ where
252+ -- lookAhead doesn't consume any input if its parser succeeds
253+ -- if notFollowedBy fails though, the consumed '0' will break the choice chain
254+ consumeLeadingZero = P.lookAhead (P.char '0' >>
255+ (P.notFollowedBy P.digit P.<?> "no leading zero in number literal"))
249256
250257-- |
251258-- We use Text.Parsec.Token to implement the string and number lexemes