编译语法分析器实验

上传人:tia****nde 文档编号:36881824 上传时间:2018-04-03 格式:DOC 页数:7 大小:61.50KB
返回 下载 相关 举报
编译语法分析器实验_第1页
第1页 / 共7页
编译语法分析器实验_第2页
第2页 / 共7页
编译语法分析器实验_第3页
第3页 / 共7页
编译语法分析器实验_第4页
第4页 / 共7页
编译语法分析器实验_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《编译语法分析器实验》由会员分享,可在线阅读,更多相关《编译语法分析器实验(7页珍藏版)》请在金锄头文库上搜索。

1、 编译原理编译原理实验报告实验报告题题 目目: 语法分析器语法分析器一一. 实验目的及实验环境实验目的及实验环境 1:进一步熟悉编译原理程序设计语言。 2:学习语法分析器的几点要求。 3:学习语法分析器的设计,并编写简单语法分析程序。 二二. 实验内容实验内容1)任意输入一个文法 G;2) 处理文法中可能存在的左递归和公共左因子问题;3) 对文法中的每个非终结符自动生成并打印输出:(未实现,提前写 死 LL(1)文法) FIRST 集; FOLLOW 集;4)判断处理后的文法是否为 LL(1)文法,如果是,自动生成并打印输出其预测分析表;5) 模拟分析过程。如输入一个句子,如果该句子合法则输出

2、与句子对应的语法树;能够输出分析过程中每一步符号栈的变化情况。如果该句子非法则进行相应的报错处理。 3方案设计方案设计 1:总控程序: 分析栈顶符号为 X, 输入符为 a, 分析过程:X=a=# ,分析成功;X=a=#, X 出栈,输入指针指向下一符号;XVN,查分析表,将产生式右部逆序入栈。 2:测试文法:3:采用的数据结构及算法描述建立两个数组,A 数组用来存放分析栈中的内容,B 数组用来存放输入串 中的内容。首先给分析栈赋值为#E,开始扫描输入串中的文法(如:i) ,查找 建好的预测分析表,E,i 所用的产生式,再将产生式逆序输入存放到分析栈 A 中替换原来的非终结符 E。依次往下找,直

3、至找到产生式 i,即可实现匹配,此 时,分析栈-即将 i 出栈,输入串+向后继续扫描,当产生式为 时,产生式 不入栈,分析栈-,直到两个数组都是#,即完成了分析。 四测试数据及运行结果四测试数据及运行结果(1):程序编译结果截图(2):程序编译后分析表中内容截图五总结五总结作为编译原理第二次上机-语法分析器,是基于第一次词法分析器的基础 上的。程序存在的问题是,没有对输入的文法进行分析判断是不是 LL(1)文 法,而是直接写死的 LL(1)文法,建好分析表,在分析语法时直接查表的, 所以接下来还需要尝试着写成动态的,任意输入文法,可进行 First 集,Follow 集的分析输出,判断是不是

4、LL(1)文法,再进行预测分析。 六附录:六附录:源代码(电子版) #include #include #include char A20;/*分析栈*/ char B20;/*输入串*/ char v120=i,+,-,*,/,(,),#;/*终结符 */ FILE *fop; char v220=E,G,T,S,F;/*非终结符 */int j=0,b=0,top=0,l;/*L 为输入串长度 */typedef struct type/*产生式类型定义 */ char origin; /*大写字符 */ char array5;/*产生式右边字符 */ int length;/*字符个数 */ type;type e,t,g,g0,g1,s,s0,s1,f,f1;/*结构体变量 */ type C1010;/*预测分析表 */ /*输出分析栈 */ void print() int a; for(a=0;a“,cha.origin);/*输出产生式*/for(j=0;j=0;j-) /*产生式逆序入栈*/ A+top=cha.arrayj;if(Atop=)/*为空则不进栈*/ top-; else print(); print1(); fprintf(fop,“%c 出错n“,x); exit(1); while(finish=0);

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 试题/考题

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号