pico編譯器要怎麼做代碼
Ⅰ 匯編語言編譯器是怎麼編寫的
編譯器自舉!搜索這個關鍵字
程序都是編譯器編譯的。這個是肯定的
至於第一款X語言編譯器是不是直接1010101010自己寫的那就不知道啦
一般開發編譯器的話。有兩條路選擇
1.利用yacc(或者其變種)&lex(詞法分析)-等工具自己生成語法模板
詞法語法都可以使用這些工具自己生成
然後自己編寫生成的中間碼和生成的機器碼就可以了
一般做編譯原理類似試驗都是如此的。許多編譯器也的確是這樣
2.自己寫詞法分析和語法分析。可以參考一些開源的編譯器
lcc-這個是ANSI C99標準的編譯器是開源的
或者nasm,watcom等編譯器到www.sf.net上不少開源的編譯器
總的來說。高級語言編譯器比較難寫
如果想快速寫出一個的話
可以採用第一種做法。利用工具生成語法詞法模板
先寫一個簡單的匯編編譯器比較簡單
開源的有nasm,jwasm(支持masm語法開源的編譯器)
http://www.japheth.de/JWasm.html
fasm(這款編譯器是自舉的.就是自己可以編譯自己),
http://flatassembler.net/
剩下的就是自己做好語言規則關鍵字map
引用高手的話。語言map做好了你的編譯器也做好一半了
剩下的都是機械性的工作了。
生成x86或者arm指令。
優化工作這個很難解釋.根據你所需要的做吧
畢竟可以做出一個無錯,又XX的編譯器已經很難得
你可以選擇使用現有的編譯器開發自己的編譯器
然後等到你的編譯器支持相當數量指令和成熟度的時候
使用自己的語法重新寫一遍編譯器.
這樣你就可以用自己的編譯器開發自己的編譯器了(是不是很邪惡?)
另外舉幾個例子
Delphi的編譯器是C++ Builder開發的。
而C++ Builder的IDE是Delphi開發的
C++ Builder的編譯器是C++ Builder開發的-這個就是編譯器自舉了。。Delphi和C++ Builder共享一個後端化優化器。
Delphi 早期的版本的編譯器是tasm直接編譯的。可見Anders的匯編功力多強悍(Anders也就是後來VJ++,C#,.NET工程的核心架構師.最關鍵的靈魂級人物)
VC++的編譯器是VC++開發的。很明顯這都說明了編譯器自舉
自己開發自己。如果一個編譯器可以做到自己編譯自己。那基本上就可以實現任何功能了。
關於編譯器開發的書籍可以看一下
龍書《編譯原理(第二版)》
虎書《現代編譯原理-c語言描述》
鯨書《高級編譯器設計與實現》
建議從鯨書看起。然後是龍書
再來是虎書--虎書裡面描述了許多現代編譯器(正如其名)技術
例如面向對象啦,優化,垃圾回收等等.
鯨書看完基本上就可以實現一個簡單的Tiny C編譯器了
然後在龍書鞏固,讀一下語言規范,自己看一些開源的匯編編譯器代碼
自己就可以嘗試做一個匯編語言編譯器了.等到技術提高了
在嘗試做一些高級語法識別,參考LCC代碼做一下ANSI C99的
C語言編譯器。再來就看你自己的興趣和領悟度拉
如果想支持C++的話就得要對編譯器做許多方便的研究
類似java那種跨平台或者Ruby,python等動態語言
虎書中也有描述。當然看自己功力了
Ⅱ 如何用手機進行編程有哪些值得推薦的軟體
手機上可以編程的軟體其實有很多,有付費的也有免費的,這里簡單介紹幾個免費的手機編程軟體,主要分為C/C++、Java、Python、Html和Linux5個方面,感興趣的朋友可以自己下載嘗試一下,主要內容如下:
這里介紹一個手機軟體—C++編譯器,可以直接編輯運行C/C++代碼,代碼高亮,自帶有語法檢查功能,使用起來非常不錯,下面我簡單介紹一下這個軟體:
1.首先,安裝C++編譯器,這個直接在手機應用商店中搜索就行,如下,大概也就2.6兆左右,直接下載安裝:
2.安裝完成後,我們就可以直接編寫C語言代碼了,效果如下,關鍵字高顯亮,還可以自動進行語法檢查:
自帶有簡單的TCC編譯器,可以直接編譯運行C語言程序,如下:
3.這里你也編寫C++程序,效果如下,只不過不能直接編譯運行,需要先安裝G++插件,才能正常運行:
這里介紹一個手機軟體—AIDE,相當於手機上的Java開發環境,可以直接編輯運行Java程序,還可以進行簡單的安卓開發,下面我簡單介紹一下這個軟體:
1.首先,安裝AIDE集成開發環境,這個也直接在手機商店中搜索就行,如下:
2.安裝完成後,我們直接新建Java項目,之後就可以直接編寫Java程序了,效果如下,這里支持語法提示、檢查和自動補全功能, 使用起來非常不錯:
點擊運行這個Java程序,效果如下:
3.這里也可以編寫一些簡單的安卓程序,效果如下,而且官方自帶有教學入門實例,非常適合初學者學習和掌握:
程序運行效果如下:
這里介紹一個手機軟體—QPython3,相當於手機上的Python3集成開發環境,自帶有Python3解釋器,支持命令行和文本編程兩種方式,下面我簡單介紹一下這個軟體:
1.首先,安裝QPython3,這個與上面的軟體一樣,直接在手機應用中搜索就行,如下:
2.安裝成功後,打開這個軟體,點擊主界面中的終端,就可以直接進入到python命令行,一行命令一行輸出,效果如下:
3.這里你也可以先使用QEdit編輯器編輯Python程序,然後直接點擊運行,效果是一樣的,如下:
這里介紹一個手機軟體—w3cschool編程學院,可以直接在線編輯和運行Html代碼,使用起來非常方便,下面我簡單介紹一下這個軟體:
1.首先,下載安裝w3cschool編程學院,這個也直接搜索就行,如下:
2.安裝成功後,打開這個軟體,直接搜索Html,就可以找到所有的Html資料和教程,這里我們點擊進去,就可以直接查看所有資料,如下:
每一章節都有詳細介紹和示例,非常適合初學者學習;
3.這里你也可以在線編輯運行Html代碼,非常方便,效果如下:
這里介紹兩個手機軟體—Termux和Termius,這兩個軟體都相當於手機上的Linux SSH客戶端,可以直接遠程連接Linux,執行相關操作,下面我簡單介紹一下這2個軟體:
1.首先,安裝Termux,這個直接搜索就行,如下,不大,直接下載安裝:
2.安裝完成後,打開這個軟體,我們就可以直接執行Bash命令,效果如下:
3.如果你需要遠程連接Linux的話,可以先安裝ssh命令,之後就可以遠程登錄Linux伺服器了,效果如下:
1.首先,安裝Termius,這個也直接搜索就行,如下:
2.打開這個軟體,默認會有一個本地的終端連接,可以執行簡單的shell操作,如下:
3.這里你也可以新建ssh連接,遠程連接Linux系統,非常方便,使用起來也很不錯:
至此,這里就介紹完了這5類手機編程軟體,感興趣的朋友可以在自己手機上下載嘗試一下,偶爾作為編程學習來說,還是非常不錯的,但是實際開發學習的話,建議還是在電腦上進行,調試運行程序更方便,希望以上分享的內容能對你有所幫助吧,也歡迎大家留言交流。
Android的底層是Linux,理論上Android是具有編程完備性的,只不過Android在Linux kennel上加了一層Android運行環境,這一層環境是虛擬機,再加上Android本質上是在移動平台,編程功能就削弱了。iOS的本質是Unix,最早的iPhone甚至是直接運行的Mac OS X,因此iOS同樣也具有編程完備性。
不過在正式回答這個問題之前我不得不說一句,倘若你是想把編程作為一個興趣,你當然可以在手機上寫寫代碼,反過來你要把編程作為以後吃飯的事業,或者說想要在編程方面取得一個比較大的成就,你還是應該選擇用電腦編程。
這一款工具你一定要熟悉,這是Android上的一款神器。
Termux可以幫助你在Android上搭建完備的Linux環境,你可以理解為類似Windows上的Cygwin,它並非是Linux上的虛擬機環境,並且安裝包只有幾百KB而已。
你可以安裝python環境,甚至安裝Linux上的很多包,這款工具還支持ssh、ftp等眾多連接方式。
C4droid是Android平台傷的一款C/C++集成開發環境,默認支持tcc編譯器,可以選擇安裝gcc插件,這款編程工具可以用SDL簡單媒體層庫,也支持qt開發,甚至還可以開發native Android app開發,功能還是比較全的。
網路貼吧有一些用戶發布了比較新的版本,默認使用g++編譯器。
這是Android上功能強大、但是使用簡單的python集成開發環境,python這門編程語言的缺點是怎麼寫都行,不過優點也是怎麼寫也可以,隨著人工智慧的爆發,python已經成為了一門非常重要的編程語言。
全功能的終端模擬器,pip包管理器,內置了C/C++眾多庫,用起來非常方便,順便提醒一下的是,這款軟體的作者跟C4droid是同一個。
這個功能還是比較強大的,可以在Android系統上進行app和 游戲 開發,也是一個具有編寫、編譯、調試的全功能的集成開發環境。
這款集成開發環境支持錯誤檢查、代碼重構、智能代碼導航、生成apk文件,並且可以直接將生成的apk文件進行安裝調試。AIDE還完全兼容eclipse項目,你只需要把代碼復制到你的AIDE中,就可以繼續寫代碼。
AIDE有兩個版本,一個是面向本地開發的AIDE常規版本,一個是面向網路開發的AIDE Web,主要支持的編程語言有C++/Java/JavaScript等。
當然在iOS平台上也有C/C++集成開發環境,Pico Compiler等編程工具,不過目前在編程工具方面Android平台更加開放,一些開發者也更願意放一些這些工具上去。不過還是那句話,如果你想學好編程,建議還是到PC上安裝相應的開發環境操作,屏幕更大、IDE功能也更多更全,電腦鍵盤敲代碼也比手機上小鍵盤敲代碼舒服得多。
這里介紹幾個可以在手機上編程的軟體,感興趣的可以下載一下,試著操作一下:
1.Python:這里推薦一個軟體—QPython3,集成了Python3解釋器、Console控制台和QEdit編輯器,可以直接編輯運行python代碼,也可以進行簡單的安卓開發,下面我簡單介紹一下這個軟體的安裝和使用:
安裝的話,直接在手機應用中搜索就行,如下:
圖1
Ⅲ java pico編譯器怎麼樣
Pico是一個由華盛頓大學(University of Washington)計算與通訊研究所(Computing and Communications Group)編寫並維護的文本編輯程序,在多個版本的Unix和類Unix操作系統中都有移植版本。作為一個簡單的純文本編輯器,pico並不具備字處理程序中常見的增強功能,例如黑體和斜體等等。Pico的基本功能包括文本輸入,文本搜索,拼寫檢查,文件瀏覽,文本拷貝、剪切和粘貼。很有意思的是,一個功能如此簡單的文本編輯器,竟然經常被開發人員用來編寫程序代碼 -- 在種類繁多的純文本編輯器中,pico在程序員中的市場佔有率僅次於vi。
nano是模仿pico的一個更簡單易用的text editor。
在命令行下輸入pico命令,即可啟動pico編輯器,nano的用法與其類似
例如:
pico [回車] --啟動pico,並創建一個新文件
pico file_name [回車] -- 啟動pico,並打開文件名為file_name的文件
在pico中同時按下CTRL鍵和x鍵,可以退出pico。如果pico中正在編輯的文件存在尚未存檔的修改內容,pico會詢問你是否需要保存修改過的內容。如果需要保存的是一個新創建的文件,pico還會讓你輸入新文件的文件名。在這里保存文件或者是放棄保存後就退出pico了。
上圖是一個在CentOS中運行的nano的實例。在屏幕的最上方一行是系統信息,分別顯示的是pico的版本號,當前正在編輯的文件名(如果正在編輯的是一個尚未保存過的新文件,則會顯示New Buffer)。如果緩沖區中右上為保存過的修改,在右上角還會出現Modified提示。
在屏幕的最下方兩行,是常用的系統命令。每個命令都是一個組合鍵,也就是同時按下CTRL鍵(在pico提示中用^符號表示按下CTRL鍵)和表示該命令的字母。雖然在提示用的字母都是大寫,但是實際操作中並不需要輸入大寫字母。例如,調用系統幫助的命令是^G,我們只需要同時按下CTRL鍵和g鍵就可以了。下面列出我們常用的一些pico命令:
^G — 獲得系統幫助
^O — 保存文件,如果這是一個新創建的文件,則會要求您輸入一個文件名
^R — 要求您輸入一個文本文件的文件名,將該文件的內容插入到當前游標位置
^Y — 向前翻頁
^V — 向後翻頁
^W — 調用搜索功能
^K — 刪除游標所在的行,並將該行的內容放入粘貼緩沖區
^U — 將粘貼緩沖區中的內容粘貼到當前游標位置
^C — 報告當前游標位置
^T — 調用拼寫檢查功能
^J — 段落重排功能
^X — 退出pico
需要說明的是,在Solaris,FreeBSD和大部分的Linux發行版中並沒有預設地提供pico。如果您的系統中沒有pico編輯器,最方便的方法是尋找該操作系統上的pine安裝包,安裝了pine之後pico就在系統的路徑裡面了。如果您沒有往系統中安裝應用程序的許可權,還自己下載編譯然後放入自己的路徑當中。最新版本的pine可以從如下地址下載:
Ⅳ 想要編程就必須要有編程軟體
一、如其他回答者所言,如果是用腳本語言寫代碼,確實不需要專業的編程軟體,比如:
用Windows8/8.1/10自帶的PowerShell 2.0編寫程序,或用記事本寫好後更改文件名後綴;
用Windows自帶的cmd終端編寫批處理文件(.bat),或用記事本寫好後將文件名後綴.txt改為cmd;
用Windows自帶的記事本編寫Html(即網頁腳本語言),寫好後將文件名後綴.txt改為htm或html,用瀏覽器就能看到代碼執行的結果;
二、即使是編程軟體,也有代碼編輯器和編譯器之分,比如:
上面所講的腳本語言,雖然常被視為編程,但和編程語言不同。編程語言的編程軟體分編輯器與編譯器。編輯器的功能與記事本類似,可以與word文檔類比;編譯器能編譯並執行程序代碼。編輯器有sublime text,notepad++,Visual Studio Code等,一般而言能寫眾多編程語言(功能上:提供代碼關鍵字高亮乃至簡單debug)。
所以,如果你要寫程序並看到代碼被執行的狀況,請安裝帶編譯器的編程軟體(編輯器也能掛編譯器),比如C/C++語言的Dev-C++(自帶GCC編譯器)、Python語言的Python3或Python2,Java語言的eclipse,Visual Basic 的Visual Basic 6.0等。相信大多數初學者需要的就是帶編譯器的編程軟體。
那編輯器用來幹啥?寫代碼但不需要執行。編程有個目標是編譯導出exe、dll等目標文件,這跟如.c、.cpp後綴的代碼源文件不一樣。而編譯器能夠弄出exe這些程序。
有了編譯器,你就能夠根據代碼執行的情況進行修改、調試debug。
三、編譯器是編程軟體的內核,一種編程軟體可以掛多種編譯器,比如可以寫C語言的codeblocks能掛VC++的編譯器、GCC編譯器等等。
Ⅳ c語言編譯器如何運行
編譯共分為四個階段:預處理階段、編譯階段、匯編階段、鏈接階段。
1、預處理階段:
主要工作是將頭文件插入到所寫的代碼中,生成擴展名為「.i」的文件替換原來的擴展名為「.c」的文件,但是原來的文件仍然保留,只是執行過程中的實際文件發生了改變。(這里所說的替換並不是指原來的文件被刪除)
2、匯編階段:
插入匯編語言程序,將代碼翻譯成匯編語言。編譯器首先要檢查代碼的規范性、是否有語法錯誤等,以確定代碼的實際要做的工作,在檢查無誤後,編譯器把代碼翻譯成匯編語言,同時將擴展名為「.i」的文件翻譯成擴展名為「.s」的文件。
3、編譯階段:
將匯編語言翻譯成機器語言指令,並將指令打包封存成可重定位目標程序的格式,將擴展名為「.s」的文件翻譯成擴展名為「.o」的二進制文件。
4、鏈接階段:
在示例代碼中,改代碼文件調用了標准庫中printf函數。而printf函數的實際存儲位置是一個單獨編譯的目標文件(編譯的結果也是擴展名為「.o」的文件),所以此時主函數調用的時候,需要將該文件(即printf函數所在的編譯文件)與hello world文件整合到一起,此時鏈接器就可以大顯神通了,將兩個文件合並後生成一個可執行目標文件。
Ⅵ 編譯器做什麼工作
1. 詞法分析 詞法分析器根據詞法規則識別出源程序中的各個記號(token),每個記號代表一類單詞(lexeme)。源程序中常見的記號可以歸為幾大類:關鍵字、標識符、字面量和特殊符號。詞法分析器的輸入是源程序,輸出是識別的記號流。詞法分析器的任務是把源文件的字元流轉換成記號流。本質上它查看連續的字元然後把它們識別為「單詞」。 2. 語法分析 語法分析器根據語法規則識別出記號流中的結構(短語、句子),並構造一棵能夠正確反映該結構的語法樹。 3. 語義分析 語義分析器根據語義規則對語法樹中的語法單元進行靜態語義檢查,如果類型檢查和轉換等,其目的在於保證語法正確的結構在語義上也是合法的。 4. 中間代碼生成 中間代碼生成器根據語義分析器的輸出生成中間代碼。中間代碼可以有若干種形式,它們的共同特徵是與具體機器無關。最常用的一種中間代碼是三地址碼,它的一種實現方式是四元式。三地址碼的優點是便於閱讀、便於優化。 5. 中間代碼優化 優化是編譯器的一個重要組成部分,由於編譯器將源程序翻譯成中間代碼的工作是機械的、按固定模式進行的,因此,生成的中間代碼往往在時間和空間上有很大浪費。當需要生成高效目標代碼時,就必須進行優化。 6. 目標代碼生成 目標代碼生成是編譯器的最後一個階段。在生成目標代碼時要考慮以下幾個問題:計算機的系統結構、指令系統、寄存器的分配以及內存的組織等。編譯器生成的目標程序代碼可以有多種形式:匯編語言、可重定位二進制代碼、內存形式。 7 符號表管理 符號表的作用是記錄源程序中符號的必要信息,並加以合理組織,從而在編譯器的各個階段能對它們進行快速、准確的查找和操作。符號表中的某些內容甚至要保留到程序的運行階段。 8 出錯處理用戶編寫的源程序中往往會有一些錯誤,可分為靜態錯誤和動態錯誤兩類。所謂動態錯誤,是指源程序中的邏輯錯誤,它們發生在程序運行的時候,也被稱作動態語義錯誤,如變數取值為零時作為除數,數組元素引用時下標出界等。靜態錯誤又可分為語法錯誤和靜態語義錯誤。語法錯誤是指有關語言結構上的錯誤,如單詞拼寫錯、表達式中缺少操作數、begin和end不匹配等。靜態語義錯誤是指分析源程序時可以發現的語言意義上的錯誤,如加法的兩個操作數中一個是整型變數名,而另一個是數組名等。
Ⅶ 編譯器的代碼分析
編譯器分析(compiler analysis)的對象是前端生成並傳遞過來的中間代碼,現代的優化型編譯器(optimizing compiler)常常用好幾種層次的中間代碼來表示程序,高層的中間代碼(high level IR)接近輸入的源程序的格式,與輸入語言相關(language dependent),包含更多的全局性的信息,和源程序的結構;中層的中間代碼(middle level IR)與輸入語言無關,低層的中間代碼(Low level IR)與機器語言類似。 不同的分析,優化發生在最適合的那一層中間代碼上。
常見的編譯分析有函數調用樹(call tree),控制流程圖(Control flow graph),以及在此基礎上的 變數定義-使用,使用-定義鏈(define-use/use-define or u-d/d-u chain),變數別名分析(alias analysis),指針分析(pointer analysis),數據依賴分析(data dependence analysis)等。
程序分析結果是編譯器優化(compiler optimization)和程序變形(compiler transformation)的前提條件。常見的優化和變形有:函數內嵌(inlining),無用代碼刪除(Dead code elimination),標准化循環結構(loop normalization),循環體展開(loop unrolling),循環體合並,分裂(loop fusion,loop fission),數組填充(array padding),等等。 優化和變形的目的是減少代碼的長度,提高內存(memory),緩存(cache)的使用率,減少讀寫磁碟,訪問網路數據的頻率。更高級的優化甚至可以把序列化的代碼(serial code)變成並行運算,多線程的代碼(parallelized,multi-threadedcode)。
機器代碼的生成是優化變型後的中間代碼轉換成機器指令的過程。現代編譯器主要採用生成匯編代碼(assembly code)的策略,而不直接生成二進制的目標代碼(binary object code)。即使在代碼生成階段,高級編譯器仍然要做很多分析,優化,變形的工作。例如如何分配寄存器(register allocatioin),如何選擇合適的機器指令(instruction selection),如何合並幾句代碼成一句等等。