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调用
匹配了。因此出现了解析错误