Как использовать Parle php parsing / lexing library для оценки пользовательской языковой строки, включающей стек / parens - PullRequest
0 голосов
/ 12 сентября 2018

Я бы хотел оценить пользовательскую строку языка, которая выглядит следующим образом:

(($ 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

...