0

一連のルールに基づいて構成ファイルを解析するためのシステムを実装するための最良の方法は何ですか? ベスト プラクティスまたは既存の実装の方向性についての指針をいただければ幸いです。

編集: 特定の言語を選択しないと決めたわけではありませんが、Perl と Python の両方に慣れています。ファイルは、さまざまな機能セクションを持つルーター/スイッチ構成ファイルに沿ったものです。

4

3 に答える 3

2

これが XML ベースの構成ファイルではないと仮定すると、ANTLRをお勧め できますか?

  • 指定した EBNF スタイルの文法規則ファイルに基づいてパーサー コードを生成します。
  • Eclipse プラグインとしてルール ファイル用のグラフィカル エディターがあります。
  • 非常に強力で健全なパーサー技術
  • 解析された出力で何をしたいかという点で柔軟
  • ランタイム環境では、C++、C、C#、Java、Python、および Ruby アプリケーションで ANTLR を使用して解析できます。
于 2009-05-08T20:43:59.180 に答える
0

XML を考えていて Java を使用している場合は、ANTLR 2.7.x に基づいた、私の XML パーサー ジェネレーター ANTXR を試すことができます。

詳細については、 http://javadude.com/tools/antxr/index.htmlを参照してください。

例:

XML ファイル:

<?xml version="1.0"?>
<people>
  <person ssn="111-11-1111">
    <firstName>Terence</firstName>
    <lastName>Parr</lastName>
  </person>
  <person ssn="222-22-2222">
    <firstName>Scott</firstName>
    <lastName>Stanchfield</lastName>
  </person>
  <person ssn="333-33-3333">
    <firstName>James</firstName>
    <lastName>Stewart</lastName>
  </person>
</people>

パーサー スケルトン:

header {
package com.javadude.antlr.sample.xml;
}

class PeopleParser extends Parser;

document
  : <people> EOF;

<people>
  : (<person>)*
  ;

<person> 
  : ( <firstName>
    | <lastName>
    )*
  ;

<firstName>
  : PCDATA
  ;

<lastName>
  : PCDATA
  ;

実際にデータを処理するパーサー:

header {
package com.javadude.antlr.sample.xml;

import java.util.List;
import java.util.ArrayList;
}

class PeopleParser extends Parser;


document returns [List results = null]
  : results=<people> EOF
  ;

<people> returns [List results = new ArrayList()]
  { Person p; }
  : ( p=<person>  { results.add(p); }   )*
  ;

<person> returns [Person p = new Person()]
  { String first, last; }
  : ( first=<firstName>  { p.setFirstName(first); }
    | last=<lastName>    { p.setLastName(last);   }
    )*
  ;

<firstName> returns [String value = null]
  : pcdata:PCDATA { value = pcdata.getText(); }
  ;

<lastName> returns [String value = null]
  : pcdata:PCDATA { value = pcdata.getText(); }
  ;

私はこれを何年も使用しており、職場の人々に見せたとき、最初の「文法に慣れる」学習曲線の後、彼らは本当にそれを気に入っています.

SAX または XMLPull フロントエンドを使用できることに注意してください (必要に応じてフロントエンドで検証を行うこともできます)。パーサーを実行するコードは次のようになります

// Create our scanner (using a simple SAX parser setup)
BasicCrimsonXMLTokenStream stream =
    new BasicCrimsonXMLTokenStream(new FileReader("people.xml"),
                                   PeopleParser.class, false, false);


// Create our ANTLR parser
PeopleParser peopleParser = new PeopleParser(stream);

// parse the document
peopleParser.document();
于 2009-05-11T20:32:44.800 に答える