Parsing PEGjs语法星(*)未按预期匹配

Parsing PEGjs语法星(*)未按预期匹配,parsing,peg,ll,pegjs,Parsing,Peg,Ll,Pegjs,我有这个词素: a().length() 这是佩吉语法: start = func_call func_call = header "(" ")" header = "a" suffix* suffix = "(" ")" ("." "length") 在语法中,我正在解析函数调用。正如您所能做的那样,它当前正在解析 已成功解析输入 但是,如果在后

我有这个词素:

a().length()
这是佩吉语法:

start = func_call

func_call = header "(" ")"

header = "a" suffix*

suffix = "(" ")" ("." "length")
在语法中,我正在解析函数调用。正如您所能做的那样,它当前正在解析

已成功解析输入

但是,如果在后缀生成的末尾添加星号,如下所示:

suffix = "(" ")" ("." "length")*
然后输入无法解析:

第1行第13列:应为“(”或“”,但找到输入的结尾

我不明白为什么。来源:

表达式*匹配表达式的零次或多次重复,并在数组中返回其匹配结果。匹配是贪婪的


这应该是一个贪婪的匹配,
“长度”
,应该匹配一次。但是它根本不匹配。这与
头中嵌套使用
*
有关吗?

*
匹配零个或多个重复的操作数,如您所说

所以当你写作的时候

suffix = "(" ")" ("." "length")*
您的意思是后缀是
()
,后跟或更多重复的
.length
。因此它可能是重复次数为零的
()

因此,
后缀•
可以匹配
().length()
作为
后缀的两个重复,首先是
().length
,然后是
()
。这将是贪婪匹配,这是佩格的操作方式

但是在那之后,就没有
()
剩下来与
func\u调用
匹配了。因此出现了解析错误