Java 读取ANTLR中的多行值,直到出现特殊符号
如何在ANTLR中读取多行文本直到出现特殊符号。如下文所示:-Java 读取ANTLR中的多行值,直到出现特殊符号,java,antlr,antlr4,antlrworks,Java,Antlr,Antlr4,Antlrworks,如何在ANTLR中读取多行文本直到出现特殊符号。如下文所示:- @Description(" Hi There I am. ") 我需要把它读为键->@Description和值->“你好,我在这里” 我用下面的语法试过了 KEY : '@' [a-zA-Z] (~[(\r\n] | '\\)')* ; VALUE : '(' ~[\r\n]* ; 我尝试了许多不同的价值语法,但没有成功 这里的lexer/parser分离可能会让您感到困惑。您只提供了一个示例,但我可以推断如下:
@Description("
Hi There I am.
")
我需要把它读为键->@Description和值->“你好,我在这里”
我用下面的语法试过了
KEY
: '@' [a-zA-Z] (~[(\r\n] | '\\)')*
;
VALUE
: '(' ~[\r\n]*
;
我尝试了许多不同的价值语法,但没有成功 这里的lexer/parser分离可能会让您感到困惑。您只提供了一个示例,但我可以推断如下:
声明:键'('STRING');
键:'@'[a-zA-Z]+;
字符串:“”(~“”)*“”;
WS:[\t\r\n]->跳过;
声明
是一个解析器规则。它由一个键
(@
后跟字母)、一个左括号、一个字符串
(引号之间的任何文本)和一个右括号组成。键
和字符串
是词法规则
请注意,上面的STRING
规则不允许您转义字符。如果您需要能够用反斜杠转义引号(以及反斜杠转义引号),请使用以下规则:
STRING:“”(“\\”[“\\\]\\;~”)*“”
值规则看起来很奇怪。请查看lexer模式,或者不要尝试仅使用两个lexer规则来解决它(即也添加解析器规则)。