2013-02-08 17 views
28

v3からv4に切り替えることを決定した後、ANTLR 4文法の助けが必要です。私は私の質問がダムである場合ので、私は本当に申し訳ありませんが非常にANTLRを経験していないです;)

v3のでは、私は、Javaスタイルのコメントを検出するために、次のコードを使用:

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

v4のではルールが存在しません固有のオプション。アクション(隠しチャネルへの移動)も無効です。

誰かが私にANTLR v4でそれを行うためのヒントを教えてください。 HIDDENチャネル上のすべての単一および複数行のコメントを入れます

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

答えて

33

V4と同等のようになります。しかし、このようになりますが、これらのHIDDEN -tokensで何もしていない場合、あなたの可能性もskipこれらのトークン、:ungreedy一致するレクサーやパーサを伝えるために

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

注意は、あなたが「ドンoptions {greedy=false;}をもう使用しますが、多くのregexの実装と同様に?を追加します。

+0

ありがとうございました! – user2055330

+0

私は今、エラーをスローする提案されたコード(チャンネルを使った最初の変種)を使用します:レクサールールで ' - >コマンド 'COMMENT'は一番外側のaltの最後の要素でなければなりません。 – user2055330

+0

@ user2055330、私の編集したバージョンを試してみてください。 –