value = builtin_value | defined_value | object_identifier_value
+ # definitive identifier value
+ definitive_number_form = Unique(number)
+ definitive_name_and_number_form = name_form + Suppress('(') + definitive_number_form + Suppress(')')
+ definitive_objid_component = definitive_name_and_number_form | name_form | definitive_number_form
+ definitive_objid_component_list = OneOrMore(definitive_objid_component)
+ definitive_identifier = Optional(Suppress('{') + definitive_objid_component_list + Suppress('}'))
+
# tags
class_ = UNIVERSAL | APPLICATION | PRIVATE
class_number = Unique(number) # todo: consider defined values from 30.1
module_body = (assignment_list | empty)
module_defaults = Suppress(tag_default + extension_default) # we don't want these in the AST
- module_definition = module_reference + DEFINITIONS + module_defaults + '::=' + BEGIN + module_body + END
+ module_identifier = module_reference + definitive_identifier
+ module_definition = module_identifier + DEFINITIONS + module_defaults + '::=' + BEGIN + module_body + END
module_definition.ignore(comment)
number_form.setParseAction(annotate('NumberForm'))
name_and_number_form.setParseAction(annotate('NameAndNumberForm'))
object_identifier_value.setParseAction(annotate('ObjectIdentifierValue'))
+ definitive_identifier.setParseAction(annotate('DefinitiveIdentifier'))
+ definitive_number_form.setParseAction(annotate('DefinitiveNumberForm'))
+ definitive_name_and_number_form.setParseAction(annotate('DefinitiveNameAndNumberForm'))
return module_definition
but not the other way around.
"""
+class SemaNode(object):
+ def children(self):
+ raise NotImplementedError()
+
+
class Module(object):
def __init__(self, elements):
- module_reference, _, _, _, module_body, _ = elements
+ print(elements)
+ module_reference, definitive_identifier, _, _, _, module_body, _ = elements
_assert_annotated_token(module_reference)
_assert_annotated_token(module_body)
+ # Ignore the definitive identifier for now,
+ # maybe expose it from the Module if it comes to any use.
+
self.name = module_reference.elements[0]
self.assignments = [_create_sema_node(token) for token in module_body.elements]
self._user_types = {}