xref: /plugin/combo/vendor/antlr/antlr4-php-runtime/src/Atn/Transitions/RangeTransition.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\States\ATNState;
8*37748cd8SNickeauuse Antlr\Antlr4\Runtime\IntervalSet;
9*37748cd8SNickeauuse Antlr\Antlr4\Runtime\Utils\StringUtils;
10*37748cd8SNickeau
11*37748cd8SNickeaufinal class RangeTransition extends Transition
12*37748cd8SNickeau{
13*37748cd8SNickeau    /** @var int */
14*37748cd8SNickeau    public $from;
15*37748cd8SNickeau
16*37748cd8SNickeau    /** @var int */
17*37748cd8SNickeau    public $to;
18*37748cd8SNickeau
19*37748cd8SNickeau    public function __construct(ATNState $target, int $from, int $to)
20*37748cd8SNickeau    {
21*37748cd8SNickeau        parent::__construct($target);
22*37748cd8SNickeau
23*37748cd8SNickeau        $this->from = $from;
24*37748cd8SNickeau        $this->to = $to;
25*37748cd8SNickeau    }
26*37748cd8SNickeau
27*37748cd8SNickeau    public function label() : ?IntervalSet
28*37748cd8SNickeau    {
29*37748cd8SNickeau        return IntervalSet::fromRange($this->from, $this->to);
30*37748cd8SNickeau    }
31*37748cd8SNickeau
32*37748cd8SNickeau    public function matches(int $symbol, int $minVocabSymbol, int $maxVocabSymbol) : bool
33*37748cd8SNickeau    {
34*37748cd8SNickeau        return $symbol >= $this->from && $symbol <= $this->to;
35*37748cd8SNickeau    }
36*37748cd8SNickeau
37*37748cd8SNickeau    public function getSerializationType() : int
38*37748cd8SNickeau    {
39*37748cd8SNickeau        return self::RANGE;
40*37748cd8SNickeau    }
41*37748cd8SNickeau
42*37748cd8SNickeau    public function equals(object $other) : bool
43*37748cd8SNickeau    {
44*37748cd8SNickeau        if ($this === $other) {
45*37748cd8SNickeau            return true;
46*37748cd8SNickeau        }
47*37748cd8SNickeau
48*37748cd8SNickeau        return $other instanceof self
49*37748cd8SNickeau            && $this->from === $other->from
50*37748cd8SNickeau            && $this->to === $other->to
51*37748cd8SNickeau            && $this->target->equals($other->target);
52*37748cd8SNickeau    }
53*37748cd8SNickeau
54*37748cd8SNickeau    public function __toString() : string
55*37748cd8SNickeau    {
56*37748cd8SNickeau        return \sprintf(
57*37748cd8SNickeau            '\'%s\'..\'%s\'',
58*37748cd8SNickeau            StringUtils::char($this->from),
59*37748cd8SNickeau            StringUtils::char($this->to)
60*37748cd8SNickeau        );
61*37748cd8SNickeau    }
62*37748cd8SNickeau}
63