中易网

大家觉得对编译器及编译原理需要掌握到一个什么程度

答案:1  悬赏:10  
解决时间 2021-11-14 13:18
大家觉得对编译器及编译原理需要掌握到一个什么程度
最佳答案
我跟你说,编译原理太有用了。
我是做手机游戏的,现在做一个游戏引擎。既然是引擎,就需要提供抽象的东西给上层使用。这里,我引入了脚本系统。
这个脚本系统包括一堆我根据实际需求自行设计的指令集,包括基本的输入输出,四则运算,系统功能调用,函数声明,调用等等(其实你要是用过lua或者其他游戏脚本你就知道了。)整个结构包括指令集、编译器、虚拟机等部分。这样,引擎提供一些基础服务,比如绘图,计算位置等,脚本就可以非常简单控制游戏。甚至快速构建新游戏。你应该知道QUAKE引擎吧?
这里提供给你一个计算器的小程序,应用了EBNF理论,支持表达式,比如(2+3*6)*4+4,你自己体验一下它的简洁和强大。

#include
#include
#include

char token;

int exp(void);
int term(void);
int factor(void);

void error(void)
{
fprintf(stderr,"Error\n");
exit(1);
}

void match(char expectedToken)
{
if(token==expectedToken)token=getchar();
else error();
}

main()
{
int result;
token = getchar();
result = exp();
if(token=='\n')
printf("Result = %d\n",result);
else error();
return 0;
}

int exp(void)
{
int temp = term();
while((token=='+')||(token=='-'))
switch(token)
{
case '+':
match('+');
temp+=term();
break;
case '-':
match('-');
temp-=term();
break;
}
return temp;
}

int term(void)
{
int temp = factor();
while (token=='*')
{
match('*');
temp*=factor();
}
return temp;
}

int factor(void)
{
int temp;
if(token=='('){
match('(');
temp = exp();
match(')');
}
else if(isdigit(token)){
ungetc(token,stdin);
scanf("%d",&temp);
token = getchar();
}
else error();
return temp;
}
其实编程学到一定程度总是没有方向了,总是在问学C/C++下一步怎么学啊,觉得掌握了该语言了云云,实际上,你缺少的就是这些软的东西,缺少的是理论。
编译原理不是单一的理论,它涵盖了一个niche,里面可以学到很多其他知识,比如正则表达式、BNF、EBNF、分析树、语法树还有很多运行时环境等知识
这些给你带来的是非常丰厚的回报。不说多了,学完运行时,你就会加深对C++语言本身的理解。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
lol150金币买的冠绝勋章有什么用
夏天穿短裤,但是腿上皮肤不白,怎么解决?
鼓楼区开封市华捷音响行地址在什么地方,想今
请问从公明三和人才市场怎样去龙华三和职业介
准备顺道去深圳铭恒看看他们的CS野战装备,有
三星平板手机n5120港版开机密码忘记了
松下等离子电视机好不
瓜沥镇绣花厂招工信息
如果我的手机号码归属地是达州,现在我在深圳
還藩的意思是什么?還藩的释义是什么啊?
夷刜的意思是什么?夷刜的释义是什么啊?
冲击钻加长钻头大概多少钱?
正常的成年人可不可以天天喝骨头汤?
锅炉燃气改造方法是怎样的?
孩子一年级,记忆力很好,不知道为什么就是口
推荐资讯
梅口村怎么去啊,有事要去办理
苏州工业用排风扇厂家哪家好?
广电局变企业的问题
玩DNF游戏用什么牌子的键盘好?
梦见老鼠在衣服上是什么意思?好不好呢?
有关金项链的重量
中国联通(白家务营业厅)地址好找么,我有些事
为何左手的小手指和无名指总有麻木的感觉
全国一等奖作文:我有一个绿色梦
男属猪女属兔今年四月份的结婚吉日有哪天呢?
广东大沥至和顺最晚公交车几点?
黄体功能不足应该吃什么食物?
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?