適用於Java的嵌入式指令碼語言
阿新 • • 發佈:2018-11-28
此文已由作者趙昕授權網易雲社群釋出。
歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。
fakescript
輕量級嵌入式指令碼語言
https://github.com/esrrhs/fakescript-java
簡介
fakescript是一款輕量級的嵌入式指令碼語言,使用Java語言編寫,語法吸取自lua、golang、erlang,基於jflex、cup生成語法樹,編譯成位元組碼解釋執行。 C/C++版本fakescript
指令碼特性
語法類似lua
全部為函式
支援array,map,可以無限巢狀
支援fake testfunc(param1)產生routine,實現假多執行緒效果
支援Java靜態函式和Java類成員函式的繫結
自帶直譯器
支援多返回值
自帶profile,可獲取指令碼各個函式執行時間
支援熱更新
支援Int64
支援const定義
支援包
支援struct
示例
-- 當前包名 package mypackage.test -- 引入的檔案 include "common.fk" -- 結構體定義 struct teststruct sample_a sample_b sample_c end -- 常量值 const hellostring = "hello" const helloint = 1234 const hellomap = {1 : "a" 2 : "b" 3 : [1 2 3]} -- func1 comment func myfunc1(arg1, arg2) -- Java靜態函式和類成員函式的呼叫 arg3 := cfunc1(helloint) + arg2:memfunc1(arg1) -- 分支 if arg1 < arg2 then -- 建立一個協程 fake myfunc2(arg1, arg2) elseif arg1 == arg2 then print("elseif") else print("else") end -- for迴圈 for var i = 0, i < arg2, i++ then print("i = ", i) end -- 陣列 var a = array() a[1] = 3 -- 集合 var b = map() b[a] = 1 b[1] = a -- Int64 var uid = 1241515236123614u log("uid = ", uid) -- 子函式呼叫 var ret1, var ret2 = myfunc2() -- 其他包的函式呼叫 ret1 = otherpackage.test.myfunc1(arg1, arg2) -- 結構體 var tt = teststruct() tt->sample_a = 1 tt->sample_b = teststruct() tt->sample_b->sample_a = 10 -- 分支 switch arg1 case 1 then print("1") case "a" then print("a") default print("default") end -- 多返回值 return arg1, arg3 end
Java示例
#!java // 建立一個例項 fake f = fk.newfake(null); // 註冊包裡全部標記@fakescript的函式 fk.reg(f, "com.test"); // 解析fake指令碼檔案 fk.parse(f, "test.fk"); // 執行myfunc1函式,傳入兩個引數分別為1和2 double ret = (double)fk.run(f, "myfunc1", 1, 2);
免費領取驗證碼、內容安全、簡訊傳送、直播點播體驗包及雲伺服器等套餐
更多網易技術、產品、運營經驗分享請點選。
相關文章:
【推薦】 網易容器雲平臺的微服務化實踐(一)
【推薦】 四兩撥千斤式的攻擊!如何應對Memcache伺服器漏洞所帶來的DDoS攻擊?
【推薦】 wireshark抓包分析——TCP/IP協議