解析此文件格式时扫描仪输出有困难

时间:2012-05-23 09:51:20

标签: parsing antlr

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

无法使用lexerless方法(如Packrat或其他任何方式解释PEGs)会更好。

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