簡介
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
- 命令行
閱讀更多 儒雅程序員 的文章