2

「訪問者」パターンを使用して、解析されたコードから XML を生成しています。典型的なコンテキスト クラスでは次のようになります。

public static class On_dtmContext extends ParserRuleContext {
    public List<FieldContext> field() {
        return getRuleContexts(FieldContext.class);
    }
    public TerminalNode ON() { return getToken(SRC_REP_SCREENParser.ON, 0); }
    public On_dtm_headerContext on_dtm_header() {
        return getRuleContext(On_dtm_headerContext.class,0);
    }
.....
}

そして、RuleContext の「getText」メンバー関数を使用して、訪問者コールバック関数の要素にアクセスします。「ParserRuleContext」から継承するクラスを作成し、「getText」をオーバーロードして、「<」や「>」などの文字を XML エスケープ シーケンスに置き換えたいと考えています。次のように、コードを生成し、コンテキスト クラスをクラスから継承させる方法はありますか。

public static class On_dtmContext extends XMLParserRuleContext {
    public List<FieldContext> field() {
        return getRuleContexts(FieldContext.class);
    }
    public TerminalNode ON() { return getToken(SRC_REP_SCREENParser.ON, 0); }
    public On_dtm_headerContext on_dtm_header() {
        return getRuleContext(On_dtm_headerContext.class,0);
    }
.....
}

ご協力ありがとうございました!よろしく、オオカミ

4

1 に答える 1

0

<クラスを拡張しようとする理由はありますか?文法でパーサー規則を作成してキャプチャし>、それらが発生したときにそれらを翻訳できるようにするのではなく、クラスを拡張しようとしている理由はありますか?

パーサー ルールは次のようになります。

lessThan
    : '<'
    ;

greaterThan
    : '>'
    ;

その時点で、これらの用語ごとに特定の訪問者がいて、それらを自由に翻訳できます。

于 2013-07-19T15:52:13.770 に答える