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

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

    简单短语:略

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

    推导和规约过程理解

    推导过程

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

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

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

    规约过程

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

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

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

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

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

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

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

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

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

    注意:

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

    1. 二义性的例子

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

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

    1. 画语法树

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

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

  • 相关阅读:
    sql的优化
    使用Robo 3T访问MongoDB数据库
    在IDEA中用三个jar包链接MongoDB数据库——实现增删改查
    使用Robo 3T操作MongoDB数据库
    MongoDB 创建数据库
    mysql本地中127.0.0.1连接不上数据库怎么办
    IDEA-Maven的Dependencies中出现红色波浪线
    log4j2+slf4j+junit
    fastxml Jackson annotation使用小记
    我理解的互联网技术领域
  • 原文地址:https://www.cnblogs.com/Ivan-Luo/p/11694447.html
Copyright © 2011-2022 走看看