多个解析器互相调用?

时间:2014-06-01 16:50:39

标签: parsing bison flex-lexer

我正在研究一个使用大量XML模式和相关解析器的复杂系统。其中一个模式用于保存所有其他模式访问的常规数据。我想在(flex和bison)解析器中保持这种划分。因此,如果我解析主XML文件并获得标签<matrix>,我想将<matrix>解析器称为子例程,将其内容返回给调用程序并继续解析在</matrix>标记之后。我一直在寻找网络,但我没有找到任何有用的东西。甚至可以这样做吗?

2 个答案:

答案 0 :(得分:1)

将公共部分维护在一个单独的文件中并将各个解析器组件分成另外两个文件似乎最简单:第1部分有Prologue和单独的语法规则,第2部分有结尾。然后在调用解析器之前,可以连接这三个文件(在Makefile中):

parser.y:parser.part1 common.inc parser.part2

    cat parser.part1 common.inc parser.part2 >parser.y

答案 1 :(得分:0)

你的做法是错误的。对于每个独特标记,您不需要特殊的解析器。您应解析所有标记,无论其属性如何,并将它们链接到树。之后,您可以验证树以确保嵌套标记的正确一致性。如果您正在谈论的标记语言非常特殊,那么您可以创建一个解析器来获取描述每个标记的规则。在这种情况下,解析和检查是同时完成的,大多数HTML解析器都是这样实现的。