语法分析分为两部分:自上而下的推导,和自下而上的规约。第四章讲述的是自上而下的推导,主要内容包括文法的改造,LL分析和LR分析。 语法分析是编译过程的核心部分,它的任务是在词法分析识别出单词符号串的基础上,分析并判定程序的语法结构是否符合语法规范。它的基本思想是为输入串寻找一个最左推导,是一个反复使用不同产生式谋求匹配输入串的过程。
一.知识点
1.语法分析器的功能
语法分析器任务:分析并判定程序的语法结构是否符合语法规则。
语法分析办法:自上而下分析法,自下而上分析法。
2.自上而下面临的问题
①文法的左递归问题
②回溯的不确定性,要求我们将已经完成工作推倒从来
③虚假匹配的问题
④不能准确地确定输入串中出错的位置
⑤效率低
3.消除左递归的公式:
一.知识点
1.语法分析器的功能
语法分析器任务:分析并判定程序的语法结构是否符合语法规则。
语法分析办法:自上而下分析法,自下而上分析法。
2.自上而下面临的问题
①文法的左递归问题
②回溯的不确定性,要求我们将已经完成工作推倒从来
③虚假匹配的问题
④不能准确地确定输入串中出错的位置
⑤效率低
3.消除左递归的公式:
设有产生式
P→Pα1|Pα2|…|Pαm|β1|β2|…|βn
其中每个βi不以P开头,每个αi不为ε
消除P的直接左递归性就是把这些规则改写成:
P→β1P’|β2P’|…|βnP’
P’→α1P’| α2P’|…|αmP’| ε
4.FIRST集:
令文法G是不含左递归的文法,对G的非终结符的候选α,定义它的开始符号(终结首符)集合:
特别地,如果α ε,则ε∈FIRST(α)如果非终结符A的任意两个候选式αi和αj的开始符号集满足FIRST(αi)∩FIRST(αj)=Φ,则A可以根据所面临的第一个输入符号,准确地指派一个候选式α去执行任务,α是那个FIRST集含a的候选式,即 a ∈FIRST(α)
5.follow集
对文法G的任何非终结符A,定义它的后继符号集合:
特别地,如果S …A,则#∈FOLLOW(A),FOLLOW(A)集合是所有句型中出现在紧接A之后的终结符号或#所组成的集合,当非终结符A面临输入符号a,且a不属于A的任意候选式的FIRST集但A的某个候选式的FIRST集包含ε时,只有当a ∈FOLLOW(A),才可能允许A自动匹配
6.不带回溯的自上而下分析的文法条件(LL(1)文法)
(1)文法不含左递归
(2)对于文法中每一个非终结符A的各个产生式的候选式的FIRST集两两不相交。即,若
A→α1|α2|…|αn
则 FIRST(αi)∩FIRST(αj)=Φ (i≠j)
(3)对于文法中的每个非终结符A,若它的某个候选首符集包含ε,则
FIRST(A)∩FOLLOW(A)=Φ
如果一个文法G满足以上条件,则称该文法G为LL(1)文法(第1个L代表从左到右扫描输入串,第2个L代表最左推导,1表示分析时每一步只看1个符号)
7.预测分析程序
二.典型例题
FIRST,FOLLOW集
三.总结
现在学习编译原理的难度越来越大,难懂而且比较容易忘,如果课下不预习,不复习就赶不上老师的进度。这一章中,我感觉学习follow集的时候遇到了一点困难,所以我把first,follow集写下来。文法的分析很重要,一定得打好基础。