1. 程式人生 > >編譯原理:什麼是編譯程式?

編譯原理:什麼是編譯程式?

核心觀點:
一個編譯程式就是一個語言翻譯程式。就是把一種語言書寫的程式翻譯成另一種語言(目標語言)的等價程式。

重要性:
一個編譯程式的重要性體現在它使得多數計算機使用者不必考慮與機器有關的繁瑣細節,使程式設計師和程式設計專家獨立於機器,這對於當今機器的數量和種類持續不斷增長的年代尤為重要。

編譯程式的功能:
高階語言程式(源程式) –> 編譯程式 –> 低階語言程式(目標程式)

高階語言程式的處理過程:
學過計算機的人都知道,除了編譯程式外,還需要一些其他程式才能生成一個可在計算機上執行的目標程式。

需預處理的源程式 –> (預處理程式) –> 源程式 –> (編譯程式) –> 目標組合語言程式 –> (彙編程式)–> 可再裝配的機器程式碼 –> (裝配/連線編輯程式)–> 絕對機器程式碼

上面是一個大體的流程圖。簡單介紹一下:
一個源程式可能分成幾個模組存放在不同的檔案裡,將這些源程式彙集在一起的任務,由一個叫做預處理程式的程式來完成,有些預處理程式也負責巨集展開,像C語言的預處理程式要完成檔案合併、巨集展開等任務。
編譯程式生成的目標程式是彙編程式碼形式,需要經由彙編程式翻譯成可再裝配(或可重定位)的機器程式碼,再經由裝配/連線編輯程式與某些庫程式連線成真正能在機器上執行的程式碼。
也就是說,一個編譯程式的輸入可能要由一個或多個預處理程式來產生;另外,為得到能執行的機器程式碼,編譯程式的輸出可能仍需要進一步的處理。

源語言的種類成千上萬,從常用的C、C++、Java等,到各種各樣的計算機應用領域的專用語言。而目標語言也是種類繁多的,加上編譯程式由於構造不同,所執行的具體功能有差異,又分成了各種型別,如一趟編譯、多趟編譯、具有除錯或優化功能的編譯等。
儘管存在這些明顯的複雜因素,但是任何編譯程式所執行的主要任務都是一致的,就是將源語言程式翻譯成等價的目標語言程式。通過理解這些任務,使用同樣的基本技術,可以為各種各樣的源語言和目標語言設計和構造編譯程式。

相關推薦

編譯原理什麼是編譯程式

核心觀點: 一個編譯程式就是一個語言翻譯程式。就是把一種語言書寫的程式翻譯成另一種語言(目標語言)的等價程式。 重要性: 一個編譯程式的重要性體現在它使得多數計算機使用者不必考慮與機器有關的繁瑣細節,使程式設計師和程式設計專家獨立於機器,這對於當今機器

編譯原理引論

教材 低級語言 程序 quest mce 語言翻譯 後端 高級 del 閱讀的教材為:編譯原理(張素琴等編著,清華大學出版社) 編譯過程就是將高級語言翻譯為低級語言 編譯過程分為前段(front end)和後端(back end) 閱讀過程中遇到的疑問是:解釋程序和編譯程序

編譯原理引言

編譯器的概述 編譯器是一個程式 核心功能是把原始碼翻譯成目的碼 原始碼: C/C++, Java, C#, html, … 目的碼: x86, IA64, ARM, MIPS, …

編譯原理FIRST set概念及其演算法的程式碼實現

 本篇博文是作為陳老師的編譯器課程學習筆記 課程地址: https://study.163.com/course/courseLearn.htm?courseId=1002830012#/learn/video?lessonId=1003433001&cours

編譯原理語法分析1-遞迴下降

要求: 使用的文法如下: E →TE’ E → + TE’ | ε T → FT’ T →* FT’ | ε F → (E) | id 對於任意給定的輸入串(詞法記號流)進行語法分析,遞迴下降方法實現。 要有一定的錯誤處理功能。即對錯誤能提示,並且

編譯原理用Yacc實現簡易計算器

要求 下載bison 下載之後解壓即可 配置環境變數 ①在系統變數Path中新增如下變數 \user\local\wbin可以在剛才解壓的資料夾裡找到 ②在系統變數中新增變數BISON_SIMPLE和BISON_HAIRY,變數值如下圖 生成.

編譯原理將a+d*(b-c) 寫成逆波蘭表示式

逆波蘭表示式示例 1. a+b 改為 ab+ 2. (a+b)*(c+d) 改為 ab+cd+* 3. a+d*(b-c) 改為 adbc-*+ 逆波蘭表示式又叫做字尾表示式,顧

編譯原理LL(1)文法 語法分析器(預測分析表法)

設計要求:對於任意輸入的一個LL(1)文法,構造其預測分析表,並對指定輸入串分析其是否為該文法的句子。思路:首先實現集合FIRST(X)構造演算法和集合FOLLOW(A)構造演算法,再根據FIRST和F

編譯原理素短語、短語、直接短語、控制代碼的基本概念

素短語的概念:它是一個遞迴的定義,至少含有一個終結符,並且除它自身之外不再含任何更小的素短語,所謂最左素短語就是處於句型最左邊的素短語的短語。而一個算符優先文法G的任何句型的最左素短語是滿足以下條

編譯原理C語言詞法分析器

編譯原理的實驗:完成對C語言的詞法分析 先說一下整體框架: 基類:Base  封裝了一些基礎的字元判斷函式,如下: int charkind(char c);//判斷字元型別 int spaces(char c); //當前空格是否可以消除 int characte

編譯原理用Flex和 Bison實現一個功能更為強大的計算器

 用Flex和 Bison實現一個功能更為強大的計算器,包含以下運算: a)加、減、乘、除運算 b)乘方、開方運算 c)位運算 – 與 & 、或 |、非 ~... d)階乘運算 !對數運算log 1.進一步完善計算器功能,實現對以下語法結構的

編譯原理句型分析和有關文法實用的說明

句型分析: 自上而下的分析方法: 從開始符出發,試圖推導給定的字串, 自下而上的分析方法: 推導的逆過程,從符號串開始試圖將其規約為開始符。 最左推導: 每次推導都施加在句型最左邊的語法變數上 最右推導: 每次推導都施加在句型最右邊的語法變數上 最右推導稱為規範推導,右

編譯原理短語、直接短語、控制代碼、素短語

概念 如果S->* αAβ and A->+γ,則稱γ是句型αγβ的相對於變數A的短語  如果S->* αAβ and A->γ,則稱γ是句型αγβ的相對於變數A的直接(簡單)短語 最左直接短語叫做控制代碼 其實最簡單的判斷方法直接畫出語法樹

編譯原理實驗實驗一 簡單詞法分析程序設計(必修)(Python實現)

it is 括號 ali 鍵盤輸入 優化 沒有 mce constant 是否 一、實驗目的 了解詞法分析程序的基本構造原理,掌握詞法分析程序的手工構造方法。 二、實驗內容 1、了解編譯程序的詞法分析過程。 2、根據PASCAL語言的說明語句形式,用手工方法構造一個對說明語

GCC編譯器原理(二)------編譯原理ELF文件

過程 外部文件 初始 cati tor 保護功能 編譯原理 外部 comm 二、ELF 文件介紹 2.1 可執行文件格式綜述 相對於其它文件類型,可執行文件可能是一個操作系統中最重要的文件類型,因為它們是完成操作的真正執行者。可執行文件的大小、運行速度、資源占用情況

GCC編譯器原理(三)------編譯原理編譯過程---預處理

ddl str dep 數據 路徑 back char 構造 data Gcc的編譯流程分為了四個步驟: 預處理,生成預編譯文件(.文件):gcc –E hello.c –o hello.i 編譯,生成匯編代碼(.s文件):gcc –S hello.i –o hell

GCC編譯器原理(三)------編譯原理編譯過程(2-2)---編譯之語法分析

tails 需要 表達式 一個數 就是 out 和數 margin 操作符 2.2 語法分析 語法分析器(Grammar Parser)將對由掃描器產生的記號進行語法分析,從而產生語法樹(Syntax Tree)。整個分析過程采用了上下文無關語法(Context-free

編譯原理實驗二LL(1)語法分析器

處理 字符 編號 析構 idt public 輸入 課本 字母 一、實驗要求      不得不想吐槽一下編譯原理的實驗代碼量實在是太大了,是編譯原理撐起了我大學四年的代碼量...   這次實驗比上次要復雜得多,涵蓋的功能也更多了,我覺得這次實驗主要的難點有兩個(其實都是難點

現代編譯原理——第1章詞法分析

 轉自: http://www.cnblogs.com/BlackWalnut/p/4467749.html    當我們寫好一份原始碼,提交給編譯器的時候,這是編譯器對我們提交程式碼進行詞法分析。這個整個編譯過程的第一步。詞法分析器將我們的提交的程式碼看作是一個文字,它工作的目的就是將這個文字中

現代編譯原理——第五章活動記錄

  轉自: http://www.cnblogs.com/BlackWalnut/p/4559245.html       第五章是到目前位置最讓我頭疼的一章,不是因為難,是因為對最終的目的不太明確。整章前半部分用十分精簡的語言介紹了一個新的概念,活動記錄,也就是在函