diff --git a/src/lex/mod.rs b/src/lex/mod.rs index d374675..fb66974 100644 --- a/src/lex/mod.rs +++ b/src/lex/mod.rs @@ -277,8 +277,13 @@ impl Lexer { Some('x') => self.read_int_literal(16), Some('o') => self.read_int_literal(8), Some('b') => self.read_int_literal(2), - Some(c) => self.syntax_error(format!("Unexpected character '{}'", c)), - None => self.syntax_error(String::from("Unexpected end-of-file")), + Some(c @ '0'..='9') => self.syntax_error(String::from("Decimal literals must not start with a 0")), + Some(c) if c.is_ident_part() => self.syntax_error(format!("Unexpected character '{}'", c)), + _ => { + // it wasn't a prefixed int literal at all, just a single 0 + self.cursor.prev(); + self.token_ok(token::Kind::IntLiteral) + }, } }