1 /* 2 * [The "BSD license"] 3 * Copyright (c) 2012 Terence Parr 4 * Copyright (c) 2012 Sam Harwell 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 3. The name of the author may not be used to endorse or promote products 17 * derived from this software without specific prior written permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 20 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 21 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 22 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 23 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 24 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 */ 30 31 module antlr.v4.runtime.tree.Tree; 32 33 // Interface Tree 34 /** 35 * @uml 36 * The basic notion of a tree has a parent, a payload, and a list of children. 37 * It is the most abstract interface for all the trees used by ANTLR. 38 */ 39 interface Tree 40 { 41 42 /** 43 * @uml 44 * The parent of this node. If the return value is null, then this 45 * node is the root of the tree. 46 */ 47 public Tree getParent(); 48 49 /** 50 * @uml 51 * This method returns whatever object represents the data at this note. For 52 * example, for parse trees, the payload can be a {@link Token} representing 53 * a leaf node or a {@link RuleContext} object representing a rule 54 * invocation. For abstract syntax trees (ASTs), this is a {@link Token} 55 * object. 56 */ 57 public Object getPayload(); 58 59 /** 60 * @uml 61 * If there are children, get the {@code i}th value indexed from 0. 62 */ 63 public Tree getChild(int i); 64 65 /** 66 * @uml 67 * How many children are there? If there is none, then this 68 * node represents a leaf node. 69 */ 70 public int getChildCount(); 71 72 /** 73 * @uml 74 * Print out a whole tree, not just a node, in LISP format 75 * {@code (root child1 .. childN)}. Print just a node if this is a leaf. 76 */ 77 public string toStringTree(); 78 79 }