1. 算符廣義為終結(jié)符,優(yōu)先分析的基本思想是只規(guī)定終結(jié)符之間的優(yōu)先關(guān)系,也就是只考慮終結(jié)符之間的優(yōu)先關(guān)系,不考慮非終結(jié)符之間的優(yōu)先關(guān)系;
2. 通常在算術(shù)表達(dá)式求值過(guò)程中,運(yùn)算次序是先乘除后加減,這說(shuō)明了乘除運(yùn)算的優(yōu)先級(jí)高于加減運(yùn)算的優(yōu)先級(jí),
3. 乘除為同一優(yōu)先級(jí)但運(yùn)算符在前邊的先做,這稱為左結(jié)合,同樣加減運(yùn)算也是如此,這也說(shuō)明了運(yùn)算的次序只與運(yùn)算符有關(guān),而與運(yùn)算對(duì)象無(wú)關(guān)
4、結(jié)合性,決定運(yùn)算秩序,左結(jié)合,從左向右運(yùn)算,右結(jié)合從右向左運(yùn)算
下面給出一個(gè)表達(dá)式的文法為:
E→E+E|E-E|E*E|E/E|E↑E|(E)|i
本文法是二義性的,由于人為地規(guī)定了算符之間的優(yōu)先級(jí)別和同一個(gè)級(jí)別中的結(jié)合性質(zhì),所以可能構(gòu)造出確定的分析過(guò)程。
我們可以對(duì)此表達(dá)式的文法按公認(rèn)的計(jì)算順序規(guī)定優(yōu)先級(jí)和結(jié)合性如下:
① ↑優(yōu)先級(jí)最高。遵循右結(jié)合,相當(dāng)↑
↑。
例如:2↑3↑2=2↑9=512。(而若為左結(jié)合則2↑3↑2=8↑2=64) 也就是同類運(yùn)算符在歸約時(shí)為從右向左歸約。即 i1↑i2↑i3式先歸約i2↑i3。
② *,/ 優(yōu)先級(jí)其次。服從左結(jié)合,相當(dāng) *
* 、*
/ 、/
/ 、/
* 。
③ +,- 優(yōu)先級(jí)最低。服從左結(jié)合,相當(dāng) +
+、+
- 、-
+ 、-
- 。
④ 對(duì)'(',')'規(guī)定括號(hào)的優(yōu)先性大于括號(hào)外的運(yùn)算符,小于括號(hào)內(nèi)的運(yùn)算符,內(nèi)括號(hào)的優(yōu)先性大于外括號(hào)。對(duì)于句子括號(hào)'#'號(hào)規(guī)定與它相鄰的任何運(yùn)算符的優(yōu)先性都比它大。此外,對(duì)運(yùn)算對(duì)象的終結(jié)符i其優(yōu)先級(jí)最高。
========================
結(jié)合性:
一個(gè)運(yùn)算量?jī)蓚?cè)的運(yùn)算符優(yōu)先級(jí)相同時(shí),則按運(yùn)算符的結(jié)合性所規(guī)定的結(jié)合方向處理。 (運(yùn)算秩序)
例一: a = b = c;
運(yùn)算量b的左右兩側(cè)都為=號(hào),而=具有右結(jié)合性,故應(yīng)該由右向左計(jì)算,即:a = (b = c);
例二: if (5 == 4 == 0) {}
由于關(guān)系運(yùn)算符具有左結(jié)合性,那么先計(jì)算 5 == 4, 結(jié)果為0, 在計(jì)算 0 == 0, 結(jié)果為
真。