关于编译原理的一道题目:如何将正规文法转换成正规式!!

theMost 2002-04-05 09:50:31


谢谢,各位大虾帮忙!
...全文
1472 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
alphapaopao 2002-10-04
  • 打赏
  • 举报
回复
大家搞基础理论吧
词法分析,语法分析
http://www.csdn.net/expert/topic/1068/1068492.xml?temp=.9558679

欢迎来搞,搞费从优

这个小小的超难的帖子怎么连看都没人看啊,是不是高人太少了?
不得不采用轰炸的方法,不得以
:)
theMost 2002-04-08
  • 打赏
  • 举报
回复
to:sandwish2000()

谢谢!你的方案,其实你的提议我已经仔细的思考过了
由正规文法转换成正规式的方法,用匹配来做,最后的结果不是最简化的。。
又有什么办法或规则来简化呢??
这样看来不是很好解决的。。
后来我发现了一个很好的解决办法,大家可以参考一下:

由正规文法构造正规式

将所给的正规文法,视为定义所含各非终结符所产生的正规集的一个联立方程组,通过解此方程组求得相应正规式
例:设已给正规文法G,S->aS|bA|b;A->aS
S=aS+bA+b ①
A=aS ②
用代入法求解:② -> ①; S=aS+bA+b => S=(a+ba)S+b
归纳为求解:X=RX+t
即:
X -> RX =>X={t,Rt,RRt,….,R(n)t} 即X=R*t
X -> t
即:S=(a+ba)*b 也就是(a|ba)*b

NB: 方程X=rX+t有形如X= r*t的解
例:
S->aS => S-> aS | aB => S = aS +aB ①
S->aB B-> bB |bC B = bB +bC ②
B->bB C->cC| c C = cC+c ③
B->bC
C->cC
C->c
代入②中:B= bB +bc+
由③得:C=c*c=c+
得B=b*bc+=b+c+
代入①中S= aS+a b+c+=a+b+c+



大家看看,这个算法怎么样??


tailong978915 2002-04-08
  • 打赏
  • 举报
回复

由正规文法构造正规式

将所给的正规文法,视为定义所含各非终结符所产生的正规集的一个联立方程组,通过解此方程组求得相应正规式
例:设已给正规文法G,S->aS|bA|b;A->aS
S=aS+bA+b ①
A=aS ②
用代入法求解:② -> ①; S=aS+bA+b => S=(a+ba)S+b
归纳为求解:X=RX+t
即:
X -> RX =>X={t,Rt,RRt,….,R(n)t} 即X=R*t
X -> t
即:S=(a+ba)*b 也就是(a|ba)*b

NB: 方程X=rX+t有形如X= r*t的解
例:
S->aS => S-> aS | aB => S = aS +aB ①
S->aB B-> bB |bC B = bB +bC ②
B->bB C->cC| c C = cC+c ③
B->bC
C->cC
C->c
代入②中:B= bB +bc+
由③得:C=c*c=c+
得B=b*bc+=b+c+
代入①中S= aS+a b+c+=a+b+c+
sandwish2000 2002-04-07
  • 打赏
  • 举报
回复
正则文法 -> 正则式
利用以下转换规则,直至只剩下一个开始符号定义的产
生式,并且产生式的右部不含非终结符.
规则 文法 正则式

规则1 A→xB,B→y A=xy

规则2 A→xA|y A=x*y


规则3 A→x,A→y A=x|y



例:有文法G[s]
S→aA|a,
A→aA|dA|a|d
于是: S=aA|a
A=(aA|dA)|(a|d)A=(a|d)A|(a|d)
由规则二: A=(a|d)*(a|d)
代入:S=a(a|d)*(a|d)|a
于是:S=a((a|d)*(a|d)|ε)

sandwish2000 2002-04-07
  • 打赏
  • 举报
回复
利用自动机原理!建立一个数据结构(链表),每个节点作为一个状态,
算法:
1) 对任何正则式r,选择一个非终结符S作为识别符号.
并产生产生式 S→r
2) 若x,y是正则式,对形为A→xy的产生式,重写为
A→xB B→y,其中B为新的非终结符,B∈VN
同样: 对于 A→x*y A→xA A→y
A→x|y A→x A→y

例: 将R=a(a|d)*转换成相应的正则文法
解:1) S→a(a|d)*
2) S→aA
A→(a|d)*
S→aA
A→(a|d)A
A→ε
S→aA
A→aA|dA
A→ε
DaNiao 2002-04-05
  • 打赏
  • 举报
回复
是要自己写程序呢,还是说明方法,或着最好是允许用现成的工具
theMost 2002-04-05
  • 打赏
  • 举报
回复


当然是自己写程序了,

所用语言不限!
主要是算法问题!

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧