ANTLR并没有抱怨未公开的评论

时间:2016-01-07 11:57:01

标签: antlr antlrworks

我尝试定义一条允许== 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 个答案:

没有答案