java 脚本如何编写的_如何编写Java程序的脚本输入
我正在编写一个
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可能是我需要的解决方案……?
java 脚本如何编写的_如何编写Java程序的脚本输入相关推荐
- java编写代理服务器_如何编写Java代理
java编写代理服务器 对于vmlens (轻量级Java竞争条件捕获器),我们使用Java代理来跟踪字段访问. 这是我们学习的实现此类代理的经验教训. 开始 使用"静态公共静态无效值pre ...
- react 代码编写原则_如何编写易读的React代码— 10种编码风格技巧
react 代码编写原则 by Nirmalya Ghosh 由Nirmalya Ghosh 如何编写易读的React代码- 10种编码风格技巧 (How to write highly readab ...
- shell脚本删除冒号空格_从Bash漏洞学Shell脚本(冒号)
前天,爆发了Bash安全漏洞,非常恐怖.在网络上开始飞速传播,附带了非常友好的检测工具. $ env x='() { :;}; echo vulnerable' bash -c "echo ...
- java中的invoke方法_详解Java中Method的Invoke方法
在写代码的时候,发现从父类class通过getDeclaredMethod获取的Method可以调用子类的对象,而子类改写了这个方法,从子类class通过getDeclaredMethod也能获取到M ...
- java工程师有什么要求_什么是java,java工程师应该具备哪些能力?
这两年,虽然各种各样的新兴语言不断涌现,收获了一大批迷粉,但是java的地位,却始终难以撼动.作为一门成熟的,经久不衰的语言,java吸引了越来越多的人,想加入进来.但是,很多人在选择java前,或多 ...
- java语言的数组描述_下列关于Java语言的数组描述中,错误的是()。_学小易找答案...
[单选题]下面()是正确的main()方法说明. [填空题]Java规定,如果子类中定义的成员方法与父类中定义的成员方法同名,并且参数的( )和类型以及( )的类型也相同,则父类中的同名成员方法被屏蔽 ...
- java中注解的解析_全面解析Java中的注解与注释
注解一.什么是 Annotation? (注解 or 注释)Annotation, 准确的翻译应该是 -- 注解. 和注释的作用完全不一样. Annotation 是JDK5.0及以后版本引入的一个特 ...
- java查找链表中间元素_如何通过Java单次查找链表的中间元素
java查找链表中间元素 您如何一次找到LinkedList的中间元素是一个编程问题,在电话采访中经常问Java和非Java程序员. 这个问题类似于检查回文或 计算阶乘 ,有时Interviewer还 ...
- java 线程中创建线程_如何在Java 8中创建线程安全的ConcurrentHashSet?
java 线程中创建线程 在JDK 8之前,还没有办法在Java中创建大型的线程安全的ConcurrentHashSet. java.util.concurrent包甚至没有一个名为Concurren ...
- java时间往后一天_如何在Java中将日期增加一天?
24个解决方案 617 votes 像这样的东西应该做的伎俩: String dt = "2008-01-01"; // Start date SimpleDateFormat s ...
最新文章
- 【LeetCode | 二叉树前、中、后序遍历{迭代法}实现】
- python语言的理念_python之禅--理念
- 通过python实现卷积神经网络_Python 徒手实现 卷积神经网络 CNN
- 【资源】媲美搜索神器everything,超过1秒出结果算我输!
- python定时任务_Python定时任务(上)
- c语言第六次实验报告,第一年C语言实验报告6列
- 第十六周进度报告总结
- 关键字--static
- 15年程序员老兵的40条编程技巧,句句都是血泪史!
- mysql 存储过程 注入_MySQL数据库(六)-- SQL注入攻击、视图、事物、存储过程、流程控制...
- (转)高盛将“穷人”理财交给机器人,那智能投顾在中国怎么玩?
- Excel 新手向个人练习-1 VLOOKUP,COUNTIF
- 创业成功第一步:写好商业计划书 第三章习题答案
- 腾讯云服务器域名申请 备案和绑定IP地址详细步骤带清晰图
- oracle文件头0号块损坏的处理
- Pandas处理大数据的性能优化技巧
- 单目视觉SLAM综述
- 设备数字点巡检离线巡检系统介绍
- excel数字后边添加单位
- Polygon zkEVM zkROM代码解析(2)