<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          這個(gè)開源項(xiàng)目牛逼:牙醫(yī)教你用450行Go代碼寫出一個(gè)編程語言

          共 1079字,需瀏覽 3分鐘

           ·

          2022-03-10 20:05

          閱讀本文大概需要 2 分鐘。

          大家好,我是 polarisxu。


          沒有系統(tǒng)學(xué)習(xí)過編譯原理的同學(xué)可能會(huì)很好奇編程語言的編譯器,Lexer & Parser,虛擬機(jī)是怎么實(shí)現(xiàn)的,同時(shí)又苦于系統(tǒng)性的教材過于枯燥。如果你之前用的動(dòng)態(tài)語言,可能也不會(huì)想到這個(gè)層面,但用了 Go 后,想深入 Go 源碼,可能會(huì)有相關(guān)想法:如何更好地掌握 Go?Go 編譯器到底是怎么實(shí)現(xiàn)的?


          其實(shí),在Github上有一個(gè)項(xiàng)目,教你用 450 行的 Go代 碼實(shí)現(xiàn)一個(gè)簡(jiǎn)單的編程語言,它的語法是這樣的:


          $a?=?"pen?pineapple?apple?pen."
          print($a)


          看上去很簡(jiǎn)單是不是?但是它包含了一個(gè)手寫的遞歸下降解析器和一個(gè)簡(jiǎn)單的解釋器。


          這門語言的名字為 Pineapple Lang,雖然該語言甚至不是圖靈完備的。但寫這個(gè)語言和教程的主要目的是讓編譯原理初學(xué)者有一個(gè)預(yù)熱,簡(jiǎn)單了解一個(gè)編程語言是怎么構(gòu)建的。


          運(yùn)行起來也是十分簡(jiǎn)單的:


          $cd?examples/pineapple/
          $go?build
          $?./pineapple?hello-world.pineapple
          pen?pineapple?apple?pen.


          你可以直接看用 Markdown 編寫的原始版本:



          通過Pineapple Lang還衍生出許多Pineapple Lang的編程語言版本,諸如Python、Typescript、Dart、Java、Ruby等:



          Typescript版本是將代碼轉(zhuǎn)成JavaScript的AST,然后使用javascript的解釋器canjs執(zhí)行代碼。


          簡(jiǎn)而言之,如果你想了解編譯器是怎么回事,可以通過這個(gè)項(xiàng)目入門哦。最后附上項(xiàng)目地址:https://github.com/karminski/write-a-programming-language-in-450-lines


          解釋說明一下,這個(gè)項(xiàng)目的作者是國人,昵稱叫「牙醫(yī)」,并非真的是牙科醫(yī)生哈,別誤解了~



          推薦閱讀


          福利

          我為大家整理了一份從入門到進(jìn)階的Go學(xué)習(xí)資料禮包,包含學(xué)習(xí)建議:入門看什么,進(jìn)階看什么。關(guān)注公眾號(hào) 「polarisxu」,回復(fù)?ebook?獲??;還可以回復(fù)「進(jìn)群」,和數(shù)萬 Gopher 交流學(xué)習(xí)。

          瀏覽 43
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  天天干天天操天天谢谢 | 五月丁香网色 | 国产福利在线 | 中国一级久久毛 | 日韩国产欧美成人 |