pyparsing删除空间并合并令牌

时间:2019-01-22 21:58:02

标签: python space pyparsing

我正在尝试解析一些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']]

感谢您的帮助。

0 个答案:

没有答案