




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
實驗二語法分析-自下而上分析實驗的目的利用vc++6.0生成調試遞歸下降分析程序,以便對任意輸入的符號串進行分析。本次實驗的目的主要是加深對遞歸下降分析法的理解。二、語法分析器按照c++語言的語法規(guī)則檢查詞法分析輸出的記號流是否符合這些規(guī)則,并根據這些規(guī)則所體現出的語言中的各種語法結構的層次性。把規(guī)則寫入到vc++6.0的文件中,可以生成樹狀的層次結構。三、實驗環(huán)境vc++6.0四、分析結果五、源程序實現#include<stdio.h>#include<malloc.h>#include<string>structstack{stack*top;charvalue;};charpop(stack*pst){chare;if(pst->top==pst){printf("Thestackisnull.");return0;}else{e=pst->top->value;pst->top--;returne;}}voidpush(stack*pst,chare){pst->top++;pst->top->value=e;}voidprintstack(stack*pst){stack*printtemp=pst;while(printtemp<=(pst->top)){printf("%c",printtemp->value);printtemp++;}}voidprintstring(stack*pst){stack*printtemp=(pst->top);while(printtemp>=pst){printf("%c",printtemp->value);printtemp--;}}voidprintSLR(int&number,stack*status,stack*grammar,stack*string){printf("%d",number);printstack(status);printf("");printstack(grammar);printf("");printstring(string);printf("");number++;}intmain(){stack*string=(stack*)malloc(40);string->top=string;string->top->value='#';stack*status=(stack*)malloc(40);status->top=status;status->top->value='0';stack*grammar=(stack*)malloc(40);grammar->top=grammar;grammar->top->value='#';FILE*fp;fp=fopen("C:\\wj.txt","a+");charfilestring[10][20]={'\0'};charstr[10]={'\0'};intstringnumber=0;intnumber=0;while(!feof(fp)){fgets(filestring[stringnumber],23,fp);if(filestring[stringnumber][0]!='\n')stringnumber++;}for(inti=0;i<=(stringnumber-1);i++){for(intj=strlen(filestring[i])-3;j>=0;j--)if(filestring[i][j]!='\n')push(string,filestring[i][j]);printf("此次分析的字符串為:%s\n",filestring[i]);printf("步驟狀態(tài)棧符號棧輸入串ACTION\n");printSLR(number,status,grammar,string);printf("移進\n");while(string->top->value!='#'){charch=pop(string);if(ch=='i'){push(grammar,ch);if(status->top->value=='0'){push(status,'5');printSLR(number,status,grammar,string);printf("歸約\n");pop(status);pop(grammar);push(status,'3');push(grammar,'F');printSLR(number,status,grammar,string);printf("歸約\n");pop(status);pop(grammar);push(status,'2');push(grammar,'T');printSLR(number,status,grammar,string);printf("歸約\n");if(string->top->value=='+'||string->top->value=='-'){pop(status);pop(grammar);push(status,'1');push(grammar,'E');printSLR(number,status,grammar,string);printf("移進\n");}}elseif(status->top->value=='6'){push(status,'5');printSLR(number,status,grammar,string);printf("歸約\n");pop(status);pop(grammar);push(status,'3');push(grammar,'F');printSLR(number,status,grammar,string);printf("歸約\n");pop(status);pop(grammar);push(status,'9');push(grammar,'T');printSLR(number,status,grammar,string);printf("歸約\n");if(string->top->value=='+'||string->top->value=='-'){pop(status);pop(status);pop(grammar);pop(grammar);printSLR(number,status,grammar,string);printf("移進\n");}}elseif(status->top->value=='7'){push(status,'5');printSLR(number,status,grammar,string);printf("歸約\n");pop(status);pop(grammar);push(status,'(');push(status,'1');push(status,'0');push(status,')');push(grammar,'F');printSLR(number,status,grammar,string);printf("歸約\n");pop(status);pop(status);pop(status);pop(status);pop(status);pop(grammar);pop(grammar);printSLR(number,status,grammar,string);printf("移進\n");if(string->top->value=='+'||string->top->value=='-'){pop(status);pop(grammar);push(status,'1');push(grammar,'E');printSLR(number,status,grammar,string);printf("移進\n");}}elseprintf("Thereissomethingwrongneari.");}elseif(ch=='+'||ch=='-'){if(status->top->value=='1'||status->top->value=='8')push(status,'6');elseprintf("Thereissomethingwrongnear+or-\n");push(grammar,ch);printSLR(number,status,grammar,string);printf("移進\n");}elseif(ch=='*'|
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 增進疾病預防知識宣傳的措施計劃
- 2025年硅酮結構密封膠項目合作計劃書
- 華東師大版七年級數學下冊全冊教案(2024年春季版)
- 2025年大數據金融項目建議書
- 昆蟲記中的生命奧秘征文
- 太陽能光伏系統(tǒng)投資合同
- Pyridoxine-tri-2-hexyldecanoate-生命科學試劑-MCE
- Imidazole-salicylate-Standard-生命科學試劑-MCE
- 工業(yè)廢水處理與循環(huán)利用項目合同
- 自卸車自愿租賃協議書
- 《口腔修復學》種植義齒-課件
- 一元二次方程競賽試題(含答案)
- 醫(yī)患溝通技巧培訓講義
- 地理微格教學課件
- 食品感官評價員的選拔與培訓課件
- 廣數da98產品說明書
- 小學生讀書計劃表打印表格表單
- 合成氨操作規(guī)程
- 拖拉機培訓(基礎和通用知識)課件
- 清華大學抬頭信紙
- 故障檢測報告表
評論
0/150
提交評論