編譯原理項集規範族(初步)

2021-08-22 10:30:49 字數 2550 閱讀 8406

#includeusing namespace std;

int norterminal(char c)

struct lr

;int main()

//變為增廣文法

string s="z::=";

s+=strn[0][0];

s+='#';

strn.insert(strn.begin(),s);

for(int i=0;iif(norterminal(strn[i][0]))

nonterm+=strn[i][0];

string ustr(nonterm);

sort(ustr.begin(), ustr.end());

ustr.erase(unique(ustr.begin(), ustr.end()), ustr.end() );

nonterm=ustr;

} nonterm.erase(nonterm.end() - 1);

// cout/求解初始項集的閉包

// cout<

char non;

//找第乙個終結符

if(norterminal(strn[0][4]))

for(int j=1;jif(non==strn[j][0])

}non=strn[j][4];}}

} /* for(int i=0;i/*求解項集規範族 */

//求解當前項集中的終結符與非終結符以便於後續的存放。

string nont;//存放當前閉包$後邊遇到的字母

int totalnum=1;

//偶數遍歷

for(int r=0;r"";

for(int i=0;istr.size();i++)

}string ustr(nont);

sort(ustr.begin(), ustr.end());

ustr.erase(unique(ustr.begin(), ustr.end()), ustr.end() );

nont=ustr;

//lr[r].later=nont;

}

// now=r;

//cout

for(int i=0;istr.size();i++)} }

}}//若遇到終結符進行閉包運算

for(int i=0;ifor(int k=0;kstr.size();k++)

}non=strn[j1][4];}}

}break;}}

}break;}}

r+=1;

if(nont.length()!=0)

totalnum+=nont.length();

} //奇數遍歷

for(int r=1;r"";

for(int i=0;istr.size();i++)

}string ustr(nont);

sort(ustr.begin(), ustr.end());

ustr.erase(unique(ustr.begin(), ustr.end()), ustr.end() );

nont=ustr;

// lr[r].later=nont;

}

// now=r;

//cout

for(int i=0;istr.size();i++)} }

}}//若遇到終結符進行閉包運算

for(int i=0;ifor(int k=0;kstr.size();k++)

}non=strn[j1][4];}}

}break;}}

}break;}}

r+=1;

if(nont.length()!=0)

totalnum+=nont.length();

}cout0)}}

int termnum=0;

for(int i=0;iif(lr[i].str.size()>0)

}// cout<

for(int i=0;ibool flag=false;

if(lr[i].str.size()>0)

}string ustr(nont);

sort(ustr.begin(), ustr.end());

ustr.erase(unique(ustr.begin(), ustr.end()), ustr.end() );

nont=ustr;

lr[i].later=nont;

}if(lr[i].nape[0]=='#')

for(int p=0;pstr.size();p++)

{cout<

e::=aa

e::=bb

a::=d

a::=ca

b::=cb

b::=d

# 執行結果:

編譯原理中LR 0 專案集規範族的構造

此文略長。我也沒想到這寫起來這麼多,但對構造過程絕對清楚,一步步慢慢看吧。lr的第乙個l和ll的第乙個l含義相同,即從左到右掃瞄句子 第二個r表示right most最右推導。在通常的描述中,後面還有乙個括號裡面的數字如,lr 0 lr 1 這樣,括號裡面的數字表示用於決策所需的後續token分詞數...

編譯原理LR 0 專案集規範族的構造詳解

學編譯原理的時候,感覺什麼ll 1 lr 0 slr 1 lalr 1 思想滿天飛。而且做題的時候,一不留意,一道題就寫了三頁紙了。就拿今天這個玩意兒來講,我真的是考試前花了最多的時間,搞懂了 差不多搞懂了 這是個什麼玩意兒。以下內容,做題的話應該夠了而且很!容!易!理!解!其他學術情況恕博主也是個...

編譯原理中LR 0 專案集規範族的構造

lr的第乙個l和ll的第乙個l含義相同,即從左到右掃瞄句子 第二個r表示right most最右推導。在通常的描述中,後面還有乙個括號裡面的數字如,lr 0 lr 1 這樣,括號裡面的數字表示用於決策所需的後續token分詞數。首先看一下lr分析器的模型圖 可惜看出,lr分析器最關鍵的部分就是 lr...