如何编写规则来定义 ANTLR 中的方法
How to write a rule to define a method in ANTLR
我正在使用 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]+ ;
您的语法允许 study(x=1x=2)
,因为 assign*
匹配 x=1x=2
。如果您不想允许这样的输入,您应该删除 assign*
选项。要允许空参数列表,您可以将括号之间的所有内容设为可选:
study: 'study' '(' (assign (',' assign)*)? ')' NEWLINE;
我正在使用 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]+ ;
您的语法允许 study(x=1x=2)
,因为 assign*
匹配 x=1x=2
。如果您不想允许这样的输入,您应该删除 assign*
选项。要允许空参数列表,您可以将括号之间的所有内容设为可选:
study: 'study' '(' (assign (',' assign)*)? ')' NEWLINE;