求LR(0)文法。

菠菜Hello_World 2005-05-21 09:39:40
最近学编译原理,最后要做成一个编译器,但是表达式的文法没有找到。做成的语法分析部分要能识别,while() if() else for()而且要求能嵌套,没有想出来。 提供思路也可以。
...全文
153 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
mostideal 2005-05-22
  • 打赏
  • 举报
回复
给个地址,,你可以借鉴一下。。
http://www.315soft.com/develop/Article_Show.asp?ArticleID=91
菠菜Hello_World 2005-05-22
  • 打赏
  • 举报
回复
LR(0)是自底向上吧。
xuzheng318 2005-05-22
  • 打赏
  • 举报
回复
这是文法的产生式
使用递归下降语法分析,先消除左递归
Z::=AcB|Bd
A::=AaB|c
B::=aA|a
****************************************/
#include "stdio.h"
char str[]="caaca";
int i=0;
void Z();
void A();
void B();
void ShowErr();
main()
{
Z();
printf("Right!\n");
}
void Z()
{
switch(str[i])
{
case 'c':
A();
if (str[i]=='c'){
i++;
B();
}else{
ShowErr();
}
break;
case 'a':
B();
if (str[i]=='d'){
i++;
}else{
ShowErr();
}
break;
default:
ShowErr();
}
}
void A()
{
if (str[i]=='c'){
i++;
while(str[i]=='a'&&str[i]!='\0')
{
i++;
B();
}
}
else{
ShowErr();
}

}
void B()
{
if (str[i]=='a'){
i++;
if (str[i]=='c')
A();
}else{
ShowErr();
}
}
void ShowErr()
{
printf("Error!\n");
exit(0);
}
Dev 2005-05-22
  • 打赏
  • 举报
回复
LR(0)文法,都不用预读,读到直接规约,不用移进,应该不是很难的

^_^

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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