• 编译技术图式(第四章 语法分析)03自下而上的语法分析


    模型类型笔记

    1、引入


     有向:从左到右

    手动模式:

    • 最右推导的逆过程
    • 将点后单个字符移入工作区
    • 点在加点表达式移动的过程

    补充知识:

    • 加状态栈的目的:分析时不用重启自动机
    • 句柄是工作区最右侧的某几个符号(点所在表达式的点左侧)
    • =》*,=》+任意步数
    • LR(0)不一定是最左规约,但一定是最右推导逆过程
    • LR(0)文法的生成表s,r在一个格里成为移进冲突,不能允许,求follow集除去r
    • LR(0)文法文法改造
      • 加一个接受项目S->E的文法改造(拓广文法),如有就无改造
      • 对左递归和公共左因子无所谓,无需改造

    2、LR(0)文法


     

    (1)构建(确定)有限自动机

    1)求有限自动机

    • 构成每个新框图的产生式
      • 识别的原串(带点)
      • 点后非终结符的相关产生式(点在箭头后)
    • 每个框图间由箭头连接,识别单字符后进入新框图
    • 同类框图不需要再建立

    2)分析

    • 读入字符,对应的自动机标号也压入堆,进入下一个框图
    • 自动机到头,则句柄被识别弹出,弹出字符数由句柄长度决定,对应规约的非终结符压入堆;同时对应的自动机框图的标号弹出和压入
    • 最后成功则为S,框图标号为0

    3)为了让计算机识别,用LR(0)分析方法表示

    自动机转为表格表示(自动机內部产生式信息丢失)

    • action表
    • goto表
    • acc:遇到#号完结
    • S:shift,因T、E等非终结符是因为规约,不写shift
    • r:Redue规约
    • r后数字是产生式序号

    3)改进:LR(0)—> SLR(1)

    0指的是规约不向后看,1指往后看一个

    E的fellow集,第四行除了fellow集中的“)”和“#”的r2都去掉(因为E后只能接)和#,否则都错误)

    4)LR分析总结

     3、文法相关概念


     

    1. 短语
      • 通过树理解短语
        • 句型:推导树的叶节点自左至右连接
        • 短语:子树的边缘时相对于根的短语(根是相对的)
        • 直接短语:有且仅有两层的子树的短语
        • 句柄:最左的有且仅有两层的子树边缘(根是绝对的)
      • 短语定义:
    2. 规范句型:由规范(最右)推导推出的句型
      • 栈中符号与未分析的串连在一起,可由最右推导得出

    3. 活前缀:栈中符号为“规范句型”的前缀(从最左开始),且该前缀绝不含有句柄右边的符号(可能不包含/包含部分/不包含句柄)
    4. 项目
      • 项目:在产生式右部添加一个圆点(原带点表达式)
      • 活前缀与项目的关系:项目的有效性

        •  
    5. 有效项目集:对活前缀δα有效的项目的集合(原框图)
    6. LR(0)项目集规范族: 文法G所有“有效项目集” 的集合(原自动机)

    7. 项目集上的闭包运算:closure(I)(即不写自动机,换一种写法)
      • 文法改造:拓广文法(如有S->,则不进行改造)
      • 然后构造action表和goto表
      • 两种冲突:规约/规约冲突,移进/规约冲突,用SLR(1)文法
      • 分析能力, LR(1)最强, LALR(1)次之, SLR(1)再次,LR(0)最弱
  • 相关阅读:
    列表 查找元素二分查找
    文件的追加
    Syste.IO 类介绍
    Ctack堆栈
    判断文件是否存在(Exists)
    复杂排序
    元素出栈和入站
    HTML文档中meta标签的作用 Generator KEYWords DEscription Author httpequiv属性
    Page.ClientScript.RegisterClientScriptBlock 失效
    用户名只能由字母或者数字组成(用户控件与HTML控件)
  • 原文地址:https://www.cnblogs.com/ggotransfromation/p/11759702.html
Copyright © 2020-2023  润新知