0

我正在尝试使用从 github (v 1.1) 编译的 preon 来解析从嵌入式 C++ 应用程序获得的消息。我在我的项目中包含了 antlr 3.3-complete 版本。我将以下类定义为网络消息的标头:

public class Header {
    @BoundNumber(byteOrder = org.codehaus.preon.buffer.ByteOrder.BigEndian)
    public MessageType MsgType;
    @BoundNumber(byteOrder = org.codehaus.preon.buffer.ByteOrder.BigEndian)
    public int MsgNo;
    @BoundNumber(byteOrder = org.codehaus.preon.buffer.ByteOrder.BigEndian)
    public int RspNo;
    @BoundNumber(byteOrder = org.codehaus.preon.buffer.ByteOrder.BigEndian)
    public int Length;
    }

MessageType 枚举如下:

public enum MessageType{
@BoundEnumOption(0x0000) Dummy1, 
@BoundEnumOption(0x0001) Dummy2
}

我尝试将接收到的网络缓冲区转换如下:

Codec<Header> headerCodec = Codecs.create(Header.class);
Header h = Codecs.decode(headerCodec, headerData);
System.out.println(h);

我收到以下 antlr 错误。我的定义或包含的软件包有问题吗?

第 1:0 行在输入“< EOF >”处没有可行的替代方案

谢谢

4

1 回答 1

0

我发现了问题。对于枚举,您似乎必须在 BoundNumber 注释中显式提供大小值,如下所示:

@BoundNumber(ByteOrder.BigEndian, size="32")
public MessageType MsgType;
于 2014-03-04T13:10:09.927 回答