我正在使用Antlr4与python3运行时 . 在我尝试解析的语言中,有许多操作(大约50个)接受 OPNAME [ parameter1, parameter2, parameter3 ] 形式的固定数量的参数
我曾经有一个像这样的规则的语法:
statement: OP1 '[' NUM ']'
| OP2 '[' NUM ',' NUM ']'
| OP3 '[' NUM ',' NUM ',' NUM ']'
| OP2or3 (('[' NUM ',' NUM ']')|('[' NUM ',' NUM ',' NUM ']'))
;
但是,为了更加清晰,我决定制作一个完全接受 n 参数的子规则 parameter[n] . 因此,我的(完整示例)语法看起来像这样:
grammar test;
program: (statement? NEWLINE)* EOF;
statement: OP1 parameter[1]
| OP2 parameter[2]
| OP3 parameter[3]
| OP2or3 (parameter[2]|parameter[3])
;
parameter[n]
locals[i = 1]
: '[' NUM
( ',' NUM {$i += 1} )*
']'
{$i == $