近日,Python之父吉多·范羅蘇姆發表一篇名為《PEG Parser》的文章,范羅蘇姆表示,他正考慮使用PEG Parser 代替現有的類 LL(1) Parser(名為pgen),來重構Python解釋器。
范羅蘇姆表示,現在的 pgen 限制了Python語法的自由度,使得一些語法難以實現,也讓當前的語法樹不夠整潔,一定程度上影響了語法樹的表意,不能最好地體現設計者的意圖。
PEG語法解釋器在解析語法的時候,會一次性加載全部代碼,所以解釋器可以根據任意位置的符號來判斷語法的語義。而目前的 LL(1) Parse 解析語法的時候只會向前檢測一個符號,來猜測語義,導致部分語法有二義性的表現,進而限制了Python語言的語法定義方式。當然,一次性加載全部代碼,也意味著 PEG Parser 需要更大的內存來運行。
針對上述情況,Python解釋器處理不了的問題就只能讓Python團隊不斷在代碼中加入“特例”來處理這些邊緣情況。范羅蘇姆稱,Python剛出來的時候,內存還是很貴的,LL(1) Parse使用非常合適,但是現在內存價格已經大幅降低,所以用PEG Parser重構Python更加合適。
范羅蘇姆表示,用PEG Parser重構Python解釋器不會造成語法上的影響,因為底層重構不會影響Python語法。