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

用 C# 设计与实现一个算术运算解释器 2

 2009-05-28 08:28:55 来源:WEB开发网   
核心提示: 这里定义了零元运算符,一元运算符,用 C# 设计与实现一个算术运算解释器 2(2),二元运算符,以及三元运算符,类似于 String 类,这很重要,注:变量可以认为是零元运算符,比如

这里定义了零元运算符,一元运算符,二元运算符,以及三元运算符。

注:变量可以认为是零元运算符。比如,我声明一个变量 x = 1 + 2,那么 x 就可以被认为是一个运算符,它不需要任何参数引入,所以是零元运算符。

运算符枚举添加了新成员:

internal enum OpName : uint
{
  PositiveSign = 40,     // +a
  NegativeSign = 41,     // -a
 
  Exponential = 30,      // a ^ b
 
  Multiplication = 20,    // a * b
  Division = 21,       // a / b
  Modulus = 22,        // a % b
 
  Addition = 10,       // a + b
  Subtraction = 11,      // a - b
 
  Assignment = 0       // a = b
}

添加的新成员是 PositiveSign, NegativeSign, Exponential, Modulus, 和 Assignment。

这里给它们赋的整型值是有意义的。把一个运算符的整型值除以10,就能够得到它们的优先权。比如,正号PositiveSign 和 负号 NegativeSign 具有最高的优先权 4,其次是 幂 Exponential,优先权是 3。再次是乘法、除法和求余。再次是加法和减法。优先权最低的是赋值运算符 =。

添加了一个类,Op,来把上面两个枚举包起来。Op 类被设计成是不可变更的,类似于 String 类。这很重要,在后面的括号实现里面会阐述这点。

internal sealed class Op {
  private char _face;     
  private OpArity _arity;   
  private OpName _name;    
  private uint _priority;
}

上一页  1 2 3 4 5 6  下一页

Tags:设计 实现 一个

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