如果打算親手製作一個簡單的python解譯器需要掌握哪些知識?

來源:互聯網
上載者:User
我是一個電腦專業的學生,在學編譯原理這門課程的過程中產生了自己製作一個python解譯器的想法,不過我們的課程中只講了前後文無關文法、詞法分析、文法分析和四元式表示這幾塊內容,而且只講了一些手動轉換的方法,對一些實際的應用講的不深。我瞭解到python語言是上下文相關的,在學校的課程中對這方面的文法也沒有過詳細的說明。我想在這裡問一下如果我準備手動寫一個python解譯器需要掌握哪些技能點?

回複內容:

對於實現一個解譯器,parser部分其實是相對比較無聊的工作,如果跳過這部分來實現的話,可能會更容易上手一些。
vinzenz/libpypa · GitHub 可以嘗試一下這個項目,獨立的Python parser,C++寫的,目前Dropbox的Python實現Pyston,就是使用這個庫做為Python的parser。
另外也可以直接嘗試直接調用CPython的ast模組,將parse好的AST匯出到檔案中去,再拿自己實現的解譯器直接讀取。Pyston在引入libpypa之前就是這麼做的。
還有另外一個思路,直接實現一個Python bytecode的解譯器,parse .pyc檔案就可以了。

之後需要瞭解的就是Python物件模型(比如說一個Python對象在記憶體是如何表示的)。如果是拿C語言來實現的話大概就是“一切都是堆上分配的結構體”就可以了。
剩下的一塊是GC,需要瞭解一下常見的集中GC實現方案。最簡單的應該是引用計數。如果是C/C++實現的話,還直接用Boehm GC,自己這塊就不用管了。

相關的Python實現:
Jython和IronPython不用說了,JVM和.net兩個平台上的Python實現,如果對這兩個平台熟悉的話可以直接拿來參考。
Dropbox的Pyston,C++實現,使用LLVM作為codegen,因為C++相對較難,並且還有JIT的部分,並不適合上手。
micronPython, https://micropython.org/ ,專門針對嵌入式晶片實現的Python,ansi C的,可以研究一下。
tinypy tinypy :: home , 64k代碼實現的比較完整的Python,可以參考。

另外推薦Python源碼剖析這本書,內容非常全面 Python源碼剖析 (豆瓣)

Vczh Free Script

Vczh Free Script 2.0 beta 發布


來看這個,大二寫的,除了文法不一樣以外沒有任何區別。

Parser 推薦用 PEG,可以方便地處理縮排。不考慮文法分析這一步,想著重瞭解python物件模型的話,可以去看看《python源碼剖析》。
  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.