繁体   English   中英

使用琶音编写 PEG 递归表达式语法有困难

[英]Difficulty writing PEG recursive expression grammar with Arpeggio

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

aircraft

在我的语言中,我称其为代表一组具有各种属性的实例的名称 它产生在这个例子中所有的飞机实例的instance_set。

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

aircraft(Altitude < ceiling)

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

aircraft(Altitude < ceiling)(Speed > min_speed)

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

instance_set = expr
expr = source / instance_set
source = name filter?

它正确解析了我的前两个案例,但在最后一个案例中窒息:

 aircraft(Altitude < ceiling)(Speed > min_speed)

错误报告就在第二个打开的括号之前。

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

我虚心向钉钉解析神提交我的呼吁,等待洞察力......

您的前两个案例都匹配source 一旦source匹配,它就匹配; 这就是 PEG 合同。 所以解析器不会探索替代方案。

但假设确实如此。 这有什么帮助? 规则说,如果expr不是source ,那么它就是instance_set 但是instance_set只是一个expr 换句话说, expr要么是source要么是expr 显然,替代方案并没有让我们到任何地方。

我很确定琶音有重复,这就是你在这里真正想要的:

source = name filter*

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM