0

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

[10:46:50] 错误(139):Test.g:9:15:设置补码为空

为什么会这样,我如何匹配可以包含除定界符以外的任何字符的字符串?

grammar Test;
options 
{

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

1 回答 1

0

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

grammar Test;

parse  : STRING EOF;

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

另请参阅:ANTLR 中解析器规则和词法分析器规则之间的实际区别?

于 2013-06-19T09:33:57.983 回答