В общем если кому пригодится поступил в итоге так:
Рекурсивно сформировал массив с содержимым скобок в строке функцией:
function recursiveSplit($string, $layer, &$result) {
preg_match_all("/ЕСЛИ\((([^()]*|(?R))*)\)/",$string,$matches);
if (count($matches) > 1) {
for ($i = 0; $i < count($matches[1]); $i++) {
if (is_string($matches[1][$i])) {
if (strlen($matches[1][$i]) > 0) {
$result[$layer][]=$matches[1][$i];
$this->recursiveSplit($matches[1][$i], $layer + 1, $result);
}
}
}
}
}
Дальше опять же рекурсивно но, начиная с нижнего уровня(для реализации возможности вложенных ветвлений) прошелся по этому массиву разбивая строки с содержимым скобок с помощью explode (если не получалось, то значит это просто математическое выражение оно обрамлялось в {{ }} для твига) на логическую часть, ветки прохождения проверки и не прохождения соответственно, из этого формировал строку с синтаксисом твига, и заменял на неё псевдокод в исходной строке.
Попахивает говнокодом конечно, но ничего более внятного мой мозг выдать не смог.