请大家帮忙解决两个编译原理的问题,理解不是很清楚请大家给我讲讲。谢谢

WYlslrt 2006-09-23 11:11:45
1.一文法:
S->a|^|(T)
T->T,S|S
消去文法的左递归,然后对每个非终结符写出不带回溯的递归子程序。
我这样写的
里面只有T->T,S|S是具有左递归的,改为
S->a|^|(T)
T->ST'
T'->,ST|€

然后不知道什么是不带回溯的递归子程序,其实不明白的是递归子程序。
-------------------------------------------------------------------
2.文法
E->TE'
E'->+E|€
T->FT'
T'->T|€
F->PF'
F'->*F'|€
P->(E)|a|b|^
计算这个文法的每个非终结符的FIRST和FOLLOW。
对于FIRST和FOLLOW我的理解有点模糊,哪位可以给我讲一讲,能给出详细推导过程更好。谢谢。
T->
...全文
184 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
WYlslrt 2006-09-27
  • 打赏
  • 举报
回复
算了,结帖了。
WYlslrt 2006-09-26
  • 打赏
  • 举报
回复
定一定
mmmcd 2006-09-24
  • 打赏
  • 举报
回复
对于:
S->a|^|(T)
T->ST1
T1->,ST|€
递归子程序:
int S();
int T();
int T1();

int S(){//S->a|^|(T)
if(fetchtoken()=='a'){
...
}
else if(fetchtoken()=='^'){
...
}
else if(fetchtoken()=='('){
T();
if(fetchtoken()==')') ... else ...
}
else ...
...
}

int T(){//T->ST1
S();
T1();
}

int T1(){//T1->,ST|€
if(fetchtoken()==','){
S();
T();
}else ...
}

WYlslrt 2006-09-24
  • 打赏
  • 举报
回复
谢谢楼上两位,那第二个问题呢。
dengsf 2006-09-24
  • 打赏
  • 举报
回复
不带回溯的子程序就是根据下一个输入字符就能够确定用哪个产生式。
回溯的方法就是先尝试用某个产生式展开,
一直到分析不能继续(如没有产生式,任何产生式的都不能匹配下一个字符等等),
就回退到前一个分支点,选择其他。

33,010

社区成员

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

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