规则匹配时 Grako 结束闭包
Grako end closure when rule is matched
我有这个语法:
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;
前瞻不是 "cheating"。出于重要原因,它们是 PEG 定义的组成部分。
我有这个语法:
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;
前瞻不是 "cheating"。出于重要原因,它们是 PEG 定义的组成部分。