Parsing 多个解析器互相调用?

Parsing 多个解析器互相调用?,parsing,bison,flex-lexer,Parsing,Bison,Flex Lexer,我正在开发一个复杂的系统,它使用了大量XML模式和相关的解析器。其中一个模式用于保存由所有其他模式访问的常规数据。我想在(flex和bison)解析器中维护这个划分。因此,如果我解析主XML文件并访问标记,我想调用解析器作为子例程,将其内容返回给调用程序,并在标记之后继续解析。我一直在网上四处寻找,但没有发现任何有用的东西。甚至有可能做到这一点吗?你的方法是错误的。对于每个不同的标记,不应该需要特殊的解析器。您应该解析所有标记,而不管它们的属性如何,并将它们链接到树。之后,您可以验证树以确保嵌套

我正在开发一个复杂的系统,它使用了大量XML模式和相关的解析器。其中一个模式用于保存由所有其他模式访问的常规数据。我想在(flex和bison)解析器中维护这个划分。因此,如果我解析主XML文件并访问标记
,我想调用
解析器作为子例程,将其内容返回给调用程序,并在
标记之后继续解析。我一直在网上四处寻找,但没有发现任何有用的东西。甚至有可能做到这一点吗?

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

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

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

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

似乎有点误会。我有三种模式。第一个描述优化解算器的输入,由大约200个标记组成。第二个模式描述了解算器的输出,它稍微小一些,比如说,大约100个标记。但它们都共享一个元素,描述一个矩阵。这个标签本身有几十个后代。我想为这个矩阵标记实现一个解析器,然后可以调用输入和输出解析器。这似乎比在其他两个模式中分别维护矩阵解析器更容易设置,似乎使用解析器生成器给您带来的麻烦比解决的问题还多。我只能建议您手工编写解析器,否则复杂性将成为一个长期问题。