编译原理实验报告5-语法分析程序的设计.pdf
《编译原理实验报告5-语法分析程序的设计.pdf》由会员分享,可在线阅读,更多相关《编译原理实验报告5-语法分析程序的设计.pdf(16页珍藏版)》请在三一文库上搜索。
1、. 实验 5 语法分析程序的设计(2) 一、实验目的 通过设计、 编制、调试一个典型的语法分析程序,实现对词法分析程序所提供的单词序 列进行语法检查和结构分析,进一步掌握常用的语法分析中算法优先分析方法。 二、实验内容 设计一个文法的算法优先分析程序,判断特定表达式的正确性。 三、实验要求 1、给出文法如下: GE E-T|E+T; T-F|T*F; F-i|(E); 可以构造算符优先表如下: + * ( ) i + * ( ) i 2、计算机中表示上述优先关系,优先关系的机内存放方式有两种1)直接存放, 2)为 优先关系建立优先函数,这里由学生自己选择一种方式; 1、 给出算符优先分析算法如
2、下: k:=1; Sk:= # ; REPEAT 把下一个输入符号读进a 中; IF SkVT THEN j:=k ELSE j:=k-1; WHILE Sj a DO BEGIN REPEAT Q:=Sj; IF Sj-1VT THEN j:=j-1 ELSE j:=j-2 . UNTIL Sj Q 把 Sj+1 Sk 归约为某个N; k:=j+1; Sk:=N; END OF WHILE; IF Sj a OR Sj a THEN BEGIN k:=k+1;Sk:=a END ELSE ERROR UNTIL a= # 1、 根据给出算法,利用适当的数据结构实现算符优先分析程序; 2、 利
3、用算符优先分析程序完成下列功能: 1) 手工将测试的表达式写入文本文件,每个表达式写一行,用“;”表示结束; 2) 读入文本文件中的表达式; 3) 调用实验2 中的词法分析程序搜索单词; 4) 把单词送入算法优先分析程序,判断表达式是否正确(是否是给出文法的语 言) ,若错误,应给出错误信息; 5) 完成上述功能,有余力的同学可以对正确的表达式计算出结果。 四、实验环境 PC微机 DOS操作系统或 Windows 操作系统 Turbo C 程序集成环境或 Visual C+ 程序集成环境 五、实验步骤 1、 分析文法中终结符号的优先关系; 2、 存放优先关系或构造优先函数; 3、利用算符优先分
4、析的算法编写分析程序; 4、写测试程序,包括表达式的读入和结果的输出; 5、程序运行效果,测试数据可以参考下列给出的数据。 六、测试数据 输入数据: 编辑一个文本文文件expression.txt,在文件中输入如下内容: 10; 1+2; (1+2)*3+(5+6*7); (1+2)*3+4; 1+2+3+(*4+5); (a+b)*(c+d); (ab3+de4)*5)+1; . 正确结果: (1)10; 输出:正确 (2)1+2; 输出:正确 (3)(1+2)*3+(5+6*7); 输出:正确 (4)(1+2)*3+4 输出:错误 (5)1+2+3+(*4+5) 输出:错误 (6)(a+b
5、)*(c+d) 输出:正确 (7)(ab3+de4)*5)+1 输出:错误 七、实验报告要求 实验报告应包括以下几个部分: 1、 给定文法优先关系和存放方式; + * ( ) i # + * ( e1 ) e2 e2 i e2 e2 # e3 e4 引入“ #” ,将句型包含起来并填入出错标记。使用二维数组将其存放。 2、 算符优先分析程序的算法和结构; 程序从文本文件中逐行读取表达式,每行以“;”做标记。调用词法分析程序 将这行数据分析出由一个个的单词组成的表达式,再逐个分析单词。另外,由于文 法中没写入关于标识符和常数的产生式,所以在对单词符号进行语法分析时,会将 标识符和常数自动规约为“
6、i ” 。 数据结构: . 优先关系表R:二维数组,存储了终结符+、* 、 (、 ) 、i 、#的优先关系。 符号 W :结构体,有四个成员,包括: ch:char 类型,非终结符与终结符的字符标记; po:int类型,只对终结符有效,与在R 中的位置有关,有词法分析器提 供;对于非终结符,其po 无效; val :string类型,综合属性;对终结符i ,其值由词法分析器提供;对 非终结符,其值由规约时对应的产生式的规则计算得到;对界符或运算符,val无 效; type :int类型,标记属性值类型,0 为标识符,不可计算;1 为可计算的 数值;由词法分析器提供; 注意:程序内部数值的计算和
7、标记一律使用十进制,文本中的表达式必须 为十进制整数,即如果在文本中使用八进制或十六进制,词法分析器分析后不会添 加至缓冲区,在表达式语法正确且其中不含标志符时,计算得到的结果一律使用十 进制。 例: 对于文本中十进制数字10, 其对应的初始结构体成员的值ch= i , po=5, val= ” 10” ,type=1 。 符号栈 S:符号结构体的一维数组。 算法 : 说明: GE E-T|E+T; T-F|T*F; F-i|(E); 算符优先文法并未对非终结符定义优先关系,无法对单非产生式进行规约,所 以实际上在规约时,上面的E-T,T-F 基本没有使用,而且规约时并不严格按照 产生式的右部
8、规约,只要待规约项符合句型#N1a1N2a2 NnanNn+1# (每个 ai 都是 终结符, Ni 是可有可无的非终结符), 并且相对产生式, 在相同位置有相同的非终结符即可规约,这样算符优先文法规约 很快, 但有些语法错误将无法识别,在本实验中, 只要在要规约的地方准确的判断 可规约的项,即符合句型,在不严格要求非终结符相同而终结符位置符号相同时, 存在可匹配文法的产生式,即可规约,例如:F * F 可以匹配T*F 继而规约为T。 定义用Wch 表示字符名为ch 的符号;实际程序中关于终结符优先关系的比 较是利用R获取优先关系标志的,算法中为了可读性,直接将结构体进行比较了。 从文本文件读
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 实验 报告 语法分析 程序 设计
链接地址:https://www.31doc.com/p-5229798.html