named_number_value = Suppress('(') + signed_number + Suppress(')')
named_number = identifier + named_number_value
- enumeration = named_number | identifier
+ named_nonumber = identifier.copy()
+ enumeration = named_number | named_nonumber
set_type = SET + braced_list(component_type | extension_marker)
sequence_type = SEQUENCE + braced_list(component_type | extension_marker)
sequenceof_type.setParseAction(annotate('SequenceOfType'))
setof_type.setParseAction(annotate('SetOfType'))
named_number.setParseAction(annotate('NamedValue'))
+ named_nonumber.setParseAction(annotate('NamedValue'))
constraint.setParseAction(annotate('Constraint'))
size_constraint.setParseAction(annotate('SizeConstraint'))
component_type.setParseAction(annotate('ComponentType'))
self.type_decl = _create_sema_node(type_name)
if isinstance(value, parser.AnnotatedToken):
- self.value = _create_sema_node(value)
+ self.value = _create_sema_node(value)
else:
self.value = value
self.type_name = elements[0]
if len(elements) > 1:
self.named_values = [_create_sema_node(token) for token in elements[1]]
+ for idx,n in enumerate(self.named_values):
+ if isinstance(n, NamedValue) and n.value is None:
+ if idx == 0:
+ n.value = str(0)
+ else:
+ n.value = str(int(self.named_values[idx-1].value) + 1)
else:
self.named_values = None
class NamedValue(object):
def __init__(self, elements):
- identifier_token, value_token = elements
- self.identifier = identifier_token.elements[0]
- self.value = value_token.elements[0]
+ if len(elements) == 1:
+ identifier_token = elements[0]
+ self.identifier = identifier_token
+ self.value = None
+ else:
+ identifier_token, value_token = elements
+ self.identifier = identifier_token.elements[0]
+ self.value = value_token.elements[0]
def references(self):
# TODO: This appears to never be called. Investigate.