如何在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 : '\'' (~('\''))* '\'';
另见: