xref: /plugin/combo/vendor/antlr/antlr4-php-runtime/src/Atn/Transitions/PredicateTransition.php (revision 37748cd8654635afbeca80942126742f0f4cc346)
1*37748cd8SNickeau<?php
2*37748cd8SNickeau
3*37748cd8SNickeaudeclare(strict_types=1);
4*37748cd8SNickeau
5*37748cd8SNickeaunamespace Antlr\Antlr4\Runtime\Atn\Transitions;
6*37748cd8SNickeau
7*37748cd8SNickeauuse Antlr\Antlr4\Runtime\Atn\SemanticContexts\Predicate;
8*37748cd8SNickeauuse Antlr\Antlr4\Runtime\Atn\States\ATNState;
9*37748cd8SNickeau
10*37748cd8SNickeauclass PredicateTransition extends AbstractPredicateTransition
11*37748cd8SNickeau{
12*37748cd8SNickeau    /** @var int */
13*37748cd8SNickeau    public $ruleIndex;
14*37748cd8SNickeau
15*37748cd8SNickeau    /** @var int */
16*37748cd8SNickeau    public $predIndex;
17*37748cd8SNickeau
18*37748cd8SNickeau    /**
19*37748cd8SNickeau     * e.g., $i ref in pred
20*37748cd8SNickeau     *
21*37748cd8SNickeau     * @var bool
22*37748cd8SNickeau     */
23*37748cd8SNickeau    public $isCtxDependent;
24*37748cd8SNickeau
25*37748cd8SNickeau    public function __construct(ATNState $target, int $ruleIndex, int $predIndex, bool $isCtxDependent)
26*37748cd8SNickeau    {
27*37748cd8SNickeau        parent::__construct($target);
28*37748cd8SNickeau
29*37748cd8SNickeau        $this->ruleIndex = $ruleIndex;
30*37748cd8SNickeau        $this->predIndex = $predIndex;
31*37748cd8SNickeau        $this->isCtxDependent = $isCtxDependent;
32*37748cd8SNickeau    }
33*37748cd8SNickeau
34*37748cd8SNickeau    public function matches(int $symbol, int $minVocabSymbol, int $maxVocabSymbol) : bool
35*37748cd8SNickeau    {
36*37748cd8SNickeau        return false;
37*37748cd8SNickeau    }
38*37748cd8SNickeau
39*37748cd8SNickeau    public function getPredicate() : Predicate
40*37748cd8SNickeau    {
41*37748cd8SNickeau        return new Predicate($this->ruleIndex, $this->predIndex, $this->isCtxDependent);
42*37748cd8SNickeau    }
43*37748cd8SNickeau
44*37748cd8SNickeau    /**
45*37748cd8SNickeau     * {@inheritdoc}
46*37748cd8SNickeau     */
47*37748cd8SNickeau    public function isEpsilon() : bool
48*37748cd8SNickeau    {
49*37748cd8SNickeau        return true;
50*37748cd8SNickeau    }
51*37748cd8SNickeau
52*37748cd8SNickeau    public function getSerializationType() : int
53*37748cd8SNickeau    {
54*37748cd8SNickeau        return self::PREDICATE;
55*37748cd8SNickeau    }
56*37748cd8SNickeau
57*37748cd8SNickeau    public function equals(object $other) : bool
58*37748cd8SNickeau    {
59*37748cd8SNickeau        if ($this === $other) {
60*37748cd8SNickeau            return true;
61*37748cd8SNickeau        }
62*37748cd8SNickeau
63*37748cd8SNickeau        return $other instanceof self
64*37748cd8SNickeau            && $this->ruleIndex === $other->ruleIndex
65*37748cd8SNickeau            && $this->predIndex === $other->predIndex
66*37748cd8SNickeau            && $this->isCtxDependent === $other->isCtxDependent
67*37748cd8SNickeau            && $this->target->equals($other->target);
68*37748cd8SNickeau    }
69*37748cd8SNickeau
70*37748cd8SNickeau    public function __toString() : string
71*37748cd8SNickeau    {
72*37748cd8SNickeau        return \sprintf('pred_%d:%d', $this->ruleIndex, $this->predIndex);
73*37748cd8SNickeau    }
74*37748cd8SNickeau}
75