编译原理实验报告LL1分析法.docx
- 文档编号:23529633
- 上传时间:2023-05-18
- 格式:DOCX
- 页数:19
- 大小:32.41KB
编译原理实验报告LL1分析法.docx
《编译原理实验报告LL1分析法.docx》由会员分享,可在线阅读,更多相关《编译原理实验报告LL1分析法.docx(19页珍藏版)》请在冰豆网上搜索。
编译原理实验报告LL1分析法
河南工业大学实验报告
课程编译原理实验名称实验二LL
(1)分析法
实验目的
1.掌握LL
(1)分析法的基本原理;
2.掌握LL
(1)分析表的构造方法;
3.掌握LL
(1)驱动程序的构造方法。
一.实验内容及要求
根据某一文法编制调试LL
(1)分析程序,以便对任意输入的符号串进行分析。
本次实验的目的主要是加深对预测分析LL
(1)分析法的理解。
对下列文法,用LL
(1)分析法对任意输入的符号串进行分析:
(1)E->TG
(2)G->+TG
(3)G->ε
(4)T->FS
(5)S->*FS
(6)S->ε
(7)F->(E)
(8)F->i
程序输入一以#结束的符号串(包括+*()i#),如:
i+i*i#。
输出过程如下:
步骤
分析栈
剩余输入串
所用产生式
1
E
i+i*i#
E->TG
...
...
...
...
二.实验过程及结果
代码如下:
#include
#include"edge.h"
usingnamespacestd;
edge:
:
edge()
{
cin>>left>>right;
rlen=right.length();
if(NODE.find(left)>NODE.length())
NODE+=left;
}
stringedge:
:
getlf()
{
returnleft;
}
stringedge:
:
getrg()
{
returnright;
}
stringedge:
:
getfirst()
{
returnfirst;
}
stringedge:
:
getfollow()
{
returnfollow;
}
stringedge:
:
getselect()
{
returnselect;
}
stringedge:
:
getro()
{
stringstr;
str+=right[0];
returnstr;
}
intedge:
:
getrlen()
{
returnright.length();
}
voidedge:
:
newfirst(stringw)
{
inti;
for(i=0;i if(first.find(w[i])>first.length()) first+=w[i]; } voidedge: : newfollow(stringw) { inti; for(i=0;i if(follow.find(w[i])>follow.length()&&w[i]! ='@') follow+=w[i]; } voidedge: : newselect(stringw) { inti; for(i=0;i if(select.find(w[i])>select.length()&&w[i]! ='@') select+=w[i]; } voidedge: : 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()) { for(i=0;i if(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; stringstr; for(i=0;i { s=NODE.find(ni.getrg()[i]); if(s if(i for(j=0;j if(n[j].getlf().find(ni.getrg()[i])==0) { if(NODE.find(ni.getrg()[i+1]) { for(k=0;k if(n[k].getlf().find(ni.getrg()[i+1])==0) { n[j].newfollow(n[k].getfirst()); if(n[k].getfirst().find("@") n[j].newfollow(ni.getfollow()); } } else { str.erase(); str+=ni.getrg()[i+1]; n[j].newfollow(str); } } } } //计算select voidselect(edge&ni,edge*n) { inti,j; if(ENODE.find(ni.getro()) { ni.newselect(ni.getro()); if(ni.getro()=="@") ni.newselect(ni.getfollow()); } else for(i=0;i { for(j=0;j if(ni.getrg()[i]==n[j].getlf()[0]) { ni.newselect(n[j].getfirst()); if(n[j].getfirst().find('@')>n[j].getfirst().length()) return; } } } //输出集合 voidout(stringp) { inti; if(p.length()==0) return; cout<<"{"; for(i=0;i { cout< } cout< } //连续输出符号 voidoutfu(inta,stringc) { inti;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 实验 报告 LL1 分析