示例代码:
Program = __/Expression
Expression = .*
__ = [ \t\r\n]*
test is
2 * (3 + 4)
hahah hahhah
def hahah
在我看来,当__
不匹配时,pegjs匹配表达式吗?
但这会出错
第1行,第1列:预期为[ \t\r\n]
或输入结尾,但找到了"2"
。
预期的行为:
我想知道为什么它不起作用。 我想知道是否有可能让js中的所有函数被调用者都使用pegjs?
实际行为:
解析错误:第1行,第1列:预期为[ \t\r\n]
或输入结尾但找到"2"
。
答案 0 :(得分:0)
这是因为您规则__始终匹配,因为它匹配空输入。您可以认为,您在内部对语法进行了如下重写(这是完全有效的语法,您可以在线将其输入到pegjs中):
start = Program EOF
Program = __/Expression
Expression = .*
__ = [ \t\r\n]*
// EOF is ephemeral rule that match end of input, i.e. when nothing left in input
EOF = !.
因此您输入的解析为:
<'__' matched>
<'Program' matched>
<'EOF' not matched
=>backtrack to 'start'
=>nothing alternatives on 'start'
=>error
>2 * (3 + 4)