实验二、语法分析器(源代码).doc

  1. 1、本文档共21页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验二、语法分析器(源代码)课案

语法分析实验报告 一、实验目的: 1. 了解单词(内部编码)符号串中的短语句型结构形成规律。 2. 理解和掌握语法分析过程中语法分析思想(LL,LR)的智能算法化方法。 二、实验内容: 构造自己设计的小语言的语法分析器: 1. 小语言的语法描述(语法规则)的设计即文法的设计; 2. 把文法形式符号中所隐含的信息内容挖掘出来并用LL或LR的资料形式(分析表)表示出来; 3. 语法分析的数据输入形式和输出形式的确定; 4. 语法分析程序各个模块的设计与调试。 主要设备和材料:电脑、winxp操作系统、VC语言系统 三、实验步骤: 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、分析表: : = 变量 常量 , ; 运算符 ( ) 变 量 定 义 -② -② -② -② 赋 值 语 句 -③ -③ -③ -③ -③ 条 件语 句 -⑦ -⑦ -⑦ -⑦ -⑦ -⑦ -⑦ 循 环语 句 -⑩ -⑩ -⑩ -⑩ -⑩ -⑩ -⑩ 输 出语 句 - - - 分析表(续): while var begin end if then prn 变 量 定 义 -② 赋 值 语 句 条 件 语 句 -⑦ -⑦ -⑦ -⑦ 循 环 语 句 -⑩ -⑩ -⑩ 输 出 语 句 - 调试和测试 四、实验总结: 本实验在词法分析的基础上,对提取出的标识符进行语法判断。对已有的语法规则运用LL(1)文法判别并进行构造分析表时,遇到的最大困难是:当发生规约冲突时,该如何处理。如对于产生式s--aAb,当对a进行规约时,满足语法规则的β(用户输入串中当前要进行规约的标识符)只有有限种,而不满足的却有无限种情况。当发生规约冲突时,如何在这无限种情况中,确定冲突的具体信息,以便用户查找。在反复的尝试和验证中,我们发现发生冲突的用户输入串满足一定的规律,且按这种规律可以把这无限种情况化归为有限类,于是我们找出其中规律并进行划分,然后再对这些有限类冲突进行处理。 五、实验心得: 通过这次实验有以下几点收获: 1. LR(1)的构造使得对理论的知识理解的更加透彻。其中LR(1)分析表构造了很多遍,一直无法得到正确结果,这是恒心的考验。 2. 在写程序中用类数组来存放单词属性使得对单词各项值的调用更加方便,特别是对出错信息的检测有很大的作用。 3. 本实验是在词法基础上的更进一步,在词法程序上添加语法程序,更加理解二者之间的关系。词法分析为语法分析提供了词法单元,方便分析,使程序模块化,易于读懂。 六、附录: #include iostream #include fstream #include string #include math.h #include ctype.h #include cstdlib using namespace std; #define Max 655 //最大代码长度 #define WordMaxNum 256 //变量最大个数 #define DigitNum 256 //常量最大个数 #define MaxKeyWord 32 //关键字数量 #define MaxOptANum 8 //运算符最大个数 #define MaxOptBNum 4 //运算符最大个数 #define MaxEndNum 11 //界符最

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档