91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

資源簡介

自己實現的編譯原理的LL1語法分析器,是自己的實驗作業,用Vs2017實現,可以直接運行,代碼注釋豐富,希望與大家交流學習!歡迎大家下載!

資源截圖

代碼片段和文件信息

#include??
#include??
#include??
#include??
#include??
#include?
#include?

#define?MAX?100?
using?namespace?std;

//?產生式的數據結構
struct?node
{
char?left;?//左部一個非終結符字母
string?right;?//右部一個字符串
};

static?int?T;
static?node?Pro[MAX];?//?產生式

//set的特性是,所有元素都會根據元素的鍵值自動排序
//vector?是向量類型,它可以容納許多類型的數據
static?set?firstSet[MAX];?//?First集?
static?set?followSet[MAX];?//?Follow集?
static?vector?terminal;?//?終結符?
static?vector?terminalN;?//?去空的終結符?
static?vector?nonterminal;?//?非終結符
static?vector?analyticalS;?//?分析棧?
static?vector?RemainE;?//?剩余輸入串?
static?int?forecastAnaly[100][100];?//?預測表?

//判斷是否為非終結符
bool?IsNonterminal(char?c)
{?
if?(c?>=?‘A‘?&&?c?<=?‘Z‘)
return?true;
return?false;
}

//?獲得非終結符集合中的元素下標?
int?GetindexN(char?c)
{
for?(int?i?=?0;?i? {
if?(c?==?nonterminal[i])
return?i;
}
return?-1;
}

//?獲得終結符集合中的元素下標?
int?Getindex(char?c)
{?
for?(int?i?=?0;?i? {
if?(c?==?terminalN[i])
return?i;
}
return?-1;
}

//?求非終結符X的的First集
void?GFirstSet(char?X)
{
int?countEmpty?=?0;?//?用于最后判斷右部非終結符的First集中,是不是都含有$
int?hasEmpty?=?0;//First(X)集中是否含有$
int?Xindex?=?GetindexN(X);//非終結符在非終結符表中的位置
for?(int?i?=?0;?i? {
//?匹配產生式左部
if?(Pro[i].left?==?X)
{
//?右部第一個符號若為終結符,直接加入first集?
if?(!IsNonterminal(Pro[i].right[0]))
{
firstSet[Xindex].insert(Pro[i].right[0]);
}
else
{
//?產生式為X->Y1..Yj..Yk形式
for?(int?j?=?0;?j? {
char?Yj?=?Pro[i].right[j];//Yj為產生式右部的符號(可能為終結符也可能為非終結符)

//?若Yj是終結符(不能產生$)則加入First(X)集后,立刻跳出循環?
if?(!IsNonterminal(Yj))
{?
firstSet[Xindex].insert(Yj);
break;
}

//?若Yj是非終結符,遞歸求出First(Yj)?
GFirstSet(Yj);
int?YjIndex?=?GetindexN(Yj);//找到Yj在非終結符表中的下標

//將Yj的First集中的非空的終結符加入First(X)中
set::iterator?it;//迭代器變量
for?(it?=?firstSet[YjIndex].begin();?it?!=?firstSet[YjIndex].end();?it++)
{
if?(*it?==?‘$‘)?//?遍歷查看First(Yj)中是否含有‘$‘(能產生空)?
hasEmpty?=?1;
else
firstSet[Xindex].insert(*it);//將FIRST(Yj)中的非$就加入FIRST(X)?
}

//?Yj不能產生空?迭代結束?
if?(hasEmpty?==?0)
break;
//??Yj能產生空繼續進行迭代運算,并累加到countEmpty中
else?
{?
countEmpty?+=?hasEmpty;
hasEmpty?=?0;
}
}
//所有右部first(Y)都有$則將$加入First(X)中?
if?(countEmpty?==?Pro[i].right.length())
firstSet[GetindexN(X)].insert(‘$‘);
}
}
}
}

//?求非終結符X的的Follow集
void?GFollowSet(char?X)
{
int?Xindex?=?GetindexN(X);//非終結符在非終結符表中的位置
for?(int?i?=?0;?i? {
int?index?=?-1;//index為非終結符X在產生式Pro[i]中右部的位置,初始化為-1

int?len?=?Pro[i].right.length();//產生式Pro[i]中右部的長度

//?尋找X在產生式中的位置index?
for?(int?j?=?0;?j? {?
if?(Pro[i].right[j]?==?X)
{
index?=?j;
break;
}

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

????..A..H.?????25600??2019-01-05?13:30??Project4\.vs\Project4\v15\.suo

?????文件???37117952??2019-01-05?13:30??Project4\.vs\Project4\v15\Browse.VC.db

?????文件???40108032??2019-01-05?13:30??Project4\.vs\Project4\v15\ipch\AutoPCH\a9a3c0dc9b480300\LL1.ipch

?????文件?????210944??2018-12-10?16:05??Project4\Debug\Project4.exe

?????文件????2145960??2018-12-10?16:05??Project4\Debug\Project4.ilk

?????文件????1650688??2018-12-10?16:05??Project4\Debug\Project4.pdb

?????文件?????727675??2018-12-10?16:05??Project4\Project4\Debug\LL1.obj

?????文件???????2475??2018-12-10?16:05??Project4\Project4\Debug\Project4.log

?????文件????????732??2018-12-10?16:05??Project4\Project4\Debug\Project4.tlog\CL.command.1.tlog

?????文件??????21038??2018-12-10?16:05??Project4\Project4\Debug\Project4.tlog\CL.read.1.tlog

?????文件????????496??2018-12-10?16:05??Project4\Project4\Debug\Project4.tlog\CL.write.1.tlog

?????文件???????1146??2018-12-10?16:05??Project4\Project4\Debug\Project4.tlog\link.command.1.tlog

?????文件???????3266??2018-12-10?16:05??Project4\Project4\Debug\Project4.tlog\link.read.1.tlog

?????文件????????476??2018-12-10?16:05??Project4\Project4\Debug\Project4.tlog\link.write.1.tlog

?????文件????????217??2018-12-10?16:05??Project4\Project4\Debug\Project4.tlog\Project4.lastbuildstate

?????文件?????175104??2018-12-10?16:05??Project4\Project4\Debug\vc141.idb

?????文件?????536576??2018-12-10?16:05??Project4\Project4\Debug\vc141.pdb

?????文件??????12597??2018-12-10?16:05??Project4\Project4\LL1.cpp

?????文件???????6062??2018-12-09?18:54??Project4\Project4\Project4.vcxproj

?????文件????????948??2018-12-05?10:54??Project4\Project4\Project4.vcxproj.filters

?????文件????????165??2018-12-05?10:46??Project4\Project4\Project4.vcxproj.user

?????文件?????????44??2018-12-09?19:22??Project4\Project4\resource.txt

?????文件???????1438??2018-12-05?10:46??Project4\Project4.sln

?????目錄??????????0??2018-12-09?19:14??Project4\.vs\Project4\v15\ipch\AutoPCH\a9a3c0dc9b480300

?????目錄??????????0??2018-12-05?10:47??Project4\.vs\Project4\v15\ipch\AutoPCH

?????目錄??????????0??2018-12-05?10:47??Project4\.vs\Project4\v15\ipch

?????目錄??????????0??2019-01-05?13:30??Project4\.vs\Project4\v15

?????目錄??????????0??2018-12-10?16:05??Project4\Project4\Debug\Project4.tlog

?????目錄??????????0??2018-12-05?10:46??Project4\.vs\Project4

?????目錄??????????0??2018-12-10?16:05??Project4\Project4\Debug

............此處省略7個文件信息

評論

共有 條評論