【问题标题】:ASN.1 compiler error token "SYNTAX" unexpectedASN.1 编译器错误令牌“SYNTAX”意外
【发布时间】:2013-08-15 15:13:53
【问题描述】:

我目前正在尝试编译 ASN.1 代码的 sn-p。它看起来如下:

RFC1213-MIB DEFINITIONS ::= BEGIN
    IMPORTS 
        experimental FROM RFC1155-SMI
        OBJECT-TYPE FROM RFC-1212;

    mypersonaltest OBJECT IDENTIFIER ::= { experimental 1 }

    tester      OBJECT-TYPE 
        SYNTAX      INTEGER
        ACCESS      read-write
        STATUS      optional
        DESCRIPTION "This is a test"
        ::= { mypersonaltest 1 }

END

现在我总是在SYNTAX INTEGER 上遇到错误:

ASN.1 grammar parse error near line 9 (token "SYNTAX"): syntax error, unexpected TOK_SYNTAX, expecting TOK_PPEQ

实际上,根据我在这里的示例,这应该可以工作。我做错了什么?

【问题讨论】:

    标签: snmp asn.1 mib


    【解决方案1】:

    这看起来像是该规范的旧版本,它使用 ASN.1 宏符号而不是 ASN.1 信息对象类。 MACRO 符号于 1994 年从 ASN.1 中删除。请考虑找到使用信息对象类而不是过时的 MACRO 符号的规范的更新版本。

    您使用的工具可能不支持 ASN.1 MACRO 表示法(1994 年从 ASN.1 中删除)。您可以尝试使用http://asn1-playground.oss.com/ 的免费在线编译器,我相信它仍然支持 MACRO 表示法。请注意,编译器必须在解析“tester”(使用 OBJECT-TYPE 宏)​​之前看到 OBJECT-TYPE 的定义。

    我要重复一遍,如果您使用 ASN.1 规范的版本,该版本使用信息对象类而不是过时的 ASN.1 MACRO 表示法,那么您将为自己省去很多麻烦。

    【讨论】:

    • 以上是一个SNMP MIB模块,是用SMI语言编写的。 SMI 基于 ASN.1,但不是真正的 ASN.1。更像是“ASN.1”(空中报价)。以上可能是真正的 ASN.1 的好建议,但不适用于 SMI。特别是,编写 MIB 模块以尝试使用 MIB 模块中不允许/允许的更高版本 ASN.1 的功能(例如信息对象类)不会为您省去任何麻烦。实际上,发帖人的错误很可能是由实际的 ASN.1 编译器产生的,发帖人应该使用能够理解 SMI 的编译器。
    • 我看到 RFC 1213 的 ASN.1 版本已更新为使用 1994 或更高版本的 ASN.1 与信息对象类而不是 MACRO。我不知道该规范的状态,如果它是使 SNMP 现代化的官方尝试,但我确实理解您所说的 SMI 不是 ASN.1。这导致人们在需要 MIB 编译器而不是 ASN.1 编译器时尝试使用 ASN.1 工具来处理 MIB。
    【解决方案2】:

    应该是OBJECT-TYPE,而不是OBJECT TYPE。 MIB 文档有问题,您应该尝试找到它的正确版本。

    【讨论】:

    • 啊!对不起,我复制错了。我已经在提到它的任何地方得到了OBJECT-TYPE。编辑了问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 1970-01-01
    相关资源
    最近更新 更多