gpt4 book ai didi

python - 这种技术对于在 pyparsing 中构造 ParseResults 是否可以接受?

转载 作者:行者123 更新时间:2023-12-01 06:11:16 37 4
gpt4 key购买 nike

我觉得在尝试构建生成的解析树(在 pyparsing 中称为 ParseResults)时,ParseActions 使我的代码有点笨拙。

我现在要做的是使用全局变量来存储 Group 元素返回的匹配标记组。最后,我会将结果注入(inject)到 toks 字典中。这个可以吗 ?

我粗略的语法:

grammar = ZeroOrMore( Or( ExprA, ExprB, ExprC ) )

请注意,ExprAExprB 等可以按任何顺序交错。但我想将一种类型的所有表达式分组到 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*") )

我发现“.setResultsName”在定义语法时过于冗长和困惑,这违背了我鼓励人们使用结果名称的初衷。

关于python - 这种技术对于在 pyparsing 中构造 ParseResults 是否可以接受?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5774837/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com