当前位置: 首页 > 知识库问答 >
问题:

如何使用antlr解析运行长度编码的二进制子格式

岑炯
2023-03-14

给出以下输入:

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

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

我想构建一个lexer,它能够为整个二进制部分提取一个令牌。

我已经尝试了几种方法(例如分部谓词、语义谓词),但我没有让它们以正确的方式协同工作。

共有1个答案

干亮
2023-03-14

最后我自己找到了解决办法。

以下是lexer定义的相关部分

@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调用的建议。

 类似资料:
  • 问题内容: 我正在尝试使用Avro来读取和写入Kafka的邮件。有没有人有使用Avro二进制编码器对将放入消息队列中的数据进行编码/解码的示例? 我需要的是Avro而不是Kafka。或者,也许我应该考虑其他解决方案?基本上,我试图在空间方面找到一种更有效的JSON解决方案。刚刚提到了Avro,因为它可以比JSON紧凑。 问题答案: 我终于想起要询问Kafka邮件列表,并得到以下答复,效果很好。 是

  • 我已经尝试了整整一周使用antlr构建一个语法,允许我解析电子邮件消息。 我的目标不是将整个电子邮件彻底解析为令牌,而是将其分解为相关部分。 这是我必须处理的文档格式。描述不属于消息一部分的内联注释: 我面临的问题如下: 我没有想出一个好方法来跳过消息开头的文本,并在找到标记后才开始应用解析规则。截面类型1 捕获节开始和句子标记之间节内的所有文本 在SECTION\u结束标记之后,忽略后面的所有文

  • 本文向大家介绍如何使用nodejs对base64进行编解码?相关面试题,主要包含被问及如何使用nodejs对base64进行编解码?时的应答技巧和注意事项,需要的朋友参考一下 轮子, https://www.npmjs.com/package/js-base64

  • 我试图防止CRLF注入(在用户输入很少的url中),并试图对url中的用户输入进行编码。我知道我也可以使用输入验证,但如果我使用ESAPI编码器,它是否有相应的解码器?如果它有,那么它是什么?如果不是,那么可以做什么来执行相同的编码和解码?

  • 问题内容: 我当时用salt实现密码哈希,所以我以二进制形式生成了salt,对密码进行了哈希处理,对base64进行了编码,然后将salt存储到数据库中。 现在,当我检查密码时,应该将盐解码回二进制数据,使用它来哈希提供的密码,对结果进行base64编码,并检查结果是否与数据库中的结果匹配。 问题是,我找不到将盐解码回二进制数据的方法。我使用Buffer.toString方法对它们进行了编码,但似

  • 本文向大家介绍使用base64对图片的二进制进行编码并用ajax进行显示,包括了使用base64对图片的二进制进行编码并用ajax进行显示的使用技巧和注意事项,需要的朋友参考一下 使用base64对图片的二进制进行编码并用ajax进行显示 有时候我们需要动态的将图片的二进制在页面上进行显示,如我们需要弄一个验证码的功能,那么如果我们的验证码的图片在后台得到的是该图片的二进制,那么当我们需要在页面上