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