给出以下输入:
AA:4:2:@5@xxAAx:2:a:
@ 5 @部分定义了长度为5的二进制子格式的开头。子格式可以包含任何类型的字符,并且可能包含来自主格式的标记。 (例如,AA是主格式中的关键字/标记)。
我想构建一个能够为整个二进制部分提取一个标记的词法分析器。
我已经尝试了几种方法(例如,偏见,语义谓词),但我没有让它们以正确的方式一起工作。
答案 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
电话的建议。