From 8a3009ac16caf53c56a716b313747b30f9e9b55a Mon Sep 17 00:00:00 2001 From: Leo Date: Sun, 7 Apr 2024 21:10:42 +0200 Subject: [PATCH] bug fix --- src/lexer.rs | 2 +- src/main.rs | 2 +- src/parser.rs | 6 +++++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/lexer.rs b/src/lexer.rs index ef7f8d5..3834498 100644 --- a/src/lexer.rs +++ b/src/lexer.rs @@ -69,7 +69,7 @@ const SYNTAX: [Node; 12] = [ }, Node { token_type: TokenType::Identifier, - token_regex: Lazy::new(|| Regex::new(r"^[._a-zA-Z][a-zA-Z0-9_]*").unwrap()) + token_regex: Lazy::new(|| Regex::new(r"^[._a-zA-Z][a-zA-Z0-9_]*(:?<[._a-zA-Z][a-zA-Z0-9_<>]*>)?").unwrap()) }, Node { token_type: TokenType::Ptr, diff --git a/src/main.rs b/src/main.rs index e311b1d..6af6f8a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,7 +4,7 @@ mod parser; use parser::Parser; fn main() { - let input = "int main() {}"; + let input = "int x"; println!("\n\n\n\n"); let tokens = lex(input, false); let mut ast = Parser::new(tokens.clone()); diff --git a/src/parser.rs b/src/parser.rs index 81b40eb..dab7f6a 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -46,7 +46,7 @@ impl Parser { let token = &self.tokens[index]; match token.token_type { TokenType::Identifier => { - if self.tokens[index+1].token_type==TokenType::Identifier && self.tokens[index+2].token_type==TokenType::Round && self.tokens[index+3].token_type==TokenType::Curly { + if self.tokens.len()-index > 2 && self.tokens[index+1].token_type==TokenType::Identifier && self.tokens[index+2].token_type==TokenType::Round && self.tokens[index+3].token_type==TokenType::Curly { ast_res.tokens.push(self.tokens[index].clone()); ast_res.tokens.push(self.tokens[index+1].clone()); ast_res.tokens.push(self.tokens[index+2].clone()); @@ -65,6 +65,10 @@ impl Parser { ast_res.tokens.push(ntk.clone()); ast_res.ast_type = AstType::VariableDecleration; self.index += 1; + } else if ntk.token_type==TokenType::Keyword { + ast_res.tokens.push(ntk.clone()); + ast_res.ast_type = AstType::VariableDecleration; + self.index += 1; } else if ntk.token_type==TokenType::Angle { ast_res.tokens.push(ntk.clone()); self.index += 1;