问题描述
我的输入文本可能有一个简单的语句,如下所示:
Attackdistance = math.sqrt((FFxpos - xpos)**2 + (FFypos - ypos)**2)
if Attackdistance < 50:
ball.erase()
在我的语言中,我称其为名称,它表示一组具有各种属性的实例。 在此示例中,它会生成所有飞机实例的 instance_set 。
我可以在括号中将 filter 应用于任何instance_set:
aircraft
它产生另一个可能减少的instance_set。 并且由于它是一个实例集,所以我可以再次对其进行过滤:
aircraft(Altitude < ceiling)
我愚蠢地以为我可以在语法上做这样的事情:
aircraft(Altitude < ceiling)(Speed > min_speed)
它可以正确解析我的前两种情况,但在最后一种情况下会令人窒息:
instance_set = expr
expr = source / instance_set
source = name filter?
错误报告是在第二个打开的括号之前。
为什么琶音不能看到只有一个过滤后的instance_set本身就是一个过滤后的实例集?
我谦虚地向钉住神灵的钉子提出上诉,等待见识...
解决方法
您的前两种情况都匹配source
。一旦source
被匹配,就被匹配;那是PEG合约。因此,解析器将不会探索替代方法。
但假设确实如此。那有什么帮助?该规则表明,如果expr
不是source
,则它是instance_set
。但是instance_set
只是expr
。换句话说,expr
是source
或expr
。显然,替代方案并不能帮助我们。
我很确定琶音有重复,这是您真正想要的:
source = name filter*