本文法是二义性的,由于人为地规定了算符之间的优先级别和同一个级别中的结合性质,所以可能构造出确定的分析过程。
  我们可以对此表达式的文法按公认的计算顺序规定优先级和结合性如下:
  ① ↑优先级最高。遵循右结合,相当↑↑。
  例如:2↑3↑2=2↑9=512。(而若为左结合则2↑3↑2=8↑2=64) 也就是同类运算符在归约时为从右向左归约。即 i1↑i2↑i3式先归约i2↑i3
  ② *,/ 优先级其次。服从左结合,相当 ** 、*/ 、// 、/* 。
  ③ +,- 优先级最低。服从左结合,相当 ++、+- 、-+ 、-- 。
  ④ 对'(',')'规定括号的优先性大于括号外的运算符,小于括号内的运算符,内括号的优先性大于外括号。对于句子括号'#'号规定与它相邻的任何运算符的优先性都比它大。此外,对运算对象的终结符i其优先级最高。
  综上所述,我们可对表达式运算符的优先关系构造如表6.4。
表 6.4 算符优先关系表
+ - * / ( ) i #

+
-
*
/

(
)
i
#














































.
.














.
.






.


  很显然所给表达式文法是二义性的,但我们人为直观地给出运算符之间的优先关系,由优先关系表6.4可知这种优先关系是唯一的,有了这个优先关系表我们对前面表达式的输入串i1+i2*i3归约过程就能唯一确定了,也就是说在表6.3分析到第6)步时,栈中出现了#E+E,可归约为E,但当前输入符为'*',由于规定 +*,所以应移进。
  本节简单介绍直观算符优先分析法,仅仅是为了易于理解算符优先分析法的概念,下一节将介绍对任意给定的一个文法如何按形式算法的规则计算算符之间的优先关系。