資源簡介
編譯_DO-WHILE循環(huán)語句的翻譯程序設計(LR方法、四元式表示)
代碼片段和文件信息
#include
#include
#include?
#include
using?namespace?std;
string?name;????//用來輸入文件名用
string?fh[30];
string?kong=“?“;
int?num;
//int?start;??????//用在輸出輸入串時確定開始的位置
//------------------------------------------------------
struct?State//定義狀態(tài)棧
{
??int?top;
??int?m[100];
};
void?InitState(State?&s)//建立狀態(tài)棧
{
?s.top=0;
}
int?PushState(State?&sint?i)//把元素壓入棧
{
??
??if(s.top==100)?return?-1;
???else?
???{ ???
??????s.m[s.top]=i;
??s.top++;
???}
???return?0;
}
int?GetStateTop(State?&s)???//取棧頂符號
{
???int?i;
???if(s.top==0)?return?-1;
???else?
???{
???int?n=s.top-1;
??????i=s.m[n];
???}
???return?i;
}
void?PopStateTop(State?&s)//刪除棧頂元素
{
??if(s.top==0)?cout<<“wrong1“;
???else?
???--s.top;
???
}
//-----------------------------------------------------------------
//定義一個用于四元式輸出的棧
struct?sys
{
int?top;
string?s[5];
};
//-----------------------------------------------------------------
//
struct?Sign//定義符號棧
{
??int?top;
??string?st[100];
};
void?InitSign(Sign?&s)//建立符號棧
{
?s.top=0;
}
int?PushSign(Sign?&sstring?str)//把元素壓入棧
{
??
??if(s.top==100)?return?-1;
???else?
???{ ???
??????s.st[s.top]=str;
??s.top++;
???}
???return?0;
}
string?GetSignTop(Sign?&s)???//取棧頂符號
{
??string?str;
??if(s.top==0)?cout<<“wrong“;
???else?
???{
??int?n=s.top-1;
??????str=s.st[n];
???}
???return?str;
}
void?PopSignTop(Sign?&s)//刪除棧頂元素
{
??if(s.top==0)?cout<<“wrong1“;
???else?
???--s.top;
???
}
//----------------------------------------------------------
//詞法分析部分
const?string?baoliuzi[]=
{
“int““double““float““void““l(fā)ong““for““if““else““while““include“
“return““break““continue““do““true““false““case““switch“
};
void?show(string?&s)
{
????fh[num]=s;
????++num;
????ofstream?fout(“詞法分析.txt“ios::out|ios::app);
if(isdigit(s[0]))
{
fout<<“<“<“< s=““;
}
else
for(int?i=0;i<18;++i)
{?
if(s==baoliuzi[i])
{
????????????????fout<<“<“<“< break;
}
if(i==17)
{
?????????if(ispunct(s[0])&&s[0]!=‘_‘)
{
?????????fout<<“<“<“< }
else
{
fout<<““< }
}
}
s=““;
}
bool?isjxf(char?ch)?????//判斷是否為界限符
{
bool?tag=0;
string?s=“{[()]};\‘\““;
for(int?i=0;i {
if(ch==s[i])
{
tag=1;
break;
}
}
return?tag;
}
bool?isblank(char?ch)???//判斷是否為空
{
bool?tag=0;
if(ch==‘?‘)
tag=1;
return?tag;
}
bool?isdian(char?ch)????//判斷是否為小數(shù)點
{
bool?tag=0;
if(‘.‘==ch)
tag=1;
return?tag;
}
void?fenxi(string?s)
{
string?yunsfbiaosf;
for(int?i=0;i {
if(isblank(s[i]))
{
????????????if(biaosf!=““)
????show(biaosf);
}
else?if(ispunct(s[i]))
{
??????if(isjxf(s[i]))
??{
????????? ?if(yunsf!=““)
?show(yunsf);
?if(biaosf!=““)
?show(biaosf);
?????
- 上一篇:杭電C++ 期末考試卷
- 下一篇:C++ RTSP/RTP流媒體客戶端源碼
評論
共有 條評論