我想实现这样一个程序:它读取一些包含一些变量的表达式。这些变量将在稍后设置,程序应该计算最终结果(如 sql 准备语句)。
例如,表达式可能像$foo + $bar + 2
,我需要在后面设置$foo
和时计算结果。$bar
我正在尝试用ragel和lemon来实现它。我已经学会了使用ragel来解析表达式。但我不知道如何使用柠檬来处理变量并进行计算。
谢谢你的帮助。
我想实现这样一个程序:它读取一些包含一些变量的表达式。这些变量将在稍后设置,程序应该计算最终结果(如 sql 准备语句)。
例如,表达式可能像$foo + $bar + 2
,我需要在后面设置$foo
和时计算结果。$bar
我正在尝试用ragel和lemon来实现它。我已经学会了使用ragel来解析表达式。但我不知道如何使用柠檬来处理变量并进行计算。
谢谢你的帮助。
您必须为您的表达式构建 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 作为令牌提供者。