1*37748cd8SNickeau<?php 2*37748cd8SNickeau 3*37748cd8SNickeaudeclare(strict_types=1); 4*37748cd8SNickeau 5*37748cd8SNickeaunamespace Antlr\Antlr4\Runtime\Error\Exceptions; 6*37748cd8SNickeau 7*37748cd8SNickeauuse Antlr\Antlr4\Runtime\Atn\ATNConfigSet; 8*37748cd8SNickeauuse Antlr\Antlr4\Runtime\CharStream; 9*37748cd8SNickeauuse Antlr\Antlr4\Runtime\Lexer; 10*37748cd8SNickeauuse Antlr\Antlr4\Runtime\Utils\StringUtils; 11*37748cd8SNickeau 12*37748cd8SNickeauclass LexerNoViableAltException extends RecognitionException 13*37748cd8SNickeau{ 14*37748cd8SNickeau /** 15*37748cd8SNickeau * Matching attempted at what input index? 16*37748cd8SNickeau * 17*37748cd8SNickeau * @var int 18*37748cd8SNickeau */ 19*37748cd8SNickeau private $startIndex; 20*37748cd8SNickeau 21*37748cd8SNickeau /** 22*37748cd8SNickeau * Which configurations did we try at $input->index() that couldn't match $input->LA(1)? 23*37748cd8SNickeau * 24*37748cd8SNickeau * @var ATNConfigSet 25*37748cd8SNickeau */ 26*37748cd8SNickeau private $deadEndConfigs; 27*37748cd8SNickeau 28*37748cd8SNickeau public function __construct(Lexer $lexer, CharStream $input, int $startIndex, ATNConfigSet $deadEndConfigs) 29*37748cd8SNickeau { 30*37748cd8SNickeau parent::__construct($lexer, $input, null); 31*37748cd8SNickeau 32*37748cd8SNickeau $this->startIndex = $startIndex; 33*37748cd8SNickeau $this->deadEndConfigs = $deadEndConfigs; 34*37748cd8SNickeau } 35*37748cd8SNickeau 36*37748cd8SNickeau public function getDeadEndConfigs() : ATNConfigSet 37*37748cd8SNickeau { 38*37748cd8SNickeau return $this->deadEndConfigs; 39*37748cd8SNickeau } 40*37748cd8SNickeau 41*37748cd8SNickeau public function __toString() : string 42*37748cd8SNickeau { 43*37748cd8SNickeau $symbol = ''; 44*37748cd8SNickeau $input = $this->getInputStream(); 45*37748cd8SNickeau 46*37748cd8SNickeau if (!$input instanceof CharStream) { 47*37748cd8SNickeau throw new \RuntimeException('Unexpected stream type.'); 48*37748cd8SNickeau } 49*37748cd8SNickeau 50*37748cd8SNickeau if ($input !== null && $this->startIndex >= 0 && $this->startIndex < $input->getLength()) { 51*37748cd8SNickeau $symbol = $input->getText($this->startIndex, $this->startIndex); 52*37748cd8SNickeau $symbol = StringUtils::escapeWhitespace($symbol, false); 53*37748cd8SNickeau } 54*37748cd8SNickeau 55*37748cd8SNickeau return \sprintf('%s(\'%s\')', self::class, $symbol); 56*37748cd8SNickeau } 57*37748cd8SNickeau} 58