1. 程式人生 > >編譯原理學習

編譯原理學習

目標程式-》編譯過程-》機器程式碼(編譯過程分為編譯器和直譯器)編譯器作用將目標語言編譯為目標等價的語言。而直譯器會獲取使用者輸入選擇的想要生成的機器程式碼。(就是可以隨意轉換)java的位元組碼。

編譯過程:舉例:post = inter+arg*60

詞法分析(單詞詞法分析)會整合為單獨的語法。post  = id1+id2*60

語法分析(語句分析建立語法樹)

語義分析(型別檢測以及型別轉換)

中間程式碼生成(跨平臺完成的地方。)

程式碼優化

機器程式碼生成(機器語言,或者組合語言)

2.靜態和動態區別

(靜態變數是先宣告在賦值)


這個我自己照著敲了一遍懂了。

還有就是靜態初始化時機是在哪個階段,目前有點蒙。(第一次呼叫類)

3 。值傳遞。引用傳遞

 //值傳遞,引用傳遞 (小心別名機制)
        static int x = 10;
        static void Main(string[] args)
        {
            Add(x);//值傳遞結果10
            Console.Write(x);
            Z z = new Z();
            AddZ(z);//引用呼叫
            Console.Write(z.r);//結果30
            Console.ReadLine();
        }
       static void Add(int arg) {
            arg = arg * 3;
        }
        static void AddZ(Z arg)
        {
            arg.r = arg.r * 3;
        }

4。語法翻譯過程:

字首表示式,

中綴表示式(我們平時人用的就是9+(3+1)*3+10/2),

字尾表示式(機器識別的。棧和樹表示,遇到數字進棧,遇到符號將處於棧頂的數字出棧,進行運算,結果進棧,依次):

    931-3*+102/+  :  1.931 -   2. 923 * 3. 96 + 4. 15 10 2 / 5. 15 5 + 6. 20 

中綴轉字尾(遍歷中綴左到右,數字輸出,符號判斷與棧頂符號優先順序,若有括號或者優先順序底與棧頂符號則棧頂元素依次出棧全部,將當前符號進棧):

        1.9輸出    2.+進棧  3.(進棧  4.3輸出  5. -進棧 6.)出棧- 7.*進棧 8.3輸出 9.出棧*+進棧+ 10.10輸出 11./進棧 12. 2輸出

        13.輸出/+ 

字尾表示式:931-3*+102/+ (大話資料結構有圖形例項)

   中綴轉字首:後往前,數字輸出,符號判斷棧頂符號優先順序,大於等於時輸出,有括號直接進,在將最終的翻轉.

使用var定義變數和object不同,它在效率上和使用強型別方式定義變數完全一樣,因為還沒執行時編譯器就已經根據上下文推斷出是什麼型別了,所以要比object效率要高。善用隱式型別,在難以確定型別的情況下如將用於儲存匿名型別或匿名型別集合時使用會有奇效,在新語法中的使用頗多,是一把程式設計利器。

中間程式碼。反射就在這層次處理

只能吸收這麼多。後續再補。


相關推薦

編譯原理學習筆記(一)

.com bubuko image img 記錄 mage 學習 內容 基礎 簡單地瀏覽了一下第一章,主要是基礎性內容,就不記錄了。編譯原理學習筆記(一)

編譯原理學習筆記

1.2編譯器的結構:源語言 - >語法分析 - >抽象語法樹(AST) - >程式碼生成:舉例採用後序遍歷AST的方式實現一個加法程式碼生成(到棧式計算機指令) 1.3編譯器的例子:棧式計算機(JVM) 2.詞法分析 2.1編譯器的階段:源程式 - >前端 -

編譯原理學習筆記之自上而下分析Ⅰ

一、自上而下分析法 從根部開始構造語法樹 自上而下分析法不能因為左遞迴存在而陷入死迴圈,不能產生回溯,即每一步推導的產生式必須是唯一的 1.消除左遞迴 左遞迴 形如A->Aa |b ,這種在建立分析樹時一直在左子樹死迴圈,因為推導的結果中最左還是A 或者多個

編譯原理學習筆記(二)翻譯程式的實現

上一節所學的主要是語法到語義的內容,通過手動構造語法樹來理解編譯過程。 在3.5節,書中給出了字尾表示式翻譯程式的java實現。根據前面的內容,今天對NC程式碼編譯給出簡易的實現。 在實現前,需要幾個準備內容用以簡化程式碼: 1. 正則表示式 正則表示式

編譯原理學習筆記(一)制導翻譯器

《編譯原理》在第二章中給出了一個翻譯表示式的例子(從中綴表示式到字尾表示式)。總結了如下內容: 1. 寫出描述語法規則的產生式(文法包含產生式集合與符號集合) 2. 根據文法建立對應語句的語法分析樹 3. 消除語言的二義性 4. 運算子的結合性以及優先順

編譯原理學習

目標程式-》編譯過程-》機器程式碼(編譯過程分為編譯器和直譯器)編譯器作用將目標語言編譯為目標等價的語言。而直譯器會獲取使用者輸入選擇的想要生成的機器程式碼。(就是可以隨意轉換)java的位元組碼。編譯過程:舉例:post = inter+arg*60詞法分析(單詞詞法分析)

編譯原理學習周入門教程--(2)編譯程式的六個工作流程

上篇我們介紹了什麼是編譯程式,簡單提到了這個“工廠”工作的六個階段。本篇介紹一下這六個階段。 “工廠”導航圖(翻譯工作的過程):      流水線一--詞法分析: 也就是從左到右一個一個的讀入源程

編譯原理學習:TINY語言詞法掃描程式實現

最近對解釋型程式(類似python或者是linux裡的bc計算器)非常感興趣,就開始學習一下編譯原理。今天自己實現了TINY語言的詞法掃描程式。大部分參考《編譯原理及實踐》一書。但是我做了一些小小的改進。 先說一下TINY語言: 1、註釋:放在一對大括號內。書上的註釋不能巢

編譯原理第一章學習(習題解答)

計算機 tran 輸出 fort 容易 工具 諾伊曼 架構 調試 編譯原理 第一章 引論 1.1 練習 1.編譯器和解釋器之間的區別是什麽? 首先,編譯器是一個軟件系統或者說是一個程序,解釋器是語言處理器。其次,編譯器是把程序翻譯成能被計算機執行的形式並報告翻譯過程中發

Python 學習之路1 了解Python的編譯原理,運行速度

可能 程序集 nbsp 錯誤 解釋 .exe 完成 字節 方便 為什麽學習Python呢? 目前有許多的開發語言,其中運行速度最快的無疑是C語言了,因為C是最接近機器的語言,但是為什麽還有其他的各種語言呢,因為完成C語言的功能可能需要更多的代碼,而其他的語言可能需要

前端工程師為什麼要學習編譯原理

    轉自:https://zhuanlan.zhihu.com/p/31096468   前言   普遍的觀點認為,前端就是打好 HTML、CSS、JS 三大基礎,深刻理解語義化標籤,瞭解 N 種不同的佈局方式,掌握語言的語法、特性、內建 API。

前端工程師為什麽要學習編譯原理

服務端 直接 出發 nod 表達式 light 利用 無需 技術問題     轉自:https://zhuanlan.zhihu.com/p/31096468 前言 普遍的觀點認為,前端就是打好 HTML、CSS、JS 三大基礎,深刻理解語義化標簽,了解 N 種

如何學習編譯原理

對於沒有電腦科學基礎的程式設計師或初學者來說 一上來就看龍書 虎書是行不通的 全是理論知識 看得想睡覺我還試過看網易雲大學計算機專業的編譯原理課程 也是看得一頭霧水 看到80多講就看不下去了另外 LISP(計算機程式的構造和解釋)這本很多人推薦的書其實並不適合初學者 前3章和後面幾章難度差別有點大 可能是自己

編譯原理學習記錄1_程式編譯過程

前端:該階段的編譯工作主要依賴源程式,與目標機無關。 【語法分析】 在詞法分析基礎上,將單詞序列分解成各類語法短語(也稱語法單位,如:“程式”“語句”“表示式”)。可表示成語法樹(推導樹)。 通過語法分析,確定一個輸入串是否構成一個語法上正確的程式。

學習編譯原理的意義

   在國內,只有一本學校會教編譯原理和計算理論的課程。我們這邊的招聘經驗也表明,好學校學過編譯原理的學生的程式碼能力還是非常不錯的。視野也寬闊的多。我認為,學習的語言少了,只有一兩門,就會容易鄙視其他的語言使用者。 我認為這是潛意識的一種自我保護行為。視野容易變得狹隘。我認為這是軟體工程專業學生的必修課

為什麼要學習編譯原理

    經常會聽到有些人問,編譯原理那麼枯燥,而且又不是實用的東西,為什麼還要學習呢?     在此,我做一個簡要解釋,在解釋之前先舉一個例子:     在早些年,我們國家最先流行的是黑白電視,這一點70,80後尤其有感處,當時一個家庭能擁有一臺黑白電視就已經相當風光,當時的

編譯原理第一章學習總結

《編譯原理》讀書筆記及練習題解析 1.1節練習題 1.1.1 編譯器和直譯器之間的區別是什麼? 答:編譯器是把源語言程式(高階語言程式)翻譯成目標語言程式(機器語言程式),然後由虛擬機器(目標語言程式的執行環境)執行編譯的結果程式;由於這個過程很直接,所以編譯器的速度快於

編譯原理學習體會

編譯原理一般認為是較難的一門課.從網上的評論來看,有人說學了一年半軟體理論,就一門編譯看不懂;有人甚至說它是大本軟體課程裡最難的一門;有人抱怨國內的編譯教材沒有一本容易懂的.從筆者學習實踐來看,第一次學了一個多月,理論部分一知半解,第二次學了一星期,基本看懂詞法分析的理論部

前端要以正確的姿勢學習編譯原理(上篇)

webp 法規 怎麽 ref port java 編輯器 等於 都沒有 轉自:https://zhuanlan.zhihu.com/p/36301857 前言 最近在我的 timline 上面出現了很多類似《前端為什麽要學編譯原理》這類文章以及《前端怎麽學AST》

Stanford公開課《編譯原理學習筆記(1~4課)

目錄 一. 編譯的基本流程 二. Lexical Analysis(詞法分析階段) 2.1 Lexical Specification(分詞原則) 2.2 Finite Automata (典型分詞演算法-有