1

我需要将用特定领域语言编写的程序翻译成 xml 表示。这些程序采用简单文本文件的形式。你会建议我什么方法?我应该使用什么 api:

  1. 解析用这种语言编写的文本文件。
  2. 根据我获得的令牌和令牌流编写 xml。

我的标准更多的是快速和更容易的开发,而不是内存或计算时间效率。

非常感谢凯坦

4

2 回答 2

2

工作中不太重要的部分是第 1 步,解析域特定语言 (DSL) 文本,而不是第 2 步,将其推送到某种 XML 语言。

希望您很容易拥有 DSL 的解析器(显然,这种语言肯定已经在某个地方使用过……),并且您可以将您的导出/转换逻辑“挂钩”到这个解析器中。如果这是不可能的,您将需要编写一个新的解析器。

根据 DSL 的复杂性,您可能能够以手写方式编写一个基于几个循环和切换案例的简单解析器。
对于更复杂的语言,ANTLR通常是一个不错的选择。简而言之,将 DSL 的语法形式化为 Backus Naur 形式(BNF,或实际上是EBNF,在这里,即扩展家族),并且 ANTLR 生成一个解析器,以选择的目标语言(包括 Java)编写。ANTLR 的学习曲线是一个需要考虑的因素,但在中等到极其复杂的语言环境中,这是一项非常值得的投资。ANTLR 是类似的,但在我看来,它是比GNU Bison更好的工具,但后者也可以做到这一点,而且目标 Java 也是如此需要。
如果您熟悉其他语言,尤其是 Python,那么还有许多其他工具可以用于或多或少的 ad-hoc 解析器;我也使用过PyParsing并很乐意推荐它。

于 2010-03-02T18:09:07.467 回答
1

XStream是 Java EVAR 的最佳 XML 序列化器/反序列化器。如果您可以将您的 DSL 转换为 Java 类,那么这是一个很好的库。

于 2010-03-02T17:18:40.803 回答