16

文法を v3 から v4 に変換しようとしていますが、適切な部分をすべて見つけるのに苦労しています。

v3 で文字列を処理するために、次を使用しました。

public static DataExtractor create(String dataspec) {
    CharStream stream = new ANTLRStringStream(dataspec);
    DataSpecificationLexer lexer = new DataSpecificationLexer(stream);
    CommonTokenStream tokens = new CommonTokenStream(lexer);
    DataSpecificationParser parser = new DataSpecificationParser(tokens);

    return parser.dataspec();
}

これを v4 で動作するように変更するにはどうすればよいですか?

4

2 に答える 2

17

行われた変更は次のとおりです。

  • ANTLRStringStreamを受け取るコンストラクタに置き換えられましANTLRInputStreamた。String
  • returnsパーサー ルールは、ルールの句に従って命名されたパブリック フィールドを持つコンテキスト オブジェクトを返すようになりました。

したがって、dataspecルールが " returns [DataExtractor extractor]" である場合、v4 メソッドは次のようになります。

public static DataExtractor create(String dataspec) {
    CharStream stream = new ANTLRInputStream(dataspec);
    DataSpecificationLexer lexer = new DataSpecificationLexer(stream);
    CommonTokenStream tokens = new CommonTokenStream(lexer);
    DataSpecificationParser parser = new DataSpecificationParser(tokens);

    return parser.dataspec().extractor;
}
于 2013-08-07T17:45:00.750 に答える