语法分析

目录

1. 自顶向下分析(Top-Down Parsing)

  • 从分析树的顶部(根节点)向底部(叶节点)方向构造分析树

  • 可以看成是从文法开始符号S推导出词串w的过程
    语法分析

  • 每一步推导中,都需要做两个选择

    • 替换当前句型中的哪个非终结符
    • 用该非终结符的哪个候选式进行替换

最左推导(Left-most Derivation)

语法分析

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

语法分析

最右推导(Right-most Derivation)

语法分析

最左推导和最右推导的唯一性

语法分析

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

语法分析

预测分析(Predictive Parsing)

语法分析

1.1. 文法转换

问题1---回溯

语法分析

问题2---左递归导致无限循环

语法分析

消除直接左递归

语法分析

消除直接左递归的一般形式

语法分析

消除间接左递归

合并产生式, 将间接左递归变成直接左递归再消除

语法分析

语法分析

消除左递归算法

语法分析

语法分析

在每个终结符的循环内:

  • 先将所有比该终结符小的(标号小)终结符替换为产生式
  • 然后消除改终结符产生式之间的立即左递归

提取左公因子(Left Factoring)

语法分析

推迟进入候选式的选择, 减少回溯长度

提取左公因式算法

语法分析

1.2. LL(1)文法

S_文法

语法分析

如果S_文法包含ε产生式,那么它就成为了LL文法

语法分析

非终结符的后继符号集(FOLLOW)

语法分析

产生式的可选集(SELECT)

语法分析

串首终结符集(FIRST)

语法分析

LL(1)文法概念

语法分析

FIRST集计算

语法分析

算法:

语法分析

计算串X1X2…Xn的FIRST集合:

语法分析

FOLLOW集计算

语法分析

语法分析

SELECT集计算

语法分析

预测分析表

语法分析

1.3. LL(1)文法的分析方法

递归的预测分析法

语法分析

语法分析

语法分析

语法分析

语法分析

语法分析

语法分析

语法分析

语法分析

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

语法分析

语法分析

语法分析

递归的预测分析法vs.非递归的预测分析法

语法分析

预测分析法实现步骤

语法分析

预测分析法中的错误检测

语法分析

预测分析法中的错误恢复

语法分析

语法分析

语法分析

2. 自底向上分析: 移入规约分析(Shift-Reduce Parsing)

语法分析

语法分析

移入-归约分析的工作过程

语法分析

移入-归约分析器可采取的4中动作

语法分析

移入-归约分析中存在的问题

语法分析

句柄: 句型的最左直接短语


(句型的)短语

语法分析

2.1. LR分析法

语法分析

LR分析法的基本原理

语法分析

LR分析器(自动机)的总体结构

语法分析

LR分析表的结构 及 分析过程

语法分析

语法分析

LR分析器的工作过程

语法分析

LR分析算法

语法分析

如何构造给定文法的LR分析表

  • LR(0)分析
  • SLR分析
  • LR(1)分析
  • LALR分析

2.2. LR(0)分析

LR(0)项目

语法分析

语法分析

句柄? 含义? 直接短语?

增广文法(Augmented Grammar)

语法分析

语法分析

LR(0)分析表的构造算法

CLOSURE()函数

语法分析

GOTO()函数

语法分析

构造LR(0)自动机的状态集

语法分析

LR(0)分析表构造算法

语法分析

LR(0)自动机的形式化定义

语法分析

LR(0)分析过程中的冲突

语法分析

可能存在:

  • 移进 - 归约 冲突

  • 归约 - 归约 冲突

  • 如果LR(0)分析表中没有语法分析动作冲突,那么给定的文法就称为LR(0)文法
  • 不是所有CFG都能用LR(0)方法进行分析, 也就是说, CFG不总是LR(0)文法

2.3. SLR分析

S: simple
用FOLLOW集来判断是归约还是移入

  • 解决了一些 移入 - 归约 冲突
  • 解决了 归约 - 归约 冲突 (每个产生式左部的FOLLOW集交集为∅)

LR分析的产生式满足LL分析产生式的条件吗??

语法分析

语法分析

语法分析

SLR分析表构造算法

语法分析

SLR分析中的冲突

语法分析

2.4. LR(1)分析

LR(1)的提出

语法分析

规范LR(1)项目

语法分析

等价LR(1)项目

语法分析

赋值语句文法的LR(1)分析表

语法分析

语法分析

语法分析

LR(1)项目集闭包

语法分析

GOTO函数

语法分析

为文法 G' 构造LR(1)项集族

语法分析

LR(1)自动机的形式化定义

语法分析

LR分析表构造算法

语法分析

2.5. LALR分析(lookahead-LR)

基本思想

语法分析

合并同心项集

语法分析

合并同心项集时产生 归约-归约冲突的例子

语法分析

合并同心项集后, 虽然不产生冲突, 但可能会推迟错误的发现

语法分析

LALR(1)的特点

语法分析

语法分析

2.6. 二义性文法的LR分析

二义性文法分析

语法分析

二义性算术表达式文法的LR(0)分析器

语法分析

二义性算术表达式文法的SLR分析表

语法分析

语法分析

二义性if语句文法的SLR分析表

语法分析

**应该保守地使用二义性文法, 并且必须在严格控制之下使用, 英文稍有不慎就会导致语法分析器所识别的语言出现偏差. **

2.7. LR分析中的错误处理

语法分析

恐慌模式错误恢复

语法分析

短语层次错误恢复

语法分析

语法分析

语法分析

上一篇:Fudge暖色系人物摄影lr预设


下一篇:梯度下降法求平方根