Skip to content

Commit b53afc9

Browse files
author
erihsu
committed
fix identifier parser in verilog-parser
1 parent b071a0c commit b53afc9

File tree

2 files changed

+21
-14
lines changed

2 files changed

+21
-14
lines changed

src/parser/base.rs

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,18 +30,25 @@ pub fn tstring(s: &str) -> ParseRes<&str, &str> {
3030
)))(s)
3131
}
3232

33-
/// module name identifier
34-
/// this parser allow hierachical representation of module name
35-
pub fn identifier(s: &str) -> ParseRes<&str, &str> {
33+
fn identifier(input: &str) -> ParseRes<&str, &str> {
34+
recognize(pair(
35+
alt((alpha1, tag("_"))),
36+
many0(alt((alphanumeric1, tag("_")))),
37+
))(input)
38+
}
39+
40+
/// hierachical identifier
41+
/// this parser allow hierachical representation of module name, net name or pin name
42+
pub fn hier_identifier(s: &str) -> ParseRes<&str, &str> {
3643
ws(recognize(pair(
37-
pair(opt(tag("\\")), tstring),
44+
pair(opt(tag("\\")), identifier),
3845
many0(alt((
3946
recognize(many1(tuple((tag("\\\\["), digit1, tag("\\\\]"))))),
4047
recognize(many1(tuple((tag("\\["), digit1, tag("\\]"))))),
4148
recognize(many1(tuple((tag("["), digit1, tag("]"))))),
42-
recognize(pair(tag("\\\\/"), tstring)),
43-
recognize(pair(tag("\\/"), tstring)),
44-
recognize(pair(tag("/"), tstring)),
49+
recognize(pair(tag("\\\\/"), identifier)),
50+
recognize(pair(tag("\\/"), identifier)),
51+
recognize(pair(tag("/"), identifier)),
4552
))),
4653
)))(s)
4754
}

src/parser/subparser.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use super::base::{identifier, number, tstring, ws};
1+
use super::base::{hier_identifier, number, tstring, ws};
22
use crate::model::PinDirection;
33
use nom::branch::alt;
44
use nom::bytes::complete::{is_not, tag};
@@ -17,7 +17,7 @@ pub fn instantiate_stmt(s: &str) -> ParseRes<&str, (&str, &str, Vec<BindingT>)>
1717
terminated(
1818
tuple((
1919
tstring,
20-
identifier,
20+
hier_identifier,
2121
delimited(
2222
tag("("),
2323
separated_list1(ws(tag(",")), binding_parser),
@@ -35,7 +35,7 @@ pub fn port_map_stmt(s: &str) -> ParseRes<&str, Vec<&str>> {
3535
terminated(
3636
delimited(
3737
tag("("),
38-
separated_list1(ws(tag(",")), identifier),
38+
separated_list1(ws(tag(",")), hier_identifier),
3939
tag(")"),
4040
),
4141
ws(tag(";")),
@@ -52,15 +52,15 @@ pub fn port_direction_declare_stmt(
5252
map(
5353
delimited(
5454
ws(tag("input")),
55-
tuple((opt(bitwidth), separated_list1(tag(","), identifier))),
55+
tuple((opt(bitwidth), separated_list1(tag(","), hier_identifier))),
5656
ws(tag(";")),
5757
),
5858
|d| (PinDirection::Input, d.0, d.1),
5959
),
6060
map(
6161
delimited(
6262
ws(tag("output")),
63-
tuple((opt(bitwidth), separated_list1(tag(","), identifier))),
63+
tuple((opt(bitwidth), separated_list1(tag(","), hier_identifier))),
6464
ws(tag(";")),
6565
),
6666
|d| (PinDirection::Output, d.0, d.1),
@@ -80,7 +80,7 @@ pub fn wire_declare_stmt(s: &str) -> ParseRes<&str, (Option<(u32, u32)>, Vec<&st
8080
"Wire Declare Statement",
8181
delimited(
8282
ws(tag("wire")),
83-
tuple((opt(bitwidth), separated_list1(tag(","), identifier))),
83+
tuple((opt(bitwidth), separated_list1(tag(","), hier_identifier))),
8484
ws(tag(";")),
8585
),
8686
)(s)
@@ -114,7 +114,7 @@ pub fn comment(s: &str) -> ParseRes<&str, ()> {
114114
fn binding_parser(s: &str) -> ParseRes<&str, BindingT> {
115115
tuple((
116116
preceded(ws(tag(".")), tstring),
117-
delimited(ws(tag("(")), identifier, ws(tag(")"))),
117+
delimited(ws(tag("(")), hier_identifier, ws(tag(")"))),
118118
))(s)
119119
}
120120

0 commit comments

Comments
 (0)