如何使用柠檬来处理带变量的表达式

How to use lemon to handle a expression with variables

我想实现这样一个程序:它读取一些包含一些变量的表达式。这些变量将在稍后设置,程序应该计算最终结果(就像sql prepared statement)。

例如表达式可能是$foo + $bar + 2,我需要在后面设置$foo$bar时计算结果。

我正在尝试使用 ragellemon 来实现它。我学会了使用 ragel 来解析表达式。但是我不知道如何使用 lemon 来处理变量并进行计算。

感谢您的帮助。

您必须为您的表达式构建 AST。对于这棵树中的每个变量,您应该保存一些指向变量的指针(例如,只是一个名称)。在评估时,您必须为变量条目提供值。例如,它可能是字典 <variable name> -> <variable value>.

作为使用柠檬在 C++ 上构建 AST 的示例,我可以推荐这个: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>

但是使用了 re2c 而不是 Ragel 作为令牌提供者。