我想要一些语法来表示一个字符串,引用“和”字符串里面的符号可以引用像\“。以下是我的语法:
fragment
NUM_LETTER : ('a'..'z'|'A'..'Z'|'0'..'9');
STRING_LITERAL : '"' (NUM_LETTER|'_'|('\\"'))* '"';
但它不起作用。我试着在AntlrWorks1.5中解释“\”,它在生成的语法树中为STRING_LITERAL提供了MismatchedTokenException。我的语法的哪一部分是错的?
答案 0 :(得分:3)
语法没有错。您可能会收到此错误,因为您正在使用解释器,这是错误的。请改用ANTLRWorks的调试器。调试器将显示输入"\"a"
被解析得很好(按 CTRL + D 开始调试)。
此外,您的字符串规则可能更好看起来像这样:
STRING_LITERAL : '"' (~('"' | '\\' | '\r' | '\n') | '\\' ('"' | '\\'))* '"';
换句话说,字符串的内容为零或更多:
~('"' | '\\' | '\r' | '\n')
或
'\\' ('"' | '\\')
答案 1 :(得分:1)
尝试以下表达式:
STRING : '"' (options{greedy=false;}:( ~('\\'|'"') | ('\\' '"')))* '"';