import re
from copy import copy
-from pyparsing import Keyword, Literal, Word, OneOrMore, Combine, Regex, Forward, Optional, Group, Suppress, delimitedList, cStyleComment, nums, alphanums, empty, srange, dblQuotedString
+from pyparsing import Keyword, Literal, Word, OneOrMore, ZeroOrMore, Combine, Regex, Forward, Optional, Group, Suppress, delimitedList, cStyleComment, nums, alphanums, empty, srange, dblQuotedString
__all__ = ['parse_asn1', 'AnnotatedToken']
value_assignment = valuereference + type_ + '::=' + value
assignment = type_assignment | value_assignment
- assignment_list = OneOrMore(assignment)
+ assignment_list = ZeroOrMore(assignment)
assigned_identifier = Optional(object_identifier_value | defined_value)
global_module_reference = module_reference + assigned_identifier
exports = Optional(Suppress(EXPORTS) + symbol_list + Suppress(';'))
imports = Optional(Suppress(IMPORTS) + symbols_imported + Suppress(';'))
- module_body = (exports + imports + assignment_list) | empty
+ module_body = (exports + imports + assignment_list)
module_defaults = Suppress(tag_default + extension_default) # we don't want these in the AST
module_identifier = module_reference + definitive_identifier
module_definition = module_identifier + DEFINITIONS + module_defaults + '::=' + BEGIN + module_body + END
self._user_types = {}
module_reference, _, _, _, _, module_body, _ = elements
- self.name = module_reference.elements[0]
+ exports, imports, assignments = module_body.elements
- if module_body.elements:
- _, _, assignments = module_body.elements
- self.assignments = [_create_sema_node(token) for token in assignments.elements]
- else:
- self.assignments = []
+ self.name = module_reference.elements[0]
+ self.assignments = [_create_sema_node(token) for token in assignments.elements]
def user_types(self):
if not self._user_types: