C求文法的first和follow集合_第1頁
C求文法的first和follow集合_第2頁
C求文法的first和follow集合_第3頁
C求文法的first和follow集合_第4頁
C求文法的first和follow集合_第5頁
全文預覽已結束

下載本文檔

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

文檔簡介

本文格式為Word版,下載可任意編輯——C求文法的first和follow集合1.#include\2.#include\3.#include\4.

5.#ifdef_DEBUG6.#undefTHIS_FILE

7.staticcharTHIS_FILE[]=__FILE__;8.#definenewDEBUG_NEW9.#endif

10.//調試部分使用的代碼

11.CStringMLR1::GetFirst(inti){

12.if(i=GetIdentNum())return\;

13.returnFirstSet5(m_first[i].Fi,m_first[i].flag14.}

15.CStringMLR1::GetFollow(inti){

16.if(i=GetIdentNum())return\;

17.returnFollowSet1(m_first[i].Fo,m_first[i].flag18.}

19.//構造部分20.MLR1::MLR1(){21.}

22.MLR1::~MLR1(){23.}

24.voidMLR1::ReSet(FILE*pf){25.//使用文件指針pf來重新驅動程序26.inti;27.p_file=pf;

28.list_Express.RemoveAll();29.list_Ident.RemoveAll();

30.for(i=0;i=(char*)m_first;p--)31.*p=0;32.Lex3();33.FirstSet6();34.//FollowSet3();35.}

36.//輸入分析部分37.boolMLR1::Lex1(){

38.//截取一個分號段到tocken中39.//功能字符取其負數(shù)40.charch=0;41.boolend=false;42.token_len=0;

43.if(feof(p_file))returnfalse;

44.while(!end46.if(fread(47.if(ch':53.case'=':54.ch=-ch;55.break;56.case'\\\\':

57.fread(58.if(ch')return0;79.if(t==0)return0;80.ident[t]=0;

81.for(t=list_Ident.GetSize()-1;t>=0;t--)82.if(list_Ident[t]==(CString)ident)break;83.if(t=MAX_IDENT)returnfalse;85.list_Ident.Add((CString)ident);86.t=list_Ident.GetSize()-1;

87.if(isUse)bit_map[t/8]|=1=符號表;95.registerchar*s,*d;96.char*end;97.inti;98.s=d=token;

99.end=100.if(i=Lex2_1(s))*d++=-i;101.elsereturnfalse;

102.if(*s++!=-'=')returnfalse;

103.while(s=1){104.returnfalse;105.}else{

106.if(*p==*X)returnfalse;107.if(!FirstSet2(*p))108.returnfalse;109.}110.p++;111.}

112.returntrue;113.}

114.boolMLR1::FirstSet2(constcharX){115.//判斷非終結符X能否推出LR_NULL116.CStringtemp;

117.if(m_first[-X-1].flag118.if(m_first[-X-1].flag120.m_first[-X-1].flag|=0x40;

121.for(inti=list_Express.GetSize();i>0;i--){122.temp=list_Express.GetAt(i-1);123.if(temp[0]==X){

124.if(FirstSet1((LPCSTR)temp)){125.m_first[-X-1].flag|=3;126.returntrue;127.}128.}129.}

130.m_first[-X-1].flag|=1;131.m_first[-X-1].flag^=0x40;132.returnfalse;133.}

134.boolMLR1::FirstSet3(constchar*X,char*Fi){

135.//求產生式X的First集放在F中,假使LR_NULL在First集中則返回true136.//假使要求符號串的First集,就將X[0]設為0137.//假設X中不出現(xiàn)LR_NULL,LR_EOF和LR_EOS138.//假設F的長度為MAP_SIZE,有128b139.constchar*p=X;140.X++;

141.while(*X!=0){142.if(*X>=1){

143.Fi[(*X)/8]|=10;i--){165.temp=list_Express.GetAt(i-1);166.if(temp[0]==X)

167.FirstSet3((LPCSTR)temp,m_first[-X-1].Fi);

168.}

169.m_first[-X-1].flag|=4;170.m_first[-X-1].flag^=0x40;171.}

172.if(Fi!=m_first[-X-1].Fi){

173.for(inti=0;i0;i--){174.if((m_first[i-1].flag176.}

177.for(i=list_Ident.GetSize();i>0;i--){178.if((m_first[i-1].flag180.}181.}

182.CStringMLR1::FollowSet1(constchar*Fo,boolhas_eof){183.//將集合表示的Follow變?yōu)樽址?84.chart[128];185.char*p=t;186.inti,j;

187.for(i=0;i0;i--){194.sprintf(temp,list_Express.GetAt(i-1));195.flag=false;196.p=temp+1;197.while(*p!=0){198.if(!flag){

199.if(*p==X){

200.//表達式中出現(xiàn)了符號X201.flag=true;}202.}else{

203.if(*p>0){

204.//規(guī)則2:X后碰上終結符205.flag=false;

206.Fo[*p/8]|=1199.

溫馨提示

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

評論

0/150

提交評論