• 大小: 99KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-19
  • 语言: 其他
  • 标签: 编译原理  

资源简介

编译原理实验四:正规式到正规文法的转换,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

评论

共有 条评论