From f1eca2be57471fc00824c300d409236cb171e136 Mon Sep 17 00:00:00 2001 From: Joscha Date: Thu, 17 Nov 2022 15:56:38 +0100 Subject: [PATCH] Parse ident --- src/parser.rs | 38 ++++++-------------------------------- 1 file changed, 6 insertions(+), 32 deletions(-) diff --git a/src/parser.rs b/src/parser.rs index ef5948f..098d1c9 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -1,37 +1,11 @@ use chumsky::prelude::*; -#[derive(Debug)] -pub enum Lit { - Num(i64), +use crate::ast::Ident; + +fn ident() -> impl Parser> { + text::ident().map(Ident) } -fn lit_num() -> impl Parser> { - let sign = just('+') - .or(just('-')) - .or_not() - .map(|s| if s == Some('-') { -1_i128 } else { 1_i128 }); - - let digits = text::int(10); - - sign.then(digits).try_map(|(sign, digits), span| { - // u64::MIN and u32::MAX have 19 digits in base 10 - if digits.len() > 19 { - return Err(Simple::custom(span, "number out of range")); - } - - let number = sign * digits.parse::().unwrap(); - if number < i64::MIN.into() || number > u64::MAX.into() { - return Err(Simple::custom(span, "number out of range")); - } - - Ok(number as i64) - }) -} - -fn lit() -> impl Parser> { - lit_num().map(Lit::Num) -} - -pub fn parser() -> impl Parser> { - lit().padded().then_ignore(end()) +pub fn parser() -> impl Parser> { + ident().padded().then_ignore(end()) }