Как использовать лимон для обработки выражения с переменными

Я хочу реализовать такую ​​программу: она читает некоторые выражения, которые включают в себя некоторые переменные. Эти переменные будут установлены позже, и программа должна рассчитать конечный результат (например, подготовленный оператор 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 в качестве провайдера токенов.

Другие вопросы по тегам