0

一連の文法規則を定義しました。これはルールの例と考えてください。

public bodylist
    : bodyset*
    ;

public bodyset
    : ruleSet
    | media
    | page
    ;  

このルールを使用して解析する必要がある場合は、以下のようにする必要があります。

        Stream inputStream = Console.OpenStandardInput();
        ANTLRInputStream input = new ANTLRInputStream(inputStream);
        CLexer lexer = new CLexer(input);
        CommonTokenStream tokens = new CommonTokenStream(lexer);
        CParser parser = new CParser(tokens);

        parser.bodylist();

ストリーム内のボディセットに一致するセグメントのセットにアクセスする方法がわかりません。以下のように別の解析を行う必要があるようです

        parser.bodyset();

ストリーム内のセグメントのセットに一致するボディセット文法が複数存在する場合があります。

入力ストリームで、このルールが一致する場所が複数あるとします。私が欲しいのは、これらのbodyset情報のセットに関する情報を取得することです(それぞれ、文法規則の開始と終了は何ですか)。

bodysetストリーム内の文法規則の一致セットの情報にアクセスする方法が見つかりませんでした。APIと混同しています。

4

1 に答える 1

1

ANTLR 3 は、ANTLR 4 のようにリスナーとビジターを含む解析ツリーを自動的に作成しません。次のいずれかを行う必要があります。

  1. bodylistメソッドがオブジェクトを返すANTLR 4 にアップグレードします。これにより、オブジェクトのコレクションを返すメソッドがBodylistContext提供されます (解析されたオブジェクトごとに 1 つ)。bodyset()BodysetContextbodyset
  2. ANTLR 3 にとどまりますが、output=AST機能とツリーの文法を使用して入力を処理します。
  3. ANTLR 3 にとどまり、文法にアクション コードを追加して、解析ツリーを手動で構築します。
于 2013-08-25T15:36:09.990 に答える