ll1实验Word下载.docx
- 文档编号:20871668
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:10
- 大小:17.62KB
ll1实验Word下载.docx
《ll1实验Word下载.docx》由会员分享,可在线阅读,更多相关《ll1实验Word下载.docx(10页珍藏版)》请在冰豆网上搜索。
请输入待分析的字符串:
i+i*i
符号栈
输入串
所用产生式
#E
i+i*i#
#E’T
#E’T’F
i+i*i#
F→i
#E’T’i
#E’T’
+i*i#
T’→ε
#E’
E’→+TE’
#E’T+
+i*i#
i*i#
i*i#
*i#
T’→*FT’
#E’T’F*
*i#
i#
i#
#
E’→ε
#
#
六、程序思路
模块结构:
1、定义部分:
定义常量、变量、数据结构。
2、初始化:
设立LL
(1)分析表、初始化变量空间(包括堆栈、结构体等);
3、运行程序:
让程序分析一个text文件,判断输入的字符串是否符合文法定义的规则;
4、利用LL
(1)分析算法进行表达式处理:
根据LL
(1)分析表对表达式符号串进行堆栈(或其他)操作,输出分析结果,如果遇到错误则显示简单的错误提示。
七、程序流程图
输入要分析的串
判断输入串是否正确
判断分析句型
是否完全匹配?
成功
失败
否
是
八、程序调试与测试结果
运行后结果如下:
九、实验心得
沈毅:
递归下降分析法是确定的自上而下分析法,这种分析法要求文法是LL
(1)文法。
它的基本思想是,对文法中的每个终结符编写一个函数(或子程序),每个函数(或子程序)的功能是识别由该非终结符所表示的语法成分。
由于描述语言的文法常常是递归定义的,因此相应的这组函数(或子程序)必然以相互递归的方式进行调用。
当然实验中我也发现了自己的不足之处,我会在今后的学习生活中努力提高自己的编程水平.
吴立杰:
我们选用自顶向下分析技术时,首先必须判断所给文法是否是LL
(1)文法,然后编写构造LL
(1)语法分析程序。
因而对任给文法需计算FIRST、FOLLOW、SELECT集合,进而判别文法是否为LL
(1)文法.通过本次实验,不仅使我编译原理的知识更加巩固,而且可以使理论与实践相结合,更好的掌握所学知识。
我也发现自己的不足之处,以后会多加改正。
林建兴:
LL
(1)表明自顶向下分析技术是从左向右扫描输入串,分析过程中将用最左推导,以及只需向右看一个符号便可决定如何推导的一种文法。
通过这次实验,我加深对预测分析LL
(1)分析法的理解。
知道对任意文法需要计算FIRST、FOLLOW集合和SELECT集合,进而判别文法是否为LL
(1)文法。
让我更深一层次的认识了这种分析方法,有助于今后的学习,对编程的发展有了更大的空间。
十、参考文献:
教材:
《编译原理(第2版)》,吕映芝、张素琴、蒋维杜编著,清华大学出版社
教学参考书:
1、《编译程序设计原理》,杜淑敏、王永宁编著,北大出版社
2、《编译原理与实现》,金成植编著,高教出版社
3、《编译原理》,陈火旺、刘春林等编著,国防工业出版社
附件:
程序清单:
/*程序名称:
LL
(1)文法分析程序*/
/*E->
E+T|T*/
/*T->
T*F|F*/
/*F->
(E)|i*/
/************************************/
/********************************************/
/*程序相关说明*/
/*A=E’B=T’*/
/*0=E1=E’2=T3=T’4=F*/
/*0=i1=+
2=*
3=(6=)4=#*/
#include"
iostream.h"
#include"
stdio.h"
malloc.h"
conio.h"
structLchar{
charchar_ch;
structLchar*next;
}Lchar,*p,*h,*temp,*top,*base;
charcurchar;
charcurtocmp;
intright;
inttable[5][8]={{1,0,0,1,0,0},
{0,1,0,0,1,1},
{1,0,0,1,0,0},
{0,1,1,0,1,1},
{1,0,0,1,0,0}};
inti,j;
voidpush(charpchar)
{
temp=(structLchar*)malloc(sizeof(Lchar));
temp->
char_ch=pchar;
next=top;
top=temp;
}
voidpop(void)
curtocmp=top->
char_ch;
if(top->
char_ch!
='
#'
)
top=top->
next;
voiddoforpush(intt)
switch(t)
case0:
push('
A'
);
T'
break;
case5:
case11:
+'
case20:
B'
F'
case23:
case32:
*'
case40:
i'
case43:
)'
E'
('
voidchangchartoint()
switch(curtocmp)
case'
:
i=1;
i=3;
i=0;
i=2;
i=4;
switch(curchar)
j=0;
j=1;
j=2;
j=3;
j=4;
j=5;
voiddosome(void)
intt;
for(;
;
pop();
curchar=h->
printf("
\n%c\t%c"
curchar,curtocmp);
if(curtocmp=='
&
&
curchar=='
||curtocmp=='
if(curtocmp!
changchartoint();
if(table[i][j])
t=10*i+j;
doforpush(t);
continue;
else
right=0;
=curchar)
h=h->
voidmain(void)
charch;
cout<
<
"
*文件名称:
语法分析"
endl;
"
/*程序相关说明*/"
cout<
---------------------------------------------------------------------"
-/*A=E’B=T’*/"
-*目
的:
对输入LL
(1)文法字符串,本程序能自动判断所给字符串是
-"
-*
否为所给文法的句子,并能给出分析过程。
-*-------------------------------------------------------------------"
表达式文法为:
E->
E+T|T"
T->
T*F|F"
F->
(E)|i"
请在下行输入要分析的串(#号结束):
right=1;
base=(structLchar*)malloc(sizeof(Lchar));
base->
next=NULL;
char_ch='
next=base;
h=(structLchar*)malloc(sizeof(Lchar));
h->
p=h;
do{
ch=getch();
putch(ch);
if(ch=='
||ch=='
-'
/'
char_ch=ch;
next=temp;
temp=p->
\nInputawrongchar!
Inputagain:
\n"
if(temp!
=NULL)
%c"
temp->
char_ch);
temp=temp->
}while(ch!
p=p->
h=p;
dosome();
if(right)
\n成功!
\n错误!
getch();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ll1 实验
![提示](https://static.bdocx.com/images/bang_tan.gif)