def PATH(self, _parent=None): _context = self.Context(_parent, self._scanner, self._pos, 'PATH', []) _token = self._peek('"/"', '"//"') if _token == '"/"': self._scan('"/"') result = _Location() else: # == '"//"' self._scan('"//"') result = _AnyLocation() _token = self._peek('IDENTIFIER', 'WILDCARD') if _token == 'IDENTIFIER': IDENTIFIER = self._scan('IDENTIFIER') result.elementName = IDENTIFIER else: # == 'WILDCARD' WILDCARD = self._scan('WILDCARD') result.elementName = None while self._peek('"\\["', 'END', '"/"', '"//"') == '"\\["': self._scan('"\\["') PREDICATE = self.PREDICATE(_context) result.predicates.append(PREDICATE) self._scan('"\\]"') if self._peek() not in ['"\\["', 'END', '"/"', '"//"']: raise SyntaxError(charpos=self._scanner.get_prev_char_pos(), context=_context, msg='Need one of ' + ', '.join(['"\\["', 'END', '"/"', '"//"'])) return result