編譯原理實驗報告

2022-09-04 18:03:07 字數 1104 閱讀 4667

姓名:專業:

班級:學號:指導老師:

一、實驗內容

求解乙個文法的first、follow、select集合並判斷是不是ll(1)文法。

一、 實驗目的

通過實驗熟練掌握first、follow、select集合的求解演算法,加深對理論知識的理解。

二、 實驗原理

集的求解:(1)若x∈vt,則first(x)=;

2)若x∈vn,且有產生式x->a……,a∈vt,則a∈first(x);

3)若x∈vn,x->ε,則ε∈first(x)

4)若x,y1,y2,y3,y4…………yn都∈vn,而產生式x->y1,y2……yn.當y1,y2,y3,y4…………yn都能=>ε那麼first(x)=並集的first(yi)-(0<=i<=n)

5)若yi=>ε(i=1,2,3……),則first(x)=並集的first(yi)-並上

集的求解:(1)若為文法開始符號s,則follow(s)=

2)若為文法a->abb是乙個產生式,則把first(b)的非空元素加入follow(b)中。如果b->ε則把follow(a)也加入follow(b)中。

>a)=(first(a)-)並上follow(a)。

三、 設計實現

int isjudlegal(production p) //判斷產生式是否合法

for(i=0;i

if('-'||'>')

while('\0')

right=0;

} return 1;

}int leftrecursive(production p,nonter nt[20])

int first(production p,nonter nt[20]) //計算first集

nt[i].fir=0;

}for(i=0;i

if(f)

nt[j].first[k]='*';

k++;

if(!low)

nt[j].fir=1;

for(i=0;i

j++;

for(i=0;i

for(a=0;a {

nt[i].first[a]=r[a];

編譯原理實驗報告

通過編寫和除錯乙個詞法分析程式,掌握在對程式語言的源程式進行掃瞄的過程中,將字元形式的源程式流轉化為乙個由各類單詞符號組成的流的詞法分析方法。語言中具有的單詞包括五個關鍵字begin end if then else 識別符號 整型常數 六種關係運算子 乙個賦值符和四個算術運算子。參考實現方法簡述如...

編譯原理實驗報告

軟體學院驗證性實驗報告 專業 軟體開發 net方向 年級 班級 2010級 2012 2013學年第一學期 1 實驗目的及實驗專案簡介 運用編譯程式,完成下述源程式的編譯,了解源程式的預處理功能 即通過編譯程式,將高階語言程式 源程式 翻譯成低階語言程式 目標程式 源程式的輸入 設源程式如下所示,其...

編譯原理實驗報告

設計 編制並除錯乙個詞法分析程式,加深對詞法分析原理的理解。2.1 待分析的簡單的詞法 1 關鍵字 begin if then while do end 所有的關鍵字都是小寫。2 運算子和界符 3 其他單詞是識別符號 id 和整型常數 sum 通過以下正規式定義 id letter letter d...