當前位置:首頁 » 編程軟體 » 小型編譯程序的實現

小型編譯程序的實現

發布時間: 2022-09-23 02:27:45

java如何編譯成EXE的文件如何實現自編譯(不要虛擬機還可運行)

(1) 使用InstallAnywhere等工具,將應用程序和JRE一起打包,製作一個exe的安裝包。
在安裝過程中,用戶可以選擇使用他機器上的JRE或是這個安裝包內的JRE來運行程序。這是很常見的一種做法,顯得比較專業,而且原來的程序不需要作任何改動,安裝後的程序即在JVM上運行,可以獲得原本的效果。如JBuilder就是這么做的。InstallAnywhere中一個壓縮的JRE大概是8M,它可以針對linux、 win、mac等多個操作系統打包。

(2) 使用JET、gcj等工具,將應用程序製作成一個真正的exe文件。
採用這種方式做成的exe文件可以直接在沒有安裝JRE的計算機上運行。Java類庫全部被編譯成dll,變為本地調用。
JET是收費的(從 http://www.excelsior-usa.com/jetdlevala.html可以下載3.6試用版)。JET安裝好以後,它要把系統上安裝的JDK編譯一下,要等很久。如果JDK是1.4.2_05版還需要打一個補丁。
gcj有windows和Linux版,直接下載zip包,不需要安裝。裡面有不少例子,一些build的批處理文件。從原理來說,gcj自己實現了 JVM規范,當運行用gcj製作的exe(大約2M)時會啟動裡面的一個小型jvm,在上面跑應用程序。不過,gcj目前還不能完整地支持Swing。
但不管怎樣,把Java做成純exe實在是吃力不討好,有很多限制,文件又大。

(3) 使用exe4j製作偽exe文件。
原理:可執行的jar包文件可以通過命令行java -jar jarfile.jar來執行。製作偽exe其實做法一樣,只不過做成exe,調用系統中的java.exe來運行它。
一般情況下,exe4j做成的可執行文件仍需JRE支持,也就是說只能在安裝了JRE的計算機上運行。不過有一種方法可製作偽exe文件,在沒有安裝 JVM的機器上也能運行:雖然exe4j並不提供將JRE打包的功能,但是它提供如何搜索JRE的方法。在第六項設定[JRE]中有一步[Search sequence],添加一個Directory方式的搜索入口,指定是相對目錄「.」 ,然後把JRE目錄中的bin和lib兩個目錄復制到你的發布目錄中就可以了。(當然你可以不用當前目錄「.」,任何當前目錄下的其他目錄也可以,比方 「./JRE」之類的)。此時發布目錄中生成的exe文件就在運行時就會調用當前目錄中的JRE,而不是通過系統注冊表及環境變數尋找JRE了,所以只要把整個發布目錄(含exe及JRE的bin和lib)復制到其他計算機上,也就實現了「目標機即便沒有安裝過JRE也可以執行」。當然,這種發布方式無法得到一個內含JRE的單獨的exe文件。另外,JRE的完整目錄有50M,但是我們的程序只可能調用其中很少的一部分,你可以手動為發布目錄中的JRE減肥、去掉不使用的文件,但這需要一定的經驗。減肥後的JRE根據應用程序的不同,最小可以只有10M左右。

(4) 把java應用程序最後做成applet。
將java applet編入html文件,用瀏覽器方式打開,可以在任何沒有安裝JRE的機器上運行,好比exe文件一樣(當然在安裝了JRE的計算機上也可以用批處理文件或java命令來運行)。Windows IE打開applet靠的是一個叫「micosoft VM」的東西,現在該軟體一般都是自帶的。不過,Windows IE支持的JDK最高版本只能到JDK1.1。如果別人的機器運行不了applet,無非這三個原因:
a. 程序編譯時使用的JDK版本太高,Windows IE不支持。用較老闆版本的編譯器重新編譯(v1.1之前)就可以了。比如在dos下javac -target 1.1 *.jav(強制使用JDK1.1編譯源程序)。
b. 用戶的Windows沒有micosoft vm(這種情況比較少見,只有windows XP第一版等極少數情況)。這種情況下,當客戶的IE每次load applet時候, Windows會提示「沒有download micosoft VM」,他只需從網上下一個就可以了。
c. 用戶計算機上裝有一些保護ie的軟體(比如最新的windows sp2有時就會防止java applet的loading)。暫時關閉保護功能就可以了。

(5) 使用JBuilder、exe4j等工具製作成需要JRE支持的exe文件。

Ⅱ 正在做一個小型編譯器,請問如何把中間表達式如何生成c語言

你的意思不是很明白。
我就簡單說下一個我當時寫一個簡單編譯器的流程吧
首先你得確定文法,然後再開始寫編譯器
1. 用flex寫詞法分析程序,具體的網上有很多資料。
2. 用yacc寫語法分析程序,可以分幾步來寫
先寫一個語法樹生成程序,列印出語法樹,可以進行簡單的類型檢查;
再使用語法制導的翻譯方案,寫一個中間代碼生成程序。
3. 將中間代碼翻譯成匯編語言,優化就不做了太麻煩。

推薦龍書

Ⅲ 購買畢業設計關於VC++製作的小型編譯器的設計與實現。能製作的大俠們聯系我。QQ60524717

我發, hi聯系,email?

Ⅳ 求一個小型的C++編譯器

絕對是 MinGW 最整潔最清楚
MinGW只有編譯器,EditPlus + makefile做程序是相當整潔的。 保證不會自動創建一個文件。

DevC等都是使用它去編譯,都是個殼子,其實根本不需要它那垃圾的文本編輯功能。EditPlus的文本編輯是最好用的了。

Ⅳ 一個典型的編譯程序通常由哪些部分組成

1、詞法分析

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

2、語法分析

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

3、中間代碼生成

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

4、代碼優化

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

5、目標代碼生成

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

(5)小型編譯程序的實現擴展閱讀:

編譯程序把用高級程序設計語言書寫的源程序,翻譯成等價的機器語言格式目標程序的翻譯程序。編譯程序屬於採用生成性實現途徑實現的翻譯程序。它以高級程序設計語言書寫的源程序作為輸入,而以匯編語言或機器語言表示的目標程序作為輸出。

編譯出的目標程序通常還要經歷運行階段,以便在運行程序的支持下運行,加工初始數據,算出所需的計算結果。

編譯程序的實現演算法較為復雜。這是因為它所翻譯的語句與目標語言的指令不是一一對應關系,而是一多對應關系;同時也因為它要處理遞歸調用、動態存儲分配、多種數據類型,以及語句間的緊密依賴關系。

但是,由於高級程序設計語言書寫的程序具有易讀、易移植和表達能力強等特點,編譯程序廣泛地用於翻譯規模較大、復雜性較高、且需要高效運行的高級語言書寫的源程序。

Ⅵ 編譯程序和解釋程序都是什麼意思

1、編譯程序是把用高級程序設計語言或計算機匯編語言書寫的源程序,翻譯成等價的機器語言格式目標程序的翻譯程序,屬於採用生成性實現途徑實現的翻譯程序。編譯程序以高級程序設計語言書寫的源程序作為輸入,而以匯編語言或機器語言表示的目標程序作為輸出;編譯出的目標程序通常還要經歷運行階段,以便在運行程序的支持下運行,加工初始數據,算出所需的計算結果。

2、解釋程序是高級語言翻譯程序的一種,它將源語言書寫的源程序作為輸入,解釋一句後就提交計算機執行一句,並不形成目標程序。就像外語翻譯中的「口譯」一樣,說一句翻一句,不產生全文的翻譯文本。

(6)小型編譯程序的實現擴展閱讀:

編譯程序的實現演算法較為復雜。這是因為它所翻譯的語句與目標語言的指令不是一一對應關系,而是一多對應關系;同時也因為它要處理遞歸調用、動態存儲分配、多種數據類型,以及語句間的緊密依賴關系。但是,由於高級程序設計語言書寫的程序具有易讀、易移植和表達能力強等特點,編譯程序廣泛地用於翻譯規模較大、復雜性較高、且需要高效運行的高級語言書寫的源程序。

Ⅶ 目前的編譯程序如何開發

腳本開發就行。



編譯程序(Compiler,compiling program),也稱為編譯器,是指把用高級程序設計語言書寫的源程序,翻譯成等價的機器語言格式目標程序的翻譯程序。編譯程序屬於採用生成性實現途徑實現的翻譯程序。

它以高級程序設計語言書寫的源程序作為輸入,而以匯編語言或機器語言表示的目標程序作為輸出。編譯出的目標程序通常還要經歷運行階段,以便在運行程序的支持下運行,加工初始數據,算出所需的計算結果。編譯程序的基本功能是把源程序(高級語言)翻譯成目標程序。

但是,作為一個具有實際應用價值的編譯系統,除了基本功能之外,還應具備語法檢查、調試措施、修改手段、覆蓋處理、目標程序優化、不同語言合用以及人-機聯系等重要功能。語法檢查:檢查源程序是否合乎語法。

如果不符合語法,編譯程序要指出語法錯誤的部位、性質和有關信息。編譯程序應使用戶一次上機,能夠盡可能多地查出錯誤。

以上內容參考:網路-編譯程序

Ⅷ 編譯程序的工作過程

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

Ⅸ 編譯程序包括哪幾個主要組成部分

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

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

(9)小型編譯程序的實現擴展閱讀:

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

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

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

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

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

Ⅹ 編譯原理實踐:小型編譯器實現。帶程序設計實驗報告。 謝謝啊。 郵箱:[email protected]!!

11嬸。。。

熱點內容
scratch少兒編程課程 發布:2025-04-16 17:11:44 瀏覽:642
榮耀x10從哪裡設置密碼 發布:2025-04-16 17:11:43 瀏覽:369
java從入門到精通視頻 發布:2025-04-16 17:11:43 瀏覽:89
php微信介面教程 發布:2025-04-16 17:07:30 瀏覽:312
android實現陰影 發布:2025-04-16 16:50:08 瀏覽:795
粉筆直播課緩存 發布:2025-04-16 16:31:21 瀏覽:348
機頂盒都有什麼配置 發布:2025-04-16 16:24:37 瀏覽:213
編寫手游反編譯都需要學習什麼 發布:2025-04-16 16:19:36 瀏覽:819
proteus編譯文件位置 發布:2025-04-16 16:18:44 瀏覽:369
土壓縮的本質 發布:2025-04-16 16:13:21 瀏覽:596