2011-04-11 77 views
1

优先级:转变/减少冲突

%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之后如何解决?

回答

1

添加优先规则“〜”来解决该问题(例如,如果“〜”用于否定我会从右边关联):

%right '~' 
+0

其实,左/右/ nonassoc与一元操作无关 - 所有重要的是优先级(它出现在优先级列表中)。您可能希望它最后(最高优先级) – 2011-04-11 22:36:20

+0

此页面可能有帮助:[链接](http://uw714doc.sco.com/en/SDK_tools/_Precedence.html) – Bubbles 2011-04-11 23:22:55