Написать PHP-класс для парсинга выражений
2 100 руб. за проект
•
наличный расчёт, электронные деньги
Требуется реализовать парсер выражений
На вход подается выражение вида
[операнд*опция1,опция2(5),опция3('параметр1','параметр2)',.....]
и набор допустимых операндов, опций.
на выходе возвращается распарсенная структура
Примеры:
Вход:
[silicone*after('kill','me')]
операнды:silicone,hydrogen,stop
опции:after,destroy
Выход:
object(stdClass)#1 (2) {
["tag"]=>
string(4) "silicone"
["options"]=>
array(2) {
[1]=>
array(2) {
["name"]=>
string(5) "after"
["parameters"]=>
array(2) {
[0]=>
string(4) "kill"
[1]=>
string(2) "me"
}
}
}
}
Вход
[stop*destroy,after('kill','me')]
операнды:silicone,hydrogen,stop
опции:after,destroy
Выход:
object(stdClass)#1 (2) {
["tag"]=>
string(4) "stop"
["options"]=>
array(2) {
[0]=>
array(2) {
["name"]=>
string(7) "destroy"
["parameters"]=>
array(0) {
}
}
[1]=>
array(2) {
["name"]=>
string(5) "after"
["parameters"]=>
array(2) {
[0]=>
string(4) "kill"
[1]=>
string(2) "me"
}
}
}
}
Вход:
[stop*destroy,after('kill','john,peter,dr\' Doolitle(jr)')]
операнды:silicone,hydrogen,stop
опции:after,destroy
Выход:
object(stdClass)#1 (2) {
["tag"]=>
string(4) "stop"
["functions"]=>
array(2) {
[0]=>
array(2) {
["name"]=>
string(7) "destroy"
["parameters"]=>
array(0) {
}
}
[1]=>
array(2) {
["name"]=>
string(5) "after"
["parameters"]=>
array(2) {
[0]=>
string(4) "kill"
[1]=>
string(2) "john,peter,dr' Doolitle(jr)"
}
}
}
}
У функций может быть л
Eval итп не использовать.
Параметры должны обрамляться кавычками(кроме числовых - они могут быть без кавычек) например after(5)
В случае любых ошибок в выражнении(например:)
[stop*destroy,after('kill,'me'));
или
[stop*destroy,after('kill',)];
или если опции\операнда нет в списке доступных опций
должна возвращаться ошибка с соответствующим текстом
(ошибка в разборе выражения, ошибка - несуществующий операнд, ошибка - несуществующая опция).
На вход подается выражение вида
[операнд*опция1,опция2(5),опция3('параметр1','параметр2)',.....]
и набор допустимых операндов, опций.
на выходе возвращается распарсенная структура
Примеры:
Вход:
[silicone*after('kill','me')]
операнды:silicone,hydrogen,stop
опции:after,destroy
Выход:
object(stdClass)#1 (2) {
["tag"]=>
string(4) "silicone"
["options"]=>
array(2) {
[1]=>
array(2) {
["name"]=>
string(5) "after"
["parameters"]=>
array(2) {
[0]=>
string(4) "kill"
[1]=>
string(2) "me"
}
}
}
}
Вход
[stop*destroy,after('kill','me')]
операнды:silicone,hydrogen,stop
опции:after,destroy
Выход:
object(stdClass)#1 (2) {
["tag"]=>
string(4) "stop"
["options"]=>
array(2) {
[0]=>
array(2) {
["name"]=>
string(7) "destroy"
["parameters"]=>
array(0) {
}
}
[1]=>
array(2) {
["name"]=>
string(5) "after"
["parameters"]=>
array(2) {
[0]=>
string(4) "kill"
[1]=>
string(2) "me"
}
}
}
}
Вход:
[stop*destroy,after('kill','john,peter,dr\' Doolitle(jr)')]
операнды:silicone,hydrogen,stop
опции:after,destroy
Выход:
object(stdClass)#1 (2) {
["tag"]=>
string(4) "stop"
["functions"]=>
array(2) {
[0]=>
array(2) {
["name"]=>
string(7) "destroy"
["parameters"]=>
array(0) {
}
}
[1]=>
array(2) {
["name"]=>
string(5) "after"
["parameters"]=>
array(2) {
[0]=>
string(4) "kill"
[1]=>
string(2) "john,peter,dr' Doolitle(jr)"
}
}
}
}
У функций может быть л
Eval итп не использовать.
Параметры должны обрамляться кавычками(кроме числовых - они могут быть без кавычек) например after(5)
В случае любых ошибок в выражнении(например:)
[stop*destroy,after('kill,'me'));
или
[stop*destroy,after('kill',)];
или если опции\операнда нет в списке доступных опций
должна возвращаться ошибка с соответствующим текстом
(ошибка в разборе выражения, ошибка - несуществующий операнд, ошибка - несуществующая опция).
В заказе есть исполнитель
При переводе заказа из архивного в актуальный, текущий исполнитель будет снят с задачи.
Выберите тип сделки
С безопасной сделкой вы всегда сможете вернуть средства, если что-то пойдет не так. С простой сделкой вы самостоятельно договариваетесь с исполнителем об оплате и берете на себя решение конфликтов.