如何使用pyparsing一次解析多个元素?
我正在尝试用pyparsing写一个thrift解析器。
我想要的解析结果是一个字典,这个字典把元素名称和解析出来的标记(tokens)对应起来。
在定义好这些元素后,我对每个元素调用scanString
来解析相应的标记,然后把结果做成一个字典。
但是这样做需要多次遍历源数据,每个元素都要遍历一次,比如解析常量、异常、结构体等等。
有没有办法一次性解析多个元素,并且还能根据类型把标记分开呢?
1 个回答
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']:
...