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