7 Star 19 Fork 2

鲁班工坊 / ks

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

ks

介绍

基于jvm的可用中文编写的脚本语言(中文:赤子脚本语言、英文:kid script),也可扩展第三方语系(demo中有一个扩展日语的例子) 快速体验

版本

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

使用说明

脚本引擎的执行方式分解释(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

  1. 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

|-- bc (以BC模式运行的例子)

|-- dv (以DV模式运行的例子)

|-- extfunc (扩展内置函数的例子)

|-- language (扩展语系的例子,里面是一个日语的demo)

|-- perf (性能测试,主要执行1亿次加法运算,里面有三种不同情况的测试,分别是DV模式,BC模式,BC定义值类型模式)

setup目录说明

为了方便使用打了个压缩包(ks.zip),解压后可以直接在windows运行,可以作为命令行使用,如下图

a

特别的工具

可以关注一下它相关的另一个项目,主要为ks设计的可视化编辑器(ks_ide),如下图

a1

运行异常处理

jdk1.6开始多了一个字节码校验的环节,在使用BC模式生成字节码运行时有可能出现VerifyError错误,ks的引擎已经处理过stack map frame,但如果运行中依然报java.lang.VerifyError,可以加入vm参数-noverify禁用这个功能

参考资料

http://www.groovy-lang.org
https://github.com/chibash
https://asm.ow2.io
https://docs.oracle.com/javase/specs/jvms/se8/html/index.html

MIT License Copyright (c) 2022 鲁班工坊 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

基于jvm的可用中文编写的脚本语言(中文:赤子脚本语言、英文:kid script),也可扩展第三方语系 展开 收起
Java
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/lbgf/ks.git
git@gitee.com:lbgf/ks.git
lbgf
ks
ks
master

搜索帮助

14c37bed 8189591 565d56ea 8189591