示例:
start = name / invocation;
name = [a-zA-Z]+ { return text() };
invocation = a:name "()" { return {type: 'inv', value: a } };
如果输入为abc()
,则会收到错误消息:
Expected [a-zA-Z] or end of input but "(" found
但是,如果启动定义如下,则不会出现问题:
start = invocation / name;
对于较早的情况,名称规则不应该不匹配并因此输入调用规则吗?否则如何处理这种事情?
有关工作示例,请参见playground
答案 0 :(得分:0)
这是解析器表达语法的属性。在选择运算符中更改表达式的顺序可以更改结果。
来自wikipedia:
上下文无关文法与解析之间的根本区别 表达式语法是PEG的选择运算符是有序的。如果 第一个选择成功,第二个选择被忽略。 因此,有序选择不是可交换的,这与无序选择不同 上下文无关的语法。