перенос действия лексера с версии 3 на версию 4

У меня есть грамматика, которая работает с v3, и сейчас я пытаюсь перейти на v4. Я получил несколько советов из вопросов 18431158 и 14778570, но у меня есть еще один вопрос:

В моем коде v3 я подсчитывал номера строк следующим образом (newLine() просто ведет подсчет проанализированных строк и сохраняет его, чтобы позже, когда я попытаюсь сообщить о некоторых семантических ошибках, я мог также сообщить соответствующий номер строки):

COMMENT : '/*' ( options {greedy=false;} : 
    (
       '\n' {newLine();}
     | ~ '\n'
    ) )* '*/' {$channel=HIDDEN;}
;
LINE_COMMENT : '//' ~('\n'|'\r')* '\r'? '\n' {$channel=HIDDEN; newLine();} ;
WS: (
  ' '
 |'\r'
 |'\t'
 |'\n' {newLine();}
)+     {$channel=HIDDEN;};

В v4 действия лексера не разрешены внутри. Как мне перенести этот код на v4?


person R71    schedule 03.01.2014    source источник


Ответы (1)


ANTLR 4 всегда отслеживает номера строк и столбцов в Token< /а> объекты. Вы можете просто удалить действия, вызывающие метод newLine(), и использовать Token.getLine().

person Sam Harwell    schedule 04.01.2014
comment
Спасибо. Ваш ответ на вопрос 19350705 также был полезен. - person R71; 06.01.2014