'construct a new Tag instance.
this constructor not called directly, and is only called
by subclasses.
:param keyword: the tag keyword
:param attributes: raw dictionary of attribute key/value pairs
:param expressions: a set of identifiers that are legal attributes,
which can also contain embedded expressions
:param nonexpressions: a set of identifiers that are legal
attributes, which cannot contain embedded expressions
:param \**kwargs:
other arguments passed to the Node superclass (lineno, pos)'

def __init__(self, keyword, attributes, expressions, nonexpressions, required, **kwargs):

    super(Tag, self).__init__(**kwargs)
    self.keyword = keyword
    self.attributes = attributes
    self._parse_attributes(expressions, nonexpressions)
    missing = [r for r in required if (r not in self.parsed_attributes)]
    if len(missing):
        raise exceptions.CompileException(('Missing    attribute(s):    %s' % ','.join([repr(m) for m in missing])), **self.exception_kwargs)
    self.parent = None
    self.nodes = []
