问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

编译原理究竟有没有用?对编程的人

发布网友 发布时间:2022-05-02 02:31

我来回答

3个回答

热心网友 时间:2022-06-27 00:55

我跟你说,编译原理太有用了。
我是做手机游戏的,现在做一个游戏引擎。既然是引擎,就需要提供抽象的东西给上层使用。这里,我引入了脚本系统。
这个脚本系统包括一堆我根据实际需求自行设计的指令集,包括基本的输入输出,四则运算,系统功能调用,函数声明,调用等等(其实你要是用过lua或者其他游戏脚本你就知道了。)整个结构包括指令集、编译器、虚拟机等部分。这样,引擎提供一些基础服务,比如绘图,计算位置等,脚本就可以非常简单控制游戏。甚至快速构建新游戏。你应该知道QUAKE引擎吧?
这里提供给你一个计算器的小程序,应用了EBNF理论,支持表达式,比如(2+3*6)*4+4,你自己体验一下它的简洁和强大。
/*
simple integer arithmetic calculator according to the EBNF
<exp> -> <term>{<addop><term>}
<addop>->+|-
<term>-><factor>{<mulop><factor>}
<mulop> -> *
<factor> -> ( <exp> )| Number
Input a line of text from stdin
Outputs "Error" or the result.
*/
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

char token;/*global token variable*/
/*function prototypes for recursive calls*/
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();/*load token with first character for lookahead*/
result = exp();
if(token=='\n')/*check for end of line */
printf("Result = %d\n",result);
else error();/*extraneous cahrs on line*/
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++语言本身的理解。
你要想有好的发展,还是学吧。

热心网友 时间:2022-06-27 00:56

懂点没有坏处啊,懂了这个,你可以在编程的时候根据编译原理进行适当优化。

热心网友 时间:2022-06-27 00:57

总要懂一点的啊
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
长春小飞没有车没有房 碳钢的多久生锈 碳钢多久会生锈 碳钢多长时间会开始生锈 碳钢和铝哪个容易生锈 梦见天宫图是什么意思 光遇2023好友树解锁图鉴 光遇二级节点多少个 ...火柴小女孩》《词语手册》里有很多词语的意思的,求告知 暖融融解释 领淘通淘客助手这个软件怎么样? 解放战争死了多少平民 最近逛淘宝不停买东西,只要便宜点就买,怎么办,停不下来了,是不是上瘾了?怎么办,没多少钱了 我觉的国共内战时 *根本没有那么多人 最多就是1百万? 有时候我觉的历史教材也是骗人的 二战时期中国国死多少人 什么是即时编译技术? 计算机专业不需要开设编译原理课程吗? 国共内战中,牺牲的国军高级将领有哪些? 客户说便宜点就买了,如何回答? 学习编译原理和操作系统对编程能力有什么作用? 国共内战时期 双方的损失情况 中国历史上哪次战役死伤人数最多? 目前处理并行编译技术有哪几种方法 抗日结束包括内战 我国共产党损失了多少人 解放战争毕竟都是中国人,国共两党不会真的下死手吧? 战上海一仗,国共两方实际死亡多少兵? 三年内战国共双方伤亡总人数是多少? 应用编译优化哪个模式好 解放战争中国共个伤亡多少人? 编译原理除了可以用来编写编译器,还在哪些领域可以用到编译原理的知识 内战导致多少人死亡? 国共内战战役顺序 离散数学。 水晶字,pvc字能够制作成发光字效果吗 编译技术的发展历程 背发光字水晶固定方法 背发光字的水晶板个字怎么固定一块 背发字悬空字悬空多少效果最好 背发光字怎样安装 背发光字怎么安装在墙上不能打孔 打折就买是什么心理 快手上晒自己很便宜就买很多东西的人,是怎么做到的? 总喜欢买便宜货是一种什么心理? 什么样的无耳洞耳夹对耳朵比较好呢? 男朋友给我买东西然后说我看挺便宜的就买了……他什么意思难道我只配便宜的东西?! 我们常听到顾客说,价格太高,便宜多少钱我就买,你不便宜我就再考虑考虑。这个 郑州哪儿有卖无耳洞耳夹 老是贪便宜买便宜货作何心理? 背发光字亚克力板要比字壳小多少 然后让自己不乱花钱,我经常看到打折就买,不管有没有用,反正便宜就买 “哪个便宜就买哪个”怎么翻译