private void CheckToken(XPathScanner.LexKind t)
 {
     if (this.scanner.Kind != t)
     {
         throw XPathException.Create("Xp_InvalidToken", this.scanner.SourceText);
     }
 }
Ejemplo n.º 2
0
		public static AstNode ParseXPathPattern(string xpathPattern) {
			XPathScanner scanner = new XPathScanner(xpathPattern);
			XPathParser  parser  = new XPathParser(scanner);
            AstNode result = parser.ParsePattern(null);
            if (scanner.Kind != XPathScanner.LexKind.Eof) {
                throw new XPathException(string.Format("'{0}' has an invalid token.", scanner.SourceText));
            }
			return result;
		}
Ejemplo n.º 3
0
		public static AstNode ParseXPathPattern(string xpathPattern) {
			XPathScanner scanner = new XPathScanner(xpathPattern);
			XPathParser  parser  = new XPathParser(scanner);
            AstNode result = parser.ParsePattern(null);
            if (scanner.Kind != XPathScanner.LexKind.Eof) {
                throw XPathException.Create(Res.Xp_InvalidToken, scanner.SourceText);
            }
			return result;
		}
Ejemplo n.º 4
0
        public QilNode Parse(XPathScanner scanner, IPatternBuilder ptrnBuilder)
        {
            Debug.Assert(this.scanner == null && this.ptrnBuilder == null);
            Debug.Assert(scanner != null && ptrnBuilder != null);
            QilNode result = null;

            ptrnBuilder.StartBuild();
            try {
                this.scanner     = scanner;
                this.ptrnBuilder = ptrnBuilder;
                result           = this.ParsePattern();
                this.scanner.CheckToken(LexKind.Eof);
            } finally {
                result = ptrnBuilder.EndBuild(result);
#if DEBUG
                this.ptrnBuilder = null;
                this.scanner     = null;
#endif
            }
            return(result);
        }
 private static bool IsStep(XPathScanner.LexKind lexKind)
 {
     if ((((lexKind != XPathScanner.LexKind.Dot) && (lexKind != XPathScanner.LexKind.DotDot)) && ((lexKind != XPathScanner.LexKind.At) && (lexKind != XPathScanner.LexKind.Axe))) && (lexKind != XPathScanner.LexKind.Star))
     {
         return (lexKind == XPathScanner.LexKind.Name);
     }
     return true;
 }
 private static bool IsPrimaryExpr(XPathScanner scanner)
 {
     return ((((scanner.Kind == XPathScanner.LexKind.String) || (scanner.Kind == XPathScanner.LexKind.Number)) || ((scanner.Kind == XPathScanner.LexKind.Dollar) || (scanner.Kind == XPathScanner.LexKind.LParens))) || (((scanner.Kind == XPathScanner.LexKind.Name) && scanner.CanBeFunction) && !IsNodeType(scanner)));
 }
 private static bool IsNodeType(XPathScanner scaner)
 {
     if (scaner.Prefix.Length != 0)
     {
         return false;
     }
     if ((!(scaner.Name == "node") && !(scaner.Name == "text")) && !(scaner.Name == "processing-instruction"))
     {
         return (scaner.Name == "comment");
     }
     return true;
 }
 private Axis.AxisType GetAxis(XPathScanner scaner)
 {
     object obj2 = AxesTable[scaner.Name];
     if (obj2 == null)
     {
         throw XPathException.Create("Xp_InvalidToken", this.scanner.SourceText);
     }
     return (Axis.AxisType) obj2;
 }
Ejemplo n.º 9
0
 void PassToken(XPathScanner.LexKind t)
 {
     CheckToken(t);
     NextLex();
 }
Ejemplo n.º 10
0
        // --------------- Helper methods ----------------------

        void CheckToken(XPathScanner.LexKind t)
        {
            if (_scanner.Kind != t)
            {
                throw XPathException.Create(SR.Xp_InvalidToken, _scanner.SourceText);
            }
        }
Ejemplo n.º 11
0
 private Axis.AxisType GetAxis(XPathScanner scaner) {
     Debug.Assert(scaner.Kind == XPathScanner.LexKind.Axe);
     object axis = AxesTable[scaner.Name];
     if (axis == null) {
         throw new XPathException(String.Format("'{0}' has an invalid token.", scanner.SourceText));
     }
     return (Axis.AxisType) axis;
 }
 public static AstNode ParseXPathPattern(string xpathPattern)
 {
     XPathScanner scanner = new XPathScanner(xpathPattern);
     AstNode node = new XPathParser(scanner).ParsePattern(null);
     if (scanner.Kind != XPathScanner.LexKind.Eof)
     {
         throw XPathException.Create("Xp_InvalidToken", scanner.SourceText);
     }
     return node;
 }
Ejemplo n.º 13
0
 private static bool IsNodeType(XPathScanner scaner)
 {
     return (
         scaner.Prefix.Length == 0 && (
             scaner.Name == "node" ||
             scaner.Name == "text" ||
             scaner.Name == "processing-instruction" ||
             scaner.Name == "comment"
         )
     );
 }
Ejemplo n.º 14
0
 private XPathParser(XPathScanner scanner)
 {
     _scanner = scanner;
 }
Ejemplo n.º 15
0
 private Axis.AxisType GetAxis(XPathScanner scaner) {
     Debug.Assert(scaner.Kind == XPathScanner.LexKind.Axe);
     object axis = AxesTable[scaner.Name];
     if (axis == null) {
         throw XPathException.Create(Res.Xp_InvalidToken, scanner.SourceText);
     }
     return (Axis.AxisType) axis;
 }
 private XPathParser(XPathScanner scanner)
 {
     this.scanner = scanner;
 }
Ejemplo n.º 17
0
        // --------------- Helper methods ----------------------

        void CheckToken(XPathScanner.LexKind t) {
            if (this.scanner.Kind != t) {
                throw new XPathException(String.Format("'{0}' has an invalid token.", this.scanner.SourceText));
            }
        }
Ejemplo n.º 18
0
 private static bool IsStep(XPathScanner.LexKind lexKind)
 {
     return (
         lexKind == XPathScanner.LexKind.Dot ||
         lexKind == XPathScanner.LexKind.DotDot ||
         lexKind == XPathScanner.LexKind.At ||
         lexKind == XPathScanner.LexKind.Axe ||
         lexKind == XPathScanner.LexKind.Star ||
         lexKind == XPathScanner.LexKind.Name          // NodeTest is also Name
     );
 }
Ejemplo n.º 19
0
 void NextLex(XPathScanner.LexKind t) {
     Debug.Assert(this.scanner.Kind == t);
     NextLex();
 }
 private void PassToken(XPathScanner.LexKind t)
 {
     this.CheckToken(t);
     this.NextLex();
 }
Ejemplo n.º 21
0
 private static bool IsPrimaryExpr(XPathScanner scanner)
 {
     return (
         scanner.Kind == XPathScanner.LexKind.String ||
         scanner.Kind == XPathScanner.LexKind.Number ||
         scanner.Kind == XPathScanner.LexKind.Dollar ||
         scanner.Kind == XPathScanner.LexKind.LParens ||
         scanner.Kind == XPathScanner.LexKind.Name && scanner.CanBeFunction && !IsNodeType(scanner)
     );
 }