pdf计算机编译原理,计算机编译原理BK.pdf

计算机编译原理BK

1.考察如下的文法G[] :

→abcd

→a

试将其转换成等价的正则文法。

分析:

正则文法又称 3 型文法,其产生形式如:

→y

→r

其中,∈V ,y,r∈V 。

N T

文法G[]是右线性文法,可以采用逐层分解的方法将其转化为 3 型文法。

解答:

逐层分解过程如图 1.14所示。

→abcd

→a,→bcd

→b, →cd

→c,→d

图 1.14 将右线性文法文法转化为 3 型文法的逐层分解过程

其中带下划线的产生式不符合正则文法的要求,所以进入下一步的转化。转化得到的等

价的正则文法 G1[]的产生式为:

→a

→b

→c

→d

→a

2 .设文法G[] 的产生式为:

→a

b

→a|

→d

→e

→ε

→f

→g

a)试证文法 G 是 LL(1)文法

b)用递归子程序的方法,构造文法 G 的自顶向下的句法分析程序。

构造过程中可使用如下过程。

Scan:调用词法分析程序读入下一个单词到 token 中。

Error:报错。

解答:

a)文法 G[]各产生式的选择集合为:

Select(→a)=FIRST(

Select(b)= FIRST(d)={d,e,b}

Select(→a

Select(

Select(→d)={d}

Select(→e)={e}

Select(→ε)=FOLLOW()={b, ⊥}

Select(→f)={f}

Select(→g)={g}

∵各具有相同左部的产生式的选择集合交集为空。

∴G[]是 LL(1)文法。

b)文法 G[]可改写为:

→d|e|ε

→f|g

因此G[]的递归子程序方法的句法分程序所涉及的各程序为:

主程序:

Scan;

call 过程 S

if token=’ ⊥’ then Accept

else Error;

过程 S:

if token in {a,f,g}

then

begin

call 过程 A;

match a

call 过程 B;

end

else if token in {d,e,b}

then

begin

call 过程 B;

match b;

end;

else Error;

过程 A :

if token = a

then

begin

match(a);

call 过程 D;

end

else if token in {f,g}

then call 过程 D;

else Error;

过程 B :

if token = d

then match(d);

else if token = e

then match(e);

else if token in {b, ⊥}

then retur

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值