编译原理第二版第4章语法分析.ppt

重点回顾 词法分析程序的设计:按状态转换图写出词法分析程序 开始结点 不含回路的分叉结点,对应switch语句或一组if…then…else语句 含回路的状态结点,对应一个while语句 终态结点 第四章 语法分析 学习目标: 掌握:LL(1)文法的判别,预测分析法,递归子程序的构造方法,LR(0)分析,SLR(1)分析,构造算符优先关系表,进行算符优先分析,构造优先函数 理解:LL(1)文法,活前缀,可归前缀,算符优先文法,最左素短语 了解:不确定的自顶向下分析,LR(1)、简单优先分析法 第四章 语法分析 语法分析器的功能 检查扫描器输出的单词序列是否符合该语言的文法(句子),并分析组成此句子的语法成分 输入:Token序列 输出 语法成分及组成 表现形式:语法树 错误报告 出错处理:定位、续编译 第四章 语法分析 语法错误类别 语法错误及其处理由语法分析器来完成。常见的语法错误有下面一些: 程序的开始单词错,表达式的开始单词错,语句的开始单词错,表达式的后继单词错,语句的后继单词错等等; 标识符和常量单词错。如在const,var,procedure等保留字后面不是标识符,常量说明中‘=’后不是数字 括号类错误:如begin-end不配对,if-else不配对 分隔符错:如赋值语句左部变量后不是赋值号等 第四章 语法分析 总之,语法分析器的处理对象是单词的Token码 例:有源程序 begin x:=y+1;if x=10 then y:=10 end 语法分析器的扫描对象是下面的Token序列: begin id:=id+num;if id=num then id:=num end 保留字、界符、算符的Token,我们用其本身代替 标识符和常量的Token中实际还包含标识符的名字和常量值的信息,这些信息语法分析时不用(语义分析的时候使用) 第四章 语法分析 语法分析是编译过程的核心部分,同词法分析一样,是编译系统逻辑组成的经典划分中必不可少的部分。 语法分析的任务是:按照文法,从源程序符号串中识别出各类语法成分,同时进行语法捡查,为语义分析和代码生成做准备。 第四章 语法分析 4.1 语法分析程序的功能 4.2 自上而下分析法 4.3 自底向上分析法的一般原理 4.4 算符优先分析法 4.5 LR分析法 4.1 语法分析程序的功能 4.1 语法分析程序的功能 语法分析程序的主要功能有两点: (1)根据词法分析器提供的记号流,为语法正确的输入构造分析树(或语法树)。 (2)检查输入中的语法(可能包括词法)错误,并调用出错处理器进行适当处理。 4.2 自上而下分析法 语法分析方法的分类: 4.2 自上而下分析法 4.2.1 不确定的自顶向下分析思想 4.2.2 确定的自顶向下分析思想 4.2.3 某些非LL(1)文法到LL(1)文法的等价变换 4.2.4 递归下降分析法 4.2.5 预测分析法与预测分析表的构造 4.2.1 不确定的自顶向下分析思想 例1:设有文法 S→xAy A→ab|a,对输入串w=xay,语法树为: 4.2.1 不确定的自顶向下分析思想 不确定的自顶向下分析也称带回溯的自顶向下分析 定义: 当要进行关于某个语法变量的推导时,希望能够根据当前符号确定候选式。如果有几个候选式(右部)左端第一个符号相同,则分析程序无法根据当前输入符号选择产生式,只能试探。 当分析不成功时,则推翻分析退回到适当位置重新试探其余候选可能的推导,直到把所有可能的推导序列都试完仍不成功,才能确认输入串不是该文法的句子。 4.2.2 确定的自顶向下分析思想 1、确定分析的条件 2、开始符号集FIRST(α)的定义 3、后继符号集FOLLOW(A)的定义 4、选择集合SELECT(A→α)的定义 5、LL(1)文法的定义 1、 确定分析的条件 从文法的开始符出发,如能根据当前的输入符号(单词符号)唯一地确定选用哪个产生式进行推导,则分析是确定的。 1 、确定分析的条件 例4:设有文法G1[S]: S→pA|qB A→cAd|a B→dB|b 若输入串W=pccadd。自顶向下的推导过程为: 1 、确定分析的条件 1 、确定分析的条件 1 、确定分析的条件 要进行确定的自顶向下的分析,文法要满足一定的限制——即文法是LL(1)文法。 先研究三个定义: 开始符号集FIRST 后跟符号集FOLLOW 选择集合SELECT 2、FIRST(?)集的定义 定义:设G=(VN, VT, P, S)是上下文无关文法,??(VN?VT)* ,则?的开始符号集 FIRST(?) = { a | ??* a......, a ?VT } 若??* ε 则规定ε ∈

文档评论(0)

1亿VIP精品文档

相关文档