使用语法
start
= b
/ a
a
= "4" "2"
b
= "4"
带有peg.js
的识别4而不是42,在这种情况下错误
“第1行,第2列:输入的预期结束但找到”2“。”
据报道。显然,解析器完成消耗“4”的start -> b
规则,然后不知道如何处理“2”。但是,当遇到错误时,为什么不再使用a
的其他规则?
答案 0 :(得分:3)
在PEG语法中,选择运算符被称为“优先选择”,并且替代意味着按照语法中的出现顺序进行处理。在运行时,PEG解析器将开始使用第一个替代方案处理选择。当失败时,解析器会在解析该替代之前回溯到它所处的状态,然后继续下一个。但是,一旦成功,替代方案被假定为正确解析的一部分,并且不考虑当前选择的任何剩余替代方案。
对于你的语法,这意味着永远不会尝试第二种选择,因为第一种选择形成了它的前缀。如果您对备选方案进行重新排序,它应该按照您的预期工作。