1. 程式人生 > 其它 >【原創】【自制程式語言】0.前言

【原創】【自制程式語言】0.前言

前言

很多問題,看似很難,但是隻要一點一點開始做起來,往裡面新增功能,剛開始似乎是一個微不足道,甚至不能稱之為“程式語言”的東西,但到了最後,你就會發現,你做出來的東西就越來越像一個真正的程式語言了。

(預計30天)

本文做出的東西,是一個模仿組合語言的東西,組合語言是一個很難懂的語言,除了編寫作業系統或者類似的東西,幾乎不會用到,但是,這種語言的編譯器實現也是最簡單的,非常易實現,因為語句也就這麼幾種。

說到組合語言,它是長這樣的一個東西,先看C++程式碼:

for(int i=1;i<=100;i++){
    sum+=i;
}

對應的組合語言程式碼是:

	mov eax,1		;i=1;
L1:
	cmp eax,100
	ja L2 			;if(j>100)goto L2;
	add [sum],eax	;sum+=i;
	jmp L1			;goto L1;
L2:
	...				;;執行後面的程式碼

可想而知,這樣的程式語言是多麼複雜,用來寫大型程式是讓人崩潰的,因此它一般會在一些底層場合使用,因為這是接近硬體的語言。

當然,說道底,我們自制出來的東西,功能方面肯定也不如這個組合語言能多接近硬體或者是解決硬體問題,選擇這個為樣板僅僅是為了寫起來方便,僅此而已。

本文不是講專業的,因此也沒有用專業的一些庫和工具(如yacc/lex),只是隨手寫寫,如果要寫出更加專業的東西還是要藉助專業工具。(就像要寫個遊戲不可能只用windows.h硬寫,必須依賴一些專業的庫。)我這裡寫也是憑著個人的興趣做,專業人員肯定嫌太簡單。

那為什麼要寫這個系列呢?我之前當然嘗試過不少次,但是最終都是放棄了。(相信我,這次我嘗試多寫點,畢竟實現仿彙編真的簡單)提高寫程式碼的能力?閒得無聊?或者實現自己的一個目標?其實...我也不知道。

這個系列持續更新,更新頻率不定,基本不會咕了(已經提前寫了兩三篇,到時候如果後續還沒寫出來,這幾篇提前寫的可以先放出來,程式碼已經寫了一小部分了)