📅  最后修改于: 2020-11-26 10:17:55             🧑  作者: Mango
在CFG中,可能会发生派生字符串不需要所有生产规则和符号的情况。此外,可能会有一些零生产和单位生产。消除这些产生和符号被称为CFG的简化。简化基本上包括以下步骤-
CFG分为两个阶段-
阶段1-从CFG G推导等效语法G’ ,使得每个变量都推导一些终端字符串。
推导程序–
步骤1-包括所有符号W 1 ,它们得出某个终端并初始化i = 1 。
第2步-包括所有符号,W i + 1的,即导出W I。
步骤3-递增i并重复步骤2,直到W i + 1 = W i为止。
步骤4-包括其中包含W i的所有生产规则。
阶段2-从CFG G’导出等效语法G“ ,以使每个符号以句子形式出现。
推导程序–
步骤1-在Y 1中包括起始符号,并初始化i = 1 。
步骤2-包括可从Y i派生的所有符号Y i + 1 ,并包括已应用的所有生产规则。
步骤3-递增i并重复步骤2,直到Y i + 1 = Y i为止。
找出等效于文法G的简化文法,并具有生成规则P:S→AC | B,A→a,C→c | BC,E→aA | Ë
阶段1-
T = {a,c,e}
规则A→a,C→c和E→aA的W 1 = {A,C,E}
根据规则S→AC W 2 = {A,C,E} U {S}
W 3 = {A,C,E,S} U∅
由于W 2 = W 3 ,我们可以得出G’为-
G’= {{A,C,E,S},{a,c,e},P,{S}}
其中P:S→AC,A→a,C→c,E→aA | Ë
阶段2-
Y 1 = {S}
根据规则S→AC,Y 2 = {S,A,C}
Y 3 = {S,A,C,a,c}来自规则A→a和C→c
Y 4 = {S,A,C,a,c}
由于Y 3 = Y 4 ,我们可以得出G”为-
G” = {{A,C,S},{a,c},P,{S}}
其中P:S→AC,A→a,C→c
任何形式为A→B的生产规则,其中A,B∈非终端称为单位生产。 。
步骤1-要删除A→B ,只要语法中出现B→x ,就将产生式A→x添加到语法规则中。 [x∈终端,x可以为Null]
步骤2-从语法中删除A→B 。
步骤3-从步骤1开始重复,直到删除所有单位产品为止。
问题
从以下移除单元生产-
S→XY,X→a,Y→Z | b,Z→M,M→N,N→a
解决方案–
语法中有3个单位产品-
Y→Z,Z→M和M→N
首先,我们将删除M→N。
当N→a时,我们添加M→a,然后M→N被删除。
生产集变为
S→XY,X→a,Y→Z | b,Z→M,M→a,N→a
现在我们将删除Z→M。
当M→a时,我们添加Z→a,然后将Z→M删除。
生产集变为
S→XY,X→a,Y→Z | b,Z→a,M→a,N→a
现在我们将删除Y→Z。
当Z→a时,我们添加Y→a,然后删除Y→Z。
生产集变为
S→XY,X→a,Y→a | b,Z→a,M→a,N→a
现在Z,M和N无法访问,因此我们可以删除它们。
最终的CFG是免费的-
S→XY,X→a,Y→a | b
在CFG中,如果产生A→ε或派生以A开头并最终以A结尾的非终结符号‘A’是可为空的变量
ε:A→…….…→ε
步骤1-找出可得出ε的可为空的非终端变量。
步骤2-对于每个产品A→a ,构造所有产品A→x ,其中x是通过从步骤1中移除一个或多个非末端从‘a’获得的。
步骤3-将原始乘积与步骤2的结果合并,然后删除ε-乘积。
问题
从以下项中删除空产生-
S→ASA | aB | b,A→B,B→b | ∈
解决方案–
有两个可为空的变量-A和B
首先,我们将删除B→ε。
去除B→ε后,生产集变为-
S→ASA | aB | b | a,AεB | b | &epsilon,B→b
现在我们将删除A→ε。
除去A→ε后,生产集变为-
S→ASA | aB | b |一个| SA | AS | S,A→B | b,B→b
这是没有空过渡的最终生产集。