一部を無視したいファイルがあります。Lexer では、ゲーテッド セマンティック述語を使用して、ファイルの重要でない部分のトークンを作成しないようにしています。私のルールは次のようなものです。
A
: {!ignore}?=> 'A'
;
START_IGNORE
: 'foo' {ignore = true; skip();}
;
END_IGNORE
: 'oof' {ignore = false; skip();}
;
IGNORE
: {ignore}?=> . {skip();}
;
ただし、(以下のように) セマンティック述語も使用するように START と END を変更しない限り、機能しません。
A
: {!ignore}?=> 'A'
;
START_IGNORE
: {true}?=> 'foo' {ignore = true; skip();}
;
END_IGNORE
: {true}?=> 'oof' {ignore = false; skip();}
;
IGNORE
: {ignore}?=> . {skip();}
;
なぜ述語を追加する必要があるのですか?
編集:私はantlr-3.4を使用しています