zoukankan      html  css  js  c++  java
  • 编译原理——关于文法、推导、规约、句柄、语法树、二义性的理解

    短语:直观理解,该句型中的一个符号串,这个符号串能被前面句型中的某个非终结符推出,那么这个符号串是该句型的短语。注意必须保证非终结符是前面句型的,说明要确定一个句型的短语,要找到句型对应的推导,规约或语法树才可以,对应的是这个句型生成的动态过程。

    简单短语:略

    句柄:一个句型只能有一个句柄。(前提默认非二义性文法)

    推导和规约过程理解

    推导过程

    对每一个句型,该句型一定有一个推导过程(可能不唯一),推导过程一定对应一颗语法树(推导过程可能不唯一,当然语法树也可能不唯一)

    推导不唯一,规约不唯一,规范推导

    规范推导:最右推导,每次拆最右边的非终结符

    规约过程

    规约直观理解就是,“剪子树(但留子树的根)【对应到表达式就是用短语替代那个非终结符】,每剪一次对应一次规约,直到剪到只剩树根”

    规范规约:最左规约,每次对最左简单短语进行的规约

    一个文法的句型,必能通过一次一次的规范推导获得。同时也能通过一次一次的规范规约规约至开始符号,每次规约都对应一个句柄。所以用规约简单短语的方法检查文法是可行的。

    规范推导和规范规约互为逆过程:规范推导倒着看就是规范规约

    规范句型:由规范推导或规范规约得到的句型

    二义性文法——不可判定的

    • 文法所定义的某个句子存在两棵不同的语法树。

    • 文法中存在某个句子,它有两个不同的规范(最右)推导。

    • 文法中存在某个句子,它有两个不同的规范(最左)规约,即在规约中某些规范句型的句柄不唯一。

    注意:

    1. 如果存在两种推导,那么不能说明一定是二义性文法,因为两种推导可能对应同一个语法树

    1. 二义性的例子

    句型E+E*i存在不同句柄

    题型:给一句型,找短语、简单短语、句柄

    1. 画语法树

    2. 对于某个句型的语法树,它的每一颗子树都能找出一个短语(可能重复),枚举所有的子树就能找全。

    3. 在此基础上,再找简单短语和句柄
      参考https://www.cnblogs.com/AlvinZH/p/8300162.html

  • 相关阅读:
    揭秘淘宝286亿海量图片存储与处理架构
    从能做的事做起,做越来越多的事
    用表驱动代替switchcase
    文件过滤驱动中的重入处理
    谈谈对APC的一点理解
    StartIo例程的作用
    C++各大名库的介绍
    IRQL
    FastIO
    一道面试题,看这段代码最后抛出什么异常
  • 原文地址:https://www.cnblogs.com/Ivan-Luo/p/11694447.html
Copyright © 2011-2022 走看看