1. 程式人生 > >適用於Java的嵌入式指令碼語言

適用於Java的嵌入式指令碼語言

此文已由作者趙昕授權網易雲社群釋出。

歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。


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協議