資源描述:
《基于算符優(yōu)先分析方法01》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、基于算符優(yōu)先分析方法的表達式語法分析器年級:2007級班級:計算機科學與技術(shù)四班姓名:歐垚學號:20074042154指導(dǎo)老師:段明秀年月日目錄摘要……………………………………………………………2關(guān)鍵字…………………………………………………………2構(gòu)造算符優(yōu)先表………………………………………………3構(gòu)造優(yōu)先分析器………………………………………………6分析歸約流程圖………………………………………………7運行……………………………………………………………8測試……………………………………………………………9參考文獻……………………………………………………12附加代碼………………………………
2、……………………13摘要:算符優(yōu)先分析法是Floyd在1963年首先提出來的,是一種古典而又實用的方法,用這種方法在分析程序語言中的各類表達式時尤為有效。不少編譯程序中都使用這種方法分析表達式。算符優(yōu)先分析法就是仿照算術(shù)表達式的運算過程而提出的一種自底向上的語法分析方法。其基本思想是:首先規(guī)定算符,這里是文法的終極符之間的優(yōu)先關(guān)系,然后根據(jù)這種優(yōu)先關(guān)系,通過比較相鄰算符的優(yōu)先次序來確定句型中的“句柄”,然后進行歸約。算符優(yōu)先分析法的關(guān)鍵:算符優(yōu)先分析法的關(guān)鍵就是尋找當前句型中的最左素短語,并歸約它。關(guān)鍵字:小于、大于、等于、句柄、歸約、一、對表達式文法G[E’]構(gòu)造算符優(yōu)先關(guān)系表。計算
3、算符優(yōu)先只針對于終結(jié)符,終結(jié)符之間的優(yōu)先關(guān)系有三種,在計算優(yōu)先關(guān)系之前我們先定義兩個集合,對于任意兩個終結(jié)符(a,b)FIRSTVT(B)={b
4、B=>b…或B=>Cb…},其中…表示V*中的符號串。LASTVT(B)={a
5、B=>…a或B=>…aC}三種優(yōu)先關(guān)系:(1)等于關(guān)系:可直接查看產(chǎn)生式的右部,對如下形式的產(chǎn)生式A->…ab…A->…aBb…則有a=b成立。(2)小于關(guān)系:求出每個非終結(jié)符B的FIRSTVT(B),觀察如下形式的產(chǎn)生式A->…aB…對每一b∈FIRSTVT(B)有a≮b成立(3)大于關(guān)系:計算每個非終結(jié)符B的LASTVT(B),觀察如下形式的產(chǎn)生式A->…Bb
6、…對每一a∈LASTVT(B)有a≯b成立表達式文法G[E’]:E’→#E#E→E+Q
7、QQ→Q-T
8、TT→T*F
9、FF→F/M|MM→M^P|PP→(E)|i根據(jù)上面的規(guī)則手工構(gòu)造上述文法的算符優(yōu)先表如下:+-*/^()i#+≯≮≮≮≮≮≯≮≯-≯≯≮≮≮≮≯≮≯*≯≯≯≮≮≮≯≮≯/≯≯≯≯≮≮≯≮≯^≯≯≯≯≯≮≯≮≯(≮≮≮≮≮≮=≮)≯≯≯≯≯≯≯i≯≯≯≯≯≯≯#≮≮≮≮≮=packagecom.op.core;/********************************************************************************簡
10、單表達式文法G[E’]構(gòu)造算符優(yōu)先關(guān)系表。*E’→#E#*E→E+Q
11、Q*Q→Q-T
12、T*T→T*F
13、F*F→F/M|M*M→M^P|P*P→(E)|i*@author*/publicclassPriorityTable{privatestaticchartable[][]={//+*/i()#^{'>','<','<','<','<','>','>','<'},//+{'>','>','>','<','<','>','>','<'},//*{'>','>','>','<','<','>','>','<'},///{'>','>','>','$','$','>','>','>'},//
14、i{'<','<','<','<','<','=','$','<'},//({'>','>','>','$','$','>','>','>'},//){'<','<','<','<','<','$','=','<'},//#{'>','>','>','<','<','>','>','<'},//^};//算符優(yōu)先表/****************************************************************************判斷一個符號在算符優(yōu)先表中位置**@paramc*@return*/privatestaticintjudgePriori
15、ty(charc){intpriority=0;switch(c){case'+':priority=0;break;case'*':priority=1;break;case'/':priority=2;break;case'i':priority=3;break;case'(':priority=4;break;case')':priority=5;break;case'#':priority=6;break;case'^':priorit