語法制導(dǎo)翻譯_第1頁
語法制導(dǎo)翻譯_第2頁
語法制導(dǎo)翻譯_第3頁
語法制導(dǎo)翻譯_第4頁
語法制導(dǎo)翻譯_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、for循環(huán)語句翻譯遞歸下降法輸出三地址碼/#define MAX 100#include#include#includechar strMAX;char ch;int turn;char strTokenMAX;int kind;int n=0;/存放strtoken元素的個(gè)數(shù)struct Word/結(jié)構(gòu)體存放單詞(int sort;char wordMAX;/ 存放 strtoken的內(nèi)容;/recordx=new Word;Word *record12;/放所有識(shí)別出來的單詞,分別存放他們的編號(hào)以及字符串,x是其下標(biāo)/ 詞法分析 /int buffer()/載入(int0;cout輸入程序

2、,以“#”作為結(jié)束標(biāo)志。endl;for(int n=0;n=MAX;n+)(for(;istri不可用,用C語言讀入字符。if(stri=#)break;/如果尾數(shù)為識(shí)別碼#,則表示程序讀完,跳出循環(huán).break;return(i); bool IsLetter(char ch)/ 判斷是否是字母(if(ch=65&ch=97&ch=48&ch=57)return(true);elsereturn(false);char GetChar(int i)/ 讀取字符(char ch;ch=stri;return(ch);char GetBC(char ch)/判斷是不是空格或者換行,如果是,直接

3、讀取下一個(gè)字符直道不再空白為止(if(ch=32|ch=10)(turn+;ch=GetChar(turn);ch=GetBC(ch);/ 遞歸實(shí)現(xiàn)return(ch);elsereturn(ch);void Concat()/連接,即為 strtoken賦值(strTokenn=ch;n+;int Reserve()/以單詞為單位查找保留字,是則返回編碼,不是則返回0,用來區(qū)分標(biāo)志符和保留字 (if(strcmp(strToken, DIM0)=0)/調(diào)用 strcmp 函數(shù)實(shí)現(xiàn),return(1);else if(strcmp(strToken,for0)=0)return(2);else

4、 if(strcmp(strToken,step0)=0)return(3);else if(strcmp(strToken,until0)=0)return(4);else if(strcmp(strToken,do0)=0)return(5);elsereturn(6);void clear()(n=0;/* 語法遞歸分析 */int A(int * c,int & q)(if(cq+=3)(if(cq=7)( q+;return 1;else (coutstep 右部出錯(cuò)endl;return 0;else (couterror stependl;return 0;int B(int *

5、 b,int & o)(if(bo+=4)(if(bo=7)( o+;return 1;else (coutuntil 右部出錯(cuò)endl;return 0;else (couterror untilendl;return 0;int S2(int * d,int & h)(if(dh+=6)(if(dh+=8)(if(dh=6|dh=7) h+; return 1;else cout賦值語句右部出錯(cuò)endl;return 0;else cout賦值語句缺少賦值運(yùn)算符”endl;return 0;else cout賦值語句左部出錯(cuò)endl;return 0;int S1(int * m,int

6、& n)if(S2(m,n)if(A(m,n)if(B(m,n) return 1;else return 0;else return 0;else return 0;int S(int *a,int & z)if (az+=2)if (S1(a,z)if(az+=5)if(S2(a,z)(coutsucceed!endl;return 1;else return 0;else (couterror doendl; return 0;else return 0;else (couterror forendl; return 0;void main()(cout* 產(chǎn)生式 *endl;/ for

7、 step until do i j =coutfor S1 do S2endl; / 編號(hào) 2 3 4 5 6 7 8coutS2ABendl;couti=jendl;coutstepjendl;coutuntiljendl;int num;turn=0;num=buffer()-1;int x=0;/計(jì)識(shí)別的單詞的個(gè)數(shù)for(;turn=num;turn+)/總循環(huán),ch存放剛讀入的字符,strtoken存放巳識(shí)別的標(biāo)志付或保留字,turn是數(shù) 組str的下標(biāo)(ch=GetChar(turn);ch=GetBC(ch);if(IsLetter(ch)(while(IsLetter(ch)&

8、turn=num|IsDigit(ch)&turnsort=kind;/12345 或 6/coutkind; 測(cè)試cout(;for(int i=0;iwordi=strTokeni;coutwordi;/輸出識(shí)別的標(biāo)志符或保留字cout”,kind”)”wordi=0;clear();x+;else if(IsDigit(ch)(while(IsDigit(ch)&turnsort=kind;/cout(;for(int i=0;iwordi=strTokeni;coutwordi;cout”,kind”)”wordi=0;clear();x+;else if(ch=)(kind=8;/r

9、ecordx=new Word;recordx-word0=;recordx+-sort=kind;cout”(=,kind”)”endl;elsecouterror input!endl;/* 語法分析 */int y;/*for(y=0;yx;y+)(coutsort ;/打印單詞的編號(hào)。coutendl;*/int anaMAX;/存放詞法分析得到的單詞序列的編號(hào)的序列 int m;for(m=0;msort;/將 sort 作為數(shù)組保存起來/語法分析/int j=0;/ 制導(dǎo)翻譯 /if(!S(ana,j) cout語法出錯(cuò)!”endl;else cout三地址碼如下:endl;cou

10、twordi != 0)coutwordi+:coutword0;i=0;while (record 3-wordi != 0)coutwordi+;coutendl:cout101 goto 103”endl;coutwordi != 0)coutwordi+;cout:=”;i=0;while (record l-wordi != 0)coutwordi+;cout+”;i=0;while (record 5-wordi != 0)coutwordi+;coutendl:coutwordi != 0)coutwordi+;cout;i=0;while (record 7-wordi != 0)coutwordi+;cout go

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論