Peg JS поставщик внешних переменных и посетители - PullRequest
0 голосов
/ 25 апреля 2020

Я определил базовую c грамматику функционального выражения в Peg JS. У меня есть 2 вопроса:

  1. У него есть внешние переменные и функции, которые я хочу предоставить при вызове parser.parse. Что-то вроде myParser.parse("x + y", {x: 1, y: 2}). Я взломал решение с помощью глобальных переменных, но есть ли лучший способ?

  2. Теперь я хочу реализовать 2 типа посетителей, которые выводят либо результат выражения, используя переменные, переданные из Javascript или выведите выражение SQL, чтобы выполнить его в базе данных. Примерно так:

myParser.parse("MEAN(x, y)", "JavaScript", {x: 1, y: 2, MEAN: (args) => Math.mean(...args) })

вернет 1.5, но:

myParser.parse("MEAN(x, y)", "SQL", {})

вернет AVG(x, y), выражение SQL.

В Peg есть visitor концепция JS. Я полагаю, что мог бы написать 2 посетителей, MathVisitor и SqlVisitor, и настроить его на различные зависимости для обхода дерева разбора и вывода того, что я хочу. Но до сих пор я не мог понять, нужно ли мне это и как это использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...