社区
新手乐园
帖子详情
求LR(0)文法。
菠菜Hello_World
2005-05-21 09:39:40
最近学编译原理,最后要做成一个编译器,但是表达式的文法没有找到。做成的语法分析部分要能识别,while() if() else for()而且要求能嵌套,没有想出来。 提供思路也可以。
...全文
153
4
打赏
收藏
求LR(0)文法。
最近学编译原理,最后要做成一个编译器,但是表达式的文法没有找到。做成的语法分析部分要能识别,while() if() else for()而且要求能嵌套,没有想出来。 提供思路也可以。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)文法,都不用预读,读到直接规约,不用移进,应该不是很难的
^_^
LR
0
文法
分析器
LR
(0)
文法
分析器(
LR
(0) grammar parser)对于实现整个编译器而言,语法分析器是整个过程的核心部分,同时对构造整个编译器起到了关键作用,对程序的进一步扩展,以后有机会涉及对编译器的编写而言,将会是很容易便上手,当然,对于复杂的
文法
,复杂的语言而言,需要对
文法
的识别进一步扩展
Java实现的
LR
0
文法
Java语言实现的
LR
0
文法
,编译原理作业
编译原理
LR
0的
文法
分析
这个
文法
是关于
LR
0的
文法
,是个人的作业,做的浅显,望大家多多指教,批评更正!
LR
(0)
文法
通过构造
文法
的有限自动机(DFA),得出
LR
(0)分析表和分析程序,并且能够判别字符串是否属于当前
文法
,内含C++源代码和实验报告说明
LR
(0)
文法
分析器
LR
(0)分析器,能进行
LR
(0)
文法
的判断,分析句子,输出语法树
新手乐园
33,311
社区成员
41,784
社区内容
发帖
与我相关
我的任务
新手乐园
C/C++ 新手乐园
复制链接
扫一扫
分享
社区描述
C/C++ 新手乐园
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章