1*37748cd8SNickeau<?php 2*37748cd8SNickeau 3*37748cd8SNickeaudeclare(strict_types=1); 4*37748cd8SNickeau 5*37748cd8SNickeaunamespace Antlr\Antlr4\Runtime\Atn\SemanticContexts; 6*37748cd8SNickeau 7*37748cd8SNickeauuse Antlr\Antlr4\Runtime\Comparison\Hasher; 8*37748cd8SNickeauuse Antlr\Antlr4\Runtime\Recognizer; 9*37748cd8SNickeauuse Antlr\Antlr4\Runtime\RuleContext; 10*37748cd8SNickeau 11*37748cd8SNickeaufinal class PrecedencePredicate extends SemanticContext 12*37748cd8SNickeau{ 13*37748cd8SNickeau /** @var int */ 14*37748cd8SNickeau public $precedence; 15*37748cd8SNickeau 16*37748cd8SNickeau public function __construct(int $precedence = 0) 17*37748cd8SNickeau { 18*37748cd8SNickeau $this->precedence = $precedence; 19*37748cd8SNickeau } 20*37748cd8SNickeau 21*37748cd8SNickeau public function eval(Recognizer $parser, RuleContext $parserCallStack) : bool 22*37748cd8SNickeau { 23*37748cd8SNickeau return $parser->precpred($parserCallStack, $this->precedence); 24*37748cd8SNickeau } 25*37748cd8SNickeau 26*37748cd8SNickeau public function evalPrecedence(Recognizer $parser, RuleContext $parserCallStack) : ?SemanticContext 27*37748cd8SNickeau { 28*37748cd8SNickeau if ($parser->precpred($parserCallStack, $this->precedence)) { 29*37748cd8SNickeau return SemanticContext::none(); 30*37748cd8SNickeau } 31*37748cd8SNickeau 32*37748cd8SNickeau return null; 33*37748cd8SNickeau } 34*37748cd8SNickeau 35*37748cd8SNickeau public function hashCode() : int 36*37748cd8SNickeau { 37*37748cd8SNickeau return Hasher::hash(31, $this->precedence); 38*37748cd8SNickeau } 39*37748cd8SNickeau 40*37748cd8SNickeau public function equals(object $other) : bool 41*37748cd8SNickeau { 42*37748cd8SNickeau if ($this === $other) { 43*37748cd8SNickeau return true; 44*37748cd8SNickeau } 45*37748cd8SNickeau 46*37748cd8SNickeau if (!$other instanceof self) { 47*37748cd8SNickeau return false; 48*37748cd8SNickeau } 49*37748cd8SNickeau 50*37748cd8SNickeau return $this->precedence === $other->precedence; 51*37748cd8SNickeau } 52*37748cd8SNickeau 53*37748cd8SNickeau public function __toString() : string 54*37748cd8SNickeau { 55*37748cd8SNickeau return \sprintf('{%d>=prec}?', $this->precedence); 56*37748cd8SNickeau } 57*37748cd8SNickeau} 58