语法分析的双重含义:
- 语法规则:上下文无关文法(子集:LL文法或LR文法)
- 语法分析:下推自动机(LL或LR分析器)、自上而下分析、自下而上分析
一、语法分析的若干问题
许多编译器,特别是由自动生成工具构造的编译器,往往其前端的中心部件就是语法分析器
(1)语法分析器的作用
根据词法分析器提供的记号流,为语法正确的输入构造分析树(或语法树)
检查输入中的语法(可能包括词法)错误,并调用出错处理器进行适
当处理。
(2)语法错误的处理原则
源程序中可能出现的错误:语法(包括词法)错误和语义错误(静态语义错误和动态语义错误)
词法错误:指非法字符或拼写错关键字、标识符等
语法错误:指语法结构出错,如少分号、括号不匹配、begin/end不配对等
静态语义错误:如类型不一致、参数不匹配等
动态语义错误(逻辑错误):如死循环、变量为零时作除数等
二、上下文无关文法(CFG)/2型文法
CFG是一个四元组G =(N,T,P,S),其中
(1) N是非终结符(Nonterminals)的有限集合;
(2) T是终结符(Terminals)的有限集合,且N∩T=Φ;
(3) P是产生式(Productions)的有限集合,A→α,其中A∈N(左部),α∈(N∪T)*(右部),若α=ε,则称A→ε为空产生式(也可以记为A →);
(4) S是非终结符,称为文法的开始符号(Start symbol)
注: S ∈ N , N可以出现在产生式左边和右边,**T绝不出现在产生式左边**.
三、自上而下语法分析:递归下降分析法、预测分析法
基本思想:对任何一个输入序列ω,从S开始进行最左推导,直到得到一个合法的句子或发现一个非法结构。整个自上而下分析是一个试探的过程,是反复使用不同产生式谋求与输入序列匹配的过程。
提前准备-重写文法:
- 消除左递归,以避免陷入死循环;
- 提取左因子,以避免回溯.
(1)消除左递归
定义:若文法G中的非终结符A,对某个文法符号序列α存在推导A =+> Aα,则称G是左递归的。若G中有形如A→Aα的产生式,则称该产生式对A直接左递归。
<1> 消除文法的直接左递归:把左递归转换为右递归
<2> 消除文法的间接左递归
核心思想:将无直接左递归的非终结符展开到其他产生式,然后消除其他产生式中的直接左递归(如果有的话