мигриране на lexer действие от v3 към v4

Имам граматика, която работи с 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< /a> обекти. Можете просто да премахнете действията, които извикват метода newLine() и да използвате Token.getLine().

person Sam Harwell    schedule 04.01.2014
comment
Благодаря. Вашият отговор на въпрос 19350705 също беше полезен. - person R71; 06.01.2014