Проблема с комментариями ANTLR - PullRequest
2 голосов
/ 14 февраля 2010

Я пытаюсь написать правило сопоставления комментариев в ANTLR, которое в настоящее время следующее:

LINE_COMMENT
    : '--' (options{greedy=false;}: .)* NEWLINE {Skip();}
    ;

NEWLINE : '\r'|'\n'|'\r\n' {Skip();};

Этот код работает нормально, за исключением случая, когда комментарий является последним символом файла, и в этом случае он генерирует исключение NoViableAlt. Как я могу это исправить?

Ответы [ 2 ]

2 голосов
/ 14 февраля 2010

Почему бы и нет:

LINE_COMMENT     : '--' (~ NEWLINE)* ;
fragment NEWLINE : '\r' '\n'? | '\n' ;

Если вы еще не сталкивались с этим, лексические правила (все в верхнем регистре) могут состоять только из констант и токенов, но не из других лексем. Для этого вам нужно правило синтаксического анализатора.

0 голосов
/ 14 февраля 2010

Я бы пошел на:

LINE_COMMENT
  :  '--' ~( '\r' | '\n' )* {Skip();}
  ;

NEWLINE 
  :  ( '\r'? '\n' | '\r' ) {Skip();}
  ;
...