lang:自制編程語言3——語法樹引入變量、字符串拼接

前言

語法樹仍然很簡單,增加了對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,操作更方便哦

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章