上文中,提到如果解析一个数学表达式,并把它变成一棵树,我们把这个程序称为解释器,这次我要为这个解释器加一个功能:赋值操作
let a = 3 * 4
这里我们要区分左值(left-value)和右值(right-value) 右值是临时结果,而左值是一个变量。至于右面是一个表达式,表达式如何解析在上一篇文章已经详细说了,所以这里就不多说。
解析(parsing)后,得到的是这样一棵树,那么我们要如何实现赋值(Assign)操作呢?
在这里我们使用Environment实现,我们只需要一个map哈希表就可以了
把3 + 4计算的结果放到a里面就行了,eval函数里面可以这样写:
else if (root->asAssignment()) { auto _node = root->asAssignment(); env.setValue(_node->Identifier(), _node->Expression()); return 0;
这里的env里面其实是一个Map而已。
在这里附上这个程序的源码:https://github.com/vincentdchan/CalculatorParser