ANTLR 4 $channel = HIDDEN and options

烈酒焚心 提交于 2019-11-28 23:45:31

问题


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?


回答1:


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.



来源:https://stackoverflow.com/questions/14778570/antlr-4-channel-hidden-and-options

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!