2.4.2 --产生式的消除.pptVIP

  • 234
  • 0
  • 约5千字
  • 约 26页
  • 2017-08-28 发布于云南
  • 举报
2.4.2 ?-产生式的消除 ?-产生式是指右部为一空符号串?的产生式。因为某些语法分析算法要求不含? ,此时应消除之。 若一语言不含?(即??L(G)),则可将其完全消除; 若??L(G),则可将文法改造为只有开始符S可推导出?(即S?? ?P),而且S不出现在任何产生式的右部,此外再无其它?-产生式。 例如,文法 G[S]: S → aA A → BC B → bB |ε C → cC |ε 算法2.3可用于找出所有可推导出 ? 的非终结符,W={ A | A ? , A?VN } 执行完算法2.3,通过检验S?W与否,可知??L(G)与否; 算法2.4 设 G=(VN,VT,P,S) 是一文法,且 L(G)中不含有空符号串ε,则可按下述算法构造一文法 G′=(VN ,VT ,P′,S),使 L(G′)=L(G),且 G′中不含任何ε-产生式。 ①将VN分为两个互不相交的子集: W及VN-W,其中 W = { A | 产生式 A→ε∈P },即子集 W 是由那些能导出空符号串ε的非终结符号所构成的集合,子集 VN-W 是由那些不能导出空符号串ε的非终结符号所构成的集合; ② 设 A → X1 X2 … Xm 是P中的任一产生式,我们按下面的规则将所有形如 A → Y1 Y2 … Ym 的产生式放入P′中,对于一切 1≤i≤m : 若 Xi 不属于W ,即Xi∈VN-W∪VT ,则取 Yi=Xi ; (ii) 若 Xi∈W ,则分别取 Yi 为 Xi 和ε , 也就是说,如果 X1,X2,…,Xm 中有j个符号属于W ,1≤j≤m,则将有 2j 个形如A → Y1 Y2 … Ym的产生式放入P′中, 但若所有的Xi均属于W ,却不能把所有的Yi都取为ε。 由此构造的产生式集P′,将不包含任何ε-产生式,且不改变相应的语言。 算法2.4可消除 ??L(G) 情况时的ε-产生式; 例2.7 设有文法 G[S]: S → aA A → BC B → bB|ε C → cC|ε 由算法2.3可得到 W = { A, B, C }; 因 S?W ,故 ??L(G) 。 再对G执行算法2.4 ,可得到产生式集P′ : 对于产生式S→aA,将产生式 S→aA 及 S→a 放入P′; 对于产生式A→BC ,将A→BC,A→B,A→C放入P′; 例2.7 设有文法 G[S]: S → aA A → BC B → bB|ε C → cC|ε 对于产生式B→bB,将产生式 B →bB 及B→b放入P′; 对于产生式 C→cC,将产生式 C→cC 及 C→c放入P′。 于是得到文法 G′[S]如下: S → aA | a A → BC | B | C B → bB | b C → cC |c 算法2.5 可消除 ??L(G) 情况时的ε-产生式; 例2.8 设有文法 G[S]: S → cS|AB A → aAb|ε B → Bb|ε 由算法2.3可得到 W={ S , A , B}; 因 S?W ,故 ??L(G)。 对G执行算法2.4 ,可得到产生式集P′: 对于产生式S→cS,将产生式S→cS及S→c放入P′; 例2.8 G[S]:S→cS|AB A→aAb|ε B→Bb|ε 对于S→AB ,将 S→AB,S→A,S→B 放入P′; 对于A→aAb,将A→aAb及A→ab放入P′; 对于B→Bb,将产生式B→Bb , B→b放入P′; 再对G执行算法2.5,可得文法 G′[S′]如下: S′→ cS|c|AB|A|B|ε S → cS|c|AB|A|B A → aAb|ab B → Bb|b 2.4.5 单产生式的消除 把右部仅含一个非终结符号的产生式,即把形如: A→B A,B∈VN 的产生式称为单产生式。 如果一个文法含有过多的单产生式,将会增加编译程序在工作时所需的时间和存储空间,故必要时应设法予以消

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档