1

我的意思是???标题中的,因为我不确定。让我解释一下情况。

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

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

Parser Nature: 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 文档。

我想过使用任何 Python XML 解析器并提取所需的文本。但经过一番搜索后,我找到了我在这里使用的同一个语料库的JavaCC 解析器源代码 (Parser.jj)。快速查看JavaCCCompiler-compiler后发现,编译器编写者并没有我想象的那么好。他们使用 Compiler-compiler 生成所需语言的解析器代码。Wiki 说编译器的输入是一种语法(通常在 BNF 中)。这就是我迷路的地方。

  1. Parser.jj语法(输入到称为 JavaCC 的编译器编译器)吗?这绝对不是 BNF。这个语法叫什么?为什么这个语法有Java语言?没有通用的语法语言吗?
  2. 我想要python解析器来解析语料库。有什么方法可以翻译 Parser.jj 以获得等效的 python 吗?如果是,那是什么?如果没有,我的其他选择是什么?
  3. 有没有人知道这个语料库是什么?它的原始来源在哪里?我想看看它的一些描述。它以名称分布在互联网上frDocs.tar.gz
4

2 回答 2

2

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

于 2010-09-17T21:51:00.687 回答
1

您无法从 (n E)BNF 语法构建解析器 - 更不用说整个编译器 - 它只是语法,即语法(以及某些语法,如 Python 的基于缩进的块规则,不能在其中建模根本),而不是语义。要么为这些方面使用单独的工具,要么使用更先进的框架(如 C++ 中的 Boost::Spirit 或 Haskell 中的 Parsec)来统一两者。

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

我从未听说过“PythonCC”,谷歌也没有听说过(好吧,谷歌代码上有一个“pythoncc”项目,但它的描述只是说“pythoncc 是一个试图为 Python 脚本生成优化机器代码的程序。”和自 3 月以来没有任何承诺)。你的意思是这些python解析库/工具中的任何一个吗?但我不认为有一种方法可以自动将 javaCC 代码转换为 Python 等价物 - 但整个事情看起来相当简单,所以如果你深入了解一下通过 javaCC 和 [python 库/您选择的工具进行解析],你也许可以翻译它...

于 2010-09-17T19:36:42.630 回答