猫史档案馆


【編程語言】Awa Script - 預告

用户:Fox_AwaFox_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)


回复

上一页1 页 / 共 1下一页
白篮白篮

很实用的样子

点赞0


评论


Fox_AwaFox_Awa

【作者消息】最近因爲UTF-8不支援的問題從Dev-C++換成了Code::Blocks,有些不適應,正在練習中~

点赞0


评论


Fox_AwaFox_Awa

【作者消息】爲什麽我會使用繁體中文打字?

原因:

(一)看著繁體中文比較舒服。

(二)希望台灣/香港同胞也可以看懂本篇博客。(話説真的會有灣灣人來看嗎。。。)

点赞1


评论


爵士OIer爵士OIer

没有引用,差评(雾

点赞0


评论


会python的狸忍会python的狸忍

啊看不懂繁体字

点赞0


评论


Fox_AwaFox_Awa

【悲報】明天開學,生產力大幅下降,請諒解

点赞0


评论


Fox_AwaFox_Awa

【作者疑問】目前爲了内部開發測試,基於現有的代碼實現了一個簡易解釋器原型(僅支持print,print的定義為:print(string,string...))(實際上並沒有參數規定,只是調用parse方法后取Argument而已)。但是出現了不支援中文的問題。在活動代碼頁為936(GBK?)的情況下,能夠正常地支援中文。但是,在活動代碼頁為65001(UTF-8,美國,英語)時,程序無法正常支援中文,但可以支援英文。爲什麽???

点赞0


评论


Chengxuyee_已退Chengxuyee_已退

能发个简体版么……

点赞0


评论


Fox_AwaFox_Awa

【重大決定】作者最近正在完善Var::Var()方法,Args::Args()方法和Statement::Statement()方法並製作了如下原型:

center_image

原型測試

但是,作者遇到了一個十分艱難的選擇。,這個選擇將影響整個解釋器,選錯了的話會給解釋器帶來難以消除的負面影響。

選項「1」:保留「避免無效語句」,禁止1+1;的存在。

選項「2」:允許這種語句存在。

選哪個?請在回復中投票。(回復1或2)

点赞0


评论


Fox_AwaFox_Awa

此帖已涼,各位多頂

点赞0


评论


Fox_AwaFox_Awa

「避免無用語句」項已廢除。請注意。emotion_编程猫_冷漠

点赞0


评论


Fox_AwaFox_Awa

最新進展:

center_image

点赞0


评论


Fox_AwaFox_Awa

最新進展(作者114514%努力的結果):

center_image

点赞0


评论


白篮白篮

ddddddddddddd

点赞0


评论


JSR_白鸾JSR_白鸾

天,我正想做一个awascript解释器,结果你给我搞出来了。。。

【我在百度搜了搜有没有这种语言】

算了,换个名字吧……

【可以考古吗?】

点赞0


评论