Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 0 additions & 19 deletions src/Definition/BinaryOperator.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,6 @@ enum BinaryOperator: string
case AND = 'AND';
case OR = 'OR';

case PLUS = 'PLUS';
case MINUS = 'MINUS';
case MULTIPLY_BY = 'MULTIPLY_BY';
case DIVIDE_BY = 'DIVIDE_BY';
case MODULO = 'MODULO';

case EQUAL = 'EQUAL';
case NOT_EQUAL = 'NOT_EQUAL';
case GREATER_THAN = 'GREATER_THAN';
Expand All @@ -48,12 +42,6 @@ public static function fromTokenType(TokenType $tokenType): self
TokenType::OPERATOR_BOOLEAN_AND => self::AND,
TokenType::OPERATOR_BOOLEAN_OR => self::OR,

TokenType::OPERATOR_ARITHMETIC_PLUS => self::PLUS,
TokenType::OPERATOR_ARITHMETIC_MINUS => self::MINUS,
TokenType::OPERATOR_ARITHMETIC_MULTIPLY_BY => self::MULTIPLY_BY,
TokenType::OPERATOR_ARITHMETIC_DIVIDE_BY => self::DIVIDE_BY,
TokenType::OPERATOR_ARITHMETIC_MODULO => self::MODULO,

TokenType::COMPARATOR_EQUAL => self::EQUAL,
TokenType::COMPARATOR_NOT_EQUAL => self::NOT_EQUAL,
TokenType::COMPARATOR_GREATER_THAN => self::GREATER_THAN,
Expand All @@ -72,13 +60,6 @@ public function toPrecedence(): Precedence

self::OR => Precedence::LOGICAL_OR,

self::PLUS,
self::MINUS => Precedence::DASH,

self::MULTIPLY_BY,
self::DIVIDE_BY,
self::MODULO => Precedence::POINT,

self::EQUAL,
self::NOT_EQUAL => Precedence::EQUALITY,

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@

use PackageFactory\ComponentEngine\Parser\Tokenizer\TokenType;

enum NumberFormat: string
enum IntegerFormat: string
{
case BINARY = 'BINARY';
case OCTAL = 'OCTAL';
Expand All @@ -36,11 +36,10 @@ public static function fromTokenType(TokenType $tokenType): self
return match ($tokenType) {
TokenType::NUMBER_BINARY => self::BINARY,
TokenType::NUMBER_OCTAL => self::OCTAL,
TokenType::NUMBER_DECIMAL,
TokenType::PERIOD => self::DECIMAL,
TokenType::NUMBER_DECIMAL => self::DECIMAL,
TokenType::NUMBER_HEXADECIMAL => self::HEXADECIMAL,

default => throw new \Exception('@TODO: Unknown Number Format: ' . $tokenType->value)
default => throw new \Exception('@TODO: Unknown Integer Format: ' . $tokenType->value)
};
}
}
9 changes: 0 additions & 9 deletions src/Definition/Precedence.php
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,6 @@ enum Precedence: int

case ACCESS = 18;
case UNARY = 15;
case POINT = 13;
case DASH = 12;
case COMPARISON = 10;
case EQUALITY = 9;
case LOGICAL_AND = 5;
Expand All @@ -55,13 +53,6 @@ public static function forTokenType(TokenType $tokenType): self

TokenType::OPERATOR_BOOLEAN_NOT => self::UNARY,

TokenType::OPERATOR_ARITHMETIC_MULTIPLY_BY,
TokenType::OPERATOR_ARITHMETIC_DIVIDE_BY,
TokenType::OPERATOR_ARITHMETIC_MODULO => self::POINT,

TokenType::OPERATOR_ARITHMETIC_PLUS,
TokenType::OPERATOR_ARITHMETIC_MINUS => self::DASH,

TokenType::COMPARATOR_GREATER_THAN,
TokenType::COMPARATOR_GREATER_THAN_OR_EQUAL,
TokenType::COMPARATOR_LESS_THAN,
Expand Down
4 changes: 2 additions & 2 deletions src/Parser/Ast/EnumMemberDeclarationNode.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ final class EnumMemberDeclarationNode implements \JsonSerializable
{
private function __construct(
public readonly string $name,
public readonly null|StringLiteralNode|NumberLiteralNode $value
public readonly null|StringLiteralNode|IntegerLiteralNode $value
) {
}

Expand All @@ -54,7 +54,7 @@ public static function fromTokens(\Iterator $tokens): self
/** @phpstan-ignore-next-line */
TokenType::STRING_QUOTED => StringLiteralNode::fromTokens($tokens),
/** @phpstan-ignore-next-line */
TokenType::NUMBER_DECIMAL => NumberLiteralNode::fromTokens($tokens),
TokenType::NUMBER_DECIMAL => IntegerLiteralNode::fromTokens($tokens),
default => throw new \Exception('@TODO: Unexpected Token ' . Scanner::type($tokens)->value)
};
/** @phpstan-ignore-next-line */
Expand Down
9 changes: 2 additions & 7 deletions src/Parser/Ast/ExpressionNode.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
final class ExpressionNode implements \JsonSerializable
{
private function __construct(
public readonly IdentifierNode | NumberLiteralNode | BinaryOperationNode | UnaryOperationNode | AccessNode | TernaryOperationNode | TagNode | StringLiteralNode | MatchNode | TemplateLiteralNode | BooleanLiteralNode | NullLiteralNode $root
public readonly IdentifierNode | IntegerLiteralNode | BinaryOperationNode | UnaryOperationNode | AccessNode | TernaryOperationNode | TagNode | StringLiteralNode | MatchNode | TemplateLiteralNode | BooleanLiteralNode | NullLiteralNode $root
) {
}

Expand Down Expand Up @@ -89,7 +89,7 @@ public static function fromTokens(\Iterator &$tokens, Precedence $precedence = P
case TokenType::NUMBER_DECIMAL:
case TokenType::NUMBER_HEXADECIMAL:
case TokenType::PERIOD:
$root = NumberLiteralNode::fromTokens($tokens);
$root = IntegerLiteralNode::fromTokens($tokens);
break;
case TokenType::KEYWORD_TRUE:
case TokenType::KEYWORD_FALSE:
Expand Down Expand Up @@ -134,11 +134,6 @@ public static function fromTokens(\Iterator &$tokens, Precedence $precedence = P
switch (Scanner::type($tokens)) {
case TokenType::OPERATOR_BOOLEAN_AND:
case TokenType::OPERATOR_BOOLEAN_OR:
case TokenType::OPERATOR_ARITHMETIC_PLUS:
case TokenType::OPERATOR_ARITHMETIC_MINUS:
case TokenType::OPERATOR_ARITHMETIC_MULTIPLY_BY:
case TokenType::OPERATOR_ARITHMETIC_DIVIDE_BY:
case TokenType::OPERATOR_ARITHMETIC_MODULO:
case TokenType::COMPARATOR_EQUAL:
case TokenType::COMPARATOR_NOT_EQUAL:
case TokenType::COMPARATOR_GREATER_THAN:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,15 +22,15 @@

namespace PackageFactory\ComponentEngine\Parser\Ast;

use PackageFactory\ComponentEngine\Definition\NumberFormat;
use PackageFactory\ComponentEngine\Definition\IntegerFormat;
use PackageFactory\ComponentEngine\Parser\Tokenizer\Scanner;
use PackageFactory\ComponentEngine\Parser\Tokenizer\Token;

final class NumberLiteralNode implements \JsonSerializable
final class IntegerLiteralNode implements \JsonSerializable
{
private function __construct(
public readonly string $value,
public readonly NumberFormat $format
public readonly IntegerFormat $format
) {
}

Expand All @@ -40,7 +40,7 @@ private function __construct(
*/
public static function fromTokens(\Iterator $tokens): self
{
$format = NumberFormat::fromTokenType(Scanner::type($tokens));
$format = IntegerFormat::fromTokenType(Scanner::type($tokens));
$value = Scanner::value($tokens);

Scanner::skipOne($tokens);
Expand All @@ -54,7 +54,7 @@ public static function fromTokens(\Iterator $tokens): self
public function jsonSerialize(): mixed
{
return [
'type' => 'NumberLiteralNode',
'type' => 'IntegerLiteralNode',
'payload' => [
'value' => $this->value,
'format' => $this->format->value
Expand Down
10 changes: 3 additions & 7 deletions src/Parser/Tokenizer/TokenType.php
Original file line number Diff line number Diff line change
Expand Up @@ -58,12 +58,6 @@ enum TokenType: string
case OPERATOR_BOOLEAN_OR = 'OPERATOR_BOOLEAN_OR';
case OPERATOR_BOOLEAN_NOT = 'OPERATOR_BOOLEAN_NOT';

case OPERATOR_ARITHMETIC_PLUS = 'OPERATOR_ARITHMETIC_PLUS';
case OPERATOR_ARITHMETIC_MINUS = 'OPERATOR_ARITHMETIC_MINUS';
case OPERATOR_ARITHMETIC_MULTIPLY_BY = 'OPERATOR_ARITHMETIC_MULTIPLY_BY';
case OPERATOR_ARITHMETIC_DIVIDE_BY = 'OPERATOR_ARITHMETIC_DIVIDE_BY';
case OPERATOR_ARITHMETIC_MODULO = 'OPERATOR_ARITHMETIC_MODULO';

case COMPARATOR_EQUAL = 'COMPARATOR_EQUAL';
case COMPARATOR_NOT_EQUAL = 'COMPARATOR_NOT_EQUAL';
case COMPARATOR_GREATER_THAN = 'COMPARATOR_GREATER_THAN';
Expand Down Expand Up @@ -117,6 +111,8 @@ public static function fromBuffer(Buffer $buffer): TokenType
$value === 'false' => self::KEYWORD_FALSE,
$value === 'null' => self::KEYWORD_NULL,

$value === '.' => self::PERIOD,

(bool) preg_match(
'/^0[bB][0-1]+$/',
$value
Expand All @@ -126,7 +122,7 @@ public static function fromBuffer(Buffer $buffer): TokenType
$value
) => self::NUMBER_OCTAL,
$value !== '' && preg_match(
'/^([-+]?[0-9]+)?(\.[0-9]+)?([eE][0-9]+)?$/',
'/^([-+]?[0-9]+)$/',
$value
) => self::NUMBER_DECIMAL,
(bool) preg_match(
Expand Down
34 changes: 1 addition & 33 deletions src/Parser/Tokenizer/Tokenizer.php
Original file line number Diff line number Diff line change
Expand Up @@ -85,13 +85,7 @@ private static function block(\Iterator $fragments): \Iterator
CharacterType::TEMPLATE_LITERAL_DELIMITER => self::templateLiteral($fragments),
CharacterType::BRACKET_OPEN => self::block($fragments),
CharacterType::ANGLE_OPEN => self::angle($fragments),
CharacterType::PERIOD => match (TokenType::fromBuffer($buffer)) {
TokenType::NUMBER_BINARY,
TokenType::NUMBER_OCTAL,
TokenType::NUMBER_DECIMAL,
TokenType::NUMBER_HEXADECIMAL => null,
default => self::period($fragments)
},
CharacterType::PERIOD => self::period($fragments),
CharacterType::ANGLE_CLOSE,
CharacterType::FORWARD_SLASH,
CharacterType::SYMBOL => self::symbol($fragments),
Expand Down Expand Up @@ -235,27 +229,6 @@ public static function period(\Iterator $fragments): \Iterator
$buffer = Buffer::empty()->append($fragments->current());
$fragments->next();

if ($fragments->valid()) {
$fragment = $fragments->current();

if (CharacterType::DIGIT->is($fragment->value)) {
$buffer->append($fragment);
$fragments->next();

while ($fragments->valid()) {
$fragment = $fragments->current();

if (CharacterType::DIGIT->is($fragment->value)) {
$buffer->append($fragment);
$fragments->next();
} else {
yield from $buffer->flush(TokenType::NUMBER_DECIMAL);
return;
}
}
}
}

yield from $buffer->flush(TokenType::PERIOD);
}

Expand Down Expand Up @@ -287,11 +260,6 @@ public static function symbol(\Iterator $fragments, ?Buffer $buffer = null): \It
}

yield from match ($buffer->value()) {
'+' => $buffer->flush(TokenType::OPERATOR_ARITHMETIC_PLUS),
'-' => $buffer->flush(TokenType::OPERATOR_ARITHMETIC_MINUS),
'*' => $buffer->flush(TokenType::OPERATOR_ARITHMETIC_MULTIPLY_BY),
'/' => $buffer->flush(TokenType::OPERATOR_ARITHMETIC_DIVIDE_BY),
'%' => $buffer->flush(TokenType::OPERATOR_ARITHMETIC_MODULO),
'&&' => $buffer->flush(TokenType::OPERATOR_BOOLEAN_AND),
'||' => $buffer->flush(TokenType::OPERATOR_BOOLEAN_OR),
'!' => $buffer->flush(TokenType::OPERATOR_BOOLEAN_NOT),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,6 @@ private function transpileBinaryOperator(BinaryOperator $binaryOperator): string
return match ($binaryOperator) {
BinaryOperator::AND => '&&',
BinaryOperator::OR => '||',
BinaryOperator::PLUS => '+',
BinaryOperator::MINUS => '-',
BinaryOperator::MULTIPLY_BY => '*',
BinaryOperator::DIVIDE_BY => '/',
BinaryOperator::MODULO => '%',
BinaryOperator::EQUAL => '===',
BinaryOperator::NOT_EQUAL => '!==',
BinaryOperator::GREATER_THAN => '>',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@

use PackageFactory\ComponentEngine\Parser\Ast\EnumDeclarationNode;
use PackageFactory\ComponentEngine\Parser\Ast\EnumMemberDeclarationNode;
use PackageFactory\ComponentEngine\Parser\Ast\NumberLiteralNode;
use PackageFactory\ComponentEngine\Parser\Ast\IntegerLiteralNode;
use PackageFactory\ComponentEngine\Parser\Ast\StringLiteralNode;

final class EnumDeclarationTranspiler
Expand Down Expand Up @@ -62,7 +62,7 @@ public function transpile(EnumDeclarationNode $enumDeclarationNode): string
private function transpileBackingType(EnumDeclarationNode $enumDeclarationNode): string
{
foreach ($enumDeclarationNode->memberDeclarations->items as $memberDeclarationNode) {
if ($memberDeclarationNode->value instanceof NumberLiteralNode) {
if ($memberDeclarationNode->value instanceof IntegerLiteralNode) {
return 'int';
} else {
return 'string';
Expand All @@ -74,7 +74,7 @@ private function transpileBackingType(EnumDeclarationNode $enumDeclarationNode):

private function transpileMemberValue(EnumMemberDeclarationNode $enumMemberDeclarationNode): string
{
if ($enumMemberDeclarationNode->value instanceof NumberLiteralNode) {
if ($enumMemberDeclarationNode->value instanceof IntegerLiteralNode) {
return $enumMemberDeclarationNode->value->value;
} else if ($enumMemberDeclarationNode->value instanceof StringLiteralNode) {
return '\'' . $enumMemberDeclarationNode->value->value . '\'';
Expand Down
6 changes: 3 additions & 3 deletions src/Target/Php/Transpiler/Expression/ExpressionTranspiler.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
use PackageFactory\ComponentEngine\Parser\Ast\IdentifierNode;
use PackageFactory\ComponentEngine\Parser\Ast\MatchNode;
use PackageFactory\ComponentEngine\Parser\Ast\NullLiteralNode;
use PackageFactory\ComponentEngine\Parser\Ast\NumberLiteralNode;
use PackageFactory\ComponentEngine\Parser\Ast\IntegerLiteralNode;
use PackageFactory\ComponentEngine\Parser\Ast\StringLiteralNode;
use PackageFactory\ComponentEngine\Parser\Ast\TagNode;
use PackageFactory\ComponentEngine\Parser\Ast\TemplateLiteralNode;
Expand All @@ -41,7 +41,7 @@
use PackageFactory\ComponentEngine\Target\Php\Transpiler\Identifier\IdentifierTranspiler;
use PackageFactory\ComponentEngine\Target\Php\Transpiler\Match\MatchTranspiler;
use PackageFactory\ComponentEngine\Target\Php\Transpiler\NullLiteral\NullLiteralTranspiler;
use PackageFactory\ComponentEngine\Target\Php\Transpiler\NumberLiteral\NumberLiteralTranspiler;
use PackageFactory\ComponentEngine\Target\Php\Transpiler\IntegerLiteral\IntegerLiteralTranspiler;
use PackageFactory\ComponentEngine\Target\Php\Transpiler\StringLiteral\StringLiteralTranspiler;
use PackageFactory\ComponentEngine\Target\Php\Transpiler\Tag\TagTranspiler;
use PackageFactory\ComponentEngine\Target\Php\Transpiler\TemplateLiteral\TemplateLiteralTranspiler;
Expand Down Expand Up @@ -80,7 +80,7 @@ public function transpile(ExpressionNode $expressionNode): string
scope: $this->scope
),
NullLiteralNode::class => new NullLiteralTranspiler(),
NumberLiteralNode::class => new NumberLiteralTranspiler(),
IntegerLiteralNode::class => new IntegerLiteralTranspiler(),
StringLiteralNode::class => new StringLiteralTranspiler(
shouldAddQuotes: $this->shouldAddQuotesIfNecessary
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,18 +20,18 @@

declare(strict_types=1);

namespace PackageFactory\ComponentEngine\Target\Php\Transpiler\NumberLiteral;
namespace PackageFactory\ComponentEngine\Target\Php\Transpiler\IntegerLiteral;

use PackageFactory\ComponentEngine\Definition\NumberFormat;
use PackageFactory\ComponentEngine\Parser\Ast\NumberLiteralNode;
use PackageFactory\ComponentEngine\Definition\IntegerFormat;
use PackageFactory\ComponentEngine\Parser\Ast\IntegerLiteralNode;

final class NumberLiteralTranspiler
final class IntegerLiteralTranspiler
{
public function transpile(NumberLiteralNode $numberLiteralNode): string
public function transpile(IntegerLiteralNode $integerLiteralNode): string
{
return match ($numberLiteralNode->format) {
NumberFormat::BINARY => strtolower($numberLiteralNode->value),
default => $numberLiteralNode->value
return match ($integerLiteralNode->format) {
IntegerFormat::BINARY => strtolower($integerLiteralNode->value),
default => $integerLiteralNode->value
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
use PackageFactory\ComponentEngine\TypeSystem\Type\BooleanType\BooleanType;
use PackageFactory\ComponentEngine\TypeSystem\Type\ComponentType\ComponentType;
use PackageFactory\ComponentEngine\TypeSystem\Type\EnumType\EnumStaticType;
use PackageFactory\ComponentEngine\TypeSystem\Type\NumberType\NumberType;
use PackageFactory\ComponentEngine\TypeSystem\Type\IntegerType\IntegerType;
use PackageFactory\ComponentEngine\TypeSystem\Type\SlotType\SlotType;
use PackageFactory\ComponentEngine\TypeSystem\Type\StringType\StringType;
use PackageFactory\ComponentEngine\TypeSystem\Type\StructType\StructType;
Expand All @@ -44,7 +44,7 @@ public function transpile(TypeReferenceNode $typeReferenceNode): string
{
$type = $this->scope->resolveTypeReference($typeReferenceNode);
$phpTypeReference = match ($type::class) {
NumberType::class => 'int|float',
IntegerType::class => 'int|float',
StringType::class => 'string',
BooleanType::class => 'bool',
SlotType::class => $this->strategy->getPhpTypeReferenceForSlotType($type, $typeReferenceNode),
Expand Down
Loading