编译原理 | 由正规文法构造状态转换图

本文详细介绍了如何从左线性文法和右线性文法构建状态转换图,用于词法分析的过程。通过具体实例,展示了不同类型的文法规则如何转化为状态转移路径,帮助理解词法分析的基本原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

词法分析 :由正规文法构造状态转换图

解题方法

1. 由左线性文法构造状态转换图

左线性文法G=(VN,VT,P,Z)(1)G中形如U::=Ba,则可化成:B—(a)—>U(表示状态B向状态U引一条箭弧线并标记符号a,不方便画图,就直接这样表示了,你们懂就行)(2)G中形如U::=a,则可化成:S—(a)—>U(表示初始状态S向状态U引一条箭弧线并标记符号a)(3)状态转换图开始状态标记为S,终止状态标记为Z 左线性文法G=(V_N,V_T,P,Z)\\ (1) G中形如U::=Ba,则可化成:B—(a)—>U(表示状态B向状态U引一条箭弧线并标记符号a,不方便画图,就直接这样表示了,你们懂就行)\\ (2) G中形如U::=a,则可化成:S—(a)—>U(表示初始状态S向状态U引一条箭弧线并标记符号a)\\ (3) 状态转换图开始状态标记为S,终止状态标记为Z 线G=(VN,VT,P,Z)(1)GU::=Ba,B(a)>UBU线a便(2)GU::=a,S(a)>USU线a(3)SZ

例题

设左线性文法G[Z]=(VN,VT,P,Z),其中VN=Z,U,VVT=0,1P:Z::=U0∣V1U::=Z1∣1V::=Z0∣0 设左线性文法G[Z] = (V_N,V_T,P,Z),其中\\ V_N={Z,U,V}\\ V_T={0,1}\\ P: Z::=U0|V1\\ U::=Z1|1\\ V::=Z0|0 线G[Z]=(VN,VT,P,Z),VN=Z,U,VVT=0,1P:Z::=U0V1U::=Z11V::=Z00

解:

由Z::=U0∣V1,得U−(0)−>Z,V−(1)−>Z由U::=Z1∣1,得Z−(1)−>U,S−(1)−>U由V::=Z0∣0,得Z−(0)−>V,S−(0)−>V 由Z::=U0|V1,得U-(0)->Z,V-(1)->Z\\ 由U::=Z1|1,得Z-(1)->U,S-(1)->U\\ 由V::=Z0|0,得Z-(0)->V,S-(0)->V Z::=U0V1,U(0)>Z,V(1)>ZU::=Z11,Z(1)>U,S(1)>UV::=Z00,Z(0)>V,S(0)>V

所以,得到状态转换图如下:
在这里插入图片描述

2. 由右线性文法构造状态转换图

右线性文法G=(VN,VT,P,S)(1)G中形如U::=aB,则可化成:U—(a)—>B(表示状态U向状态B引一条箭弧线并标记符号a,不方便画图,就直接这样表示了,你们懂就行)(2)G中形如U::=a,则可化成:U—(a)—>Q(表示状态U向终止状态Q引一条箭弧线并标记符号a)(3)状态转换图开始状态标记为S,终止状态标记为Q 右线性文法G=(V_N,V_T,P,S)\\ (1) G中形如U::=aB,则可化成:U—(a)—>B(表示状态U向状态B引一条箭弧线并标记符号a,不方便画图,就直接这样表示了,你们懂就行)\\ (2) G中形如U::=a,则可化成:U—(a)—>Q(表示状态U向终止状态Q引一条箭弧线并标记符号a)\\ (3) 状态转换图开始状态标记为S,终止状态标记为Q 线G=(VN,VT,P,S)(1)GU::=aB,U(a)>BUB线a便(2)GU::=a,U(a)>QUQ线a(3)SQ

例题

设右线性文法G=({S,A,B},{a,b},S,P),其中P:S::=bAA::=bBA::=aAA::=bB::=a 设右线性文法G = (\{S,A,B\},\{a,b\},S,P),其中\\ P: S::=bA\\ A::=bB\\ A::=aA\\ A::=b\\ B::=a 线G=({S,A,B},{a,b},S,P),P:S::=bAA::=bBA::=aAA::=bB::=a

解:

过程和左线性差别不大,所以得到状态转换图如下:
在这里插入图片描述

3. 左线性文法和右线性文法之间的关系

等价关系右线性文法的产生式左线性文法的产生式S−>aS−>aS−>a1A1A1−>a1A1−>a2A2A2−>A1a2A2−>a3S−>A2a3 等价关系\\ 右线性文法的产生式 \qquad 左线性文法 的产生式\\ S->a \qquad S->a\\ S->a_1A_1 \qquad A_1->a_1\\ A_1->a_2A_2 \qquad A_2->A_1a_2\\ A_2->a_3 \qquad S->A_2a_3 线线S>aS>aS>a1A1A1>a1A1>a2A2A2>A1a2A2>a3S>A2a3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wonz

创作不易,一块就行。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值