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.ParseTree;
32 
33 import antlr.v4.runtime.tree.SyntaxTree;
34 import antlr.v4.runtime.InterfaceRecognizer;
35 
36 // Interface ParseTree
37 /**
38  * TODO add interface description
39  * @uml
40  * An interface to access the tree of {@link RuleContext} objects created
41  *  *  during a parse that makes the data structure look like a simple parse tree.
42  * This node represents both internal nodes, rule invocations,
43  * and leaf nodes, token matches.
44  *
45  * <p>The payload is either a {@link Token} or a {@link RuleContext} object.</p>
46  */
47 interface ParseTree : SyntaxTree
48 {
49 
50     /**
51      * @uml
52      * @override
53      */
54     public override ParseTree getParent();
55 
56     /**
57      * @uml
58      * @override
59      */
60     public override ParseTree getChild(int i);
61 
62     /**
63      * @uml
64      * The {@link ParseTreeVisitor} needs a double dispatch method.
65      */
66     public T accept(T)(ParseTreeVisitor!U visitor);
67 
68     /**
69      * @uml
70      * Return the combined text of all leaf nodes. Does not get any
71      * off-channel tokens (if any) so won't return whitespace and
72      * comments if they are sent to parser on hidden channel.
73      */
74     public string getText();
75 
76     /**
77      * @uml
78      * Specialize toStringTree so that it can print out more information
79      * based upon the parser.
80      */
81     public string toStringTree(InterfaceRecognizer parser);
82 
83 }