xref: /plugin/combo/vendor/antlr/antlr4-php-runtime/src/Error/Exceptions/NoViableAltException.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\Parser;
9*37748cd8SNickeauuse Antlr\Antlr4\Runtime\ParserRuleContext;
10*37748cd8SNickeauuse Antlr\Antlr4\Runtime\Token;
11*37748cd8SNickeauuse Antlr\Antlr4\Runtime\TokenStream;
12*37748cd8SNickeau
13*37748cd8SNickeau/**
14*37748cd8SNickeau * Indicates that the parser could not decide which of two or more paths
15*37748cd8SNickeau * to take based upon the remaining input. It tracks the starting token
16*37748cd8SNickeau * of the offending input and also knows where the parser was
17*37748cd8SNickeau * in the various paths when the error. Reported by reportNoViableAlternative()
18*37748cd8SNickeau */
19*37748cd8SNickeauclass NoViableAltException extends RecognitionException
20*37748cd8SNickeau{
21*37748cd8SNickeau    /**
22*37748cd8SNickeau     * The token object at the start index; the input stream might
23*37748cd8SNickeau     * not be buffering tokens so get a reference to it. (At the
24*37748cd8SNickeau     * time the error occurred, of course the stream needs to keep a
25*37748cd8SNickeau     * buffer all of the tokens but later we might not have access to those.)
26*37748cd8SNickeau     *
27*37748cd8SNickeau     * @var Token|null
28*37748cd8SNickeau     */
29*37748cd8SNickeau    private $startToken;
30*37748cd8SNickeau
31*37748cd8SNickeau    /**
32*37748cd8SNickeau     * Which configurations did we try at $input->index() that couldn't
33*37748cd8SNickeau     * match $input->LT(1)?
34*37748cd8SNickeau     *
35*37748cd8SNickeau     * @var ATNConfigSet|null
36*37748cd8SNickeau     */
37*37748cd8SNickeau    private $deadEndConfigs;
38*37748cd8SNickeau
39*37748cd8SNickeau    public function __construct(
40*37748cd8SNickeau        Parser $recognizer,
41*37748cd8SNickeau        ?TokenStream $input = null,
42*37748cd8SNickeau        ?Token $startToken = null,
43*37748cd8SNickeau        ?Token $offendingToken = null,
44*37748cd8SNickeau        ?ATNConfigSet $deadEndConfigs = null,
45*37748cd8SNickeau        ?ParserRuleContext $ctx = null
46*37748cd8SNickeau    ) {
47*37748cd8SNickeau        if ($ctx === null) {
48*37748cd8SNickeau            $ctx = $recognizer->getContext();
49*37748cd8SNickeau        }
50*37748cd8SNickeau
51*37748cd8SNickeau        if ($offendingToken === null) {
52*37748cd8SNickeau            $offendingToken = $recognizer->getCurrentToken();
53*37748cd8SNickeau        }
54*37748cd8SNickeau
55*37748cd8SNickeau        if ($startToken === null) {
56*37748cd8SNickeau            $startToken = $recognizer->getCurrentToken();
57*37748cd8SNickeau        }
58*37748cd8SNickeau
59*37748cd8SNickeau        if ($input === null) {
60*37748cd8SNickeau            $input = $recognizer->getInputStream();
61*37748cd8SNickeau        }
62*37748cd8SNickeau
63*37748cd8SNickeau        parent::__construct($recognizer, $input, $ctx);
64*37748cd8SNickeau
65*37748cd8SNickeau        $this->deadEndConfigs = $deadEndConfigs;
66*37748cd8SNickeau        $this->startToken = $startToken;
67*37748cd8SNickeau        $this->setOffendingToken($offendingToken);
68*37748cd8SNickeau    }
69*37748cd8SNickeau
70*37748cd8SNickeau    public function getStartToken() : ?Token
71*37748cd8SNickeau    {
72*37748cd8SNickeau        return $this->startToken;
73*37748cd8SNickeau    }
74*37748cd8SNickeau
75*37748cd8SNickeau    public function getDeadEndConfigs() : ?ATNConfigSet
76*37748cd8SNickeau    {
77*37748cd8SNickeau        return $this->deadEndConfigs;
78*37748cd8SNickeau    }
79*37748cd8SNickeau}
80