我有一个像这样的简单语法
"STRING_LITERAL"(, "STRING_LITERAL")?
在lexer.g4中,我像这样定义STRING_LITERAL
STRING_LITERAL: '"'[a-zA-Z0-9!#$&.+-^_{}:\\\" ]+'"';
但是,它似乎会忽略两个单词之间的逗号(“,”),就像输入测试一样:“abc”,“\”cde \“” Anltr4将这两个STRING_LITERALs读作1个文本而不是2个文本
List<TerminalNode> params = ctx.STRING_LITERAL(); // Only have 1 String element ("abc", "\"cde\"")
如何在STRING_LIERAL中使用带有\“的antr4并用逗号(,)分隔它,然后params将包含2个元素(”abc“和”\“cde \”“)而不是?
答案 0 :(得分:1)
我使用'"' ('\\"'|.)*? '"'
作为我的STRING词法分析器规则,然后在params定义中使用它:
actionExpressions
: exp += expression (COMMA exp += expression)*
;
expression
可以是整数,布尔值,字符串,ID等等。您不应该尝试在STRING文字定义中集成拆分。字符串只是一系列字符。
在我的词法规则中?是&#34;处理&#34;非贪婪。