Подтвердить что ты не робот

ANTLR 4 $channel = HIDDEN и опции

Мне нужна помощь в моей грамматике ANTLR 4 после принятия решения перейти на v4 из v3. Я не очень опытен с ANTLR, поэтому мне очень жаль, если мой вопрос немой;)

В v3 я использовал следующий код для обнаружения комментариев в стиле Java:

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

В версии v4 нет определенных правил. Действия (переход на скрытый канал) также недействительны.

Может кто-нибудь, пожалуйста, дайте мне подсказку, как это сделать в ANTLR v4?

4b9b3361

Ответ 1

эквивалент v4 будет выглядеть так:

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

который будет помещать все одиночные и многострочные комментарии в канал HIDDEN. Однако, если вы ничего не делаете с этими HIDDEN -tokens, вы можете также skip использовать эти токены, которые выглядят следующим образом:

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

Обратите внимание, что для того, чтобы сказать, что lexer или parser соответствуют неровности, вы больше не используете options {greedy=false;}, а добавляете ?, подобно многим реализациям регулярных выражений.