1 /*
2  * [The "BSD license"]
3  *  Copyright (c) 2012 Terence Parr
4  *  Copyright (c) 2012 Sam Harwell
5  *  Copyright (c) 2017 Egbert Voigt
6  *  All rights reserved.
7  *
8  *  Redistribution and use in source and binary forms, with or without
9  *  modification, are permitted provided that the following conditions
10  *  are met:
11  *
12  *  1. Redistributions of source code must retain the above copyright
13  *     notice, this list of conditions and the following disclaimer.
14  *  2. Redistributions in binary form must reproduce the above copyright
15  *     notice, this list of conditions and the following disclaimer in the
16  *     documentation and/or other materials provided with the distribution.
17  *  3. The name of the author may not be used to endorse or promote products
18  *     derived from this software without specific prior written permission.
19  *
20  *  THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
21  *  IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
22  *  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
23  *  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
24  *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
25  *  NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26  *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27  *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28  *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
29  *  THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30  */
31 
32 module antlr.v4.runtime.tree.TerminalNodeImpl;
33 
34 import antlr.v4.runtime.tree.TerminalNode;
35 import antlr.v4.runtime.tree.ParseTree;
36 import antlr.v4.runtime.Token;
37 import antlr.v4.runtime.TokenConstantDefinition;
38 import antlr.v4.runtime.InterfaceRecognizer;
39 import antlr.v4.runtime.misc.Interval;
40 import antlr.v4.runtime.atn.StateNames;
41 
42 // Class TerminalNodeImpl
43 /**
44  * TODO add class description
45  */
46 class TerminalNodeImpl : TerminalNode
47 {
48 
49     public Token symbol;
50 
51     public ParseTree parent;
52 
53     public this(Token symbol)
54     {
55         this.symbol = symbol;	
56     }
57 
58     public ParseTree getChild(int i)
59     {
60         return null;
61     }
62 
63     public Token getSymbol()
64     {
65         return symbol;
66     }
67 
68     public ParseTree getParent()
69     {
70         return parent;
71     }
72 
73     public Object getPayload()
74     {
75         return cast(Object)symbol;
76     }
77 
78     public Interval getSourceInterval()
79     {
80         if (symbol is null)
81             return new Interval(-1,-2); // INVALID
82         int tokenIndex = symbol.getTokenIndex();
83         return new Interval(tokenIndex, tokenIndex);
84 
85     }
86 
87     public int getChildCount()
88     {
89         return 0;
90     }
91 
92     public V accept(V, U)(ParseTreeVisitor!U visitor)
93     {
94         return visitor.visitTerminal(this);
95     }
96 
97     public string getText()
98     {
99         return symbol.getText();
100     }
101 
102     public string toStringTree(InterfaceRecognizer parser)
103     {
104         return toString();
105     }
106 
107     /**
108      * @uml
109      * @override
110      */
111     public override string toString()
112     {
113         if (symbol.getType() == TokenConstantDefinition.EOF )
114             return "<EOF>";
115         return symbol.getText();
116     }
117 
118     public string toStringTree()
119     {
120         return toString();
121     }
122 
123 }