我有一个软件可以解析 Verilog 路径,并负责将这些路径映射到一系列对象。问题是找到一个正则表达式来分割实例名称序列中的 Verilog 路径。
Verilog 路径是用点连接的 Verilog 标识符序列。每个标识符都是一个实例名称。这 ”。” A.B.C 中的关系意味着,在模块层次结构中,A 是父级,B 是 A 的子级之一。C 是 B 的子级之一。
每个 Verilog 路径标识模块层次结构中的一个唯一实例。
伪代码:
Verilog Identifier A
Verilog Identifier B
Verilog Identifier C
作为 A 子级的父级 B 的实例 C 的路径:
A.B.C
现在的问题是,Verilog 标识符可以是字母、数字、下划线 (_) 和美元符号 ($) 的任意序列。标识符的第一个字符只能是字母或下划线”,如本页所述:http://verilog.renerta.com/source/vrg00018.htm
在这种情况下,Python 将能够通过编写以下内容来分割路径:
>>> path = "a.verilog.path"
>>> print path.split(".")
['a', 'verilog', 'path']
不幸的是,标识符可能是转义标识符。
转义标识符以反斜杠开头并以空格结尾。在反斜杠和空格内可以有任何字符(空格除外),甚至是点!
\an_escaped_identifier_that_ends_with_space
\another-identifier,withsome.dots)insideit_ending_withspace
所以事情变得更加复杂,你不能再依赖 split 了。 这是一个例子:
Verilog Identifier identifier1
Verilog Identifier \escaped.identifier_2
Verilog Identifier identifier3
父级\escaped.identifier_2(标识符1的子级)的实例标识符3的路径:
identifier1.\escaped.identifier_2 .identifier3
那么,我们如何使用 Python 的 re
模块来寻址由任意数量的标识符和/或转义标识符组成的所有可能的 Verilog 路径?
最佳答案
([a-z_][a-z0-9$_]*|\\\S* )
应匹配常规标识符和转义标识符。
关于python - 使用 Python 在不同实例中分割 verilog 路径的正则表达式模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46207665/