我对Bison中的运算符优先级和关联性有疑问。
在每个例子中,我看到的作品都是expr 'op' expr
,例如:http://dinosaur.compilertools.net/bison/bison_8.html
但如果我使用bison %left
和其他关联工具,我会使用语法:
expr| expr binop expr
| expr relop expr
| expr logical_op expr
和
binop: '+'
| '-'
| '*'
| '/'
;
relop: EE
| NE
| LE
| '<'
| GE
| '>'
;
logical_op: AND
| OR
;
会使用关联性和优先级规则吗?
或者我是否需要为每个运营商编写明确的expr 'op' expr
?
我在问,因为当我尝试使用我发布的语法时,我会收到有关冲突的警告。
但是当我亲手编写像expr '+' expr
这样的作品时,我没有收到任何警告。
答案 0 :(得分:7)
要使优先规则起作用,终端本身必须出现在模糊的生产中。因此,您不能将终端分组到非终端,并保留使用优先规则的能力。
答案 1 :(得分:1)
我更喜欢添加语法规则(产品)来考虑运算符优先级。请参阅我的回答here。