-
大小: 664KB文件類型: .rar金幣: 2下載: 0 次發(fā)布日期: 2022-11-27
- 語言: 其他
- 標(biāo)簽: 語法分析??實(shí)驗(yàn)報(bào)告??LL(1)??LR??
資源簡介
一:實(shí)驗(yàn)內(nèi)容:
編寫語法分析程序,實(shí)現(xiàn)對(duì)算術(shù)表達(dá)式的語法分析,要求所分析的算術(shù)表達(dá)式由如下的文法產(chǎn)生。
◆E->E+T|E-T|T
◆T->T*F|T/F|F
◆F->id|(E)|num
二:實(shí)驗(yàn)要求:
在對(duì)表達(dá)式進(jìn)行分析的同時(shí),輸出所采用的產(chǎn)生式。
可以采用多種方法
◆編寫遞歸調(diào)用程序,實(shí)現(xiàn)自頂向下的分析。
◆編寫LL(1)語法分析程序,要求:
◇編程實(shí)現(xiàn)算法4.2,為給定的文法自動(dòng)構(gòu)造預(yù)測分析表
◇編程實(shí)現(xiàn)算法4.1,構(gòu)造LL(1)預(yù)測分析程序,
◆編寫語法分析程序,實(shí)現(xiàn)自底向上的分析,要求:
◇構(gòu)造識(shí)別所有活前綴的DFA
◇構(gòu)造LR分析表
◇編程實(shí)現(xiàn)算法4.3,構(gòu)造LR分析程序
◆利用yacc自動(dòng)生成語法分析程序,調(diào)用LEX自動(dòng)生成的詞法分析器程序

代碼片段和文件信息
#include?
#include?
#include?
#define?PRO_NUM?11??//產(chǎn)生式個(gè)數(shù)?
#define?PRO_MAXLEN?8??//產(chǎn)生式最大長度?
#define?TER_NUM?9??//終結(jié)符個(gè)數(shù)?
#define?UNTER_NUM?5??//非終結(jié)符個(gè)數(shù)
#define?F_MAXLEN?8??//FIRST集和FOLLOW集的大小?
#define?STR_MAXLEN?50??//待分析的輸入表達(dá)式的最大長度?
#define?IDNUM_MAXLEN?10??//待分析的輸入表達(dá)式中id和num的的最大長度?
#define?ERROR?-1??//分析表項(xiàng)為空白,錯(cuò)誤入口?
#define?SYNCH?-2??//分析表項(xiàng)為同步信息synch,同步錯(cuò)誤入口?
#define?ID?1??//字母標(biāo)記?
#define?NUM?2??//數(shù)字標(biāo)記
#define?OTHER?0??//其他字符標(biāo)記?
#define?TRUE?1
#define?FALSE?0
#define?NOTFOUND?-1
typedef?int?Status;??//返回狀態(tài)類型?
using?namespace?std;
char?grammar[PRO_NUM][PRO_MAXLEN];??//文法表?
char?ter_symbol[TER_NUM];??//終結(jié)符表?
char?unter_symbol[UNTER_NUM];??//非終結(jié)符表?
char?FIRST[UNTER_NUM][F_MAXLEN];??//FIRST集
char?FOLLOW[UNTER_NUM][F_MAXLEN];??//FOLLOW集
int?M[UNTER_NUM][TER_NUM];??//LL(1)語法預(yù)測分析表
char?str[STR_MAXLEN+1];??//輸入緩沖區(qū)
deque?s;
//構(gòu)成LL(1)分析器基本函數(shù)?
void?Initial?(void);??//初始化
void?Create_Analysis?(void);??//構(gòu)造LL(1)語法預(yù)測分析表?
void?GetString?(void);??//獲取待分析輸入表達(dá)式????????????????
void?Analyse_Output?(void);??//使用LL(1)語法預(yù)測分析表分析輸入的表達(dá)式并輸出分析結(jié)果
//LL(1)分析器輔助函數(shù)?
int?GetStrLen?(void);??//獲取輸入表達(dá)式的長度?
Status?Judge_Ter?(char?ch);??//判斷字符ch是否為終結(jié)符?
Status?Judge_Unter?(char?ch);??//判斷字符ch是否為非終結(jié)符
int?Get_Ter_Num?(char?ch);??//返回終結(jié)符ch在終結(jié)符表中的下標(biāo)?
int?Get_Unter_Num?(char?ch);??//返回非終結(jié)符ch在終結(jié)符表中的下標(biāo)?
Status?In_FIRST?(char?A?char?ch);??//判斷終結(jié)符ch是否在非終結(jié)符A的FIRST集中
Status?In_FOLLOW?(char?A?char?ch);??//判斷終結(jié)符ch是否在一個(gè)非終結(jié)符A的FOLLOW集中
void?Output_Pro?(int?i);??//打印分析過程中輸出的產(chǎn)生式
void?Output_Stack?(void);??//打印當(dāng)前棧中的符號(hào)
void?Output_Buffer?(int?ip);??//打印當(dāng)前輸入緩沖區(qū)中的符號(hào)串
Status?Judge_Id?(char?ch);??//判斷字符ch是否為構(gòu)成id的字母
Status?Judge_Num?(char?ch);??//判斷字符ch是否為構(gòu)成num的數(shù)字
Status?Judge_Exceed?(void);??//判斷輸入表達(dá)式中代表id和num的子串是否超過最大長度
int?main?()
{?
????Initial();??//初始化?
????Create_Analysis();??//構(gòu)造LL(1)語法預(yù)測分析表?
????GetString();??//獲取待分析輸入表達(dá)式?
????Analyse_Output?();??//使用LL(1)語法預(yù)測分析表分析輸入的表達(dá)式并輸出分析結(jié)果
system(“pause“);
????return?0;
}
void?Initial?(void)??//初始化
{
????int?i?j;???
????s.push_back(‘$‘);
????s.push_back(‘E‘);??//初始化棧:構(gòu)造空棧,并壓入‘$‘與‘E‘?
????//設(shè)置文法表,存儲(chǔ)P代表E‘,Q代表T‘,e代表εi代表id,n代表num?
????strcpy?(grammar[0]?“E#TP#“);??//E?→TE‘
????strcpy?(grammar[1]?“P#+TP#“);??//E‘?→+TE‘
????strcpy?(grammar[2]?“P#-TP#“);??//E‘?→-TE‘
????strcpy?(grammar[3]?“P#e#“);??//E‘?→ε
????strcpy?(grammar[4]?“T#FQ#“);??//T?→FT‘
????strcpy?(grammar[5]?“Q#*FQ#“);??//T‘?→*FT‘
????strcpy?(grammar[6]?“Q#/FQ#“);??//T‘?→/FT‘?
????strcpy?(grammar[7]?“Q#e#“);??//T‘?→ε
????strcpy?(grammar[8]?“F#i#“);??//F?→id
????strcpy?(grammar[9]?“F#(E)#“);??//F?→(E)
????strcpy?(grammar[10]?“F#n#“);??//F?→num
????
????for?(i?=?0;?i?????????for?(j?=?0;?j?????????????M[i][j]?=?ERROR;???
????strcpy?(ter_symbol?“+-*/()in$“);??//初始化終結(jié)符表??
????strcpy?(unter_symbol?“EPTQF“);??//初始化非終結(jié)符表???
????
????//初始化FIRST集
????strcpy?(FIRST[0]?“(in#“);
????strcpy?(FIRST[1]?“+-e#“)
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件??????15166??2012-12-28?19:16??語法分析程序的設(shè)計(jì)與實(shí)現(xiàn)\語法分析器方法2.cpp
?????文件??????11588??2012-12-28?21:11??語法分析程序的設(shè)計(jì)與實(shí)現(xiàn)\語法分析器方法3.cpp
?????文件??????26908??2013-01-15?13:03??語法分析程序的設(shè)計(jì)與實(shí)現(xiàn)\語法分析實(shí)驗(yàn)報(bào)告.docx
?????文件?????680042??2012-12-26?22:33??語法分析程序的設(shè)計(jì)與實(shí)現(xiàn)\語法分析程序的設(shè)計(jì)與實(shí)現(xiàn).pdf
?????目錄??????????0??2013-01-15?13:06??語法分析程序的設(shè)計(jì)與實(shí)現(xiàn)
-----------?---------??----------?-----??----
???????????????733704????????????????????5
評(píng)論
共有 條評(píng)論