資源簡介
編譯原理實驗四:正規式到正規文法的轉換,zip文件里包含實驗報告和源代碼兩部分。

代碼片段和文件信息
#include
#include
using?namespace?std;
#define?max?50
int?NONE=1;
int?RELEFT=1;
string?stringsnoendend;//非終結符與終結符存儲
string??r;//正規式
int?m=1;//記錄產生式的個數
struct?Chomsky//正規文法結構存儲
{
string?left;
string?right;?
};?
void?apart(Chomsky?*pint?i)?//分開產生式左右部
{
int?j;
for(j=0;j if(strings[j]==‘-‘)
{
p[i].left=strings.substr(0j);
p[i].right=strings.substr(j+1strings.length()-j);
}
}
void?VNVT(Chomsky?*p)//求VN和VT
{
int?ij;
for(i=0;i {??
for(j=0;j<(int)p[i].left.length();j++)?
{
if((p[i].left[j]>=‘A‘&&p[i].left[j]<=‘Z‘))//非終結符判斷
{
if(noend.find(p[i].left[j])>100)
noend+=p[i].left[j];?
}?
else?
{
if(end.find(p[i].left[j])>100)
end+=p[i].left[j];
}
}
for(j=0;j<(int)p[i].right.length();j++)?
{
if(!(p[i].right[j]>=‘A‘&&p[i].right[j]<=‘Z‘))//終結符判斷
{
if(end.find(p[i].right[j])>100)
end+=p[i].right[j];
}
else?
{
if(noend.find(p[i].right[j])>100)
noend+=p[i].right[j];
}
}
}
}
void?print(Chomsky?*p)//輸出四元組
{
int?i;
cout< for(i=0;i cout<“<
}
void?change(string?q)//正規式到正規文法的轉換函數
{
/*char?S;//文法開始符號
p[0].left=S;//將正規式r重寫為S->r形式存儲在正規文法的第一條
p[0].right=q;
int?n;//記錄文法右邊的長度
n=p[0].right.length;
for(int?i=0;i {
if(p[0].right.[i]==)
}*/
}
void?main()
{
int?ij;
????cout<<“....................編譯原理實驗四:正規式到正規文法的轉換....................“< Chomsky?*p=new?Chomsky[max];?
????cout<<“請輸入須轉換的正規式:“< cin>>r;
cout<<“r=“< change(r);
cout<<“轉換后的正規文法是:“< print(p);//輸出最后的正規文法
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????1969??2014-05-07?17:33??4.cpp
?????文件??????169009??2015-12-13?20:44??編譯原理實驗四:正規式到正規文法的轉換.doc
評論
共有 條評論