实验3:LL(1)文法构造(2)

2019-03-28 12:46

for(i=0;i

if(p[i].right.length()

else //即不是0型文法 flag--;//flag=-1 if(flag>0) {

cout<

return 1; //属于1型文法 else return 0; }

int two(Chomsky *p)//2型文法 {

int flag(0); int i; if(one(p)) {

for(i=0;i

if((p[i].left.length()!=1)||!(p[i].left[0]>='A'&&p[i].left[0]<='Z')) //左部不属于一个字符或不属于非终结符 {

flag++;//则不为2型 break; } }

else//不为1型?flag=-1 flag--; if(flag>0) {

cout<

return 1; //属于2型文法 } else return 0; }

int remove(Chomsky *p,int n)//消除左递归

{//把文法的所有非终结符按某一顺序排序

int i,j,count=1,count1=n,flag=0,m,x; q[0]=p[0].left[0];

for(i=1;i

for(j=0;j

if(p[i].left==p[j].left)break; }

if(j==i)q[count++]=p[i].left[0]; }

count--;

for(i=0;i

if(p[i].left[0]==q[0]&&p[i].left[0]==p[i].right[0]) flag++;

if(flag!=0)//消除第一个非终结符的直接左递归 {

for(i=0;i

if(p[i].left[0]==q[0]) {

if(p[i].left[0]==p[i].right[0]) {

p[i].left=p[i].left+\

p[i].right=p[i].right.substr(1,p[i].right.length())+p[i].left; }

else

p[i].right=p[i].right+p[i].left+\ } }

p[count1].left=p[0].left;

p[count1++].right=\用#代替空产生式 }

//消一切左递归 for(m=0;m<=count;m++) {

for(i=0;i

if(p[i].left[0]==q[m]) {

for(j=0;j

{ for(x=m+1;x<=count;x++)

if(p[j].left[0]==q[x]&&p[j].right[0]==q[m]) {

p[count1].left=p[j].left;

p[count1].right=p[i].right+p[j].right.substr(1,p[j].right.length());

count1=count1+1; } } } }

for(j=0;j

{

for(x=m+1;x<=count;x++)

if(p[j].right[0]==q[m]&&p[j].left[0]==q[x]) {

p[j].right=\ p[j].left=\ } }

for(x=0,flag=0;x

if(p[x].left[0]==q[m]&&p[x].left[0]==p[x].right[0])

flag++;

//消直接左递归

if(flag!=0) {

for(i=0;i

if(p[i].left[0]==q[m]) {

if(p[i].left[0]==p[i].right[0])

{

p[i].left=p[i].left+\


实验3:LL(1)文法构造(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:人教版最新五年级英语教案下册完整版 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: