我有以下语法。它应该识别由单引号字符('
)分隔的字符串。但是,这不符合预期。在ANTLWorks中,控制台窗口显示以下警告:
[10:46:50]错误(139):Test.g:9:15: set complement是空的
为什么会这样,我如何匹配一个字符串,该字符串可以包含除分隔符之外的任何字符?
grammar Test;
options
{
language=CSharp3;
output=AST;
ASTLabelType=CommonTree;
}
string: '\'' (~('\''))* '\'';
答案 0 :(得分:0)
您必须意识到ANTLR中的标记化和解析之间存在严格的分离。您的string
规则应该是词法分析器规则,然后应该在解析器规则中使用:
grammar Test;
parse : STRING EOF;
STRING : '\'' (~('\''))* '\'';
另见:Practical difference between parser rules and lexer rules in ANTLR?