Z語言實現基本原理

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三軸銑數控加工編程

TAG:語言學 | 編程 | 計算機科學 |