Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 读取ANTLR中的多行值,直到出现特殊符号_Java_Antlr_Antlr4_Antlrworks - Fatal编程技术网

Java 读取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分离可能会让您感到困惑。您只提供了一个示例,但我可以推断如下:

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

@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规则来解决它(即也添加解析器规则)。