我试图用pyparsing编写一个thrift解析器。
我想看的解析结果是一个将元素名称映射到解析的标记的字典。
在定义元素之后,我在每个元素上调用scanString
来解析相应的标记,然后从结果中创建一个字典。
但是这需要多次通过源,每个元素一个,例如。一个用于解析常量,一个用于异常,一个用于结构...
是否可以一次解析多个元素,并且仍然可以根据其类型分离令牌?
答案 0 :(得分:1)
定义一个包含您要查找的所有元素的解析器:
parser = OneOrMore(parserA | parserB | parserC)
如果名称重叠,则将子分组分组,并按名称保留:
parser = OneOrMore(Group(parserA)("A*") | Group(parserB)("B*") | Group(parserC)("C*"))
带有尾随星号的结果名称将保留所有已解析的匹配,而不仅仅是最后一个(关闭'*'并查看解析结果中的差异)。
现在你可以做到:
results = parser.parseString(input) # or use scanString or searchString
for aresult in results['A']:
...
for bresult in results['B']:
...