其他分享
首页 > 其他分享> > ε-产生式的消除

ε-产生式的消除

作者:互联网

参考书: 编译原理(第3版)  西北工业大学出版社  第2.4节内容

试图理解书上内容,完全意识流,捏造名词,不保证叙述正确


 ε-产生式:右部为空符号串的产生式,例如A→ε

题意:将ε-产生式消除,而不改变文法所定义的语言。已知如果语言中不含ε,那么可以把ε-产生式全部消除,反之不可以。

算法2.3 

目的:找出所有满足 A=>ε 的非终结符号A。

终极目的:判断语言是否含有ε

定义此处推导的格式A→aB|cD|eF

*追踪*:令推导式左侧为父节点,该父节点有三种子节点的可能,三种可能同时只能出现一种。每种可能中不同的字符为不同子节点。当一个结点任意一种可能的所有子节点被选择时,其父节点也被选择,则称追踪至父节点。

算法流程:选出所有ε作为子节点,一路追踪,所形成的一棵或多棵子树为所求结果。

书上的新定义:当整颗树被选择,即S(根节点)被选中时,称ε属于这种语言,反之不属于。于是算法2.3可以用来判断一个文法是否产生空符号串ε。

算法2.4

条件和目的:空串不属于语言时消除空串。

算法流程:先定义一下这里用到推导的样子:A→X1X2X3...

开始构造新文法,新文法叫P‘;把旧语法树的结点们分为两类,算法2.3追踪出的结点,分成一类,这一类就叫W;剩下的一类叫不属于W。

对于每一条推导,细分右式的X1X2X3...,也就是那些结点们,依次看新推导式Y每一位取什么:

如果 X不属于W,很好啊,Yi = Xi.

如果 X属于W,那这个位置可以取Xi或空,产生两种可能,都放进P';假设W里有 j 个元素,那这个式子就会产生 2个生成式放到P'里。特别地,如果每个 X都属于W,那不要把空串放进去了,只能生成 2- 1 个式子。

算法2.5

条件和目的:空串属于语言时,除了根节点直接推导出空串,其他都不会变成空串。

算法流程:先把原来的文法复制一个出来,执行算法2.4,然后再加一条S→ε,结束了。

标签:文法,Xi,推导,产生,算法,空串,节点,消除
来源: https://www.cnblogs.com/capterlliar/p/16670967.html