Skip to content

Commit 7ad5fc2

Browse files
committed
TASK: Implement ExpressionParser (partially)
1 parent a3a71b1 commit 7ad5fc2

File tree

17 files changed

+2347
-57
lines changed

17 files changed

+2347
-57
lines changed

src/Language/AST/Node/AccessChain/AccessChainSegmentKeyNode.php renamed to src/Language/AST/Node/Access/AccessKeyNode.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@
2020

2121
declare(strict_types=1);
2222

23-
namespace PackageFactory\ComponentEngine\Language\AST\Node\AccessChain;
23+
namespace PackageFactory\ComponentEngine\Language\AST\Node\Access;
2424

2525
use PackageFactory\ComponentEngine\Domain\PropertyName\PropertyName;
2626
use PackageFactory\ComponentEngine\Language\AST\Node\Node;
2727
use PackageFactory\ComponentEngine\Parser\Source\Range;
2828

29-
final class AccessChainSegmentKeyNode extends Node
29+
final class AccessKeyNode extends Node
3030
{
3131
public function __construct(
3232
public readonly Range $rangeInSource,

src/Language/AST/Node/AccessChain/AccessChainNode.php renamed to src/Language/AST/Node/Access/AccessNode.php

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,19 @@
2020

2121
declare(strict_types=1);
2222

23-
namespace PackageFactory\ComponentEngine\Language\AST\Node\AccessChain;
23+
namespace PackageFactory\ComponentEngine\Language\AST\Node\Access;
2424

2525
use PackageFactory\ComponentEngine\Language\AST\Node\Expression\ExpressionNode;
2626
use PackageFactory\ComponentEngine\Language\AST\Node\Node;
2727
use PackageFactory\ComponentEngine\Parser\Source\Range;
2828

29-
final class AccessChainNode extends Node
29+
final class AccessNode extends Node
3030
{
3131
public function __construct(
3232
public readonly Range $rangeInSource,
33-
public readonly ExpressionNode $root,
34-
public readonly AccessChainSegmentNodes $chain
33+
public readonly ExpressionNode $parent,
34+
public readonly AccessType $type,
35+
public readonly AccessKeyNode $key
3536
) {
3637
}
3738
}

src/Language/AST/Node/AccessChain/AccessType.php renamed to src/Language/AST/Node/Access/AccessType.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
declare(strict_types=1);
2222

23-
namespace PackageFactory\ComponentEngine\Language\AST\Node\AccessChain;
23+
namespace PackageFactory\ComponentEngine\Language\AST\Node\Access;
2424

2525
enum AccessType: string
2626
{

src/Language/AST/Node/AccessChain/AccessChainSegmentNodes.php

Lines changed: 0 additions & 36 deletions
This file was deleted.

src/Language/AST/Node/Expression/ExpressionNode.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
namespace PackageFactory\ComponentEngine\Language\AST\Node\Expression;
2424

25-
use PackageFactory\ComponentEngine\Language\AST\Node\AccessChain\AccessChainNode;
25+
use PackageFactory\ComponentEngine\Language\AST\Node\Access\AccessNode;
2626
use PackageFactory\ComponentEngine\Language\AST\Node\BinaryOperation\BinaryOperationNode;
2727
use PackageFactory\ComponentEngine\Language\AST\Node\BooleanLiteral\BooleanLiteralNode;
2828
use PackageFactory\ComponentEngine\Language\AST\Node\IntegerLiteral\IntegerLiteralNode;
@@ -41,7 +41,7 @@ final class ExpressionNode extends Node
4141
{
4242
public function __construct(
4343
public readonly Range $rangeInSource,
44-
public readonly AccessChainNode | BinaryOperationNode | BooleanLiteralNode | IntegerLiteralNode | MatchNode | NullLiteralNode | StringLiteralNode | TagNode | TemplateLiteralNode | TernaryOperationNode | UnaryOperationNode | ValueReferenceNode $root
44+
public readonly AccessNode | BinaryOperationNode | BooleanLiteralNode | IntegerLiteralNode | MatchNode | NullLiteralNode | StringLiteralNode | TagNode | TemplateLiteralNode | TernaryOperationNode | UnaryOperationNode | ValueReferenceNode $root
4545
) {
4646
}
4747
}

src/Language/AST/Node/TernaryOperation/TernaryOperationNode.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,15 @@
2929
final class TernaryOperationNode extends Node
3030
{
3131
public function __construct(
32-
public readonly Range $rangeInSource,
3332
public readonly ExpressionNode $condition,
3433
public readonly ExpressionNode $trueBranch,
3534
public readonly ExpressionNode $falseBranch
3635
) {
36+
parent::__construct(
37+
rangeInSource: Range::from(
38+
$condition->rangeInSource->start,
39+
$falseBranch->rangeInSource->end
40+
)
41+
);
3742
}
3843
}

src/Language/AST/Node/AccessChain/AccessChainSegmentNode.php renamed to src/Language/Parser/Expression/ExpressionCouldNotBeParsed.php

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,27 @@
2020

2121
declare(strict_types=1);
2222

23-
namespace PackageFactory\ComponentEngine\Language\AST\Node\AccessChain;
23+
namespace PackageFactory\ComponentEngine\Language\Parser\Expression;
2424

25-
use PackageFactory\ComponentEngine\Language\AST\Node\Node;
26-
use PackageFactory\ComponentEngine\Parser\Source\Range;
25+
use PackageFactory\ComponentEngine\Language\Parser\ParserException;
26+
use PackageFactory\ComponentEngine\Parser\Tokenizer\Token;
27+
use PackageFactory\ComponentEngine\Parser\Tokenizer\TokenTypes;
2728

28-
final class AccessChainSegmentNode extends Node
29+
final class ExpressionCouldNotBeParsed extends ParserException
2930
{
30-
public function __construct(
31-
public readonly Range $rangeInSource,
32-
public readonly AccessType $accessType,
33-
public readonly AccessChainSegmentKeyNode $key
34-
) {
31+
public static function becauseOfUnexpectedToken(
32+
TokenTypes $expectedTokenTypes,
33+
Token $actualToken
34+
): self {
35+
return new self(
36+
code: 1691063089,
37+
message: sprintf(
38+
'Expression could not be parsed because of unexpected token %s. '
39+
. 'Expected %s instead.',
40+
$actualToken->toDebugString(),
41+
$expectedTokenTypes->toDebugString()
42+
),
43+
affectedRangeInSource: $actualToken->boundaries
44+
);
3545
}
3646
}

0 commit comments

Comments
 (0)