lang:自制編程語言13——teach

前言

Suatin編程語言項目——一款簡單的直譯型解釋器By Demllie,2020,3,19
今天剛剛完成了for循環,現在while,do-until,for三種循環和if-elif-else分支都實現了
Suatin這個項目我打算做到function就結束的,畢竟沒有學習編譯原理,沒有使用遞歸下降,
做起來很辛苦,有些部分我想如果懂了編譯原理的知識應該會處理得更好,更簡易些,所以,我實際上
是在爲自己的無知付出代價2333

項目代碼地址CSDN
https://download.csdn.net/download/weixin_41374099/12255848
項目代碼地址BDWP
鏈接:https://pan.baidu.com/s/1LXc5SrYyM0ayNOqhcnFjHQ
提取碼:j2qj
複製這段內容後打開百度網盤手機App,操作更方便哦

內容

src是Suatin項目源碼
InterpreterUpdate_while_do_until_for.exe是編譯好的解釋器(因爲之前經常有人編譯我的代碼出錯,但是我自己卻不出錯,只怪IDE太強大了)
main.suatin的Suatin語言的源文件
teach.txt是Suatin語言教程

數據類型

nil 				

因爲語言是動態類型的,所以不用定義,直接寫上去的除關鍵字和TRUE,FALSE,NIL三個預定義變量外的其他變量
都會創建一個默認nil類型的新變量
注:nil類型的數據不能進行計算,必須先初始化,比如sum=0;

number		

目前語言中沒有實現int,只有number,雙浮點數

bool		

判斷語句和邏輯運算語句會返回布爾
單個布爾變量的初始化: flag = TRUE;

string		

字符串的數據就是雙引號內的,當一個單元表達式(沒有判斷運算符>,<,>=,<=,==,~=,邏輯運算符and,not,or)
的第一個數據是字符串或者字符串類型的變量時,這個單元表達式會變成字符串拼接,即這個單元表達式中只能
有字符串、字符串類型的變量、加號(這時的加號表示字符串的拼接)

Run-Time Type Identification

Suatin解釋器的原理是對每條語句構造一顆語法樹,把每條語句的Parser類實例都放入一個容器中,另外又構造一顆語義樹,解釋時解釋語義樹,當解釋
到某個單條語句時,會發射信號給解釋語句的槽函數,然後由槽函數解釋對應的語句,並且還由全局變量得到這個返回結果真假的信息!

Suatin解釋器中,解釋接口不止有一個,而是有三個,解釋時到底該調用哪個,需要在解釋前判斷。在解釋語法樹前,先遍歷,讓幾乎每個節點
得到其解釋時該調用的孩子的解釋接口類型!
(解釋接口不止有一個這是個敗筆,因爲共用體的使用總是出錯!所以底層用結構體替代了共用體,也挺浪費資源的!)

五則計算模式

+-*,、,^ 			

是Suatin中的五種基本運算

1 + (2-3)*3/3^2^(1+2);	

五種之間的混合計算也實現了

字符串拼接模式

"1"+"2";			

介紹string類型時講過了!字符串拼接模式下,單元表達式不能有括號,括號除了分支、循環的後面有之外,就只能
存在於五則計算模式下的單元表達式中

判斷語句

>,<,>=,<=,~=,==			

是Suatin中的6種判斷運算符,前四個左右只能是返回number類型,後兩個左右可以返回數字、字符串、布爾類型的變量

1 > 3 + 2*(4+0);		

單元判斷語句只能有一個判斷符

TRUE ~= 1;			

Suatin語言中,除了未初始化的變量nil類型爲FLASE外,還有FALSE變量爲FALSE,其他的數字、字符串,無論
是0還是""都是TRUE的!!!

邏輯語句

not 1 and sum==2 or 3;

not,and,or是Suatin中的邏輯運算符,一個語句中最多隻能有一個not,必須放在語句開頭
and優先級大於or,所以會先解釋and,後解釋or,那麼,這個式子中,先返回 1 and sum==2的結果給or
然後返回or的結果給not,最後返回not的結果就是語句的返回結果了
顯然無論是判斷語句,還是邏輯語句,都只能返回布爾類型的數據

1 and 2>3 and 4<5+1 or "";	

邏輯語句等級高於判斷語句,判斷語句等級高於單元表達式。單元表達式是判斷語句的單元,
也是邏輯語句的單元。判斷語句是邏輯語句的單元

賦值語句

a = b = c = 1;			

語句的賦值,不管變量之前是什麼類型,不管是否有這個變量,賦值後變量有了,類型也是=最後的表達式返回的數據的類型

分支語句

if-elif-else的結構

sum=0;				
if(sum==0)
	sum=1;
elif(sum==1)
	sum=2;
elif(sum==2)
	sum=3;
	if(sum==3)
		sum=4;
	end
else 
	sum=5;
end

循環語句

while結構,滿足i<10的條件就進入循環

i=0;				
while(i<10)
	i=i+1;
end

do-until結構,滿足i==10條件就退出循環

i=0;				
do
	i=i+1;
until(i==10)	

for結構,和C一樣

sum=0;				
for(i=0;i<10;i=i+1)
	sum=sum+1;
end
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章