九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

編譯原理的課程設(shè)計

上傳人:仙*** 文檔編號:27971381 上傳時間:2021-08-22 格式:DOC 頁數(shù):48 大?。?18KB
收藏 版權(quán)申訴 舉報 下載
編譯原理的課程設(shè)計_第1頁
第1頁 / 共48頁
編譯原理的課程設(shè)計_第2頁
第2頁 / 共48頁
編譯原理的課程設(shè)計_第3頁
第3頁 / 共48頁

下載文檔到電腦,查找使用更方便

15 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《編譯原理的課程設(shè)計》由會員分享,可在線閱讀,更多相關(guān)《編譯原理的課程設(shè)計(48頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、二、課程設(shè)計正文 1. 編寫一個L-語言的詞法分析器,從左到右逐個字符地對L-語言的源程序進(jìn)行掃描,產(chǎn)生一個個單詞符號的機(jī)內(nèi)表示。程序結(jié)構(gòu)如圖L-1所示: scanner IsAlpha IsNumber IsChar Isother OutP

2、ut Error 圖 L-1 1.1 Sanner() 1. 功能:完成初始化,并循環(huán)調(diào)用子模塊,完成單詞的識別。 2. 算法描述如下 Void Scanner() { 調(diào)用ScannerInit()進(jìn)行初始化; 讀入源程序的第一個字符; while (字符!=EOF) { if (字符= =字母)IsAlPha(); else if ( 字符= = 數(shù)字) IsNumber(); else if (字符= =‘’’)IsC

3、har(); else IsOther(); } 打印結(jié)束信息; 結(jié)束操作; } 1.2 IsAlPha() 1.功能:識別保留字和標(biāo)識符。 2.算法描述如下: Void IsAlPha() {while(字符為字母或數(shù)字或’_’) { 記錄當(dāng)前字符; 讀取下一字符; } 判斷當(dāng)前字符串是否為保留字,并設(shè)置標(biāo)志位h; 調(diào)用OutPut()函數(shù)輸出保留字或標(biāo)識符; } 1.3 IsNumber() 1.功能:識別整數(shù)和實數(shù)。 2.算法描述如下:

4、 void IsNumber() { int flag=0; while (字符為數(shù)字) { 記錄當(dāng)前字符; 讀取下一字符; If(字符為’.’號) { 記錄當(dāng)前字符; flag=1; 讀下一字符; 跳出循環(huán); } } 記單詞編碼為整數(shù)的編碼(當(dāng)前Token為整數(shù)); If(flag=1)

5、 { if (當(dāng)前字符為數(shù)字) { 記錄當(dāng)前數(shù)字; while(當(dāng)前字符為數(shù)字) { 記錄字符; 讀取下一字符; } 記單詞編碼為實數(shù)的編碼(當(dāng)前Token為實數(shù)); } else Error(2); if (當(dāng)前字符為’.’)刪除余下數(shù)字; } if (當(dāng)前字符為字母) 舍去后面的部分; OutPut(); } 1.4 IsChar() 1.功能:識別字符串。 2.算法描述: void IsChar() { for (;;;) { 讀取下一字符;

6、 現(xiàn)行Token為字符串; If(當(dāng)前字符不是‘.’號) 記錄字符; Else break; } OutPut(); 讀下一字符; } 1.5 IsOther() 1.功能:識別其他單詞。 2.算法描述如下: void IsOther() { switch(當(dāng)前字符) {對于不同字符做出不同處理,主要有: 1、符號內(nèi)容的記??; 2、查出機(jī)內(nèi)碼; 3、調(diào)用OutPut()輸出至Token()文件;

7、 4、讀取下一字符; 5、對于錯誤符號將其刪除,并報錯;} } 1.6 ScannerInit() 1.功能:進(jìn)行初始化,主要包括: 1、建立單詞編碼表、token表、符號表,并將它們清空。 2、打開單詞編碼文件,并將單詞編碼讀到編碼表中。 1.7 OutPut() 1.功能:輸出識別出的單詞,包括: 2.若單詞為標(biāo)識符或常數(shù)再查,填符號表。 1.8 Error() 1.功能:判斷錯誤原因。 2.在由詞法分析程序?qū)語言源程序分析產(chǎn)生的token,符號表文件的基礎(chǔ)上,從完成語法語義分析,并產(chǎn)生相應(yīng)的中間代碼-四元式序

8、列。 2.1 paser() 1.功能:主模塊,完成初始化,并調(diào)用復(fù)合語句分析模塊和說明語句分析模塊,完成分析任務(wù)。 2.算法描述如下: void paser() { 初始化; 從Token文件讀取第一個單詞; if (單詞= =program) { 讀取下一單詞; if (單詞= =標(biāo)識符) { 讀取下一單詞; if(單詞為‘;’) { 行數(shù)加一;

9、讀取下一單詞; if (單詞為var) declear( ); if (單詞為begin) { S_Begin(); if (code 不是等于號) Error(49); } else 出錯處理; } else 出錯處理; } else出錯處理; } else 出錯處理; 2.2 S_Begin() 1.功能:完成復(fù)合語句的分析。 2.算法描述 S_

10、Begin() { if (當(dāng)前字符為begin) { 讀取下一字符; 調(diào)用L_Analize(); if(當(dāng)前字符為end) 結(jié)束; else 非正常結(jié)束,返回0; } 讀取下一字符; 返回; } 2.3 L_Analize() 1.功能:完成語句序列分析。 2.算法描述 L_Analize() { int rtn; switch(當(dāng)前字符) { case IF:調(diào)用S_IF()函數(shù);break;

11、 case BEGIN :調(diào)用S_Begin()函數(shù);braek; case 標(biāo)識符:調(diào)用 S_Let()函數(shù);break; case WHILE:調(diào)用 S_While();break; } if (當(dāng)前字符為‘:’) { 行數(shù)加一; 讀取下一字符; 遞歸調(diào)用L_Analize() } else return rtn; } 2.4 S_Let() 1.功能:完成賦值語句的分析。 2.算法分析 S_Let(int a) { if (當(dāng)前字符為標(biāo)識符) { if

12、(需要記錄變量的地址) 記錄賦值變量的地址; 讀取下一個單詞; if(當(dāng)前單詞為賦值號) { 調(diào)用表達(dá)式分析函數(shù)L_Analize(); if(表達(dá)式正確) 生成賦值句四元式; } } else 賦值句出錯; return四元式序號; } 2.5 S_IF() 1.功能:完成條件語句的分析。 2.算法描述: Int S_IF() { int a; int rtn=0; 定義一個真出口True_ad

13、dress和一個假出口Flase_address; if(當(dāng)前單詞為if) { 布爾表達(dá)式初始化; 調(diào)用布爾表達(dá)式分析函數(shù)B_Analize(); rtn=布爾表達(dá)式的四元式首址; 產(chǎn)生無條件跳轉(zhuǎn)四元式; if (當(dāng)前單詞為then) { 讀取下一單詞; switch(當(dāng)前單詞) { case IF:調(diào)用S_IF()函數(shù);break; case BEGIN :調(diào)用S_Begin()函

14、數(shù);braek; case 標(biāo)識符:調(diào)用 S_Let()函數(shù);break; case WHILE:調(diào)用 S_While();break; } BackPatch(); if(當(dāng)前單詞為else) { 讀取下一單詞; switch(當(dāng)前單詞) { case IF:調(diào)用S_IF()函數(shù);break; case BEGIN :調(diào)用S_Begin()函數(shù);braek;

15、 case 標(biāo)識符:調(diào)用 S_Let()函數(shù);break; case WHILE:調(diào)用 S_While();break; } BackPatch(); } else rtn; } else 報錯;(缺少then) } rtn; } 2.6 S_While() 1.功能:完成while循環(huán)語句的分析。 2.算法描述; int S_While() { int rtn=0;boor_value,True_address,False_address; if (當(dāng)

16、前單詞為while) { rtn=布爾表達(dá)式分析函數(shù)B_Analize(); boor_value=布爾表達(dá)式值地址; 產(chǎn)生跳轉(zhuǎn)四元式; if(當(dāng)前單詞為do) { 讀取下一單詞; switch(當(dāng)前單詞) { case IF:調(diào)用S_IF()函數(shù);break; case BEGIN :調(diào)用S_Begin()函數(shù);braek; case 標(biāo)識符:調(diào)用 S_Let()函數(shù);bre

17、ak; case WHILE:調(diào)用 S_While();break; } BackPatch(); BackPatch(); } else 出錯,缺少do; } return rtn; } 2.7 gen() 該函數(shù)形成一個四元式,并將其輸出至四元式文件。 2.8 E_Analize() 1.該函數(shù)是算術(shù)分析表達(dá)式的主模塊,它調(diào)用算術(shù)表達(dá)式的子模塊,采用遞歸下降分析法完成算術(shù)表達(dá)式的分析。 2.算術(shù)表達(dá)式的各個子模塊: a.E_Init()將算術(shù)表達(dá)式讀入分析棧; b.

18、int E_AddSub()完成E->TE1|T的分析; c.int E1_AddSub(int a) 完成E1->+TE1|-TE1|^ d.T_MulDiv() 完成T->FT1|F的分析; e.T1_MulDiv(int a) 完成T1->*FT1|/FT1|^; f.F_Number() 完成F->i|(E)的分析; 2.9 B_Analize() 1.布爾表達(dá)式分析的主模塊,調(diào)用其他布爾表達(dá)式的子模塊,采用遞歸下降分析法完成布爾表達(dá)式的分析。并返回該布爾表達(dá)式的首個四元式地址。 a.B_OR()完成B->L

19、B|L的分析; b.B1_OR(int a) 完成B1->orLB1|^的分析; c.L_AND() 完成L->ML1|M的分析; d.L1_AND()完成L1->andM1|^的分析; e.M_NOT()完成M->notM|K的分析; f.K_END()完成K->i|false|true|(B)的分析; g.K_CMP()完成K->iSi,S-><>|=|<=|>=|>|<的分析。 三、課程設(shè)計總結(jié) 1、 實驗中遇到的問題 詞法分析器程序中要讀入一個單詞編碼文件,但是文件的格式在編寫的時候和程序有點(diǎn)

20、差異,因而導(dǎo)致輸出結(jié)果再三的錯誤。語法/語義分析器中,在修改符號表時,出現(xiàn)錯誤,最終沒有的到正確結(jié)果。 2、 對實驗原理有更深的理解 通過該課程設(shè)計,掌握了什么是編譯程序,編譯程序工作的基本過程及其各階段的基本任務(wù),熟悉了編譯程序總流程框圖,了解了編譯程序的生成過程,構(gòu)造工具及其相關(guān)的技術(shù)對課本上的知識有了更深的理解,課本上的知識師機(jī)械的,表面的.通過把該算法的內(nèi)容,算法的執(zhí)行順序在計算機(jī)上實現(xiàn),把原來以為很深奧的書本知識變的更為簡單,對實驗原理有更深的理解。 3、 對該理論在實踐中的應(yīng)用有深刻的理解 通過把該算法的內(nèi)容,算法的執(zhí)行順序在計算機(jī)上實現(xiàn),知道和理解了該理論在計算機(jī)中是

21、怎樣執(zhí)行的,對該理論在實踐中的應(yīng)用有深刻的理解。 四、參考文獻(xiàn) [1] 賀訊. 編譯方法學(xué)習(xí)指導(dǎo)與實踐.北京:機(jī)械工業(yè)出版社, 第一版. 2004年8月。 五、附錄 1.單詞編碼文件ni.txt and 1 or 11 begin 2 program 12 bool 3 real 13 + 23 <= 33 do 4 then 14 - 24 < 34 else 5 true 15 * 25 <> 35 end 6 var 16 / 26 > 36 false 7 while 17 . 27

22、 >= 37 if 8 標(biāo)識符 18 , 28 integer 9 整數(shù) 19 : 29 not 10 實數(shù) 20 ; 30 ( 21 := 31 ) 22 = 32 char 38 2.測試代碼文件11.txt program abc; var a:real; begin if a<22.2 then x:=c+d; end 3.詞法分析完整源代碼 #include #include #include #define LENG

23、TH 61 #define N 100 /*********************************************************************/ typedef struct token { int label; char name[30]; int code; int addr; }token; typedef struct KeyWord { char name[30]; int code; }KeyWord; typedef struct symble { int number; int

24、type; char name[30]; }symble; /*********************************************************************/ char ch; int var_count; int error_count; int label_count; int code_count; int addr_count; int LineOfPro; char filename[30]; FILE*KeyFin; FILE*SourceFin; FILE*TokenFout; FILE*SymbleFo

25、ut; KeyWord key[LENGTH]; token CurrentToken; symble CurrentSimble; symble SymbleList[N]; /*********************************************************************/ void Scanner(); void ScannerInit(); void IsAlpha(); void IsNumber(); void IsAnotation(); void IsChar(); void IsOther(); void O

26、utPut(); void Error(int a); int WordHave(); int strcmp(char*s,char*t) { for(;*s==*t;s++,t++) if(*s==0)return 0; return 1; } /*********************************************************************/ int main() { int i=0,j=0; code_count=0; LineOfPro=0; var_count=0; addr_count=1

27、; label_count=1; for(i=0;i

28、ount=0; ScannerInit(); printf(" *************************************** "); printf(" *L語言詞法分析器); printf(" *************************************** "); printf("輸入原文件名:"); for(;;) { scanf("%c",&filename[i]); if(filename[i]==10)

29、 break; i++; } filename[i]=\0; if((SourceFin=fopen(filename,"rt"))==NULL) { printf("無法打開文件 %s.\n",filename); exit(1); } if((TokenFout=fopen("token.txt","wt+"))==NULL) { printf("無法打開文件 symble.txt\n"); exit(1); } if((SymbleFout=fopen("symble.txt","wt+"))==NULL) {

30、printf("無法打開文件 symble.txt\n"); exit(1); } ch=fgetc(SourceFin); while(ch!=EOF) { for(i=0;i<30;i++)CurrentToken.name[i]=\0; if((ch>47)&&(ch<58))IsNumber(); else { if(((ch>64)&&(ch<90))||((ch>96)&&(ch<123))||(ch==_))IsAlpha(); else{ if(ch==\)IsChar();

31、else IsOther(); } } } fclose(SourceFin); fclose(TokenFout); fclose(SymbleFout); printf("分析完畢/\n"); } /********************************初始化*******************************/ void ScannerInit() { int i=1; int k=0; if((KeyFin=fopen("ni.txt","rt"))==NULL) { printf("ca

32、nnot open ni.txt\n"); exit(1); } for(i=0;i<60;i++) for(k=0;k<30;k++)key[i].name[k]=\0; for(i=0;i<60;i++) { /*讀入編碼表*/ fscanf(KeyFin,"%s%d",key[i].name,&key[i].code); } fclose(KeyFin); } /*****************************數(shù)字處理********************

33、************/ void IsNumber() { int k=0; int flag=0; char ch1; while(((ch>47)&&(ch<58))) { CurrentToken.name[k++]=ch; ch=fgetc(SourceFin); if(ch==.) { flag=1; break; } } CurrentToken.code=19; CurrentToken.addr=addr_count++; CurrentToken.label=label_count++;

34、 if(flag) { ch1=fgetc(SourceFin); if((ch1>47)&&(ch<58))CurrentToken.name[k++]=ch; else Error(2); ch=ch1; while((ch>47)&&(ch<58)) { CurrentToken.name[k++]=ch; ch=fgetc(SourceFin); } CurrentToken.code=20; if(ch==.) { Error(2); ch=fgetc(SourceFin);

35、while((ch>47)&&(ch<58))ch=fgetc(SourceFin); } } if(((ch>64)&&(ch<90))||((ch>96)&&(ch<123))) { Error(2); while(((ch>64)&&(ch<90))||((ch>96)&&(ch<123))) { ch=fgetc(SourceFin); while((ch>47)&&(ch<58))ch=fgetc(SourceFin); } } OutPut(); } /*************************字

36、母處理************************************/ void IsAlpha() { int i,h; h=0; i=0; while(((ch>64)&&(ch<90))||((ch>96)&&(ch<123))||(ch==_)) { CurrentToken.name[i++]=ch; ch=fgetc(SourceFin); } for(i=1;i

37、 } if(!h) { CurrentToken.code=key[i].code; CurrentToken.addr=-1; } else { CurrentToken.code=18; CurrentToken.addr=addr_count++; } CurrentToken.label=label_count++; OutPut(); } /****************************字符串處理*******************************/ void IsChar() { in

38、t i=0; for(;;) { ch=fgetc(SourceFin); CurrentToken.code=20; if(ch!=\) CurrentToken.name[i++]=ch; else break; } CurrentToken.addr=addr_count++; CurrentToken.label=label_count++; OutPut(); ch=fgetc(SourceFin); } /*******************************其他情況**********************

39、********/ void IsOther() { char ch1; int i; for(i=0;i<30;i++)CurrentToken.name[i]=\0; switch(ch) { case(: CurrentToken.name[0]=(; CurrentToken.code=21; CurrentToken.addr=-1; CurrentToken.label=label_count++; OutPut(); ch=fgetc(SourceFin); break; case): Current

40、Token.name[0]=); CurrentToken.code=22; CurrentToken.addr=-1; CurrentToken.label=label_count++; OutPut(); ch=fgetc(SourceFin); break; case*: CurrentToken.name[0]=*; CurrentToken.code=25; CurrentToken.addr=-1; CurrentToken.label=label_count++; OutPut(); ch=fgetc(S

41、ourceFin); break; case+: CurrentToken.name[0]=+; CurrentToken.code=23; CurrentToken.addr=-1; CurrentToken.label=label_count++; OutPut(); ch=fgetc(SourceFin); break; case,: CurrentToken.name[0]=1; CurrentToken.code=28; CurrentToken.addr=-1; CurrentToken.labe

42、l=label_count++; OutPut(); ch=fgetc(SourceFin); break; case-: CurrentToken.name[0]=-; CurrentToken.code=24; CurrentToken.addr=-1; CurrentToken.label=label_count++; OutPut(); ch=fgetc(SourceFin); break; case.: CurrentToken.name[0]=.; CurrentToken.code=27; Cu

43、rrentToken.addr=-1; CurrentToken.label=label_count++; OutPut(); ch=fgetc(SourceFin); break; case:: ch1=ch; ch=fgetc(SourceFin); if(ch!==) { CurrentToken.name[0]=:; CurrentToken.code=29; CurrentToken.addr=-1; CurrentToken.label=label_count++;

44、 OutPut(); } else{ CurrentToken.name[0]=:; CurrentToken.name[1]==; CurrentToken.code=31; CurrentToken.addr=-1; CurrentToken.label=label_count++; OutPut(); ch=fgetc(SourceFin); } break; case;: CurrentToken.name[0]=;; CurrentToken.code=3

45、0; CurrentToken.addr=-1; CurrentToken.label=label_count++; OutPut(); ch=fgetc(SourceFin); break; case<:ch1=fgetc(SourceFin); if(ch1===) { CurrentToken.name[0]=<; CurrentToken.name[1]==; CurrentToken.code=33; CurrentToken.addr=-1; CurrentToken.la

46、bel=label_count++; OutPut(); ch1=fgetc(SourceFin); } else { if(ch1==>) { CurrentToken.name[0]=<; CurrentToken.name[1]=>; CurrentToken.code=35; CurrentToken.addr=-1; CurrentToken.label=label_count++; OutPut();

47、 ch1=fgetc(SourceFin); } else { CurrentToken.name[0]=<; CurrentToken.code=34; CurrentToken.addr=-1; CurrentToken.label=label_count++; OutPut(); } } ch=ch1; break; case=: CurrentToken.name[0]==; CurrentToken.code

48、=32; CurrentToken.addr=-1; CurrentToken.label=label_count++; OutPut(); ch=fgetc(SourceFin); break; case>:ch1=fgetc(SourceFin); if(ch1===) { CurrentToken.name[0]=>; CurrentToken.name[1]==; CurrentToken.code=37; CurrentToken.addr=-1; CurrentToken.

49、label=label_count++; OutPut(); ch1=fgetc(SourceFin); } else { CurrentToken.name[0]=>; CurrentToken.code=36; CurrentToken.addr=-1; CurrentToken.label=label_count++; OutPut(); } ch=ch1; break; case 10: LineOfPro++;

50、 ch=fgetc(SourceFin); break; case 13: LineOfPro++; ch=fgetc(SourceFin); break; case : ch=fgetc(SourceFin); break; case EOF: Error(1); ch=fgetc(SourceFin); break; } } /****************************輸出模塊*******************************/ void OutPu

51、t() { int flag,i=0; int k; /*查填符號模塊*/ if((CurrentToken.code==18)||(CurrentToken.code==19)||(CurrentToken.code==20)) { CurrentSimble.number=CurrentToken.addr; CurrentSimble.type=CurrentToken.code; strcpy(CurrentSimble.name,CurrentToken.name); flag=WordHave(); if(((CurrentTok

52、en.code==18)&&(flag==1))||(CurrentToken.code==20)||(CurrentToken.code==19)) fprintf(SymbleFout,"%3d %3d %s\n",CurrentSimble.number,CurrentSimble.type,CurrentSimble.name); } /*輸出到token表*/ for(;;) if(CurrentToken.name[i++]==\0) break; fprintf(TokenFout,"%3d %s",CurrentToken.label,

53、CurrentToken.name); printf("%3d %s",CurrentToken.label,CurrentToken.name); for(k=20-i;k>0;k--) { fprintf(TokenFout," "); printf(" "); } fprintf(TokenFout,"%3d %3d\n",CurrentToken.code,CurrentToken.addr); printf("%3d %3d\n",CurrentToken.code,CurrentToken.addr); }

54、 void Error(int a) { error_count++; switch(a) { case 1: printf("error %2d 非法字符于 %3d 行.\n", error_count,LineOfPro+1);break; case 2: printf("error %2d 實常數(shù)出過于 %3d 行.\n", error_count,LineOfPro+1);break; case 3: printf("error %2d 沒有匹配的注釋符 */ \n",error_count);break; case 4: print

55、f("error %2d 非正常結(jié)束!\n",error_count);break; default: break; } return; } int WordHave() { int flag,i=0; for(i=0;i

56、t[var_count].number=CurrentToken.addr; SymbleList[var_count].type=CurrentToken.code; strcpy(SymbleList[var_count].name,CurrentToken.name); var_count++; return 1; } 4.詞法分析的結(jié)果 5.詞法分析產(chǎn)生的Token文件 6.詞法分析產(chǎn)生的符號表文件 7.語法/語義分析器的完整代碼 #include #include #incl

57、ude typedef struct stack { char name[20]; int cod; int addr; }stack; typedef struct equ { int op; int op1; int op2; int result; }equ; typedef struct var { char name[20]; int addr; int type; int value; }var; #define EXP_LEN 100 #define EQU_LEN 1024 #define

58、ONE 50001 #define ZERO 50000 #define E_EXPR 7 #define IF 8 #define WHILE 9 #define FOR 10 #define B_EXP 12 FILE *TokenFin; FILE *SymbleFin; FILE *EquFout; int code ; int address; int LineOfPro; int LineOfEqu; stack var_list[EXP_LEN]; stack expr[EXP_LEN]; equ Equ

59、[EQU_LEN]; var TempList[EQU_LEN]; char ID[20]; int var_count; int len_count; int pos; int now_addr; int temp_count; int error_count; int let_count; int E_Contrl; int E_rtn; int True_address; int False_address; int gen_pos; int EquPush(int op,int a,int b,int r); void GetNext(); void

60、Error(int num); int Num(char cc); int gen(int op,int a,int b,int r); void Declear(); void InitStack(); void Push(int cod,int addr); int NewTemp(); void BackPatch(int addr,int addr2); //布爾表達(dá)式分析函數(shù) int B_Analize(); void B_Init(); int B_OR(); int B1_OR(int a); int L_AND(); int L1_AND(int a

61、); int M_NOT(); int K_END(); int K_CMP(); //算術(shù)表達(dá)式分析函數(shù) int E_Analize(); void E_Init(); int E_AddSub(); int E1_AddSub(int a); int T_MulDiv(); int T1_MulDiv(int a); int F_Number(); //語句分析函數(shù) void parser(); int S_Let(int a); int S_If(); int S_While(); int S_Begin(); int L_Analize(); /*

62、****************************/ int main() { parser(); system("pause"); return 0; } void parser() { int gen_pos=0; int Line ; int i; char ch1; pos=0; let_count=0; error_count=0; LineOfPro=0; address=0; LineOfEqu=0; temp_count=0; now_addr=0; len_count=0; InitSt

63、ack(); for(i=0;i

64、intf("*****************************"); printf("語法分析開始:\n"); GetNext(); if(code==12) { GetNext(); if(code==18) { GetNext(); if(code==30) { GetNext(); LineOfPro++; } if(code==16) Declear(); if(code==2) { S_Begin(); if(code!=27)

65、 Error(49); } else Error(50); } else Error(2); } else Error(1); Line=LineOfEqu; LineOfEqu=0; while(gen_pos

66、n",error_count); else printf("沒有錯誤,分析成功!"); fclose(TokenFin); printf("結(jié)果如下:\n"); rewind(EquFout); ch1=fgetc(EquFout); while(ch1!=EOF) { printf("%c",ch1); ch1=fgetc(EquFout); } fclose(EquFout); } void GetNext() { int d1,d2,d3; fscanf(TokenFin,"%d %s %d %d\n",&d1,ID,&d2,&d3); code=d2; address=d3; } void Error(int k) { switch(k) { case 1: pri

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

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!