Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
使用语法
start = b / a a = "4" "2" b = "4"
withpeg.js识别 4 但不是 42 在这种情况下错误
peg.js
“第 1 行,第 2 列:预期输入结束,但找到了“2”。”
被报道。显然,解析器完成了start -> b消耗“4”的规则,然后不知道如何处理“2”。a但是,当它遇到错误时,为什么不使用其他规则再次尝试呢?
start -> b
a
在 PEG 语法中,选择运算符被称为“优先选择”,替代项意味着按照在语法中出现的顺序进行处理。在运行时,PEG 解析器将开始处理具有第一个备选方案的选择。当失败时,解析器会回溯到解析该替代方案之前的状态,然后继续下一个。但是,一旦成功,则假定替代方案是正确解析的一部分,并且对于当前选择不考虑任何剩余的替代方案。
对于您的语法,这意味着永远不会尝试第二种选择,因为第一种形成了它的前缀。如果您对替代品重新排序,它应该可以按您的预期工作。