2017-01-03 114 views
0

我有一个简单的语法像这样了Java Antlr4贪含STRING_LITERAL “?

"STRING_LITERAL"(, "STRING_LITERAL")? 

在lexer.g4,我定义STRING_LITERAL这样

STRING_LITERAL: '"'[a-zA-Z0-9!#$&.+-^_{}:\\\" ]+'"'; 

然而,似乎它将忽略2个单词之间的逗号(“,”),就像本输入测试一样:“abc”,“”cde \“” Anltr4会将这两个STRING_LITERAL读取为1个文本而不是2个文本

List<TerminalNode> params = ctx.STRING_LITERAL(); // Only have 1 String element ("abc", "\"cde\"") 

如何在STRING_LIERAL中使用带有\“的antr4并用逗号(,)分割它,那么params将包含2个元素(”abc“和”\“cde \”“)?

回答

1

我用'"' ('\\"'|.)*? '"'作为我的字符串的词法规则,然后一个PARAMS定义中使用:

actionExpressions 
    : exp += expression (COMMA exp += expression)* 
    ; 

expression也能像整数,布尔,字符串,标识等任何东西。您不应该尝试将分割整合到STRING字面定义中。一个字符串只是一个字符序列。

在我的词法分析规则中,是“处理”非贪婪。