diff --git a/src/GrammarProcessing/Ebnf/Nodes/Factor.php b/src/GrammarProcessing/Ebnf/Nodes/Factor.php index 6a4dda1..28a2c2d 100644 --- a/src/GrammarProcessing/Ebnf/Nodes/Factor.php +++ b/src/GrammarProcessing/Ebnf/Nodes/Factor.php @@ -16,25 +16,25 @@ public function interpret(GrammarProcessing\Node $node): Generator return match ($node->index) { 0 => new GrammarProcessing\Vocabulary\Repeat( - yield $node->value->value[0], + yield $node->value[0], 0, 1, ), 1 => new GrammarProcessing\Vocabulary\Repeat( - yield $node->value->value[0], + yield $node->value[0], 0, null, ), 2 => new GrammarProcessing\Vocabulary\Repeat( - yield $node->value->value[0], + yield $node->value[0], 1, null, ), 3 => new GrammarProcessing\Vocabulary\Subtract( - yield $node->value->value[0], - yield $node->value->value[4], + yield $node->value[0], + yield $node->value[4], ), - 4 => yield $node->value->value[0], + 4 => yield $node->value[0], default => throw new LogicException("This can't happen"), }; } diff --git a/src/GrammarProcessing/Ebnf/Nodes/Term.php b/src/GrammarProcessing/Ebnf/Nodes/Term.php index dda5c23..0ace634 100644 --- a/src/GrammarProcessing/Ebnf/Nodes/Term.php +++ b/src/GrammarProcessing/Ebnf/Nodes/Term.php @@ -15,14 +15,14 @@ public function interpret(GrammarProcessing\Node $node): Generator /** @var GrammarProcessing\SelectedNode $node */ return match ($node->index) { - 0 => yield $node->value->value[2], + 0 => yield $node->value[2], 1 => new GrammarProcessing\Vocabulary\Repeat( - yield $node->value->value[2], + yield $node->value[2], 0, 1, ), 2 => new GrammarProcessing\Vocabulary\Repeat( - yield $node->value->value[2], + yield $node->value[2], 0, null, ), diff --git a/src/GrammarProcessing/SelectedNode.php b/src/GrammarProcessing/SelectedNode.php index ecef5e1..cfcff88 100644 --- a/src/GrammarProcessing/SelectedNode.php +++ b/src/GrammarProcessing/SelectedNode.php @@ -18,11 +18,21 @@ final class SelectedNode implements Node } + public mixed $value { + + get { + return $this->subnode instanceof ListNode + ? $this->subnode->value + : $this->subnode; + } + + } + public function __construct( public readonly int $index, - public readonly Node $value, + public readonly Node $subnode, ) {} }