编译原理第四章-自上而下的语法分析内容总结

1.知识点概括

    第四章主要讲了编译程序典型的语法分析方法-自上而下分析法。主要包括这几部分内容:自上而下语法分析出现的问题以及解决的方法、LL(1)分析法、递归下降分析器和预测分析表的构造。语法分析是编译过程的核心部分,而语法分析的工作是判断一个输入串是否符合语法规则,那么如何去判断呢?两种方法,一种是从文法的起始符出发进行句子的推导,即自上而下的分析,第二种是从句子本身出发,进行规约,看能否把句子规约到起始符,即自下而上的规约。这里主要分析自上而下分析。

    简单的自上而下分析面临很多问题:左递归问题、回溯问题、虚假匹配、出错位置位置等。为了解决这些问题,我们学习了左递归的消除算法、消除回溯提取左因子等,进而引出了FIRST()FOLLOW()集的定义和LL(1)分析法的使用条件和算法,在明白基本原理之后,就开始构造递归下降分析程序。原理还是比较好理解的,但它的程序实现却不是那么容易,由此引入实现LL(1)分析的另一种有效方式:使用一张分析表和栈进行联合控制即预测分析程序。预测分析过程由三部分组成,预测分析表、执行程序和分析栈。对于给定的文法,要构造它的预测分析表,在这之前要先构造该文法的FIRSTFOLLOW集合,FIRSTFOLLOW集合由对应的算法构造,之后用它们来构造分析表,基本思想是这样的:设文法G的分析表为M[A,a],假如A->a是一个产生式,a属于FIRST(a),那么当a呈现于STACK栈之顶且a是当前输入符号时,a应被当做是唯一适合的全权代表。因此,M[A,a]中应当放进产生式A->a。当a=ε时,如果当前面临输入符号a属于FOLLOWA),那么,A->a就认为已经自动得到匹配,因而,应把A->a放入M[A,a],基于这个思想可以构造分析表。

2. 知识的运用

 

编译原理第四章-自上而下的语法分析内容总结

编译原理第四章-自上而下的语法分析内容总结

编译原理第四章-自上而下的语法分析内容总结

编译原理第四章-自上而下的语法分析内容总结

 

3. 思想感悟

    这一章学习了语法分析的一类--自上而下分析法,一些相关的算法,像是左递归的消除,单纯的左递归消除我觉得还是挺简单的,但是要消除文法的一切左递归我就有些小问题,往往我不能哪一些和哪一些的规则是多余的;消除回溯,相对来说还是比较简单的;对于LL(1)文法问题,FOLLOW集看定义还是有点迷糊,转着转着就转晕了,但通过做了几道课后题之后就能熟练地掌握了;课后题后面有很多关于判断是否是LL(1)文法的问题,通过做题也能熟练掌握它的判别算法了;预测分析表的关键还是先写出相应的FIRSTFOLLOW集,再根据构造算法写出预测表。第四章有很多基于自上而下分析的算法,有时候很容易搞混,但是可以通过多做练习、理论结合实际的方法来很好的掌握它们。