編譯原理 實驗四 LL 1 語法分析(三)

2021-09-22 02:33:03 字數 1024 閱讀 9301

實驗四 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 分析程式設計過程中,最重要的兩個問題是 分析表的構造和相關資料結構的設計。而 分析表的構...