其他使用场景
ASN1其他使用场景 |
是否支持 |
示例 |
约束限制 |
|---|---|---|---|
赋值操作 |
支持 |
MyType ::= INTEGER value MyType ::= 10 |
无 |
别名 |
支持 |
MyInt1 ::= INTEGER(0..128) MyInt2 ::= MyInt1 MyInt3 ::= MyInt2 |
无 |
IMPORTS |
支持 |
-- 定义一个模块A A DEFINITIONS ::= BEGIN MyType ::= INTEGER END -- 定义一个模块B,引入了模块A的MyType B DEFINITIONS ::= BEGIN IMPORTS MyType FROM A; MyOtherType ::= MyType END |
IMPORTS语句实际不生效,默认导出所有类型。 |
EXPORTS |
支持 |
EXPORTS ALL; -- 导出所有类型 EXPORTS Type; -- 导出模块中的指定类型 |
EXPORTS语句实际不生效,默认导出所有类型。 不支持一起编译的不同模块有相同类型定义。 |
递归定义 |
不支持 |
RecursiveSeq ::= SEQUENCE { data INTEGER(0..128), next RecursiveSeq } |
无 |
环形引用 |
不支持 |
CircularSequence1 ::= SEQUENCE { name OCTET STRING, cs2 CircularSequence2 OPTIONAL } CircularSequence2 ::= SEQUENCE { cs1 CircularSequence1 } |
无 |
内部类型约束 |
支持 |
InnerTypeCstrType ::= SEQUENCE { a OCTET STRING(SIZE(1..3)), b INTEGER(10..20), c BOOLEAN OPTIONAL } InnerTypeCstrSeqType ::= InnerTypeCstrType (WITH COMPONENTS { a ABSENT, b (15..20) PRESENT, c OPTIONAL }) |
带有内部类型约束的类型将被当作引用类型使用,约束不生效。 |
内容约束 |
支持 |
ContentCstrType ::= SEQUENCE { data OCTET STRING (CONTAINING ContentCstrBoolType) } ContentCstrBoolType ::= BOOLEAN |
带有内容约束的成员,其在编解码过程中,内容不会被校验。 |
复杂类型嵌套 |
支持 |
MySeq ::= SEQUENCE { a SEQUENCE {} } |
复杂类型(SEQUENCE、CHOICE、SEQUENCE OF)之间支持最多嵌套30层。 |
约束引用已定义的值 |
支持 |
max INTEGER ::= 128 MyInt ::= INTEGER(0..max) value MyInt ::= 10 |
只支持INTEGER约束引用已定义的值。 |