📅  最后修改于: 2020-11-26 10:16:17             🧑  作者: Mango
定义-由有限的语法规则集组成的无上下文语法(CFG)是四元组(N,T,P,S) ,其中
N是一组非终结符。
T是一组端子,其中N = T = NULL。
P是一组规则, P:N→(N∪T)* ,即生产规则P的左侧确实具有任何右上下文或左上下文。
S是开始符号。
例
派生树或分析树是有序的根树,它以图形方式表示从上下文无关文法派生的字符串的语义信息。
根顶点-必须用开始符号标记。
顶点-用非终端符号标记。
叶子-用终极符号或ε标记。
如果S→x 1 x 2 …x n是CFG中的生产规则,则解析树/派生树将如下所示-
绘制派生树有两种不同的方法-
自上而下的方法-
以起始符号S开头
依靠生产来变成树叶
自下而上的方法-
从树叶开始
向上前进到作为起始符号S的根
解析树的派生或屈服是通过从左到右串联树的叶子的标签而忽略Null所获得的最终字符串。但是,如果所有叶子均为Null,则导数为Null。
例
设CFG {N,T,P,S}为
N = {S},T = {a,b},起始符号= S,P = S→SS |抗体ε
上述CFG的一种衍生形式是“ abaabb”
S→SS→aSbS→abS→abaSb→abaaSbb→abaabb
局部派生树是派生树/解析树的子树,因此其所有子级都在子树中,或者它们都不在子树中。
例
如果在任何CFG中,产生的结果是-
S→AB,A→aaA | ε,B→Bb | ε
偏导树可以如下-
如果部分派生树包含根S,则称其为语句形式。上面的子树也采用句子形式。
最左边的导数-通过在每个步骤中对最左边的变量应用乘积来获得最左边的导数。
最右推导-通过在每个步骤中将生产应用于最右变量来获得最右推。
例
将CFG中的任何生产规则集设为
X→X + X | X * X | X |一种
在字母{a}上。
字符串“ a + a * a”的最左派生可以是-
X→X + X→a + X→a + X * X→a + a * X→a + a * a
上面的字符串的逐步推导如下所示-
上面的字符串“ a + a * a”的最右派生可以是-
X→X * X→X * a→X + X * a→X + a * a→a + a * a
上面的字符串的逐步推导如下所示-
在无上下文语法G中,如果存在形式为X→Xa的生成式,其中X为非终结式,而‘a’为终结式字符串,则称为左递归生成。具有左递归生成的语法称为左递归语法。
并且,如果在无上下文语法G中,如果产生形式为X→aX ,其中X是非终结符,而‘a’是终结字符串,则称为右递归产生。具有右递归产生式的语法称为右递归语法。