Python 规则匹配时的Grako结束闭包

Python 规则匹配时的Grako结束闭包,python,parsing,grako,Python,Parsing,Grako,我有这样的语法: name = /[_a-zA-Z][a-zA-Z0-9]*/; expression = name '+' name; def_body = 'def' name:name args:{name} body:expression; 但当我尝试解析时,它总是使用表达式的名字 作为论点的一部分。有没有办法让它在args闭包中的每个名称之前进行测试(如果它可以匹配表达式),并在通过时结束 提前谢谢 编辑:我通过语义解决了这个问题,但我仍然好奇是否可以通过grako ebnf解决这个

我有这样的语法:

name = /[_a-zA-Z][a-zA-Z0-9]*/;
expression = name '+' name;
def_body = 'def' name:name args:{name} body:expression;
但当我尝试解析时,它总是使用表达式的名字 作为论点的一部分。有没有办法让它在args闭包中的每个名称之前进行测试(如果它可以匹配表达式),并在通过时结束

提前谢谢


编辑:我通过语义解决了这个问题,但我仍然好奇是否可以通过grako ebnf解决这个问题。

缺少参数分隔符需要在输入中进一步查看,以决定是否应该继续闭包。消极前瞻应该在语法层面解决问题:

def_body = 'def' name:name args:{name !'+'} body:expression;
向前看,你没有作弊。出于重要原因,它们是PEG定义的一个组成部分