UNPKG

antlr4ts

Version:

ANTLR 4 runtime for JavaScript written in Typescript

67 lines (66 loc) 2.21 kB
/*! * Copyright 2016 The ANTLR Project. All rights reserved. * Licensed under the BSD-3-Clause license. See LICENSE file in the project root for license information. */ import { Parser } from "../../Parser"; import { ParseTree } from "../ParseTree"; import { Token } from "../../Token"; import { XPathElement } from "./XPathElement"; /** * Represent a subset of XPath XML path syntax for use in identifying nodes in * parse trees. * * Split path into words and separators `/` and `//` via ANTLR * itself then walk path elements from left to right. At each separator-word * pair, find set of nodes. Next stage uses those as work list. * * The basic interface is * {@link XPath#findAll ParseTree.findAll}`(tree, pathString, parser)`. * But that is just shorthand for: * * ``` * let p = new XPath(parser, pathString); * return p.evaluate(tree); * ``` * * See `TestXPath` for descriptions. In short, this * allows operators: * * | | | * | --- | --- | * | `/` | root | * | `//` | anywhere | * | `!` | invert; this much appear directly after root or anywhere operator | * * and path elements: * * | | | * | --- | --- | * | `ID` | token name | * | `'string'` | any string literal token from the grammar | * | `expr` | rule name | * | `*` | wildcard matching any node | * * Whitespace is not allowed. */ export declare class XPath { static readonly WILDCARD: string; static readonly NOT: string; protected path: string; protected elements: XPathElement[]; protected parser: Parser; constructor(parser: Parser, path: string); split(path: string): XPathElement[]; /** * Convert word like `*` or `ID` or `expr` to a path * element. `anywhere` is `true` if `//` precedes the * word. */ protected getXPathElement(wordToken: Token, anywhere: boolean): XPathElement; static findAll(tree: ParseTree, xpath: string, parser: Parser): Set<ParseTree>; /** * Return a list of all nodes starting at `t` as root that satisfy the * path. The root `/` is relative to the node passed to {@link evaluate}. */ evaluate(t: ParseTree): Set<ParseTree>; }