Python pypeg无法使用列表编写语法?

Python pypeg无法使用列表编写语法?,python,parsing,peg,pypeg,Python,Parsing,Peg,Pypeg,这会在解析正常时引发一个compose错误 我只能通过使用虚拟类绕过它: class A(List): grammar = [(Symbol, ':', Symbol), Symbol] compose(parse('a', A)) 现在它的组成正确了 这里出了什么问题?您在pyPEG中发现了一个bug 当编写List对象时,pyPEG使用堆栈跟踪下一步应该编写哪个列表项。语法中的元组从堆栈中删除项,但永远不要将它们放回堆栈,即使元组无法匹配。当代码试图访问空堆栈中的元素时,这会导致

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

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

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

compose(parse('a', A))
现在它的组成正确了


这里出了什么问题?

您在pyPEG中发现了一个bug

当编写
List
对象时,pyPEG使用堆栈跟踪下一步应该编写哪个列表项。语法中的元组从堆栈中删除项,但永远不要将它们放回堆栈,即使元组无法匹配。当代码试图访问空堆栈中的元素时,这会导致索引器错误

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

堆栈语法操作
-----------------------------------------------------------------------
[Symbol('a')][(Symbol,:',Symbol),Symbol]匹配,弹出堆栈
^^^^^^
[](符号“:”,符号),符号]str,追加到文本
^^^
[](符号“:”,符号),符号]不匹配
^^^^^^
[](符号“:”,符号),符号]索引器!
^^^^^^
我已经提交了一份带有修复程序的文档

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

compose(parse('a', A2))