成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

淺談C#編譯程序

開發 后端
本文介紹在談及C#編譯程序之前,我們了解一點:計算機不能直接理解高級語言,只能直接理解機器語言,所以必須要把高級語言翻譯成機器語言,計算機才能執行高級語言編寫的程序。

C#編譯程序

在談及C#編譯程序之前,我們了解一點:計算機不能直接理解高級語言,只能直接理解機器語言,所以必須要把高級語言翻譯成機器語言,計算機才能執行高級語言編寫的程序。翻譯的方式有兩種,一個是編譯,一個是解釋。

兩種方式只是翻譯的時間不同。編譯型語言寫的程序執行之前,需要一個專門的編譯過程,把程序編譯成為機器語言的文件,比如exe(com)文件,以后要運行的話就不用重新翻譯了,直接使用編譯的結果就行了(exe文件)。

C#編譯階段如下:

C#編譯程序把一個C#源程序翻譯成目標程序的工作過程分為五個階段:1、詞法分析;2、語法分析;3、中間代碼生成;4、代碼優化;5、目標代碼生成。主要是進行詞法分析和語法分析,又稱為源程序分析,分析過程中發現有語法錯誤,給出提示信息。

1、詞法分析

詞法分析的任務是對由字符組成的單詞進行處理,從左至右逐個字符地對源程序進行掃描,產生一個個的單詞符號,把作為字符串的源程序改造成為單詞符號串的中間程序。執行詞法分析的程序稱為詞法分析程序或掃描器。

源程序中的單詞符號經掃描器分析,一般產生二元式:單詞種別;單詞自身的值。單詞種別通常用整數編碼,如果一個種別只含一個單詞符號,那么對這個單詞符號,種別編碼就完全代表它自身的值了。若一個種別含有許多個單詞符號,那么,對于它的每個單詞符號,除了給出種別編碼以外,還應給出自身的值。

詞法分析器一般來說有兩種方法構造:手工構造和自動生成。手工構造可使用狀態圖進行工作,自動生成使用確定的有限自動機來實現。

2、語法分析

編譯程序的語法分析器以單詞符號作為輸入,分析單詞符號串是否形成符合語法規則的語法單位,如表達式、賦值、循環等,***看是否構成一個符合要求的程序,按該語言使用的語法規則分析檢查每條語句是否有正確的邏輯結構,程序是最終的一個語法單位。編譯程序的語法規則可用上下文無關文法來刻畫。

語法分析的方法分為兩種:自上而下分析法和自下而上分析法。自上而下就是從文法的開始符號出發,向下推導,推出句子。而自下而上分析法采用的是移進歸約法,基本思想是:用一個寄存符號的先進后出棧,把輸入符號一個一個地移進棧里,當棧頂形成某個產生式的一個候選式時,即把棧頂的這一部分歸約成該產生式的左鄰符號。

3、中間代碼生成

中間代碼是源程序的一種內部表示,或稱中間語言。中間代碼的作用是可使編譯程序的結構在邏輯上更為簡單明確,特別是可使目標代碼的優化比較容易實現。中間代碼即為中間語言程序,中間語言的復雜性介于源程序語言和機器語言之間。中間語言有多種形式,常見的有逆波蘭記號、四元式、三元式和樹。

4、代碼優化

代碼優化是指對程序進行多種等價變換,使得從變換后的程序出發,能生成更有效的目標代碼。所謂等價,是指不改變程序的運行結果。所謂有效,主要指目標代碼運行時間較短,以及占用的存儲空間較小。這種變換稱為優化。

有兩類優化:一類是對語法分析后的中間代碼進行優化,它不依賴于具體的計算機;另一類是在生成目標代碼時進行的,它在很大程度上依賴于具體的計算機。對于前一類優化,根據它所涉及的程序范圍可分為局部優化、循環優化和全局優化三個不同的級別。

5、目標代碼生成

目標代碼生成是編譯的***一個階段。目標代碼生成器把語法分析后或優化后的中間代碼變換成目標代碼。

目標代碼生成階段應考慮直接影響到目標代碼速度的三個問題:一是如何生成較短的目標代碼;二是如何充分利用計算機中的寄存器,減少目標代碼訪問存儲單元的次數;三是如何充分利用計算機指令系統的特點,以提高目標代碼的質量。

6、表格管理程序

編譯過程中源程序的各種信息被保留在種種不同的表格,編譯各階段的工作都涉及到構造、查找、或更新有關的表格。

7、出錯處理程序

如果編譯過程中發現源程序有錯誤,編譯程序應報告錯誤的性質和錯誤的發生的地點,并且將錯誤所造成的影響限制在盡可能小的范圍內,使得源程序的其余部分能繼續被編譯下去。

這也是一般的編譯語言的編譯過程,但要注意的是C#有一個特殊的地方,那就是C#可以先編譯成TL文件,將代碼編譯成中間代碼(IL)既不是源程序也不是cpu指令,程序運行時JIT將IL翻譯成本地cpu指令再執行,由于編譯的是中間語言,因此速度比一般的解釋性語言要快。

JAVA也有這個特性,java程序也需要編譯,但是沒有直接編譯稱為機器語言,而是編譯稱為字節碼,然后用解釋方式執行字節碼。

因此,也有學者把認為這二個語言既不是傳統的編譯語言,也不是傳統解釋語言。以上介紹C#編譯程序

【編輯推薦】

  1. C#字符串進行分割
  2. 全面測試C#字符串
  3. C# out和ref傳遞數組
  4. 淺析C#定義整型數組
  5. C#數據庫連接字符串
責任編輯:佚名 來源: 博客園
相關推薦

2009-08-06 10:27:08

C#應用程序域

2009-10-21 12:39:30

ubuntu編譯程序新手指導

2009-09-02 13:22:23

C#組件化程序設計

2009-08-24 13:30:50

C# Windows

2009-08-20 18:30:33

C# ReaderWr

2011-09-21 10:56:31

C#結構

2011-04-08 09:52:44

C++C#DLL

2009-08-07 11:26:53

C#數組結構

2009-08-12 11:24:25

C# String對象

2009-08-31 09:37:09

C# Employee

2009-08-19 17:12:18

C# Connecti

2009-08-26 13:15:38

C#選擇控制

2009-08-26 15:46:01

C#匿名類型

2009-08-25 16:16:43

C# oledbcon

2009-08-14 17:58:05

C#接口方法

2009-08-20 10:24:52

C#開發WinForm

2009-09-02 15:41:21

C# HTTPWebR

2009-08-06 15:30:23

C#類型系統

2009-08-10 10:04:25

C#抽象類C#接口

2009-08-24 17:24:28

C#創建XML文檔
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 97精品超碰一区二区三区 | 亚洲一区二区在线免费观看 | 中文一区二区 | 日本亚洲欧美 | 亚洲精品乱码久久久久久9色 | 日韩国产在线 | 日韩亚洲一区二区 | 国产欧美一区二区三区在线看 | 亚洲成人国产综合 | 亚洲97 | 欧美高清视频一区 | 免费观看视频www | 日韩中文字幕视频在线观看 | 欧美日一区二区 | 一区二区三区视频在线观看 | 日韩免费高清视频 | 亚洲一区二区三区免费在线观看 | 免费一区二区三区 | av在线一区二区 | 亚洲成人国产精品 | 久久国产精品久久国产精品 | 99九九视频| 亚洲色欲色欲www | 日本a在线 | 精品国产免费一区二区三区五区 | 亚洲av毛片 | 麻豆久久 | 粉嫩av| 涩涩导航 | 欧美日韩中文国产一区发布 | www.久| 亚洲成人免费电影 | 天天澡天天狠天天天做 | 欧美激情视频一区二区三区在线播放 | 亚洲精品一区二区三区蜜桃久 | 成年人视频在线免费观看 | 国产亚洲一区二区三区在线观看 | 中文字幕一区二区三区乱码在线 | 人妖一区 | 亚洲精品 在线播放 | av中文天堂 |