编译原理完整学习笔记(四):语法分析

本文深入解析自上而下与自下而上的语法分析方法,包括LL(1)文法、算符优先分析、LR分析法等核心概念,探讨消除左递归、提取左公共因子及预测分析表的构造。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

如果你对这篇文章可感兴趣,可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客」,查看完整博客分类与对应链接。


语法分析

  • 语法分析方法
    • 自下而上:算符优先分析法、LR分析法
    • 自上而下:递归下降分析法、预测分析程序
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9bKpgMuf-1597631651598)(media/15921222130836.jpg)]

一、自上而下分析

1.1 左递归 & 回溯
1.1.1 面临的问题
  • 回溯问题

    • 分析过程中,当一个非终结符用某一个候选匹配成功时,这种匹配可能是暂时的
    • 因此如果在后续匹配中出错的话,不得不“回溯”
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xrc9J0ZJ-1597631651600)(media/15921224624182.jpg)]
  • 文法左递归问题

    • P → P α P \rightarrow P\alpha PPα,匹配过程会无限循环下去
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UuReukN8-1597631651601)(media/15921225509237.jpg)]
1.1.2 消除左递归

「消除直接左递归」

  • 核心思想:左递归变右递归

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qxNbxheW-1597631651603)(media/15921228457610.jpg)]
  • 例题

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vrVSCVVO-1597631651604)(media/15921231085894.jpg)]

「消除间接左递归」

  • 要求

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iWaxDTXB-1597631651605)(media/15921232157631.jpg)]
  • 核心思想

    • 消除回路中的节点
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9hcCuMla-1597631651606)(media/15921234616423.jpg)]
  • 算法

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3MQjwjli-1597631651607)(media/15921235809695.jpg)]
  • 例题

S -> Qc | c
Q -> Rb | b
R -> Sa | a

顺序 1:R、Q、S
答案:
S -> abcS' | bcS' | cS'
S' -> abcS' | 空字

顺序 2:S、Q、R
答案:
S -> Qc | c
Q -> Rb | b
R -> bcaR' | caR' | aR'
R' -> bcaR' | 空字
1.1.3 消除回溯
  • 消除回溯的核心在于能确定非终结符 A 所有候选可能推出的第一个符号,因此引入 FIRST 集

    • 在这里插入图片描述
  • 提取左公共因子 —— 令非终结符的所有候选首符集两两不相交

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iTP0Pw72-1597631651608)(media/15921257039287.jpg)]
  • 由于有一些非终结符会推出空字,因此我们需要定义 FOLLOW 集

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ld2vQwyI-1597631651608)(media/15921258026793.jpg)]
1.2 LL(1) 文法
1.2.1 LL(1)定义
  • 文法定义

    • 第一个 L 表示 “从左到右扫描串”
    • 第二个 L 表示 “最左推导”
    • 第三个 1 表示 “每一步只需向前查看一个符号”
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WjmhYBUf-1597631651609)(media/15921259257191.jpg)]
  • LL(1) 分析法

    • LL(1) 文法可以对输入串进行有效的无回溯的自上而下分析
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J3UXTjFK-1597631651609)(media/15921260337562.jpg)]
1.2.2 FIRST
  • 定义
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nXpNjxTM-1597631651610)(media/15921261605938.jpg)]

  • 求解算法

    • 核心思想:用 “对有限产生式的反复扫描” 代替 “穷尽所有推导”
  • 构造每个文法符号的 FIREST 集
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-euVilCem-1597631651610)(media/15921267872329.jpg)]

  • 构造任何符号串的 FIRST 集
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7ncTEQsu-1597631651611)(media/15921265108575.jpg)]

1.2.3 FOLLOW
  • 定义
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VRFjrvyi-1597631651612)(media/15921265380474.jpg)]

  • 构造每个非终结符的 FOLLOW 集
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rBnh4m1H-1597631651612)(media/15921266935832.jpg)]

1.2.4 习题练习
  • 求解步骤

    • 消除左递归
    • 提取左公共因子
    • 求出每个非终结符的 FIRST 集、FOLLOW 集
    • 判定是否符合 LL(1) 文法
  • 练习题
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tFqQogGi-1597631651613)(media/15921276671792.jpg)]

根据LL(1)文法要求,可以判定该文法符合LL(1)。

1.3 递归下降分析器
1.3.1 概述
  • 总体思想
    • 分析程序由一组子程序组成,对每一语法单位(非终结符)构造一个相应的子程序,识别对应的语法单位
  • 定义全局过程、变量
    • ADVANCE:把输入串指示器 IP 指向下一个输入符号,即读入一个单词符号
    • SYM:IP 当前所指的输入符号
    • ERROR:出错处理子程序
  • 代码实现概述
    • 依据 FIRST、FOLLOW 集进行匹配
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sjmLK1GZ-1597631651613)(media/15921283775460.jpg)]
1.3.2 程序示例
  • 文法
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J2XiyoUu-1597631651614)(media/15921276671792.jpg)]

  • Procedure F

PROCEDURE F;
 IF SYM = 'i' THEN ADVANCE
 ELSE
    IF SYM = ')' THEN
    BEGIN
        ADVANCE;
        E;
        IF SYM=')' THEN ADVANCE
        ELSE ERROR
    END
    ELSE ERROR;
  • PROCEDURE E
PROCEDURE E;
BEGIN
    T; E';
END:
  • PROCEDURE E’
    • 此处可以检查 FOLLOW 集,也可以不检查,对程序正确性没有影响
PROCEDURE E';
IF SYM = '+' THEN
BEGIN
    ADVANCE;
    T; E';
END
  • PROCEDURE T
PROCEDURE T;
BEGIN
    F; T';
END
  • PROCEDURE T’
PROCEDURE T';
IF SYM='*' THEN
BEGIN
    ADVANCE;
    F; T';
END
1.4 扩充的巴克斯范式
1.4.1 定义

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JDj13JWE-1597631651614)(media/15921297198382.jpg)]

  • 举例
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kAqhyKBI-1597631651615)(media/15921297407990.jpg)]

用扩充的巴克斯范式来描述语法,直观易懂,便于表示左递归消除和左公共因子提取。

1.4.2 示例

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-spflHHA6-1597631651615)(media/15921297886881.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YBYzaC8R-1597631651616)(media/15921298108488.jpg)]

1.5 预测分析程序
1.5.1 预测分析程序组成
  • 总控程序
  • 分析表
  • 分析栈

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kwP4N5E1-1597631651616)(media/15921423055576.jpg)]

1.5.2 构造预测分析表
  • 分析产生式语句的FIRST集

  • 如果非终结符可以推空,则加入 FOLLOW 集
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bW7v1avl-1597631651617)(media/15921424004662.jpg)]

  • 练习例子
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EndmDk8D-1597631651617)(media/15921424445307.jpg)]

1.5.3 预测分析示例

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eB2ar90g-1597631651618)(media/15921424909806.jpg)]

1.5.4 二义性文法

并不是所有文法在消除左递归、提取左公共因子后都符合 LL(1) 文法要求,因此我们可以根据具体情况来修改预测分析表。

  • 文法举例
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vM91S0lC-1597631651618)(media/15921425917940.jpg)]

  • 二义文法对应的预测分析表
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AtiSNaaW-1597631651619)(media/15921426259830.jpg)]

此处出现冲突的格子其实代表的是 if…then if…then…else… 语句中,else 匹配的是第一个 if,还是第二个 if 的问题,因此我们可以根据程序的实际要求进行选择,并删除另一个,使该文法满足 LL(1) 的特性。

二、自下而上分析

自下而上分析采用 “移进-归约” 思想。

  • 基本思想
    • 用一个寄存符号的先进后出栈,把输入符号一个一个地移进到栈里,当栈顶形成某个产生式的候选式时,即把栈顶的这一部分替换成(归约为)该产生式的左部符号。
  • 核心方法
    • 算符优先分析法
      • 按照算符的优先关系和结合性质进行语法分析
      • 适合分析表达式
    • LR 分析法
      • 规范规约:句柄作为可归约串
2.1 基础概念
2.1.1 短语
  • 定义(短语、直接短语)
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7iEyfIMp-1597631651619)(media/15921849336474.jpg)]

  • 语法树的角度

    • 两代以上子树的叶子结点构成的序列为短语
    • 子树只有两代,则为直接短语
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2i91G4SN-1597631651620)(media/15921849935870.jpg)]
2.1.2 素短语
  • 定义(素短语、最左素短语)

    • 属于短语
    • 至少有一个终结符
    • 除自身外不再包含更小的素短语
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KQHDl4O4-1597631651620)(media/15921850920304.jpg)]
  • 示例
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3RKuraEI-1597631651621)(media/15921854659175.jpg)]

2.2 算符优先文法
2.2.1 优先关系

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QDc939MO-1597631651623)(media/15921857914496.jpg)]

2.2.2 算符文法
  • 算符文法定义
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UXZVOKe5-1597631651623)(media/15921858325580.jpg)]

  • 算符优先文法定义

    • 引入终结符的优先级
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U0szY2pS-1597631651624)(media/15921858855468.jpg)]
2.2.3 FIRSTVT、LASTVT
  • FIRSTVT
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jxnt2jPn-1597631651625)(media/15921862258902.jpg)]

  • LASTVT
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nb5RpUtg-1597631651625)(media/15921862438133.jpg)]

  • 具体实现方式

    • 利用栈不断遍历所有产生式
    • 若栈 STACK 不空,就将栈顶项弹出,记此项为 (Q, a)。对于每个形如 P → Q . . . P\rightarrow Q... PQ... 的产生式,若 F[P, a] 为假,则变其值为真且将 (P, a) 推进 STACK 栈。
    • 上述过程一直重复,直至栈 STACK 为空为止。
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3JtvjgkC-1597631651626)(media/15921862735516.jpg)]
  • FIRSTVT、LASTVT 具体作用
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tk5yCf7K-1597631651626)(media/15921860737462.jpg)]

  • 示例

    • 求解时还需要考虑 KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲E# 式子
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rRacSZY6-1597631651627)(media/15921865944417.jpg)]
2.2.4 最左素短语定理
  • 具体定理
    • 出现了一个山峰式的句型
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iNtfX82Y-1597631651627)(media/15921866844887.jpg)]
2.2.5 算符优先分析算法
  • 具体算法过程
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qFIjPK0g-1597631651628)(media/15921869006364.jpg)]

  • 具体归约过程

    • 从左至右,终结符对终结符,非终结符对非终结符,且只要求终结符对应匹配
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P8vTJBJe-1597631651628)(media/15921871080357.jpg)]
  • 算符分析树 v.s. 语法树

    • 二者不同,分析树可能会更简便
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y2gKR1l6-1597631651629)(media/15921871609254.jpg)]
2.3 LR 分析法
2.3.1 LR 文法
  • LR 文法定义
    • 对于一个文法,如果能够构造一张分析表,使得它的每个入口均是唯一确定的,则这个文法就称为 LR 文法。
  • LR(k) 文法定义
    • 一个文法,如果能用一个每步顶多向前检查 k 个输入符号的 LR 分析器进行分析,则这个文法就称为 LR(k) 文法。
  • LR 文法与二义文法
    • LR 文法不是二义的,二义文法肯定不会是 LR 的
    • LR 文法是二义文法的真子集,因此是二义文法的充分条件
  • 实际应用
    • 虽然 LR 文法不能涵盖所有二义文法,但程序设计语言仍然使用 LR 分析法,如果分析表中有冲突,则人工手动去除
2.3.2 概念说明
  • LR 分析法

    • 关键在于生成分析表,再根据分析表进行语法分析
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ET8AL6Zo-1597631651629)(media/15921907755217.jpg)]
  • 句柄

    • 一个句型的最左直接短语就是该句型的句柄
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yRekFv49-1597631651630)(media/15921908168307.jpg)]
  • 规范归约

    • 规范归约即每次对句柄进行归约
    • 规范归约 = 最左归约 = 最右推导的逆过程
    • 最右推导 = 规范推导
    • 由规范推导推出的句型称为规范句型
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a2CJsyrx-1597631651630)(media/15921908493474.jpg)]
2.3.3 LR 分析过程
  • 规范规约的关键在于寻找句柄

    • 历史:已移入符号栈的内容
    • 展望:根据产生式推测未来可能遇到的输入符号
    • 现实:当前的输入符号
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1urFVNz3-1597631651631)(media/15921911015704.jpg)]
  • LR 分析表

    • ACTION[s, a]: 当状态 s 面临输入符号 a 时,应采取什么动作
    • GOTO[s, X]: 状态 s 面对文法符号 X 时,下一状态是什么
    • 分析表中 s 表示移进(shift),r 表示归约(reduce)
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7aVJA9uw-1597631651632)(media/15921913070958.jpg)]

其中归约的具体步骤如下所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vLGHyusz-1597631651633)(media/15921913327489.jpg)]

  • LR分析过程性质
    • 在任何时候,分析栈里面的内容和扫描串剩下的内容拼接起来,总是一个规范句型。
    • 一旦栈顶出现了当时栈内内容和栈外输入串拼接出来的那个句型的句柄,马上就会归约。
2.3.4 LR 分析示例
  • 图 1
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zno8Zass-1597631651633)(media/15921914583588.jpg)]

  • 图 2
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4FRggax2-1597631651634)(media/15921914796143.jpg)]

  • 图 3
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sGNEpQWw-1597631651634)(media/15921914949898.jpg)]

2.4 LR(0) 文法
2.4.1 活前缀
  • 概念引入原因

    • 为了定义在规范规约时,不会出现 D 这种情况,引入活前缀概念
      在这里插入图片描述
  • 活前缀定义

    • 规范句型的一个前缀,且该前缀不含句柄之后的任何符号
    • 活前缀后续符号均为入栈,因此为终结符
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ArZB5vSi-1597631651636)(media/15922037269887.jpg)]
2.4.2 文法拓广
  • 文法拓广目的
    • 与构造 DFA 时引入初态、终态节点目的一致
    • 使得文法的 DFA 中只有一个初态、一个终态

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TP7TyCsl-1597631651637)(media/15922037693753.jpg)]

2.4.3 LR(0) 项目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WnJhqg2n-1597631651637)(media/15922038770147.jpg)]

2.4.4 识别活前缀的 DFA 构造法1
  • 总体思想

    • 先构造 NFA,再将 NFA 通过构造的方式转换成 DFA
  • NFA 构造方法
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WEsg10vv-1597631651638)(media/15922039977678.jpg)]

  • DFA 构造举例
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DjkuTf0K-1597631651639)(media/15922040201447.jpg)]

  • NFA => DFA

    • DFA 的项目集为文法的LR(0)项目集规范族
    • 族 = 元素是集合的集合
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eDMWU2Wq-1597631651639)(media/15922040894785.jpg)]
2.4.5 识别活前缀的 DFA 构造法2
  • 总体思想

    • 通过引入有效项目的概念,直接构造出 DFA
  • 有效项目概念
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BZh1zdIf-1597631651640)(media/15922041948821.jpg)]

  • LR(0)项目集规范族构造

    • 拓广文法

      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2psCieXz-1597631651640)(media/15922044196567.jpg)]
    • 构造闭包

      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gtlFOFby-1597631651641)(media/15922043334438.jpg)]
    • 状态转移

      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2efyJhdS-1597631651642)(media/15922043884839.jpg)]
2.4.6 LR(0)分析表构造
  • 通过 DFA 构造分析表
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jtp1DZ4t-1597631651642)(media/15922044972042.jpg)]

  • 举例
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KvDXv1x1-1597631651643)(media/15922045323337.jpg)]

根据分析表进行句子识别的部分与 “2.3.4 LR分析示例” 的内容一致,此处不再赘述。

2.5 SLR(1) 文法
2.5.1 引入原因
  • LR(0) 出错原因
    • LR(0) 方法不够强,容易出现 “移进-归约” 冲突与 “归约-归约” 冲突
    • 即 LR(0) 分析表构造中,出现冲突
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qq3lLKss-1597631651643)(media/15922047956344.jpg)]
2.5.2 SLR(1) 解决冲突
  • 引入 SLR(1) 文法进行冲突解决
    • 简单说,就是加入对 FOLLOW 集的考虑,减少冲突
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ehlf4U4T-1597631651644)(media/15922048988484.jpg)]
2.5.3 SLR(1) 分析表
  • 构造算法
    • SLR(1) 在分析表构造时只需将 FOLLOW 集考虑进去
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NYXGdpP3-1597631651644)(media/15922050365127.jpg)]

按上述方法构造出的 ACTION 和 GOTO 表如果不含多重入口,则称该文法为 SLR(1) 文法。

  • 构造示例
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TTEkJQFr-1597631651645)(media/15922051184469.jpg)]
2.6 LR(1) 文法
2.6.1 引入原因
  • 根本原因
    • FOLLOW 集提供的信息太泛,其中有些字符其实并不会出现
    • 因此我们需要更加精确的文法来构造分析表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-St1rHjw7-1597631651645)(media/15922052778006.jpg)]

2.6.2 LR(k) 项目
  • 扩展 LR(0) 项目,引入展望串
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AB9pk04b-1597631651645)(media/15922053049736.jpg)]
2.6.3 DFA 构造
  • 项目集的闭包
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vEHcdgQU-1597631651646)(media/15922053843902.jpg)]

  • 项目集的转换函数
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QAYVuJs1-1597631651646)(media/15922054005624.jpg)]

2.6.4 LR(1) 分析表
  • 构造算法
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zC1yRB3a-1597631651647)(media/15922054380898.jpg)]

  • 构造示例

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VZI6jdOP-1597631651647)(media/15922054720507.jpg)]

2.7 LALR(1) 文法
  • 文法性质

    • 项目集个数 = SLR(1)
    • 通过合并 LR(1) 中的同心集得到,如果 LR(1) 中原本就没有 “移进-归约” 冲突,则 LALR 中也不会有,但可能会出现 “归约-归约” 冲突
    • 文法目的:识别能力比 SLR(1) 更强,但项目集个数一致
  • 同心集合并

    • 同心集定义
      • 两个集合忽略展望串时,完全相同
    • 同心集合并举例
      • I5 与 I9 同心,合并后为 I59
I5:  A ->, a
     B ->, c

I9:  A ->, c
     B ->, a

I59: A ->, a/c
     B ->, a/c
2.8 LR 文法总结
  • 文法能力

    • LR(0)、SLR(1)、LALR(1)、LR(1) 文法,前者为后者的真子集
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m6ZN0Z5E-1597631651648)(media/15922059848186.jpg)]
  • LR(1) 文法

    • 具有规范的 LR(1) 分析表的文法称为 LR(1) 文法
    • 使用 LR(1) 分析表的分析器叫做一个规范的 LR 分析器

资料来源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gene_INNOCENT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值