實踐貼:如何編寫一個簡單的Python編譯器

本文最初發表在 Medium 博客,經原作者 Max Gorynski 授權,InfoQ 中文站翻譯並分享。

在本文中,我們將用Python編寫一個Python到C的編譯器。這一點特別容易做到,因爲Python有一個內置的解析器庫,並且許多CPython內部構件對編寫擴展程序來說都是公開的

到本文的最後,通過幾百行Python代碼,我們將能夠編譯並運行以下程序:

$ cat tests/recursive_fib.py
def fib(n):
    if n == 0 or n == 1:
        return n
    return fib(n - 1) + fib(n - 2)

def main():
    print(fib(40))
$ python3 pyc tests/recursive_fib.py
$ ./bin/a.out
102334155

本文實現了一個非常小的Python子集,甚至完全放棄了管理內存的嘗試,因爲我無法理解手動引用計數。也許有一天我能找到一種方法來實現簡單GC的交換,像Boehm那樣。

這個項目的源代碼可以在Github上找到。

依賴

我們需要Python3、GCC、libpython3和clang-format。

原文鏈接:【https://www.infoq.cn/article/eI4yJXOJM2qEwZMmINEL】。未經作者許可,禁止轉載。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章