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

时间:2013-06-19 08:50:27

标签: antlr antlr3

我有以下语法。它应该识别由单引号字符(')分隔的字符串。但是,这不符合预期。在ANTLWorks中,控制台窗口显示以下警告:

  

[10:46:50]错误(139):Test.g:9:15:   set complement是空的

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

grammar Test;
options 
{

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

1 个答案:

答案 0 :(得分:0)

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

grammar Test;

parse  : STRING EOF;

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

另见:Practical difference between parser rules and lexer rules in ANTLR?