From fb563addf448b2e59bd8a6fe669a6a32eee364ed Mon Sep 17 00:00:00 2001 From: LunarAkai Date: Thu, 7 Aug 2025 01:53:49 +0200 Subject: [PATCH] hey it can calculate 4 again xP --- .../abstract_syntax_tree/parser.rs | 11 ++------ src/language_frontend/lexer/tokens.rs | 26 +++++++++++++++++++ 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/src/language_frontend/abstract_syntax_tree/parser.rs b/src/language_frontend/abstract_syntax_tree/parser.rs index 5e0203e..e871bc8 100644 --- a/src/language_frontend/abstract_syntax_tree/parser.rs +++ b/src/language_frontend/abstract_syntax_tree/parser.rs @@ -21,16 +21,9 @@ pub fn parser<'src>() -> impl Parser<'src, &'src [Token<'src>], Expression<'src> let eq = just(Token::Equals); let expr = recursive(|expr| { - let atom = { - let parenthesized = expr - .clone() - .delimited_by(just(Token::ParenBegin), just(Token::ParenEnd)); + let atom = select! { + Token::Float(x) => Expression::Float(x), - let integer = select! { - Token::Integer(n) => Expression::Integer(n), - }; - - parenthesized.or(integer) }; let unary = just(Token::Substract) diff --git a/src/language_frontend/lexer/tokens.rs b/src/language_frontend/lexer/tokens.rs index 7a5cace..8c80bfa 100644 --- a/src/language_frontend/lexer/tokens.rs +++ b/src/language_frontend/lexer/tokens.rs @@ -1,3 +1,5 @@ +use std::fmt; + use logos::{Lexer, Logos}; #[derive(Logos, Debug, Clone, PartialEq)] @@ -56,3 +58,27 @@ pub enum Token<'src> { #[token("else")] Keyword(&'src str), } + + +impl fmt::Display for Token<'_> { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + match self { + Token::Float(s) => write!(f, "{s}"), + Token::Add => write!(f, "+"), + Token::Bool(_) => write!(f, "+"), + Token::Substract => write!(f, "-"), + Token::Multiply => write!(f, "*"), + Token::Divide => write!(f, "/"), + Token::Equals => write!(f, "="), + Token::Colon => write!(f, ":"), + Token::ParenBegin => write!(f, "("), + Token::ParenEnd => write!(f, ")"), + Token::BraceBegin => write!(f, "{{"), + Token::BraceEnd => write!(f, "}}"), + Token::Integer(s) => write!(f, "{s}"), + Token::Ident(s) => write!(f, "{s}"), + Token::String(s) => write!(f, "{s}"), + Token::Keyword(s) => write!(f, "{s}"), + } + } +}