編譯有人嗎
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++語言本身的理解。
你要想有好的發展,還是學吧。