實驗四 ll(1)語法分析(三)(2學時)
一、實驗目的
1.熟悉ll(1)語法分析的基本原理,語法分析的過程,以及語法分析中要注意的一些問題。
2. 複習高階語言及線性表、棧、圖等典型資料結構,進一步加強用高階語言來解決實際問題的能力。
二、實驗內容
將實驗三編寫的程式的基礎之上,實現下面的功能:
按照教材5.2節演算法,求出各個產生式的select集(**分析表),並採用適當的資料結構儲存,並在螢幕上顯示結果。
演算法描述:
求某產生式的select集
掃瞄產生式的右部,分為下面幾種情況:
(1)若是終結符,則將該終結符加入該產生式的select集,掃瞄下乙個產生式;
(2)若是「ε」,將左部非終結符的follow集加入該產生式的select集;
(3)若是非終結符,將該非終結符的 first集— 加入該產生式的select集,然後檢查該非終結符是否可以推出空,若可以為空,則掃瞄本產生式的下一符號;
若是「\0」,則將該產生式的左部非終結符的follow集加入該產生式的select集。
#includeusing namespace std;
int zjf(char c)
else if(c=='@')
else if(c==','||c=='.'||c==':'||c=='?')
else }
int main()
for(int i=0; i::iterator it;
for(it = first[s[i][j]].begin(); it!=first[s[i][j]].end(); it++)
if(x[s[i][j]])
}if(biaoji==s[i].size()-1)
}} for(int i=0;i::iterator it;
for(it = select[s[i]].begin(); it!=select[s[i]].end(); it++)
cout<<"}"<} }
編譯原理 實驗五 LL 1 語法分析(四)
一 實驗目的 1 熟悉ll 1 語法分析的基本原理,語法分析的過程,以及語法分析中要注意的一些問題。2.複習高階語言及線性表 棧 圖等典型資料結構,進一步加強用高階語言來解決實際問題的能力。二 實驗內容 將實驗四編寫的程式的基礎之上,實現下面的功能 按照教材5.2節演算法,輸入乙個符號串,根據實驗四...
編譯原理 LL 1 語法分析
直接輸入根據已知文法構造的分析表m,對於輸入的文法和符號串,所編制的語法分析程式應能正確判斷此串是否為文法的句子,並要求輸出分析過程。c 實現如下 includeusing namespace std const int l num 100000 const int max 100 分析表容量 co...
LL(1)語法分析
ll 1 分析法的功能是利用ll 1 控制程式根據顯示棧棧頂內容 向前看符號以及ll 1 分析表,對輸入符號串自上而下的分析過程。可通過消除左遞迴 提取左因子把非ll 1 文法改造成ll 1 文法。在 ll 1 分析程式設計過程中,最重要的兩個問題是 分析表的構造和相關資料結構的設計。而 分析表的構...