ANTLR не жалуется на закрытый комментарий
Я пытаюсь определить правило комментария, которое позволяет == bla bla bla ==
но нет ==
сам по себе.
К вашему сведению, изначально я добавил F_COMMENT!?
между всем и до сих пор возникала та же проблема. Я оставил один F_COMMENT!?
в expression
править в какой-то тщетной попытке заставить его работать.
Когда я отлаживаю ==
в ANTLRworks (1.5.2) он просто игнорирует ==
и возвращает токен EOF.
Вот некоторые из грамматики...
expression
: F_COMMENT!? condition? EOF;
WS
: ( '\t' | ' ' | '\r' | '\n' | F_COMMENT)+ { $channel = HIDDEN; } ;
F_COMMENT
: '==' ( options {greedy=false;} : . )* '==';
ОБНОВИТЬ:
Я создал краткую грамматику для этой проблемы, которая, кажется, работает, для ==
дело как минимум...
@members {
@Override
public void displayRecognitionError(String[] tokenNames, RecognitionException e) {
String hdr = getErrorHeader(e);
String msg = getErrorMessage(e, tokenNames);
throw new RuntimeException(hdr + ":" + msg);
}
}
expression
: condition? EOF;
condition
: (F_COMMENT!)* cnd_word;
cnd_word
: ( CND_WORD );
WS
: ( '\t' | ' ' | '\r' | '\n' )+ { $channel = HIDDEN; } ;
CND_WORD
: ('=' | '*'? (F_QUOTEDWORD+ | F_WORDCHARS+) '*'?) | '*';
fragment
F_COMMENT
: '==' ~('=')* '==';
fragment
F_QUOTEDWORD
: '"' ( ~('\\'|'"') | ('\\' '"') )* '"';
fragment
F_WORDCHARS
: ('a'..'z'|'A'..'Z'|'0'..'9')+;