04.03 輕量級嵌入式腳本語言 FakeScript-Java

簡介

fakescript是一款輕量級的嵌入式腳本語言,使用Java語言編寫,語法吸取自lua、golang、erlang,基於jflex、bison生成語法樹,編譯成字節碼解釋執行。 C/C++版本fakescript

腳本特性

  • 語法類似lua
  • 全部為函數
  • 支持array,map,可以無限嵌套
  • 支持fake testfunc(param1)產生routine,實現假多線程效果
  • 支持Java靜態函數和Java類成員函數的綁定
  • 自帶解釋器
  • 支持多返回值
  • 自帶profile,可獲取腳本各個函數運行時間
  • 支持熱更新
  • 支持Int64
  • 支持const定義
  • 支持包
  • 支持struct
  • 支持字節碼優化
  • 支持全局map

示例


-- 當前包名

package mypackage.test

-- 引入的文件
include "common.fk"

-- 結構體定義
struct teststruct
\tsample_a
\tsample_b
\tsample_c
end

-- 常量值
const hellostring = "hello"
const helloint = 1234
const hellomap = {1 : "a" 2 : "b" 3 : [1 2 3]}
-- func1 comment
func myfunc1(arg1, arg2)
\t
\t-- Java靜態函數和類成員函數的調用
\targ3 := cfunc1(helloint) + arg2:memfunc1(arg1)
\t
\t-- 分支
\tif arg1 < arg2 then\t
\t\t-- 創建一個協程
\t\tfake myfunc2(arg1, arg2)
\telseif arg1 == arg2 then\t
\t\tprint("elseif")
\telse
\t\tprint("else")
\tend
\t
\t-- for循環
\tfor var i = 0, i < arg2, i++ then
\t\tprint("i = ", i)
\tend
\t
\t-- 數組
\tvar a = array()
\ta[1] = 3
\t
\t-- 集合
\tvar b = map()
\tb[a] = 1
\tb[1] = a
\t

\t-- Int64
\tvar uid = 1241515236123614u
\tlog("uid = ", uid)

\t-- 子函數調用
\tvar ret1, var ret2 = myfunc2()

\t-- 其他包的函數調用
\tret1 = otherpackage.test.myfunc1(arg1, arg2)
\t
\t-- 結構體
\tvar tt = teststruct()
\ttt->sample_a = 1
\ttt->sample_b = teststruct()
\ttt->sample_b->sample_a = 10

\t-- 分支
\tswitch arg1
\t\tcase 1 then
\t\t\tprint("1")
\t\tcase "a" then
\t\t\tprint("a")
\t\tdefault
\t\t\tprint("default")
\tend

\t-- 多返回值
\treturn arg1, arg3
\t
end

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);

使用

Maven

<dependency>
<groupid>com.github.esrrhs/<groupid>
<artifactid>fakescript-java/<artifactid>
<version>1.0.12/<version>
/<dependency>

調試環境

  • IDE
輕量級嵌入式腳本語言 FakeScript-Java

  • 命令行
輕量級嵌入式腳本語言 FakeScript-Java


分享到:


相關文章: