ANTLR会帮忙吗?不同的建议?

时间:2009-11-20 04:20:15

标签: parsing antlr antlrworks

在我深入研究ANTLR之前(因为it is apparently not for the faint of heart),我只是想确保我已就其使用做出了正确的决定。

我想创建一个语法,该语法将在具有预定义标记的文本文件中进行解析,以便我可以在应用程序中填充值。 (文本文件由另一个应用程序生成。)因此,基本上,我希望能够解析这样的事情:

Name: TheFileName
Values: 5 3 1 6 1 3
Other Values: 5 3 1 5 1

在我的应用程序中,TheFileName存储为String,两组值都存储在一个数组中。 (这只是一个例子,文件要复杂得多。)无论如何,我至少在ANTLR的正确道路上走下去了吗?还有其他建议吗?

修改 这些文件由用户创建,并通过标签定义区域。所以,它可能看起来像这样。

Name: <string>TheFileName</string>
Values: <array>5 3 1 6 1 3</array>
Important Value: <double>3.45</double>

这些方面的东西。

6 个答案:

答案 0 :(得分:3)

基本问题是如何文件更复杂?它基本上是相同的,带有标记,冒号和一个或多个值,还是其他行的基本结构更复杂?如果它基本上只是相同的,那么识别和读取数据的代码非常简单,并且解析器生成器不太可能获得太多。如果其他线具有截然不同的结构,则主要取决于它们的差异。

编辑:根据您添加的内容,我会更进一步,并将您的文件格式化为XML。然后,您可以使用现有的XML解析器(等)来读取文件,提取数据,验证它们是否适合指定的格式等。

答案 1 :(得分:1)

这取决于您对正在解析的文件格式的控制。如果你没有控制权,那么像ANTLR这样的解析器生成器可能很有价值。 (我们自己为我们无法控制的FORTRAN输出文件执行此操作)。这是相当多的工作,但我们现在已经掌握了基本的ANTLR词法分析器/解析器策略,它开始运作良好。

但是,如果您对格式有一些或完全的控制权,那么可以根据需要使用尽可能多的标记来创建它。我总是用XML创建这样一个文件,因为有很多工具可以处理它(不仅是解析,还有XPath,数据库等)。一般来说,我们使用ANTLR将半结构化信息解析成XML。

答案 2 :(得分:1)

如果您不需要自定义格式,那么您应该考虑使用现有格式,例如JSON或XML,其中有可用的解析器。

即使你确实需要一种自定义格式,你最好还是设计一个简单易用的格式,这样你就不需要一个完整的语法来解析它。从头开始设计自己的脚本语法并做好工作是很多工作。

编写语法分析器也很有趣,所以如果你很好奇,那么你应该去实现它。但我不建议将学习练习与实际工作代码混合在一起。

答案 3 :(得分:0)

好吧,如果它“更复杂”,那么,是的,解析器生成器会有所帮助。但是,既然你没有显示文件的实际格式,那么怎么会有人知道什么是适合这项工作的合适工具呢?

答案 4 :(得分:0)

我使用免费的GOLD Parser Builder,这非常容易使用,并且可以用许多不同的语言生成解析器。还有用于解析此类表达式的示例。

答案 5 :(得分:0)

如果文件的格式取决于用户,您甚至可以为其定义语法吗?

好像你只想要一个词法分析器。可以使用ANTLR仅用于词法分析器部分,但看起来有点矫枉过正。