短语:直观理解,该句型中的一个符号串,这个符号串能被前面句型中的某个非终结符推出,那么这个符号串是该句型的短语。注意必须保证非终结符是前面句型的,说明要确定一个句型的短语,要找到句型对应的推导,规约或语法树才可以,对应的是这个句型生成的动态过程。
简单短语:略
句柄:一个句型只能有一个句柄。(前提默认非二义性文法)
推导和规约过程理解
推导过程:
对每一个句型,该句型一定有一个推导过程(可能不唯一),推导过程一定对应一颗语法树(推导过程可能不唯一,当然语法树也可能不唯一)
推导不唯一,规约不唯一,规范推导
规范推导:最右推导,每次拆最右边的非终结符
规约过程:
规约直观理解就是,“剪子树(但留子树的根)【对应到表达式就是用短语替代那个非终结符】,每剪一次对应一次规约,直到剪到只剩树根”
规范规约:最左规约,每次对最左简单短语进行的规约
一个文法的句型,必能通过一次一次的规范推导获得。同时也能通过一次一次的规范规约规约至开始符号,每次规约都对应一个句柄。所以用规约简单短语的方法检查文法是可行的。
规范推导和规范规约互为逆过程:规范推导倒着看就是规范规约
规范句型:由规范推导或规范规约得到的句型
二义性文法——不可判定的
-
文法所定义的某个句子存在两棵不同的语法树。
-
文法中存在某个句子,它有两个不同的规范(最右)推导。
-
文法中存在某个句子,它有两个不同的规范(最左)规约,即在规约中某些规范句型的句柄不唯一。
注意:
- 如果存在两种推导,那么不能说明一定是二义性文法,因为两种推导可能对应同一个语法树
- 二义性的例子
句型E+E*i存在不同句柄
题型:给一句型,找短语、简单短语、句柄
-
画语法树
-
对于某个句型的语法树,它的每一颗子树都能找出一个短语(可能重复),枚举所有的子树就能找全。
-
在此基础上,再找简单短语和句柄
参考https://www.cnblogs.com/AlvinZH/p/8300162.html