Мне нужно оценить логическое выражение, созданное пользователем. Я вижу два способа сделать это:
1) построить строку и передать ее в eval
2) построить абстрактное синтаксическое дерево и оценить его самостоятельно
Я реализовал это с помощью eval, так как это самое простое решение. Я не уверен, что второй вариант будет намного лучше, я не удивлюсь, если он будет на самом деле медленнее.
Безопасность не должна быть проблемой, так как я строю выражение из набора предопределенных значений.
В большинстве случаев выражения будут довольно простыми, но можно создавать более сложные выражения. Это настолько сложно, насколько это возможно: "(true || false && false) && (true)"
Мысли