如何使用pyparsing一次解析多个元素?

2 投票
1 回答
862 浏览
提问于 2025-04-18 18:33

我正在尝试用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']:
    ...

撰写回答