Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ANTLR 4 $channel = HIDDEN and options

I need help with my ANTLR 4 grammar after deciding to switch to v4 from v3. I am not very experienced with ANTLR so I am really sorry if my question is dumb ;)

In v3 I used the following code to detect Java-style comments:

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

In v4 there are no rule-specific options. The actions (move to hidden channel) are also invalid.

Could somebody please give me a hint how to do it in ANTLR v4?

like image 667
user2055330 Avatar asked Feb 08 '13 17:02

user2055330


People also ask

What does ANTLR generate?

ANTLR (ANother Tool for Language Recognition) is a powerful parser generator for reading, processing, executing, or translating structured text or binary files.

What is the use of ANTLR?

ANTLR (ANother Tool for Language Recognition) is a tool for processing structured text. It does this by giving us access to language processing primitives like lexers, grammars, and parsers as well as the runtime to process text against them. It's often used to build tools and frameworks.

What is ANTLR Lexer?

A lexer (often called a scanner) breaks up an input stream of characters into vocabulary symbols for a parser, which applies a grammatical structure to that symbol stream.


1 Answers

The v4 equivalent would look like:

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

which will put all single- and multi line comment on the HIDDEN channel. However, if you're not doing anything with these HIDDEN-tokens, you could also skip these tokens, which would look like this:

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

Note that to tell the lexer or parser to match ungreedy, you don't use options {greedy=false;} anymore, but append a ?, similar to many regex implementations.

like image 89
Bart Kiers Avatar answered Oct 04 '22 06:10

Bart Kiers