Когда-то (но это было давно и не правда) решил схожую подзадачу так: в GUI формировался запрос (дерево либо с листьями «параметр, операция, значение[, значение2[, значение3[ ...]]]]», либо поддеревья с «корнем» «И»/«ИЛИ», после нажатия кнопки «Сохранить» или «Выполнить» он сохранялся как дерево для последующего редактирования и дополнительно рекурсивно преобразовывался в SQL выражение (подзадача была сделать конструктор отчётов по довольно обширной БД анкет, спрятав от пользователей SQL да и вообще табличную природу БД). Если у вас выражения не в SQL в итоге преобразуются, а язык интепретируемый, то можно воспользоваться схожим принципом — получать в виде дерева от интерфейса, если нужно хранить для последующего редактирования/вывода, то сохранить дерево, а главное сгенерировать на вашем ЯП выражение, а потом выполнить его через функцию, во многих языках называемой eval().