語法分析實驗報告_第1頁
語法分析實驗報告_第2頁
語法分析實驗報告_第3頁
語法分析實驗報告_第4頁
語法分析實驗報告_第5頁
已閱讀5頁,還剩1頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、LL(1)語法分析實驗報告一、實驗目的通過設計、編制、調試一個典型的語法分析程序,實現對詞法分析程序所提供的單詞序列進行語法檢查和結構分析,檢查語法錯誤,進一步掌握常用的語法分析方法。二、實驗內容構造LL(1)語法分析程序,任意輸入一個文法符號串,并判斷它是否為文法的一個句子。程序要求為該文法構造預測分析表,并按照預測分析算法對輸入串進行語法分析,判別程序是否符合已知的語法規則,如果不符合則輸出錯誤信息。消除遞歸前的文法              

2、0;    消除遞歸后的等價文法    EE+T                        ETE    ET              

3、;         E+TE|    TT*F                        TFT    TF          

4、0;            T*FT|    F(E)|i                      F(E)|i根據已建立的分析表,對下列輸入串:i+i*i進行語法分析,判斷其是否符合文法。三、實驗要求1.根據已由的文法規則建立LL(1)分析表;2

5、.輸出分析過程。請輸入待分析的字符串: i+i*i    符號棧         輸入串          所用產生式        #E         i+i*i#       

6、;   ETE       #ET         i+i*i#          TFT      #ETF         i+i*i#      

7、0;   Fi      #ETi         i+i*i#           #ET          +i*i#          T  &

8、#160;     #E          +i*i#          E+TE      #ET+          +i*i#       #ET  &#

9、160;        i*i#          TFT      #ETF           i*i#          Fi      #ET

10、i           i*i#       #ET           *i#          T*FT     #ETF*       

11、;     *i#      #ETF            i#          Fi     #ETi            i#  

12、   #ET             #          T       #E            #        

13、;  E        #            #四、程序思路模塊結構:1、定義部分:定義常量、變量、數據結構。2、初始化:設立LL(1)分析表、初始化變量空間(包括堆棧、結構體等);3、運行程序:讓程序分析一個text文件,判斷輸入的字符串是否符合文法定義的規則;4、利用LL(1)分析算法進行表達式處理:根據LL(1)分析表對表達式符號串進行堆棧(或其他)操作,輸出分析結果,如果遇到錯誤則顯示簡單的錯誤提示。五、

14、程序流程圖輸入要分析的串判斷輸入串是否正確判斷分析句型是否完全匹配?成功失敗否是是否 八、程序調試與測試結果運行后結果如下:九、實驗心得遞歸下降分析法是確定的自上而下分析法,這種分析法要求文法是LL(1)文法。它的基本思想是,對文法中的每個終結符編寫一個函數(或子程序),每個函數(或子程序)的功能是識別由該非終結符所表示的語法成分。由于描述語言的文法常常是遞歸定義的,因此相應的這組函數(或子程序)必然以相互遞歸的方式進行調用。當然實驗中我也發現了自己的不足之處,我會在今后的學習生活中努力提高自己的編程水平.附件:程序清單:/* 程序名稱: LL(1)文法分析程序 */* E->

15、E+T|T */* T->T*F|F */* F->(E)|i */ /* 程序相關說明 */* A=E B=T */* 0=E 1=E 2=T 3=T 4=F */* 0=i 1=+  2=*  3=( 6=) 4=# */#include"iostream.h"#include "stdio.h"#include "malloc.h"#include "conio.h"struct Lcharchar char_ch;struct Lchar *next;Lchar,*

16、p,*h,*temp,*top,*base;char curchar;char curtocmp;int right;int table58=1,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,0,1,1,0,1,1,1,0,0,1,0,0;int i,j;void push(char pchar)temp=(struct Lchar*)malloc(sizeof(Lchar);temp->char_ch=pchar;temp->next=top;top=temp;void pop(void)curtocmp=top->char_ch;if(top->

17、;char_ch!='#')top=top->next;void doforpush(int t)switch(t)case 0:push('A');push('T');break;case 5:push('A');push('T');break;case 11:push('A');push('T');push('+');break;case 20:push('B');push('F');break;case 23:push(&#

18、39;B');push('F');break;case 32:push('B');push('F');push('*');break;case 40:push('i');break;case 43:push(')');push('E');push('(');void changchartoint()switch(curtocmp)case 'A':i=1;break;case 'B':i=3;break;case 'E&

19、#39;:i=0;break;case 'T':i=2;break;case 'F':i=4;switch(curchar)case 'i':j=0;break;case '+':j=1;break;case '*':j=2;break;case '(':j=3;break;case ')':j=4;break;case '#':j=5;void dosome(void)int t;for(;)pop();curchar=h->char_ch;printf(&q

20、uot;n%ct%c",curchar,curtocmp);if(curtocmp='#' && curchar='#')break;if(curtocmp='A'|curtocmp='B'|curtocmp='E'|curtocmp='T'|curtocmp='F')if(curtocmp!='#')changchartoint();if(tableij)t=10*i+j;doforpush(t);continue;elseright=0;

21、break;elseif(curtocmp!=curchar)right=0;break;elsebreak;elseif(curtocmp!=curchar)right=0;break;elseh=h->next;continue;void main(void)char ch;cout<<"* 文件名稱: 語法分析"<<endl;cout<<"   "<<endl;cout<<"/* 程序相關說明 */"<<endl; 

22、60;     cout<<"-"<<endl;       cout<<"-/* A=E B=T */"<<endl;   cout<<"-* 目的:對輸入LL(1)文法字符串,本程序能自動判斷所給字符串是 -"<<endl;   cout<<"-*否為所給文法的句子,并能給出分析過程。

23、60; -"<<endl;   cout<<"-*-"<<endl;       cout<<"表達式文法為:"<<endl;       cout<<" E->E+T|T"<<endl;       cout<<"T->T*F|F"<<endl;       cout<<"F->(E)|i"<<endl;       cout<<"請在下行輸入要分析的串(#號結束):"<<endl;rig

溫馨提示

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

評論

0/150

提交評論