1<?php 2 3declare(strict_types=1); 4 5namespace Antlr\Antlr4\Runtime\Atn\Actions; 6 7use Antlr\Antlr4\Runtime\Comparison\Hasher; 8use Antlr\Antlr4\Runtime\Lexer; 9 10/** 11 * Implements the `popMode` lexer action by calling {@see Lexer::popMode()}. 12 * 13 * The `popMode` command does not have any parameters, so this action is 14 * implemented as a singleton instance exposed by {@see self::instance())}. 15 * 16 * @author Sam Harwell 17 */ 18final class LexerPopModeAction implements LexerAction 19{ 20 /** 21 * Provides a singleton instance of this parameterless lexer action. 22 */ 23 public static function instance() : self 24 { 25 static $instance; 26 27 return $instance = $instance ?? new self(); 28 } 29 30 /** 31 * {@inheritdoc} 32 * 33 * @return int This method returns {@see LexerActionType::POP_MODE}. 34 */ 35 public function getActionType() : int 36 { 37 return LexerActionType::POP_MODE; 38 } 39 40 /** 41 * {@inheritdoc} 42 * 43 * @return bool This method returns `false`. 44 */ 45 public function isPositionDependent() : bool 46 { 47 return false; 48 } 49 50 /** 51 * {@inheritdoc} 52 * 53 * This action is implemented by calling {@see Lexer::popMode()}. 54 */ 55 public function execute(Lexer $lexer) : void 56 { 57 $lexer->popMode(); 58 } 59 60 public function hashCode() : int 61 { 62 return Hasher::hash($this->getActionType()); 63 } 64 65 public function equals(object $other) : bool 66 { 67 if ($this === $other) { 68 return true; 69 } 70 71 return $other instanceof self; 72 } 73 74 public function __toString() : string 75 { 76 return 'popMode'; 77 } 78} 79