前言
語法樹仍然很簡單,增加了對Id、Str的處理!
在解釋器類中,VarExpr下有三個子類,分別是IDExpr,StrExpr,NumStr,其中後兩個都是常數,第一個是變量,變量也可以是數字也可以是字符串……
string interpret_str()接口
給項目增加了一個接口,之前只進行了double類型的數字的加、減、乘、除、乘方,這次增加了一個接口,提供對字符串的拼接處理!
"Say "+"Hello "+" Suatin";//correct
1 + 2 + "3e" + 4;//incorrect
1 + 2 + 3e1+ 4;//correct
我這樣設計:如果表達式中有字符串,就不能進行五則運算,當字符串在表達式開頭,表示這個表達式要實現字符串拼接!如果開頭不是字符串,那麼就進行五則運算!
字符串拼接模式下,如果出現了數字,就拋出異常!
五則運算模式下,如果出現了字符串,就拋出異常!
Id變量對象如果是字符串類型的,就當做字符串處理,如果是數字類型的,就當做數字處理
如何讓返回的結果是整型
我現在很猶豫,已經提供了兩個接口來解釋數字和字符串了,但是沒有提供接口解釋整型數字,之前的都是double型浮點數!如果區分不了整型和浮點,我就放棄設計int類型了,數字都做double算了。。。
畢竟暫時沒有能力做靜態類型的,所以語言先想做成動態的,如果返回結果不能是整型的話,那麼要麼是number(double),要麼是string了!(現在不管其他類型)
關於字符串與數字間的轉換
這個我不放在符號中處理了,等之後實行了函數功能後提供默認的轉換函數就是!比如我放棄用符號進行位運算,而是打算提供位運算的函數!
項目演示
//test.suatin
"SOMEONESAY:"+"TECH"+"OTAKU"+"save"+"the"+"world";
詞法分析 time consumed 77 ms
中綴表達式>
name pos type
"SOMEONESAY:" 0 11
+ 1 15
"TECH" 2 11
+ 3 15
"OTAKU" 4 11
+ 5 15
"save" 6 11
+ 7 15
"the" 8 11
+ 9 15
"world" 10 11
; 11 32
全局中綴表達式 time consumed 252 ms
初始化語言環境 time consumed 0 ms
語法分析·構造語法樹 time consumed 2 ms
------------------------------------------------------------
+
├── +
│ ├── +
│ │ ├── +
│ │ │ ├── +
│ │ │ │ ├── "SOMEONESAY:"
│ │ │ │ └── "TECH"
│ │ │ └── "OTAKU"
│ │ └── "save"
│ └── "the"
└── "world"
------------------------------------------------------------
語法分析·顯示語法樹 time consumed 52 ms
語法樹是否完全==>true
result = SOMEONESAY:TECHOTAKUsavetheworld
語法分析·解釋語法樹 time consumed 1 ms
請按任意鍵繼續. . .
項目代碼地址CSDN
https://download.csdn.net/download/weixin_41374099/12188627
項目代碼地址BDWP
鏈接:https://pan.baidu.com/s/1lNmNo5LJwI7VwmOFwz3ozw
提取碼:ehnq
複製這段內容後打開百度網盤手機App,操作更方便哦