如何汉化并编译 Python 源代码
如何漢化并編譯 Python 源代碼
- 前言
- 參考文章
- 我的工具
- 關鍵字漢化
- 其他源代碼漢化
- Linux 下編譯
- Windows 下編譯
- 漢化效果演示
前言
筆者是一名業余編程愛好者,年初偶然混進中文編程OO群。因覺得中文編程乃大勢所趨,遂入了 Python 漢化(我稱之為“草蟒”項目)的坑。筆者孤陋寡聞,剛開始漢化的時候只知道 GCC 且 GCC 不支持中文,所以沒有選擇漢化源代碼的方式,而是采用替換式表層漢化方法(中文編寫的程序,包括中文關鍵字和變量名等,先替換成英文,再交給解釋器執行)。但近期從群里得知,Clang、VC 等編譯器支持中文,這讓我覺得從源代碼入手進行漢化是完全可行的。
筆者在 Linux 和 Windows 系統下進行了實驗漢化。Python 漢化大致可以分為兩部分:關鍵字漢化和其他源代碼漢化。
參考文章
[1]:為Python添加中文關鍵字
[2]:Python internals: adding a new statement to Python
[3]:Visual Studio error C2001:常量中有換行符(解決辦法)
[4]:Changing CPython’s Grammar
[5]:Error C2001: Newline in constant when compiling
我的工具
關鍵字漢化
用 sublime 打開源代碼 Gramma 目錄中的 Grammar 文件并添加中文關鍵字,保存為 unicode 編碼(下同)。示例如下:
if_stmt: ('if'|'如果') namedexpr_test ':' suite (('elif'|'不然') namedexpr_test ':' suite)* [('else'|'否則') ':' suite] while_stmt: ('while'|'只要') namedexpr_test ':' suite [('else'|'另外') ':' suite] for_stmt: ('for'|'取') exprlist ('in'|'于') testlist ':' [TYPE_COMMENT] suite [('else'|'另外') ':' suite] ...... with_stmt: ('with'|'管') with_item (',' with_item)* ':' [TYPE_COMMENT] suite ...... lambdef: ('lambda'|'雷鋒') [varargslist] ':' test ......注意:或許是 python 版本和所用編譯器的不同,漢化關鍵字需要加單引號,這與參考文章[1]所述有所不同。
另外還要修改 Python/ast.c 文件。
其他源代碼漢化
漢化版必須支持英文版,所以不僅僅是漢化一些字符串,而是需要大量復制原來的代碼并加以漢化。筆者漢化了兩個函數以供演示效果,參見后面的圖片。這是一個復雜的系統工程,歡迎感興趣的讀者聯系我并加入漢化大業。
Linux 下編譯
參見源代碼目錄下的 README.rst,cd 到源代碼目錄,然后執行以下命令:
./configuremake regen-grammar(重新生成 graminit.h 和 graminit.c)makemake test(比較耗時,僅做實驗的話這一步可省去)sudo make install(這一步也可省略)編譯成功,運行 python 3.8.0,輸入中文關鍵字和函數,正常執行。
Windows 下編譯
Linux 平臺下的輕松成功給了筆者很大的信心,隨即轉戰 Windows 平臺。之前只漢化了 while 等幾個關鍵字,這次漢化了更多關鍵字,并打算用 Parser/pgen 這個 py 程序重新生成 graminit。結果讓我大吃一驚,無論中文關鍵字加不加引號,或者用其他方式,都會報錯。
轉念一想,無論哪個平臺,用的 graminit 文件都是一樣的。何不在 linux 下生成漢化的 graminit 文件,然后在 windows 下使用呢?果然,這個辦法是有效的。WSL 真心不錯,否則要在兩個平臺之前切換還真麻煩。
開始編譯。按照 PCBuild 下的 readme,在 Power Shell 中運行 build.bat。(第一次運行的話,會下載一些 externals,需要很長時間。)沒執行一會,就顯示一大堆紅色警告:“error C2001: 常量中有換行符”。
問度娘,原來是 VS 的問題,奇數漢字不能正確解碼,偶數漢字可以。網上給出的解決辦法顯然都不行。那么把 VS 的編譯器換成 Clang 怎么樣?結果還是顯示同樣的錯誤,而且還冒出其他錯誤。
難道我磕磕碰碰找到的新漢化方法又走不通?
不甘心,看看外網上的人怎么說。翻墻搜索半天,終于找到解決辦法:在 Visual Studio 里,給修改過的有漢字的文件的編譯命令加上一條:/utf-8。
重新編譯,生成解決方案,成功!
漢化效果演示
今天就分享到這里,有興趣的同學請聯系草蟒老吳。
歡迎轉載!
總結
以上是生活随笔為你收集整理的如何汉化并编译 Python 源代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言的指针初始化特别注意一点
- 下一篇: 数据库DBA(3年以内需求)