如何使用 ANTLR 4 定义数组类型?

How to define an array type with ANTLR 4?

我目前正在使用 Antlr 4 开发我自己的语言 (DSL),我想知道是否可以定义一个数组类型,例如。

fragment DIGIT : [0-9];

STRING : '"' ( ~ '"' )* '"' ; // match string content
BOOLEAN: ('true' | 'fase');
INTEGER: DIGIT+ ;
DOUBLE: DIGIT+ ('.' DIGIT+)*;
// x = ["string","string2",...]
ARRAY: ???

您不会将数组定义为标记(词法分析器规则),而是定义为解析器规则。你不会在数组中放入字符串、整数等,而是表达式(可以匹配字符串、整数等):

array
 : '[' ( expression ( ',' expression )* )? ']'
 ;

expression
 : expression ( '*' | '/' ) expression
 | expression ( '+' | '-' ) expression
 | ... all other kind of expressions ...
 | STRING
 | BOOLEAN
 | INTEGER
 | DOUBLE
 | array
 ;

这样,array 将匹配如下内容:

["text", 42, false, 1 + 2 * 3, [1, 2, 3]]