读取ANTLR中的多行值,直到出现特殊符号

时间:2014-11-28 12:14:54

标签: java antlr antlr4 antlrworks

如何在ANTLR中读取多行文本,直到出现特殊符号。如下文所示: -

@Description("
Hi There I am.
")

我需要将其读作键 - > @Description 值 - > "您好我在"

我尝试了以下语法

KEY
 : '@' [a-zA-Z] (~[(\r\n] | '\\)')*
 ;


VALUE
 : '(' ~[\r\n]*
 ;

我尝试了很多VALUE语法的变种,但没有运气。

1 个答案:

答案 0 :(得分:1)

您可能会对此处的词法分析器/解析器分离感到困惑。您只提供了一个示例,但我可以推断出以下内容:

declaration: KEY '(' STRING ')' ;
KEY : '@' [a-zA-Z]+ ;
STRING: '"' (~'"')* '"' ;
WS: [ \t\r\n] -> skip;

declaration是一个解析器规则。它由KEY@后跟字母),左括号,STRING(引号之间的任何文本)和右括号组成。 KEYSTRING是词法分析器规则。

请注意,上面的STRING规则不允许您转义字符。如果您需要能够使用反斜杠(以及带有反斜杠的反斜杠)来转义引号,请改用以下规则:

STRING: '"' ('\\' ["\\] | ~'"')* '"'