如何使用柠檬来处理带变量的表达式
How to use lemon to handle a expression with variables
我想实现这样一个程序:它读取一些包含一些变量的表达式。这些变量将在稍后设置,程序应该计算最终结果(就像sql prepared statement)。
例如表达式可能是$foo + $bar + 2
,我需要在后面设置$foo
和$bar
时计算结果。
我正在尝试使用 ragel 和 lemon 来实现它。我学会了使用 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 作为令牌提供者。
我想实现这样一个程序:它读取一些包含一些变量的表达式。这些变量将在稍后设置,程序应该计算最终结果(就像sql prepared statement)。
例如表达式可能是$foo + $bar + 2
,我需要在后面设置$foo
和$bar
时计算结果。
我正在尝试使用 ragel 和 lemon 来实现它。我学会了使用 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 作为令牌提供者。