phplrt/phplrt

View on GitHub
libs/compiler/src/Printer/Value/RuleInstantiation.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

declare(strict_types=1);

namespace Phplrt\Compiler\Printer\Value;

use Phplrt\Compiler\Printer\PrintableValueInterface;
use Phplrt\Parser\Grammar\Alternation;
use Phplrt\Parser\Grammar\Concatenation;
use Phplrt\Parser\Grammar\Lexeme;
use Phplrt\Parser\Grammar\Optional;
use Phplrt\Parser\Grammar\Repetition;
use Phplrt\Parser\Grammar\RuleInterface;

abstract class RuleInstantiation implements PrintableValueInterface
{
    public function __construct(
        protected readonly RuleInterface $rule,
    ) {}

    protected function getArguments(): array
    {
        $rule = $this->rule;

        return match (true) {
            $rule instanceof Alternation,
            $rule instanceof Concatenation => [
                $rule->sequence,
            ],
            $rule instanceof Lexeme => [
                $rule->token,
                $rule->keep,
            ],
            $rule instanceof Optional => [
                $rule->rule,
            ],
            $rule instanceof Repetition => [
                $rule->rule,
                $rule->from,
                $rule->to,
            ],
            default => [],
        };
    }
}