How do I match multi-line comments?

The way to parse and probably ignore the usual c-style comments found in many programming languages has changed from ANTLR 2.

Instead of:

// ANTLR 2
ML_COMMENT
  : "/*"
    (               /* '\r' '\n' can be matched in one alternative or by matching
                       '\r' in one iteration and '\n' in another. I am trying to
                       handle any flavor of newline that comes in, but the language
                       that allows both "\r\n" and "\r" and "\n" to all be valid
                       newline is ambiguous. Consequently, the resulting grammar
                       must be ambiguous. I'm shutting this warning off.
                    */
      options {
        generateAmbigWarnings=false;
      }
      :  { LA(2)!='/' }? '*'
      | '\r' '\n' {newline();}
      | '\r' {newline();}
      | '\n' {newline();}
      | ~('*'|'\n'|'\r')
    )*
    "*/"
    {$setType(Token.SKIP);}
;

We now use:

// ANTLR 3
ML_COMMENT
    :   '/*' (options {greedy=false;} : .)* '*/' {$channel=HIDDEN;}
    ;

For languages which allow nested comments:

// ANTLR 3
NESTED_ML_COMMENT
    :   '/*'
        (options {greedy=false;} : (NESTED_ML_COMMENT | .))*
        '*/' {$channel=HIDDEN;}
    ;