您的位置:首页 > 其它

消除左递归文法

2015-04-05 23:39 246 查看
无法根据左递归文法编写出递归下降分析器,因而把左递归文法等价变换为非左递归文法至关重要,以下是变换的算法:

1、消除直接左递归

原文法: E --> E a1 | E a2 | ... | E an | b1 | b2 | ... | bn

消除后: E --> b1 E' | b2 E' | ... | bn E'

E'--> a1 E' | a2 E' | ... | an E' | epsilon

2、消除间接左递归

a) 把所有非终结符号按一定序列排序为E1, E2, ... En;

b) for i=1 to n do /*依次处理每个非终结符号*/

for j=1 to i-1 do /*处理第1个到i-1个*/

若Ei --> Ej r

则改为Ei --> S1 r | S2 r | ... | Sk r

其中Ej --> S1 | S2 | ... | Sk

c) 对Ei消除直接左递归。

注:非终结符的排列顺序不同,结果可能不同。

3、去掉无用符号和无用产生式

转:http://blog.csdn.net/goncely/article/details/627569

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: