導航:首頁 > 源碼編譯 > 編譯模式通常分為幾種

編譯模式通常分為幾種

發布時間:2022-08-12 06:51:26

A. 代碼編譯有哪兩種類型,各自特點是什麼

1. 代碼的種類有:順序碼、區間碼、助憶碼。
2. 順序碼的特點是代碼簡短,使用方便,易於管理,已添加,對分類對象無任何特殊規定。
3. 區間碼的特點是從結構上反應了數據的類別,便於計算機分類處理,排序、分類,插入和使用也比較容易。
4. 助憶碼的特點是用可以幫助記憶的字母或數字來表示代碼對象,將代碼的對象的名稱、規格等作為代碼的一部分,以幫助記憶。

進行分類的目的不同,所適用的商品代碼也不相同。目前,商品代碼主要有:
1.數字型代碼
2.字母型代碼
3.混合型代碼

B. 單片機c51有哪幾種編譯模式

下面僅對C51在變數定義中注意的問題以及與80C51存儲資源有關的問題作說明,其餘遵循C語言的規定。1.變數聲明在變數的聲明中,可以包括存儲類型和signed或unsigned等屬性。如:(1)chardatavar1;定義字元型變數var1,被分配在內部RAM低128B,編譯後,通過直接定址方式訪問。(2)charcodetext[]=「ENTERPARAMETER」;定義字元數組text[],將其分配到程序存儲區,並賦初始值「ENTERPARAMETER」。編譯後,通過MOVCA,@A+DPTR訪問。(3)unsignedlongxdataarray[100];定義無符號長整型數組array[100],將其分配到外RAM中,編譯後,通過MOVXA,@DPTR訪問。(4)floatidatax,y,z;定義浮點類型變數x,y,z,將其分配到內RAM中,編譯後,通過間接定址方式訪問。(5)unsignedintpdatadimension;定義無符號整型變數dimension,將其分配到外RAM中,編譯後,通過MOVXA,@Ri指令採用分頁的形式訪問。(6)unsignedcharxdatavector[10][4][4];定義無符號字元型數組vector[10][4][4],將其分配到外RAM中,編譯後,通過MOVXA,@DPTR訪問。(7)charbdataflags;定義字元型變數flags,將其分配到可位定址的內部數據存儲器中,可以以位元組方式訪問,也可以以位方式訪問。

C. vs2010中debug和release都能下斷調試程序,那為什麼還要分成這么兩種編譯模式呢

首先,分成兩種編譯模式是因為debug和release內存分配,優化,關鍵字的處理都不一樣。debug的信息是完整的,release缺少以上的很多信息。
而且你描述的也不準確,release 只有一些位置能下斷點調試的,跟debug不一樣的,debug任何地方都是可以調試的。
這是因為debug編譯的時候沒有優化,每一個指令都可以對應到代碼里,所以都能調試,
release因為有性能優化,所以指令是不能完整的對應到代碼里的,偶然能對上的部分就能調,其他部分調不了。

D. 高級語言處理程序的編譯方式和解釋方式的區別

翻譯方式一般分為編譯和解釋兩種。 編譯方式:事先編好的一個叫做編譯程序的機器語言程序放在計算機中。當高級語言編的源程序輸入計算機時,編譯程序就把源程序自動整個地翻譯成用機器指令表示的目標程序。 解釋方式:事先編好的一個叫做解釋程序的機器語言程序放在計算機中,當高級語言源程序輸入計算機後,解釋程序自動地逐句翻譯源程序,譯一句執行一句。 可以這么理解,編譯的結果是另外一種語言,而解釋的就是一種中間語言。

E. 編譯系統通常由哪幾個部分組成

一般說來,編譯程序主要由詞法分析程序、語法分析程序、語義分析程序、中間代碼生成程序、代碼優化程序、目標代碼生成程序、信息表管理程序、錯誤檢查處理程序組成。

F. C語言中條件編譯有哪幾種形式

預處理程序提供了條件編譯的功能。 可以按不同的條件去編譯
不同的程序部分,因而產生不同的目標代碼文件。 這對於程序的移
植和調試是很有用的。
條件編譯有三種形式,下面分別介紹:
1. 第一種形式:
#ifdef 標識符
程序段1
#else
程序段2
#endif
它的功能是,如果標識符已被 #define命令定義過則對程序段1
進行編譯;否則對程序段2進行編譯。
如果沒有程序段2(它為空),本格式中的#else可以沒有, 即可
以寫為:
#ifdef 標識符
程序段
#endif

#define NUM ok
main(){
struct stu
{
int num;
char *name;
char sex;
float score;
} *ps;
ps=(struct stu*)malloc(sizeof(struct stu));
ps->num=102;
ps->name="Zhang ping";
ps->sex='M';
ps->score=62.5;
#ifdef NUM
printf("Number=%d\nScore=%f\n",ps->num,ps->score);
#else
printf("Name=%s\nSex=%c\n",ps->name,ps->sex);
#endif
free(ps);
}
由於在程序的第16行插入了條件編譯預處理命令, 因此要根據
NUM是否被定義過來決定編譯那一個printf語句。而在程序的第一行
已對NUM作過宏定義,因此應對第一個printf語句作編譯故運行結果
是輸出了學號和成績。
在程序的第一行宏定義中,定義NUM表示字元串OK,其實也可以
為任何字元串,甚至不給出任何字元串,寫為:
#define NUM
也具有同樣的意義。 只有取消程序的第一行才會去編譯第二個
printf語句。讀者可上機試作。
2. 第二種形式:
#ifndef 標識符
程序段1
#else
程序段2
#endif
與第一種形式的區別是將「ifdef」改為「ifndef」。它的功能
是,如果標識符未被#define命令定義過則對程序段1進行編譯, 否
則對程序段2進行編譯。這與第一種形式的功能正相反。
3. 第三種形式:
#if 常量表達式
程序段1
#else
程序段2
#endif
它的功能是,如常量表達式的值為真(非0),則對程序段1 進行
編譯,否則對程序段2進行編譯。因此可以使程序在不同條件下,完
成不同的功能。
#define R 1
main(){
float c,r,s;
printf ("input a number: ");
scanf("%f",&c);
#if R
r=3.14159*c*c;
printf("area of round is: %f\n",r);
#else
s=c*c;
printf("area of square is: %f\n",s);
#endif
}
本例中採用了第三種形式的條件編譯。在程序第一行宏定義中,
定義R為1,因此在條件編譯時,常量表達式的值為真, 故計算並輸
出圓面積。
上面介紹的條件編譯當然也可以用條件語句來實現。 但是用條
件語句將會對整個源程序進行編譯,生成的目標代碼程序很長, 而
採用條件編譯,則根據條件只編譯其中的程序段1或程序段2, 生成
的目標程序較短。如果條件選擇的程序段很長, 採用條件編譯的方
法是十分必要的。

☆本章小結☆
1. 預處理功能是C語言特有的功能,它是在對源程序正式編譯前由
預處理程序完成的。程序員在程序中用預處理命令來調用這些功
能。
2. 宏定義是用一個標識符來表示一個字元串,這個字元串可以是常
量、變數或表達式。在宏調用中將用該字元串代換宏名。
3. 宏定義可以帶有參數,宏調用時是以實參代換形參。而不是「值
傳送」。
4. 為了避免宏代換時發生錯誤,宏定義中的字元串應加括弧,字元
串中出現的形式參數兩邊也應加括弧。
5. 文件包含是預處理的一個重要功能,它可用來把多個源文件連接
成一個源文件進行編譯,結果將生成一個目標文件。
6. 條件編譯允許只編譯源程序中滿足條件的程序段,使生成的目標
程序較短,從而減少了內存的開銷並提高了程序的效率。
7. 使用預處理功能便於程序的修改、閱讀、移植和調試,也便於實
現模塊化程序設計。

G. 編譯程序的工作過程一般可以劃分為哪5個基本階段,還自始至終伴隨進行哪兩項工作

1、編譯程序把一個源程序翻譯成目標程序的工作過程分為五個階段:詞法分析;語法分析;中間代碼生成;代碼優化;目標代碼生成。

2、編譯程序的工作過程一般自始至終伴隨進行信息表管理和出錯處理兩項工作。

主要是進行詞法分析和語法分析,又稱為源程序分析,分析過程中發現有語法錯誤,給出提示信息。

(7)編譯模式通常分為幾種擴展閱讀:

解釋程序是一種語言處理程序,在詞法、語法和語義分析方面與編譯程序的工作原理基本相同,但在運行用戶程序時,它直接執行源程序或源程序的內部形式(中間代碼)。因此,解釋程序並不產生目標程序,這是它和編譯程序的主要區別。解釋程序的工作過程如下:

1、由總控程序完成初始化工作。

2、依次從源程序中取出一條語句進行語法檢查,如有錯,輸出錯誤信息;如果通過了語法檢查,則根據語句翻澤成相應的指令並執行它。

3、檢查源程序是否已經全部解釋執行完畢,如果未完成則繼續解釋並執行下一條語句,直到全部語句都處理完畢。

H. 編譯程序分為哪幾個主要部分

1、詞法分析

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

2、語法分析

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

3、中間代碼生成

中間代碼是源程序的一種內部表示,或稱中間語言。中間代碼的作用是可使編譯程序的結構在邏輯上更為簡單明確,特別是可使目標代碼的優化比較容易實現。中間代碼即為中間語言程序,中間語言的復雜性介於源程序語言和機器語言之間。

4、代碼優化

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

5、目標代碼生成

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



(8)編譯模式通常分為幾種擴展閱讀:

特點

數據結構分析和綜合時所用的主要數據結構,包括符號表、常數表和中間語言程序。符號表由源程序中所用的標識符連同它們的屬性組成。

其中屬性包括種類(如變數、數組、結構、函數、過程等)、類型(如整型、實型、字元串、復型、標號等),以及目標程序所需的其他信息。常數表由源程序中用的常數組成,其中包括常數的機內表示,以及分配給它們的目標程序地址。

分析部分源程序的分析是經過詞法分析、語法分析和語義分析三個步驟實現的。詞法分析由詞法分析程序(又稱為掃描程序)完成。

其任務是識別單詞(即標識符、常數、保留字,以及各種運算符、標點符號等)、造符號表和常數表,以及將源程序換碼為編譯程序易於分析和加工的內部形式。


I. visual basic編譯方式有哪兩種

1,一種是編譯為 P-代碼。

2,一種是編譯為本機代碼,這個本機代碼還有幾種選擇,具體如下:

J. 典型的編譯器可以劃分成幾個邏輯階段

這是我們今天的作業,

典型的編譯器可以劃分成七個主要的邏輯階段,分別是詞法分析器、語法分析器、語義分析器、中間代碼生成器、獨立於機器的代碼優化器、代碼生成器、依賴於機器的代碼優化器。各階段的主要功能:

(1)詞法分析器:詞法分析閱讀構成源程序的字元流,按編程語言的詞法規則把它們組成詞法記號流。

(2)語法分析器:按編程語言的語法規則檢查詞法分析輸出的記號流是否符合這些規則,並依據這些規則所體現出的該語言的各種語言構造的層次性,用各記號的第一元建成一種樹形的中間表示,這個中間表示用抽象語法的方式描繪了該記號流的語法情況。

(3)語義分析器:使用語法樹和符號表中的信息,依據語言定義來檢查源程序的語義一致性,以保證程序各部分能有意義地結合在一起。它還收集類型信息,把它們保存在符號表或語法樹中。

(4)中間代碼生成器:為源程序產生更低級的顯示中間表示,可以認為這種中間表示是一種抽象機的程序。

(5)獨立於機器的代碼優化器:試圖改進中間代碼,以便產生較好的目標代碼。通常,較好是指執行較快,但也可能是其他目標,如目標代碼較短或目標代碼執行時能耗較低。

(6)代碼生成器:取源程序的一種中間表示作為輸入並把它映射到一種目標語言。如果目標語言是機器代碼,則需要為源程序所用的變數選擇寄存器或內存單元,然後把中間指令序列翻譯為完成同樣任務的機器指令序列。

(7)依賴於機器的代碼優化器:試圖改進目標機器代碼,以便產生較好的目標機器代碼。

閱讀全文

與編譯模式通常分為幾種相關的資料

熱點內容
模式識別中文pdf 瀏覽:774
c語言平均數字編譯錯誤 瀏覽:170
單片機算交流 瀏覽:45
php自適應網站 瀏覽:467
2b2t伺服器怎麼獲得許可權 瀏覽:815
c語言javaphp 瀏覽:804
程序員技術不分高低嗎 瀏覽:619
dos不是內部或外部命令 瀏覽:709
PC機與單片機通訊 瀏覽:675
二級加密圖 瀏覽:113
壓縮機異音影響製冷嗎 瀏覽:711
德斯蘭壓縮機 瀏覽:490
程序員太極拳視頻 瀏覽:531
網上購買加密鎖 瀏覽:825
安卓為什麼軟體要隱私 瀏覽:83
虛擬主機管理源碼 瀏覽:811
java圖形圖像 瀏覽:230
單片機輸出口電平 瀏覽:487
java配置資料庫連接 瀏覽:479
java多態的體現 瀏覽:555