xref: /plugin/combo/vendor/antlr/antlr4-php-runtime/src/Tree/TerminalNodeImpl.php (revision 37748cd8654635afbeca80942126742f0f4cc346)
1*37748cd8SNickeau<?php
2*37748cd8SNickeau
3*37748cd8SNickeaudeclare(strict_types=1);
4*37748cd8SNickeau
5*37748cd8SNickeaunamespace Antlr\Antlr4\Runtime\Tree;
6*37748cd8SNickeau
7*37748cd8SNickeauuse Antlr\Antlr4\Runtime\Interval;
8*37748cd8SNickeauuse Antlr\Antlr4\Runtime\RuleContext;
9*37748cd8SNickeauuse Antlr\Antlr4\Runtime\Token;
10*37748cd8SNickeau
11*37748cd8SNickeauclass TerminalNodeImpl implements TerminalNode
12*37748cd8SNickeau{
13*37748cd8SNickeau    /** @var Token */
14*37748cd8SNickeau    public $symbol;
15*37748cd8SNickeau
16*37748cd8SNickeau    /** @var ParseTree|null */
17*37748cd8SNickeau    public $parent;
18*37748cd8SNickeau
19*37748cd8SNickeau    public function __construct(Token $symbol)
20*37748cd8SNickeau    {
21*37748cd8SNickeau        $this->symbol = $symbol;
22*37748cd8SNickeau    }
23*37748cd8SNickeau
24*37748cd8SNickeau    public function getChild(int $i, ?string $type = null) : ?Tree
25*37748cd8SNickeau    {
26*37748cd8SNickeau        return null;
27*37748cd8SNickeau    }
28*37748cd8SNickeau
29*37748cd8SNickeau    public function getSymbol() : Token
30*37748cd8SNickeau    {
31*37748cd8SNickeau        return $this->symbol;
32*37748cd8SNickeau    }
33*37748cd8SNickeau
34*37748cd8SNickeau    /**
35*37748cd8SNickeau     * @return ParseTree|null
36*37748cd8SNickeau     */
37*37748cd8SNickeau    public function getParent() : ?Tree
38*37748cd8SNickeau    {
39*37748cd8SNickeau        return $this->parent;
40*37748cd8SNickeau    }
41*37748cd8SNickeau
42*37748cd8SNickeau    public function setParent(RuleContext $parent) : void
43*37748cd8SNickeau    {
44*37748cd8SNickeau        $this->parent = $parent;
45*37748cd8SNickeau    }
46*37748cd8SNickeau
47*37748cd8SNickeau    public function getPayload() : Token
48*37748cd8SNickeau    {
49*37748cd8SNickeau        return $this->symbol;
50*37748cd8SNickeau    }
51*37748cd8SNickeau
52*37748cd8SNickeau    public function getSourceInterval() : Interval
53*37748cd8SNickeau    {
54*37748cd8SNickeau        if ($this->symbol === null) {
55*37748cd8SNickeau            return new Interval(-1, -2);
56*37748cd8SNickeau        }
57*37748cd8SNickeau
58*37748cd8SNickeau        $tokenIndex = $this->symbol->getTokenIndex();
59*37748cd8SNickeau
60*37748cd8SNickeau        return new Interval($tokenIndex, $tokenIndex);
61*37748cd8SNickeau    }
62*37748cd8SNickeau
63*37748cd8SNickeau    public function getChildCount() : int
64*37748cd8SNickeau    {
65*37748cd8SNickeau        return 0;
66*37748cd8SNickeau    }
67*37748cd8SNickeau
68*37748cd8SNickeau    public function accept(ParseTreeVisitor $visitor)
69*37748cd8SNickeau    {
70*37748cd8SNickeau        return $visitor->visitTerminal($this);
71*37748cd8SNickeau    }
72*37748cd8SNickeau
73*37748cd8SNickeau    public function getText() : ?string
74*37748cd8SNickeau    {
75*37748cd8SNickeau        return $this->symbol->getText();
76*37748cd8SNickeau    }
77*37748cd8SNickeau
78*37748cd8SNickeau    /**
79*37748cd8SNickeau     * @param array<string>|null $ruleNames
80*37748cd8SNickeau     */
81*37748cd8SNickeau    public function toStringTree(?array $ruleNames = null) : string
82*37748cd8SNickeau    {
83*37748cd8SNickeau        return (string) $this;
84*37748cd8SNickeau    }
85*37748cd8SNickeau
86*37748cd8SNickeau    public function __toString() : string
87*37748cd8SNickeau    {
88*37748cd8SNickeau        if ($this->symbol->getType() === Token::EOF) {
89*37748cd8SNickeau            return '<EOF>';
90*37748cd8SNickeau        }
91*37748cd8SNickeau
92*37748cd8SNickeau        return $this->symbol->getText() ?? '';
93*37748cd8SNickeau    }
94*37748cd8SNickeau}
95