2010-09-17 81 views
1

我的意思是标题中的???,因为我不完全确定。让我解释一下情况。从JavaCC源生成Python语言的解析器?

我不是计算机专业的学生&我从来没有任何编译过程。到目前为止,我曾经认为编译器编写者或编译器课程的学生是非常优秀的,因为他们必须编写编译器的Parser组件,不管他们正在编写哪种编译器。这不是一件容易的工作吗?

我处理信息检索问题。我期望的编程语言是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文档。

我想用任何的Python XML解析器和提取所需的文本。但经过一番搜索,我发现JavaCC parser source code (Parser.jj)为同一语料库,我正在使用here。快速查看JavaCCCompiler-compiler后发现,所有编译器编写者都不如我想像的那么好。他们使用Compiler编译器来生成所需语言的解析器代码。 Wiki表示编译器编译器的输入是一种语法(通常在BNF中)。这是我迷失的地方。

  1. Parser.jj语法(输入到编译器编译称为JavaCC的)?这绝对不是BNF。这个语法叫什么?为什么这个语法有Java语言?没有普遍的语法语言吗?
  2. 我想要解析语料库的Python解析器。有什么办法可以翻译Parser.jj来获得python的等价物吗?如果是,那是什么?如果不是,我的其他选择是什么?
  3. 有没有人知道这个语料库是什么?它的原始来源在哪里?我想看看它的一些说明。它是分布式网络上的名字frDocs.tar.gz
+1

不要JavaCC中,SableCC,ANTLR的存在所迷惑,提振精神::,lepl,pyparsing等写一个像样的** **编译仍然是艺术,有时甚至是黑色艺术。而且,它确实有助于知道你在做什么,当你要拿出一个好的语法/词法分析器等,所以不要误以为所有的人做的是火了命令行程序。 – 2010-09-17 21:59:49

+1

“此文件包含大约50个带有某种XML样式标记的文档”。它没有一个正确的'<?xml'头文件,但它确实喜欢XML。它可能 - 实际上 - 是SGML。为什么不简单地使用XML解析器?为什么浪费时间重塑那个轮子? – 2010-09-18 13:06:02

回答

2

你为什么称这个“XML式”标记 - 这看起来像漂亮的标准/基本的XML我。尝试elementTree或lxml。不用编写解析器,而是使用已经存在的稳定的,强化的库。

+1

+1:它是XML,只需使用现有的解析器。 – 2010-09-18 13:03:42

1

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

JavaCC的(如YACC)是负责生成分析器,即,使从源代码读出的令牌的感子程序。为此,他们将(E)BNF类型的符号与编写的结果解析器将使用的语言编写的代码(例如,构建解析树)(在本例中为Java)混合使用。当然,可以编写另一种语言 - 但由于现有语言可以相对较好地处理这些任务,所以它会变得毫无意义。由于编译器的其他部分可能是用同一种语言手写的,所以留下“我得到了令牌,我该怎么看待它们?“部分给谁写这些其他部分的人;)

我从来没有听说过”PythonCC“,谷歌也没有(好吧,在google代码上的”pythoncc“项目,但它的描述只是说” pythoncc是尝试生成优化的机器代码Python脚本程序“,并有自三月份以来并没有提交)你的意思any of these python parsing libraries/tools?但我不认为有一种方式来自动转换JavaCC的代码为Python等效 - 。但整个事情看起来相当简单,所以如果你潜入并学习一些关于通过javaCC和[你选择的python库/工具]解析,你可能会翻译它...

+0

对不起!没有PythonCC。我写它只是为了与JavaCC等价。我删除了那部分我的问题。 – claws 2010-09-17 19:56:33

+0

“[Python库您所选择的/工具]”你可以提出一个[您选择的Python库/工具]? – claws 2010-09-17 19:57:10

+0

@claws:LEPL(http://www.acooke.org/lepl/)看起来不错,但我从来没有真正分析与Python任何东西,所以我不能从经验发言。 – delnan 2010-09-17 20:02:07