理清概念之间的关系
-
上下文无关文法定义了语法规则
自上而下和自下而上分析方法是它的解析策略 -
自上而下分析方法包括:
递归下降法 和 预测分析法
LL(1)文法是一种上下文无关文法,可以通过自上而下的方式进行解析 -
自下而上分析方法
LR分析法是一种自下而上语法分析方法
考试题
1. 什么是上下文无关文法,上下文无关文法由哪几部分组成。
概念
描述语法结构,是一个四元组
组成
终结符、非终结符、开始符号、产生式
2. 什么是LL(1)文法。
概念:不带回溯的自上而下分析算法
特点:
- 不包含左递归
- 没有左公共因子
- first和follow集不相交
补充:
3. 预测分析器模型由哪些部分组成。
4. LR分析器模型由哪些部分组成。
5.自上而下语法分析的基本思想。
画树
6.自下而上语法分析的基本思想
剪枝
7. 构造预测分析表
8. 构造LR表
0
采用上下文无关文法
来描述语法规则
语法分析方法:
- 自上而下
- 自下而上
课后题、作业题
1、语法分析方法有几种?有几类?如何划分?
2、自上而下语法分析所面临的困难有哪些?分别如何解决?
困难
产生式不可以有左递归和公共左因子
- 左递归:会造成死循环
- 公共左因子:回溯
解决
1. 左公共因子
2. 左递归消除
3、简述自上而下语法分析的基本思想。
4、从语法树的角度看自上而下语法分析得到的语法树的根节点和末端(叶)节点分别代表什么?
根节点是开始符号
叶节点是 终止符号
5、自上而下语法分析方法有几种?分别给出它们的基本思想,并简述它们之间的区别(各自的特点)。
有2种
(1)预测分析法
-
基本思想:
它通过构造预测分析表(Parsing Table)实现无回溯的语法分析。 -
区别、特点:
直观、简单、易于手工实现;
依赖预测分析表,表驱动
(2)递归下降法
-
基本思想:
为每一个非终结符构造一个子程序,每个子程序识别一定的语法单位,通过子程序间的信息反馈实现对输入串的识别 -
区别、特点:
6. 出错处理
你认为编译器的错误处理应该包括哪些内容
词法分析的错误处理方法:
基于这种假设:大多数词法错误是多、漏或者错字符,或者相邻2个字符错误,
所以可以:
(1)删除一个多余的字符
(2)插入一个遗漏的字符
(3)用一个字符去代替一个不正确的字符
(4)交换两个相邻字符
预测分析器的错误处理方法:
如果分析器查找条目M[A,a],发现他是空的,就跳过输入符号a;
如果条目是synch,则调用同步过程并把栈顶的非终结符弹出
LR分析器的错误处理方法
紧急方式的错误回复方式:从栈顶开始退栈,直到出现状态s,他有预先确定的非终结符A的转移;然后抛弃若干个输入符号,直到找到符号a,它能够合法的跟随A。分析器再把A和状态goto[s,A]压进栈,回复正常分析。
YACC的错误提示与恢复
从栈顶开始不断退栈,知道发现栈顶状态包含形式为A->error α为止。然后把error移进栈。
补充:
当遇到错误时,分析器从状态栈中逐个弹出状态,直到发现栈顶状态的项目集合包含形式为A->error α为止。然后分析器把虚构的记号error移进栈,好像他在输入中看见了这个记号。