我尝试定义一条允许== 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')+;