在MatchFirs中解析Verilog网络连接

2024-10-05 10:43:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个简单的语法来解析verilog连接:

scalar = (Optional(Word(nums + "_") + "'" + oneOf("d h b")) + Word(nums + "_")).setName("Scalar")
operator = oneOf("+ - * /").setName("Operator")
identifier = Word(alphas, alphanums+"_").setName("Identifier")
expr = (scalar | identifier) + ZeroOrMore(operator + (scalar | identifier))
range = expr + ":" + expr
index = "[" + range + "]"
single_netref = (identifier + Optional(index)).setName("Single Net Reference")
single_netref.setDebug()
lbracket = Literal("{").setName("Left Bracket").setDebug()
rbracket = Literal("}").setName("Left Bracket").setDebug()
concat_netref = (lbracket + single_netref + ZeroOrMore( Suppress( "," ) + single_netref ) + rbracket).setName("Net Concatination Reference")
concat_netref.setDebug()

如果我使用parseString方法解析字符串“{LegacyStatus3gPreStageQ1,LegacyData3gPreStageQ1}”,它解析得很好;但是,我想匹配一个网络引用的串联或一个单独的网络引用。为此,我尝试了:

^{pr2}$

但是,这(以及使用Or()总是跳过最后一个rbracket,但表示它成功地匹配了netref。这是我的调试输出:

Match Net Reference at loc 0(1,1)
Match Left Bracket at loc 0(1,1)
Matched Left Bracket -> ['{']
Match Single Net Reference at loc 1(1,2)
Matched Single Net Reference -> ['LegacyStatus3gPreStageQ1']
Match Single Net Reference at loc 28(1,29)
Matched Single Net Reference -> ['LegacyData3gPreStageQ1']
Matched Net Reference -> ['{', 'LegacyStatus3gPreStageQ1', 'LegacyData3gPreStageQ1']

为什么添加MatchFirst()元素会导致rbracket丢失?在


Tags: netmatchleftlocatreferenceidentifiersingle

热门问题