从XML DTD生成lex匹配规则和yacc语法规则

时间:2011-12-27 12:16:27

标签: python xml dtd yacc lex

概述

虽然这个问题涉及用C语言编写的lex / yacc,但它基本上以python中的编程为中心。

我有几个非常相似的DTD用于解析文档。该程序的该部分是用C语言编写的,并且不需要为此目的调用完整的SAX处理程序(libxml2)。由于DTD(以及XML文件)具有静态格式,我认为使用lex和yacc可以最好地解决这个问题。

虽然为任何 XML文档编写完整的词法解析器过于复杂,但为XML文档的特定子集编写一个完全可管理。 DTD可用于生成词法分析器(标记输入)以及YACC中的解析器生成器。

我愿意做出两个假设:

  1. XML文档与REC-xml-19980210
  2. 相对应
  3. XML文档相对于其DTD
  4. 有效

    因此,如果XML文档无法满足上述任何要求,则词法分析器/解析器应该只对该特定文件失败。

    问题

    我的最终目标是编写一个成功的python脚本:(1)解析DTD; (2) 生成lex / yacc文件。在开始之前,我有几个问题:

    1. 这个问题已经解决了吗?
      • 如果是的话,是否有任何我应该考虑看的图书馆?
      • 如果没有,是因为没有使用我提到的工具的解决方案吗?
    2. 从使用静态解析器获取XML文件中的非标记'内容'的方法是否更好(以性能衡量)?
    3. 我意识到我可以使用PLY来解析DTD,但是因为我有兴趣生成包含在C程序中的lex / yacc文件,所以该选项不起作用。因此,我想我可能会使用xml.parsers.expat来解析DTD。这允许我注册回调,跟踪元素名称,它们在树中的位置,是否需要它们,等。这应该为我提供足够的信息来生成lex / yacc文件,但我想看看你们有什么建议。

1 个答案:

答案 0 :(得分:0)

使用XML Lexeryacc grammarYAXX扩展名的组合生成相应的文件。