logo资料库

语法分析器源代码.doc

第1页 / 共37页
第2页 / 共37页
第3页 / 共37页
第4页 / 共37页
第5页 / 共37页
第6页 / 共37页
第7页 / 共37页
第8页 / 共37页
资料共37页,剩余部分请下载后查看
语法分析实验报告 一、实验目的: 1. 了解单词(内部编码)符号串中的短语句型结构形成规律。 2. 理解和掌握语法分析过程中语法分析思想(LL,LR)的智能算 法化方法。 二、实验内容: 构造自己设计的小语言的语法分析器: 1. 小语言的语法描述(语法规则)的设计即文法的设计; 2. 把文法形式符号中所隐含的信息内容挖掘出来并用 LL 或 LR 的资料形式(分析表)表示出来; 3. 语法分析的数据输入形式和输出形式的确定; 4. 语法分析程序各个模块的设计与调试。 主要设备和材料:电脑、winxp 操作系统、VC 语言系统 三、实验分工: 学 号 姓 名 实 验 分 工 08 08150 0815 实验代码设计及编写 检查校对代码 写电子版实验报告
查找、分析、整理资料 查找、分析、整理资料 08150 08150 08050 0815 081 四、实验步骤: 1、语法规则 ① <程序> ::= {<变量定义语句> | <赋值语句> | <条件 语句> | ② <变量定义语句> ::= var 变量{,变量}; <循环语句> } ③ <赋值语句> ::= 变量 := <表达式>; ④ <表达式> ::= 标识符{运算符 标识符 }; ⑤ <标识符> ::= 变量 |常量 ⑥ <运算符 > ::= + | - | * | / | >= | <= ⑦ <条件语句> ::= [] ⑧ ::= 语句 | 循环语句}[end] if(表达式) then[begin] {赋值语句 |条件 [begin] {赋值语句 | 条件语句 | 循 ⑨ ::= 环语句} [end] ⑩ <循环语句> ::= while(表达式) [begin] {赋值语句 | 条 件语句 | 循环语句} [end] <输出语句> ::= prn 表达式
--注 1:若 if 语句、else 语句、循环语句中出现 begin,后面的 end 必须出现,即 begin 与 end 同对出现 --注 2:if、while 后的"(",")"表示终结符,而不是定义成分优 先的说明符号 2、分析表: : = 变量 常量 , ; 运 算 ( ) 符 变 量 定 义 ->② ->② ->② ->② 赋 值 语 句 ->③ ->③ ->③ ->③ ->③ 条 件 语 句 ->⑦ ->⑦ ->⑦ ->⑦ ->⑦ ->⑦ ->⑦ 循 环 语 句 ->⑩ ->⑩ ->⑩ ->⑩ ->⑩ ->⑩ ->⑩ 输 出 语 句 -> -> -> 分析表(续): while var begin end if then prn
->② 变 量 定 义 赋 值 语 句 条 件 语 句 ->⑦ ->⑦ ->⑦ ->⑦ 循 环 语 句 ->⑩ ->⑩ ->⑩ 输 出 语 句 3、调试和测试 ->
五、源代码(见附录):
六、实验总结: 本实验在词法分析的基础上,对提取出的标识符进行语法判断。 对已有的语法规则运用 LL(1)文法判别并进行构造分析表时,遇到的 最大困难是:当发生规约冲突时,该如何处理。如对于产生式 s-->aAb, 当对 a 进行规约时,满足语法规则的β(用户输入串中当前要进行规 约的标识符)只有有限种,而不满足的却有无限种情况。当发生规约 冲突时,如何在这无限种情况中,确定冲突的具体信息,以便用户查 找。在反复的尝试和验证中,我们发现发生冲突的用户输入串满足一 定的规律,且按这种规律可以把这无限种情况化归为有限类,于是我 们找出其中规律并进行划分,然后再对这些有限类冲突进行处理。 七、实验心得: 通过这次实验有以下几点收获: 1. LR(1)的构造使得对理论的知识理解的更加透彻。其中 LR(1) 分析表构造了很多遍,一直无法得到正确结果,这是恒心的考验。 2. 在写程序中用类数组来存放单词属性使得对单词各项值的调用更 加方便,特别是对出错信息的检测有很大的作用。 3.本实验是在词法基础上的更进一步,在词法程序上添加语法程序, 更加理解二者之间的关系。词法分析为语法分析提供了词法单元,方 便分析,使程序模块化,易于读懂。 附录: #include
分享到:
收藏