Неправильно определено выражение (операторы и операнды) - PullRequest
0 голосов
/ 22 марта 2020

Мне нужно идентифицировать выражение верхнего уровня из заданной строки и преобразовать его в левый операнд, правый операнд и оператор в groovy.

Я создал массив соответствия для выражения и логики c выглядит следующим образом

        static CONDITION_REGEXPS = [
            '(.+) (==) (.+)',
            '(.+) (!=) (.+)',
            '(.+) (>) (.+)',
            '(.+) (>=) (.+)',
            '(.+) (<) (.+)',
            '(.+) (<=) (.+)'
    ]

       static fromString(def string) {
        if (string) {
            string = string.split('\\|\\|');

            List<List> list = string.collect({
                it.trim().replaceAll(/^\(|\)$/, '').split('&&').collect({ condition ->
                    condition = condition.trim()
                    def regex = CONDITION_REGEXPS.find({ condition.matches(it) })
                    if (regex) {
                        return [leftOperand: condition.replaceFirst(regex, '$1'), operator: condition.replaceFirst(regex, '$2'), rightOperand: condition.replaceFirst(regex, '$3')]
                    }
                })
            })
            return list
        } else {
            return []
        }
    }

Теперь я передаю строку в следующую функцию,

def str = '( ${a < b ? a : b} < ${a > b ? a : b} )'

println fromString(str);

, которая дала мне неправильный результат,

leftOperand: ${a < b ? a : b} < ${a
operator: >
rightOperand: b ? a : b}

Что не так , должно быть,

leftOperand: ${a < b ? a : b}
operator: < 
rightOperand: ${a > b ? a : b}

Любая помощь будет оценена

...