要自己設計一個編程語言,下面幾點必須要考慮。
確定目標受眾
首先要明確你所設計語言的目標受眾是什么。比如是如C/C++、Java、Python等這種通用的語言,還是如AWK、Make、CMake等領域特定語言(DSL)。
如果是通用語言,那么是C/C++這種系統型語言,還是Java、python等這種應用型的語言。
確定要支持的語言特性
根據目標受眾,確定你的編程所要支持的語言特性。比如是否支持面向對象編程,是否支持函數式編程,是否支持并行處理、是否支持泛型編程等。
此外,還要確定是強類型語言還是弱類型語言?是靜態類型語言還是動態類型語言等。
制定語言的文法規范和語義規范
根據語言要支持的特性,制定語言的文法規范。比如變量如何聲明、函數如何定義、支持哪些控制語句,各種表達式的運算規則等。
確定語言的實現方式
同一種語言可以有不同的實現方式。比如是如絕大多數C/C++的實現一樣,直接編譯成二進制機器碼?還是像Java這樣,編譯編譯成字節碼,然后用虛擬機來運行?還是直接解釋執行等等。
可利用的工具
對于編譯器前端來說,可以選擇手工編寫,也可以選擇使用工具。
手工編寫的話,比較簡單實用的方法是遞歸下降和算符優先等算法。
選擇工具的話,也有很多工具可用,比如Lex+YACC、Flex+Bison等
如果主要的目的是學習的話,建議還是手寫比較好。
對于后端來說,代碼優化是非常重要的一部分。毫不夸張的說,代碼優化是一個現代編譯器能否成功的決定性因素,也是整個編譯器設計中難度最大,最為復雜的部分,也是最容易出BUG的部分。
一般,還是建議選擇使用一些成熟的工具。比如LLVM,應該作為首選。大名鼎鼎的Clang的后端就是LLVM。LLVM現在已經相當成熟,近幾年很多新的編譯器都是采用LLVM作為后端。
覺得有用的話,點個贊唄!
對編譯器、OS內核、性能調優、虛擬化等技術感興趣的童鞋,!