编译语法分析器实验

编译语法分析器实验

ID:8924977

大小:61.50 KB

页数:7页

时间:2018-04-12

编译语法分析器实验_第1页
编译语法分析器实验_第2页
编译语法分析器实验_第3页
编译语法分析器实验_第4页
编译语法分析器实验_第5页
资源描述:

《编译语法分析器实验》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

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

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

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

4、接下来还需要尝试着写成动态的,任意输入文法,可进行First集,Follow集的分析输出,判断是不是LL(1)文法,再进行预测分析。六.附录:源代码(电子版)#include#include#includecharA[20];/*分析栈*/charB[20];/*输入串*/charv1[20]={'i','+','-','*','/','(',')','#'};/*终结符*/FILE*fop;charv2[20]={'E','G','T','S','

5、F'};/*非终结符*/intj=0,b=0,top=0,l;/*L为输入串长度*/typedefstructtype/*产生式类型定义*/{charorigin;/*大写字符*/chararray[5];/*产生式右边字符*/intlength;/*字符个数*/}type;typee,t,g,g0,g1,s,s0,s1,f,f1;/*结构体变量*/typeC[10][10];/*预测分析表*//*输出分析栈*/voidprint(){inta;for(a=0;a<=top+1;a++)fprintf(

6、fop,"%c",A[a]);fprintf(fop,"tt");fflush(fop);}/*输出剩余串*/voidprint1(){intj;for(j=0;j

7、m][n]*//*把文法产生式赋值结构体*/e.origin='E';strcpy(e.array,"TG");e.length=2;t.origin='T';strcpy(t.array,"FS");t.length=2;g.origin='G';strcpy(g.array,"+TG");g.length=3;g0.origin='G';strcpy(g0.array,"-TG");g0.length=3;g1.origin='G';g1.array[0]='^';g1.length=1;s.ori

8、gin='S';strcpy(s.array,"*FS");s.length=3;s0.origin='S';strcpy(s0.array,"/FS");s0.length=3;s1.origin='S';s1.array[0]='^';s1.length=1;f.origin='F';strcpy(f.array,"(E)");f.length=3;f1.origin='F';f1.array[0]='i';f1.length=1;/*

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。