Я пытаюсь разобрать некоторый код verilog, и я надеюсь просто разобрать его разделы.Я не знаю pyparsing достаточно хорошо, чтобы написать полный синтаксический анализатор.Я работаю над разделом порта.Здесь он может иметь дополнительные теги, такие как «вход» и «выход».Итак, следующие допустимые порты:
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']]
Спасибо за помощь.