- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
标准文档
实用文案
编译方法 实 验 报 告
实验名称:简单的语法分析程序设计
实验要求
功能:对简单的赋值语句进行语法分析
随机输入赋值语句,输出所输入的赋值语句与相应的四元式
采用递归下降分析程序完成(自上而下的分析)
确定各个子程序的功能并画出流程图
文法如下:
编码、调试通过
采用标准输入输出方式。输入输出的样例如下:
【样例输入】
x:=a+b*c/d-(e+f)
【样例输出】(说明,语句和四元式之间用5个空格隔开)
T1:=b*c ? ? (*,b,c,T1)
T2:=T1/d ? ? (/,T1,d,T2)
T3:=a+T2 ? ? ?(+,a,T2,T3)
T4:=e+f ? ? (+,e,f,T4)
T5:=T3-T4 ? ? (-,T3,T4,T5)
x:=T5 ? ? (:=,T5,-,x)??
【样例说明】程序除能够正确输出四元式外,当输入的表达式错误时,还应能检测出语法错误,给出相应错误提示。
设计3-5个赋值语句测试实例,检验程序能否输出正确的四元式;当输入错误的句子时,检验程序能够给出语法错误的相应提示信息。
报告内容包括:
递归程序的调用过程,各子程序的流程图和总控流程图,详细设计,3-5个测试用例的程序运行截图及相关说明,有详细注释的程序代码清单等。
目录
TOC \o 1-3 \h \z \u 1.语法分析递归下降分析算法 5
1.1背景知识 5
1.2消除左递归 6
2.详细设计及流程图 6
2.1 函数void V( ) // V - a|b|c|d|e...|z 6
2.2 函数void A( ) // A - V:=E 7
2.3 函数void E() //E - TE 7
2.4函数void T( ) // T - FT 8
2.5函数void E1( ) //E- +TE|-TE|null 8
2.6函数void T1() // T- *FT|/FT|null 9
3.测试用例及截图 9
3.1测试用例1及截图 9
3.2测试用例2及截图 10
3.3测试用例3及截图 11
代码清单 11
1.语法分析递归下降分析算法
1.1背景知识
无回溯的自上向下分析技术可用的先决条件是:无左递归和无回溯。
无左递归:既没有直接左递归,也没有间接左递归。
无回溯:对于任一非终结符号U的产生式右部x1|x2|…|xn,其对应的字的首终结符号两两不相交。
如果一个文法不含回路,也不含以ε为右部的产生式,那么可以通过执行消除文法左递归的算法消除文法的一切左递归(改写后的文法可能含有以ε为右部的产生式)。
文法的左递归消除算法:
1、将文法G的所有非终结符排序为U1 ,U2 ,… ,Un;
2、For(i=1;i++;i≥n)
{
for j→1 to i-1
把产生式Ui→Ujα替换成Ui→β1α| β2α|…|βmα;
其中:Uj→ β1| β2 |… |βm 消除Ui产生式中的直接左递归;
}
3.化简改写之后的文法,删除多余产生式。
文法的直接左递归消除公式:
直接左递归形式:
U→Ux|y;
其中:x,y∈(VN∪VT)* ,y不以U打头。
直接左递归的消除:
U→yU?
U?→xU?|ε
直接左递归的一般形式:
U→Ux1|Ux2|…|Uxm|y1|y2|…|yn;
其中:xi≠ε ,yi都不以U打头。
一般形式直接左递归的消除:
U→y1U?| y2U? |…| ynU?
U?→x1U?| x2U?| …| xmU?|ε
回溯的消除的前提是文法不得含有左递归,可提左因子来消除回溯。
1.2消除左递归
根据实验中给出的文法,进行消除左递归及回溯,得到下列的式子
A - V:=E
E - TE
E- +TE|-TE|null
T - FT
T- *FT|/FT|null
F - V|(E)
V - a|b|c|d|e...|z
2.详细设计及流程图
根据消除左递归后的文法,可以编写相应的函数。
2.1 函数void V( ) // V - a|b|c|d|e...|z
void V() // V - a|b|c|d|e...|z函数设计主要用来识别小写字母的,如果是小写字母的话,放入字符表,不是的话,输出语法错误。函数比较简单,代码如下:
if(islower(s[sym]))
{
Table[list_n][0] = s[sym]; //把读取的小写字母存入符号表,便于分析是生成中间代码
Table[list_n][1] = \0;
list_n++;
sym++;
文档评论(0)