如何自創一門電腦語言

來源:互聯網
上載者:User

標籤:

如何自創一門電腦語言
  1. 需要有基本的編譯原理常識。構造基本的編譯原理常識,一方面來自於對已有語言的使用經驗,瞭解基本術語。比如用C,那麼起碼知道語言要素包括宏、運算式、語句、語句塊、函數、指標等;還知道C語言有編譯、連結和執行三個階段。這些基本概念對宏觀掌握學習進程是很有必要的。另外一方面編譯原理的常識,要來自圖書。比如龍書、SICP。在這一步,得知道大部分語言的處理都要分為詞法、文法、語義和代碼產生四個階段。每個階段,分別是做什麼的。
  2. 瞭解具體的編譯演算法。瞭解到什麼程度,取決於使用第三方工具,還是需要自己從字元開始處理。個人建議,喬姆斯基文法體系、(擴充)巴克斯範式(EBNF),Regex,和LL(1)的遞迴下降分析法是必須要掌握的。對LL(k),LR(k)要有概念。其中,四則運算運算式的分析是很好的練習。
  3. 對文法的感覺。初學者設計語言的難度有兩點。第一,不知道什麼樣的文法/語義是需要的;第二,不知道設計的文法能否實現。如果練習過遞迴下降法,應該已經有了基本的感覺。這個時候可以試圖實現熟悉的語言。一些常用語言的Grammar Rule都是可以查到的。雖然這些文法,特別是C++,可能是上下文相關的所以用書上的辦法難以實現,但是可以實現它的一個子集。通過這樣的練習,能對掌握的分析演算法能完成什麼樣的工作就有了個大致的體驗。
  4. 深入瞭解自己的領域,明確需求。是需要一個類似於自然語言的指令碼,還是只是一個運算式。經過3階段的訓練已經有了獨立撰寫文法的能力。可以寫一個基礎版本的出來。
  5. 實現自己的語言,特別是詞法和文法部分。這一步最好能Log出儘可能多的資訊,例如詞列表並列印出分析樹。
  6. 當有了分析樹後,就可以去做語義分析了。對於初學者而言,語言的規模要儘可能小,這樣語言的解釋和語義分析可以合為一體,不用擔心哪個部分算是代碼產生,哪個部分算是語義分析。所以這一步最好能把解譯器也寫出來。這一步的要求很簡單,知道符號表是做什麼的,學會歸納和推導類型,能正確的處理分支和迴圈語句(如果有的話)。
  7. 設計一門類似於ASM的VM語言,可以是堆棧機模型,也可以是寄存器機模型。撰寫代碼產生從文法樹上產生這個VM語言出來。並寫一個VM的執行器。這一步看起來無從下手,實際上只要肯寫,不出一個礼拜就知道怎麼做了。一開始這個VM語言可以只用做整數的加減乘除就行了,以後可以慢慢加其他比較重要的特性,比如運行棧啦、代碼地址啦,跳轉啦等等。另外,把LLVM作為目標也是不錯的選擇,起碼指令的解釋不用自己費工夫了,LLVM的手冊讀起來也很容易。那個Tutorial寫的特別好。
至此,語言就初步建立完成了。但是因為一開始能力有限,所以設計出來的語言是磕磕巴巴的。這個時候可以選擇:
  • 向某個現有的語言靠攏;
  • 自己去瞭解現有語言的機制並進行權衡。這個時候什麼動態/靜態類型,函數是first class,類和對象才是該考慮的問題。這個時候一定要多讀、多用現有的語言。拜編譯器經驗所賜,會站在一個不同角度上來對待現有的語言;
  • 學習Functional Programming,這對設計更好用的文法、更快的編寫和修改編譯器都有莫大的協助。例如可以使用Combinator在C++中以類似於DSL的方式配置文法;
  • 剩下的就是在Language領域無止盡的挖掘了。上下文相關的文法、文法糖的設計、運行時的輔助機制(例如async,await這些廣義上的控制流程語句),GC,類型推導和靜態分析等等。;
  • 最後也是最重要的,充分理解需求,才能在諸多語言要素間做出取捨。

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

如何自創一門電腦語言

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.