如何使用antlr

时间:2017-05-31 09:47:52

标签: antlr antlr4

给出以下输入:

AA:4:2:@5@xxAAx:2:a:

@ 5 @部分定义了长度为5的二进制子格式的开头。子格式可以包含任何类型的字符,并且可能包含来自主格式的标记。 (例如,AA是主格式中的关键字/标记)。

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

我已经尝试了几种方法(例如,偏见,语义谓词),但我没有让它们以正确的方式一起工作。

1 个答案:

答案 0 :(得分:0)

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

以下是词法分析器定义的相关部分

@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电话的建议。