From 1ca7ea999d6612a19be373c0b7166e92ff8839a3 Mon Sep 17 00:00:00 2001 From: LunaStev Date: Thu, 23 Jan 2025 16:33:22 +0900 Subject: [PATCH 01/13] Comment English --- src/parser/parser.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/parser/parser.rs b/src/parser/parser.rs index bf3e620..f9febb2 100644 --- a/src/parser/parser.rs +++ b/src/parser/parser.rs @@ -32,7 +32,7 @@ pub fn extract_parameters(tokens: &mut Peekable>) -> Vec lexeme.clone(), Some(Token { token_type: TokenType::TypeFloat(_), lexeme, .. }) => lexeme.clone(), From 81ca5b4d226e346a551f63a5d12c41a27d201a5f Mon Sep 17 00:00:00 2001 From: LunaStev Date: Thu, 23 Jan 2025 16:46:33 +0900 Subject: [PATCH 02/13] Revert to existing --- src/main.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main.rs b/src/main.rs index 77c7c0e..162a05c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -92,6 +92,8 @@ fn run_wave_file(file_path: &str) { .map(|token| token.lexeme.clone()) .unwrap_or_default(); + let params = extract_parameters(&tokens); + let mut peekable_tokens = tokens.iter().peekable(); let params = extract_parameters(&mut peekable_tokens); From 5e8d1f28322627684e33c149bf0b8ff3f6c4716a Mon Sep 17 00:00:00 2001 From: LunaStev Date: Thu, 23 Jan 2025 16:46:39 +0900 Subject: [PATCH 03/13] Revert to existing --- src/main.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main.rs b/src/main.rs index 162a05c..817df08 100644 --- a/src/main.rs +++ b/src/main.rs @@ -96,8 +96,6 @@ fn run_wave_file(file_path: &str) { let mut peekable_tokens = tokens.iter().peekable(); - let params = extract_parameters(&mut peekable_tokens); - let body = extract_body(&mut peekable_tokens); let ast = function(function_name, params, body); From e4b10733695b4cbf66fe2333fab400a254ea6213 Mon Sep 17 00:00:00 2001 From: LunaStev Date: Thu, 23 Jan 2025 16:46:56 +0900 Subject: [PATCH 04/13] Delete Comment --- src/parser/parser.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/parser/parser.rs b/src/parser/parser.rs index f9febb2..c8f579e 100644 --- a/src/parser/parser.rs +++ b/src/parser/parser.rs @@ -75,7 +75,6 @@ pub fn extract_body<'a>(tokens: &mut Peekable>) -> Vec body.push(ast_node); } } - */ TokenType::PRINTLN => { if let Some(ast_node) = parse_println(tokens) { body.push(ast_node); From f2990f53ef269fa31d4ecb71e457afe041abf45a Mon Sep 17 00:00:00 2001 From: LunaStev Date: Thu, 23 Jan 2025 16:47:03 +0900 Subject: [PATCH 05/13] Delete Comment --- src/parser/parser.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/parser/parser.rs b/src/parser/parser.rs index c8f579e..8f5e06b 100644 --- a/src/parser/parser.rs +++ b/src/parser/parser.rs @@ -69,7 +69,7 @@ pub fn extract_body<'a>(tokens: &mut Peekable>) -> Vec while let Some(token) = tokens.next() { match &token.token_type { - /* + TokenType::EOF => break, TokenType::VAR => { if let Some(ast_node) = parse_var(tokens) { body.push(ast_node); From 616761eb66f33d8e7985bbf61b321881d1a43404 Mon Sep 17 00:00:00 2001 From: LunaStev Date: Thu, 23 Jan 2025 16:47:33 +0900 Subject: [PATCH 06/13] Remove parse_function --- src/parser/parser.rs | 27 --------------------------- 1 file changed, 27 deletions(-) diff --git a/src/parser/parser.rs b/src/parser/parser.rs index 8f5e06b..7747338 100644 --- a/src/parser/parser.rs +++ b/src/parser/parser.rs @@ -109,33 +109,6 @@ pub fn extract_body<'a>(tokens: &mut Peekable>) -> Vec body } -pub fn parse_function(tokens: &mut Peekable>) -> Option { - let function_name = if let Some(Token { token_type: TokenType::IDENTIFIER(name), .. }) = tokens.next() { - name.clone() - } else { - return None; - }; - - let parameters = if let Some(Token { token_type: TokenType::LPAREN, .. }) = tokens.next() { - extract_parameters(tokens) - } else { - vec![] - }; - - let body = if let Some(Token { token_type: TokenType::LBRACE, .. }) = tokens.next() { - extract_body(tokens) - } else { - vec![] - }; - - Some(ASTNode::Function(FunctionNode { - name: function_name, - parameters, - body, - })) -} - -/* // VAR parsing fn parse_var(tokens: &mut Peekable>) -> Option { if let Some(Token { token_type: TokenType::IDENTIFIER(name), .. }) = tokens.next() { From fc874a80d5937e50cef0dc3dbb00b0738a06c966 Mon Sep 17 00:00:00 2001 From: LunaStev Date: Thu, 23 Jan 2025 16:47:50 +0900 Subject: [PATCH 07/13] Code for existing parameters --- src/parser/parser.rs | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/parser/parser.rs b/src/parser/parser.rs index 7747338..a64c4ae 100644 --- a/src/parser/parser.rs +++ b/src/parser/parser.rs @@ -51,14 +51,10 @@ pub fn extract_parameters(tokens: &mut Peekable>) -> Vec continue, + params.push(ParameterNode { name, param_type, initial_value }); + i += 6; // Move to the next token } + i += 1; } params From 59d979a38237e72ebd30db2bf1aea979cf7828dd Mon Sep 17 00:00:00 2001 From: LunaStev Date: Thu, 23 Jan 2025 16:47:53 +0900 Subject: [PATCH 08/13] Code for existing parameters --- src/parser/parser.rs | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/parser/parser.rs b/src/parser/parser.rs index a64c4ae..fd17f6e 100644 --- a/src/parser/parser.rs +++ b/src/parser/parser.rs @@ -40,16 +40,20 @@ pub fn extract_parameters(tokens: &mut Peekable>) -> Vec "unknown".to_string(), }; - let initial_value = if let Some(Token { token_type: TokenType::EQUAL, .. }) = tokens.peek() { - tokens.next(); - if let Some(Token { lexeme, .. }) = tokens.next() { - Some(lexeme.clone()) - } else { - None - } - } else { - None - }; + // parameter type + let param_type = if let Some(TokenType::TypeInt(_)) = tokens.get(i + 3) + .map(|t| &t.token_type) { + tokens[i + 3].lexeme.clone() + } else { + "unknown".to_string() // If you don't have type information, you don't know + }; + + let initial_value = if let Some(TokenType::EQUAL) = tokens.get(i + 4) + .map(|t| &t.token_type) { + Some(tokens[i + 5].lexeme.clone()) + } else { + None + }; params.push(ParameterNode { name, param_type, initial_value }); i += 6; // Move to the next token From 9234c21dbb67afa4bd4f079342db76bc573e8efa Mon Sep 17 00:00:00 2001 From: LunaStev Date: Thu, 23 Jan 2025 16:47:57 +0900 Subject: [PATCH 09/13] Code for existing parameters --- src/parser/parser.rs | 25 ++++++++----------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/src/parser/parser.rs b/src/parser/parser.rs index fd17f6e..37d3fcb 100644 --- a/src/parser/parser.rs +++ b/src/parser/parser.rs @@ -22,23 +22,14 @@ pub fn param(parameter: String, param_type: String, initial_value: Option>) -> Vec { let mut params = vec![]; - while let Some(token) = tokens.next() { - match &token.token_type { - TokenType::RPAREN => break, - TokenType::VAR => { - let name = if let Some(Token { token_type: TokenType::IDENTIFIER(name), .. }) = tokens.next() { - name.clone() - } else { - continue; - }; - - // Type Extraction - let param_type = match tokens.next() { - Some(Token { token_type: TokenType::TypeInt(_), lexeme, .. }) => lexeme.clone(), - Some(Token { token_type: TokenType::TypeFloat(_), lexeme, .. }) => lexeme.clone(), - Some(Token { token_type: TokenType::STRING(_), lexeme, .. }) => lexeme.clone(), - _ => "unknown".to_string(), - }; + while i < tokens.len() { + if matches!(tokens[i].token_type, TokenType::VAR) { + // parameter name + let name = if let Some(TokenType::IDENTIFIER(name)) = tokens.get(i + 1).map(|t| &t.token_type) { + name.clone() + } else { + continue; // Skip if no name exists + }; // parameter type let param_type = if let Some(TokenType::TypeInt(_)) = tokens.get(i + 3) From 6b528929aa40f0845ed388cdd19c9b025e4248e7 Mon Sep 17 00:00:00 2001 From: LunaStev Date: Thu, 23 Jan 2025 16:48:11 +0900 Subject: [PATCH 10/13] i is 0 --- src/parser/parser.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/parser/parser.rs b/src/parser/parser.rs index 37d3fcb..cdbf101 100644 --- a/src/parser/parser.rs +++ b/src/parser/parser.rs @@ -21,6 +21,7 @@ pub fn param(parameter: String, param_type: String, initial_value: Option>) -> Vec { let mut params = vec![]; + let mut i = 0; while i < tokens.len() { if matches!(tokens[i].token_type, TokenType::VAR) { From 78ecf97afba12b38dfcc8af7bcf04b96dd334a28 Mon Sep 17 00:00:00 2001 From: LunaStev Date: Thu, 23 Jan 2025 16:48:40 +0900 Subject: [PATCH 11/13] Existing code Peekable to Vec --- src/parser/parser.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/parser/parser.rs b/src/parser/parser.rs index cdbf101..b387c2e 100644 --- a/src/parser/parser.rs +++ b/src/parser/parser.rs @@ -19,7 +19,7 @@ pub fn param(parameter: String, param_type: String, initial_value: Option>) -> Vec { +pub fn extract_parameters(tokens: &Vec) -> Vec { let mut params = vec![]; let mut i = 0; From c6fcb1c811bc06a820219da4c3199dcf31007c16 Mon Sep 17 00:00:00 2001 From: LunaStev Date: Thu, 23 Jan 2025 16:48:51 +0900 Subject: [PATCH 12/13] Remove Comment --- src/parser/parser.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/parser/parser.rs b/src/parser/parser.rs index b387c2e..ccede6b 100644 --- a/src/parser/parser.rs +++ b/src/parser/parser.rs @@ -193,8 +193,6 @@ fn parse_var(tokens: &mut Peekable>) -> Option { None } - */ - // PRINTLN parsing fn parse_println(tokens: &mut Peekable>) -> Option { if let Some(Token { token_type: TokenType::LPAREN, .. }) = tokens.next() { From 664732fc78043b559b951ee8e2167232c859afac Mon Sep 17 00:00:00 2001 From: LunaStev Date: Thu, 23 Jan 2025 16:49:04 +0900 Subject: [PATCH 13/13] Add Test Code --- test/test4.wave | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test/test4.wave b/test/test4.wave index 9eac54a..dce2a46 100644 --- a/test/test4.wave +++ b/test/test4.wave @@ -1 +1,4 @@ -fun main(var i :i32768 = 0; var j :i4 = 2; var e :i32 = 10;) { } \ No newline at end of file +fun main(var i :i32768 = 0; var j :i4 = 2; var e :i32 = 10;) { + var b :i32 = 5; + println("Hello World"); +} \ No newline at end of file