每次重复长度增加的数字块序列的语法规则
Grammar rule for sequence of blocks of digits that increase in length each repetition
我想生成一个解析规则(使用 ANTLR 4)来定义由“:”分隔的重复二进制块链。
每块比前一块多一位,从两位数开始。例如:
01:010:0001:01010 ...
链可以有任意数量的这些块。
现在我将规则定义为:
BIN : [0-1]+ ;
connections : BIN (':' BIN)* ;
我知道如何让它检查每个块至少有两个二进制数字,但不是正确的数字。
有什么方法可以使它更具体,使用 ANTLR?
使用语义谓词,它看起来类似于:
connections locals[int i] :
{$i = 2;} BIN {check}? ({$i++;} ':' BIN {$check}?)* ;
BIN :
[0-1]+ ;
其中 check
是 $BIN.getText().length() == $i
(替换检查以使语法有效)。
另一种选择是生成解析树访问者并在遍历解析树时验证 BIN 节点。
我想生成一个解析规则(使用 ANTLR 4)来定义由“:”分隔的重复二进制块链。
每块比前一块多一位,从两位数开始。例如:
01:010:0001:01010 ...
链可以有任意数量的这些块。
现在我将规则定义为:
BIN : [0-1]+ ;
connections : BIN (':' BIN)* ;
我知道如何让它检查每个块至少有两个二进制数字,但不是正确的数字。 有什么方法可以使它更具体,使用 ANTLR?
使用语义谓词,它看起来类似于:
connections locals[int i] :
{$i = 2;} BIN {check}? ({$i++;} ':' BIN {$check}?)* ;
BIN :
[0-1]+ ;
其中 check
是 $BIN.getText().length() == $i
(替换检查以使语法有效)。
另一种选择是生成解析树访问者并在遍历解析树时验证 BIN 节点。