2

\u0000 から \uFFFF の範囲の任意の文字に一致させたいのですが、次のコードでは不十分です。

grammar CharacterClass;

start   :       CH* EOF;
CH      :       [\u0000-\uFFFF];

編集:

XMLのような構造にバイナリデータを挿入したいので、私は尋ねています:

<binary:key>uhihahdudi    some binary data, that should be ignored by ANTLR
izgizgio</binary:key>

[\u0000-\u00FF] の範囲に自分自身を制限することは確かに可能であり、入力ストリームは処理されたデータのバイト値のみを出力しますが、実際のテキストデータを使用するには追加のロジックを実装する必要があります。

私にとって最善の解決策は、ANTLR がバイナリ部分を何らかの形でスキップすることです。これにより、テキスト データを処理できます (バイナリ部分を処理するには、これらの部分の開始位置と終了位置のみが必要です)。

4

1 に答える 1

3

ANTLR 4 は範囲に一致することしかできません[\u0000-\uFFFE]。考えられるすべての入力を本当に照合する必要がある場合は[\u0000-\u00FF]、入力を照合し、UTF-16 文字ではなくバイトとしてパーサーに渡す必要があります。

編集:Lexer.MIN_CHAR_VALUEおよびLexer.MAX_CHAR_VALUE定数も参照してください。

于 2013-02-28T18:40:35.377 に答える