编译原理4 - 语法分析 (一)

本文深入探讨自顶向下的语法分析,包括最左推导、最右推导、消除左递归等概念,重点讲解预测分析法,如LL1文法和预测分析表,并讨论错误处理策略。内容源于哈工大陈鄞老师的《编译原理》课程笔记。
摘要由CSDN通过智能技术生成

目录

一、自顶向下的语法分析概述

最左推导

最右推导

自顶向下的语法分析采用最左推导方式

自顶向下的语法分析的通用形式(分析过程

递归下降分析

回溯

预测分析

二、文法转换

消除左递归

消除间接左递归

消除左递归的算法

提取左公因子

三、LL1文法(预测分析法)

S_文法 :(简单的确定性文法)

   预测分析法的工作过程

S_文法 :

非终结符的后继符号集

产生式的可选集

q_文法

串首终结符集

LL1 文法

四、FRIST集和FOLLOW集

FRIST集定义:

FRIST集算法

FOLLOW集的定义

FOLLOW集的算法

SELECT集

预测表

五、递归的预测分析法

定义

例子

六、非递归的预测分析法(表驱动的预测分析)

定义

下推自动机

示意图

工作示例

表驱动的预测分析法的工作流程

递归的预测分析法与非递归的预测分析法 的对比

预测分析法的实现过程

七、预测分析法中的错误处理

错误的检测

错误的恢复

出错的分析例子


 

一、自顶向下的语法分析概述

每个推导需做两个选择:

1.替换当前中的那个终结符 ?

2.用该非终结符中的那个推导式去替换 ?

最左推导

总选择每个句型最左非终结符进行替换

最右推导

总选择每个句型最右非终结符进行替换。

最左推导和最右推导都是唯一的。

自顶向下的语法分析采用最左推导方式

1.总是在句型的最左非终结符替换。

2.根据输入流中的下一个终结符,选择最左非终结符的一个候选方式。

例如:

自顶向下的语法分析的通用形式(分析过程

递归下降分析

1、由一种过程组成,每个过程对应一个非终结符。

2、从文法符号S对应的过程开始,其中会递归调用文法中其他非终结符对应的过程。如果S对应的过程中恰好扫描了整个输入串。则成功完成语法分析。

回溯

存在多个同一非终结符的候选式时,不确定选择哪个,就要挨个尝试,就可能会失败,要回溯重新尝试。

回溯会影响分析效率

预测分析

预测分析是递归下降分析技术的特例。通过在输入中向前看固定个数(通常是1)符号来选择正确的A的产生式。

     可以对某些文法构造出向前看k个输入符号的预测分析器,改文法也称   LL(k)文法类

预测分析不需要回溯,是一种确定的自顶向下分析方法

二、文法转换

同一非终结符的多个候选式存在共同的前缀时,导致回溯的出现。

左递归现象:直接/间接左递归. 会使递归下降分析器陷入无限循环。

消除左递归

实际上是把左递归转换成了右递归。

会引入新的非终结符和产生式。

消除间接左递归

带入的方式:将第一个产生式带入第二个产生式中的。

消除左递归的算法

提取左公因子

提取左边公共的前缀。

三、LL1文法(预测分析法)

S_文法 :(简单的确定性文法)

   预测分析法的工作过程

从文法开始符号出发,每一步推导过程根据当前句型的最左非终结符A和当前输入符号a。选择正确的A-的产生式。保证分析的确定性,选出的候选式必须是唯一的。

S_文法 :

每个产生式都以终结符开始

同一非终结符的各候选式中的首终结符都不同

非终结符的后继符号集

非终结符A的后继符号集

     可能在句型中紧跟在A后的终结符a的集合。记作FOLLOW(A),

     FOLLOW(A) = {a | S => *aAaB …}

如果A是某句型的最右符号,则将符号“$”,添加到FOLLOW(A)中。eg :  FOLLOW(B) = {a,c}。B后跟的是C

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值