Учитывая строку
{A} AND ({B} OR {C} OR ({D} AND {E}))
Как это может быть проанализировано, чтобы быть в пригодной для использования структуре данных?
У меня сейчас
$tokens = preg_split(
'/( AND | OR |\)|\()/',
$rules[0]['option_rule'],
-1,
PREG_SPLIT_DELIM_CAPTURE
);
foreach ($tokens as $token) {
if (empty($token)) {
continue;
}
$token = trim($token);
$special = ['(', ')', 'AND', 'OR'];
// do something with the token?
}
Но понятия не имею, как работать с несколькими уровнями.
Универсальным решением было бы указать ваши правила грамматики и создать лексер, который может обрабатывать / анализировать текст с использованием грамматики. Например: http://nitschinger.at/Writing-a-simple-lexer-in-PHP
что-то подобное может сработать, 1 = И, 0 = ИЛИ
array(
'{A}' => 1,
array(
'{B}' => 0,
'{C}' => 0,
array(
'{D}' => 1,
'{E}' =>
)
)
);