资源描述:
《北邮大三上-编译原理-语法分析实验报告.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、编译原理第四章语法分析班级:09211311学号:姓名:schnee目录1.实验题目和要求12.递归调用预测分析实现自顶向下分析(方法1)21.消除左递归……………………………………………………………………………………………………………………….22.画状态转移图………………………………………………………………………………………………………………33.编程实现递归调用自顶向下分析……………………………………………………………………….33.LR实现自底向上分析(方法三)61.构造识别所有活前缀的DFA…………………………………………………………………………………………
2、………………….62.构造LR分析表…………………………………………………………………………………………………………………….73.编程实现算法4.3,实现自底向上LR分析…………………………………………………………………………………..84.运行结果截图………………………………………………………………………………………………………………………….11141.实验题目和要求题目:语法分析程序的设计与实现。实验内容:编写语法分析程序,实现对算术表达式的语法分析。要求所分析算术表达式由如下的文法产生。实验要求:在对输入表达式进行分析的过程中,输出所采用的产生式。方法1:编
3、写递归调用程序实现自顶向下的分析。方法2:编写LL(1)语法分析程序,要求如下。(1)编程实现算法4.2,为给定文法自动构造预测分析表。(2)编程实现算法4.1,构造LL(1)预测分析程序。方法3:编写语法分析程序实现自底向上的分析,要求如下。(1)构造识别所有活前缀的DFA。(2)构造LR分析表。(3)编程实现算法4.3,构造LR分析程序。方法4:利用YACC自动生成语法分析程序,调用LEX自动生成的词法分析程序。141.递归调用预测分析实现自顶向下分析(方法1)(1)消除文法左递归。文法改写为:(2)画出状态图得012E:TE¢E¢T3456E¢:+-e789T:
4、FT¢T¢F10T¢:*/11131214e14151617(E)idnumF:化简得036+-eTE:7813*/FeT:14151617(E)idnumF:(1)预测分析程序的实现①说明定义函数error()为错误处理子程序。定义函数forward_pointer()为指向输入串的指针前进一位的相关子程序。定义字符cur_token为当前记号,即语法分析时的终结符。对应三个非终结符,各定义一个子程序。主函数从开始符出发。②源程序1414141.LR实现自底向上分析(方法三)(1)构造识别所有活前缀的DFA。构造扩展文法FIRST和FOLLOW集如下ETFFIRST
5、id,(,numid,(,numid,(,numFOLLOW$,),+,-$,),+,-,*,/$,),+,-,*,/构造识别所有活前缀的DFA如下14(1)构造LR分析表。(1)(4)(7)(2)(5)(8)(3)(6)(9)状态actiongoto+-*/idnum()$ETF0s4S6S5123141s7s8acc2r3r3s9s10r3r33r6r6r6r6r6r64r7r7r7r7r7r75s4s6s511236r9r9r9r9r9r97s4s6s51238s4s6s51339s4s6s51410s4s6s51511s7s8s161612r1r1s9s10r
6、1r113r2r2s9s10r2r214r4r4r4r4r4r415r5r5r5r5r5r516r8r8r8r8r8r8(1)编程实现算法4.3,构造LR分析程序。14141414(1)运行结果截图:①输入符号串为id+id,即记号流为404时的运行结果②输入符号串为(id+id)*num/(id-num),即记号流为token={6,4,0,4,7,2,5,3,6,4,1,5,7};时的运行结果14①错误处理示例,输入符号串为id+),即记号流为407时的运行结果14