2010-09-17 84 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