資源簡介
編譯原理實現(xiàn)LL(1)包括消除左遞歸,求First集,F(xiàn)ollow集,預(yù)測分析表,預(yù)測分析過程

代碼片段和文件信息
#include?“StdAfx.h“
#include?“CSyntaxAnalysis.h“
CSyntaxAnalysis::CSyntaxAnalysis(void)
{
}
CSyntaxAnalysis::~CSyntaxAnalysis(void)
{
}
void?CSyntaxAnalysis::ClearAll()
{
startLL?=?““;?????????????????????????//??LL(1)開始符號????????
Terminator.clear();???????????????????//??保存終結(jié)符????????????
Non_Terminator.clear();???????????????//??保存非終結(jié)符???????????
Input_Grammar.clear();????????????????//??保存當(dāng)初輸入的文法?????
NoLeftRe_Grammar.clear();?????????????//??保存消除左遞歸的文法???
Left.clear();?????????????????????????//??保存消除左遞歸后的文法的左部集合??????
HaveVisited.clear();??????????????????//??保存非終結(jié)符是否訪問過??????????????
NoLeftRe_Grammar_Gather.clear();???//??保存左部->右邊集合形如?A:{sA‘@}????
FirstGather.clear();???????????????//???First?集合?????????????????????????
FollowGather.clear();??????????????//???Follow?集合????????????????????????
????SelectGather.clear();??????????????//???Select?集合????????????????????????
anaStr.clear();????????????????????//???要分析的字符串??
ShowHaveMatch.clear();????//?顯示的已匹配?
ShowStaGrammar.clear();???//?顯示的隊列???
ShowInput.clear();????????//?顯示的輸入???
ShowActions.clear();??????//?顯示的動作???
}
//?總流程控制
void?CSyntaxAnalysis::Commander()
{
if(JudgeGrammar())??????????//?判斷輸入的文法是否合法
{
UniteOR();??????????????//?合并能合并的?文法
RemoveLeft_Recursive();?//?消除左遞歸
SplitOR();??????????????//?拆分能拆分的?文法
GetLEFT_GATHER();???????//?獲得左部->集合
FindLeft();?????????????//?獲得左部集合
GetFirstGather(0);??????//?查找First集合
for?(int?i?=?0;i? {
?????????????HaveVisited[i]?=?false;
}
GetFollowGather(0);?//??獲得FOLLOE集合
GetSelectGather();??//??獲得SELECT集
if(!IsLegalLL())????//??判斷是不是LL(1)
AfxMessageBox(“NOT?THE?LL(1)!“);
else????????????????//??執(zhí)行分析過程?
{
PredictAnalysis(anaStr);
}
}
else//??錯誤信息?
{
CString?infor?=?“文法錯誤,請檢查!“;
infor.Append(“\r\n“);
infor.Append(“不合法情況:“);
infor.Append(“\r\n“);
infor.Append(“(1)形如?A->A“);
infor.Append(“\r\n“);
infor.Append(?“(2)形如?A->“);
AfxMessageBox(infor);
}
}
//---------------------------------------------------------------------------------------------------------
//?判斷文法是否合法
//????滿足條件:
//???(1)左部以非終結(jié)符開始,并且只有一個
//???(2)右部必須有非終結(jié)符,并且只能用零個或多個終結(jié)符和非終結(jié)符組成
//????不合法情況
//???(1)??形如?A->A
//???(2)??形如?A->
bool?CSyntaxAnalysis::JudgeGrammar()
{
for(int?i?=?0;i? {
int?nEnd?=?0;
bool?HaveNon_T?=?false;????//?記錄右邊是否含有非終結(jié)符
CString?startGrammar?=?““;?//?左部字符
nEnd?=?Input_Grammar[i].Find(“->“);
startGrammar?=?Input_Grammar[i].Mid(0?nEnd);
if?(startGrammar?==?Input_Grammar[i].Mid(nEnd?+?2?Input_Grammar[i].GetLength()?-?nEnd?-?2))
return?false;//???(1)??形如?A->A
if?((Input_Grammar[i].GetLength()?-?nEnd?-?2)?0)
return?false;//???(2)??形如?A->
if(find(Non_Terminator.begin()?Non_Terminator.end()?startGrammar)?==?Non_Terminator.end())
return?false;//????不是非終結(jié)符
for(int?j?=?nEnd?+?2;j?
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????62194??2010-12-08?16:40??Syntax_Analysis\Syntax_Analysis\CSyntaxAnalysis.cpp
?????文件???????4039??2010-12-07?18:31??Syntax_Analysis\Syntax_Analysis\CSyntaxAnalysis.h
?????文件???????1000??2010-12-07?14:43??Syntax_Analysis\Syntax_Analysis\ExampleDlg.cpp
?????文件????????413??2010-12-07?14:37??Syntax_Analysis\Syntax_Analysis\ExampleDlg.h
?????文件????????491??2010-12-01?21:44??Syntax_Analysis\Syntax_Analysis\InforDlg.cpp
?????文件????????363??2010-12-01?21:44??Syntax_Analysis\Syntax_Analysis\InforDlg.h
?????文件???????3035??2010-11-30?22:38??Syntax_Analysis\Syntax_Analysis\ReadMe.txt
?????文件??????21630??2005-09-23?09:25??Syntax_Analysis\Syntax_Analysis\res\Syntax_Analysis.ico
?????文件????????371??2010-11-30?22:38??Syntax_Analysis\Syntax_Analysis\res\Syntax_Analysis.rc2
?????文件???????1469??2010-12-07?14:49??Syntax_Analysis\Syntax_Analysis\resource.h
?????文件????????146??2010-11-30?22:38??Syntax_Analysis\Syntax_Analysis\stdafx.cpp
?????文件???????2489??2010-11-30?22:38??Syntax_Analysis\Syntax_Analysis\stdafx.h
?????文件??????61744??2010-12-07?14:52??Syntax_Analysis\Syntax_Analysis\Syntax_Analysis.aps
?????文件???????1766??2010-11-30?22:38??Syntax_Analysis\Syntax_Analysis\Syntax_Analysis.cpp
?????文件????????495??2010-11-30?22:38??Syntax_Analysis\Syntax_Analysis\Syntax_Analysis.h
?????文件???????8720??2010-12-07?14:52??Syntax_Analysis\Syntax_Analysis\Syntax_Analysis.rc
?????文件???????5967??2010-12-07?14:37??Syntax_Analysis\Syntax_Analysis\Syntax_Analysis.vcproj
?????文件???????1427??2010-12-08?16:40??Syntax_Analysis\Syntax_Analysis\Syntax_Analysis.vcproj.LIUCHANGCHUN-PC.Administrator.user
?????文件???????1405??2010-12-03?17:00??Syntax_Analysis\Syntax_Analysis\Syntax_Analysis.vcproj.PC92.Administrator.user
?????文件???????9919??2010-12-07?19:55??Syntax_Analysis\Syntax_Analysis\Syntax_AnalysisDlg.cpp
?????文件???????1014??2010-12-07?14:52??Syntax_Analysis\Syntax_Analysis\Syntax_AnalysisDlg.h
?????文件????????910??2010-12-02?20:24??Syntax_Analysis\Syntax_Analysis.sln
????..A..H.?????53760??2010-12-08?16:40??Syntax_Analysis\Syntax_Analysis.suo
?????目錄??????????0??2010-12-03?23:15??Syntax_Analysis\Syntax_Analysis\res
?????目錄??????????0??2010-12-08?16:41??Syntax_Analysis\Syntax_Analysis
?????目錄??????????0??2010-12-08?16:45??Syntax_Analysis
-----------?---------??----------?-----??----
???????????????244767????????????????????26
評論
共有 條評論