Exemple #1
0
 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
Exemple #2
0
 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)
Exemple #3
0
 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
Exemple #4
0
 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)
Exemple #5
0
 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)
Exemple #6
0
 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
Exemple #7
0
 def ContextItemExpr(self):
     self._scan("r'\\.'")
     return X.AxisStep('self')