I want to implement such a program: it reads some expressions which includes some variables. These variables will be set later, and the program should calculate the final result(like sql prepared statement).
For example, the expression maybe like $foo + $bar + 2
, and I need to calculate the result when $foo
and $bar
is set later.
I'm trying to implement it with ragel and lemon. I have learned use ragel to parse the expression. But I don't know how to use lemon to handle the variable and do the calculation.
Thanks for any help.
You have to build AST for your expression. For every variable in this tree you should save some pointer to a variable (just a name for instance). At the evaluation time, you have to provide values for variable entries. For example, it might be a dictionary <variable name> -> <variable value>
.
As an example of building AST on C++ using lemon, I can suggest this one: 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>
But there re2c was used instead of Ragel as tokens provider.