RPLY 入門例程中文化

為對「木蘭」編程語言的編譯器的 1400 多行用 rply 實現的語法規則相關代碼進行分析,學習了 rply 的入門文檔。詳見: 《【懸賞】對原始可執行文件的功能進行測試》

用於解析簡單加減法,只需下面的代碼:


RPLY 入門例程中文化


lg本為 lexer generator 的縮寫,generator 感覺像是機床中母機的概念。

在 python 3.7.4 下測試:

<code>$ python 成功.py 
Token('數', '1')
Token('加', '+')
Token('數', '1')
Token('減', '-')
Token('數', '1')
/<code>

挺好,支持中文詞名,如”數/加/減”,很齊整。

下面,入門語法分析器生成。

目標是分析簡單的四則運算:


RPLY 入門例程中文化


如前,先寫分詞器,發覺文檔中此行lg.ignore(‘\\s+’)的正則表達式少了個 r。

並編寫語法樹,為對應節點編寫求值方法。

最後是語法分析器生成。限於 python 水平,直接將分詞器、語法樹寫在了一起以便測試。

感覺 rply 對中文標識符的支持很不錯,基本上業務相關部分都可以中文化。還有運算符優先級部分尚未摸透,不過可以待看「木蘭」的優先級部分代碼時研究:


RPLY 入門例程中文化


27 行的規則部分大約花了一小時參透,以此速度對「木蘭」的 ply 代碼進行分析,最少需要50小時,嗯,可以接受。當然需要更多時間編寫測試代碼。


分享到:


相關文章: