我想实现这样一个程序:它读取一些包含一些变量的表达式。这些变量将在稍后设置,程序应计算最终结果(类似于sql prepared statement )。
例如,表达式可能与$foo + $bar + 2
类似,我需要在稍后设置$foo
和$bar
时计算结果。
我正在尝试使用 ragel 和 lemon 来实现它。我学会了用 ragel 来解析表达式。但我不知道如何使用 lemon 来处理变量并进行计算。
感谢您的帮助。
答案 0 :(得分:2)
你必须为你的表达式构建AST。对于此树中的每个变量,您应该保存一些指向变量的指针(例如,只是一个名称)。在评估时,您必须为变量条目提供值。例如,它可能是字典<variable name> -> <variable value>
。
作为使用lemon在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作为令牌提供者。