下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
本文格式為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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 家居建材運輸服務協(xié)議
- 鐵路工程材料運輸協(xié)議模板
- 銀行網點內外墻裝修合同
- 污水處理監(jiān)理居間合同
- 植物園裝修合同范例
- 精細化工居間服務合同范本
- 節(jié)能燈具市場居間投資合同
- 高鐵站裝修供貨協(xié)議
- 攝影館內外墻裝修施工合同
- 機場裝修項目增補合同
- 電子元器件篩選
- 第三章決策與決策過程PPT課件
- 法蘭克系統(tǒng)數(shù)控車床說明書及編程
- 麻黃四物湯_金鑒卷四十四_減法方劑樹
- 可伐合金在模擬N2 H2O氣氛下氧化對封接的影響
- 安徽大學20072008第一學期自動控制理論考試試卷A卷
- GB∕T 12810-2021 實驗室玻璃儀器 玻璃量器的容量校準和使用方法
- 求職意向申請表
- 鋼筆楷書基本筆畫字帖直接打印練習
- 完整版二十四山年月日時吉兇定局詳解
- 3玻璃棧道施工專項方案(總31頁)
評論
0/150
提交評論