我對使用RPython工具鏈實現一種語言的例子看起來很高低,但迄今爲止我唯一能找到的是this,其中作者寫了一個簡單的BF解釋器。因爲語法非常簡單,所以他不需要使用解析器/詞法分析器生成器。是否有支持在RPython中開發語言的前端?我可以在RPython中使用哪些前端實現語言?
謝謝!
我對使用RPython工具鏈實現一種語言的例子看起來很高低,但迄今爲止我唯一能找到的是this,其中作者寫了一個簡單的BF解釋器。因爲語法非常簡單,所以他不需要使用解析器/詞法分析器生成器。是否有支持在RPython中開發語言的前端?我可以在RPython中使用哪些前端實現語言?
謝謝!
我不知道任何專門針對RPython的通用詞法分析器或解析器生成器。有些用Python輸出可能工作,但我不會賭它。但是,rlib.parsing
中有一組解析工具。它似乎很有用。 OTOH,文檔中有一個警告:據報道,它仍處於開發,實驗階段,目前只用於Prolog解釋器。
或者,您可以手動編寫前端。 Lexers可能會令人討厭並且不自然,被授予了權限(您可能能夠爲Python實現所使用的DFAs撕掉實用程序模塊)。但是如果你知道正確的算法,解析器是小菜一碟。我是「自上而下運算符優先級解析器」a.k.a.「普拉特解析器」的忠實粉絲,它非常簡單(遞歸下降),但可以輕鬆實現所有表達式解析問題(嵌套,優先級,關聯性等)。有一個關於它們的信息令人沮喪的一點,但幾篇博客已經足夠對我來說:
Alex Gaynor有ported David Beazley的優秀PLY到RPython。它的documentation是相當不錯的,他甚至給出了一個talk關於使用它來實現PyCon US 2013的翻譯。
第一次使用:Rply與源代碼級別的Ply不兼容:需要一些lexergenerator與Ply模板比較import ply.lex as lex ...,並且在用python parser.py啓動時調用一些RPython代。 –
感謝您的輸入。對於這樣一個成功的項目來說,顯然有興趣幫助人們編寫他們的語言,而不是有一個簡單的lexing/parsing過程,這似乎很奇怪。我將跳入rlib模塊 - 因爲我的目標範圍很小,所以我可能不需要更多。多謝! – zslayton
像http://fdik.org/pyPEG/可以工作嗎?我也很有興趣創建一種語言...... – mamcx
@mamcx在沒有檢查代碼的情況下,我可以告訴你,任何Python庫(解析或其他方式)都不會像RPython那樣運行,而無需進行嚴重修改。 – delnan