Как определить тип массива с помощью ANTLR 4? - PullRequest
1 голос
/ 08 мая 2020

В настоящее время я разрабатываю свой собственный язык (DSL) с помощью Antlr 4, и мне интересно, можно ли определить тип массива, например, например.

fragment DIGIT : [0-9];

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

1 Ответ

2 голосов
/ 08 мая 2020

Вы бы не определяли массив как токен (правило лексера), а скорее как правило парсера. И вы бы не ставили строки, целые числа и т. Д. c. в массиве, а скорее выражения (которые могут соответствовать строкам, целым числам и т. д. c.):

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]]
...