编译原理——关于文法、推导、规约、句柄、语法树、二义性的理解

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

简单短语:略

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

推导和规约过程理解

推导过程

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

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

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

规约过程

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

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

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

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

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

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

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

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

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

注意:

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

  1. 二义性的例子

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

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

  1. 画语法树

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

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

原文地址:https://www.cnblogs.com/Ivan-Luo/p/11694447.html