java - 在 Java 中为领域特定语言编写解析器

标签 java parsing dsl

我们想要设计一种简单的领域特定语言来编写测试脚本,以自动测试我们的一个应用程序的基于 XML 的界面。示例测试将是:

  • 从网络共享文件夹或 subversion 存储库获取输入 XML 文件
  • 使用接口(interface)导入XML文件
  • 检查导入结果消息是否成功
  • 使用接口(interface)导出刚刚导入的对象对应的XML,并检查是否正确。

如果领域特定语言可以是声明性的,并且它的语句看起来尽可能接近我在上面示例中的句子,那将是非常棒的,因为人们不一定非得是程序员才能理解/编写/维护测试。像这样的东西:

newObject = GET FILE "http://svn/repos/template1.xml"
reponseMessage = IMPORT newObject
newObjectID = GET PROPERTY '/object/id/' FROM responseMessage
(..)

但是我不确定如何在 Java 中为该语言实现一个简单的解析器。回到学校,10 年前,我使用 Lex 编写了一个语言解析器。和 Yacc对于C语言。也许一种方法是对 Java 使用一些等价物?

或者,我可以放弃使用声明性语言的想法,而选择基于 XML 的语言,这可能更容易为其创建解析器?你会推荐什么方法?

最佳答案

你可以试试 JavaCCAntlr为您的领域特定语言创建解析器。如果该文件的编辑者不是程序员,我更喜欢这种方法而不是 XML。

关于java - 在 Java 中为领域特定语言编写解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2400901/

相关文章:

java - 加密 key 生成

c# - 为什么无论文化如何,C# DateTime 都会对 "01/05/2020"进行相同的解析?

eclipse - 将语言文本转换为模型

uml - 领域特定语言与领域特定建模语言

java - 通过服务 API 公开 Hibernate 条件

java - 使用 JGit 提交字符串

python - dateutil.parser 处理以 Z 结尾的日期字符串

json - jq - 如果不包含不起作用,则过滤 JSON 数组

ruby - 在隐式接收器上调用 * 方法

java - jackson 空xml数组反序列化