用户:
Fox_Awa查看:8 回复:15 评论:8 创建时间:2020-08-30T00:02:32
Awa Script,一門簡單並可自定義的編程語言。
此編程語言可快速被解釋器解釋,并且和Javascript有一些相似之處,可以快速上手。
例:
function add(a,b){
return a+b;
}
在Awa Script中不需移植即可使用。
【快速編譯解釋器】附帶的dlfcn.h可以讓解釋器程序在Windows下也順利完成編譯。
【!】注意:如果您的平臺不是Windows或Linux之間的任何一種,請提供dlfcn.h的實現方式並將其copy到庫中。
【簡單性】相比Javascript,Awa Script移除了一些難以理解或您的軟體不需要的特性,如this關鍵字(變更爲在類中調用函數會先搜尋類内部再搜尋全局)。同時,Awa Script不接觸2進制,因此沒有與,或,異或等二進制運算。要模擬二進制運算,請使用Array。以下是一個1 Byte(8位)二進制(值為120)的表示方式:
[true,true,true,true,false,false,false] => 1111000 => 120
【new關鍵字】new關鍵字只能用於=操作符(當然可以重寫eval方法,自己進行重載),否則會發生錯誤。new關鍵字的作用和Javascript類似,不過由於this對象移除,所以直接在函數體内var即可。系統會自動取導出變量表,轉換成Object並賦值到變量。
【沒有引用】在C++,Javascript中,都存在著引用一説。然而,Awa Script中是沒有引用的,因爲變量參數在parse階段就被替換了(如果是expression,會調用内部方法解析expression),當然,您也可以修改parse方法,使其不自動替換變量,從而達到引用的效果。您也可以在eval方法,執行函數后導出變量表並覆蓋來達到引用的效果,不過這有些難。
【避免無效語句】在編程當中,常會出現類似於1+1;這樣的無意義語句,在Awa Script中,若您不變更parse.h,這是不被允許的。這有助於提升程序效率。
【可自定義的】您幾乎可以自定義Awa Script的任何代碼!只要您有相應的技術,您甚至可以完全改寫文法(或者以解釋器為基礎製作Javascript(ECMAScript)解釋器)。以下列出了從簡單到困難的自定義,從上(愈簡單)往下(愈困難)排列。
1.關鍵字改名 這幾乎不費吹灰之力,只要您會一點C++,就可以很好地做到這一點。
2.擴展庫 您可使用C++進行庫編寫,然後import "libxxx.so";即可使用。不過這可能不美觀,您可在.awh文件中寫import,然後import "libxxx.awh";來包含文件。和import "libxxx.so"具有同等效力。不過,在C++編譯器中,函數名可能被改寫(改寫後的函數名比較奇怪),可以在函數聲明前加入extern "C",示例:
extern "C" int add(int a,int b){
return a+b;
}
(這只是示範而已,實際上參數并不是這樣的!)
則在.aws文件中可直接使用"add"函數。否則,您需要使用
Linux:喵 libxxx.so | grep "函數名"
Windows(在安裝了gcc并且設定了環境變量的情況下):喵 libxxx.so | find "函數名"
來獲得編譯後的函數名。
上述提到的,有些已完成,有些還未開始,有些正在開發中。
一切請看未來的Github Awa Script項目。
(Language:zh-tw)
Fox_Awa【作者疑問】目前爲了内部開發測試,基於現有的代碼實現了一個簡易解釋器原型(僅支持print,print的定義為:print(string,string...))(實際上並沒有參數規定,只是調用parse方法后取Argument而已)。但是出現了不支援中文的問題。在活動代碼頁為936(GBK?)的情況下,能夠正常地支援中文。但是,在活動代碼頁為65001(UTF-8,美國,英語)時,程序無法正常支援中文,但可以支援英文。爲什麽???
点赞0
评论
Fox_Awa【重大決定】作者最近正在完善Var::Var()方法,Args::Args()方法和Statement::Statement()方法並製作了如下原型:

原型測試
但是,作者遇到了一個十分艱難的選擇。,這個選擇將影響整個解釋器,選錯了的話會給解釋器帶來難以消除的負面影響。
選項「1」:保留「避免無效語句」,禁止1+1;的存在。
選項「2」:允許這種語句存在。
選哪個?請在回復中投票。(回復1或2)
点赞0
评论