[英]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.