Как использовать лимон для обработки выражения с переменными
Я хочу реализовать такую программу: она читает некоторые выражения, которые включают в себя некоторые переменные. Эти переменные будут установлены позже, и программа должна рассчитать конечный результат (например, подготовленный оператор SQL).
Например, выражение может быть как $foo + $bar + 2
и мне нужно рассчитать результат, когда $foo
а также $bar
устанавливается позже.
Я пытаюсь реализовать это с помощью рагеля и лимона. Я научился использовать ragel для разбора выражения. Но я не знаю, как использовать лимон для обработки переменной и вычисления.
Спасибо за любую помощь.
1 ответ
Вы должны построить AST для вашего выражения. Для каждой переменной в этом дереве вы должны сохранить некоторый указатель на переменную (например, только имя). Во время оценки необходимо указать значения для записей переменных. Например, это может быть словарь <variable name> -> <variable value>
,
В качестве примера построения AST на C++ с использованием lemon я могу предложить следующий пример: https://github.com/kvirund/calculator
veei@sauron:~/git/calculator/build$ ./test.it
expr> foo=1
Value: 1
expr> bar=2
Value: 2
expr> foo+bar+2
Value: 5
expr>
Но там вместо Ragel использовался re2c в качестве провайдера токенов.