1

???正確にはわからないので、タイトルのことを意味します。状況を説明しましょう。

私はコンピュータ サイエンスの学生ではありません。また、コンパイラ コースを受講したこともありません。今まで私は、コンパイラーを書いている言語が何であれ、コンパイラーのパーサー・コンポーネントを書かなければならなかったので、コンパイラー・ライターやコンパイラー・コースを受講した学生は優れていると思っていました。簡単な仕事じゃないですよね?

私は情報検索の問題を扱っています。希望するプログラミング言語は Python です。

Parser Nature: http://ir.iit.edu/~dagr/frDocs/fr940104.0.txtはサンプル コーパスです。このファイルには、XML スタイルのマークアップを含む約 50 のドキュメントが含まれています。(上記のリンクで見ることができます)。<DOCNO> FR940104-2-00001 </DOCNO>&のような他のいくつかの値を書き留める必要があり、削除する必要があるいくつかのさまざまなタグと、無視する必要がある多くのコメントといくつかの文字エンティティを含むドキュメントの部分<PARENT> FR940104-2-00001 </PARENT>にインデックスを付けるだけで済みます。ブラウザーや適切な XML ドキュメントによってレンダリングされることを意図していないことがわかっているのに、なぜコーパスにこのようなものが含まれているのかわかりません。<TEXT> </TEXT><!-- -->&hyph; &space; &amp;

Python XML パーサーを使用して、目的のテキストを抽出することを考えました。しかし、少し検索した後、ここで使用している同じコーパスのJavaCC パーサー ソース コード (Parser.jj)を見つけました。JavaCCに続いて Compiler-compilerをざっと調べてみると、結局のところ、コンパイラの作成者は思ったほど優れていないことがわかりました。Compiler-compiler を使用して、目的の言語でパーサー コードを生成します。ウィキは、コンパイラコンパイラへの入力は入力が文法(通常はBNF)であると言います。これは私が迷っているところです。

  1. Parser.jjは文法 (JavaCC と呼ばれるコンパイラー コンパイラーへの入力) ですか? それは間違いなくBNFではありません。この文法は何と呼ばれますか? なぜこの文法には Java 言語があるのですか? 普遍的な文法言語はありませんか?
  2. コーパスを解析するための python パーサーが必要です。Parser.jj を翻訳して Python と同等のものを取得する方法はありますか? はいの場合、それは何ですか? いいえの場合、他にどのような選択肢がありますか?
  3. ひょっとして、このコーパスが何かわかる人はいますか?その元のソースはどこですか?私はそれについてのいくつかの説明を見たいと思います。という名前でインターネット上で配布されていますfrDocs.tar.gz
4

2 に答える 2

2

なぜこれを「XMLスタイル」のマークアップと呼ぶのですか?-これは私にはかなり標準的/基本的なXMLのように見えます。elementTreeまたはlxmlを試してください。パーサーを作成する代わりに、すでに存在する安定した、十分に強化されたライブラリの1つを使用してください。

于 2010-09-17T21:51:00.687 に答える
1

(n E)BNF 文法からは、パーサーを構築することはできません - コンパイラ全体は言うまでもなく - それは単なる文法、つまり構文です (そして、Python のインデントベースのブロック規則のようないくつかの構文は、その中でモデル化することはできませんまったく)、セマンティクスではありません。これらの側面に個別のツールを使用するか、両方を統合するより高度なフレームワーク (C++ の Boost::Spirit や Haskell の Parsec など) を使用します。

JavaCC (yacc など) は、パーサー、つまりソース コードから読み取ったトークンを理解するサブプログラムの生成を担当します。このために、(E)BNF のような表記法と、結果のパーサーが含まれる言語 (たとえば、解析ツリーの構築用) で記述されたコード (この場合は Java) を組み合わせます。もちろん、別の言語を作ることは可能ですが、既存の言語はそれらのタスクを比較的うまく処理できるため、あまり意味がありません。また、コンパイラの他の部分は同じ言語で手作業で記述されている可能性があるため、「ze トークンを取得したので、それらをどうするか」という質問をそのままにしておくことは理にかなっています。これらの他の部分を書く人への部分;)

「PythonCC」については聞いたことがありませんし、Google も知りませんでした (まあ、Google コードに「pythoncc」プロジェクトがありますが、その説明には、「pythoncc は、Python スクリプト用に最適化されたマシン コードを生成しようとするプログラムです」と書かれているだけです。) 3 月以降、コミットはありませんでした)。これらの python 解析ライブラリ/ツールのいずれかを意味しますか? しかし、javaCC コードを同等の Python コードに自動的に変換する方法はないと思いますが、全体はかなり単純に見えます。 ]、あなたはそれを翻訳できるかもしれません...

于 2010-09-17T19:36:42.630 に答える