FOR循環(huán)語句的翻譯程序設(shè)計(jì)(簡(jiǎn)單優(yōu)先法、三地址碼)JAVA資料_第1頁
FOR循環(huán)語句的翻譯程序設(shè)計(jì)(簡(jiǎn)單優(yōu)先法、三地址碼)JAVA資料_第2頁
FOR循環(huán)語句的翻譯程序設(shè)計(jì)(簡(jiǎn)單優(yōu)先法、三地址碼)JAVA資料_第3頁
FOR循環(huán)語句的翻譯程序設(shè)計(jì)(簡(jiǎn)單優(yōu)先法、三地址碼)JAVA資料_第4頁
FOR循環(huán)語句的翻譯程序設(shè)計(jì)(簡(jiǎn)單優(yōu)先法、三地址碼)JAVA資料_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、武漢理工大學(xué)編譯原理課內(nèi)實(shí)踐說明書學(xué) 號(hào): 0121210340527課內(nèi)實(shí)踐報(bào)告 課程名稱 編譯原理 題 目FOR循環(huán)語句的翻譯程序設(shè)計(jì)(簡(jiǎn)單優(yōu)先法、輸出三地址碼)學(xué) 院計(jì)算機(jī)科學(xué)與技術(shù)專 業(yè)計(jì)算機(jī)科學(xué)與技術(shù)班 級(jí)1201姓 名李瀟穎指導(dǎo)教師林泓2014年12月9日課內(nèi)實(shí)踐任務(wù)書學(xué)生姓名: 李瀟穎 專業(yè)班級(jí): 計(jì)算機(jī)1201班 指導(dǎo)教師: 林泓 工作單位:計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 題目: FOR循環(huán)語句的翻譯程序設(shè)計(jì)(簡(jiǎn)單優(yōu)先法、輸出三地址碼)初始條件:理論:學(xué)完編譯課程,掌握一種計(jì)算機(jī)高級(jí)語言的使用。實(shí)踐:計(jì)算機(jī)實(shí)驗(yàn)室提供計(jì)算機(jī)及軟件環(huán)境。如果自己有計(jì)算機(jī)可以在其上進(jìn)行設(shè)計(jì)。要求完成的主要任務(wù)

2、: (包括課內(nèi)實(shí)踐工作量及其技術(shù)要求,以及說明書撰寫等具體要求)(1) 寫出符合給定的語法分析方法的文法及屬性文法。(2) 完成題目要求的中間代碼三地址碼的描述。(3) 寫出給定的語法分析方法的思想,完成語法分析和語義分析程序設(shè)計(jì)。(4) 編制好分析程序后,設(shè)計(jì)若干用例,上機(jī)測(cè)試并通過所設(shè)計(jì)的分析程序。(5) 設(shè)計(jì)報(bào)告格式按附件要求書寫。課內(nèi)實(shí)踐報(bào)告書正文的內(nèi)容應(yīng)包括:1 系統(tǒng)描述(問題域描述);2 文法及屬性文法的描述;3 語法分析方法描述及語法分析表設(shè)計(jì);4 按給定的題目給出中間代碼形式的描述及中間代碼序列的結(jié)構(gòu)設(shè)計(jì);5 編譯系統(tǒng)的概要設(shè)計(jì);6 詳細(xì)的算法描述(流程圖或偽代碼);7 軟件的

3、測(cè)試方法和測(cè)試結(jié)果;8 研制報(bào)告(研制過程,本設(shè)計(jì)的評(píng)價(jià)、特點(diǎn)、不足、收獲與體會(huì)等);9 參考文獻(xiàn)(按公開發(fā)表的規(guī)范書寫)。時(shí)間安排:設(shè)計(jì)安排一周:周1、周2:完成系統(tǒng)分析及設(shè)計(jì)。周3、周4:完成程序調(diào)試及測(cè)試。周5:撰寫課內(nèi)實(shí)踐報(bào)告。設(shè)計(jì)驗(yàn)收安排:設(shè)計(jì)周的星期五第1節(jié)課開始到實(shí)驗(yàn)室進(jìn)行上機(jī)驗(yàn)收。設(shè)計(jì)報(bào)告書收取時(shí)間:設(shè)計(jì)周的次周星期一上午10點(diǎn)。指導(dǎo)教師簽名: 年 月 日系主任(或責(zé)任教師)簽名: 目錄1 系統(tǒng)描述(問題域描述)31.1設(shè)計(jì)目的31.2設(shè)計(jì)內(nèi)容描述32.文法的描述33 語法分析方法描述及語法分析表設(shè)計(jì)43.1語法分析方法描述43.2 分析法操作步驟43.3優(yōu)先關(guān)系矩陣54 中間

4、代碼形式的描述65 編譯系統(tǒng)的概要設(shè)計(jì)(主要函數(shù))66 詳細(xì)的算法描述(流程圖)76.1詞法分析過程76.2語法分析過程06.3三地址碼的輸出07 測(cè)試方法和測(cè)試結(jié)果18.心得體會(huì)49.代碼(完整)510.本科生課內(nèi)實(shí)踐成績(jī)?cè)u(píng)定表14FOR循環(huán)語句的翻譯程序設(shè)計(jì)(簡(jiǎn)單優(yōu)先法、輸出三地址碼)1 系統(tǒng)描述(問題域描述)1.1設(shè)計(jì)目的 通過學(xué)習(xí)編譯原理的相關(guān)內(nèi)容,設(shè)計(jì)并編寫FOR循環(huán)語句的翻譯程序,使用簡(jiǎn)單優(yōu)先法,按三地址碼輸出,能夠?qū)崿F(xiàn)詞法分析,語法和語義的分析,加深對(duì)所學(xué)知識(shí)的理解,并且能夠熟練運(yùn)用到實(shí)際當(dāng)中。 1.2設(shè)計(jì)內(nèi)容描述FOR循環(huán)語句的基本格式如下:FOR(表達(dá)式1;表達(dá)式2;表達(dá)式3

5、)賦值語句根據(jù)所給題目要求,設(shè)計(jì)出符合FOR循環(huán)語句的文法及屬性文法的描述,語法分析方法以及三地址碼的輸出方式,羅列出詞法分析和語法分析的流程,根據(jù)語法規(guī)則設(shè)計(jì)輸入輸出方法,簡(jiǎn)單優(yōu)先法中的優(yōu)先關(guān)系表格。設(shè)計(jì)好并且進(jìn)行編譯,設(shè)計(jì)若干輸入輸出用例(包括正確的輸入和錯(cuò)誤的輸入,用來檢查程序的完整性)。 2.文法的描述根據(jù)For語句的特點(diǎn),制定的產(chǎn)生式規(guī)則及由產(chǎn)生式對(duì)應(yīng)的語義動(dòng)作如下:H->f(G;A;B)S; GOTOH->f(G;C;D)S; GOTOG->i1=i2 i1.CODE=i2.CODEA->i1<i2 IFi1.CODE>=i2.CODE GOTO

6、 OVERB->id i.CODE=i.CODE+1C->i1>i2 IFi1.CODE<=i2.CODE GOTO OVERD->ia i.CODE=i.CODE-1S->j=M j.CODE=M.CODEM->E M.CODE=E.CODEE->W E.CODE=W.CODEW->W+U W.CODE=W.CODE+U.CODEW->W-U W.CODE=W.CODE-U.CODEW->U W.CODE=U.CODEU->T U.CODE=T.CODET->T*F T.CODE=T.CODE”F.CODET-&g

7、t;T/F T.CODE=T.CODE/F.CODET->F T.CODE=F.CODEF->(E) F.CODE=(E.CODE)F->j F.CODE=j.CODE(備注:其中d表示-,a表示+) 3 語法分析方法描述及語法分析表設(shè)計(jì)3.1語法分析方法描述本次課內(nèi)實(shí)踐要求使用簡(jiǎn)單優(yōu)先關(guān)系方法。簡(jiǎn)單優(yōu)先分析法的基本思想史對(duì)一個(gè)文法按照一定原則求出該文法所有符號(hào)即包括終結(jié)符和非終結(jié)符之間的優(yōu)先關(guān)系確定歸約過程中的句柄,它的歸約實(shí)際上是一種規(guī)范歸約。一個(gè)文法是簡(jiǎn)單優(yōu)先文法必須滿足以下條件(1) 在文法符號(hào)集V中,任意兩個(gè)符號(hào)之間最多只有一種優(yōu)先關(guān)系成立;(2) 在文法中任意兩個(gè)

8、產(chǎn)生式?jīng)]有相同的右部。三種優(yōu)先關(guān)系及其判定方法如下所示:(1) X=Y 表示X和Y的優(yōu)先關(guān)系相等,當(dāng)且僅當(dāng)G中存在產(chǎn)生式規(guī)則AXY;(2) X<Y表示X的優(yōu)先性比Y的優(yōu)先性小,當(dāng)且僅當(dāng)G中存在產(chǎn)生式規(guī)則 AXB,且BY;(3)X>Y表示X的優(yōu)先性比Y的優(yōu)先性大,當(dāng)且僅當(dāng)G中存在產(chǎn)生式規(guī)則 ABD,且BX和DY;(4)對(duì)任何X,若文法開始符號(hào)SX,則#<X,若SX則X>#。3.2 分析法操作步驟由簡(jiǎn)單優(yōu)先分析法的基本思想設(shè)計(jì)的如下算法,首先要構(gòu)造優(yōu)先關(guān)系矩陣(如3.3所示),并將文法產(chǎn)生式保存,設(shè)置符號(hào)數(shù)組S:(1) 將輸入符號(hào)串a(chǎn)1a2an # 依次逐個(gè)保存符號(hào)數(shù)組S中

9、,直到遇到數(shù)組中第一個(gè)符號(hào)ai的優(yōu)先性>下一個(gè)待輸入符號(hào)aj為止。(2) 數(shù)組當(dāng)前符號(hào)ai為句柄尾,由此向左在數(shù)組中找句柄的頭符號(hào)ak,即找到ak-1<ak為止。(3) 由句柄akai在文法的產(chǎn)生式中查找右部為akai的產(chǎn)生式,若找到則用相應(yīng)左部代替句柄,找不到則為出錯(cuò),這是可斷定輸入串不是該文法的句子。(4) 重復(fù)(1)(2)(3),直到歸約完輸入符號(hào)串,數(shù)組中只剩文法的開始符號(hào)為止。 3.3優(yōu)先關(guān)系矩陣HGABSCDMEWUTFf(;)i=<+>-j+-*/#H>G=A=B=S=C=D=M>E>=W>>=U>>>>

10、;T>>>>=F>>>>>>f=(=<<<<<<<=<)>>=>>>>=<>i>=<<<<<<=<<=+>>=->j>>=>>>>+=<<<<-=<<<<*=<</=<<#<< 空白表示,沒有優(yōu)先級(jí)關(guān)系4 中間代碼形式的描述三地址碼是由下面一般形式的語

11、句構(gòu)成的序列: x:=y op z其中,xyz為名字、常數(shù)或變量;op代表運(yùn)算符。對(duì)于本程序的具體三地址碼輸出,預(yù)計(jì)顯示結(jié)果如下:給定輸入程序for(i=0;i<10;i+)j=b+c;三地址碼輸出為<1> i=0<2> goto <5><3> i+<4> if i<10 goto<5> else goto<7><5> j=b+c<6> goto<3><7> end5 編譯系統(tǒng)的概要設(shè)計(jì)(主要函數(shù)) 主要函數(shù)及對(duì)應(yīng)實(shí)現(xiàn)的功能如下表所示:函數(shù)名稱實(shí)現(xiàn)功能

12、Main()程序入口cifafenxi()進(jìn)行詞法分析bijiao()比較兩個(gè)符號(hào)的優(yōu)先級(jí)別sandizhima()保存產(chǎn)生的三地址碼序列readFileByChars()將文本中的數(shù)據(jù)入讀Isguanjianzi()判斷是否為關(guān)鍵字Isjiefu()判斷是否為界符Isyunsuanfu()判別是否為運(yùn)算符6 詳細(xì)的算法描述(流程圖)6.1詞法分析過程給定輸入程序for(i=0;i<10;i+)j=b+c;詞法分析結(jié)果為14關(guān)鍵字為:1;標(biāo)識(shí)符為:2;常數(shù)為:3;運(yùn)算符為:4;界符為:5<for 1><( 5><i 2><= 4><0

13、 3>< 5><i 2><< 4><10 3>< 5><i 2><+ 4><) 5>< 5><j 2><= 4><b 2><+ 4><c 2>< 5>< 5>6.2語法分析過程6.3三地址碼的輸出給定輸入程序for(i=0;i<10;i+)j=b+c;三地址碼輸出為<1> i=0<2> goto <5><3> i+<4> if

14、i<10 goto<5> else goto<7><5> j=b+c<6> goto<3><7> end7 測(cè)試方法和測(cè)試結(jié)果計(jì)算機(jī)系統(tǒng):Windows 7編譯調(diào)試環(huán)境:Eclipse程序語言:JAVA設(shè)計(jì)測(cè)試用例: (1)data.txt中保存如下程序段for(i=0;i<10;i+)j=b+c; 輸出如下結(jié)果 (2)data.txt中保存如下程序段for(i=5;i>0;i-)j=a*(h+c); 輸出如下結(jié)果8.心得體會(huì) 經(jīng)過這次課內(nèi)實(shí)踐,使我更加扎實(shí)的掌握了有關(guān)編譯原理方面的知識(shí),在編寫程序的過程

15、中遇到了許多問題,但經(jīng)過一遍遍的調(diào)試終于使得程序可以順利運(yùn)行。但是程序中存在著很大的不足:例如在for循環(huán)語句的循環(huán)體中只能有一個(gè)賦值語句。對(duì)for()括號(hào)中的格式也有著嚴(yán)格的輸入要求等等,這些都是以后要改進(jìn)的地方。過而能改,善莫大焉。在課內(nèi)過程中,我們不斷發(fā)現(xiàn)錯(cuò)誤,不斷改正,不斷領(lǐng)悟,不斷獲取。最終的檢測(cè)調(diào)試環(huán)節(jié),本身就是在踐行“過而能改,善莫大焉”的知行觀。這次課內(nèi)實(shí)踐終于順利完成了,在設(shè)計(jì)中遇到了很多問題,最后在老師的指導(dǎo)下,終于游逆而解。在今后社會(huì)的發(fā)展和學(xué)習(xí)實(shí)踐過程中,一定要不懈努力,不能遇到問題就想到要退縮,一定要不厭其煩的發(fā)現(xiàn)問題所在,然后一一進(jìn)行解決,只有這樣,才能成功的做成想

16、做的事,才能在今后的道路上劈荊斬棘,而不是知難而退,那樣永遠(yuǎn)不可能收獲成功,收獲喜悅,也永遠(yuǎn)不可能得到社會(huì)及他人對(duì)你的認(rèn)可!回顧這次課內(nèi)實(shí)踐,是一個(gè)痛并快樂的過程,在構(gòu)造簡(jiǎn)單優(yōu)先文法的矩陣時(shí)我嘗試了5次構(gòu)造,花費(fèi)了許多時(shí)間,但是當(dāng)成功構(gòu)造出來時(shí)那種喜悅也是難以言表的。學(xué)習(xí)是個(gè)不斷提升自我的過程。9.代碼(完整)package lxy;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.Reader;import java.util.*;

17、public class Bianyiyuanlikeshepublic static String sy=new String100;static int js=0;static String m=new String4;public static String sh=new String();public static void main(String args)String s=new String19;s0="f(G;A;B)S;"s1="f(G;C;D)S;"s2="i=i"s3="i<i"s4=&

18、quot;id"s5="i>i"s6="ia"s7="j=M"s8="E"s9="W"s10="W+U"s11="W-U"s12="U"s13="T"s14="T*F"s15="T/F"s16="F"s17="(E)"s18="j"char ss=new char19;ss0='H'ss

19、1='H'ss2='G'ss3='A'ss4='B'ss5='C'ss6='D'ss7='S'ss8='M'ss9='E'ss10='W'ss11='W'ss12='W'ss13='U'ss14='T'ss15='T'ss16='T'ss17='F'ss18='F'cifafenxi();String pp=n

20、ew String();pp=""for(int i=0;i<sh.length();i+)if(!sy.equals("null")pp=pp+syi;String re=pp.split("|r");m0=re1;char tt=m0.toCharArray();m0=""for(int i=1;i<m.length;i+)m0=m0+String.valueOf(tti);m1=re2;m2=re3;char ttt=m2.toCharArray();m2=""for(int

21、i=0;i<m.length-1;i+)m2=m2+String.valueOf(ttti);m3=re4;String n=new String();System.out.println("采用文法:");for(int i=0;i<s.length;i+)System.out.println(ssi+"->"+si);/輸出文法System.out.println("語法分析結(jié)果");String str=new String();str=sh+"#"char r=str.toCharArra

22、y();char ru=new charr.length;int l=r.length;for(int i=0;i<r.length;i+)rui=rl-1;l-;char fu=new charru.length ;fu0='#'int coutru=ru.length-1;int coutfu=0;int coutbi=0;char bi=new charru.length;while(fu1!='H')/System.out.println(fucoutfu+" "+rucoutru);int b=bijiao(fucoutfu,

23、rucoutru);if (b=-1)System.out.println("wrong");System.out.println(coutfu+"wrong"+coutru);return ;if(b=0|b=1)if(b=0) coutfu+;/System.out.println(coutfu);fucoutfu=rucoutru;for(int i=0;i<coutfu;i+)System.out.print(fui);System.out.print(" ");for(int i=coutru;i>=0;i-)S

24、ystem.out.print(rui);System.out.println();System.out.println(rucoutru+" 移入");bicoutbi='0'coutbi+;coutru-;if(b=1)coutfu+;fucoutfu=rucoutru;for(int i=0;i<coutfu;i+)System.out.print(fui);System.out.print(" ");for(int i=coutru;i>=0;i-)System.out.print(rui);System.out.pr

25、intln();System.out.println(rucoutru+" 移入");bicoutbi='1'coutbi+;coutru-;if(b=2)int m=0;for (int i=coutbi-1;i>=0;i-)if(bii='1')break;else m+;for(int j=0;j<=coutfu;j+)System.out.print(fuj);System.out.print(" ");for(int j=coutru;j>=0;j-)System.out.print(ruj);

26、System.out.println();coutbi=coutbi-m;String str2=new String();String str3=new String();for(int i=0;i<=m;i+)str3=String.valueOf(fucoutfu)+str3;if(fucoutfu!=''&&fucoutfu!='f'&&fucoutfu!='>'&&fucoutfu!='<'&&fucoutfu!='B'&a

27、mp;&fucoutfu!='C'&&fucoutfu!='D'&&fucoutfu!='H'&&fucoutfu!='G'&&fucoutfu!='A'&&fucoutfu!='i'&&fucoutfu!='S'&&fucoutfu!='M'&&fucoutfu!='W'&&fucoutfu!=

28、9;U'&&fucoutfu!='T'&&fucoutfu!='F'&&fucoutfu!='='&&fucoutfu!='+'&&fucoutfu!='-'&&fucoutfu!='*'&&fucoutfu!='/'&&fucoutfu!='('&&fucoutfu!=')'&&fuc

29、outfu!='E'&&fucoutfu!='#'&&fucoutfu!='j'&&fucoutfu!='#'&&fucoutfu!='j'&&fucoutfu!='a'&&fucoutfu!='d'&&fucoutfu!=''&&fucoutfu!='')str2="i"+str2;elsestr2=St

30、ring.valueOf(fucoutfu)+str2;coutfu-;for(int i=0;i<s.length;i+)if(str2.equals(si)fu+coutfu=ssi;System.out.println(ssi+"->"+si+" 規(guī)約");n=n+Sandizhima(si);int t=bijiao(fucoutfu-1,fucoutfu);if(t=0)bicoutbi-1='0'else if(t=1)bicoutbi-1='1'else bicoutbi-1='2'

31、;if(fu1='H')System.out.println("成功!");System.out.println("生成的三地址為:");String m=n.split(",");for(int k=0;k<m.length;k+)System.out.println(mk);public static int bijiao(char f,char r)int rr=0,ff=0;char z='H','G','A','B','S'

32、,'C','D','M','E','W','U','T','F','f','(','',')','','','i','=','<','d','>','a','j','+','-','*','/&#

33、39;,'#'int fc=0;int rc=0;for(int i=0;i<z.length;i+)if(f!=zi)fc+;if(r!=zi)rc+;if(fc=16)f='i'if(rc=16)r='i'for (int i=0;i<z.length;i+)if(r=zi)rr=i;if(f=zi)ff=i;int a=-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,-1,-1,-1,-1,-1

34、,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1

35、,-1,-1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,-1,-1,-1,-1,-1,

36、-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,2,-1,-1,-1,-

37、1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,2,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,2,2,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,-1,-1,-1,-1,-1,-1,0,1,1,1,1,-1

38、,1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,0,0,-1,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,2,0,-1,-1,-1,-1,-1,-1,-1,-1,2,2,2,2,-1,-1,-1,-1,-1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1

39、,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,-1,-1,-1,-1,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,1,1,1,1,1,-1,1,-1,-1,-1,-1,0,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,

40、-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,

41、2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,2,-1,-1,-1,0,-1,-1,-1,-1,-1,2,2,2,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,1,1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,1,1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1,

42、-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,;/-1表示沒關(guān)系,0表示等于,2表示大于,1

43、表示小于return affrr;public static String Sandizhima(String p)char a;int j=0;String s=new String19;s0="f(G;A;B)S;"s1="f(G;C;D)S;"s2="i=i"s3="i<i"s4="id"s5="i>i"s6="ia"s7="j=M"s8="E"s9="W"s10="W

44、+U"s11="W-U"s12="U"s13="T"s14="T*F"s15="T/F"s16="F"s17="(E)"s18="j"for(int i=0;i<19;i+)if(p.equals(si)j=i;char ss=new char19;ss0='H'ss1='H'ss2='G'ss3='A'ss4='B'ss5='C&#

45、39;ss6='D'ss7='S'ss8='M'ss9='E'ss10='W'ss11='W'ss12='W'ss13='U'ss14='T'ss15='T'ss16='T'ss17='F'ss18='F'if(j=7)String f=new String();f=",<5> "+m3+",<6> goto<3>"

46、;+",<7> end"return f;if(j=4)String f=new String();f=",<3> "+m2+",<4> if "+m1+" goto<5> else goto<7>"return f;if(j=6)String f=new String();f=",<3> "+m2+",<4> if "+m1+" goto<5> else goto<

47、;7>"return f;if(j=2)String f=new String();f="<1> "+m0+",<2> "+"goto <5>"return f;return""public static void sansidzhima(String m)char b=m.toCharArray();String a=new Stringb.length;for(int i=0;i<a.length;i+)ai=String.valueOf(bi);Str

48、ing f="+","-","*","/","="int c2=1;int bc=0;int t=0;for(int i=0;i<a.length;i+)int cc=0;for(int j=0;j<f.length;j+)if(ai.equals(fj)System.out.print("("+String.valueOf(c2)+")"+"("+ai+",");ai=null;for(int k=i-

49、1;k>=0;k-)if(ak!=null&&cc<2)if(cc=0)System.out.print(ak+",");if(cc=1)System.out.print(ak);cc+;ak=null;System.out.print(")");System.out.println();ai="("+String.valueOf(c2)+")"c2+;break;public static int yunsuanfu(char a)boolean b;if(a='i')

50、return 0;char p='+','-','*','/',')','('for(int i=0;i<p.length;i+)if(a=pi)return 2;return 0;public static void cifafenxi()System.out.println("關(guān)鍵字為:1;" );System.out.println("標(biāo)識(shí)符為:2;" );System.out.println("常數(shù)為:3;" );System

51、.out.println("運(yùn)算符為:4;");System.out.println("界符為:5");System.out.println("詞法分析結(jié)果");readFileByChars("c:/data.txt");char x=sh.toCharArray();for(int i=13;i<sh.length();i+)if(xi='i')xi='j'sh=""for(int i=0;i<x.length;i+)sh=sh+xi;public

52、 static void readFileByChars(String fileName) Reader reader = null;try char tempchars = new char3000;int charread = 0;String str1=new String();String str3=new String();int c=0;reader = new InputStreamReader(new FileInputStream(fileName);/ 讀入多個(gè)字符到字符數(shù)組中,charread為一次讀取字符數(shù)while (charread = reader.read(tempchars) != -1) / 屏蔽掉r不顯示if (charread = tempchars.length)&& (tempcharstempchars.length - 1 != 'r') System.out.print(tempchars); else for (int i = 0; i < charread; i+) i

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論