




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、編譯原理 課程實驗報告班級學號: 姓名: 實驗名稱: 遞歸下降分析法 一、實驗目的: 根據(jù)某一文法編制調(diào)試遞歸下降分析程序,以便對任意輸入的符號串進行分析。本次實驗的目的主要是加深對遞歸下降分析法的理解。二、實驗要求:對下列文法,用遞歸下降分析法對任意輸入的符號串進行分析: (1)E->TG(2)G->+TG|TG(3)G->(4)T->FS(5)S->*FS|/FS(6)S->(7)F->(E)(8)F->i輸出的格式如下:(1)遞歸下降分析程序,編制人:姓名,學號,班級(2)輸入一以#結(jié)束的符號串(包括+*/()i#):在此位置輸入符號串例如
2、:i+i*i# (3)輸出結(jié)果:i+i*i#為合法符號串備注:輸入一符號串如i+i*#,要求輸出為“非法的符號串”。注意:1.表達式中允許使用運算符(+-*/)、分割符(括號)、字符i,結(jié)束符#; 2.如果遇到錯誤的表達式,應輸出錯誤提示信息(該信息越詳細越好);三、實驗過程:程序設計:1.模塊設計:將程序分成合理的多個模塊(函數(shù)),每個模塊做具體的同一事情。2.寫出(畫出)設計方案:模塊關系簡圖、流程圖、全局變量、函數(shù)接口等。程序編寫:1.定義部分:定義常量、變量、數(shù)據(jù)結(jié)構(gòu)。2.初始化:從文件將輸入符號串輸入到字符緩沖區(qū)中。3.利用遞歸下降分析法,對每個非終結(jié)符編寫函數(shù),在主函數(shù)中調(diào)用文法開
3、始符號的函數(shù)。四、實驗結(jié)果(1)程序流程圖開始輸入待處理的字符串得到字符串的長度將開始符E放入堆棧得到第一個字符token遞歸下降分析輸出信息結(jié)束 開始輸出分析棧內(nèi)容和當前動作將分析棧的E換成EG是TGreturn 1return 0Y N 主函數(shù)main( )流程圖 E( )過程流程圖開始輸出分析棧內(nèi)容和當前動作將分析棧的T換成FS是FSreturn 1return 0Y N T( )過程流程圖將分析棧的G換成TG是TG開始token是+ token是- 輸出分析棧信息輸出分析棧信息輸出分析棧信息匹配+匹配- 返回return 1return 0Y Y N N Y N G( )過程流程圖開始
4、token是(token是i輸出錯誤輸出分析棧信息將分析棧最后一個元素換成E輸出分析棧信息匹配i匹配(進行E過程匹配)N N Y Y F( )過程流程圖開始輸出分析棧信息token是*token是/將棧頂元素彈出匹配*匹配/將堆棧棧頂元素換成FSF過程S過程結(jié)束 S( )過程流程圖(2)運行結(jié)果示例程序:#include <stdio.h>#include<dos.h>#include<stdlib.h>#include<string.h>char a50 ,b50,d500,e10;char ch;int n1,i1=0,flag=1,n=5;
5、int E();int E1();int T();int G();int S();int F();void input();void input1();void output();void main() /*遞歸分析*/int f,p,j=0;char x; d0='E' d1='=' d2='>' d3='T' d4='G' d5='#'printf("遞歸下降分析程序,編制人:_,_,_n");printf("輸入一以#結(jié)束的符號串(包括+ - * / ( )
6、 i #,且長度小于50):");doscanf("%c",&ch);aj=ch;j+;while(ch!='#');n1=j;ch=b0=a0;printf("文法t分析串ttt分析字符tt剩余串n");f=E1();if(f=0) return ;if (ch='#') printf("acceptn"); p=0;x=dp;while(ap!='#') printf("%c",ap+);printf("為合法字符!n");e
7、lse /printf("errorn");j=0;while(aj!='#') printf("%c",aj+);printf("非法字符!n");printf("回車返回n");getchar();getchar(); return; printf("n");printf("回車返回n");getchar();getchar();int E1() int f,t;printf("E->TGt"); flag=1;input();i
8、nput1();f=T();if (f=0) return(0);t=G();if (t=0) return(0);else return(1);int E() int f,t;printf("E->TGt"); e0='E'e1='='e2='>'e3='T'e4='G'e5='#'output();flag=1;input();input1();f=T();if (f=0) return(0);t=G();if (t=0) return(0);else retur
9、n(1);int T() int f,t;printf("T->FSt");e0='T'e1='='e2='>'e3='F'e4='S'e5='#' output();flag=1;input();input1();f=F();if (f=0)return(0);t=S(); if (t=0) return(0);else return(1);int G() int f;if(ch='+') bi1=ch;printf("G->+TGt
10、"); e0='G'e1='='e2='>'e3='+'e4='T'e5='G'e6='#'output(); flag=0;input();input1();ch=a+i1;f=T();if (f=0)return(0);f=G();if(f=0)return 0;else return 1;else if(ch='-') bi1=ch;printf("G->-TGt"); e0='G'e1='=
11、39;e2='>'e3='-'e4='T'e5='G'e6='#'output(); flag=0;input();input1();ch=a+i1;f=T();if (f=0)return(0);f=G();if(f=0)return 0;else return 1;elseprintf("G->t");e0='G'e1='='e2='>'e3=''e4='#'output();flag=1; i
12、nput();input1();return(1);int S()int f,t;if(ch='*') bi1=ch;printf("S->*FSt"); e0='S'e1='='e2='>'e3='*'e4='F'e5='S'e6='#'output();flag=0;input();input1();ch=a+i1;f=F();if (f=0)return(0);t=S();if (t=0)return(0);else return
13、(1);else if(ch='/') bi1=ch;printf("S->/FSt"); e0='S'e1='='e2='>'e3='/'e4='F'e5='S'e6='#'output();flag=0;input();input1();ch=a+i1;f=F();if (f=0)return(0);t=S();if (t=0)return(0);else return(1);elseprintf("S->t&quo
14、t;);e0='S'e1='='e2='>'e3=''e4='#'output();flag=1; ai1=ch;input();input1();return(1);int F() int f;int j;if(ch='(') bi1=ch;printf("F->(E)t");e0='F'e1='='e2='>'e3='('e4='E'e5=')'e6='#
15、'output();flag=0;input();input1();ch=a+i1;f=E();if (f=0) return(0);if(ch=')') bi1=ch;printf("F->(E)t"); flag=0;input();input1(); ch=a+i1;else printf("errorn"); j=0; while(aj!='#') printf("%c",aj+);printf("非法字符!n"); return(0); else if(ch=
16、'i') bi1=ch;printf("F->it");e0='F'e1='='e2='>'e3='i'e4='#'output();flag=0;input();input1();ch=a+i1; else printf("errorn");j=0;while(aj!='#') printf("%c",aj+);printf("非法字符!n");return(0);return(1);voi
17、d input() int j=0; for (;j<=i1-flag;j+) printf("%c",bj); /*輸出分析串*/ printf("ttt"); printf("%cttt",ch); /*輸出分析字符*/ void input1() int j; for (j=i1+1-flag;j<n1;j+) printf("%c",aj); /*輸出剩余字符*/ printf("n");void output() /*推導式計算*/int m,k,j,q; int i=0;m=0;k=0;q=0; i=n;dn='='dn+1='>'dn+2='#'n=n+2;i=n;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年考大連銀行面試題及答案
- 鋼架廠房吊頂施工方案
- 燈罩的檢測標準
- 4個月嬰幼兒體重身高標準
- 基坑鋼管支撐施工方案
- 2025年硅湖職業(yè)技術(shù)學院單招職業(yè)技能測試題庫1套
- 2025年江西司法警官職業(yè)學院單招職業(yè)適應性測試題庫審定版
- 陜西省榆林市2025屆高三下學期第三次模擬考試生物試題(原卷版+解析版)
- 三農(nóng)村電商打造區(qū)域特色品牌方案
- 三農(nóng)村居民耕地質(zhì)量保護方案
- 漢樂府兩首之《上邪》課件
- 古希臘文明-知到答案、智慧樹答案
- 人教版小學數(shù)學五年級下冊第三單元《長方體和正方體》作業(yè)設計
- SYT 6968-2021 油氣輸送管道工程水平定向鉆穿越設計規(guī)范-PDF解密
- 2024年無錫商業(yè)職業(yè)技術(shù)學院單招職業(yè)技能測試題庫及答案解析
- 2024年南京科技職業(yè)學院單招職業(yè)技能測試題庫及答案解析
- 方案-金融災備數(shù)據(jù)中心技術(shù)方案
- 交通安全宣傳意義
- 40米落地式腳手架專項施工方案
- 虛擬現(xiàn)實環(huán)境中的自然交互技術(shù)與算法
- 質(zhì)量手冊和質(zhì)量管理手冊
評論
0/150
提交評論