當前位置:首頁 » 編程軟體 » 編譯的攻略

編譯的攻略

發布時間: 2022-06-30 07:15:45

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

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

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

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

(1)編譯的攻略擴展閱讀:

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

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

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

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

B. 編譯過程分為哪幾個階段各階段的遵循的原則、識別機構、使用的文法編譯原理

編譯原理中的遍概念
編譯階段也常常劃分為兩大步驟,分析步驟和綜合步驟 分析步驟和綜合步驟 分析步驟是指對源程序的分析 -線性分析(詞法分析或掃描) -層次分析(語法分析) -語義分析 綜合步驟是指後端的工作,為目標程序的生成而進行的綜合

你分析過嗎?若按照這種組合方式實現編譯程序,可以設想,某一編譯程序的前端加上相應不同的後 端則可以為不同的機器構成同一個源語言的編譯程序。也可以設想,不同語言編譯的前端生成同一種中間 語言,再使用一個共同的後端,則可為同一機器生成幾個語言的編譯程序。

一個編譯過程可由一遍、兩遍或多遍完成。所謂"遍",也稱作"趟",是對源程序或其等價的中間語言程 序從頭到尾掃視並完成規定任務的過程。每一遍掃視可完成上述一個階段或多個階段的工作。例如一遍可 以只完成詞法分析工作;一遍完成詞法分析和語法分析工作;甚至一遍完成整個編譯工作。對於多遍的編 譯程序,第一遍的輸入是用戶書寫的源程序,最後一遍的輸出是目標語言程序,其餘是上一遍的輸出為下 一遍的輸入。

在實際的編譯系統的設計中,編譯的幾個階段的工作究竟應該怎樣組合,即編譯程序究竟分成幾遍, 參考的因素主要是源語言和機器(目標機)的特徵。比如源語言的結構直接影響編譯的遍的劃分;像 PL/1 或 ALGOL 68 那樣的語言,允許名字的說明出現在名字的使用之後,那麼在看到名字之前是不便為包含該名 字的表達式生成代碼的,這種語言的編譯程序至少分成兩遍才容易生成代碼。另外機器的情況,即編譯程 序工作的環境也影響編譯程序的遍數的劃分。遍數多一點,整個編譯程序的邏輯結構可能清晰些,但遍數 多即意味著增加讀寫中間文件的次數,勢必消耗較多時間,一般會比一遍的編譯要慢。

C. 多個文件的條件編譯,需要注意些什麼

不能在同一個文件中包含頭文件兩次。一般不會犯這種錯誤,但是當使用包含了一個頭文件的文件時有可能在不知情的情況下犯這個錯誤。

使用預處理器指令#ifndef來解決上面的問題。語名#ifndef hyong…..#endi表示僅當以前沒有使用預處理器編譯指令#define定義的名稱hyong時才處理#ifndef….#endif之間的語句。#define通常創建符號常量,比如#define H 3;把常量3定義為名字H,但只使用#define就能創建名稱,比如#define H;就創建了一個名稱H。完整的#ifndef….#endif語句的例子如下:#ifndef HY #define HY void g(); #endif;該語句的執行順序為:編譯器首先遇到該頭文件時,名稱HY沒有被定義,這時編譯器就將查看#ifndef….#endif之間的內容,並讀取到#define HY這一行。如果在同一文件中遇到包含該頭文件的代碼時,編譯器就知道HY這個名字已經被#define定義了,從而跳過#ifndef….#endif之間的內容。注意這種方法並不能防止頭文件被包含兩次,而只是讓他忽略除第一次包含之外的所有內容。

上面的內容節選自本人文庫里的文章《C++名稱空間與作用域專題》,希望對你有幫助,如果你對預處理器不了解,可以再去下載本人的另一篇文章《C++宏,預處理器,RTTI,typeid與強制類型轉換專題》

D. 如何用JDK編譯java程序

1 你把文件名拼錯了,java對大小寫是敏感的。打錯了當然找不到文件。
2 虛擬機沒有找到必須的類庫。你可能沒有在autoexec.bat文件中設置classpath。進入windows的運行,輸入sysedit,然後在autoexec.bat文件中加入這么一行:
set classpath=你的jdk的安裝目錄/lib; 例如set classpath=c:/jdk1.3.0_02/lib;
保存退出後,你要在dos窗口的c根目錄下執行一遍autoexec.bat文件已保證被設置了,當然,如果你願意也可以重啟機器。

E. 簡述將源程序編譯成可執行程序的過程

一個源程序到一個可執行程序的過程:預編譯、編譯、匯編、鏈接。其中,編譯是主要部分,其中又分為六個部分:詞法分析、語法分析、語義分析、中間代碼生成、目標代碼生成和優化。

預編譯:主要處理源代碼文件中的以「#」開頭的預編譯指令。處理規則如下:

1、刪除所有的#define,展開所有的宏定義。

2、處理所有的條件預編譯指令,如「#if」、「#endif」、「#ifdef」、「#elif」和「#else」。

3、處理「#include」預編譯指令,將文件內容替換到它的位置,這個過程是遞歸進行的,文件中包含其他文件。

4、刪除所有的注釋,「//」和「/**/」。

5、保留所有的#pragma 編譯器指令,編譯器需要用到他們,如:#pragma once 是為了防止有文件被重復引用。

6、添加行號和文件標識,便於編譯時編譯器產生調試用的行號信息,和編譯時產生編譯錯誤或警告是能夠顯示行號。

(5)編譯的攻略擴展閱讀:

編譯過程中語法分析器只是完成了對表達式語法層面的分析,語義分析器則對表達式是否有意義進行判斷,其分析的語義是靜態語義——在編譯期能分期的語義,相對應的動態語義是在運行期才能確定的語義。

其中,靜態語義通常包括:聲明和類型的匹配,類型的轉換,那麼語義分析就會對這些方面進行檢查,例如將一個int型賦值給int*型時,語義分析程序會發現這個類型不匹配,編譯器就會報錯。

F. 編譯程序的工作過程

編譯程序必須分析源程序,然後綜合成目標程序。首先,檢查源程序的正確性,並把它分解成若干基本成分;其次,再根據這些基本成分建立相應等價的目標程序部分。為了完成這些工作,編譯程序要在分析階段建立一些表格,改造源程序為中間語言形式,以便在分析和綜合時易於引用和加工(圖1)。
數據結構分析和綜合時所用的主要數據結構,包括符號表、常數表和中間語言程序。符號表由源程序中所用的標識符連同它們的屬性組成,其中屬性包括種類(如變數、數組、結構、函數、過程等)、類型(如整型、實型、字元串、復型、標號等),以及目標程序所需的其他信息。常數表由源程序中用的常數組成,其中包括常數的機內表示,以及分配給它們的目標程序地址。中間語言程序是將源程序翻譯為目標程序前引入的一種中間形式的程序,其表示形式的選擇取決於編譯程序以後如何使用和加工它。常用的中間語言形式有波蘭表示、三元組、四元組以及間接三元組等。
分析部分源程序的分析是經過詞法分析、語法分析和語義分析三個步驟實現的。詞法分析由詞法分析程序(又稱為掃描程序)完成,其任務是識別單詞(即標識符、常數、保留字,以及各種運算符、標點符號等)、造符號表和常數表,以及將源程序換碼為編譯程序易於分析和加工的內部形式。語法分析程序是編譯程序的核心部分,其主要任務是根據語言的語法規則,檢查源程序是否合乎語法。如不合乎語法,則輸出語法出錯信息;如合乎語法,則分解源程序的語法結構,構造中間語言形式的內部程序。語法分析的目的是掌握單詞是怎樣組成語句的,以及語句又是如何組成程序的。語義分析程序是進一步檢查合法程序結構的語義正確性,其目的是保證標識符和常數的正確使用,把必要的信息收集和保存到符號表或中間語言程序中,並進行相應的語義處理。

G. 在linux里,c程序的編輯、編譯、調試的詳細步驟是什麼

(1)用工具寫好C程序...比如vi
(2)打開終端,進入你存放c語言代碼的路徑 例如: cd /opt/
(3)gcc a.c -o abc 意思是:把你的a.c編譯成abc可執行文件
(4)在當前目錄終端下 運行生成的abc,例如: ./abc 前面的.不要掉了
後面可以用gdb進行調試,你可以自己去學習...這是最基本的!!

H. 簡單描述編譯的幾個處理步驟

編譯過程分為分析和綜合兩個部分,並進一步劃分為詞法分析、語法分析、語義分析、代碼優化、存儲分配和代碼生成等六個相繼的邏輯步驟。這六個步驟只表示編譯程序各部分之間的邏輯聯系,而不是時間關系。

編譯過程既可以按照這六個邏輯步驟順序地執行,也可以按照平行互鎖方式去執行。在確定編譯程序的具體結構時,常常分若干遍實現。對於源程序或中間語言程序,從頭到尾掃視一次並實現所規定的工作稱作一遍。每一遍可以完成一個或相連幾個邏輯步驟的工作。

(8)編譯的攻略擴展閱讀:

對於c編譯程序來說,其語言的特點如下:

1、c語言是一種結構化語言。它層次清晰,便於按模塊化方式組織程序,易於調試和維護,而且表現能力和處理能力極強。

2、c語言具有豐富的運算符和數據類型,便於實現各類復雜的數據結構。它還可以直接訪問內存的物理地址,進行位(bit)一級的操作。

3、由於c語言實現了對硬體的編程操作,因此集高級語言和低級語言的功能於一體。它既可用於系統軟體的開發,也適合於應用軟體的開發。

4、此外,c語言還具有效率高、可移植性強等特點。因此它廣泛地移植到了各類各型計算機上,從而形成了多種版本。

I. 如何用JDK編譯JAVA程序

JAVA版hello world全攻略侯光敏 看到很多技術網站的BBS上面充斥著java初學者的關於運行第一個java程序的求助信息,我覺得作為過來人很有寫這篇文章的必要,因為他們遇到的都是些很低級的問題,但是讓這些問題占據bbs上那麼多寶貴的空間就太不應該了。 要搞清楚的基本概念 java是一種跨平台的網路語言,為了能夠在不同平台上運行,它使用了虛擬機這個概念。後綴名為java的文件是源代碼文件,它經過編譯後生成的是class文件。虛擬機執行的就是這些class文件,將它們轉化成為不同平台能夠運行的命令。這就是為什麼java的效率比較低的原因。也是因為這個原因,在java里沒有其它語言的使用者熟悉的exe文件的概念。 執行hello world的方法 切記:在命令行中輸入 javac 源文件名.java (編譯) java 源文件名 (執行,沒有後綴) 這里說的是java application,裡麵包括main函數。 如果hello world是applet版的,在命令行中輸入appletviewer 源文件名 (已經編譯後的class文件) 如果class文件已經嵌入了html網頁中,直接用IE打開就行了。 application經常出現的錯誤 系統提示Exception in thread "main " java.lang.NoClassDefFoundError。出現這個提示的原因可能有: 1 你把文件名拼錯了,java對大小寫是敏感的。打錯了當然找不到文件。 2 虛擬機沒有找到必須的類庫。你可能沒有在autoexec.bat文件中設置classpath。進入windows的運行,輸入sysedit,然後在autoexec.bat文件中加入這么一行:set classpath=你的jdk的安裝目錄/lib; 例如set classpath=c:/jdk1.3.0_02/lib; 保存退出後,你要在dos窗口的c根目錄下執行一遍autoexec.bat文件已保證被設置了,當然,如果你願意也可以重啟機器。 系統提示HelloWorld.java:1: Public class helloworld must be defined in a file called "HelloWorld.java ". public class helloworld{^ 一個Java源程序中可以定義多個類,但是,具有public 屬性的類只能有一個,而且要與文件名相一致。還有,main方法一定要放在這個public 的類之中,這樣才能運行這個類。 系統提示Exception in thread "main " java.lang.NoSuchMethodError: main 出現這個異常是因為你在抄書上的代碼時抄錯了。主函數一定要這么寫:public static void main(String args[]) 一個字都不能錯,切記!!! applet常出現的錯誤 IE顯示applet已經啟動,但是還是只顯示灰色的一塊。這種問題在使用jBuilder等集成開發工具是最容易出現,用appletviewer就沒有問題。這是因為你在applet中使用了IE不支持的java版本。jBuilder在做applet是默認使用了swing組件,但是IE只支持jdk1.1,所以造成了這種情況。只要把導入swing的語句去掉就行了,然後按照提示修改一下代碼,不要用swing組件的方法。如果你覺得swing組件很漂亮,打死都要用,那麼就裝一個java的plug-in這個東西在你裝jdk的高版本時就自動裝上了。看看你的控制面版中有沒有那個紅鼻子的小東西。但是切記,如果你要用它,那麼你的html的文件的寫法就和從前不一樣了,不能簡單的用CODE來指明類了。至於怎麼寫,不在這篇文章的討論范圍內了(你寫一個hello world還要用plug-in就搞大了)。網上有很多文章講怎麼寫。 用慣了點擊就執行的的exe文件自然就很不習慣打開dos窗口輸入命令行,你可以把它做成jar文件,但是對hello world來說有點麻煩,有個簡單的傻辦法:自己做一個批處理文件。例如:用記事本寫一個run.txt文件,內容是:java 你的主文件名 ,然後把後綴改成bat存到和主文件相同的目錄下。呵呵,雙擊就運行了,夠傻吧。 如果你非要用exe文件運行,jet等工具可以把class文件做成exe文件。但是這樣也失去了java的跨平台性。 以上就是hello world的全攻略了,如果你還看不到hello world,我倒!你還是別學java了。

J. 高級語言的編譯過程,經過哪幾個步驟

開發C程序有四個步驟:編輯、編譯、連接和運行。

任何一個體系結構處理器上都可以使用C語言程序,只要該體系結構處理器有相應的C語言編譯器和庫,那麼C源代碼就可以編譯並連接到目標二進制文件上運行。

1、預處理:導入源程序並保存(C文件)。

2、編譯:將源程序轉換為目標文件(Obj文件)。

3、鏈接:將目標文件生成為可執行文件(EXE文件)。

4、運行:執行,獲取運行結果的EXE文件。

(10)編譯的攻略擴展閱讀:

將C語言代碼分為程序的幾個階段:

1、首先,對源代碼文件進行測試。以及相關的頭文件,比如Stdio。H.CPP預處理為。我的文件。預編譯。該文件不包含任何宏定義,因為所有宏都已展開,且包含的文件已插入。我提起。

2、編譯過程是對預處理後的文件進行詞法分析、語法分析、語義分析和優化,生成相應的匯編代碼文件。這個過程通常是整個程序的核心部分,也是最復雜的過程之一。

3、匯編程序不直接輸出可執行文件,而是輸出目標文件。匯編程序可以調用LD來生成可運行的可執行程序。也就是說,您需要鏈接到大量文件以獲得最終可執行文件「a.out」。

4、在鏈接過程中,其他目標文件中定義的函數調用指令需要重新調整,而其他目標文件中定義的變數也存在同樣的問題。

熱點內容
安卓系統的用戶管理在哪裡 發布:2024-05-04 23:12:27 瀏覽:429
我的世界伺服器推薦電腦版免費 發布:2024-05-04 23:04:46 瀏覽:394
c程序如何編譯 發布:2024-05-04 22:58:05 瀏覽:931
蘋果手機怎麼查看id密碼 發布:2024-05-04 22:54:49 瀏覽:657
家有三相電如何配置音響設備 發布:2024-05-04 22:53:42 瀏覽:55
三星存儲器已幾乎滿 發布:2024-05-04 22:47:38 瀏覽:736
mf90pos機密碼是什麼 發布:2024-05-04 22:24:04 瀏覽:750
編譯預處理和函數區別 發布:2024-05-04 22:16:49 瀏覽:431
java復選框 發布:2024-05-04 22:13:24 瀏覽:529
安卓怎麼玩頁游 發布:2024-05-04 22:03:17 瀏覽:142