我有这样的语法:
name = /[_a-zA-Z][a-zA-Z0-9]*/;
expression = name '+' name;
def_body = 'def' name:name args:{name} body:expression;但是当我试图解析时,它总是使用表达式的名字作为参数的一部分。有没有办法让它在args闭包中的每个名称之前进行测试,如果它能够匹配表达式,如果它通过了就结束?
提前谢谢。
编辑:我通过语义解决了它,但我仍然很好奇是否可以通过grako ebnf。
发布于 2015-04-12 12:11:34
由于参数缺少分隔符,需要在输入中向前看,以决定是否应该继续闭包。消极的展望应该在语法层面解决这个问题:
def_body = 'def' name:name args:{name !'+'} body:expression;展望未来并不是“作弊”。由于重要的原因,它们是PEG定义中不可或缺的一部分。
https://stackoverflow.com/questions/29576884
复制相似问题