编译原理实验报告LL1分析法Word文档格式.docx

上传人:b****6 文档编号:19723039 上传时间:2023-01-09 格式:DOCX 页数:12 大小:16.18KB
下载 相关 举报
编译原理实验报告LL1分析法Word文档格式.docx_第1页
第1页 / 共12页
编译原理实验报告LL1分析法Word文档格式.docx_第2页
第2页 / 共12页
编译原理实验报告LL1分析法Word文档格式.docx_第3页
第3页 / 共12页
编译原理实验报告LL1分析法Word文档格式.docx_第4页
第4页 / 共12页
编译原理实验报告LL1分析法Word文档格式.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

编译原理实验报告LL1分析法Word文档格式.docx

《编译原理实验报告LL1分析法Word文档格式.docx》由会员分享,可在线阅读,更多相关《编译原理实验报告LL1分析法Word文档格式.docx(12页珍藏版)》请在冰豆网上搜索。

编译原理实验报告LL1分析法Word文档格式.docx

i+i*i#。

输出过程如下:

步骤分析栈剩余输入串所用产生式

1Ei+i*i#E->

............

二.实验过程及结果

代码如下:

#include

#include"

edge.h"

usingnamespacestd;

edge:

:

edge()

{

cin>

>

left>

right;

rlen=right.length();

if(nodE.find(left)>

nodE.length())

nodE+=left;

}

stringedge:

getlf()

returnleft;

getrg()

returnright;

getfirst()

returnfirst;

getfollow()

returnfollow;

getselect()

returnselect;

getro()

stringstr;

str+=right[0];

returnstr;

intedge:

getrlen()

returnright.length();

voidedge:

newfirst(stringw)

inti;

for(i=0;

iif(first.find(w[i])>

first.length())

first+=w[i];

newfollow(stringw)

iif(follow.find(w[i])>

follow.length()&

&

w[i]!

=&

#39;

@&

follow+=w[i];

newselect(stringw)

iif(select.find(w[i])>

select.length()&

select+=w[i];

delfirst()

inti=first.find(&

);

first.erase(i,1);

intSUm;

stringnodE,EnodE;

//计算first

voidfirst(edgeni,edge*n,intx)

inti,j;

for(j=0;

j{

if(ni.getlf()==n[j].getlf())

if(nodE.find(n[j].getro()){

iif(n[i].getlf()==n[j].getro())

first(n[i],n,x);

else

n[x].newfirst(n[j].getro());

//计算follow

voidfollow(edgeni,edge*n,intx)

inti,j,k,s;

i{

s=nodE.find(ni.getrg()[i]);

if(s-1)//是非终结符

if(ifor(j=0;

jif(n[j].getlf().find(ni.getrg()[i])==0)

if(nodE.find(ni.getrg()[i+1])for(k=0;

kif(n[k].getlf().find(ni.getrg()[i+1])==0)

n[j].newfollow(n[k].getfirst());

if(n[k].getfirst().find("

@"

)}

str.erase();

str+=ni.getrg()[i+1];

n[j].newfollow(str);

//计算select

voidselect(edge&

ni,edge*n)

if(EnodE.find(ni.getro()){

ni.newselect(ni.getro());

if(ni.getro()=="

ni.newselect(ni.getfollow());

jif(ni.getrg()[i]==n[j].getlf()[0])

ni.newselect(n[j].getfirst());

if(n[j].getfirst().find(&

)>

n[j].getfirst().length())return;

//输出集合

voidout(stringp)

if(p.length()==0)

return;

coutfor(i=0;

cout}

//连续输出符号

voidoutfu(inta,stringc)

icout}

//输出预测分析表

voidoutgraph(edge*n,string(*yc)[50])

inti,j,k;

boolflag;

if(EnodE[i]!

下页编译原理实验报告LL

(1)分析法

outfu(10,"

"

coutintx;

outfu(4,"

coutoutfu(5,"

for(k=0;

k{

flag=1;

if(nodE[i]==n[j].getlf()[0])

x=n[j].getselect().find(EnodE[k]);

if(x-1)

cout"

yc[i][k]=n[j].getrg();

outfu(9-n[j].getrlen(),"

flag=0;

x=n[j].getselect().find(&

#&

if(k==EnodE.length()-1&

x-1){

yc[i][j]=n[j].getrg();

if(flag&

EnodE[k]!

outfu(11,"

//分析符号串

intpipei(string&

chuan,string&

fenxi,string(*yc)[50],int&

b){

charch,a;

intx,i,j,k;

b++;

if(b>

9)

outfu(8,"

outfu(9,"

coutoutfu(26-chuan.length()-fenxi.length(),"

coutoutfu(10,"

a=chuan[0];

ch=fenxi[fenxi.length()-1];

x=EnodE.find(ch);

if(ch==a)

fenxi.erase(fenxi.length()-1,1);

chuan.erase(0,1);

coutif(pipei(chuan,fenxi,yc,b))

return1;

return0;

if(ch==&

coutreturn1;

()return0;

if(pipei(chuan,fenxi,yc,b))return1;

i=nodE.find(ch);

if(a==&

x=EnodE.find(&

if(x-1)j=EnodE.length()-1;

j=EnodE.length();

j=EnodE.find(a);

if(yc[i][j].length())

for(k=yc[i][j].length()-1;

k>

-1;

k--)if(yc[i][j][k]!

fenxi+=yc[i][j][k];

voidmain()

edge*n;

boolflag=0;

coutcin>

SUm;

coutn=newedge[SUm];

iif(nodE.find(str[j])>

nodE.length()&

EnodE.find(str[j])>

EnodE.length())EnodE+=str[j];

}//计算first集合for(i=0;

i}//outfu(10,"

~*~"

ibreak;

}}if(n[j].getfirst().find("

n[j].getfirst().length()){n[i].delfirst();

break;

}}

}}//计算follow集合for(k=0;

kfollow(n[i],n,i);

}for(i=0;

i}}//计算select集合for(i=0;

i}for(i=0;

ifor(j=0;

jelse{for(k=0;

kbreak;

}}}}//输出

上页下页余下全文编译原理实验报告LL

(1)分析法

coutoutfu(SUm,"

coutoutfu(5+SUm,"

-*-"

i"

coutoutfu(SUm+4,"

out(n[j].getfirst());

outfu(SUm+4-2*n[j].getfirst().length(),"

out(n[j].getfollow());

coutbreak;

}}outfu(5+SUm,"

;

if(flag){coutreturn;

}else{cout}//输出预测分析表coutyc=newstring[nodE.length()][50];

outgraph(n,yc);

stringchuan,fenxi,fchuan;

chuan;

fchuan=chuan;

fenxi="

#"

fenxi+=nodE[0];

i=0;

coutcoutoutfu(7,"

coutoutfu(8,"

coutif(pipei(chuan,fenxi,yc,i))

coutelse

截屏如下:

三.实验中的问题及心得

这次实验让我更加熟悉了LL

(1)的工作流程以及LL

(1)分析表的构造方法。

以前课堂上搞不懂的算法流程通过实验都能得到进一步的了解。

上页

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 建筑土木

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1