我正在阅读语言规范,并尝试为其编写解析器。在某些地方,规范对同一事物使用多个名称。我尝试将其复制到Happy语法中,如下所示:
foo : ...whatever...
bar : foo { $1 }
baz : foo { $1 }
不幸的是,这导致Happy开始抱怨并且开始抱怨“减少/减少冲突”。基本上,问题似乎是当它看到foo
时,它不知道是否将其缩减为bar
或baz
。事实上,我不在乎,因为它们都是相同的。但是它仍然让Happy感到沮丧 - 如果没别的话,这在语言上是具有讽刺意味的。
(我也有点害怕,如果我有一个提及bar
的规则和另一个提到baz
的规则,如果选择“错误”减少,则正确的规则可能无法触发。换句话说,解析器将遇到一个100%无法调试的问题。)
有什么方法可以说“快乐”,不管我说bar
,只是假装我说foo
继续你的生活“?
显然我可以只使用一些外部工具来进行文本查找和替换,但我真的更喜欢不必添加另一个构建步骤...