如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
编译原理第四章语法分析班级:09211311学号:姓名:schnee目录TOC\o"1-3"\h\z\uHYPERLINK\l"_Toc310061760"1.实验题目和要求PAGEREF_Toc310061760\h1HYPERLINK\l"_Toc310061761"2.递归调用预测分析实现自顶向下分析(方法1)PAGEREF_Toc310061761\h21.消除左递归…………………………………………………………………………………………………………………………………………………………….22.画状态转移图…………………………………………………………………………………………………………………………………………………………33.编程实现递归调用自顶向下分析………………………………………………………………………………………………………………………….3HYPERLINK\l"_Toc310061762"3.LR实现自底向上分析(方法三)PAGEREF_Toc310061762\h61.构造识别所有活前缀的DFA………………………………………………………………………………………………………………………………….62.构造LR分析表……………………………………………………………………………………………………………………………………………………….73.编程实现算法4.3,实现自底向上LR分析…………………………………………………………………………………………………………..84.运行结果截图……………………………………………………………………………………………………………………………………………………….11实验题目和要求题目:语法分析程序的设计与实现。实验内容:编写语法分析程序,实现对算术表达式的语法分析。要求所分析算术表达式由如下的文法产生。实验要求:在对输入表达式进行分析的过程中,输出所采用的产生式。方法1:编写递归调用程序实现自顶向下的分析。方法2:编写LL(1)语法分析程序,要求如下。编程实现算法4.2,为给定文法自动构造预测分析表。编程实现算法4.1,构造LL(1)预测分析程序。方法3:编写语法分析程序实现自底向上的分析,要求如下。构造识别所有活前缀的DFA。构造LR分析表。编程实现算法4.3,构造LR分析程序。方法4:利用YACC自动生成语法分析程序,调用LEX自动生成的词法分析程序。递归调用预测分析实现自顶向下分析(方法1)消除文法左递归。文法改写为:画出状态图得化简得预测分析程序的实现说明定义函数error()为错误处理子程序。定义函数forward_pointer()为指向输入串的指针前进一位的相关子程序。定义字符cur_token为当前记号,即语法分析时的终结符。对应三个非终结符,各定义一个子程序。主函数从开始符出发。②源程序LR实现自底向上分析(方法三)构造识别所有活前缀的DFA。构造扩展文法FIRST和FOLLOW集如下ETFFIRSTid,(,numid,(,numid,(,numFOLLOW$,),+,-$,),+,-,*,/$,),+,-,*,/构造识别所有活前缀的DFA如下构造LR分析表。(1)(4)(7)(2)(5)(8)(3)(6)(9)状态actiongoto+-*/idnum()$ETF0s4S6S51231s7s8acc2r3r3s9s10r3r33r6r6r6r6r6r64r7r7r7r7r7r75s4s6s511236r9r9r9r9r9r97s4s6s51238s4s6s51339s4s6s51410s4s6s51511s7s8s161612r1r1s9s10r1r113r2r2s9s10r2r214r4r4r4r4r4r415r5r5r5r5r5r516r8r8r8r8r8r8编程实现算法4.3,构造LR分析程序。运行结果截图:输入符号串为id+id,即记号流为404时的运行结果输入符号串为(id+id)*num/(id-num),即记号流为token={6,4,0,4,7,2,5,3,6,4,1,5,7};时的运行结果错误处理示例,输入符号串为id+),即记号流为407时的运行结果