编译原理【第三章】

理清概念之间的关系

  • 上下文无关文法定义了语法规则
    自上而下和自下而上分析方法是它的解析策略

  • 自上而下分析方法包括:
    递归下降法 和 预测分析法
    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移进栈,好像他在输入中看见了这个记号。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值