讀書筆記(一) 編譯原理各種概念

2021-06-23 02:41:02 字數 1776 閱讀 8454

上週買了一本《編譯原理》,這周開始看,剛開始都是一些概念的東西,讀起來有些乏味,但是還算能讀的懂^_^,相信後面的章節就是極度的讓人費解··總感覺看這種技術的東西,就像過眼雲煙,當時看的時候可能會有些理解,但是過一段時間再回來看的時候,發現又是在預習···所以還是畫點時間寫個讀書筆記吧···對自己有用,或者對別人也能起到作用。ok,開始記錄一些概念吧····

何為編譯器:根據自己的理解就是把源**變成機器碼的工具。哈哈,看看書上怎麼說的,總結一下就是:將某種程式語言翻譯成一種能夠被計算機執行的形式的軟體系統稱為編譯器。

說到編譯器,還有另外一種語言處理器必須要拿出來說一下,那就是直譯器。

這樣的定義會不會立馬讓你想到shell指令碼的第一行經常出現的#!/bin/bash ,這個就是在告訴作業系統用哪一種直譯器,^_^··有點意思,想一想shell指令碼的執行··一下子明白了直譯器的某些特性。不需要編譯···一句一句的「解釋」執行,這就是直譯器的作用嘛··

-----繼續回到編譯器,有個小題目說為什麼編譯器產生組合語言而不是機器語言的好處是什麼?考慮了一下,編譯器最後不就是輸出機器碼麼···0 0 ·再看看編譯的完整結構,這裡的編譯器應該說的是結構中的乙個步驟而已。。。如果是這樣,那麼這是為什麼呢···看看網上怎麼說的,

①方便除錯和優化,這時就能想到iar或者keil等工具debug的時候會有乙個debug視窗,裡面都是彙編····^_^··聯想上去這就好理解了,機器碼都是0101001的···就不是給人看的·如果需要做編譯優化的話,相信優化一大堆的010101····是任何人都不想幹的···而彙編相對就好多了··至少也是個助記符吧··

②不做重複勞動。貌似很有道理!!!如果直接把高階語言翻譯成機器碼···這不是又得需要一批人把高階語言與機器碼做乙個對映·····以前人家做的組合語言與機器碼的活···還得再來一遍··不太好,哈哈

③減少編譯器設計的複雜度。從彙編到機器碼的轉換可以通過硬體來實現,那麼軟體上可以少做這個工作,減少編譯器設計的複雜度···確實,技術本來就來相互融合使用的····

繼續····編譯器的結構:分析部分(前端)+ 綜合部分(後端)

分析部分有:詞法分析+語法分析+語義分析。

綜合部分有:**生成器+優化器

來個例子分析一下:

nresult =nnow*20 ;

很簡單的一條語句,詞法分析之後:<=>  <*> <20>

僅僅將變數以及符號換成詞法單元····然後語法分析將根據上面的結果建立乙個語法樹,語義分析將會檢測語法樹中的錯誤羅···例如陣列的下標必須是整數···這個階段將會檢查,這個階段還會進行型別的自動轉換··int * float都會自動換成float··等等

然後就是中間**生成器。一些比較牛x的翻譯技術就是用在這一段了··目前還不了解啥啥啥的技術···後面再慢慢說···中間**的形式多種多樣··視特定的編譯器而定····

然後就是**優化。高階語言轉換成語法樹、然後生成中間**··中間**中(前面提到為什麼要先生成中間**···o(∩_∩)o 哈哈··這不就是在優化麼·····)可以做大量的優化工作,這也依賴於優化的演算法····牛x的演算法再次不知道··此處略過···優化之後就生成了更短的指令序列···

最後就是**生成羅········

最後列舉一下常用的編譯器構造工具:

語法分析器的生成器、掃瞄器的生成器、語法制導的翻譯引擎、**生成器、資料流分析引擎、編譯器構造工具集。

說了這麼多乏味的概念·······最後來個笑話來放鬆一下吧····

青年:「我想要有很多錢。」 

禪師:「只要你能找到七個球,你的願望就能會實現。」

青年:「您是說七龍珠嗎?」 

禪師搖搖頭:「不,是雙色球…」

《深度學習的數學》筆記 各種概念

第二章 神經網路的數學基礎 第三章 神經網路的最優化 第四章 神經網路和誤差反向傳播法 第五章 深度學習和卷積神經網路 附錄神經元的 點火 神經元固有邊界值 閾值 神經元訊號傳遞 點火 權重 神經單元 unit 啟用函式 activation function sigmoid函式 單位階躍函式 線性...

Git Pro讀書筆記 1 概念

直接快照,而非比較差異 git與其他版本控制系統的主要差別在於 git 只關心檔案資料的整體是否發生變化 svn 只關心檔案內容的具體差異 如 那些檔案更新了,都更新了哪些行的什麼內容 git每次提交更新時會縱覽一遍所有檔案的指紋資訊並對檔案作一快照,然後儲存乙個指向這次快照的索引。svn 近乎所有...

Git Pro讀書筆記 1 概念

直接快照,而非比較差異 git與其他版本控制系統的主要差別在於 git 只關心檔案資料的整體是否發生變化 svn 只關心檔案內容的具體差異 如 那些檔案更新了,都更新了哪些行的什麼內容 git每次提交更新時會縱覽一遍所有檔案的指紋資訊並對檔案作一快照,然後儲存乙個指向這次快照的索引。近乎所有操作都可...