如何编写规则以在ANTLR中定义方法

问题描述 投票:0回答:1

我正在使用ANTLR创建DSL,并且我想定义以下语法

// 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]+ ;
antlr antlr4
1个回答
0
投票

您的语法允许study(x=1x=2),因为assignx=1x=2匹配。如果您不想允许这样的输入,则应删除assign*替代项。要允许空参数列表,您只需将括号之间的所有内容设为可选:

study: 'study' '(' (assign (',' assign)*)? ')' NEWLINE;
© www.soinside.com 2019 - 2024. All rights reserved.