编译原理笔记【第七章 语法分析】

第一节 语法分析概述

1.1 语法分析的任务

对源程序经过词法分析后转换称的符号串(即单词符号的序列)进行分析,根据语法规则,判断它是否是一个正确的句子。如果是,可以构造出一个提现句子结构的语法树;如果不是,可以输出相应的错误提示。
在这里插入图片描述

1.2 语法分析的分类

  1. 自上而下的语法分析
    在这里插入图片描述
    在这里插入图片描述

  2. 自下而上的语法分析
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

1.3 语法分析具体方法

  1. 自上而下的语法分析方法

    1.1 回溯分析法
    1.2 递归下降分析法
    1.3 预测分析法

  2. 自下而上的分析法

    2.1 算符优先分析法
    2.2 LR分析法

第二节 回溯分析法

2.1 分析过程

回溯分析法实际上是一种试探的方法。当遇到多个欧萱产生式时,可以选择任意一个进行尝试,如果尝试失败,则回溯到试探前的状态,继续尝试其他候选。

回溯分析法的分析效率是非常低的。特别是当匹配失败发生在多级试探后,逐级回溯的开销是令人难以忍受的。

2.2 引起回溯的原因

在这里插入图片描述

2.3 消除公共左因子

在这里插入图片描述
在这里插入图片描述

2.4 消除直接左递归

根据能生成的串,设计新的文法使得左递归消失且效果不变
在这里插入图片描述

2.5 消除间接左递归

在这里插入图片描述
在这里插入图片描述
消除间接左递归的算法

在这里插入图片描述
在这里插入图片描述

算法实例
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第三节 递归下降分析法

如果一个文法不含公共左因子和左递归,则可能(仅是可能)构造一个不带回溯的自上而下的分析程序。该程序由一组递归函数组成,每个函数对应一个非终结符,对该非终结符的产生式右端的符号一次进行匹配,匹配方式为:

1.如果是终结符,则检查输入串中的当前符号是否与该终结符一致;
2.如果是非终结符,则调用该非终结符对应的函数;
3.如果产生式右端是空串 ε \varepsilon ε, 则直接返回。

第四节 预测分析法

4.1 预测分析过程

初始时,输入指针执行啊输入串的第一个符号,# 和文法开始符相继入栈;然后比较栈顶符号 X 和输入符号 a, 根据比较结果确定采取的动作:
在这里插入图片描述

4.2 预测分析程序的结构

在这里插入图片描述

4.3 预测分析表

在这里插入图片描述
在这里插入图片描述

4.4 预测分析过程

在这里插入图片描述
在这里插入图片描述

4.5 预测分析表的构造

文法的FIRST集
文法的FOLLOW集
预测分析表构造算法

4.5.1 文法的FIRST集

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.5.2 文法的FOLLOW集

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.5.3 预测分析表的构造

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

LL(1)文法
在这里插入图片描述


自下而上分析法

第五节 算符优先分析法

5.1 算符文法

并不是通用文法,只针对
算符文法:
上下文无关文法G, 如果没有形如 P − > ε P-> \varepsilon P>ε P − > . . . Q R . . . P->...QR... P>...QR...的产生式,则称G为算符文法。

即不推导空串及连续非终结符

在这里插入图片描述

在这里插入图片描述

5.2 优先关系

只需判断相邻运算符优先关系,语法树中层次越高优先级越高

在这里插入图片描述

5.3 算符优先关系表

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

5.4 算符优先分析过程

在这里插入图片描述

在这里插入图片描述

算符优先分析法不重视非终结符重视终结符

在这里插入图片描述

5.5 算符优先关系表的构造

文法的FIRSTVT集

P能够推导出的第一个终结符
在这里插入图片描述

文法的LASTVT集

P能够推导出的最后一个终结符
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

5.6 算符优先文法

在这里插入图片描述

局限性
在这里插入图片描述

第六节 LR分析法

最实用的语法分析法,目前大多数编译器采用的

6.1 LR分析程序的结构

在这里插入图片描述

6.2 LR分析表

在这里插入图片描述

例如:

在这里插入图片描述
在这里插入图片描述

6.3 控制程序

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值