# 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禁用这个功能 #### 参考资料