diff --git a/src/language_frontend/abstract_syntax_tree/parser.rs b/src/language_frontend/abstract_syntax_tree/parser.rs index 7e53c62..acc319c 100644 --- a/src/language_frontend/abstract_syntax_tree/parser.rs +++ b/src/language_frontend/abstract_syntax_tree/parser.rs @@ -64,21 +64,19 @@ where add_sub }); - let decl = recursive(|decl| { - let r#var = just(Token::Var) + //let decl = recursive(|decl| { + let var = just(Token::Var) .ignore_then(ident) .then_ignore(just(Token::Assign)) .then(expr.clone()) .then_ignore(just(Token::NewLine).or_not()) - .then(decl) .map(|(name, rhs)| Expr::Assignment { - target: Box::new(Expr::Ident(name.0)), + target: Box::new(Expr::Ident(name)), value: Box::new(rhs), }); - r#var.or(expr) - }); - - decl.then_ignore(end()) + var.or(expr) + //}); + //decl.then_ignore(end()) } diff --git a/src/language_frontend/lexer/tokens.rs b/src/language_frontend/lexer/tokens.rs index 192ecf7..294cc35 100644 --- a/src/language_frontend/lexer/tokens.rs +++ b/src/language_frontend/lexer/tokens.rs @@ -4,8 +4,6 @@ use logos::{Logos}; #[derive(Logos, Debug, Clone, PartialEq)] pub enum Token { - #[token(r"\n")] - NewLine, // Identifier #[regex(r"[a-zA-Z_][a-zA-Z0-9_]*", |lex| lex.slice().to_owned())] Identifier(String), @@ -55,7 +53,6 @@ pub enum Token { #[token("String")] StringType, - // Literals #[regex(r#""([^"\\]|\\.)*""#, |lex| lex.slice().to_owned())] StringLiteral(String), @@ -146,10 +143,11 @@ pub enum Token { #[regex(r"/\*([^*]|\*[^/])*\*/", logos::skip)] Comment, - - - #[regex(r"[\t\r\f]+", logos::skip)] + #[regex(r"[ \t\f]+", logos::skip)] Whitespace, + + #[token(r"[ \n]")] + NewLine, Eof, @@ -159,7 +157,6 @@ pub enum Token { impl fmt::Display for Token { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self { - Token::NewLine => write!(f, ""), Token::Identifier(ident) => write!(f, "{ident}"), Token::Fun => write!(f, "fun"), Token::Class => write!(f, "class"), @@ -202,6 +199,7 @@ impl fmt::Display for Token { Token::Comma => write!(f, ","), Token::Dot => write!(f, "."), Token::Comment => write!(f, ""), + Token::NewLine => write!(f, "\n"), Token::Whitespace => write!(f, ""), Token::Eof => write!(f, ""), Token::Error => write!(f, ""), diff --git a/src/main.rs b/src/main.rs index 5eb2c87..bd92e7b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -41,8 +41,8 @@ fn main() { println!("{:?}", sourcecode); let lexer = Token::lexer(&sourcecode) - .spanned() - .collect::>(); + .spanned(); + //.collect::>(); for token in lexer { println!("{:?}", token);