我正在尝试解析一些Verilog代码,并且希望仅解析其中的一部分。我不了解pyparsing足以编写一个完整的解析器。我正在港口部分。在这里,它可以具有可选标签,例如“ input”和“ output”。因此,以下是有效的端口:
random_signal
input random_signal
我遇到的问题是有人选择了端口名:
input1
当我解析此行时,pyparser将该行分为“输入”和“ 1”。
这是我所拥有的:
from pyparsing import alphas, nums
from pyparsing import Literal, Group, Optional, Word
port_name = Word( alphas + nums + "_") | "\\do "
in_type = Literal("input") | Literal("output") | Literal("RFnet") | Literal("inout")
var_real = Literal("var") + Literal("real")
bus_index = Word( nums )
in_bus = Literal("[") + bus_index + Optional(":") + Optional(bus_index) + Literal("]")
in_pin = Group(Optional(in_type) + Optional(var_real) + Optional(Literal("wire")) +
Optional(in_bus) +
port_name.setResultsName('port_name', listAllMatches=True))
# Test some ports
in_list = ['random_signal', 'input random_signal', 'input1', 'input input1']
for in_str in in_list:
print in_str, in_pin.parseString(in_str)
以下是输出:
random_signal [['random_signal']]
input random_signal [['input', 'random_signal']]
input1 [['input', '1']]
input input1 [['input', 'input1']]
我希望input1返回:[['input1']]
感谢您的帮助。