首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PEGjs语法星(*)与预期的不匹配

PEGjs语法星(*)与预期的不匹配
EN

Stack Overflow用户
提问于 2021-05-24 03:02:26
回答 1查看 82关注 0票数 0

我有个词:

代码语言:javascript
复制
a().length()

这个PEGjs语法:

代码语言:javascript
复制
start = func_call

func_call = header "(" ")"

header = "a" suffix*

suffix = "(" ")" ("." "length")

在语法中,我正在解析一个函数调用。这是当前解析的,正如您可以试着在PEGjs操场上上网所做的那样。

输入解析成功。

但是,如果我在后缀产品的末尾添加一个星号,如下所示:

代码语言:javascript
复制
suffix = "(" ")" ("." "length")*

然后输入无法解析:

第1行,第13栏:预期"(“或”。但是找到了输入的结尾。

我不明白为什么。来自文献资料

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

这应该是"." "length"贪婪的匹配,应该只匹配一次。但相反,它根本无法匹配。这与*header中的嵌套使用有关吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-24 14:49:58

正如您所说,*匹配0或其操作数的更多重复。

所以当你写

代码语言:javascript
复制
suffix = "(" ")" ("." "length")*

您是说后缀是(),后面是0.length的更多重复。因此,它可以是(),它有零的重复。

因此,suffix* (在header中)可以匹配().length()作为suffix的两个重复,首先是().length,然后是()。这将是贪婪的匹配,这是PEG的运作方式。

但在此之后,()就不再需要func_call的匹配了。因此产生了解析错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67666184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档