2

在我深入研究 ANTLR 之前(因为它显然不适合胆小的人),我只是想确保我对它的使用做出了正确的决定。

我想创建一个语法,它将解析带有预定义标签的文本文件,以便我可以在我的应用程序中填充值。(文本文件是由另一个应用程序生成的。)所以,本质上,我希望能够解析如下内容:

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

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

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

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

类似的东西。

4

6 回答 6

3

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

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

于 2009-11-20T04:54:56.947 回答
1

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

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

于 2009-11-20T13:00:55.780 回答
1

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

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

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

于 2009-11-21T00:21:13.840 回答
0

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

于 2009-11-20T04:26:57.893 回答
0

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

于 2009-11-20T04:38:06.683 回答
0

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

似乎您最多只想要一个词法分析器。仅将 ANTLR 用于词法分析器部分是可能的,但似乎有点矫枉过正。

于 2009-11-21T00:20:50.767 回答