代码之家  ›  专栏  ›  技术社区  ›  claws

从javacc源代码生成python语言的解析器?

  •  1
  • claws  · 技术社区  · 15 年前

    我的意思是 ??? 因为我不太确定。我来解释一下情况。

    我不是计算机科学专业的学生,我从来没有上过编译课程。到目前为止,我一直认为编写编译器的作者或学生是优秀的,因为他们必须用编写编译器的任何语言编写编译器的解析器组件。这工作不容易,对吧?

    我正在处理信息检索问题。我想要的编程语言是python。

    分析器性质: http://ir.iit.edu/~dagr/frDocs/fr940104.0.txt 是样本语料库。此文件包含大约50个带有一些XML样式标记的文档。(您可以在上面的链接中看到)。我需要记下其他一些价值观,比如 <DOCNO> FR940104-2-00001 </DOCNO> 和; <PARENT> FR940104-2-00001 </PARENT> 我只需要索引 <TEXT> </TEXT> 文档的一部分,其中包含一些不同的标签,我需要去掉这些标签 <!-- --> 要被忽视的评论和一些 &hyph; &space; &amp; 字符实体。我不知道当语料库知道它既不打算由浏览器呈现,也不打算由一个适当的XML文档呈现时,它为什么会有这样的东西。

    我考虑使用任何PythonXML解析器并提取所需的文本。但经过一点点的搜索,我发现 JavaCC parser source code (Parser.jj) 对于我使用的相同语料库 here . 快速查找 JavaCC 然后 Compiler-compiler 结果发现,毕竟编译器的作者并不像我想象的那么优秀。它们使用编译器编译器生成所需语言的解析器代码。wiki说编译器的输入是一种语法输入(通常用bnf)。这就是我迷路的地方。

    1. Parser.jj 语法(编译器编译器的输入称为javacc)?这绝对不是BNF。这个语法叫什么?为什么这个语法有Java语言?没有通用的语法语言吗?
    2. 我想要用python解析器来解析文集。有没有什么方法可以将parser.jj翻译成python等价物?如果是,是什么?如果没有,我的其他选择是什么?
    3. 有没有人知道这个语料库是什么?它的原始来源在哪里?我想看看它的描述。它以名称在因特网上分发 frDocs.tar.gz
    2 回复  |  直到 15 年前
        1
  •  2
  •   PaulMcG    15 年前

    为什么称此为“XML样式”标记?-对我来说,这看起来很像标准/基本的XML。 尝试elementtree或lxml。不要编写解析器,而是使用已经存在的稳定的、很好地加固的库之一。

        2
  •  1
  •   user395760    15 年前

    你不能用(n e)bnf语法来构建一个解析器,更不用说整个编译器了,它只是语法,也就是语法(一些语法,比如python的基于缩进的块规则,根本不能用它来建模),而不是语义。要么使用分离的工具来支持这些方面,要么使用一个更先进的框架(如Booost:C++中的灵魂或Haskell中的Parsec)来统一这两个框架。

    javacc(像yacc)负责生成一个解析器,即能够理解从源代码中读取的令牌的子程序。为此,他们将(E)BNF类符号与语言编写的代码混合在一起,生成的解析器将在(例如,构建解析树)-在这种情况下,Java。当然,有可能组成另一种语言——但由于现有的语言可以相对较好地处理这些任务,所以这将是毫无意义的。由于编译器的其他部分可能是用同一种语言手工编写的,所以留下“我得到了Ze令牌,我该怎么处理它们?”写这些其他部分的人的一部分;)

    我从来没有听说过“pythoncc”,谷歌也没有(好吧,谷歌代码上有一个“pythoncc”项目,但它的描述只是说“pythoncc是一个试图为python脚本生成优化机器代码的程序。”而且自3月份以来没有提交过)。你是说 any of these python parsing libraries/tools? 但是我不认为有一种方法可以自动将javacc代码转换成与python等效的代码——但是整个过程看起来相当简单,因此如果您深入学习一下如何通过javacc和[python library/tool of your choice]进行解析,您可能能够翻译它……