Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/parser/src/grammar/expressions/atom.rs')
| -rw-r--r-- | crates/parser/src/grammar/expressions/atom.rs | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/crates/parser/src/grammar/expressions/atom.rs b/crates/parser/src/grammar/expressions/atom.rs index 37f8a7e3b7..07b0a2aee5 100644 --- a/crates/parser/src/grammar/expressions/atom.rs +++ b/crates/parser/src/grammar/expressions/atom.rs @@ -17,7 +17,7 @@ pub(crate) const LITERAL_FIRST: TokenSet = TokenSet::new(&[ T![true], T![false], INT_NUMBER, - FLOAT_NUMBER, + FLOAT_NUMBER_PART, BYTE, CHAR, STRING, @@ -29,11 +29,19 @@ pub(crate) fn literal(p: &mut Parser) -> Option<CompletedMarker> { return None; } let m = p.start(); - if p.at(FLOAT_NUMBER) { + if p.at(FLOAT_NUMBER_PART) { + // Floats can be up to 3 tokens: 2 `FLOAT_NUMBER_PART`s separated by 1 `DOT` let f = p.start(); - p.bump(FLOAT_NUMBER); + p.bump(FLOAT_NUMBER_PART); + if p.at(DOT) { + p.bump(DOT); + if p.at(FLOAT_NUMBER_PART) { + p.bump(FLOAT_NUMBER_PART); + } + } f.complete(p, FLOAT_LITERAL); } else { + // Everything else is just one token. p.bump_any(); } Some(m.complete(p, LITERAL)) |