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

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

資源簡介

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

資源截圖

代碼片段和文件信息

#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)生式的個數(shù)
int?n_VN;
vector?VN;??????//終結(jié)符集和set_VN存儲相同,但向量存儲便于隨機(jī)訪問
vector?VT;??????//非終結(jié)符集
set?set_VN;?????//非終結(jié)符集合和VN存儲相同,但集合存儲便于查找元素和去重
set?set_VT;?????//終結(jié)符集合
string?all_left[100];??????//產(chǎn)生式所有左部VN
string?all_right[100];??????//產(chǎn)生式所有右部VN+VN
string?S;??//開始VN
map?Vn2Num;????//VN映射到FIRST集合下標(biāo)
map?Vt2Num;????//VN映射到FIRST集合下標(biāo)
set?SELECT[100];
vector?predict[100];??//預(yù)測分析表
string?kong?=?“error“;??//預(yù)測分析表空白處填寫字符串
int?step?=?0;??//預(yù)測分析過程步驟序數(shù)
int?main()?{
input_G();
????Select();
????PREDICT();
????cout<<“請輸入對應(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‘之類的兩個字符,所以需要拼接,遇到箭頭就結(jié)束
????????????j++;
????????}
????????j?+=?2;
????????for(;j<(int)p[i].length();j++)
????????????tmp1?+=?p[i][j];
????????cout<????????all_left[i]?=?tmp;??????//存儲每個產(chǎn)生式的左部
????????all_right[i]?=?tmp1;????//存儲每個產(chǎn)生式的右部
????????set_VN.insert(tmp);??//將每行產(chǎn)生式拼接好的非終結(jié)符插入到集合中
????}
????n_VN?=?set_VN.size();???//讀取VN個數(shù)
????///提取終結(jié)符VT的循環(huán)
????for(int?i=0;i????????int?chan_len?=?p[i].length();?//每個產(chǎn)生式的長度
????????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????????????????????????????//判斷(已是最后一個字符||后一個字符是VN則之前的字符串是一個VT)
????????????????????????????set_VT.insert(tmp);
????????????????????????????tmp?=?““;
????????????????????????}
????????????????????}
????????????????}
????????????????break;??//本行產(chǎn)生式已掃描結(jié)束
????????????}
????}
????set_VT.erase(“‘“);??//VT集合中刪除“‘“和“e“符號

評論

共有 條評論