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(Res.Xp_InvalidToken, scanner.SourceText); } return result; }
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) { return( scaner.Prefix.Length == 0 && ( scaner.Name == "node" || scaner.Name == "text" || scaner.Name == "processing-instruction" || scaner.Name == "comment" ) ); }
private Axis.AxisType GetAxis(XPathScanner scaner) { Debug.Assert(scaner.Kind == XPathScanner.LexKind.Axe); object axis = AxesTable[scaner.Name]; if (axis == null) { throw new XPathException(Res.Xp_InvalidToken, scanner.SourceText); } return((Axis.AxisType)axis); }
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(Res.Xp_InvalidToken, scanner.SourceText); } return(result); }
private XPathParser(XPathScanner scanner) { this.scanner = scanner; }
private Axis.AxisType GetAxis(XPathScanner scaner) { Debug.Assert(scaner.Kind == XPathScanner.LexKind.Axe); object axis = AxesTable[scaner.Name]; if (axis == null) { throw new XPathException(Res.Xp_InvalidToken, scanner.SourceText); } return (Axis.AxisType) axis; }
void NextLex(XPathScanner.LexKind t) { Debug.Assert(this.scanner.Kind == t); NextLex(); }
void PassToken(XPathScanner.LexKind t) { CheckToken(t); NextLex(); }
// --------------- Helper methods ---------------------- void CheckToken(XPathScanner.LexKind t) { if (this.scanner.Kind != t) { throw new XPathException(Res.Xp_InvalidToken, this.scanner.SourceText); } }
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 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 ); }
private XPathParser(XPathScanner scanner) { this.scanner = scanner; }
private static bool IsNodeType(XPathScanner scaner) { return ( scaner.Prefix.Length == 0 && ( scaner.Name == "node" || scaner.Name == "text" || scaner.Name == "processing-instruction" || scaner.Name == "comment" ) ); }
private XPathParser(XPathScanner scanner) => _Scanner = scanner;