在Java中编写针对特定于域的语言的解析器

b.r*_*oth 11 java dsl parsing

我们想要设计一种简单的特定于域的语言来编写测试脚本,以自动测试我们其中一个应用程序的基于XML的接口.样本测试将是:

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

如果特定于域的语言可以是声明性的,并且其语句看起来尽可能接近上面示例中的句子,那么它将是非常棒的,因为人们不一定必须是程序员来理解/编写/维护测试.就像是:

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

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

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

Pét*_*rök 6

您可以尝试使用JavaCCAntlr为您的特定于域的语言创建解析器.如果该文件的编辑器不是程序员,我宁愿这种方法优于XML.


Mic*_*rdt 5

看看Xtext - 它将采用语法定义并生成一个解析器以及一个功能全面的eclipse编辑器,其中包含语法高亮和查找功能.