移位/减少与 LALR 语法的冲突

问题描述

我正在编写一个语法,我希望某些函数只在表达式的顶层,而算术运算可以在任何地方。例如。 4 + (5 * 9) 是正确的, FUNC(2 + 4) * 8 - FUNC(4) 也是正确的,但是 FUNC(2 * FUNC(8)) 是错误的原因,嵌套的 FUNC 不是顶级的。这是我的语法:

start : F

F : F + F
F : F - F
F : F * F
F : F / F
F : ( F )
F : FUNC( E )
F : E

E : E + E
E : E - E
E : E * E
E : E / E
E : ( E )
E : num

FUNC : MAX
FUNC : MIN

我正在使用 YACC,并且我在上述语法上遇到了转变/减少冲突。似乎语法没有歧义,但仍然有些不对劲,因为存在冲突。我想知道编写这种语法的正确方法是什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)