課程編譯原理實驗名稱實驗二 ll(1)分析法
實驗目的
1.掌握ll(1)分析法的基本原理;
2.掌握ll(1)分析表的構造方法;
3.掌握ll(1)驅動程式的構造方法。
一. 實驗內容及要求
根據某一文法編制除錯ll(1)分析程式,以便對任意輸入的符號串進行分析。本次實驗的目的主要是加深對**分析ll(1)分析法的理解。
對下列文法,用ll(1)分析法對任意輸入的符號串進行分析:
(1)e->tg
(2)g->+tg
(3)g->ε
(4)t->fs
(5)s->*fs
(6)s->ε
(7)f->(e)
(8)f->i
程式輸入一以#結束的符號串(包括+*()i#),如:i+i*i#。輸出過程如下:
二. 實驗過程及結果
**如下:
#include
#include "edge.h"
using namespace std;
edge::edge()
string edge::getlf()
string edge::getrg()
string edge::getfirst()
string edge::getfollow()
string edge::getselect()
string edge::getro()
int edge::getrlen()
void edge::newfirst(string w)
void edge::newfollow(string w)
void edge::newselect(string w)
void edge::delfirst()
int sum;
string node,enode;
//計算first
void first(edge ni,edge *n,int x)
}}//計算follow
void follow(edge ni,edge *n,int x)
}//計算select
void select(edge &ni,edge *n)
else
for(i=0;i
}}//輸出集合
void out(string p)
cout<}
//連續輸出符號
void outfu(int a,string c)
//輸出**分析表
void outgraph(edge *n,string (*yc)[50])
}outfu(10," ");
cout<<"#"< int x;
for(i=0;i
cout< }
}//分析符號串
int pipei(string &chuan,string &fenxi,string (*yc)[50],int &b)
else
return 0;
}else
else
return 0;
}else
if(ch=='@')
else
{i=node.find(ch);
if(a=='#')
x=enode.find('@');
if(x-1)
編譯原理 實驗報告3LL1
大學電腦科學與技術學院實驗報告 計算機基礎實驗教學中心編制 成績指導教師 簽字 存檔 實驗課程名稱 編譯原理課程設計 實驗專案 ll1語法分析程式開發 實驗儀器 機房計算機 實驗要求 1 理解ll 1 分析法的主要原理 2 理解ll 1 分析法對文法的要求 3 熟練掌握predict集合的求法 4 ...
編譯原理詞法分析實驗報告
實驗1 詞法分析實驗報告 一 實驗目的 除錯並完成乙個詞法分析程式,加深對詞法分析原理的理解。二 實驗要求 1 待分析的簡單語言的詞法 1 關鍵字 begin if then while do end 所有關鍵字都是小寫。2 運算子和界符 3 其他單詞是識別符號 id 和整型常數 num 通過以下正...
編譯原理詞法分析實驗報告
實驗一詞法分析器設計 實驗目的 1 熟悉詞法分析的基本原理,詞法分析的過程和詞法分析中要注意的問題。2 複習高階語言,進一步加強用高階語言來解決實際問題的能力。3 通過完成詞法分析程式,了解詞法分析的過程。實驗內容 用c語言編寫乙個pl 0詞法分析器,為語法語義分析提供單詞,使之能把輸入的字串形式的...