每个重复的长度增加的数字块序列的语法规则

时间:2015-03-30 16:25:27

标签: antlr antlr4

我想生成一个解析规则(使用ANTLR 4),它定义了由':'分隔的重复二进制块链。

每个块比前一个块多一位数,从两位开始。例如:

01:010:0001:01010 ...

链可以有任意数量的这些块。

现在我已将规则定义为:

BIN : [0-1]+ ;
connections : BIN (':' BIN)* ;

我知道如何检查每个块至少有两个二进制数字,但不是正确的数字。 有没有办法让它更具体,使用ANTLR?

1 个答案:

答案 0 :(得分:1)

使用语义谓词,它看起来与此类似:

connections locals[int i] :
   {$i = 2;} BIN {check}? ({$i++;} ':' BIN {$check}?)* ;

BIN :
   [0-1]+ ;

其中check$BIN.getText().length() == $i(替换检查以使语法有效)。

另一种选择是生成一个解析树访问者并在遍历解析树时验证BIN节点。