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

資源簡介

編譯原理課程設計。 里面附有完整的C Minus詞法分析器和語法分析器。 代碼注釋相當詳細! 并且附有課程設計的報告。 詞法分析器采用表驅動構造。 語法分析器采用LL1,文法為手動輸入的文件,即可處理多種不同的文法。并生成相應的分析表,根據輸入待分析文件生成對應的抽象語法樹。 看了覺得不錯一定給好評哦!

資源截圖

代碼片段和文件信息

#include?“globals.h“

/*構造LL(1)分析表*/
void?buildMTable()
{
int?i??j??k??x?=?0?;
buildProductFirstSet();
/*對每個產生式*/
for?(?i?=?0?;?i? {
j?=?k?=?0?;
string?alpha?=?iniProduct[i].generation[0]?;
//printf(“第%d個產生式:%s->%s\t\t“iiniProduct[i].noneTerminalName.c_str()alpha.c_str());
for?(set::iterator?ite?=?proFirstSet[i].begin()?;?ite?!=?proFirstSet[i].end()?;?ite++)
{
/*對于First(alpha)中的每個記號a,都將改production添加到M[Aa]中*/
MTable[iniProduct[i].noneTerminalName][ite->c_str()]?=?production[i]?;
j++;
x++;
}

/*empty在first(alpha)中則對于follow[A]中的每個元素p,都將M[A][p]=production*/
if(?proFirstSet[i].find(“empty“)?!=?proFirstSet[i].end()?)
{
for(?set::iterator?ii?=?followSet[iniProduct[i].noneTerminalName].begin()?;?
ii?!=?followSet[iniProduct[i].noneTerminalName].end()?;?ii++)
{
/*
語法:
1.selection-stmt-1?->?else?statement
2.selection-stmt-1?->?empty
跳過2的處理,避免1的到的MTable[“selection-stmt-1“][“else“]被覆蓋
*/
if(iniProduct[i].noneTerminalName?==?“selection-stmt-1“?&&?*ii?==?“else“)?continue;
MTable[iniProduct[i].noneTerminalName][ii->c_str()]?=?production[i]?;
k++;
x++;
}
}
//printf(“sum:%d%d\n“jk);
}
//printf(“total:%d\n“x);
}

/*構造產生式的First集合*/
void?buildProductFirstSet()
{
int?i??j?;
for?(?i?=?0?;?i? {
bool?hasEmpty?=?true?;
for(?j?=?0?;?hasEmpty?&&?j? {
for(?set::iterator?ite?=?firstSet[iniProduct[i].generation[j]].begin()?;?
ite?!=?firstSet[iniProduct[i].generation[j]].end()?;?ite++)
proFirstSet[i].insert(*ite);

if(?firstSet[iniProduct[i].generation[j]].find(“empty“)?==?firstSet[iniProduct[i].generation[j]].end()?)
{
hasEmpty?=?false?;
/*跳出?。。『苤匾?/
break;
}
}
if(?j?==?iniProduct[i].generation.size()?)?proFirstSet[i].insert(“empty“);
}
}

/************************************************************************/
/*?構建語法樹???????????????????????????????????????????????????????????*/
/*?1.語法分析得到token序列,存放在char?tokenlist[][]中??????????????????*/
/*?2.根據token序列,分析棧,MTable模擬即可??????????????????????????????*/
/************************************************************************/
void?buildTree()
{
/*將$添加到tokenList的結尾*/
strcpy(tokenList[tokenNum]“$“);
tokenNum++;

int?i??j?;
tNode*?temp?;

/*將$和開始字符push進分析棧*/
top?=?0?;
pushParsingStk(“$“new?tNode(“$“));
pushParsingStk(startToken.c_str()new?tNode(startToken.c_str()));
pRoot?=?getTopNode();

i?=?0?;
while(1)
{
if(?tokenList[i][0]?==?0?)?{ i++; continue; }
if(?strcmp(parsingStk[top-1]“$“)?==?0?)?break;

/*if?the?top?of?the?parsing?stack?is?terminal?a?then?match?*/
if?(?terminal.find(parsingStk[top-1])?!=?terminal.end()?)
{
/*匹配*/
if(?strcmp(parsingStk[top-1]tokenList[i])?==?0?)
{
popParsingStk();
i++;
}
else /*匹配失敗,符號串不是文法

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2012-06-07?08:46??C?Minus語法分析器\
?????文件???????23643??2012-06-03?18:04??C?Minus語法分析器\AnalyseTable.htm
?????文件????????8956??2012-06-07?08:45??C?Minus語法分析器\buildSet.cpp
?????文件?????????262??2012-06-03?17:10??C?Minus語法分析器\c1.txt
?????文件?????????679??2012-05-21?14:41??C?Minus語法分析器\c2.txt
?????文件??????????51??2012-05-21?15:24??C?Minus語法分析器\c3.txt
?????文件??????????83??2012-06-03?18:03??C?Minus語法分析器\c4.txt
?????文件?????????151??2012-05-19?15:26??C?Minus語法分析器\calGrammar.txt
?????目錄???????????0??2012-06-07?08:46??C?Minus語法分析器\Debug\
?????文件??????469695??2012-05-21?17:29??C?Minus語法分析器\Debug\buildSet.obj
?????文件?????????206??2012-05-19?15:36??C?Minus語法分析器\Debug\delLRCMinus.txt
?????文件??????194498??2012-05-21?17:31??C?Minus語法分析器\Debug\iniGrammar.obj
?????文件????????1823??2012-05-18?11:38??C?Minus語法分析器\Debug\inputGrammar.txt
?????文件??????737359??2012-05-21?17:31??C?Minus語法分析器\Debug\LL1.exe
?????文件?????1181088??2012-05-21?17:31??C?Minus語法分析器\Debug\LL1.ilk
?????文件??????289620??2012-05-18?12:23??C?Minus語法分析器\Debug\ll1.obj
?????文件?????3636912??2012-05-21?17:31??C?Minus語法分析器\Debug\LL1.pch
?????文件?????1770496??2012-05-21?17:31??C?Minus語法分析器\Debug\LL1.pdb
?????文件??????523241??2012-05-21?17:30??C?Minus語法分析器\Debug\main.obj
?????文件??????593056??2012-05-21?17:31??C?Minus語法分析器\Debug\saveSth.obj
?????文件??????101021??2012-05-21?17:31??C?Minus語法分析器\Debug\scan.obj
?????文件??????289629??2012-05-18?12:29??C?Minus語法分析器\Debug\test.obj
?????文件???????????0??2012-05-19?00:42??C?Minus語法分析器\Debug\testdellr.txt
?????文件??????????18??2012-05-19?00:39??C?Minus語法分析器\Debug\testlr.txt
?????文件??????209159??2012-05-21?17:31??C?Minus語法分析器\Debug\util.obj
?????文件??????197632??2012-05-21?17:37??C?Minus語法分析器\Debug\vc60.idb
?????文件??????266240??2012-05-21?17:31??C?Minus語法分析器\Debug\vc60.pdb
?????文件????????2702??2012-06-03?18:04??C?Minus語法分析器\delLRCMinus.txt
?????文件????????2170??2012-06-03?18:04??C?Minus語法分析器\FirstSet.txt
?????文件????????1912??2012-06-03?18:04??C?Minus語法分析器\FollowSet.txt
?????文件????????4527??2012-05-21?15:58??C?Minus語法分析器\globals.h
............此處省略46個文件信息

評論

共有 條評論