From 0aa6ef04627cf143cb5d457c3057a98867f3a8c1 Mon Sep 17 00:00:00 2001 From: light-ly Date: Sat, 16 Nov 2024 10:08:13 +0800 Subject: [PATCH] change vhdl parse: only think of entity as module --- src/core/vhdl_parser.rs | 83 +++++++++++++++++++++-------------------- 1 file changed, 42 insertions(+), 41 deletions(-) diff --git a/src/core/vhdl_parser.rs b/src/core/vhdl_parser.rs index 79849c0..76bc8be 100644 --- a/src/core/vhdl_parser.rs +++ b/src/core/vhdl_parser.rs @@ -143,47 +143,48 @@ fn parse_tokens(tokens: Vec) -> Vec { } "architecture" => { if (i >= 1 as usize) && (kind_str(tokens[i-1].kind) != "end") || (i < 1) { - let name = get_value(&tokens[i+3]); - if let None = modules.iter().find(|module| module.name == name) { - let start_pos = tokens[i].pos.range.start; - i += 1; - let arch_name = get_value(&tokens[i]); - // println!("arch name {:?}", arch_name); - let mut end = i; - while (end+1 < tokens.len()) && - !(kind_str(tokens[end].kind) == "end" && - (kind_str(tokens[end+1].kind) == "architecture" || get_value(&tokens[end+1]) == arch_name)) { - end += 1; - } - let end_pos = if end+1 < tokens.len() && get_value(&tokens[end+1]) == arch_name { - // i = end + 2; - tokens[end+2].pos.range.end - } else if end + 3 < tokens.len() { - // i = end + 3; - tokens[end+3].pos.range.end - } else { - // i = end; - tokens[end].pos.range.end - }; - let module = Module { - name: name.to_string(), - params: Vec::new(), - ports: Vec::new(), - instances: Vec::new(), - range: Range { - start: Position { - line: start_pos.line + 1, - character: start_pos.character + 1 - }, - end: Position { - line: end_pos.line + 1, - character: end_pos.character + 1 - } - } - }; - last_module_name = name.to_string(); - modules.push(module); - } + // !!! We not think of Architecture as VHDL Module Now + // let name = get_value(&tokens[i+3]); + // if let None = modules.iter().find(|module| module.name == name) { + // let start_pos = tokens[i].pos.range.start; + // i += 1; + // let arch_name = get_value(&tokens[i]); + // // println!("arch name {:?}", arch_name); + // let mut end = i; + // while (end+1 < tokens.len()) && + // !(kind_str(tokens[end].kind) == "end" && + // (kind_str(tokens[end+1].kind) == "architecture" || get_value(&tokens[end+1]) == arch_name)) { + // end += 1; + // } + // let end_pos = if end+1 < tokens.len() && get_value(&tokens[end+1]) == arch_name { + // // i = end + 2; + // tokens[end+2].pos.range.end + // } else if end + 3 < tokens.len() { + // // i = end + 3; + // tokens[end+3].pos.range.end + // } else { + // // i = end; + // tokens[end].pos.range.end + // }; + // let module = Module { + // name: name.to_string(), + // params: Vec::new(), + // ports: Vec::new(), + // instances: Vec::new(), + // range: Range { + // start: Position { + // line: start_pos.line + 1, + // character: start_pos.character + 1 + // }, + // end: Position { + // line: end_pos.line + 1, + // character: end_pos.character + 1 + // } + // } + // }; + // last_module_name = name.to_string(); + // modules.push(module); + // } } } "configuration" => {