2

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.

akawhy
  • 1,558
  • 1
  • 11
  • 18

1 Answers1

2

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.

Anton Gorev
  • 434
  • 2
  • 13
  • Thank you for your advice. I'm reading 《flex & bison》recently. The key point is building AST. – akawhy Feb 04 '16 at 01:29