xref: /template/strap/vendor/antlr/antlr4-php-runtime/src/Atn/Actions/LexerModeAction.php (revision 37748cd8654635afbeca80942126742f0f4cc346)
1*37748cd8SNickeau<?php
2*37748cd8SNickeau
3*37748cd8SNickeaudeclare(strict_types=1);
4*37748cd8SNickeau
5*37748cd8SNickeaunamespace Antlr\Antlr4\Runtime\Atn\Actions;
6*37748cd8SNickeau
7*37748cd8SNickeauuse Antlr\Antlr4\Runtime\Comparison\Hasher;
8*37748cd8SNickeauuse Antlr\Antlr4\Runtime\Lexer;
9*37748cd8SNickeau
10*37748cd8SNickeaufinal class LexerModeAction implements LexerAction
11*37748cd8SNickeau{
12*37748cd8SNickeau    /** @var int */
13*37748cd8SNickeau    private $mode;
14*37748cd8SNickeau
15*37748cd8SNickeau    /**
16*37748cd8SNickeau     * Constructs a new `mode` action with the specified mode value.
17*37748cd8SNickeau     *
18*37748cd8SNickeau     * @param int $mode The mode value to pass to {@see Lexer::mode()}.
19*37748cd8SNickeau     */
20*37748cd8SNickeau    public function __construct(int $mode)
21*37748cd8SNickeau    {
22*37748cd8SNickeau        $this->mode = $mode;
23*37748cd8SNickeau    }
24*37748cd8SNickeau
25*37748cd8SNickeau    /**
26*37748cd8SNickeau     * Get the lexer mode this action should transition the lexer to.
27*37748cd8SNickeau     *
28*37748cd8SNickeau     * @return int The lexer mode for this `mode` command.
29*37748cd8SNickeau     */
30*37748cd8SNickeau    public function getMode() : int
31*37748cd8SNickeau    {
32*37748cd8SNickeau        return $this->mode;
33*37748cd8SNickeau    }
34*37748cd8SNickeau
35*37748cd8SNickeau    /**
36*37748cd8SNickeau     * {@inheritdoc}
37*37748cd8SNickeau     *
38*37748cd8SNickeau     * @return int This method returns {@see LexerActionType::MODE}.
39*37748cd8SNickeau     */
40*37748cd8SNickeau    public function getActionType() : int
41*37748cd8SNickeau    {
42*37748cd8SNickeau        return LexerActionType::MODE;
43*37748cd8SNickeau    }
44*37748cd8SNickeau
45*37748cd8SNickeau    /**
46*37748cd8SNickeau     * {@inheritdoc}
47*37748cd8SNickeau     *
48*37748cd8SNickeau     * @return bool This method returns `false`.
49*37748cd8SNickeau     */
50*37748cd8SNickeau    public function isPositionDependent() : bool
51*37748cd8SNickeau    {
52*37748cd8SNickeau        return false;
53*37748cd8SNickeau    }
54*37748cd8SNickeau
55*37748cd8SNickeau    /**
56*37748cd8SNickeau     * {@inheritdoc}
57*37748cd8SNickeau     *
58*37748cd8SNickeau     * This action is implemented by calling {@see Lexer::mode()} with the
59*37748cd8SNickeau     * value provided by {@see LexerModeAction::getMode()}.
60*37748cd8SNickeau     */
61*37748cd8SNickeau    public function execute(Lexer $lexer) : void
62*37748cd8SNickeau    {
63*37748cd8SNickeau        $lexer->mode($this->mode);
64*37748cd8SNickeau    }
65*37748cd8SNickeau
66*37748cd8SNickeau    public function hashCode() : int
67*37748cd8SNickeau    {
68*37748cd8SNickeau        return Hasher::hash($this->getActionType(), $this->mode);
69*37748cd8SNickeau    }
70*37748cd8SNickeau
71*37748cd8SNickeau    public function equals(object $other) : bool
72*37748cd8SNickeau    {
73*37748cd8SNickeau        if ($this === $other) {
74*37748cd8SNickeau            return true;
75*37748cd8SNickeau        }
76*37748cd8SNickeau
77*37748cd8SNickeau        if (!$other instanceof self) {
78*37748cd8SNickeau            return false;
79*37748cd8SNickeau        }
80*37748cd8SNickeau
81*37748cd8SNickeau        return $this->mode === $other->mode;
82*37748cd8SNickeau    }
83*37748cd8SNickeau
84*37748cd8SNickeau    public function __toString() : string
85*37748cd8SNickeau    {
86*37748cd8SNickeau        return \sprintf('mode(%d)', $this->mode);
87*37748cd8SNickeau    }
88*37748cd8SNickeau}
89