❶ 如何編寫自己的編譯器
我暈,你們老師真NB,你學的什麼語言啊?是c嗎?上來就讓你做個編譯器,你們老師吃錯葯了吧?
我大學同學畢業設計才是做個編譯器,那會那倆人合作做的,還都是我們系公認的c最強的兩個,合作還做了半年,你認為大一剛上來就做這個?!
❷ 用java做一個java的編譯器
Javac編譯器讀取Java源代碼,並將其編譯成位元組代碼,說的直白一點就是把java語言翻譯成計算機可以識別的二進制代碼。
java的編譯器有很多種,有sun公司的jdk,有oracle的jdk,還有其他一些公司的,多採用sun公司的jdk。
java同時需要集成開發環境,它集成了java的編譯器,讓我們不必通過命令行來編譯java類文件,通過它我們可以快速的開發我們需要的程序。目前用的比較多的集成開發環境有eclipse和myeclipse,eclipse有很多具有針對性的版本來應對不同的開發,而myeclipse則是相對來說功能比較全面,當然也需要購買,個人建議myeclipse。
❸ 編譯器具體實現中比較巧妙的思想有哪些
要說編譯器實現的巧妙思想,很多都是用來解決工程性問題的,跟編譯原理中的演算法(解決抽象概念問題 / 學術問題)未必有直接關系。
題主是更想知道某個演算法在具體實現中的特點或者說應用方式呢,還是更想了解工程方面的問題呢?
我覺得前者應該有很多人會給出非常有趣的回答,我就主要回答後者的方面吧。解決工程性問題的巧妙技巧也挺吸引人的,而且有非常大量的素材…根本無法列舉完。
LLVM
說到編譯器實現,不得不落個俗套說說LLVM編譯器套件。不用介紹LLVM是啥了,感覺是「地球人都知道」系列。
1、一套IR,三種表現形式:運行時表現形式(llvm/IR,內存中)、序列化表現形式(bitcode,用於存儲)、文本表現形式(「LLVM匯編」,便於人閱讀和編輯)。三種形式間可以無損變換是LLVM非常非常強大的實現特點之一。
實際使用時能否真的達到無損變換很大程度上取決於要實現的語言有多少東西無法用LLVM IR表達。
例如說如果有語言實現基於LLVM來實現JIT編譯器,並且想把一個運行時的對象指針當作常量嵌入生成的代碼里,它可以把這個常量構造成LLVM IR,但如果把這個常量序列化到bitcode或生成文本形式,等「下一次編譯」再讀出來用的話,那個常量指針可能已經不對了。這跟生成PIC(position-independent code)的問題類似,但LLVM沒辦法幫語言解決這種問題。
也有可能有些語言實現偷懶,有些嵌入LLVM IR的metadata無法無損轉換為文本形式,這也不能怪LLVM IR不好,但確實是使用中要頭疼的問題…
這種一套IR三種表現形式的設計非常實用,一些新的語言實現項目受其影響也採用了類似的設計。
❹ 製作一個簡單的編譯器
還能編譯匯編。。。
我暈。。。
我想這個不是一般人可以做到的,祝你好運!
如果你僅僅針對文本編輯器的話就好辦了。
❺ 編譯器的實現
.begin
.org 2048
main: ld [a],%r1
!if (a==2)
subcc %r1,2,%r0
bne else
sll %r1,2,%r1
ba done
!false c=a/2
else: srl %r1,1,%r1
done:st %r1,[c]
halt
a:2
c:0
.end
❻ 如何自己實現一個編譯器
1、編譯器有很多種,每一種的使用方式不盡相同。常用編譯器:
Visual C++
GNU C++
Inter C++
Sun C++
clang
2、一般編譯過程:源文件→預處理→編譯→匯編→鏈接→可執行文件
下面以GCC示例:
預處理(Pre-Processing):根據預處理命令(#開頭)修改源文件
# gcc -o hello.i -E hello.c or # cpp -o hello.i hello.c
編譯(Compiling):語法檢查,並將源文件翻譯成匯編文件
# gcc -o hello.s -S hello.i or # cc1 -o hello.s hello.i
匯編(Assembling):將匯編文件轉換為目標文件(二進制)
# gcc -o hello.o -c hello.s or # as -o hello.o hello.s
鏈接(Linking):編址和符號鏈接,生成可執行文件
# gcc -o hello hello.o or # ld -o hello hello.o
❼ 如何自己實現一個類C腳本語言編譯器
這個你就要學編譯原理了,當你了解了編譯原理,自然也就能寫一個類C腳本語言編輯器
只要你原理明白了可以用任何技術實現,我上學時,有用JAVA實現的 有用HTML5+JS實現的 有用C#實現的
總得來說你得學編譯原理,把詞法分析 語法分析 3元組轉換這些搞清楚。
❽ java在線編譯器實現
try{
Thread.sleep(1000);
}catch(InterruptedException e){
//撲捉發生在線程中的異常,當一個正在執行的線程被中斷時就會出現這個異常,添加catch後當程序被雙擊停止時不會出現錯誤
e.printStackTrace();
}
lbClock.setText(getDate());
}
❾ 計算機語言的編譯器是怎麼開發的
編譯器用語言都寫編譯器主要功能進行詞、語、語義析間代碼優化間代碼根據間代碼匯編語言匯編語言變機器碼整編譯器算用任意語言實現
❿ 如何實現 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的匯編語法風格.