def PathExpr(self): _token_ = self._peek("r'\\/'", "r'\\/\\/'", "r'\\('", 'FORWARD_AXIS_NAME', "r'@'", 'REVERSE_AXIS_NAME', "r'\\.\\.'", "r'\\$'", "r'\\.'", 'FUNCNAME', 'NUMBER', 'DQUOTE', 'SQUOTE', "r'processing-instruction\\s*\\('", "r'comment\\s*\\('", "r'text\\s*\\('", "r'node\\s*\\('", "r'\\*'", 'NCNAME') if _token_ == "r'\\/'": self._scan("r'\\/'") path = None if self._peek( "r'\\('", 'FORWARD_AXIS_NAME', "r'@'", 'REVERSE_AXIS_NAME', "r'\\.\\.'", "r'\\$'", "r'\\.'", 'FUNCNAME', 'NUMBER', 'DQUOTE', 'SQUOTE', "r'processing-instruction\\s*\\('", "r'comment\\s*\\('", "r'text\\s*\\('", "r'node\\s*\\('", "r'\\*'", 'NCNAME', "'\\|'", 'MUL_COMP', 'ADD_COMP', 'REL_COMP', 'EQ_COMP', "r'and'", "r'or'", 'END', "r'\\]'", "r'\\)'", "r'\\,'") not in [ "'\\|'", 'MUL_COMP', 'ADD_COMP', 'REL_COMP', 'EQ_COMP', "r'and'", "r'or'", 'END', "r'\\]'", "r'\\)'", "r'\\,'" ]: RelativePathExpr = self.RelativePathExpr() path = RelativePathExpr return X.AbsolutePathExpr(path) elif _token_ == "r'\\/\\/'": self._scan("r'\\/\\/'") RelativePathExpr = self.RelativePathExpr() step = X.AxisStep('descendant-or-self') RelativePathExpr.steps.insert(0, step) return X.AbsolutePathExpr(RelativePathExpr) else: RelativePathExpr = self.RelativePathExpr() return RelativePathExpr
def LocationPathPattern(self): _token_ = self._peek("r'\\/'", "r'\\/\\/'", "r'id'", "r'key'", "r'@'", "'child'", "'attribute'", "r'processing-instruction'", "r'comment'", "r'text'", "r'node'", "r'\\*'", 'NCNAME') if _token_ == "r'\\/'": self._scan("r'\\/'") path = None if self._peek("r'@'", "'child'", "'attribute'", "'\\|'", "r'processing-instruction'", "r'comment'", "r'text'", "r'node'", "r'\\*'", 'NCNAME', 'END') not in ["'\\|'", 'END']: RelativePathPattern = self.RelativePathPattern() path = RelativePathPattern return X.AbsolutePathExpr(path) elif _token_ not in ["r'id'", "r'key'"]: if self._peek("r'\\/\\/'", "r'@'", "'child'", "'attribute'", "r'processing-instruction'", "r'comment'", "r'text'", "r'node'", "r'\\*'", 'NCNAME') == "r'\\/\\/'": self._scan("r'\\/\\/'") RelativePathPattern = self.RelativePathPattern() step = X.AxisStep('descendant-or-self') RelativePathPattern.steps.insert(0, step) return X.AbsolutePathExpr(RelativePathPattern) else: # in ["r'id'", "r'key'"] IdKeyPattern = self.IdKeyPattern() expr = [IdKeyPattern] if self._peek("r'\\/'", "r'\\/\\/'", "'\\|'", 'END') in ["r'\\/'", "r'\\/\\/'"]: _token_ = self._peek("r'\\/'", "r'\\/\\/'") if _token_ == "r'\\/'": self._scan("r'\\/'") step = None else: # == "r'\\/\\/'" self._scan("r'\\/\\/'") step = X.AxisStep('descendant-or-self') RelativePathPattern = self.RelativePathPattern() if step: RelativePathPattern.steps.append(step) RelativePathPattern.steps.append(expr) expr = RelativePathPattern return X.AbsolutePathExpr(expr)
def AxisStep(self): _token_ = self._peek('FORWARD_AXIS_NAME', "r'@'", 'REVERSE_AXIS_NAME', "r'\\.\\.'", "r'processing-instruction'", "r'comment'", "r'text'", "r'node'", "r'\\*'", 'NCNAME') if _token_ not in ['REVERSE_AXIS_NAME', "r'\\.\\.'"]: ForwardStep = self.ForwardStep() step = ForwardStep else:# in ['REVERSE_AXIS_NAME', "r'\\.\\.'"] ReverseStep = self.ReverseStep() step = ReverseStep expr = X.AxisStep(*step) if self._peek("r'\\['", "r'\\/'", "r'\\/\\/'", "'\\|'", 'MUL_COMP', 'ADD_COMP', 'REL_COMP', 'EQ_COMP', "r'and'", "r'or'", 'END', "r'\\]'", "r'\\)'", "r'\\,'") == "r'\\['": PredicateList = self.PredicateList() expr = X.PredicateList(expr, PredicateList, step[0]) return expr
def RelativePathExpr(self): StepExpr = self.StepExpr() steps = [StepExpr] while self._peek("r'\\/'", "r'\\/\\/'", "'\\|'", 'MUL_COMP', 'ADD_COMP', 'REL_COMP', 'EQ_COMP', "r'and'", "r'or'", 'END', "r'\\]'", "r'\\)'", "r'\\,'") in ["r'\\/'", "r'\\/\\/'"]: _token_ = self._peek("r'\\/'", "r'\\/\\/'") if _token_ == "r'\\/'": self._scan("r'\\/'") else:# == "r'\\/\\/'" self._scan("r'\\/\\/'") steps.append(X.AxisStep('descendant-or-self')) StepExpr = self.StepExpr() steps.append(StepExpr) return X.PathExpr(steps)
def RelativePathPattern(self): StepPattern = self.StepPattern() steps = [StepPattern] while self._peek("r'\\/'", "r'\\/\\/'", "'\\|'", 'END') in ["r'\\/'", "r'\\/\\/'"]: _token_ = self._peek("r'\\/'", "r'\\/\\/'") if _token_ == "r'\\/'": self._scan("r'\\/'") else: # == "r'\\/\\/'" self._scan("r'\\/\\/'") steps.append(X.AxisStep('descendant-or-self')) StepPattern = self.StepPattern() steps.append(StepPattern) return X.PathExpr(steps)
def StepPattern(self): _token_ = self._peek("r'@'", "'child'", "'attribute'", "r'processing-instruction'", "r'comment'", "r'text'", "r'node'", "r'\\*'", 'NCNAME') if _token_ not in ["'child'", "'attribute'"]: AbbrevForwardStep = self.AbbrevForwardStep() step = AbbrevForwardStep else: # in ["'child'", "'attribute'"] ChildOrAttributeAxisStep = self.ChildOrAttributeAxisStep() step = ChildOrAttributeAxisStep expr = X.AxisStep(*step) if self._peek("r'\\['", "r'\\/'", "r'\\/\\/'", "'\\|'", 'END') == "r'\\['": PredicateList = self.PredicateList() expr = X.PredicateList(expr, PredicateList, step[0]) return expr
def ContextItemExpr(self): self._scan("r'\\.'") return X.AxisStep('self')