/
How do I match multi-line comments?
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;} ;