當前位置:首頁 » 編程軟體 » 如何寫編譯器

如何寫編譯器

發布時間: 2024-08-01 21:13:17

Ⅰ 如何學寫一個編譯器後端

書籍請參考編譯原理的龍書,以及flex,bison,llvm的manual。

如何寫我可以給你一個大致的流程,

編譯器由詞法分析器->語法分析器->中間代碼生成器->後端組成。

c語言寫編譯器一般可以按照以下步驟:

  1. 使用flex生成詞法分析器。(flex可以通過自己編寫的描述文件來自動生成詞法分析器)

  2. 2.使用bison生成語法分析器。(bison可以通過自己編寫的描述文件來自動生成語法分析器)

  3. 3.通過語法分析器得到輸入代碼的語法樹表示。

  4. 4.編寫遍歷函數遍歷語法樹生成中間代碼。(這里使用LLVM的中間代碼表示)

  5. 5.利用LLVM工具集來編譯執行所得到的中間代碼。

Ⅱ 如何用c#寫文檔編輯器

首先,打開你的開發工具Microsoft visual studio 2005。文件——》新建項目——》項目類型選擇visualc#,模板選擇windows 應用程序,到此我們已經創建好一個window窗體了!

接著修改窗體的屬性,窗體名字修改為EditorForm,窗體的text屬性修改為你要的命名。在工具箱了選擇MenuStrip控制項如圖,把菜單拖到窗體去!

-----------------------------------------------------------------------------------------------------------------------------------------

好了,界面我們已經設計好了,現在我們來實現功能了!首先從工具箱裡面拖一個叫做openFileDialog的控制項,這是一個用於打開文件的對話框來的,把這個拖到窗體,然後點擊一下OpenFileDialog選定此控制項,設置Filter屬性默認文本(*.txt)|*.txt|富文本文件(*.rtf)|*.rtf 。當然以後功能擴充後,可以打開別的文件,例如設置Filter的屬性為括弧里的(資料庫文件(*.dat)|*.dat|圖像文件(*jpg;*bmp;*gif)|*jpg;*bmp;*gif|文本文件(*.txt)|*.txt|所有文件(*.*)|*.*)。(注意,次數是用於打開文件對話框對要打開的文件進行篩選的,我們這里只是做簡單的文本編譯器,所以支持的格式分別是.txt 和.rtf格式的文本),最後雙擊菜單的打開菜單出現

Ⅲ c語言編譯器是用什麼於語言寫的

第一個C語言編譯器應該是用匯編寫的,但是第一個成熟的C語言編譯器應該是由匯編和C語言共同寫的。

編譯原理講到了「自舉編譯器」。大意就是先用底層語言(應該是匯編)寫一個能運行,但效率極低的C語言編譯器(底層語言不好優化),有了C語言的編譯器以後,就可以用C語言好好寫一個編譯器了,用之前那個運行沒問題,但效率低得編譯器編譯一下,就得到了可以使用的編譯器了。

Ⅳ 怎樣去寫一個編譯器(用C語言寫C語言編譯器),需要哪些知識做鋪墊,可以給一下相關網站和書籍的推薦嗎

寫編譯器重點就是設計並實現一些數據結構和演算法,語言特點太多的話,代碼寫起來不容易,建議你找一個小語言嘗試下,不要一開始就去嘗試成熟語言。否則你會在寫完語法分析程序以後,遭遇到很大的困難。多數人都是在寫語義分析程序的時候,突然發現自己設計的數據結構很爛,後邊越寫越要命。
如果你想入門編譯器的話,那麼可以看《編譯原理與實踐》,整本書先將編譯器理論,然後後邊教你一步步實現c-miuns(c的子集)的編譯器,包括lex,yacc,都在幾千行代碼左右。這本書講的比較簡單易懂一點
也可以學學斯坦福大學的編譯器設計公開課(aiken設計了一個叫cool的語言,專門用來教人寫編譯器),課程地址上面有人給了:Compilers。這門課以前有個實驗環境(據說已經給了,我以前寫的時候還是用的網上一個不完整的實驗環境),把和編譯器知識無關的內容都給你寫好了,你只需要在固定的地方填上你的內容就可以寫出你的編譯器(不要覺得很簡單哦,人家的代碼寫的很精巧的,讀完就發現寫個好編譯器還是很費腦子的),另外,這個實驗環境有個特點,就是在每一步都提供標准程序做對比,你可以在寫完一部分以後就同標准程序對比,及時發現錯誤。這種方式為寫編譯器又提供了很多幫助
先找個小的,慢慢研究,弄懂了整體的結構再說

Ⅳ 寫編譯器必須要會匯編語言嗎

這種事情從理論層面來說:不一定要與匯編語言有什麼瓜葛。你完全可以讓你的編譯器直接編譯成機器碼。大部分C/C++編譯器(不是所有的)之所以先編譯成匯編語言,是為了解構。從C到匯編的「翻譯」相對容易(都算是抽象語言,有語義的),同時匯編語言的編譯器效率很高,可以生成質量非常高的機器碼。所以兩者結合,可以突出各自的優勢,減少復雜度。
但是如果有必要,當然也可以直接編寫產生機器碼的編譯器,實際上java/C#這樣的半編譯語言和Js這樣的腳本語言,都沒有先轉換成匯編的這一步。前者是因為強大的虛擬機技術,直接把位元組碼轉換成機器碼執行了,後者是靈活的解釋器,實時把代碼轉換成機器碼執行,而完全沒有「編譯」這一步(當然如果深究的話,出於性能考慮,很多高性能的解釋器也會提前「預編譯」一部分代碼,但這是具體實現,不是宏觀概念)。

Ⅵ 為什麼c語言的編譯器可以用c語言來寫

我是這樣想的,第一個編譯器肯定不是C語言,但是有了C編譯器就可以編譯C語言啦,編譯器也是程序對吧,二進制代碼,可以運行,然後又用C語言寫更好的編譯器用現在的編譯器編成可執行代碼。我是這樣想的呵呵,好比地球上有了第一個生命,然後這個生命又孕育出了新的生命。

Ⅶ 匯編語言的編譯器是用什麼寫的呢

匯編編譯器:把匯編語言源程序轉換為機器語言的程序,匯編編譯器也可以生成源代碼列表文件,其中包括行號,內存地址,源代碼語句,程序中使用的符號及變數,交叉引用列表.

在Windows/Dos 下可用的匯編編譯器有Microsoft宏匯編編譯器MASM,Borland Turbo Assember(TASM)和The NetWide Assembler(NASM),其中NASM是跨平台的編譯器可用於Windows/Dos/linux下.他們的語法相近,都是Intel語法風格. 在Linux下可用的匯編編譯器有NASM,gas.NASM和gas的語法風格相去甚遠,NASM使用的是Intel 語法風格的匯編語法,而gas使用的是AT&T的匯編語法風格.

Ⅷ 用Java可以寫C語言編譯器嗎

用java是可以寫語言編譯器的,用任何語言工具寫都可以。 各語言開發工具間只有開發效率的差異,沒有可行不可行的區別。

編譯器其實就是一個翻譯工具,它可以把代碼直接翻譯成二進制文件交給CPU執行(二進制指令就是CPU的指令集,當然可以直接操作內存),當然,這個二進制文件需要符合操作系統的可執行文件的格式(PE格式或ELF格式)才能執行。

換個角度理解:
linux gcc實際上就是一個工具集合,包含編譯器,匯編器,連接器等
編譯器就是把c語言程序翻譯為一種叫做目標文件的中間表示形式,然後交給匯編器,翻譯為匯編程序,而匯編執行直接對應二進制機器碼,鏈接之後就可以變成可執行文件了。

而用java實現的編譯器完全可以代替gcc工具集合中的編譯器,生成相同的目標文件的中間表示形式,在交給gcc匯編器,連接器等處理。

Ⅸ 新手如何學習編程

熟悉以下關鍵東西,可以邊學邊做,定期訓練,經常思考,長期積累:

1、語法。

2、基礎理論(數學、數據結構、演算法等)。

3、設計方法(編程原則、設計模式、框架設計等)。

4、庫(核心、基礎、UI、擴展、游戲引擎等)。

5、計算機相關(操作系統、網路、圖形學等)。

6、領域知識(游戲設計、網站設計等)。

7、開發工具(編輯器、IDE、自動部署等)。

8、項目管理(進度管理、分工協作、Bug管理、版本控制等)。

最普遍也是最重要的能力:創造力。努力分析並理解好做什麼以及怎麼做。要知道上面那些東西一開始都是不存在的。

具體方法包括:

1、快速閱讀入門教程和書籍,適合學習語言和基礎庫。比如我學Java讀的《Java編程思想》,練習題做過一點,然後學ActionScript就沒讀過書,只讀過Adobe官方文檔《ActionScript 3.0編程》。

2、閱讀庫的文檔、實例、源碼。比如Flash、Flex開發,熟悉官方API很重要,很多細節要具體使用時才注意到,這時候最好做個筆記,雖然我從沒看過我的筆記。

3、做一個自己感興趣或熟悉的小項目,比如我就以黑白棋游戲作為多個語言的試水項目,一樣的邏輯,便於把關注點放在語言特點上。

4、自己動手豐衣足食。廚師有菜譜,程序員可沒菜譜。比如我做游戲,最關鍵的游戲編程知識全部是動手學出來的,很少有專門針對某個業務領域(如游戲)的編程書籍,要麼是入門書,要麼是模式書(如演算法)、理論書(圖形學),很少有書籍教你如何開發一個45度角地圖系統加編輯器的,全靠自己思考,以及看前人的代碼,需要時找些網路資料。關鍵是,可以培養最重要的創造力。

對於演算法和設計模式,可以研讀下,但是關鍵還是靠平時如何使用了。新手勉強不來的。

項目管理方面的,就得靠工作經驗了,多思考多提意見不要只走流程。

熱點內容
電腦配置信息被改怎麼看到 發布:2024-11-07 01:17:06 瀏覽:776
linuxgc 發布:2024-11-07 00:51:56 瀏覽:316
樂視改密碼是什麼意思 發布:2024-11-07 00:47:07 瀏覽:486
linux圖形界面系統 發布:2024-11-07 00:42:00 瀏覽:999
群控ip是伺服器ip么 發布:2024-11-07 00:39:43 瀏覽:564
安卓手機上製表app哪個好 發布:2024-11-07 00:28:06 瀏覽:117
電腦進伺服器卡了退不出來怎麼辦 發布:2024-11-07 00:23:30 瀏覽:763
安卓哪個型號不卡 發布:2024-11-07 00:19:03 瀏覽:485
mxml庫編譯 發布:2024-11-07 00:18:07 瀏覽:213
dnsdns伺服器地址 發布:2024-11-07 00:16:23 瀏覽:11