递归下降语法分析报告程序设计

递归下降语法分析报告程序设计

ID:47056446

大小:538.99 KB

页数:21页

时间:2019-07-11

递归下降语法分析报告程序设计_第1页
递归下降语法分析报告程序设计_第2页
递归下降语法分析报告程序设计_第3页
递归下降语法分析报告程序设计_第4页
递归下降语法分析报告程序设计_第5页
资源描述:

《递归下降语法分析报告程序设计》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、标准文档编译方法实验报告实验名称:简单的语法分析程序设计实用文案标准文档实验要求1.功能:对简单的赋值语句进行语法分析随机输入赋值语句,输出所输入的赋值语句与相应的四元式2.采用递归下降分析程序完成(自上而下的分析)3.确定各个子程序的功能并画出流程图4.文法如下:实用文案标准文档1.编码、调试通过采用标准输入输出方式。输入输出的样例如下:【样例输入】x:=a+b*c/d-(e+f)【样例输出】(说明,语句和四元式之间用5个空格隔开)T1:=b*c  (*,b,c,T1)T2:=T1/d  (/,T1

2、,d,T2)T3:=a+T2   (+,a,T2,T3)T4:=e+f  (+,e,f,T4)T5:=T3-T4  (-,T3,T4,T5)x:=T5  (:=,T5,-,x)  【样例说明】程序除能够正确输出四元式外,当输入的表达式错误时,还应能检测出语法错误,给出相应错误提示。2.设计3-5个赋值语句测试实例,检验程序能否输出正确的四元式;当输入错误的句子时,检验程序能够给出语法错误的相应提示信息。3.报告内容包括:实用文案标准文档递归程序的调用过程,各子程序的流程图和总控流程图,详细设计,3-5

3、个测试用例的程序运行截图及相关说明,有详细注释的程序代码清单等。实用文案标准文档目录1.语法分析递归下降分析算法51.1背景知识51.2消除左递归62.详细设计及流程图62.1函数voidV()//V->a

4、b

5、c

6、d

7、e...

8、z62.2函数voidA()//A->V:=E72.3函数voidE()//E->TE'72.4函数voidT()//T->FT'82.5函数voidE1()//E'->+TE'

9、-TE'

10、null82.6函数voidT1()//T'->*FT'

11、/FT'

12、null93.测试

13、用例及截图93.1测试用例1及截图93.2测试用例2及截图103.3测试用例3及截图11代码清单11实用文案标准文档1.语法分析递归下降分析算法1.1背景知识无回溯的自上向下分析技术可用的先决条件是:无左递归和无回溯。无左递归:既没有直接左递归,也没有间接左递归。无回溯:对于任一非终结符号U的产生式右部x1

14、x2

15、…

16、xn,其对应的字的首终结符号两两不相交。如果一个文法不含回路,也不含以ε为右部的产生式,那么可以通过执行消除文法左递归的算法消除文法的一切左递归(改写后的文法可能含有以ε为右部的产生式)

17、。文法的左递归消除算法:1、将文法G的所有非终结符排序为U1,U2,…,Un;2、For(i=1;i++;i≥n){实用文案标准文档forj→1toi-1把产生式Ui→Ujα替换成Ui→β1α

18、β2α

19、…

20、βmα;其中:Uj→β1

21、β2

22、…

23、βm消除Ui产生式中的直接左递归;}3.化简改写之后的文法,删除多余产生式。文法的直接左递归消除公式:直接左递归形式:U→Ux

24、y;其中:x,y∈(VN∪VT)*,y不以U打头。直接左递归的消除:U→yU‟U‟→xU‟

25、ε直接左递归的一般形式:U→Ux1

26、Ux2

27、

28、…

29、Uxm

30、y1

31、y2

32、…

33、yn;其中:xi≠ε,yi都不以U打头。一般形式直接左递归的消除:U→y1U‟

34、y2U‟

35、…

36、ynU‟U‟→x1U‟

37、x2U‟

38、…

39、xmU‟

40、ε回溯的消除的前提是文法不得含有左递归,可提左因子来消除回溯。1.2消除左递归根据实验中给出的文法,进行消除左递归及回溯,得到下列的式子A->V:=E实用文案标准文档E->TE'E'->+TE'

41、-TE'

42、nullT->FT'T'->*FT'

43、/FT'

44、nullF->V

45、(E)V->a

46、b

47、c

48、d

49、e...

50、z2.详细设计及流程图根据

51、消除左递归后的文法,可以编写相应的函数。2.1函数voidV()//V->a

52、b

53、c

54、d

55、e...

56、zvoidV()//V->a

57、b

58、c

59、d

60、e...

61、z函数设计主要用来识别小写字母的,如果是小写字母的话,放入字符表,不是的话,输出语法错误。函数比较简单,代码如下:if(islower(s[sym])){Table[list_n][0]=s[sym];//把读取的小写字母存入符号表,便于分析是生成中间代码Table[list_n][1]='';list_n++;sym++;}else{printf

62、("OperandErrors!");//运算对象错误SIGN=1;exit(0);}实用文案标准文档2.2函数voidA()//A->V:=EvoidA()//A->V:=E函数主要用来实现赋值的操作,流程图如图1所示。图1A()函数流程图2.3函数voidE()//E->TE'函数E()里面主要递归调用函数T()和E'()。当没有出现语法错误时就可正常的运行。函数比较简单,代码如下:{if(SIGN==0){实用文案标准文档T();E1();}}

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

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

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