1. 程式人生 > >編譯原理入門筆記

編譯原理入門筆記

什麼是編譯原理?

    編譯原理這門課程本來是很多大學必修的一門課程,但是我的本科課程裡面並沒有安排這門課程,由於研究生需要研究這方面的基礎,於是開始自學。相信很多人都知道這門課程是計算機基礎課程中比較難入門的課程,於是我在開始之前也有點方,於是開始參考各路大神的經驗。

最終我在慕課上參加了哈工大張陳鄞老師的課程,其實網上的課程基本都差不多,反正都比較枯燥,選擇你喜歡的就好。(ps:我主要是看臉,哈哈哈哈~,大笑陳老師說話好溫柔,聽著舒服!!!!)

下面就是我學習過程做的一些筆記,在這裡記錄一下。

First:啥也不說了,這門課程開始一定要有一定的基礎,不然真的看不下去。。。。。

首先你必須學習:C語言程式設計

,瞭解基本的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 多行語句的處理思路