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作为参数的递归函数?
答案 0 :(得分:1)
不,没有办法访问外部结果 - 在你的情况下,因为在解析内部结果时它们甚至还没有解析过!
您可能必须编写一个递归函数,该函数适用于从parseString
返回的完全解析的树。当你走在树上时,跟踪你的路径,当你找到一个" A"元素,用路径替换它。
可能很难直接使用返回的ParseResults
,因此您可能希望通过在返回的结果上调用asList()
来获取树:
tree = expr.parseString("whatever").asList()