Как написать правило для определения метода в ANTLR - PullRequest
0 голосов
/ 30 марта 2020

Я создаю DSL с ANTLR и хочу определить следующий синтаксис

// study without parameters
study()
// study  with a single parameter
study(x = 1)
// study with several parameters
study(x = 1, x = 2)

здесь мой грамматик, он допускает следующий ввод: study(x=1x=2)

study: 'study' '(' ( assign* | ( assign (',' assign)*) ) ')' NEWLINE;
assign: ID '=' (INT  | DATA );
INT :   [0-9]+ ;
DATA    : '"' ID '"' | '"' INT '"';
ID  :   [a-zA-Z]+ ;

1 Ответ

0 голосов
/ 30 марта 2020

Ваша грамматика допускает study(x=1x=2), потому что assign соответствует x=1x=2. Если вы не хотите разрешать такой ввод, вы должны удалить альтернативу assign*. Чтобы разрешить пустые списки параметров, вы можете просто сделать все, что в скобках, необязательным:

study: 'study' '(' (assign (',' assign)*)? ')' NEWLINE;
...