2017-01-11 10 views
0

私は、既存のANTLR文法ファイルを変更して、特定のコメントを解析できるようにしています。現在、すべてのコメントを隠しチャンネルにフィルタリングするためのLexerルールが存在します。私はそれが//@keyであればを通じてコメントを許可するには、このルールを変更したいANTLR3例外のレクサールールへの適用

COMMENT : '//' .* ('\n' | '\r') {$channel = HIDDEN;}; 

:ルールは次のようになります。私は否定文を使って試してみて、//~('@')を使用して//@keyの文が一致しないようにしましたが、この文が許可する隠しチャネルにフィルタリングを続けたいという別の//@タグがあります。

答えて

1

レクサーでは、入力が複数のルールと一致する場合、最上位のルール(文法ファイルの順)が使用されます。

だから、あなたができる:

SPECIAL_COMMENT : '//@key' .* ('\n' | '\r'); 

COMMENT : '//' .* ('\n' | '\r') {$channel = HIDDEN;}; 
+0

は説明をいただき、ありがとうございます。完璧に働いた。 – kmachstang

関連する問題