def parse(self, scope):
names = []<EOL>name = []<EOL>self._subp = ('<STR_LIT>', '<STR_LIT>', '<STR_LIT>',<EOL>'<STR_LIT>', '<STR_LIT>')<EOL>if self.tokens and hasattr(self.tokens, '<STR_LIT>'):<EOL><INDENT>self.tokens = list(<EOL>utility.flatten([<EOL>id.split() + ['<STR_LIT:U+002C>']<EOL>for id in self.tokens.parse(scope).split('<STR_LIT:U+002C>')<EOL>]))<EOL>self.tokens.pop()<EOL><DEDENT>if self.tokens and any(hasattr(t, '<STR_LIT>') for t in self.tokens):<EOL><INDENT>tmp_tokens = []<EOL>for t in self.tokens:<EOL><INDENT>if hasattr(t, '<STR_LIT>'):<EOL><INDENT>tmp_tokens.append(t.parse(scope))<EOL><DEDENT>else:<EOL><INDENT>tmp_tokens.append(t)<EOL><DEDENT><DEDENT>self.tokens = list(utility.flatten(tmp_tokens))<EOL><DEDENT>if self.tokens and self.tokens[<NUM_LIT:0>] in self._subp:<EOL><INDENT>name = list(utility.flatten(self.tokens))<EOL>self.subparse = True<EOL><DEDENT>else:<EOL><INDENT>self.subparse = False<EOL>for n in utility.flatten(self.tokens):<EOL><INDENT>if n == '<STR_LIT:*>':<EOL><INDENT>name.append('<STR_LIT>')<EOL><DEDENT>elif n in '<STR_LIT>':<EOL><INDENT>if name and name[-<NUM_LIT:1>] == '<STR_LIT:U+0020>':<EOL><INDENT>name.pop()<EOL><DEDENT>name.append('<STR_LIT>' % n)<EOL><DEDENT>elif n == '<STR_LIT:U+002C>':<EOL><INDENT>names.append(name)<EOL>name = []<EOL><DEDENT>else:<EOL><INDENT>name.append(n)<EOL><DEDENT><DEDENT><DEDENT>names.append(name)<EOL>parsed = self.root(scope, names) if scope else names<EOL>def replace_variables(tokens, scope):<EOL><INDENT>return [<EOL>scope.swap(t)<EOL>if (utility.is_variable(t) and not t in reserved.tokens) else t<EOL>for t in tokens<EOL>]<EOL><DEDENT>parsed = [<EOL>list(utility.flatten(replace_variables(part, scope)))<EOL>for part in parsed<EOL>]<EOL>self.parsed = [[<EOL>i for i, j in utility.pairwise(part)<EOL>if i != '<STR_LIT:U+0020>' or (j and '<STR_LIT:?>' not in j)<EOL>] for part in parsed]<EOL>return self<EOL>
Parse node. Block identifiers are stored as
        strings with spaces replaced with ?
        args:
            scope (Scope): Current scope
        raises:
            SyntaxError
        returns:
            self