1.編譯原理學什麼?
編譯原理這一學科,主要學習的是編譯器方面的原理與技術,我們能從中學會各種算法與代碼的原理,明白計算機是如何“聽懂人話”,我們的代碼是如何經過編譯器轉換成機器語言,這樣不僅能實作自己去編寫簡單的小編譯器,也能通過此學科去接觸已有各編譯器的思想,認識到程式設計方面更多要注意的問題以及解決的方向,站在本質的角度看代碼,進而更能成就計算機專業人員的計算機邏輯思維。
2.為什麼要學編譯原理?
說到編譯原理,人們喜歡把這門學科比作人體解剖和造輪子,是計算機中和代碼作鬥争的一門學科。據本人了解,學編譯原理是為了讓計算機專業人員更清楚計算機的工作過程,追溯更底層的編譯原理,使人不再局限于已有的死性代碼形式的限制,讓程式設計人員有更飽滿更獨立的程式設計思維。就像畫家學解剖那樣,我們學程式設計也許不是為了做編譯器,而是從學習編譯的原理去掌握更多計算機本質的東西,這樣有利于我們脫離對代碼的過度依賴,進而寫出更優質、更适合編譯器的代碼。按個人的了解是,沒學編譯原理,程式員隻能是代碼的奴隸,學了編譯原理,代碼才是你的工具,你才能真正明白代碼和編譯器是怎麼一回事,進而更好地利用它們,玩轉它們。此外,編譯原理作為計算機中“追本溯源”的一門接地氣學科,掌握它還能提高自己對程式的檢查和分析能力,雖說我們不一定學了編譯原理都能做一個強大而創新的編譯器,但通過學習編譯原理,我們能對程式設計有一種全新的認識,從完全的被動到思想上的主動,這就是所謂勞工與工程師的差別吧。
3.怎麼學編譯原理?
編譯原理作為一門本質性與理論性較強的學科,可能一開始入門的時候會略感枯燥難懂,因而需要做好心理準備,明白這一學科的實際上實用意義與重要性,進而提高自己的興趣,然後就是需要有一定的耐心,弄懂各種學術性詞句的意義與作用,這樣有利于對知識的透徹掌握。當然,任何理論都離不開實踐,尤其是編譯原理,在學習的過程中我們更應該多動手,根據自己的想法去實踐,把課本上的知識轉換成屬于我們自己的工具。
4.思考:在沒有學習本書理論之前,如果讓你寫一個編譯器,你是什麼思路?
我們都知道,機器語言其實隻是0和1的組合,在不了解任何已有理論的情況下,我覺得編譯器是将我們編寫的代碼或指令轉化成不同的0、1組合,進而讓計算機實作工作。是以,如果我要做一個編譯器,我首先要知道我所編譯計算機的工作需求,然後把這些需求分類,從大分類到小分類,就像樹狀圖那樣越分越細。分類好工作需求後,又去分類二進制數字的組合,也是從大類到小類,最後把分類号的工作需求和二進制組合有規律地對應起來,舉個例子說,假如安排到00開頭是表示讓計算機輸出,那麼001是輸出數字,002是輸出個字元,後面資料越長,目的就越清楚,直到二進制數字長度足夠表達程式員的意思。就這樣,我們就能成功地把二進制資料與工作需求建立起一個線性的關系,而這時候再去科學地制定代碼,根據有規律的文法讓我們的代碼轉換成相應的二進制資料,二進制資料作為計算機語言控制計算機的高低電頻率,進而實作不同的工作執行。
設計過程:
需求分類-->制定有規律二進制資料組合-->制定能編譯出相應二進制資料的代碼文法。
運作原理:
有規律的代碼-->有規律的二進制資料組合-->相應的高低電頻-->計算機實作工作。