ANTLR3 (C ランタイム) を使用してテキスト ファイルを解析しています。問題は、通常は改行文字を認識したいのですが、文法のいくつかの点でそれらを無視したいことです。
私の最初のアプローチは、文法セットから動的にブール値を設定することでした。これは NEWLINE のレクサー規則で使用され、チャネルを HIDDEN または DEFAULT に設定しました。
ANTLR3 が最初にすべてのトークンを lex してトークンストリームを構築し、次に文法がストリームをウォークするため、これは機能しませんでした。
今、動的に (パーサー文法述語を使用して) トークンストリームに、次のようなデフォルトのトークンチャネルに加えて、特定のトークンチャネルのリッスンを開始/停止するように指示できるかどうか疑問に思っています:
NEWLINE: ('\r'? '\n')+ {$channel=CH_WSPACE;}
expr
@init {
INPUT.disableChannel(CH_WSPACE);
}
@after {
INPUT.enableChannel(CH_WSPACE);
} :
...rhs of the rule....
;
独自の TokenStream を作成する必要がありますか? 私の問題に対するより良いアプローチはありますか?
よろしくお願いします!