setof_type = Suppress(SET) + Optional(size_constraint) + Suppress(OF) + (type_ | named_type)
choice_type = CHOICE + braced_list(named_type | extension_marker)
enumerated_type = ENUMERATED + braced_list(enumeration | extension_marker)
- bitstring_type = BIT_STRING + braced_list(named_number) + Optional(single_value_constraint | size_constraint)
+ bitstring_type = BIT_STRING + Optional(braced_list(named_number), default=[]) + Optional(single_value_constraint | size_constraint, default=None)
plain_integer_type = INTEGER + Optional(single_value_constraint)
restricted_integer_type = INTEGER + braced_list(named_number) + Optional(single_value_constraint)
boolean_type = BOOLEAN
def __str__(self):
named_value_list = ''
constraint = ''
+
if self.named_values:
named_value_list = ' { %s }' % ', '.join(map(str, self.named_values))
class BitStringType(SemaNode):
def __init__(self, elements):
self.type_name = elements[0]
- if len(elements) > 1:
- self.named_bits = [_create_sema_node(token) for token in elements[1]]
- else:
- self.named_bits = None
+ self.named_bits = [_create_sema_node(token) for token in elements[1]]
+ if elements[2]:
+ self.constraint = _create_sema_node(elements[2])
def __str__(self):
+ named_bit_list = ''
+ constraint = ''
+
if self.named_bits:
- named_bit_list = ', '.join(map(str, self.named_bits))
- return '%s { %s }' % (self.type_name, named_bit_list)
- else:
- return '%s' % self.type_name
+ named_bit_list = ' { %s }' % ', '.join(map(str, self.named_bits))
+
+ if self.constraint:
+ constraint = ' %s' % self.constraint
+
+ return '%s%s%s' % (self.type_name, named_bit_list, constraint)
__repr__ = __str__
ConstrainedOctetStr3 ::= OCTET STRING (SIZE(min..max))\r
\r
ConstrainedBitString1 ::= BIT STRING { one(1), two(2) } (SIZE(6))\r
+ ConstrainedBitString2 ::= BIT STRING (SIZE(6))\r
\r
-- TypeWithConstraint syntax for SET OF and SEQUENCE OF\r
SizedSetOf ::= SET SIZE(1..100) OF INTEGER\r