fix vhdl parser err
This commit is contained in:
parent
96670359c5
commit
db0156e88f
@ -129,7 +129,7 @@ fn parse_tokens(tokens: Vec<Token>) -> Vec<Module> {
|
|||||||
(kind_str(tokens[end+1].kind) == "architecture" || get_value(&tokens[end+1]) == arch_name)) {
|
(kind_str(tokens[end+1].kind) == "architecture" || get_value(&tokens[end+1]) == arch_name)) {
|
||||||
end += 1;
|
end += 1;
|
||||||
}
|
}
|
||||||
let end_pos = if get_value(&tokens[end+1]) == arch_name {
|
let end_pos = if end+1 < tokens.len() && get_value(&tokens[end+1]) == arch_name {
|
||||||
// i = end + 2;
|
// i = end + 2;
|
||||||
tokens[end+2].pos.range.end
|
tokens[end+2].pos.range.end
|
||||||
} else if end + 3 < tokens.len() {
|
} else if end + 3 < tokens.len() {
|
||||||
@ -161,7 +161,7 @@ fn parse_tokens(tokens: Vec<Token>) -> Vec<Module> {
|
|||||||
}
|
}
|
||||||
"configuration" => {
|
"configuration" => {
|
||||||
i += 1;
|
i += 1;
|
||||||
while !(kind_str(tokens[i].kind) == "end" && kind_str(tokens[i+1].kind) == "configuration") {
|
while i < tokens.len() && !(kind_str(tokens[i].kind) == "end" && kind_str(tokens[i+1].kind) == "configuration") {
|
||||||
i += 1;
|
i += 1;
|
||||||
}
|
}
|
||||||
i += 1;
|
i += 1;
|
||||||
@ -169,7 +169,7 @@ fn parse_tokens(tokens: Vec<Token>) -> Vec<Module> {
|
|||||||
"package" => {
|
"package" => {
|
||||||
i += 1;
|
i += 1;
|
||||||
// println!("get package");
|
// println!("get package");
|
||||||
while !(kind_str(tokens[i].kind) == "end" && kind_str(tokens[i+1].kind) == "package") {
|
while i < tokens.len() && !(kind_str(tokens[i].kind) == "end" && kind_str(tokens[i+1].kind) == "package") {
|
||||||
i += 1;
|
i += 1;
|
||||||
}
|
}
|
||||||
i += 1;
|
i += 1;
|
||||||
@ -178,11 +178,23 @@ fn parse_tokens(tokens: Vec<Token>) -> Vec<Module> {
|
|||||||
i += 1;
|
i += 1;
|
||||||
instance_type.insert(get_value(&tokens[i]));
|
instance_type.insert(get_value(&tokens[i]));
|
||||||
// println!("instance {:?}", kind_str(tokens[i].kind));
|
// println!("instance {:?}", kind_str(tokens[i].kind));
|
||||||
while !(kind_str(tokens[i].kind) == "end" && kind_str(tokens[i+1].kind) == "component") {
|
while i < tokens.len() && !(kind_str(tokens[i].kind) == "end" && kind_str(tokens[i+1].kind) == "component") {
|
||||||
i += 1;
|
i += 1;
|
||||||
}
|
}
|
||||||
i += 1;
|
i += 1;
|
||||||
}
|
}
|
||||||
|
"signal" => {
|
||||||
|
i += 1;
|
||||||
|
while !(kind_str(tokens[i+1].kind) == ";") {
|
||||||
|
i += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"attribute" => {
|
||||||
|
i += 1;
|
||||||
|
while !(kind_str(tokens[i+1].kind) == ";") {
|
||||||
|
i += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
":" => {
|
":" => {
|
||||||
if (i+2 < tokens.len()) && (kind_str(tokens[i+2].kind) != "use") {
|
if (i+2 < tokens.len()) && (kind_str(tokens[i+2].kind) != "use") {
|
||||||
if instance_type.contains(&get_value(&tokens[i+1])) {
|
if instance_type.contains(&get_value(&tokens[i+1])) {
|
||||||
@ -222,6 +234,34 @@ fn parse_tokens(tokens: Vec<Token>) -> Vec<Module> {
|
|||||||
};
|
};
|
||||||
modules.last_mut().unwrap().instances.push(instance);
|
modules.last_mut().unwrap().instances.push(instance);
|
||||||
i += 1;
|
i += 1;
|
||||||
|
} else {
|
||||||
|
let name = get_value(&tokens[i-1]);
|
||||||
|
let mut inst_type = String::new();
|
||||||
|
while i < tokens.len() {
|
||||||
|
if kind_str(tokens[i].kind) == "generic" || kind_str(tokens[i].kind) == "port" || kind_str(tokens[i].kind) == "end" {
|
||||||
|
i = i - 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
inst_type = inst_type + &get_value(&tokens[i]);
|
||||||
|
i += 1;
|
||||||
|
}
|
||||||
|
let instance = Instance {
|
||||||
|
name,
|
||||||
|
inst_type,
|
||||||
|
instports: None,
|
||||||
|
instparams: None,
|
||||||
|
range: Range {
|
||||||
|
start: Position {
|
||||||
|
line: tokens[i-1].pos.range.start.line + 1,
|
||||||
|
character: tokens[i-1].pos.range.start.character + 1
|
||||||
|
},
|
||||||
|
end: Position {
|
||||||
|
line: tokens[i+1].pos.range.start.line + 1,
|
||||||
|
character: tokens[i+1].pos.range.start.character + 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
modules.last_mut().unwrap().instances.push(instance);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user