1、文法的形式化定义
文法G定义为四元组
(1)为非终结符(或语法实体,或变量)集。即可以继续推导的符号集。
(2)为终结符集。即不可以继续推导的符号集。
注1:两者不相交。
注2:统称为文法符号集,可以用V表示。
(3)P为产生式集合,即规则的集合,描述怎样将前两者组成串。
和
都属于文法符号集的闭包,其中
至少包含一个非终结符。
注3:规则,也称重写规则、产生式或生成式,是形如或
的
有序对。
为规则的左部,
为规则的右部。
(4)S称作识别符或开始符,是一个非终结符,至少在一条规则中作为左部出现。是该文法中最大的语法成分。
2、文法的相关定义
3、文法的类型
(1)0型文法(短语文法)
如果一个文法的所有规则,左侧至少含有一个非终结符,则称此文法为 0 型文法,也称为短语文法。
即毫无限制。
(2)1型文法(上下文有关文法)
产生式形如:,其中:
,仅
例外。
即产生式中左部符号的个数不可小于右部符号的个数。
(3)2型文法(上下文无关文法)
每一个产生式都满足
是一个非终结符。
隐形满足1型文法的要求,因为,
。
(4)3型文法(正规文法)
右线性文法:每一个产生式都是或
,A和B都是非终结符,
。
即产生式右部有非终结符,并且在同一侧。类似地还有左线性文法。
注:在不考虑空产生式的情况下各型文法逐级包含。
我们之后提到的文法除特殊说明,都是上下文无关文法。
4、语法树(推导树)
在推导的任何一步都是对的最左(最右)的非终结符进行替换,则称为最左(最右)推导。
最右推导常被称为规范推导,得到的矩形称为右句型或规范句型。
语法的二义性
如果文法G的某个句子存在至少两棵不同的语法树,则称文法G是二义性的。
性质一:如果文法是无二义性的,一个句子的语法树反映了该句子的全部推导过程;
性质二:如果文法是无二义性的,一个句子的最左(最右)推导是唯一的。(证明二义性方法)
例子:文法G[E]:E→E+E︱E*E︱(E) | i,证明G是二义性的。
对于句子 i + i * i 的最左推导有两种语法树:
所以文法G[E]是二义性的文法。
5、句型的分析
这里就不给出定义了,直接以下图为例:
句子aabbaa
G[S]:S→aAS︱a
A→SbA︱SS︱ba
(1)短语:查看每一个子树,其叶节点的符号串就是短语。
从上至下从左至右逐个查看节点:
对于第一层的S,其短语为:。
对于第二层的A,其短语为:。
对于第二层的S,其短语为:。
对于第三层的S,其短语为:。
对于第三层的A,其短语为:。
(2)直接短语(简单短语):若一个子树的孩子节点全是叶子节点,它的短语就是直接短语。
对于第二层的S、第三层的S、第三层的A,它们只有叶子节点,因此直接短语为、
、
。
(3)句柄:右句型的最左直接短语,称为该句型的句柄。
也就是通过最右推导后得到的句型,它的语法树中的最左边的直接短语。
上例中句柄为。