HOWTO解析游程长度编码的二进制子格式与ANTLR

问题描述:

假定下列输入:HOWTO解析游程长度编码的二进制子格式与ANTLR

AA:4:2:@[email protected]:2:a: 

的部分@ 5 @限定与5.长度的二进制子格式的开始子格式可以包含任何类型的字符的并可能包含主要格式的令牌。 (例如,AA是主格式中的关键字/标记)。

我想建立一个能够为整个二进制部分提取一个标记的词法分析器。

我已经尝试过几种方法(例如partials,sematic谓词),但我没有让他们以正确的方式一起工作。

最后,我自己找到了解决方案。

以下是在词法分析器定义

@members { 
    public int _binLength; 
} 

BINARYHEAD: '@' [0-9]+ '@' { _binLength = Integer.parseInt(getText().substring(1,getText().length()-1)); } -> pushMode(RAW) ; 

mode RAW; 

BINARY: .+ {getText().length() <= _binLength}? -> popMode; 

该溶液是基于在解析二进制字段的长度定义中设置一个额外的场的相关部分。之后,使用语义谓词将二进制内容的有效性限制为该字段的大小。

任何建议简化parseInt电话是值得欢迎的。