Z語言實現基本原理
來自專欄中文編程4 人贊了文章
計算機編程發展已經有幾十年了,編程的難度也越來越小,會編程的人也越來越多。但是現在的編程還是非常難,需要專門學習很長時間才能掌握。我的目標是創造出更簡單更容易掌握的語言,所以我開發出了Z語言。
C#語言中實現用控制台列印」你好」的程序是
Console.Write(「你好」);
對一個沒有接觸編程的人來說,他至少需要懂Console是什麼、Write是什麼、『.』號起什麼作用、「你好」為什麼需要括弧括起來。
在Z語言中列印「你好」的程序是這樣寫的
控制台列印「你好」
相比來說,Z語言程序是主要用漢字寫的,和中文自然語法比較接近,需要學習的知識點更少,一般人即使沒有學過,也能一眼看出這句話是什麼意思。
Z語言編譯為了實現正確編譯上條控制台列印「你好」程序,會進行以下步驟。
一、準備實際功能類
(控制台的源文件在』Z語言系統/控制台』)
1.新建類
新建一個叫『控制台』的C#類,給這個類名添加特性[ZStatic]。(Zstatic在『Z語言介面編寫文檔』解釋)
2.實現』 public static void Write(object obj)』方法
3.給『列印(object obj)』添加『[ZCode("列印(object:obj)")]』特性
二、讀取Token流
編譯器讀取源文件,把控制台列印「你好」 分析成標識「控制台列印」和字元串「你好」兩個Token
控制台列印「你好」 → 控制台列印 + 「你好」
三、語法分析
編譯器分析導入的開發包,構建詞庫,根據『[ZStatic]』標註的控制台類型和『[ZCode("列印(object:obj)")]』構建兩個詞『控制台』和『列印』
四、表達式分析
編譯器根據詞庫把『控制台列印』分詞為『控制台』和『列印』兩個Token
控制台列印 + 「你好」 → 控制台 + 列印+ 「你好」
五、語義分析
從控制台Token查找到控制台類型,根據列印Token查找特性為『[ZCode("列印(object:obj)")]』的方法Write,把把「你好」 Token作為方法調用的參數
六、生成二進位指令
編譯器生成CLR調用方法指令
ldstr bytearray
(60 4F 7D 59 )call void [Z語言系統]Z語言系統.控制台::Write(object)
Z語言也可以實現對參數不在末尾的方法的調用。比如下面例子。
在C#中,控制台換行實現如下
Console.WriteLine();
如果要求根據一個整數參數k連續換行k行,代碼可以編寫為一個方法(在』Z語言系統/控制台』)
public static void 換行(int k)
{
for (int i = 0; i < k; i++)
{
Console.WriteLine();
}
}
用C#語言調用這一方法的程序是
控制台.換行(5);
而給這個方法加特性[ZCode("換(int:k)行")] 後就可以在Z語言中這樣調用
控制台換5行
5是參數,『換』和『行』是調用過程名稱的組成部分。這是Z語言先進於主流編程語言的一個地方,主流編程語言中參數必須放在語句的末尾,Z語言的參數可以放在一條語句的任意位置,實現了編程的類自然語言化。
編譯器對控制台換5行 這條程序的處理大概步驟如下。
一、讀取Token流
控制台換5行 → 控制台換5行
二、語法分析
編譯器分析導入的開發包,構建詞庫,根據『[ZStatic]』標註的控制台類型和『[ZCode("列印(object:obj)")]』構建兩個詞『控制台』、『換』、『行』
三、表達式分析
對程序進行分詞
控制台換5行 → 控制台 + 換 + 5 +行
四、語義分析
從控制台Token查找到控制台類型,根據換 + 5 + 行查找特性為『ZCode("換(int:k)行")』的方法,把把5作為方法調用的參數
五、生成二進位指令
編譯器生成CLR指令
ldc.i4.5
call void [Z語言系統]Z語言系統.控制台::換行(int32)
推薦閱讀:
※如何設置UG快捷鍵呢?你都有那些方法呢?一起來學習吧
※Oh My Docker系列之玩轉博客框架Hexo
※數控車如何用UG自動編程
※零基礎編程入門(03)——操作系統與語言
※NX8.0三軸銑數控加工編程