




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、程序清單分工:詞法分析:#include#include#include#define keywordSum 8char *keywordkeywordSum=if,else,for,while,do,int,read,write;char singleword50=+ - * ( ) ; , :;char doubleword10=!;extern char Scanin300,Scanout300;extern FILE *fin,*fout;int TESTscan()char ch,token40;int es=0,j,n;printf(請輸入源程序文獻名(涉及途徑):);scanf(
2、%s,Scanin);printf(請輸入詞法分析輸出文獻名(涉及途徑):);scanf(%s,Scanout);if(fin=fopen(Scanin,r)=NULL)printf(n打開詞法分析輸入文獻出錯!n);return(1);if(fout=fopen(Scanout,w)=NULL)printf(n創(chuàng)立詞法分析輸出文獻出錯!n);return(2); ch=getc(fin); while(ch!=EOF) while(ch= |ch=n|ch=t) ch=getc(fin); if(isalpha(ch) token0=ch;j=1; ch=getc(fin); while(i
3、salnum(ch) tokenj+=ch; ch=getc(fin); tokenj=0; n=0; while (n=keywordSum) fprintf(fout,%st%sn,ID,token); else fprintf(fout,%st%sn,token,token); else if (isdigit(ch) token0=ch;j=1; ch=getc(fin); while(isdigit(ch) tokenj+=ch; ch=getc(fin); tokenj=0; fprintf(fout,%st%sn,NUM,token); else if(strchr(single
4、word,ch)0) token0=ch;token1=0; ch=getc(fin); fprintf(fout,%st%sn,token,token); else if (strchr(doubleword,ch)0) token0=ch; ch=getc(fin); if(token0=!) if (ch = =) token1=ch; token2=0; ch = getc(fin); fprintf(fout,%st%sn,token,token); else token1=0; es=1; fprintf(fout,%st%sn,ERROR,token); else if (ch
5、= =) token1=ch; token2=0; ch = getc(fin); else token1=0; fprintf(fout,%st%sn,token,token); else if (ch=/) ch = getc(fin); if(ch =*) char ch1; ch1=getc(fin); do ch=ch1; ch1=getc(fin); while(ch!=* | ch1!=/) & ch1!=EOF); ch = getc(fin); else if(ch=/)doch=getc(fin);while(ch!=n & ch!=EOF);ch=getc(fin);el
6、se token0=/; token1=0; fprintf(fout,%st%sn,token,token); else token0=ch; token1=0; ch=getc(fin); es = 3; fprintf(fout,%st%sn,ERROR,token); fclose(fin); fclose(fout); return (es);語法分析:#include#include#include#includeint TESTparse();int program();int compound_Stat();int statement();/int expression_Sta
7、t();int expression_stat();int expression();int bool_expr();int additive_expr();int term();int factor();int if_stat();int while_stat();int for_stat();int write_stat();int read_stat();int declaration_stat();int declaration_list();int statement_list();int compound_stat();char token20, token140; /token保
8、存單詞符號,token1保存單詞值extern char Scanout300; /保存詞法分析輸出文獻名FILE * fp; /用于指向輸入文獻旳指針#define keywordSum 8char *keywordkeywordSum=if,else,for,while,do,int,read,write;char singleword50=+ - * ( ) ; , :;char doubleword10=!;extern char Scanin300,Scanout300;extern FILE *fin,*fout;/語法分析程序int TESTparse() int es = 0;
9、 if (fp=fopen(Scanout,r)=NULL) printf(n打開%s錯誤!n,Scanout); es = 0; if (es=0) es=program(); printf(=語法分析成果!=n); switch(es) case 0: printf(語法分析成功!n); break; case 10: printf(打開文獻%s失敗!n); break; case 1: printf(缺少!n); break; case 2: printf(缺少!n); break; case 3: printf(缺少標記符!n); break; case 4: printf(少分號!n
10、); break; case 5: printf(缺少(!n); break; case 6: printf(缺少)!n); break; case 7: printf(缺少操作數(shù)!n); break; fclose(fp); return(es);/:=int program() int es = 0; fscanf(fp, %s%sn,token,token1); printf(%s%sn,token,token1); if(strcmp(token,)/判斷與否為 es = 1; return (es); fscanf(fp,%s%sn,&token,&token1); printf(%
11、s%sn,token,token1); es = declaration_list(); if(es0) return (es); es = statement_list(); if(strcmp(token, )/判斷與否為 es = 2; return (es); return(es);/:=|空int declaration_list()int es=0;while(strcmp(token,int)=0) es=declaration_stat(); if(es0) return (es); return (es);/:=int ;int declaration_stat() int
12、es=0; fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); if(strcmp(token,ID) return (es=3);/不是標記符 fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); if(strcmp(token,;) return (es=4); fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); return (es);/:=|空int statement_list(
13、) int es=0; while(strcmp(token,) es=statement(); if(es0) return (es); return (es);/:=|/ |int statement() int es=0; if(es=0 & strcmp(token,if)=0) es=if_stat();/ if(es=0 & strcmp(token,while)=0) es=while_stat();/ if(es=0 & strcmp(token,for)=0) es=for_stat();/ /可在此處添加do語句調(diào)用 if(es=0 & strcmp(token,read)
14、=0) es=read_stat();/ if(es=0 & strcmp(token,write)=0) es=write_stat();/ if(es=0 & strcmp(token,)=0) es=compound_stat();/ if(es=0 & strcmp(token,ID)=0 | strcmp(token,NUM)=0) es=expression_stat();/體現(xiàn)式語句 return (es);/:=if()|elseint if_stat() int es=0; fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token
15、,token1); if(strcmp(token,() return (es=5); fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); es=statement(); if(es0) return(es); if(strcmp(token,) return(es=6); fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); es=statement(); if(es0) return(es); if(strcmp(token,else)=0) fscan
16、f(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); es=statement(); if(es0) return(es); return(es);/:=while()int while_stat() int es=0; fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); if(strcmp(token,() return (es=5); fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); es=e
17、xpression(); if(es0) return(es); if(strcmp(token,) return(es=6); fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); es = statement(); return(es);/:=for(;)int for_stat() int es=0; fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); if(strcmp(token,() return (es=5); fscanf(fp,%s%sn,
18、&token,&token1); printf(%s%sn,token,token1); es=expression(); if(es0) return(es); if(strcmp(token,;) return (es=4); fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); es=expression(); if(es0) return(es); if(strcmp(token,;) return (es=4); fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,
19、token1); es=expression(); if(es0) return(es); if(strcmp(token,) return (es=6); fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); es=expression(); return (es);/:=write;int write_stat() int es=0; fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); es=expression(); if(es0) return(es
20、); if(strcmp(token,;) return (es=4); fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); return(es);/:=read;int read_stat() int es=0; fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); if(strcmp(token,ID) return (es=3); fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1);
21、if(strcmp(token,;) return (es=4); fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); return(es);/:=int compound_stat()/復合語句函數(shù) int es=0; fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); es=statement_list(); return (es);/:=;|;int expression_stat() int es=0; if(strcmp(token,;)=0)
22、fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); return (es); es=expression(); if(es0) return(es); if(es=0 & strcmp(token,;)=0) fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); return (es); else es=4; return (es);/少分號 /:=|int expression() int es=0, fileadd; char token220, tok
23、en340; if(strcmp(token,ID)=0) fileadd=ftell(fp);/記住問件目前位置 fscanf(fp,%s%sn,&token2,&token3); printf(%s%sn,token2,token3); es=bool_expr(); if(es0) return(es); if(strcmp(token2,=)=0)/= fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); else fseek(fp,fileadd,0); /若非=則文獻指針回到=前邊旳標記符 printf(%s%sn
24、,token,token1); es=bool_expr(); if(es0) return(es); else es=bool_expr(); return (es);/:=|(|=|=|=|!=) /int bool_expr() int es=0; es=additive_expr(); if(es0) return(es); if(strcmp(token,)=0 | strcmp(token,=)=0 | strcmp(token,)=0 | strcmp(token,0) return(es); return (es);/:=(+|-)int additive_expr() int
25、 es=0; es=term(); if(es0) return(es); while(strcmp(token,+)=0 | strcmp(token,-)=0) fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); es=term(); if(es0) return(es); return (es);/:=(*|/)int term() int es=0; es=factor(); if(es0) return(es); while(strcmp(token,*)=0 | strcmp(token,/)=0) fscanf
26、(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); es=factor(); if(es0) return(es); return (es);/:=()|int factor() int es=0; if(strcmp(token,()=0) fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); es=expression(); if(es0) return(es); if(strcmp(token,) return (es=6); fscanf(fp,%s%sn,&t
27、oken,&token1); printf(%s%sn,token,token1); else if(strcmp(token,ID)=0 | strcmp(token,NUM)=0) fscanf(fp,%s%sn,&token,&token1); printf(%s%sn,token,token1); return (es); else es=7;/缺少操作數(shù) return (es); return (es);int TESTscan()char ch,token40;int es=0,j,n;printf(請輸入源程序文獻名(涉及途徑):);scanf(%s,Scanin);printf
28、(請輸入詞法分析輸出文獻名(涉及途徑):);scanf(%s,Scanout);if(fin=fopen(Scanin,r)=NULL)printf(n打開詞法分析輸入文獻出錯!n);return(1);if(fout=fopen(Scanout,w)=NULL)printf(n創(chuàng)立詞法分析輸出文獻出錯!n);return(2); ch=getc(fin); while(ch!=EOF) while(ch= |ch=n|ch=t)ch=getc(fin); if(isalpha(ch) token0=ch;j=1; ch=getc(fin); while(isalnum(ch) tokenj+=ch; ch=getc(fin); tokenj=0; n=0; while (n=keywordSum) fprintf(fout,%st%sn,ID,token); else fprintf(fout,%st%sn,token,token); else if (isdigit(ch) token0=ch;j=1; ch=getc(fin); while(isdigit(ch) tokenj+=ch; ch=getc(fin); to
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 仙桃長春活動策劃方案
- 代幣融資活動方案
- 代表小組調(diào)研活動方案
- 代購充值活動方案
- 儀器公司團建活動方案
- 企業(yè)書法培訓活動方案
- TJSQA-溫室氣體?產(chǎn)品碳足跡量化方法與要求?砌體材料產(chǎn)品
- 企業(yè)專家活動策劃方案
- 企業(yè)體驗活動方案
- 企業(yè)公司安全月活動方案
- 技術轉(zhuǎn)移與成果轉(zhuǎn)化考核試卷
- 《園林機械使用與維修》課件-任務3.園林養(yǎng)護機械
- 2025內(nèi)蒙古森工集團第二批工作人員招聘高頻重點模擬試卷提升(共500題附帶答案詳解)
- 《文化遺產(chǎn)的數(shù)字化傳承》課件
- 【課件】女裝結(jié)構設計 女裝原型
- 2025年上半年支部工作總結(jié)范文
- 食堂廚房安全事故案例
- 擬采用新技術、新工藝、新材料情況
- 國開(四川)2024年秋《演講與口才》形考任務1-2答案終結(jié)性考核答案
- 高空作業(yè)腳手架搭建方案
- 江蘇2022-2024年三年中考語文真題教師版-專題10 文學類文本閱讀
評論
0/150
提交評論