3

我正在阅读语言规范,并尝试为其编写解析器。在某些地方,规范对同一事物使用多个名称。我试图将其复制到快乐语法中,如下所示:

foo : ...whatever...
bar : foo { $1 }
baz : foo { $1 }

不幸的是,这导致 Happy 情绪失控,开始抱怨“减少/减少冲突”。基本上,问题似乎是当它看到 a 时foo,它不知道是将其减少为 abar还是 a baz。事实当然是我不在乎,因为它们都是相同的。但这仍然让快乐感到不安——如果没有别的,这在语言上是具有讽刺意味的。

(我也有点害怕如果我有一个提到的规则bar和另一个提到baz的规则,如果选择了“错误”的归约,正确的规则可能无法触发。换句话说,解析器会出现 100% 的问题永远无法调试。)

有什么方法可以告诉Happy“无论我在哪里说bar,就假装我说foo,继续你的生活”?

显然我可以使用一些外部工具来进行文本查找和替换,但我真的更希望不必添加另一个构建步骤......

4

0 回答 0