我刚开始玩PEG.js并且语法有问题(调试时大大简化了):
start
= presingle single
/ preplural plural
presingle
= "a"
/ "b"
preplural
= "b"
/ "c"
single
= "d"
/ "e"
plural
= "dd"
/ "ee"
此语法无法解析bdd
。
Line 1, column 3: Expected "a" but "d" found.
这是PEG不能做的事情,还是可以将我的语法转换成可以解析它的东西?
P.S。如果我试图解析(错误地建议?)bda
我得到无意义的错误:
Line 1, column 3: Expected "a" but "a" found.
答案 0 :(得分:1)
此语法仅更改start中的子句的顺序,适用于bdd
start =
preplural plural /
presingle single
presingle
= "a"
/ "b"
preplural
= "b"
/ "c"
single
= "d"
/ "e"
plural
= "dd"
/ "ee"
并且对于bda显示错误第1行,第3列:预期“dd”或“ee”但找到“a”。
答案 1 :(得分:1)
好消息是pegjs的现代版本会给出错误信息:“第1行,第3列:输入的预期结束但发现”d“。当给出输入bdd时。
这是你所期望的,因为它首先匹配单个匹配,并且由于“b”和“d”匹配,它假定它是好的。按照@HBP的建议,反转顺序会强制它首先匹配复数,只有当它们不存在时,它才会尝试单一,这会产生你期望的结果。