1

我需要解析第三方应用程序生成的文件。使用 ANTLR,我构建了一个似乎工作正常的解析器,直到遇到以下问题。

文件类型是基于行的,并使用几个关键字来定义层次结构;所谓的“块”,它们本身可以有子块,等等。根据当前块的类型,不同的行具有特殊的含义,例如在一个特定的块中,第 5 行(相对于块的开始)包含文件的作者,在另一行中,第 3 行是文件名,等等。所有这些本质上都是字符串,即用户可以在创建文件时输入任何他们想要的数据;但是它们是字符串的事实只能通过行号隐含地知道。

因为没有引号或任何东西来识别这些字符串,所以我的词法分析器偶尔会标记这些文本的一部分(如数字或与关键字相同的单词),结果我无法可靠地从解析器规则中的标记。

是否可以像我尝试的那样使用解析器生成器来处理这种文件?由于我对解析器的构造不是很精通,我希望有一个简单的解决方法或 ANTLR 的功能可以帮助克服这个小问题。

4

1 回答 1

1

不要使用 ANTLR 或 Yacc 或任何其他类似工具来解析此类语法(没有不同且与上下文无关的预定义标记集)。

无词法分析的方法(如Packrat或任何其他解释PEG的方式)会更好。

周围有许多 Packrat 实现,在没有任何第三方工具的情况下,用任何语言编写一个临时递归下降 PEG 解析器并不难,特别是对于没有特定性能要求的琐碎语法。

于 2012-05-24T08:26:38.653 回答