1 / 37
文档名称:

语法分析(完整代码)1.doc

格式:doc   大小:250KB   页数:37页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

语法分析(完整代码)1.doc

上传人:q1188830 2019/12/12 文件大小:250 KB

下载得到文件列表

语法分析(完整代码)1.doc

文档介绍

文档介绍:语法分析实验报告一、实验目的:(内部编码)符号串中的短语句型结构形成规律。(LL,LR)的智能算法化方法。二、实验内容:构造自己设计的小语言的语法分析器:(语法规则)的设计即文法的设计;(分析表)表示出来;;。主要设备和材料:电脑、winxp操作系统、VC语言系统三、实验分工:学号姓名实验分工0815053刘俊杰实验代码设计及编写0815054刘康检查校对代码0815050李晓梅写电子版实验报告0815048李姗姗查找、分析、整理资料0815066任梦杰查找、分析、整理资料0805036韩宁宁后勤服务0815117朱永庆组长助理0815097曾文亚分模块调试四、实验步骤:1、语法规则①<程序>::={<变量定义语句>|<赋值语句>|<条件语句>|<循环语句>}②<变量定义语句>::=var变量{,变量};③<赋值语句>::=变量:=<表达式>;④<表达式>::=标识符{运算符标识符};⑤<标识符>::=变量|常量⑥<运算符>::=+|-|*|/|>=|<=⑦<条件语句>::=<if语句>[<else语句>]⑧<if语句>::=if(表达式)then[begin]{赋值语句|条件语句|循环语句}[end]⑨<else语句>::=[begin]{赋值语句|条件语句|循环语句}[end]⑩<循环语句>::=while(表达式)[begin]{赋值语句|条件语句|循环语句}[end]<输出语句>::=prn表达式--注1:若if语句、else语句、循环语句中出现begin,后面的end必须出现,即begin与end同对出现--注2:if、while后的"(",")"表示终结符,而不是定义成分优先的说明符号2、分析表::=变量常量,;运算符()变量定义->②->②->②->②赋值语句->③->③->③->③->③条件语句->⑦->⑦->⑦->⑦->⑦->⑦->⑦循环语句->⑩->⑩->⑩->⑩->⑩->⑩->⑩输出语句->->->分析表(续):whilevarbeginendifthenprn变量定义->②赋值语句条件语句->⑦->⑦->⑦->⑦循环语句->⑩->⑩->⑩输出语句->调试和测试五、源代码(见附录):六、实验总结:本实验在词法分析的基础上,对提取出的标识符进行语法判断。对已有的语法规则运用LL(1)文法判别并进行构造分析表时,遇到的最大困难是:当发生规约冲突时,该如何处理。如对于产生式s-->aAb,当对a进行规约时,满足语法规则的β(用户输入串中当前要进行规约的标识符)只有有限种,而不满足的却有无限种情况。当发生规约冲突时,如何在这无限种情况中,确定冲突的具体信息,以便用户查找。在反复的尝试和验证中,我们发现发生冲突的用户输入串满足一定的规律,且按这种规律可以把这无限种情况化归为有限类,于是我们找出其中规律并进行划分,然后再对这些有限类冲突进行处理。七、实验心得:通过这次实验有以下几点收获:(1)的构造使得对理论的知识理解的更加透彻。其中LR(1)分析表构造了很多遍,一直无法得到正确结果,这是恒心的考验。,特别是对出错信息的检测有很大的作用。,在词法程序上添加语法程序,更加理解二者之间的关系。词法分析为语法分析提供了词法单元,方便分析,使程序模块化,易于读懂。附录: #include<iostream> #include<fstream> #include<string> #include<> #include<> #include<cstdlib> usingnamespacestd; #defineMax655 //最大代码长度 #defineWordMaxNum256 //变量最大个数 #defineDigitNum256 //常量最大个数 #defineMaxKeyWord 32 //关键字数量 #defineMaxOptANum8 //运算符最大个数 #defineMaxOptBNum4 //运算符最大个数 #defineMaxEndNum11 //界符最大个数 typedefstructDisplayTable { intIndex;//标识符所在表的下标 inttype; //标识符的类型 intline; //标识符所在表的行数 charsymbol[20]; //标识符所在表的名称 }Table; intTableNum=0;//display表的表项总数