用 C# 设计与实现一个算术运算解释器 2
2009-05-28 08:28:55 来源:WEB开发网核心提示: 注意到了,二元运算符里面也加入了 幂 ^ 和 模 %,用 C# 设计与实现一个算术运算解释器 2(6),因为在创建 AST 树的时候,优先权已经考虑好了,比如表达式1 + i就会被解释成1 + 2 * 2再比如,声明一个 lamdba 函数,整个树是保证优先权最高的会被最先解释,所以在这里
注意到了,二元运算符里面也加入了 幂 ^ 和 模 %。
因为在创建 AST 树的时候,优先权已经考虑好了,整个树是保证优先权最高的会被最先解释。所以在这里解释值的时候,不用考虑优先权了,可以简单的把所有的二元运算符放在一起。
四、括号的实现
对括号的实现非常简单。每当遇到一个开括号 ( 的时候,之后截取的单元运算符的优先权加 10;每当遇到一个闭括号的时候,截取的单元符的优先权减少 10。
如下代码说显示:
} else if (ch == '(') {
this.FlushBuffer(buff, list);
parenLevel += INDENT;
continue;
} else if (ch == ')') {
if (parenLevel == 0) {
throw new ParseFailureException(
"No begin parenthesis for the close parenthesis at position {0}.", i
);
}
this.FlushBuffer(buff, list);
parenLevel -= INDENT;
continue;
} else
{
五、下一步
下一个版本会添加 变量 和 函数。
比如,声明一个变量,
var i = 2 * 2
变量名 i 在之后的运算都会有效,比如表达式
1 + i
就会被解释成
1 + 2 * 2
再比如,声明一个 lamdba 函数,
let pow x = x * x
那么表达式
pow 2
就会被解释成
2 * 2
函数也支持镶嵌。比如可以定义函数
let quad x = pow pow x
更多精彩
赞助商链接