Pyparsing:在 parseaction 中访问外部 ParseResults

Pyparsing: access outer ParseResults in parseaction

from pyparsing import *
class AParseActionHolder(object):
    def __call__(self, string, index, t):
        f(info_from_outer_parse_results,t[0])
expr = operatorPrecedence( Word(nums),[
         (Literal('A'), 1, opAssoc.RIGHT,AParseActionHolder()),
         (Literal('B'), 2, opAssoc.LEFT),
         (Literal('C'), 2, opAssoc.LEFT)])
print(expr.parseString("3B1C2BA1")[0])#[['3','B','1'],'C',['2','B',"nested in B and C"]]
print(expr.parseString("A1B3")[0])#["nested in B", 'B', '3']
print(expr.parseString("A(1B3)")[0])#["not nested", ['1', 'B', '3']]

如何从嵌套parseaction参数的外部解析结果中获取信息? 我可以用 parseaction 来做吗?如果没有,是否还有其他 Pyparsing 工具,或者我应该定义以 pyparsing.ParseResults 作为参数的递归函数?

不,无法访问外部结果 - 在您的情况下,因为在解析内部结果时它们甚至还没有被解析!

您可能必须编写一个递归函数,该函数适用于您从 parseString 返回的完全解析的树。当您在树上行走时,请跟踪您的路径,当您找到 "A" 元素时,将其替换为路径。

可能很难直接使用返回的 ParseResults,因此您可能希望通过对返回的结果调用 asList() 来获取树:

tree = expr.parseString("whatever").asList()