我正在编写一个

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程序的脚本输入相关推荐

  1. java编写代理服务器_如何编写Java代理

    java编写代理服务器 对于vmlens (轻量级Java竞争条件捕获器),我们使用Java代理来跟踪字段访问. 这是我们学习的实现此类代理的经验教训. 开始 使用"静态公共静态无效值pre ...

  2. react 代码编写原则_如何编写易读的React代码— 10种编码风格技巧

    react 代码编写原则 by Nirmalya Ghosh 由Nirmalya Ghosh 如何编写易读的React代码- 10种编码风格技巧 (How to write highly readab ...

  3. shell脚本删除冒号空格_从Bash漏洞学Shell脚本(冒号)

    前天,爆发了Bash安全漏洞,非常恐怖.在网络上开始飞速传播,附带了非常友好的检测工具. $ env x='() { :;}; echo vulnerable' bash -c "echo ...

  4. java中的invoke方法_详解Java中Method的Invoke方法

    在写代码的时候,发现从父类class通过getDeclaredMethod获取的Method可以调用子类的对象,而子类改写了这个方法,从子类class通过getDeclaredMethod也能获取到M ...

  5. java工程师有什么要求_什么是java,java工程师应该具备哪些能力?

    这两年,虽然各种各样的新兴语言不断涌现,收获了一大批迷粉,但是java的地位,却始终难以撼动.作为一门成熟的,经久不衰的语言,java吸引了越来越多的人,想加入进来.但是,很多人在选择java前,或多 ...

  6. java语言的数组描述_下列关于Java语言的数组描述中,错误的是()。_学小易找答案...

    [单选题]下面()是正确的main()方法说明. [填空题]Java规定,如果子类中定义的成员方法与父类中定义的成员方法同名,并且参数的( )和类型以及( )的类型也相同,则父类中的同名成员方法被屏蔽 ...

  7. java中注解的解析_全面解析Java中的注解与注释

    注解一.什么是 Annotation? (注解 or 注释)Annotation, 准确的翻译应该是 -- 注解. 和注释的作用完全不一样. Annotation 是JDK5.0及以后版本引入的一个特 ...

  8. java查找链表中间元素_如何通过Java单次查找链表的中间元素

    java查找链表中间元素 您如何一次找到LinkedList的中间元素是一个编程问题,在电话采访中经常问Java和非Java程序员. 这个问题类似于检查回文或 计算阶乘 ,有时Interviewer还 ...

  9. java 线程中创建线程_如何在Java 8中创建线程安全的ConcurrentHashSet?

    java 线程中创建线程 在JDK 8之前,还没有办法在Java中创建大型的线程安全的ConcurrentHashSet. java.util.concurrent包甚至没有一个名为Concurren ...

  10. java时间往后一天_如何在Java中将日期增加一天?

    24个解决方案 617 votes 像这样的东西应该做的伎俩: String dt = "2008-01-01"; // Start date SimpleDateFormat s ...

最新文章

  1. 【LeetCode | 二叉树前、中、后序遍历{迭代法}实现】
  2. python语言的理念_python之禅--理念
  3. 通过python实现卷积神经网络_Python 徒手实现 卷积神经网络 CNN
  4. 【资源】媲美搜索神器everything,超过1秒出结果算我输!
  5. python定时任务_Python定时任务(上)
  6. c语言第六次实验报告,第一年C语言实验报告6列
  7. 第十六周进度报告总结
  8. 关键字--static
  9. 15年程序员老兵的40条编程技巧,句句都是血泪史!
  10. mysql 存储过程 注入_MySQL数据库(六)-- SQL注入攻击、视图、事物、存储过程、流程控制...
  11. (转)高盛将“穷人”理财交给机器人,那智能投顾在中国怎么玩?
  12. Excel 新手向个人练习-1 VLOOKUP,COUNTIF
  13. 创业成功第一步:写好商业计划书 第三章习题答案
  14. 腾讯云服务器域名申请 备案和绑定IP地址详细步骤带清晰图
  15. oracle文件头0号块损坏的处理
  16. Pandas处理大数据的性能优化技巧
  17. 单目视觉SLAM综述
  18. 设备数字点巡检离线巡检系统介绍
  19. excel数字后边添加单位
  20. Polygon zkEVM zkROM代码解析(2)

热门文章

  1. CVPR 2022 | 图森未来提出小目标检测工作QueryDet:使用级联稀疏query加速高分辨率下的小目标检测...
  2. Vue 国际化之 vue-i18n 的使用
  3. Springer期刊下 作者照片及作者介绍在LaTex中如何实现
  4. htop 简介——新
  5. 工作空间、功能包、节点
  6. java面试知识点(最新)first
  7. Python数据分析——基金定投收益率分析,以及支付宝“慧定投”智能定投实现
  8. 湖南卫视邮件服务器解决方案
  9. Planet星座的卫星简介
  10. 微信小程序 获取用户信息 getUserInfo