gpt4 book ai didi

python - pypeg 无法用列表组成语法?

转载 作者:太空宇宙 更新时间:2023-11-03 16:05:05 24 4
gpt4 key购买 nike

class A(List):
grammar = [(Symbol, ':', Symbol), Symbol]

compose(parse('a', A))

这会在解析正常时引发compose错误。

我只能使用虚拟类来绕过它:

class B(List):
grammar = Symbol, ':', Symbol
class A2(List):
grammar = [B, Symbol]

compose(parse('a', A2))

现在它可以正确组合了。

这里出了什么问题?

最佳答案

您在 pyPEG 中发现了一个错误。

在组合List对象时,pyPEG使用堆栈来跟踪接下来应该组合哪个列表项。语法中的元组从堆栈中删除项目,但永远不会将它们放回原处,即使元组无法匹配。当代码尝试访问空堆栈中的元素时,这会导致 IndexError。

对于您的示例,它看起来像这样:

    Stack                    Grammar                      Action                
-----------------------------------------------------------------------
[Symbol('a')] [(Symbol, ':', Symbol), Symbol] matched, pop stack
^^^^^^

[] [(Symbol, ':', Symbol), Symbol] str, append to text
^^^

[] [(Symbol, ':', Symbol), Symbol] no match
^^^^^^

[] [(Symbol, ':', Symbol), Symbol] IndexError!
^^^^^^

我已提交 pull request已修复。

关于python - pypeg 无法用列表组成语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39923032/

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