首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >难以用Arpeggio编写PEG递归表达式语法

难以用Arpeggio编写PEG递归表达式语法
EN

Stack Overflow用户
提问于 2020-11-02 03:02:32
回答 1查看 52关注 0票数 0

我的输入文本可能有这样一个简单的语句:

代码语言:javascript
复制
aircraft

在我的语言中,我称它为一个名称,它表示一组具有各种属性的实例。在本例中,它生成了所有飞机实例的instance_set。

我可以将括号中的过滤器应用于任何instance_set:

代码语言:javascript
复制
aircraft(Altitude < ceiling)

它产生了另一个,可能是降低的instance_set。由于它是一个实例集,所以我可以再次过滤它:

代码语言:javascript
复制
aircraft(Altitude < ceiling)(Speed > min_speed)

我愚蠢地认为我可以在语法上做这样的事情:

代码语言:javascript
复制
instance_set = expr
expr = source / instance_set
source = name filter?

它正确地分析了我的前两种情况,但对最后一种情况却产生了窒息:

代码语言:javascript
复制
 aircraft(Altitude < ceiling)(Speed > min_speed)

据报道,该错误发生在第二次打开paren之前。

为什么Arpeggio看不到只有一个过滤的instance_set,它本身就是一个过滤的实例集?

我谦卑地将我的上诉提交给分析神灵并等待洞察.

EN

回答 1

Stack Overflow用户

发布于 2020-11-02 04:53:12

您的前两种情况都与source匹配。一旦source被匹配,它就匹配;这就是PEG契约。因此,解析器不会探索替代方法。

但假设是真的。那又有什么用呢?规则说,如果一个expr不是source,那么它就是一个instance_set。但是instance_set只是一个expr。换句话说,expr要么是source,要么是expr。很明显,另一种选择对我们没有任何帮助。

我很确定Arpeggio有重复,这就是你真正想要的:

代码语言:javascript
复制
source = name filter*
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64639294

复制
相关文章

相似问题

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