Назад к задачамПолучайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Junior — Senior
17
Преобразование AST арифметического выражения в строковое представление кода
Условие задачи
Дано: арифметическое выражение задано в виде AST (Abstract Syntax Tree) в префиксной нотации.
AST может быть либо вещественным числом, либо массивом, где первый элемент всегда строка, обозначающая арифметическую операцию, а все последующие элементы – её аргументы (тоже в виде AST):
AST = float | ['operation', operand1, operand2, ..., operandN], где operand1, operand2, … – AST.
Поддерживаются следующие операции:
- унарный минус (-)
- унарный плюс (+)
- сложение (+)
- вычитание (-)
- умножение (*)
- деление (/).
Можно считать, что входные данные всегда корректны.
Необходимо реализовать функцию astToCode, принимающую AST и возвращающую строку с эквивалентным кодом.
function astToCode(array|float $node): string
{
// реализация преобразования
}
function test(array|float $node, string $expected): void
{
$actual = astToCode($node);
echo $actual === $expected ? 'OK' : "FAIL ";
echo ": $expected" . PHP_EOL;
}
test(5, '5');
test(, , 3]]], '-(+3)');
test(, 1]], '+(-1)');
test(, ], '(1 * 2) * (3 - 1)');
test(]], '2 * 5 * 7 / (8 - (5 + 6))');
test(, , ], '1 + 2 - (3 - 4) - (5 + 6)');