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

Я хочу реализовать такую ​​программу: она читает некоторые выражения, в которые входят некоторые переменные. Эти переменные будут установлены позже, и программа должна вычислить окончательный результат (подобно подготовленному оператору sql).

Например, выражение может быть похоже на $foo + $bar + 2, и мне нужно вычислить результат, когда $foo и $bar будут установлены позже.

Я пытаюсь реализовать это с помощью ragel и lemon. Я научился использовать ragel для разбора выражения. Но я не знаю, как использовать lemon для обработки переменной и выполнения вычислений.

Спасибо за любую помощь.


person akawhy    schedule 22.09.2015    source источник


Ответы (1)


Вы должны построить AST для своего выражения. Для каждой переменной в этом дереве вы должны сохранить некоторый указатель на переменную (например, просто имя). Во время оценки вы должны указать значения для записей переменных. Например, это может быть словарь <variable name> -> <variable value>.

В качестве примера сборки AST на C++ с использованием лимона могу предложить такой: 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.

person Anton Gorev    schedule 07.01.2016
comment
Спасибо за совет. Я недавно читаю 《flex & bison》. Ключевым моментом является построение AST. - person akawhy; 04.02.2016