為 木蘭 程式語言新增對中文命名識別符號的支援

2021-10-02 23:24:53 字數 1179 閱讀 8402

基於 @肖劍 的逆向工程(如很多人已經知道的, 當然是 python **, 很不錯, 嗯).

開始對「木蘭」程式語言進行分析。首先打算摸索它的基本功能。前文戳破針對「木蘭」程式語言的拙劣謠言已經進行了少量**測試.

但, 可惜木蘭尚未支援中文命名識別符號, 打算先改進一下, 以便編寫更易維護的測試**. 測試**打算先在逆向工程中執行(主力機器是 mac),待基本確定範圍後,再在 exe 中確認一遍。

執行 ulang-0.2.2.exe 後, 如果輸入下面**:

年 = year(

)

會報錯lexingerror.

在我 fork 出的逆向工程中執行python -m ulang可以啟動同樣的互動環境 ulang』s repl. 但同樣的**報錯不同, 似乎資訊更多一些:

> 年 = year()

syntaxerror: file "", line 1:1, unknown token is found here

年 = year()

^

回頭可以研究一下報錯機制, 為何 exe 和逆向的不同.

早先回答時猜想是由於"實現的前端在詞法分析這步攔住了"中文命名, 於是檢視逆向**中, 果然看到parser/lexer.py中關於識別符號的正則表達規則中, 只允許英文/數字/下劃線:

lg.add(

'identifier'

,'\\$?[_a-za-z][_a-za-z0-9]*'

)

接下去就熟門熟路, 新增上中文字元的 unicode 範圍:

lg.add(

'identifier'

,'\\$?[_a-za-z\u4e00-\u9fa5][_a-za-z0-9\u4e00-\u9fa5]*'

)

再從逆向工程中執行:

$ python3 -m ulang

welcome to ulang's repl..

type 'help' for more informations.

> 年 = year()

> 年

2020

嗯, 告別過去, 不錯的第一步.

組合語言識別符號及其命名規則

識別符號 identifier 是由程式設計師選擇的名稱,它用於標識變數 常數 子程式和 標籤。識別符號的形成有一些規則 通常,在高階程式語言 中,識別符號使用描述性名稱是乙個好主意。儘管組合語言指令短且隱晦,但沒有理由使得識別符號也要變得難以理解。下面是一些命名良好的名稱 linecount fi...

華為C語言程式設計規範 識別符號命名

3 1 識別符號的命名要清晰 明了,有明確含義,同時使用完整的單詞或大家基本可以理解的縮寫,避免使人產生誤解。說明 較短的單詞可通過去掉 母音 形成縮寫 較長的單詞可取單詞的頭幾個字母形成縮寫 一些單詞有大家公認的縮寫。示例 如下單詞的縮寫能夠被大家基本認可。temp 可縮寫為 tmp flag 可...

C 語言識別符號的命名規則是什麼?

c 語言識別符號的命名規則是 1 識別符號的命名要以字母大小寫或者下劃線 開頭 2 盡量將識別符號命名為有意義的單詞等,增加程式的可讀性 3 盡量在乙個變數的命名中將不同單詞的首字母大寫。c 語言識別符號的命名規則是 識別符號是乙個字串行,用來標識變數 函式 資料型別等。c 語言的識別符號由數字 0...