饼子堂比武贴——文法设计和判断

laomai 2006-03-10 09:53:11
前一阵在堂里灌水的时候,无意中发现了一个有意思的现象,狗的名字叫“被人遗忘的狗”,托托的名字改成了“被狗遗忘的人”,那么,把字符串中的被字后面的“人”用“被狗遗忘的人”代替,被字后面的“狗”用“被人遗忘的狗代替”,无限递归下去,
可以得到一个如下的字符串序列
“被人遗忘的狗”->“被被狗遗忘的人遗忘的狗”->"被被被人遗忘的狗遗忘的人遗忘的狗”->....
“被狗遗忘的人”->“被被人遗忘的狗遗忘的人”->“被被被狗遗忘的人遗忘的狗遗忘的人”->....

现在的问题是,
(1)对这个问题从编译原理的角度加一个抽象,写出能构造出以上所有字符串序列的文法,即写出文法的终结符、非终结符、产生式等等,并对这个文法进行分析,如是几型文法,是否有二义性。
(2)从数学的角度进行抽象,以双递归函数的形式或者通项公式的形式表达出两个字符串序列的各项,并看看他们在数学上有什么性质。

老规矩,禁止灌水回复且本贴无分。
...全文
281 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaosong8584 2006-03-22
  • 打赏
  • 举报
回复
我是来上课的,大家叫我老师好了
iamcaicainiao 2006-03-10
  • 打赏
  • 举报
回复
村长一定要的通项公式,一个就够了

f(n) = 被 f(n-1) 遗忘的 f(n % 2)
f(0) = 狗
f(1) = 人

it's right.
sandrowjw 2006-03-10
  • 打赏
  • 举报
回复
漏了,f(0)和f(1)换一下的话还有一个公式,结论和上面那个正好相反。
sandrowjw 2006-03-10
  • 打赏
  • 举报
回复
村长一定要的通项公式,一个就够了

f(n) = 被 f(n-1) 遗忘的 f(n % 2)
f(0) = 狗
f(1) = 人

我们只取n >= 3情况下的解集,可见f(n)中狗和人出现的次数分别为 [n / 2]和[n / 2 + 1]次。
其他的还有什么等补充啦,呵呵
txj_killer 2006-03-10
  • 打赏
  • 举报
回复
上下文无关文法,本题似乎难度不是很大,mark一下,空了回来看。
sandrowjw 2006-03-10
  • 打赏
  • 举报
回复
另外声明一下,我不叫被狗遗忘的人,我叫被人遗弃的猫
sandrowjw 2006-03-10
  • 打赏
  • 举报
回复
寒,编译的东西都忘了,这个文法可以写成

终结符:
starter -> 被
dog -> 狗
man -> 人
forget_adj -> 遗忘的

非终结符:
ForgetSequence, ManForgetDog, DogForgetMan, ForgetObject, ManDefinition, DogDefinition

文法:
ForgetSequence ::= ManForgetDog | DogForgetMan
ManForgetDog ::= starter ManDefinition forget_adj dog
DogForgetMan ::= starter DogDefinition forget_adj man
ManDefinition ::= DogForgetMan | man
DogDefinition ::= ManForgetDog | dog

是上下文无关文法,没有左递归,没有二义性,根据终结符“被”的数量可以用字顶向下的LL(1)解析。
lexchou 2006-03-10
  • 打赏
  • 举报
回复
放到手机里上课去看,下课后回来回帖

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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