xxxx18一60岁hd中国/日韩女同互慰一区二区/西西人体扒开双腿无遮挡/日韩欧美黄色一级片 - 色护士精品影院www

  • 大小: 7KB
    文件類(lèi)型: .cpp
    金幣: 1
    下載: 1 次
    發(fā)布日期: 2021-08-14
  • 語(yǔ)言: C/C++
  • 標(biāo)簽: 編譯原理??

資源簡(jiǎn)介

預(yù)測(cè)分析程序的實(shí)現(xiàn) 設(shè)計(jì)內(nèi)容及要求: 對(duì)文法 G: E->TE' E'->+TE' E'->e T->FT' T'->*FT' T'->e F->(E) F->i 造出 G 的表驅(qū)動(dòng)的預(yù)測(cè)分析程序, 程序顯示輸出形如教材中的匹配過(guò)程。 (可正確運(yùn)行,有對(duì)應(yīng)博客記錄實(shí)驗(yàn)報(bào)告)

資源截圖

代碼片段和文件信息

#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
using?namespace?std;
void?input_G();??//LL(1)文法輸入函數(shù)以及VN和VT之間的分離
void?Select();
bool?Judge_LL1();
void?PREDICT();
void?analyze(string?str);
string?char2str(char?ch);
///*********函數(shù)聲明分隔線*******************
string?p[100];???????//表示產(chǎn)生式
int?n_chan;?????????????//產(chǎn)生式的個(gè)數(shù)
int?n_VN;
vector?VN;??????//終結(jié)符集和set_VN存儲(chǔ)相同,但向量存儲(chǔ)便于隨機(jī)訪問(wèn)
vector?VT;??????//非終結(jié)符集
set?set_VN;?????//非終結(jié)符集合和VN存儲(chǔ)相同,但集合存儲(chǔ)便于查找元素和去重
set?set_VT;?????//終結(jié)符集合
string?all_left[100];??????//產(chǎn)生式所有左部VN
string?all_right[100];??????//產(chǎn)生式所有右部VN+VN
string?S;??//開(kāi)始VN
map?Vn2Num;????//VN映射到FIRST集合下標(biāo)
map?Vt2Num;????//VN映射到FIRST集合下標(biāo)
set?SELECT[100];
vector?predict[100];??//預(yù)測(cè)分析表
string?kong?=?“error“;??//預(yù)測(cè)分析表空白處填寫(xiě)字符串
int?step?=?0;??//預(yù)測(cè)分析過(guò)程步驟序數(shù)
int?main()?{
input_G();
????Select();
????PREDICT();
????cout<<“請(qǐng)輸入對(duì)應(yīng)以上文法要分析的字符串(如i*i):“;
????string?str;
????cin>>str;
????while(str[str.length()-1]!=‘-‘){
????????analyze(str);
????????cout<????????cin>>str;
????}
return?0;
}
///輸入合法文法&&分離VT和VN
void?input_G(){
????string?tmp;???//用于拼接字符串
????string?tmp1;
????n_chan?=?8;
????p[0]?=?“E->TE‘“;
????p[1]?=?“E‘->+TE‘“;
????p[2]?=?“E‘->e“;
????p[3]?=?“T->FT‘“;
????p[4]?=?“T‘->*FT‘“;
????p[5]?=?“T‘->e“;
????p[6]?=?“F->(E)“;
????p[7]?=?“F->i“;
????///提取非終結(jié)符VN的循環(huán)
????for(int?i=0;i????????tmp?=?““;
????????tmp1?=?““;
????????//scanf(“%[^\n]“p[i]);
????????//getchar();
????????int?j=0;
????????while(p[i][j]!=‘-‘){
????????????tmp?+=?p[i][j];??//因?yàn)榉墙K結(jié)符可能是形如E‘之類(lèi)的兩個(gè)字符,所以需要拼接,遇到箭頭就結(jié)束
????????????j++;
????????}
????????j?+=?2;
????????for(;j<(int)p[i].length();j++)
????????????tmp1?+=?p[i][j];
????????cout<????????all_left[i]?=?tmp;??????//存儲(chǔ)每個(gè)產(chǎn)生式的左部
????????all_right[i]?=?tmp1;????//存儲(chǔ)每個(gè)產(chǎn)生式的右部
????????set_VN.insert(tmp);??//將每行產(chǎn)生式拼接好的非終結(jié)符插入到集合中
????}
????n_VN?=?set_VN.size();???//讀取VN個(gè)數(shù)
????///提取終結(jié)符VT的循環(huán)
????for(int?i=0;i????????int?chan_len?=?p[i].length();?//每個(gè)產(chǎn)生式的長(zhǎng)度
????????for(int?j=0;j????????????if(p[i][j]==‘>‘){
????????????????tmp?=?““;
????????????????for(int?k=j+1;k“之后的下標(biāo)
????????????????????tmp1?=?p[i][k];
????????????????????if(set_VN.count(tmp1)==0){?//count==0表示該字符不在集合中,即∈VT
????????????????????????tmp?+=?p[i][k];???????????//拼接字符串
????????????????????????tmp1?=?p[i][k+1];
????????????????????????if((k==chan_len-1)||((k????????????????????????????//判斷(已是最后一個(gè)字符||后一個(gè)字符是VN則之前的字符串是一個(gè)VT)
????????????????????????????set_VT.insert(tmp);
????????????????????????????tmp?=?““;
????????????????????????}
????????????????????}
????????????????}
????????????????break;??//本行產(chǎn)生式已掃描結(jié)束
????????????}
????}
????set_VT.erase(“‘“);??//VT集合中刪除“‘“和“e“符號(hào)

評(píng)論

共有 條評(píng)論

相關(guān)資源