编译有人吗
A. 做编译器有前途吗
有,只要你能做个能用编译器,那就是高级软件工程师了,大多数高级工程师都没这水平,其实做编译器根本没有意义,因为你做出来的不会有人用。。。只有大型软件公司诸如苹果,微软,intel推出新新型软硬件开发环境,或者用新语言包装开发组件的才会去做编译器,你是要去这些公司工作吗???????普通人做的编译器根本无法推广,质量保证不了,还有就是非常麻烦,编译器是非常复杂的,最低也要精通目标环境的汇编,被编译的语言(可以自己开发新的,也可以沿用旧的诸如C++等),还有就是令人头疼的正则表达式,这些是最基本要求,这还牵扯不到编译原理。。。。。
B. 有没有人介绍一些C编译软件,最好能够以中文名字保存的,本人对拼音不熟,都是打五笔字的,跪求
visual c++:这个耳熟能详的东西也就不必我再多说了,只不过在选择版本时最好选择vc2008 express或vc2010 express,首先,这两个版本可以从微软的官方网站上免费获得,不会被盗版所纠缠,其次,新版的vc与最新的C语言标准c99标准更加地接近,比vc6要好得多。
dev-c++:这个软件提供一个较小型,但功能俱全的IDE开发环境,可谓“麻省虽小,五脏俱全”,使用mingw编译器,其最新的版本与c99标准可以说完全兼容。该软件可以从各大软件站上找到。
mingw:linux/unix下着名的gcc编译器套件在windows下的移植版,安装mingw可以获得一个仿真的linux/unix命令行环境,在某些程序上可以获得更好的学习效果,该软件与c99标准的兼容度很高。如要安装,可以到sourceforge上去找安装文件。
gcc:这个就是linux/unix下着名的gcc编译器套件,参见上面的mingw。
另外,不建议使用中文的文件名,因为这可能会带来许多问题,包括但不限于编译器对些类文件名的支持性,以及汉字编码等问题,而对于变量名等标识符,是不可以使用中文名字的,这个没有为什么,是ANSI C标准中的规定,规定C语言的标识符只能含有数字、字母及下划线,所以你还是想想别的解决办法吧,比如你可以用英文单词来命名。
C. windows系统的源代码,为什么没人反编译出来
原因:
一是代码经过编译后,反编译是比较困难的。
二是代码量超级大;
三是能够反编译的力量没这么强大;
四是不是任何程序都能够完整“还原”。
微软现在也已经对部分代码实行了公开,有他的公开网站,不过在上面我至今没查到过我所需要的东西。
D. 译者跟编译者有什么区别吗
所谓译者就是翻译者,就是把A语言的书籍或者文献翻译成B语言的人,你看过一些外文书籍都会有译者某某某这样。编译,是一个计算机学科的专业词汇,所谓编译就是把程序员书写的高级语言程序(比如C语言或者JAVA再或者其他你听说过的高级编程语言)转化或者说编译成计算机可以识别的机械语言(机械语言就是二进制的高低电平),编译的过程还有一些细节就不说了,所谓编译者是个不严谨的叫法,因为现在基本不存在被直接人力书写的机械语言,因为太麻烦,人类软件从业者可以直接用高级语言,或者汇编语言来书写程序(源程序)然后电脑自带的编译器会完成编译,让程序可以被执行。我觉得我说的有点啰嗦。
E. 请问,编译软件最早是由谁发明出来的
Grave of Grace
后记
Grace Hopper是个非常amazing的人 (常被称为Amazing Grace),崇拜她的人相当多。虽然她的事迹很多,但是还有很多有类似事迹的人并没有像她这样受到众人的崇拜。由其中一点我们可以看出来:从1947年开始 (二战结束后第二年),她获得了第一个荣誉博士学位 (宾州大学),从那以后,她先后被40多所大学授予荣誉博士学位,其中包括芝加哥大学、华盛顿大学、马里兰大学等知名学府。各种妇女社会团体和学术组织都曾授予Grace各种称号和奖励。1991年,布什总统在白宫授予她的“美国国家技术奖” (National Medal of Technology) 是其中的最高奖项,她也是至今惟一获此殊荣的美国女性。她的名言有很多,她自己最喜欢的,也是她最喜欢对所谓的“年轻人”说的 (在她年老时,她所谓的年轻人就是“年龄不到我的一半的人就叫做年轻人”),这句话是:
“A ship in port is safe, but that is not what ships are built for.”
语录
下面Grace的语录中有几句比较有意思的话。
From then on, when anything went wrong with a computer, we said it had bugs in it.
The most dangerous phrase in the language is, “We’ve always done it this way.”
Humans are allergic to change. They love to say, “We’ve always done it this way.” I try to fight that. That’s why I have a clock on my wall that runs counter-clockwise.
Leadership is a two-way street, loyalty up and loyalty down. Respect for one’s superiors; care for one’s crew.
One accurate measurement is worth a thousand expert opinions.
Someday, on the corporate balance sheet, there will be an entry which reads, “Information”; For in most cases, the information is more valuable than the hardware which processes it.
We’re flooding people with information. We need to feed it through a processor. A human must turn information into intelligence or knowledge. We’ve tended to forget that no computer will ever ask a new question.
To me programming is more than an important practical art. It is also a gigantic undertaking in the foundations of knowledge.
They told me computers could only do arithmetic.
In pioneer days they used oxen for heavy pulling, and when one ox couldn’t budge a log, they didn’t try to grow a larger ox. We shouldn’t be trying for bigger computers, but for more systems of computers.
Life was simple before World War II. After that, we had systems.
We went overboard on management and forgot about leadership. It might help if we ran the MBAs out of Washington.
At any given moment, there is always a line representing what your boss will believe. If you step over it, you will not get your budget. Go as close to that line as you can.
I seem to do a lot of retiring.
I handed my passport to the immigration officer, and he looked at it and looked at me and said, “What are you?”
参考
维基网络:
http://en.wikipedia.org/wiki/Grace_Hopper
国立中央大学数学系:
http://li.math.ncu.e.tw/bcc16/pool/3.06.shtml
耶鲁大学计算机系:
http://cs-www.cs.yale.e/homes/tap/Files/hopper-story.html
计算机先驱:
http://202.207.0.245:9001/jisuanjifazhanshi/xianqu/18.htm
This entry was posted in网络3Cand taggedcompiler,debug,Grace Murray Hopper,传记,发明,编译器,起源. Bookmark thepermalink.Post a commentor leave a trackback:Trackback URL.
F. devc c++没办法编译,编译按钮是无法点击的(是暗着的),搞了好久都没办法,有没有人可以帮帮我。
哈哈,因为先前的程序没有关闭,他就会是暗的,我以前也遇到过这问题不过我一般都是有窗口的你可能窗口隐藏掉了
G. 很奇怪为什么国内没有任何组织或个人开发最底层的中文编译器呢
这是一个技术问题,你如果没读过编译原理(龙书)的话,你是看不懂下面的回答的。因为中国技术不足,没人能写出支持中文的lex和yacc。首先词法分析生成器lex,就对中文不友好,它只支持ascii字母,不支持中文。这意味着你编译器里的词汇只能是英文单词,不能是中文词汇。其次就是语法分析生成器yacc了,也不支持中文,只支持用英文写的语法规则,不能用中文书写。这意味着最最基本的语法规则是全英文的,这算哪门子中文编程语言。非常遗憾,中国目前没有牛人造出支持中文的lex和yacc来,否则全中文编译器一定会满天飞的,多到烂大街。为什么说多到烂大街?一个全中文的编译器其实仅仅需要修改编译器的前端词法分析器和语法分析器(语法分析器甚至无需大改动),后端直接对接开源代码即可,开源英文编译器已经烂大街了,把它们的后端移植过来就行了。但关键就是没有支持中文的自动化工具lex和yacc。
自动化这条路走不通,纯手写总可以吧。我猜测易语言就是前端纯手写的全中文编译器。你可以使用易语言,绝对可以达到你的要求。但是从技术的角度来讲,lex和yacc的技术高度远高于易语言,毕竟lex和yacc号称编译器的编译器,编译器之母。
H. 编译原理究竟有没有用对编程的人
我跟你说,编译原理太有用了。
我是做手机游戏的,现在做一个游戏引擎。既然是引擎,就需要提供抽象的东西给上层使用。这里,我引入了脚本系统。
这个脚本系统包括一堆我根据实际需求自行设计的指令集,包括基本的输入输出,四则运算,系统功能调用,函数声明,调用等等(其实你要是用过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++语言本身的理解。
你要想有好的发展,还是学吧。