1、手机端页面文档仅支持阅读 15 页,超过 15 页的文档需使用电脑才能全文阅读。
2、下载的内容跟在线预览是一致的,下载后除PDF外均可任意编辑、修改。
3、所有文档均不包含其他附件,文中所提的附件、附录,在线看不到的下载也不会有。
然后再把相应的规则逆向压入栈顶,替换原栈顶的非终结符。
分析表的构造分析表它是用来反映分析栈中的元素与输入串中元素的种匹配关系。
如果分析栈中的元素为,输入元素为,则其匹配关系记为,分析矩阵种用来反映这种匹配关系的矩阵表示,该矩阵称为分析矩阵。
首先进行介绍与分析有关的个操作约定表示继续下个符号表示重读当前符号,也即不读入下符号表示用的逆串替换栈顶符号。
构造分析表的方法如下对于,,则令,表示用的逆串替换后,继续读入下个符号。
当为时,即,有,对于,判断文法是否有左递归!错误!文法有左递归存在,不符合的要求错误算法分析模块本模块首先获取文法的终结符集和非终结符集,分别用维数组进行保存然后在对文法的每条规则求集,并将集保存到二维数组中最后对集做相关判断,以确定所读入的文法是否符合文法的规则。
程序中所用到的公有数据成员有文法的行数终结符的个数非终结符的个数,集用与临时存放集中元素的数组终结符集非终结符集求集设有文法,并有规则,则该规则的可选集为具体实现代码如下,为空当不为空当εε为空字符串求集首符号集既求解文法每条规则右边的第个符号并且必须是终结符,因为文法使用数组存放,所以既求文法每行规则的第个字符既可如果规则左边第个字符为非终结符,则通过循环对该非终结符再求首符号集。
,判断第条规则右边的首符号是否是终结符判断,在中是否已经存在求集求向前看集主要分两种情况,种是可以直接循环推导出终结符第二种是推出的还是非终结符的,如果推出的还是非终结符的就循环对该非终结符再求向前看集第三种情况是不能对该非终结符求向前看集,但是可以通过对该非终结符推导出的第二个非终结符求向前看集的方法求出终结符。
判断是不是对文法起始符求集判断,在中是否已经存在判断,是不是终结符,判断,在中是否已经存在查找,对应的非终结符在文法的第几行,分析表构造模块在已经得到文法集的前提下,以次为依据,对文法的三种类型的规则型型ε型分别构造分析表,并用个三维数组保存。
形如,其中,表示分析表的第行,表示第列,表示第行第列所对应的格子中的第个数据。
构造文法分析表在求解集完成后,结果按照非终结符放入分析表轴,没有出现在对应规则右部首部的终结符放入分析表轴,终结符放入分析表轴等规则放置。
如图。
文法分析表终结符非终结符文法可选集未出现在对应规则右部首部的终结符放入分析表轴放入分析表轴放入分析表轴图分析表构造流程规则对于,,则令,表示用的逆串替换后,继续读入下个符号。
当为时,即,有,规则对于,,且有„则,,„,表示用的逆串替换后,重读当前符号ε规则对于,且有„,则,句子分析模块本部分主要通过中的对话框读入待分析句子,并与分析表进行对照,逐步分析所输入的句子是否符合文法。
分析过程均用维数组进行保存。
相关程序片段如下程序中所用到的公有数据成员有存放句子分析过程中的分析栈存放句子分析过程中的输入符号栈读取句子读取句子分析句子现在我们把句型的右端部分逆向放入分析堆栈中,使成为栈顶,利用分析栈,当栈顶符号与输入串当前符号相匹配时,则从栈顶删除该符号。
然后再把相应的规则逆向压入栈顶,替换原栈顶的非终结符。
ε特殊问题及解决方法在程序的开发过程中,遇到的问题及解决办法如下集的求解问题描述解决方案通过参照编译原理中集和集的具体求解步骤,通过多重循环的嵌套,完成了集的求解过程,具体代码请参照节。
解决结果在成功获得集后,对其进行了输出,结果如图所示图显示集为添加水平滚动条问题描述在中,系统提供的只有垂直滚动条,而没有水平滚动条。
当控件中行的数据超过的宽度时,数据会显示不完整。
添加的水平滚动条的宽度也应该能动态的改变,以最宽的行数据为水平滚动条宽度的依据。
解决方案解决结果运行后的结果如图所示图的水平滚动条结果测试在系统开发完成后,对系统各个功能做了详细的测试,对于正确的文法,系统能正常的演示整个文法分析的每个过程对于预设置的错误处理,系统也能给出正确的判断,指出文法的错误类型。
测试正确文法测试错误文法句子错误有种情况句子不符合文法,错误提示如图所示图句子不符合文法句子中有终结符以外的字符,错误提示如图所示图句子不符合文法结论编译原理是计算机专业中最难的门课程,在理论上它要求学生掌握有关形势语言和自动机的抽象概念,在技术上要求学生能够熟练地利用各种数据结构进行编程。
尤其对于向前看集的算法实现,我觉得是最难的部分,因为涉及到的情况太多,循环和选择句型的嵌套使用如果不仔细分析就容易出现错误。
在数据的处理上我采用各模块全数组操作,并且将最终结果通过字符串方式保存,通过字符串来向其他模块传送数据,这种新的尝试也让我的程序带有个人的风格,让我对编程的多样化有了更深的了解和认识。
通于文法,其每个非终结符的不同规则具有不相交的集,则称该文法为文法。
算法简介自顶向下分析对于文法,给顶个待分析的句子字符串,自顶向下分析的基本思想是从识别符号
