Parsing 在数据库中定义规则别名

Parsing 在数据库中定义规则别名,parsing,haskell,happy,Parsing,Haskell,Happy,我正在阅读一个语言规范,并试图为它编写一个解析器。在某些地方,规范对同一事物使用多个名称。我试着把它复制到快乐语法中,就像这样: foo : ...whatever... bar : foo { $1 } baz : foo { $1 } 不幸的是,这导致Happy情绪失控,开始抱怨“减少/减少冲突”。基本上,问题似乎是当它看到一个foo时,它不知道是将其简化为一个bar还是一个baz。事实上,我当然不在乎,因为它们都是一样的。但它仍然让Happy心烦意乱——这在语言上是讽刺的,如果没有其他的

我正在阅读一个语言规范,并试图为它编写一个解析器。在某些地方,规范对同一事物使用多个名称。我试着把它复制到快乐语法中,就像这样:

foo : ...whatever...
bar : foo { $1 }
baz : foo { $1 }
不幸的是,这导致Happy情绪失控,开始抱怨“减少/减少冲突”。基本上,问题似乎是当它看到一个
foo
时,它不知道是将其简化为一个
bar
还是一个
baz
。事实上,我当然不在乎,因为它们都是一样的。但它仍然让Happy心烦意乱——这在语言上是讽刺的,如果没有其他的话

(我也有点害怕,如果我有一个规则提到
bar
,另一个规则提到
baz
,如果选择了“错误”的缩减,正确的规则可能无法启动。换句话说,解析器将有一个100%不可能调试的问题。)

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

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