<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è)編程語(yǔ)言

          共 1150字,需瀏覽 3分鐘

           ·

          2022-03-01 15:30

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

          大家好,我是 polarisxu。


          沒(méi)有系統(tǒng)學(xué)習(xí)過(guò)編譯原理的同學(xué)可能會(huì)很好奇編程語(yǔ)言的編譯器,Lexer & Parser,虛擬機(jī)是怎么實(shí)現(xiàn)的,同時(shí)又苦于系統(tǒng)性的教材過(guò)于枯燥。如果你之前用的動(dòng)態(tài)語(yǔ)言,可能也不會(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)單的編程語(yǔ)言,它的語(yǔ)法是這樣的:


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


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


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


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


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


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



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



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


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


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




          往期推薦


          我是 polarisxu,北大碩士畢業(yè),曾在 360 等知名互聯(lián)網(wǎng)公司工作,10多年技術(shù)研發(fā)與架構(gòu)經(jīng)驗(yàn)!2012 年接觸 Go 語(yǔ)言并創(chuàng)建了 Go 語(yǔ)言中文網(wǎng)!著有《Go語(yǔ)言編程之旅》、開源圖書《Go語(yǔ)言標(biāo)準(zhǔn)庫(kù)》等。


          堅(jiān)持輸出技術(shù)(包括 Go、Rust 等技術(shù))、職場(chǎng)心得和創(chuàng)業(yè)感悟!歡迎關(guān)注「polarisxu」一起成長(zhǎng)!也歡迎加我微信好友交流:gopherstudio

          瀏覽 68
          點(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>
                  苍井空在厨房被C的A片 | 加勒比无码久久综合 | 极品人妻在线 | 国内毛片毛片毛片 | 性爱一区二区三区 |