Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

类行为配置化DEMO

项目简介

本项目实现了一个语法简单、功能完备的脚本语言解析器。通过解析 .properties 配置文件,可以将业务逻辑描述为一系列行为指令,并生成一个可执行的 DALObject 对象。该对象支持动态调用、变量管理、流程控制等操作,适合用于游戏AI、业务流程引擎、测试脚本等场景。

核心特性

  • 轻量级脚本语言:支持变量、运算符、流程控制、方法调用等基本语法。
  • 配置驱动:所有行为逻辑均可通过 .properties 文件定义,无需重新编译代码。
  • 环形缓冲区:用于存储指令执行过程中的临时数据,支持多参数传递。
  • 多类型变量支持:支持字符串、整数、小数、布尔值四种类型的变量存储与操作。
  • 可扩展行为集:内置 LOGADDMOVCONCATCALLLTEQUAL 等行为,支持根据业务需求扩展。
  • 支持嵌套与跳转:支持标签、条件跳转、方法调用,具备图灵完备性。

关键类说明

类名 说明
ObjectParser 解析器接口,定义将输入流解析为 DALObject 的方法。
PropertiesParser 基于 .properties 的老版本解析器,使用单句语法。
PropertiesChunkParser 基于 .properties 的块语法解析器,支持更灵活的代码块编写。
DALObject 核心行为执行类,维护变量表和环形缓冲区,执行解析后的指令序列。

脚本语言介绍

变量存储机制

DALObject 内部维护一个环形数组作为临时存储区,用于存放指令执行过程中的参数。同时,它维护四个映射表,分别存储四种类型的变量:

类型 参数标识
字符串 -s
整数 -i
小数 -d
布尔值 -b

内置行为指令

指令 说明
LOG 打印环形缓冲区最后一个值
ADD 取最后三个值:a + b,结果存入变量 c
MOV 取最后三个值:将值 a 存入变量 b,类型为 c
CONCAT 取最后三个值:将字符串 a 与 b 拼接,存入变量 c
CALL 取最后一个值作为方法名,调用对应行为
LT 取最后三个值 a, b, c,若 a < b,跳转到第 c 行
EQUAL 取最后三个值 a, b, c,若 a == b,跳转到第 c 行

你可以根据业务需要扩展更多行为,例如游戏中的“移动”、“攻击”等。

语法参数说明

参数 含义
-v 字面量
-s 字符串变量
-i 整数变量
-d 小数变量
-b 布尔变量
-a 调用方法
-e 执行表达式(预留)

语法形式

  1. 参数取值语法参数 值,如 -s value,将变量 value 的值取出并存入环形缓冲区。支持嵌套,如 -d -s value
  2. 基本行为:直接写行为名,如 ADD
  3. 标签定义:以 : 开头,如 :loop,将当前行号存储为整数变量。

语法示例

注意:以下示例的换行在.properties中需要在每行结尾额外添加“\”

1. 变量操作与加法

-v 1;
-d doubleValue;
-v res;
ADD;

将 1 与 doubleValue 相加,结果存入变量 res(类型自动推断为小数)。

2. 带标签的循环

:loop;
-v 1;
-i counter;
-v counter;
ADD;
-i counter;
LOG;
-v 5;
-i loop;
LT;

实现一个从 0 到 5 的计数器循环。

3. 方法调用与参数传递

-v greetings
CALL

调用名为 greetings 的行为块。

配置文件示例

项目提供了 test_chunk.properties 作为示例配置文件,展示了以下功能:

  • 数据定义(data.*
  • 行为定义(action.*
  • 变量操作与类型转换
  • 条件跳转与循环
  • 方法调用与嵌套
  • 标签与跳转逻辑

你可以通过运行该示例,观察脚本执行的完整流程。

扩展建议

  • 外部函数支持(-e):可扩展为调用外部 Java 方法或监听器。
  • 对象查找(?):支持跨对象方法调用,实现更复杂的交互。
  • 动态函数定义(*f):支持运行时定义和修改行为逻辑。

运行方式

  1. 编写 .properties 配置文件。
  2. 使用 PropertiesChunkParserPropertiesParser 解析文件。
  3. 获取 DALObject 实例并调用 action("方法名") 执行逻辑。
ObjectParser parser = new PropertiesChunkParser();
parser.parse(new FileInputStream("test_chunk.properties"));
DALObject obj = parser.getObject();
obj.action("tryAdd");

适用场景

  • 游戏 AI 行为树配置
  • 业务流程引擎
  • 自动化测试脚本
  • 动态规则系统

About

类行为配置化DEMO

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages