web-dev-qa-db-ja.com

ANTLR 4 $ channel = HIDDENとオプション

V3からv4に切り替えることにした後、ANTLR 4の文法についてサポートが必要です。私はANTLRをあまり経験していませんので、私の質問がばかげていると本当に申し訳ありません;)

V3では、次のコードを使用してJavaスタイルのコメントを検出しました。

COMMENT
    :   '//' ~('\n'|'\r')* '\r'? '\n' {$channel=HIDDEN;}
    |   '/*' ( options {greedy=false;} : . )* '*/' {$channel=HIDDEN;}
    ;

V4では、ルール固有のオプションはありません。アクション(非表示チャネルに移動)も無効です。

誰かがANTLRv4でそれを行う方法のヒントを教えてもらえますか?

31
user2055330

V4に相当するものは次のようになります。

COMMENT
    :   ( '//' ~[\r\n]* '\r'? '\n'
        | '/*' .*? '*/'
        ) -> channel(HIDDEN)
    ;

これにより、HIDDENチャネルにすべての単一行コメントと複数行コメントが配置されます。ただし、これらのHIDDENトークンを使用して何もしていない場合は、次のようにこれらのトークンをskipすることもできます。

COMMENT
    :   ( '//' ~[\r\n]* '\r'? '\n'
        | '/*' .*? '*/'
        ) -> skip
    ;

レクサーまたはパーサーに貪欲に一致するように伝えるには、もうoptions {greedy=false;}を使用せず、多くの正規表現実装と同様に?を追加することに注意してください。

39
Bart Kiers