高分请教消除左递归问题。

「已注销」 2009-08-14 03:01:00
在下在读《编译原理 龙书》时实在是理解不了左递归。
例子:
expr->expr+term

开始时向前看指针指向expr,于是决定调用expr对应的函数,但是expr不是终结符号,所以向前看指针不做变动,所以在产生式中的expr也是调用了相同的函数,导致了递归调用,叫做立即左递归。
问题1:上述表明函数的调用取决于向前看指针,这样理解对么?

对应文法
E->E+T/T 的消除左递归的方法是
使 E->TE'
E'->+TE'/空 (T是终结符号)
问题2:请高人结合expr->expr+term,举个具体的例子。

问题3:是不是一定要把 expr->expr+term 改成 expr->term+expr 才能与 E->TE' E'->+TE'/空 匹配 ? 改了以后就不存在左递归了那改了还有什么意义?

脑子里是越来越乱,请高人帮帮我,整理一下思路。


...全文
771 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2009-08-18
  • 打赏
  • 举报
回复
up
「已注销」 2009-08-16
  • 打赏
  • 举报
回复
up
xingzhe2001 2009-08-14
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zhang6yong 的回复:]
E->TE' 是不是说  expr->expr+term 和 expr->term+expr (term 是终结符号,expr非终结符号)  中只有一个是匹配的? 因为E->TE' 产生体中的最左端是T终结符号,那么expr->expr+term 就不匹配了,因为expr->expr+term的最左端是expr非终结符号。

大爷,大哥,大娘,大姐,帮帮我吧。
[/Quote]
不是这个意思,是说吧一个产生式变成两个产生式
xingzhe2001 2009-08-14
  • 打赏
  • 举报
回复
对于 expr->expr+term是非法的吧,假如expr->expr+term|term,那么消除的方法是

expr->term expr'
expr'->+term expr'|空
「已注销」 2009-08-14
  • 打赏
  • 举报
回复
E->TE' 是不是说 expr->expr+term 和 expr->term+expr (term 是终结符号,expr非终结符号) 中只有一个是匹配的? 因为E->TE' 产生体中的最左端是T终结符号,那么expr->expr+term 就不匹配了,因为expr->expr+term的最左端是expr非终结符号。

大爷,大哥,大娘,大姐,帮帮我吧。
yshuise 2009-08-14
  • 打赏
  • 举报
回复
等我有时间再说。
「已注销」 2009-08-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xingzhe2001 的回复:]
左递归就是像例子中E->E + T | T   
E->E.... 非结束符推出自己 将会无限递归中
消除左递归
举个例子

例 算术表达文法
  E->E + T | T  ( T + T . . . + T )
  T->T * F | F  ( F * F . . . * F )
  F->( E ) | id
消除左递归后文法
  E->TE'
  E'->+ TE'|字符空
T->FT' 
  T'->* F T '|字符空
  F->( E ) | id
[/Quote]

高人,可不可以在向前看符号,和函数调用的角度,举个例子?
「已注销」 2009-08-14
  • 打赏
  • 举报
回复
现在脑子全乱了,都不知道该问什么问题,还请高人指点啊。。。。
xxcclowlg 2009-08-14
  • 打赏
  • 举报
回复
没看懂.......
「已注销」 2009-08-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xingzhe2001 的回复:]
->不是指针的意思吧
[/Quote]

是“可以定义为”。
xingzhe2001 2009-08-14
  • 打赏
  • 举报
回复
左递归就是像例子中E->E + T | T
E->E.... 非结束符推出自己 将会无限递归中
消除左递归
举个例子

例 算术表达文法
E->E + T | T ( T + T . . . + T )
T->T * F | F ( F * F . . . * F )
F->( E ) | id
消除左递归后文法
E->TE'
E'->+ TE'|字符空
T->FT'
T'->* F T '|字符空
F->( E ) | id
xingzhe2001 2009-08-14
  • 打赏
  • 举报
回复
->不是指针的意思吧

64,671

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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