一个超轻量的脚本语言实现,以及使用java实现的解释器,可以嵌入java程序中使用。
- 除了java8标准库外,不依赖任何第三方库
- 除了多行字符串特性使用java25,其余仅用到java8特性
- src:项目源代码目录,包含所有java文件
- out:项目输出目录,包含编译后的类文件、字节码文件、可执行文件等
- README.md:项目说明文件,包含项目介绍、依赖、项目结构、启动项目、语法定义、语法示例等信息
- bnf.txt:项目实现的目标语言的语法规则定义文件
- Test.java功能一览
- Terminal.java一个简易控制台,输入>切换到单行查模式(回车立即执行),输入>>切换到多行模式(输出<<回车即执行多行脚本)。
参见「bnf.txt」
println("=== 测试字符串 ===");
var str = "Hello World";
println(str);
println("=== 测试算术运算 ===");
println("9-2*3+1=", 9-2*3+1);
println("=== 测试数字变量 ===");
var a = 1;
var b = 2;
println("a=",a,",b=",b,",a+b=",a + b);
println("=== 测试字符串变量 ===");
var x = "xx";
var y = "yy";
println("str(xx)+str(yy)=", x+y);
println("=== 测试条件语句 ===");
println("a=", a, ",b=", b, ",a>b ?= ", a>b);
println("a=", a, ",b=", b, ",a>=b ?= ", a>=b);
println("a=", a, ",b=", b, ",a<b ?= ", a<b);
println("a=", a, ",b=", b, ",a<=b ?= ", a<=b);
println("a=", a, ",b=", b, ",a==b ?= ", a==b);
println("=== 测试循环语句 ===");
var c = 10;
println("loop count=", c, ":");
for c > 0 {
print("it=", c, ",");
c = c - 1;
}
println();
println("=== 测试函数 ===");
fun bye() {
println("无参函数:bye bye~");
}
fun sayHello(msg) {
println("有参函数:Hello World, " + msg);
}
fun fn2fn() {
println("函数内调用函数");
bye();
}
sayHello("haha");
sayHello(x);
sayHello(y);
fn2fn();
println("=== 测试有参有返回函数 ===");
fun add(a, b) {
return a + b;
}
var aa = 10;
var bb = 90;
println(aa + "+" + bb + "=" + add(aa,bb));
println("=== 测试有参有返回函数,递归,斐波那契数列 ===");
fun fibo(number) {
if number == 0 || number == 1 {
return number;
} else {
return fibo(number - 1) + fibo(number - 2);
}
}
var d = 0;
for d <= 10 {
print(fibo(d) + " ");
d = d + 1;
}
println();
println("=== 测试四则运算函数 ===");
fun calc(a, b, opt) {
print(a, opt, b, "=");
if opt == "+" {
return a + b;
}
if opt == "-" {
return a - b;
}
if opt == "*" {
return a * b;
}
if opt == "/" {
return a / b;
}
if opt == "%" {
return a % b;
}
return null;
}
println(calc(8, 2, "+"));
println(calc(8, 2, "-"));
println(calc(8, 2, "*"));
println(calc(8, 2, "/"));
println(calc(8, 5, "%"));
println("=== 测试定义九九乘法表 ===");
fun ninenine()
{
var a = 1;
for(a <= 9) {
var b = 1;
for(b <= a) {
print(b, "*", a, "=", a*b, "\t");
b = b + 1;
}
a = a + 1;
println();
}
}
println("=== 测试输出九九乘法表 ===");
ninenine();
println("=== 测试类定义与实例化 ===");
class Point {
var x = 0;
var y = 0;
}
var p = Point(x = 10, y = 20);
println("Point created: x=", p.x, ", y=", p.y);
println("=== 测试字段访问 ===");
println("p.x = ", p.x);
println("p.y = ", p.y);
println("=== 测试字段赋值 ===");
p.x = 100;
p.y = 200;
println("After assignment: p.x = ", p.x, ", p.y = ", p.y);
println("=== 测试this关键字和方法 ===");
class Counter {
var count = 0;
fun increment() {
this.count = this.count + 1;
}
fun getCount() {
return this.count;
}
}
var counter = Counter();
println("Initial count: ", counter.count);
counter.increment();
println("After increment: ", counter.count);
counter.increment();
println("After second increment: ", counter.count);
println("=== 测试方法返回值 ===");
var result = counter.getCount();
println("getCount() returned: ", result);
println("=== 测试带参数的方法 ===");
class Calculator {
var value = 0;
fun add(num) {
this.value = this.value + num;
}
fun multiply(num) {
this.value = this.value * num;
}
}
var calc = Calculator(value = 10);
println("Initial value: ", calc.value);
calc.add(5);
println("After add(5): ", calc.value);
calc.multiply(2);
println("After multiply(2): ", calc.value);
println("=== 所有测试完成 ===");