xref: /plugin/combo/vendor/antlr/antlr4-php-runtime/src/Atn/SemanticContexts/PrecedencePredicate.php (revision 37748cd8654635afbeca80942126742f0f4cc346)
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