递归下降分析器的设计

递归下降分析器的设计

ID:9814268

大小:113.00 KB

页数:9页

时间:2018-05-10

递归下降分析器的设计_第1页
递归下降分析器的设计_第2页
递归下降分析器的设计_第3页
递归下降分析器的设计_第4页
递归下降分析器的设计_第5页
资源描述:

《递归下降分析器的设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、河北大学工商学院编译原理实验报告河北大学工商学院编译原理实验报告年级09级学号姓名成绩专业计算机科学与技术实验地点B3-216指导教师李凯实验项目递归下降分析器的设计实验日期2012/5/14实验报告要求:一、实验目的1.实验目的使用递归子程序法设计一个语法分析程序,理解自顶向下分析方法的原理,掌握手工编写语法分析程序的方法。2.了解什么是LL(1)文法的,以及如何把一个非ll(1)的文法转化为非ll(1)型文法,深入了解如何根据ll(1)文法编写递归子程序,实现语法的检查。3.深入了解编译程序语法分析

2、的过程。二、实验原理1.基本原理递归下降法是语法分析中最易懂的一种方法。它的主要原理是,对每个非终极符按其产生式结构构造相应语法分析子程序,其中终极符产生匹配命令,而非终极符则产生过程调用命令。因为文法递归相应子程序也递归,所以称这种方法为递归子程序下降法或递归下降法。其中子程序的结构与产生式结构几乎是一致的。2.文法要求递归下降法要满足的条件:假设A的全部产生式为Aα1

3、α2

4、……

5、αn,则必须满足如下条件才能保证可以唯一的选择合适的产生式Select(A->αi)∩select(A->αj)=Φ,当

6、i≠j,即要求文法必需满足ll(1)文法。共9页第9页6/22/2021河北大学工商学院编译原理实验报告3.开发工具要求本程序使用C语言写的,要求掌握C语言的基本语法和语义,特别是关于程序递归调用的要求。4.文法的BNF式:E->EaT

7、T;T->TbF

8、FF->(E)

9、da:=+

10、-b:=*

11、/消除左递归之后的文法E->TE’E’->aTE’

12、εT->bFT’

13、εT’->bFT’F->(E)

14、da:=+

15、-b:=*

16、/三、实验要求【目的】使用递归子程序法设计一个语法分析程序,理解自顶向下分析方法的原理

17、,掌握手工编写语法分析程序的方法。【要求】1、使用递归下降分析算法分析表达式文法:exp::=expaddopterm

18、term共9页第9页6/22/2021河北大学工商学院编译原理实验报告addop::=+

19、-term::=termmulopfactor

20、factormulop::=*

21、/factor::=(exp)

22、number其中number可以是多位的十进制数字串(整数即可),因此这里还需要一个小的词法分析器来得到number的值。2、该词法分析器以子程序形式出现,当需要进行词法分析时进行调用;

23、3、能够识别正确和错误的表达式;4、在进行语法分析的过程中,计算输入表达式的值。四、实验结果(程序)及分析程序源代码:#include#include#include"file.h"intright=1;charch[100];inti=0;voidmain(){intj=0;charc;FILE*fp;if((fp=fopen("Source.txt","r"))==NULL)共9页第9页6/22/2021河北大学工商学院编译原理实验报告{printf("file

24、openerror");exit(0);}c=fgetc(fp);while(!feof(fp)){ch[j]=c;j++;c=fgetc(fp);}e();if(right)printf("分析成功");elseprintf("分析失败,输入的表达式不合法,请重新输入");}voide(){t();e1();}共9页第9页6/22/2021河北大学工商学院编译原理实验报告voidt(){f();t1();}voidt1(){if(ch[i]=='*'

25、

26、ch[i]=='/'){i++;f(

27、);t1();}elseif(ch[i]!='#'&&ch[i]!=')'&&ch[i]!='+'&&ch[i]!='-')right=0;}voide1(){if(ch[i]=='+'

28、

29、ch[i]=='-'){i++;共9页第9页6/22/2021河北大学工商学院编译原理实验报告t();e1();}elseif(ch[i]=='#'

30、

31、ch[i]==')')return;elseright=0;}voidf(){if(ch[i]>='0'&&ch[i]<='9')isnumber();elseif(

32、ch[i]=='('){i++;e();if(ch[i]==')'){i++;}共9页第9页6/22/2021河北大学工商学院编译原理实验报告elseright=0;}elseright=0;}voidisnumber(){while(ch[i]>='0'&&ch[i]<='9'){i++;}}File.h中的代码:voide();voidf();voidt();voidt1();voide1();voidisnumber();实验结果分析

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。