Python@TW: 會眾| IRC| Planet| 郵件列表| 聯絡我們

Python 本身欠缺語言擴充性的功能,本身的 Parser 也不能處理 unicode。可以考慮的套件有 EasyExtend, Logix, 還有 PyPy ,但是我這裡打算自己寫一個,簡單的轉換器。關於中文編譯訊息顯示的部份,應該用普通 L10n 來處理。

我們只處理程式碼的轉換。比較理想的是 AST 到 AST 的轉換,但是 python 的 parser 是 c 寫的。還好 python 有提供一個 tokenize 模組。雖然這個也不能處理 unicode,但是我們可以作下面一個簡單的 hack:

# 不用這個hack 也行,把 tokenize.py 直接 copy 過來,然後修改

import re

from token import *

import tokenize

tokenize.pseudoprog=re.compile(tokenize.Whitespace + tokenize.group(tokenize.PseudoExtras, tokenize.Number, tokenize.Funny, tokenize.ContStr, r"\w+"),re.UNICODE)

# end of hack

這樣, unicode 的 token 會被看成是 operator 或 name。我們就能不用擔心 " , ' """ , \ 這些東西,很簡單的翻譯,然後組合成原始碼。這個部份跟 hpython 很像,不過他的程式碼寫了一大堆,而起跟中蟒一樣都寫死在程式裡。 我們其實只要用一個 translation_dict 就能翻譯了。

tokenize (上次是 localhost 在 2009-04-01 04:14:21 編輯的)