用 C# 设计与实现一个四则算术运算解释器
2009-05-29 08:31:32 来源:WEB开发网核心提示: 每当扫描到一个操作符,比如 +, –, *, /,用 C# 设计与实现一个四则算术运算解释器(4),就把他们当作一个操作符存储起来,这里要注意的是,运算顺序是由左至右的话,那么新的操作符会成为新的树的根,数字的正负号其实是一个一元操作符,是何数字分开保存的
每当扫描到一个操作符,比如 +, –, *, /,就把他们当作一个操作符存储起来。这里要注意的是,数字的正负号其实是一个一元操作符,是何数字分开保存的。
遇到其他没有定义的字符,就直接抛出错误。
三、创建 Abstract Syntax Tree
这里需要考虑到2个不同的正常情况:
1、不同级别的操作符:+和-的优先等级比较低,×和/的优先等级比较高
2、同级别的操作符,操作的顺序。比如,+和-的优先顺序是从左往右。
从最简单的情况开始考虑:分析 1 + 2 + 3 + 4
首先,AST 树是空的, Root = NULL。
当把 NumToken 1 插入树的时候,简单的设置该 Token 为根即可。
当把 OpToken + 插入树的时候,我们就需要挪动树,把 + 设置成根:
当把 NumToken 2 插入树的时候,我们就把数字 2 插入树的右侧:
当把 OpToken + 插入树的时候(同级别的操作符,顺序是左到右),我们就需要把最新的 OpToken 设置成根,当前树设置成新根的左侧:
到这里为止,我们可以得出一个很重要的法则:插入一个新的操作符进入 AST 树的时候,若是树的根是一个操作符,并且和此新操作符同级,运算顺序是由左至右的话,那么新的操作符会成为新的树的根,现有的树会成为新树的左子树。
[]
更多精彩
赞助商链接