这种技术可以在pyparsing中构造ParseResults吗?

| 尝试构建结果分析树时,我觉得ѭ0会使我的代码有些笨拙(在pyparsing中称为
ParseResults
)。 我现在正在做的是使全局变量存储由
Group
元素返回的匹配令牌组。然后最后,我将结果注入back3ѭ字典中。这个可以吗 ? 我的粗略语法:
grammar = ZeroOrMore( Or( ExprA, ExprB, ExprC ) )
请注意,
ExprA
ExprB
等可以任意顺序交错。但是我想将一种类型的所有表达式归为ParseResults中的一个字典项。您如何看待我的技术?我不喜欢使用全局变量,因为它使多线程成为问题。我还有其他选择吗?     
已邀请:
您是否考虑过将setResultsName与listAllMatches = True一起使用?这是一个演示:
from pyparsing import *

aExpr = Word(\"A\", nums)
bExpr = Word(\"B\", nums)
cExpr = Word(\"C\", nums)

grammar = ZeroOrMore(aExpr.setResultsName(\"A\",listAllMatches=True) |
                     bExpr.setResultsName(\"B\",listAllMatches=True) |
                     cExpr.setResultsName(\"C\",listAllMatches=True) )


results = grammar.parseString(\"A1 B1 A2 C1 B2 A3\")
print results.dump()
印刷品:
[\'A1\', \'B1\', \'A2\', \'C1\', \'B2\', \'A3\']
- A: [\'A1\', \'A2\', \'A3\']
- B: [\'B1\', \'B2\']
- C: [\'C1\']
编辑: 较新的形式是:
grammar = ZeroOrMore(aExpr(\"A*\") | bExpr(\"B*\") | cExpr(\"C*\") )
我发现“ 10”在定义语法时过于冗长和混乱,这不利于我鼓励人们使用结果名称的意图。     

要回复问题请先登录注册