Java Antlr如何在带引号的字符串中转义引号符号
我想要一些语法来表示一个字符串,用“”引用,字符串中的“符号可以像\”一样引用。以下是我的语法:Java Antlr如何在带引号的字符串中转义引号符号,java,antlr,Java,Antlr,我想要一些语法来表示一个字符串,用“”引用,字符串中的“符号可以像\”一样引用。以下是我的语法: fragment NUM_LETTER : ('a'..'z'|'A'..'Z'|'0'..'9'); STRING_LITERAL : '"' (NUM_LETTER|'_'|('\\"'))* '"'; 但它不起作用。我尝试在AntlrWorks1.5中解释“\”a”,它在生成的字符串\ u LITERAL语法树中给出了一个不匹配的TokenException。我的语法哪一部分错了?试试下面
fragment
NUM_LETTER : ('a'..'z'|'A'..'Z'|'0'..'9');
STRING_LITERAL : '"' (NUM_LETTER|'_'|('\\"'))* '"';
但它不起作用。我尝试在AntlrWorks1.5中解释“\”a”,它在生成的字符串\ u LITERAL语法树中给出了一个不匹配的TokenException。我的语法哪一部分错了?试试下面的表达:
STRING : '"' (options{greedy=false;}:( ~('\\'|'"') | ('\\' '"')))* '"';
语法没有问题。您可能会遇到此错误,因为您使用的是解释器,这是错误的。改用ANTLRWorks的调试器。调试器将向您显示输入
“\”a“
解析得很好(按CTRL+D开始调试)
此外,您的字符串规则最好如下所示:
STRING_LITERAL : '"' (~('"' | '\\' | '\r' | '\n') | '\\' ('"' | '\\'))* '"';
换句话说,字符串的内容为零或更多:
- 除引号、反斜杠或换行符以外的任何字符:
~(“'''.'\'.\'.'.'\r'.'\n')
- 转义引号或反斜杠
'\\'(''''\'.'\\'))
options{greedy=false;}:
部分。@Ryan,没有。解释器有点问题。