虽然这个问题涉及用C语言编写的lex / yacc,但它基本上以python中的编程为中心。
我有几个非常相似的DTD用于解析文档。该程序的该部分是用C语言编写的,并且不需要为此目的调用完整的SAX处理程序(即,libxml2)。由于DTD(以及XML文件)具有静态格式,我认为使用lex和yacc可以最好地解决这个问题。
虽然为任何 XML文档编写完整的词法解析器过于复杂,但为XML文档的特定子集编写一个完全可管理。 DTD可用于生成词法分析器(标记输入)以及YACC中的解析器生成器。
我愿意做出两个假设:
因此,如果XML文档无法满足上述任何要求,则词法分析器/解析器应该只对该特定文件失败。
我的最终目标是编写一个成功的python脚本:(1)解析DTD; (2) 生成lex / yacc文件。在开始之前,我有几个问题:
我意识到我可以使用PLY来解析DTD,但是因为我有兴趣生成包含在C程序中的lex / yacc文件,所以该选项不起作用。因此,我想我可能会使用xml.parsers.expat来解析DTD。这允许我注册回调,跟踪元素名称,它们在树中的位置,是否需要它们,等。这应该为我提供足够的信息来生成lex / yacc文件,但我想看看你们有什么建议。