編譯原理入門筆記
什麼是編譯原理?
編譯原理這門課程本來是很多大學必修的一門課程,但是我的本科課程裡面並沒有安排這門課程,由於研究生需要研究這方面的基礎,於是開始自學。相信很多人都知道這門課程是計算機基礎課程中比較難入門的課程,於是我在開始之前也有點方,於是開始參考各路大神的經驗。
最終我在慕課上參加了哈工大張陳鄞老師的課程,其實網上的課程基本都差不多,反正都比較枯燥,選擇你喜歡的就好。(ps:我主要是看臉,哈哈哈哈~,陳老師說話好溫柔,聽著舒服!!!!)
下面就是我學習過程做的一些筆記,在這裡記錄一下。
First:啥也不說了,這門課程開始一定要有一定的基礎,不然真的看不下去。。。。。
首先你必須學習:C語言程式設計
看完上面的基礎就可以開始上課了。其實只要跟著老師學還是可以聽懂的。
上圖主要說明了編譯器工作的一個過程-主要工作就是翻譯的過程。把高階語言編寫的原始碼變成目標語言。
編譯器的主要流程如上圖所示。
詞法分析:詞法分析的主要任務從左向右逐行掃描源程式的字元,識別出各個單詞,確定單詞的型別。將識別出的單詞轉換成統一的機內表示——詞法單元(token)形式
比如:int a;這句程式碼輸入,相應的token就是<INT,->;<IDC,a>,<,SEMI,->其中INT表示int關鍵字,IDC表示變數名,SEMI表示分號。ps:這裡用的INT,IDC並不是標準統一的符號,這裡只是為了舉例子,方便理解,如果自己寫編譯器是可以自己定義的。
語法分析:語法分析器(parser)從詞法分析器輸出的token序列中識別出各類短語,並構造語法分析樹(parse tree)
語義分析:收集識別符號的屬性資訊——包括:儲存位置、長度、值、作用域、引數和返回值資訊等,同時在語義分析步驟過程,還需要進行語義檢查——變數或過程未經宣告就使用、變數或過程名重複宣告、運算分量型別不匹配、操作符與運算元之間的型別不匹配、陣列下標不是整數、對非陣列變數使用陣列訪問操作符、對非過程名使用過程呼叫操作符、過程呼叫的引數型別或數目不匹配、函式返回型別有誤。
中間程式碼生成:類似把程式變成彙編指令的樣子。
比如,a=b+c; 中間程式碼就是<+,a,b,c>這樣的四元式。
學到這裡我們對編譯原理有了初步的瞭解,接下來詳細介紹每一個步驟。
相關推薦
編譯原理入門筆記
什麼是編譯原理? 編譯原理這門課程本來是很多大學必修的一門課程,但是我的本科課程裡面並沒有安排這門課程,由於研究生需要研究這方面的基礎,於是開始自學。相信很多人都知道這門課程是計算機基礎課程中比較難入門的課程,於是我在開始之前也有點方,於是開始參考各路大神的經驗。最終我
編譯原理學習筆記(一)
.com bubuko image img 記錄 mage 學習 內容 基礎 簡單地瀏覽了一下第一章,主要是基礎性內容,就不記錄了。編譯原理學習筆記(一)
編譯原理學習筆記
1.2編譯器的結構:源語言 - >語法分析 - >抽象語法樹(AST) - >程式碼生成:舉例採用後序遍歷AST的方式實現一個加法程式碼生成(到棧式計算機指令) 1.3編譯器的例子:棧式計算機(JVM) 2.詞法分析 2.1編譯器的階段:源程式 - >前端 -
編譯原理學習筆記之自上而下分析Ⅰ
一、自上而下分析法 從根部開始構造語法樹 自上而下分析法不能因為左遞迴存在而陷入死迴圈,不能產生回溯,即每一步推導的產生式必須是唯一的 1.消除左遞迴 左遞迴 形如A->Aa |b ,這種在建立分析樹時一直在左子樹死迴圈,因為推導的結果中最左還是A 或者多個
編譯原理入門(三)——詞法分析簡介
上一篇博文介紹了編譯器翻譯的過程,本篇博文對翻譯過程的第一步詞法分析進行講解。 詞法分析 詞法分析的主要任務:1.對源程式的程式碼進行從左到右的逐行掃描,識別出各個單詞,從而確定單詞的型別。
編譯原理入門(五)——語義分析簡介
前面的兩篇博文介紹了詞法分析、語法分析,本篇博文將介紹語義分析。 語義分析 語義分析是編譯的第三步,它的主要任務是:1.收集識別符號的屬性資訊資訊,如收集種屬資訊(簡單變數、複合變數(陣列等)、過程),型別資訊,儲存位置,長度,值,作用域,引數,返
編譯原理學習筆記(二)翻譯程式的實現
上一節所學的主要是語法到語義的內容,通過手動構造語法樹來理解編譯過程。 在3.5節,書中給出了字尾表示式翻譯程式的java實現。根據前面的內容,今天對NC程式碼編譯給出簡易的實現。 在實現前,需要幾個準備內容用以簡化程式碼: 1. 正則表示式 正則表示式
編譯原理學習筆記(一)制導翻譯器
《編譯原理》在第二章中給出了一個翻譯表示式的例子(從中綴表示式到字尾表示式)。總結了如下內容: 1. 寫出描述語法規則的產生式(文法包含產生式集合與符號集合) 2. 根據文法建立對應語句的語法分析樹 3. 消除語言的二義性 4. 運算子的結合性以及優先順
編譯原理入門篇|一篇文章理解編譯全過程
# 編譯過程 ## 編譯目標 目標:把原始碼變成目的碼 1.如果原始碼在作業系統上執行:目的碼就是“彙編程式碼”。再通過彙編和連結的過程形成可執行檔案,然後通過載入器載入到作業系統執行。 2.如果原始碼在虛擬機器(直譯器)上執行:目的碼就是“直譯器可以理解的中間形式的程式碼”,比如位元組碼(中間程式碼
編譯原理筆記 導言和目錄
本學期編譯原理的學習也差不多快結束了,在學習過程中也做了不少筆記。 為了準備即將來到的考試,我想把學習筆記再整理一遍。藉此機會建立了這個專欄——為了滿足建立專欄之前必須釋出15篇以上的原創文章,我還特地去翻了LeetCode把陳年老題拿出來拾掇成部落格(對我這種懶病來說真是太慘了)
工程中的編譯原理 -- Jison入門篇
前言 在程式碼編寫中,很多時候我們都會處理字串:發現字串中的某些規律,然後將想要的部分抽取出來。對於發雜一些的場景,我們會使用正則表示式來幫忙,正則表示式強大而靈活,主流的變成語言如Java,Ruby的標準庫中都對其由很好的支援。 但是有時候,當接收到的字串結構更加
【C++入門筆記】多型的實現原理
本文引用自https://blog.csdn.net/tujiaw/article/details/6753498#,其原文章圖片已不可檢視。在此基礎上擴充了FishC大佬的一些內容。 什麼是多型 顧名思義就是同一個事物在不同場景下的多種形態。 此前《【C++入門筆記】
編譯原理_複習筆記1-2章
第一章&第二章 引論與語法描述介紹 編譯程式:把某一種高階語言程式等價地轉換為另一種低階語言程式(如彙編或機器碼)的程式 描述詞法規則的有效工具是:正規式(r)和有限自動機(DFA) 識別符號是語義概念,名字是語法概念 語法 詞法規則(描述工
區塊鏈入門筆記(一)——比特幣的原理和挖礦機制
一、比特幣:1. 分散式的虛擬貨幣。 區別於現實銀行的中央系統貨幣。2. 基礎設施搭建 1)完全公開 2)只是記錄每筆交易資訊 3)記錄完全公開,個人資訊不公開,有完整的公鑰加密系統,可以保證唯一性和安全性 4)礦工:挖礦來增加區塊鏈、挖礦成功獎
編譯原理第三章筆記--詞法分析
3.1對詞法分析器的要求一、單詞符號語言中具有獨立意義的最小的語法符號單詞的種類: 基本字 if...else這種 識別符號 起名來表示變數名、函式名 常數 運算子 界符 ; {} () , 這種二、單詞的表示形式
編譯原理學習周入門教程--(2)編譯程式的六個工作流程
上篇我們介紹了什麼是編譯程式,簡單提到了這個“工廠”工作的六個階段。本篇介紹一下這六個階段。 “工廠”導航圖(翻譯工作的過程): 流水線一--詞法分析: 也就是從左到右一個一個的讀入源程
【編譯原理龍書筆記】(三)詞法分析(附聯絡答案)(仍未完成)
這篇部落格是根據自己學習龍書的過程編寫,因為博主習慣了英語環境,在強行從英語轉化為中文的時候難免會有些不自然,請大家諒解。 感謝沉魚姐姐,很多答案都是參考了她的github,雖然無緣認識,但也算是一位領路人。 3.1 詞法分析器的作用 詞法分析
【編譯原理龍書筆記】(二)一個簡單的語法制導翻譯器(仍未完成)
這篇部落格是根據自己學習龍書,因為博主習慣了英語環境,在強行從英語轉化為中文的時候難免會有些不自然,請大家諒解。 感謝沉魚姐姐,很多答案都是參考了她的github,雖然無緣認識,但也算是一位領路人。 正文: 一個簡單的語法制導翻譯器 在本章中
Stanford公開課《編譯原理》學習筆記(1~4課)
目錄 一. 編譯的基本流程 二. Lexical Analysis(詞法分析階段) 2.1 Lexical Specification(分詞原則) 2.2 Finite Automata (典型分詞演算法-有
Stanford公開課《編譯原理》學習筆記(2)遞迴下降法
目錄 一. Parse階段 CFG Recursive Descent(遞迴下降遍歷) 二. 遞迴下降遍歷 2.1 預備知識 2.2 多行語句的處理思路