1

以下のような文字列コマンドを作成する予定です

string syntax = "Download(TagMatch(Download(\"http://www.aaa.com\"), \"<div title='aa'>\", \"</div>\"))";
MyParser.Execute(syntax);

次に、MyParser は内部の構文を解析し、最初に最も深いコマンドのパラメーターを使用して、最も外側のコマンドまで正しいメソッドを呼び出します。したがって、基本的には

  1. ダウンロード('http://www.aaa.com')
  2. ダウンロードを完了すると、すべてのタグの一致が一覧表示され、終了します
  3. Download を再度呼び出しますが、オーバーロード Download(string[] param) を使用します

だから基本的に私はこれらの方法を持っています

private string Download(string download)
{
//return single string
}

private string[] Download(string[] download)
{
//return string array
}

private string[] TagMatch(string webpage, string startTag, string endTag)
{
//return multiple Tag matches the array
}

そのようなパーサーを作成し、最初に最も深いところでメソッドを呼び出すにはどうすればよいですか? 誰でも私を助けることができますか?私は解析の初心者です。1 つの構文を提供するだけで、Web スクレイピングを処理するライブラリを作成する予定です。

4

1 に答える 1

2

適切なパーサーを作成するには、いくつかのことを行う必要があります。

  1. EBNFなどの表記法を使用して、適切に解析する言語を定義します。
  2. 言語のEBNF定義に基づいたパーサー作成ツールを使用します。
  3. 生成されたパーサーコードをアプリケーションに統合し、パーサーコードが入力文字列から生成するツリー構造を使用するようにアプリケーションを適合させます。

C#を含め、パーサーを作成するための優れたツールは、http://goldparser.orgにあるGoldParserGeneratorです。

ただし、最初にEBNFで言語を適切に定義するようにしてください。正規表現を使用して「パーサー」をハックするだけでなく、適切な言語解析には制限が多すぎます。

于 2012-10-22T13:11:32.983 に答える