如何在ANTLR3中匹配过于简单的字符串

如何在ANTLR3中匹配过于简单的字符串,antlr,antlr3,Antlr,Antlr3,我有以下语法。它应该识别由单引号字符(“)分隔的字符串。然而,这并没有达到预期的效果。在ANTLWorks中,控制台窗口显示以下警告: [10:46:50]错误(139):测试。g:9:15: 集合补码为空 为什么会这样?如何匹配可以包含除分隔符以外的任何字符的字符串 grammar Test; options { language=CSharp3; output=AST; ASTLabelType=CommonTree; } string: '\'' (~('\''

我有以下语法。它应该识别由单引号字符(
)分隔的字符串。然而,这并没有达到预期的效果。在ANTLWorks中,控制台窗口显示以下警告:

[10:46:50]错误(139):测试。g:9:15: 集合补码为空

为什么会这样?如何匹配可以包含除分隔符以外的任何字符的字符串

grammar Test;
options 
{

    language=CSharp3;
    output=AST;
    ASTLabelType=CommonTree;
}
string: '\'' (~('\''))* '\'';

您必须意识到在ANTLR中标记化和解析之间有着严格的分离。您的
string
规则应该是lexer规则,然后应该在解析器规则中使用:

grammar Test;

parse  : STRING EOF;

STRING : '\'' (~('\''))* '\'';
另见: