Parsing ANTLR会有帮助吗?不同的建议?

Parsing ANTLR会有帮助吗?不同的建议?,parsing,antlr,antlrworks,Parsing,Antlr,Antlrworks,在我深入研究ANTLR(因为)之前,我只想确保我对它的使用做出了正确的决定 我想创建一个语法,用预定义的标记在文本文件中进行解析,以便在应用程序中填充值。(文本文件由另一个应用程序生成。)因此,本质上,我希望能够解析如下内容: Name: TheFileName Values: 5 3 1 6 1 3 Other Values: 5 3 1 5 1 在我的应用程序中,文件名存储为字符串,两组值都存储到一个数组中。(这只是一个示例,文件要复杂得多。)不管怎样,我是否至少在使用ANTLR时走上了正

在我深入研究ANTLR(因为)之前,我只想确保我对它的使用做出了正确的决定

我想创建一个语法,用预定义的标记在文本文件中进行解析,以便在应用程序中填充值。(文本文件由另一个应用程序生成。)因此,本质上,我希望能够解析如下内容:

Name: TheFileName
Values: 5 3 1 6 1 3
Other Values: 5 3 1 5 1
在我的应用程序中,文件名存储为字符串,两组值都存储到一个数组中。(这只是一个示例,文件要复杂得多。)不管怎样,我是否至少在使用ANTLR时走上了正确的道路?还有其他建议吗

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

Name: <string>TheFileName</string>
Values: <array>5 3 1 6 1 3</array>
Important Value: <double>3.45</double>
名称:文件名
数值:5 3 1 6 1 3
重要值:3.45
沿着这些思路的东西。

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

我使用免费工具,它非常容易使用,并且可以用多种不同的语言生成解析器本身。还有解析此类表达式的示例。

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


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

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


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

如果文件的格式由用户决定,您甚至可以为它定义语法吗


看起来你最多也只是想要一个lexer。仅对lexer部分使用ANTLR是可能的,但这似乎有些过分。

如果不需要定制格式,那么应该考虑使用现有格式,例如或XML,这些格式有可用的解析器

即使您确实需要自定义格式,也最好设计一种非常简单的格式,这样您就不需要完整的语法来解析它。从头开始设计自己的脚本语法并做好它是一项艰巨的工作


编写语法分析器也很有趣,所以如果你好奇的话,你应该去做。但我不建议将学习练习与实际工作代码混为一谈。

我没有显示任何其他文件的原因是这些文件是用户定义的。我已经更新了,以便更好地描述问题。反应良好。为了回答您的问题,我无法预测文件必然会有什么不同。基本上,我想提供一系列可以放入文件模板中的各种标记,我将使用该模板解析与该模板匹配的任何其他文件。这将有助于将数据快速带入系统。但是,除了标签之外,我不太关心它们之间的内容。