如何使用ANTLR在转义符之间解析单个转义符



我有一个类似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
)+
;

相关内容

  • 没有找到相关文章

最新更新