Я бы хотел оценить пользовательскую строку языка, которая выглядит следующим образом:
(($ v> 1) && ($ v <= 1.2.5)) || ($ v <3)
Эта строка будет иметь значение true или false. </p>
Переменная '$ v', которую я бы динамически подставил для сравнения ... и для фактического сравнения я бы использовал класс Компаратора Семвера для фактического сравнения.
Но тогда он должен хранить значения из операций prev (из скобок). Я думаю, в стеке типа '($ v> 1)' будет выполняться eval-ed, затем '($ v <= 1.2.5)', затем оба есть другая операция из '&&' - вместе. Затем вычисляется '($ v <3)', а результат сравнивается с предыдущими операциями со скобками. </p>
Я вижу Parle :: Stack, но не вижу примеров того, как выполнять такие операции. Только несколько примеров на http://php.net/manual/en/parle.examples.parser.php, чтобы помочь.
Честно говоря, я не делал лексеров / парсеров со времени flex / bison в колледже, но надеюсь, что это не так уж плохо, и кто-то может помочь мне использовать эту библиотеку.
Примечание: другой лексер / парсер, который я нашел, - это чья-то собственная библиотека, но я не уверен, как ее использовать:
https://github.com/nikic/Phlexy
https://github.com/nikic/PHP-Parser