目录
定義可達性
在編譯器理論中,一個指令的定義可達性(Reaching Definition)必然是另外一個指令,而這個指令則是一個沒有交錯賦值指令的目標變數,舉例來說: 在d2中,d1為定義可達性,而在下列的範例中: d1 在 d3不再是定義可達性,因為d2使它不再可能被到達。.
查看 常數折疊和定義可達性
中間語言
中間語言(Intermediate language),在計算機科學中,是指一種應用於抽象機器(abstract machine)的程式語言,它設計的目的,是用來幫助我們分析计算机程序。這個術語源自於編譯器,在編譯器將原始碼編譯為目的碼的過程中,會先將原始碼轉換為一個或多個的中間表述,以方便編譯器進行最佳化,並產生出目的機器的机器语言。通常,中間語言的設計與一般的机器语言有三個不同之處:.
查看 常數折疊和中間語言
常数
常数又稱定數,是指一个数值固定不变的常量,例如圆周率\pi\,、自然对数的底e,与之相反的是變數。 在物理學上,很多經測量得出的數值都被稱為常數。例如萬有引力常數和地表重力加速度等。但有研究表明,部分這類常数并不是恒定不变的,因此就被稱作“不定常数”(inconstant constant)和“不恒定的常数”(not-so-constant constant)。.
查看 常數折疊和常数
三位址碼
三位址碼(Three address code,經常被縮寫為TAC 或 3AC),一種中間語言,編譯器使用它來改進程式碼轉換效率。每個三位址碼指令,都可以被分解為四個元組(4-tuple):(運算子,運算元1,運算元2,結果)。因為每個陳述都包含了三個變數,所以它被稱為三位址碼。.
查看 常數折疊和三位址碼
編譯器
编译器(compiler),是一種電腦程式,它會將用某種程式語言寫成的原始碼(原始語言),轉換成另一種程式語言(目標語言)。 它主要的目的是將便于人编写、阅读、维护的高级计算机语言所寫作的原始碼程式,翻译为计算机能解读、运行的低阶机器语言的程序,也就是執行檔。编译器将原始程序(source program)作为输入,翻译产生使用目标语言(target language)的等价程序。源代码一般为高阶语言(High-level language),如Pascal、C、C++、C# 、Java等,而目标语言则是汇编语言或目标机器的目标代码(Object code),有时也称作机器代码(Machine code)。 一个现代编译器的主要工作流程如下: 源代码(source code)→ 预处理器(preprocessor)→ 编译器(compiler)→ 汇编程序(assembler)→ 目标代码(object code)→ 链接器(Linker)→ 執行檔(executables), 最後打包好的檔案就可以給電腦去判讀執行了。.
查看 常數折疊和編譯器
静态单赋值形式
在編譯器的設計中,靜態單賦值形式(static single assignment form,通常簡寫為SSA form或是SSA)是中介碼(IR,intermediate representation)的特性,每個變數僅被賦值一次。在原始的IR中,已存在的變數可被分割成許多不同的版本,在許多教科書當中通常會將舊的變數名稱加上一個下標而成為新的變數名稱,以至於標明每個變數及其不同版本。在SSA,UD鏈(use-define chain,賦值代表define,使用變數代表use)是非常明確,而且每個僅包含單一元素。 SSA於1980年在IBM開始進行研究,它是由Ron Cytron、Jeanne Ferrante、Barry K.
查看 常數折疊和静态单赋值形式
死碼刪除
編譯器原理中,死碼消除(Dead code elimination)是一種技術,它的用途是移除對程式執行結果沒有任何影響的程式碼。移除這類的程式碼有兩種優點,不但可以減少程式的大小,還可以避免程式在執行中進行不相關的運算行為,減少它執行的時間。不會被執行到的程式碼(unreachable code)以及只會影響到無關程式執行結果的變數(Dead Variables),都是死碼(Dead code)的範疇。.
查看 常數折疊和死碼刪除
源代码
源代码(Source code),也称源程序,是指一系列人类可读的计算机语言指令。 在现代程序语言中,源代码可以是以书籍或者磁带的形式出现;但最常用的格式是文本文件,这种典型格式的目的是为了编译出计算机程序。计算机源代码的最终目的是将人类可读的文本翻译成为计算机可以执行的二进制指令,这种过程叫做编译,通过编译器完成。.
查看 常數折疊和源代码