java 脚本如何编写的_如何编写Java程序的脚本输入

博主正在设计一个Java程序,需要用户编写脚本来定义一系列执行的动作。最初考虑使用XML,但发现它不适合这种线性的、过程性的脚本需求。博主对Groovy DSL感兴趣,因为它可能更适合这种场景,但同时也担心用户可能会编写不安全的Groovy代码。ANTLR被提出来作为可能的解决方案,因为它可以创建自定义的解析器。博主希望通过DSL限制用户只能编写特定的“微语言”,而不是任意Groovy代码。

我正在编写一个

Java程序,要求其(技术)用户编写用作输入的脚本;它将这些脚本解释为一系列动作并执行它们.我目前正在寻找最简洁的方法来实现脚本/配置语言.我原本打算沿着XML路线前进,但所需输入的本质实际上是需要执行的程序性线性动作流程:

function move(Block b, Position p) {

// user-defined algorithm for moving block "b" to position "p"

}

Block a = getBlockA();

Position p = getPositionP();

move(a, p);

等等.请注意:以上只是一个示例,并不构成我希望实现的确切语法.我仍处于“30,000英尺视图”设计阶段,并且不知道我的混凝土脚本语言最终会是什么样子.我只提供此示例以表明它是用户必须编写的流/过程脚本,并且该XML可能不是其实现的最佳候选者.

XML,非常适合分层数据,对于这样的实现来说,感觉不是最佳选择(尽管我可以强制它在需要时工作).

我不知道有关DSL的舔,我已经开始阅读Groovy DSL,他们觉得这是我所需要的完美匹配.

我的理解是,我可以编写一个Groovy(我在Groovy中比Scala,JRuby等更强)DSL允许用户编写脚本(.groovy文件),然后我的程序可以在运行时作为输入执行.

这是正确的,还是我完全误解了DSL的意图?如果我弄错了,有人对我有什么建议吗?如果我是正确的,那么Java程序将如何读取和执行.groovy文件(换句话说,我的程序将如何“消耗”他们的脚本)?

编辑:我开始喜欢ANTLR了.虽然我很想卷起袖子写一个Groovy DSL,但我不希望我的用户能够编写他们想要的任何旧的Groovy程序.我想要自己的“微语言”,如果用户走出它,我希望解释器使脚本无效.看起来Groovy / DSL似乎不是正确的选择,也许ANTLR可能是我需要的解决方案……?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值