編譯原理分析過程
一、編譯原理概述
編譯程式就是把高階語言源程式生成為彙編程式碼的過程,生成的彙編程式碼再由彙編器聯結器等生成目標機器上的可執行程式碼。
一般編寫高階語言編譯程式採用自舉形式,如,C語言編譯器首先由其他語言如組合語言編寫,再有生成的目標EXE程式對編寫的C語言程式進行自我編譯,除錯後即為第一個C語言編譯程式的編寫過程,即自舉。
而如今,我們已經有了C語言編譯程式,可以直接用C語言編譯自己用C語言編寫的編譯程式,再用生成的可執行檔案編譯自己即可。
總體,
詞法分析->語法分析->語義分析->(中間程式碼生成)->目的碼生成
其中,為了生成的程式碼的可移植性,採用了中間程式碼形式,由於目標機器的指令集不同,生成的機器碼也不同,但我們可以用中間程式碼作為機器程式碼生成的程式集,所以中間程式碼不是必需的,但是為了方便起見,一般編譯程式都會採用中間程式碼,如三地址碼,四元式,語法樹等。
二、詞法分析
構建自動機,根據識別的字元劃分單詞,分為關鍵字,識別符號,常數,字串等,比較容易,規範起見,檢視成熟的編譯器原始碼形式。
三、語法分析
在語法分析過程中,主要是對文法的熟悉掌握,一般採用LL(1)分析法或者遞迴下降子程式方法,但遞迴下降子程式需要對文法進行變換,不能有左遞迴且同一非終結符的產生式select集合不能相交,在語法分析過程中也可以檢查出錯誤,如C語言中的分號缺失,語句形式錯誤等,重點是填寫符號表。
四、語義分析
包含了語法分析中不能檢查出的錯誤,比如陣列賦值形式錯誤等,還包含了語法翻譯製導技術,在特定的時機產生中間程式碼。由於本人能力有限,只寫過四元式的中間程式碼,主要思想與逆波蘭式的思想相似,特定時機,特定入棧。
五、中間程式碼翻譯成目的碼
相關推薦
編譯原理分析過程
一、編譯原理概述 編譯程式就是把高階語言源程式生成為彙編程式碼的過程,生成的彙編程式碼再由彙編器聯結器等生成目標機器上的可執行程式碼。 一般編寫高階語言編譯程式採用自舉形式,如,C語言編譯器首先由其他語言如組合語言編寫,再有生成的目標EXE程式對編寫的C語言程式進行自我編譯
JavaScript預編譯原理分析
ole ram 語言 screen 三部曲 window pri nts define 今天用了大量時間復習了作用域、預編譯等等知識 看了非常多博文,翻了翻曾經看過
GCC/G++編譯原理分析
一、概述 C和C++編譯器是整合的,編譯一般分為四個步驟: 預處理(preprocessing)編譯(compilation)彙編(assembly)連線(linking) gcc 認為預處理的檔案是(.i)是C檔案,並且設定C形式的連線; g++ 認為預
GCC編譯器原理(三)------編譯原理三:編譯過程(2-2)---編譯之語法分析
tails 需要 表達式 一個數 就是 out 和數 margin 操作符 2.2 語法分析 語法分析器(Grammar Parser)將對由掃描器產生的記號進行語法分析,從而產生語法樹(Syntax Tree)。整個分析過程采用了上下文無關語法(Context-free
Java虛擬機器原理分析之Win10下VS2017編譯OpenJDK8與單步除錯HotSpot VM過程詳細記錄
在上一篇文章《Java虛擬機器原理分析之Win7下VS2010編譯OpenJDK8與單步除錯HotSpot VM過程詳細記錄》中,我們在Win7+VS2010環境下成功編譯出了x86版本的OpenJDK。然而VS2010畢竟有些年頭了,我也只是在開發機上才裝了這
編譯原理(自下而上分析——算符優先分析過程)
我們討論的自下而上分析法是一種“移進-規約”法。大意是:用一個寄存符號的先進後出的棧,把輸入符號一個一個地移進到棧裡,當棧頂形成某個產生式的一個候選式時,即把棧頂的這一部分替換成(規約成)該產生式
編譯原理(五)語法分析之自底向上分析之算符優先分析法
logs cnblogs div mar 分析法 clas pos block mark 語法分析之自頂向下分析 說明:以老師PPT為標準,借鑒部分教材內容,AlvinZH學習筆記。 先看看PPT吧! 引用說明 - 邵老師課堂PDF - 《編譯原理級編譯程序構造》 編譯
編譯原理(六)自底向上分析之LR分析法
markdown lr分析 編譯原理 lock mar blog pre 分析法 logs 自底向上分析之LR分析法 說明:以老師PPT為標準,借鑒部分教材內容,AlvinZH學習筆記。 本節內容太多了,考完再寫了,對不起~ 引用說明 - 邵老師課堂PDF - 《編譯原
編譯原理-遞歸下降分析法
int urn sta ret pan package 編譯 string 遞歸 題:對下列文法,用遞歸下降分析法對任意輸入的符號串進行分析: (1)E->TG (2)G->+TG|—TG (3)G->ε, (4)T-
手動實現一個單詞統計MapReduce程序與過程原理分析
Hadoop MapReduce Java [toc] 手動實現一個單詞統計MapReduce程序與過程原理分析 前言 我們知道,在搭建好hadoop環境後,可以運行wordcount程序來體驗一下hadoop的功能,該程序在hadoop目錄下的share/hadoop/mapreduce目錄中
編譯原理實驗:實驗一 簡單詞法分析程序設計(必修)(Python實現)
it is 括號 ali 鍵盤輸入 優化 沒有 mce constant 是否 一、實驗目的 了解詞法分析程序的基本構造原理,掌握詞法分析程序的手工構造方法。 二、實驗內容 1、了解編譯程序的詞法分析過程。 2、根據PASCAL語言的說明語句形式,用手工方法構造一個對說明語
C++編譯連接過程中關於符號表的報錯分析
區別 生成 fin 結構 undefine 編譯預處理 析構函數 編譯 還需 是這樣的,在學習鄭莉老師的多文件結構和編譯預處理命令章節時候,看到書裏有這麽一張圖描述如下:#include指令作用是將指定的文件嵌入到當前源文件中#include指令所在的位置。 然
GCC編譯器原理(三)------編譯原理三:編譯過程---預處理
ddl str dep 數據 路徑 back char 構造 data Gcc的編譯流程分為了四個步驟: 預處理,生成預編譯文件(.文件):gcc –E hello.c –o hello.i 編譯,生成匯編代碼(.s文件):gcc –S hello.i –o hell
深入分析 Javac 編譯原理
源碼分析 3.2 inter 計算機 out 詞法分析器 基本 image 包含 通常,一個java文件會通過編譯器編譯成字節碼文件.class,再又java虛擬機JVM翻譯成計算機可執行的文件。 我們所知道的java語言有它自己的語法規範,同樣的JVM也有它的語法規範,如
編譯原理根據專案集規範族構造LR(0)分析表
上回把文法的LR(0)專案集規範族搞了半天,革命進行了一半。 鼓搗了半天整了一堆專案集規範族出來,總是有用的呀,接下來就是在那堆的基礎上構造分析表了,構造好分析表就能分析輸入串了。本文主要講LR(0)分析表的構造和輸入串分析過程。 我這個菜雞都覺得是通!俗!易!懂!的!! 憋說話往下
編譯原理----詞法分析
0.PL/0文法 〈程式〉→〈分程式〉. 〈分程式〉→ [<常量說明部分>][<變數說明部分>][<過程說明部分>]〈語句〉 <常量說明部分> → CONST<常量定義>{
編譯原理(4)---語義分析(未完成)
導讀 1。逆波蘭表示式 (1)字尾表示式 (2)語法制導生成字尾式 2。三元式和樹 (1)三元式 (2)樹 3。四元式 (1)四元式 (2)算術表示式和賦值句翻譯為四元式 (3)布林表示式翻譯為四元式 4。控制語句的翻譯 (1)標號和轉移語句 (2)條件語句 (3)分叉語句
編譯原理(3)---語法分析
導讀 1。文法 (1)分類 (2)上下文無關文法 (3)語法樹 2。自上而下語法分析 (1)自上而下面臨的兩大問題 (2)預測分析 (3)怎樣實現預測分析 (4)LL(1)文法 3。自下而上語法分析 (1)直觀算符優先分析法 (2)規範歸約與算符優先文法 (3)優先函式 4。L
編譯原理——算符優先分析法詳解
轉載地址 https://blog.csdn.net/qq_37977106/article/details/80301761 概述 算符優先分析法(Operator Prece