# ks **Repository Path**: lbgf/ks ## Basic Information - **Project Name**: ks - **Description**: 基于jvm的可用中文编写的脚本语言(中文:赤子脚本语言、英文:kid script),也可扩展第三方语系 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 22 - **Forks**: 3 - **Created**: 2021-10-15 - **Last Updated**: 2024-11-14 ## Categories & Tags **Categories**: scripting-language **Tags**: 脚本引擎, 字节码, 脚本语言 ## README # ks #### 介绍 基于jvm的可用中文编写的脚本语言(中文:赤子脚本语言、英文:kid script),也可扩展第三方语系(demo中有一个扩展日语的例子) [快速体验](#setup目录说明) #### 版本 v0.7.26 #### 运行环境 jdk1.8 #### 脚本例子 1.简单的例子 ``` 变量1 = 1; 变量2 = 变量1 + 3; 变量3 = "结果是:" + 变量2; // 注释 打印 变量3; ``` 2.自定义类 ``` 类 动物 { 脚数 = 0; 函数 输出脚数() { 返回 this.脚数; } } 猫1 = 创建 动物(); 猫1.脚数 = 4; 打印 "猫一共有" + 猫1.输出脚数() + "条腿!"; ``` 3.与java结合使用 ``` 导入 java.lang.System; 导入 java.util.ArrayList; 变量 列表1 = 创建 ArrayList(); 列表1.add("1"); 打印 列表1.size(); System.out.println(列表1.size()); ``` 4.扩展个性化的语言(下面是一个日语的例子,参考demo中的language目录) ``` クラス クラス1 { 機能 テスト() { 印刷 "クラス1-->ccccc"; } } 変数 オブジェクト1 = 新しい クラス1(); オブジェクト1.テスト(); ``` #### 性能测式 在demo/perf目录下有三个不同情况的测试用例,主要是执行1亿次加法运算,以i7的8代cpu为准,**DV模式**执行时间大概**10**秒,**BC模式**执行时间大概**0.8**秒,**BC定义值类型模式**执行时间大概**0.2**秒;具体跳转 [demo](#demo目录说明) #### 使用说明 脚本引擎的执行方式分解释(DV)和编译(BC)两种,其中BC会生成java字节码,默认使用解释执行; DV的使用: 1. KsRunner第二个参数是扩展语言,具体使用参考例子 ``` String code = "ks脚本代码"; KsRunner kr = new KsRunner(code, null); kr.exec(); ``` BC的使用: 1. KsRunner第二个参数是扩展语言,具体使用参考例子 2. KsRunner第三个参数是脚本名称,生成的字节码会以(Script+脚本名称)的类名进行加载,例如:脚本名称为test1,脚本里面还定义了一个叫“动物”的类,那么它实际上生成了两个类,名称如下图所示 ![a](https://gitee.com/lbgf/ks/raw/master/setup/2.png) 3. KsRunner第四个参数是保存路径,把生成的字节码文件保存指定的目录内(注:为null时不保存,保存了也只用于查看和调试,脚本执行时不需要这些文件) ``` String code = "ks脚本代码"; KsRunner kr = new KsRunner(code, null, "脚本名称", null); kr.exec(); ``` 支持关键字
关键字(英) 关键字(中) 说明 DV模式 BC模式
import 导入 导入java类,不支持* √ √
include 包含 包括其他ks脚本 √ √
var 变量 变量定义 √ √
if...else 如果...否则 条件判断 √ √
while 迭代 while循环 √ √
for 循环 for循环 √ √
break 中断 中断当前循环 √ √
continue 继续 回头循环开头继续执行 √ √
class 类 实现类和对象功能 √ √
return 返回 返回和中断方法或程序 √ √
switch...case 开关...门锁 条件分支判断 √ ×
function 函数 实现函数功能 √ √
extends 扩展 继承并扩展新的类
(注:不能继承java原生类)
√ ×
closure 闭包 闭包 √ ×
try...catch...finally 异常监控...捕获...收尾 异常处理 √ ×
运算符
运算符 说明 DV模式 BC模式
= 赋值 √ √
== 两边相等 √ √
!= 两边不等 √ √
> 大于 √ √
< 小于 √ √
>= 大于等于 √ √
<= 小于等于 √ √
+ 加 √ √
一 减 √ √
* 乘 √ √
/ 除 √ √
% 取模 √ √
! 非 √ √
|| 或 √ √
&& 与 √ √
<=> 归属 √ √
基础数据类型
类型 说明 DV模式 BC模式
int 整型 √ √
long 长整型 √ √
float 小数型 √ √
double 双精小数型 √ √
boolean 布尔型 √ √
外部变量
DV模式 BC模式
√ √
数组
DV模式 BC模式
√ √
三元表达式
DV模式 BC模式
√ √
其它
标记 说明 DV模式 BC模式
// 单行注释 √ √
/* */ 块注释 √ √
" " 单行字符串 √ √
"""
"""
多行字符串 √ √
#### demo目录说明 >|-- src >>|-- demo >>>|-- astview (一个可以查看语法树的工具),如下图 ![c](https://gitee.com/lbgf/ks/raw/master/setup/3.png) >>>|-- bc (以BC模式运行的例子) >>>|-- dv (以DV模式运行的例子) >>>|-- extfunc (扩展内置函数的例子) >>>|-- language (扩展语系的例子,里面是一个日语的demo) >>>|-- perf (性能测试,主要执行1亿次加法运算,里面有三种不同情况的测试,分别是DV模式,BC模式,BC定义值类型模式) #### setup目录说明 为了方便使用打了个压缩包([ks.zip](https://gitee.com/lbgf/ks/tree/master/setup)),解压后可以直接在windows运行,可以作为命令行使用,如下图 ![a](https://gitee.com/lbgf/ks/raw/master/setup/1.png) #### 特别的工具 可以关注一下它相关的另一个项目,主要为ks设计的可视化编辑器([ks_ide](https://gitee.com/lbgf/ks_ide)),如下图 ![a1](https://gitee.com/lbgf/ks_ide/raw/master/setup/3.png) #### 运行异常处理 jdk1.6开始多了一个字节码校验的环节,在使用BC模式生成字节码运行时有可能出现VerifyError错误,ks的引擎已经处理过stack map frame,但如果运行中依然报java.lang.VerifyError,可以加入vm参数-noverify禁用这个功能 #### 参考资料