我有一个类似RANDOM = "SOMEGIBBERISH ("DOG CAT-DOG","DOG CAT-DOG")"
的字符串。对于带引号的字符串文字,我使用:
StringLiteralSQ : UnterminatedStringLiteralSQ ''' ;
UnterminatedStringLiteralSQ : ''' (~['rn] | '\' (. | EOF))* ;
StringLiteralDQ : UnterminatedStringLiteralDQ '"' ;
UnterminatedStringLiteralDQ : '"' (~[rn] | '\' (. | EOF))* ;
这将解析上面提到的String。我需要将它们的单词识别为逗号分隔的标记,如下面的DOG CAT-DOG。为此,我使用了类似的东西
options : name EQUALS value
| OPTIONS L_PAREN (name EQUALS value) (COMMA (name EQUALS value)* R_PAREN
;
然而,当我制作这种格式的字符串RANDOM = "SOMEGIBBERISH ("DOG CAT-DOG"DOG CAT-DOG")"
时,它会失败,并出现内存不足错误。
我想解析我以前解析过的字符串,也解析这种字符串("DOG CAT-DOG"DOG CAT-DOG")
,并将其视为单个令牌。我该怎么做?
你的问题有点令人困惑,所以我不确定我是否理解你想要的。您要求处理转义字符,但没有显示任何使用转义的输入。
然而,我认为你把事情搞得太复杂了。查看其他语法,了解它们是如何定义字符串标记的,包括转义处理。下面是一个典型的例子:
fragment SINGLE_QUOTE: ''';
fragment DOUBLE_QUOTE: '"';
DOUBLE_QUOTED_TEXT: (
DOUBLE_QUOTE ('\'? .)*? DOUBLE_QUOTE
)+
;
SINGLE_QUOTED_TEXT: (
SINGLE_QUOTE ('\'? .)*? SINGLE_QUOTE
)+
;