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