【发布时间】:2021-05-24 03:02:26
【问题描述】:
我有这个词位:
a().length()
还有这个 PEGjs 语法:
start = func_call
func_call = header "(" ")"
header = "a" suffix*
suffix = "(" ")" ("." "length")
在语法中,我正在解析一个函数调用。这目前可以解析,您可以try online in the PEGjs playground。
输入解析成功。
但是,如果我在后缀产生的末尾添加一个星号,如下所示:
suffix = "(" ")" ("." "length")*
然后输入解析失败:
第 1 行第 13 列:应为“(”或“.”,但找到了输入结尾。
我不明白为什么。来自the documentation:
expression * 匹配表达式的零个或多个重复,并将它们的匹配结果返回到一个数组中。匹配是贪心的
这应该是"." "length" 的贪婪匹配,应该匹配一次。但相反,它根本不匹配。这是否与header 中* 的嵌套使用有关?
【问题讨论】: