消除左递归文法

无法根据左递归文法编写出递归下降分析器,因而把左递归文法等价变换为非左递归文法至关重要,以下是变换的算法:

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、去掉无用符号和无用产生式

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值