xref: /template/strap/vendor/antlr/antlr4-php-runtime/src/Error/Exceptions/LexerNoViableAltException.php (revision 37748cd8654635afbeca80942126742f0f4cc346)
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