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')+;

0 ответов

Другие вопросы по тегам