以下简单的pegjs语法工作正常:
start
= sentence
sentence
= word ws sentence
/ word
word
= [a-z]*
ws
= " "
可在http://jsfiddle.net/4V3Zt/处找到。 gramar也可以粘贴到http://pegjs.majda.cz/online。
如果我更改ws规则以允许空格任意空格:
ws
= " "* // add an asterisk to allow " ", " ", " ", ...
解析失败并抛出最大的callstack异常。 (如果使用jsfiddle,你会在浏览器工具中看到异常。例外也出现在node.js环境中,所以它肯定与pegjs有关。)
此ws规则中的*有什么问题?
答案 0 :(得分:1)
使用+
代替*
(也适用于word
)。
*
可以匹配空字符串; +
至少需要一个实例。