資源簡介
LR(0)完整的語法分析方法(拓廣文法、識別活前綴狀態機、LR0表、識別字符串)內有word詳細說明

代碼片段和文件信息
//?ConsoleApplication14.cpp?:?此文件包含?“main“?函數。程序執行將在此處開始并結束。
//
#include?
#include
#include
#include
#include
#include
#include
#include
#include
#include
using?namespace?std;
set?N_;
set?T_;
set?ALL_;
stack?s;
struct?pragram
{
string?left;
string?right;
}pragram[200];
struct?all
{
????string?left;
????vector?right;
}all[20];
int?ncount1=1;
int?showVet(vector?a)
{
????for(int?i=0;i ????{
????????cout<????}
????cout< }
int?input()?????//拆解表達式
{
????freopen(“input.txt““r“stdin);???//可以選擇文件?1(PPT109頁面)?121(PPT121頁面)??118(PPT118頁面)
cin?>>?n;
for?(int?i?=?0;?i? {
string?left;
cin?>>?left;
char?c;
int?t=-1;
while?(1)
{
scanf(“%c“&c);
????????????if(t==-1)?{t++;continue;}
if?(c?==?‘#‘)?break;
if(c==‘|‘)
????????????{
????????????????count1++;
????????????????t=0;
????????????????pragram[count1].left?=?left;
????????????????continue;
????????????}
pragram[count1].left?=?left;
pragram[count1].right?=?pragram[count1].right+c;
t++;
}
count1++;
}
cout< ????cout<<“拓廣文法后:“< ????string?a=pragram[1].left;???//拿到第一條表達式左部
????a=a+“‘“;
????pragram[0].left=a;
????pragram[0].right=pragram[1].left;
for?(int?i?=0;i {
cout?<“;
cout< ALL_.insert(pragram[i].left);
ALL_.insert(pragram[i].right);
}
cout< }
int?N()?//挑出非終極符號
{
????cout<<“非終極符號“< ????for(int?i=0;i ????{
????????string?P=pragram[i].left;
?????????N_.insert(P);
????}
????set::iterator?it;
????for(it=N_.begin();it!=N_.end();it++)
????{
????????cout<<*it< ????}
}
int?split()?????//分離所有符號
{
????string?bc;
????set::iterator?itit_Nit1;
????for(it=ALL_.begin();it!=ALL_.end();)
????{
????????int?check=0;
????????string?a=*it;
????????int?t=a.find(“?“);??????????//空格拆分
????????if(t!=-1)
????????{
????????????b=a.substr(0t);
????????????c=a.substr(t+1a.length());
????????????check=1;
????????}
????????if(check==1)
????????{
????????????ALL_.erase(it);
????????????ALL_.insert(b);
????????????ALL_.insert(c);
????????????it=ALL_.begin();
????????}
????????else
????????{
????????????++it;
????????}
????}
}
int?T()?????//挑選終極符號
{
????set::iterator?itit_Nit1;
????for(it=T_.begin();it!=T_.end();)
????{
????????int?check=0;
????????string?a=*it;????????????????????????????????//拿到字符
????????for(it_N=N_.begin();it_N!=N_.end();it_N++)
????????{
????????????string?b=*it_N;
????????????if(a==b)
????????????{???check=1;
????????????????break;
????????????}
????????}
????????if(check==1)
????????{
????????????T_.erase(it++);
????????}
????????else{
????????????it++;
????????}
????}
????cout<<“終極符號“< ????for(it1=T_
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2019-01-07?16:11??LR0分析表\
?????文件???????54658??2019-01-07?15:47??LR0分析表\LR0表.jpg
?????文件??????????60??2019-01-07?15:52??LR0分析表\input.txt
?????文件???????17987??2019-01-07?16:09??LR0分析表\main.cpp
?????文件?????1151997??2019-01-07?16:09??LR0分析表\main.exe
?????文件??????135860??2019-01-07?16:09??LR0分析表\main.o
?????文件??????426088??2019-01-07?16:10??LR0分析表\reader_me.docx
?????文件??????119091??2019-01-07?16:01??LR0分析表\活前綴自動機圖.jpg
?????文件???????56668??2019-01-07?15:47??LR0分析表\進程圖.jpg
- 上一篇:基于STM32的鋰電池組并行充電系統的設計
- 下一篇:ansys導線找形命令流
評論
共有 條評論