WEB开发网
开发学院软件开发C语言 用 C# 设计与实现一个算术运算解释器 2 阅读

用 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

上一页  1 2 3 4 5 6 

Tags:设计 实现 一个

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接