转移/减少冲突

时间:2011-04-11 09:02:17

标签: compiler-construction yacc bison

优先级:

%nonassoc low
%nonassoc less_than_or_equal less_than equal_operator
%left op_plus op_minus
%left op_multiply op_devision

规则:

expr : expr op_plus expr
| expr op_minus expr
|expr op_multiply expr
|expr op_devision expr
|'~' expr |open_paran expr close_paran |int_val |float_val ;

bool_expr : expr less_than_or_equal expr
| expr less_than expr
|expr equal_operator expr
|NOT bool_expr
|TRUE
|FALSE ;

expression : expr %prec low
|bool_expr;

我在expr之后得到shift / reduce冲突,任何想法如何解决它?

1 个答案:

答案 0 :(得分:1)

为'〜'添加一个优先级规则来解决问题(例如,如果'〜'用于否定我会让它从右边关联):

%right '~'