2017 11 17 為Python新增中文關鍵字

2021-09-19 18:43:22 字數 1635 閱讀 3509

swizl/cnpython

1.大部分語法,可以按下面方法加同義的中文token

第1步. 編譯pgen

cd到python的源**目錄下,

./configure

make parser/pgen

第2步. 修改 ./grammar/grammar,新增同義詞並生成語法**。

以while,else為例

原文:

while_stmt: 'while' test ':' suite ['else' ':' suite]
改為:

while_stmt: ('while'|當) test ':' suite [('else'|另) ':' suite]
儲存 ./grammar/grammar為utf-8格式

執行

./parser/pgen ./grammar/grammar ./include/graminit.h ./python/graminit.c
雖然會提示錯誤,但輸出是有效正確的。

其實pgen不支援utf-8,這裡 中文名 不需要用單引號或雙引號,利用pgen的容錯性,減少工作量。

2.還有一較複雜語法在/python/ast.c 裡有輔助解析

例如

comp_op: ... |'in'|'not' 'in'|'is'|'is' 'not'
改為

comp_op: ... |('in'|在)|('not' 'in'|不在)|('is'|為)|('is' 'not'|不為)
在ast.c裡的 ast_for_comp_op 中

if (nch(n) == 1)

switch (type(n))

case name:

/******新增如下*********/

if (strcmp(str(n), "在") == 0)

return in;

if (strcmp(str(n), "不在") == 0)

return notin;

if (strcmp(str(n), "為") == 0)

return is;

if (strcmp(str(n), "不為") == 0)

return isnot;

其實從源**我們可以看出來,comp_op原來的判斷是token有兩個單詞的話,第二個單詞為in返回notin,第乙個單詞為is返回isnot。

另外就是 none,true,false,finally,async,await 需要新增一下。

3.內建函式 中文化

在/python/bltinmodule.c中的builtin_methods中新增

以print為例,將含"print"的一行複製貼上,替換第二行的"print"為"列印"即可

,

,

其他的還有一些巨集,展開看一下,就明白了。

builtin_len_methoddef

,

之後 make 編譯python即可。

中文的py檔案也需要儲存為utf-8格式。

Git學習筆記2017 11 17

1 git簡介 git是一款免費 開源的分布式版本控制系統,用於敏捷高效地處理任何或小或大的專案。2 特點 分布式相比於集中式的最大區別在於開發者可以提交到本地,每個開發者通過轉殖 git clone 在本地機器上拷貝乙個完整的git倉庫。3 git的功能特性 從一般開發者的角度來看,git有以下功...

2017 11 17 shell指令碼 (三)

linux shell中的特殊符號 代表零個或多個任意字元。root node69 test ls txt 1.txt 2.txt 匹配符號,1個任意的字元 注視說明用的,使後面的內容失去原本的意義 脫義字元,將特殊字元還原為普通字元 管道符 將符號前面命令的結果丟給符號後面的命令,命令 cut 用...

python 為抓取而生

隨筆 5 文章 0 緣起 給力,因而需要乙個開啟速度快的目錄小 思路 1.資料表設計 id int 主鍵自增 title varchar 50 速度優先,只需要title,不需要 date varchar 25 採集的date中有如 1小時前 因此也設計成varchar 2.採集函式設計 3.採集流...