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

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

 2009-05-28 08:28:55 来源:WEB开发网   
核心提示: 注意 Op 类的成员排列是有讲究的, _face => 2 字节 _arity => 2 字节 _name => 4 字节 _prioirty => 4 字节若是颠倒 _arity 和 _name 的顺序,用 C# 设计与实现一个算术运算解释器 2(3),就会导致一

注意 Op 类的成员排列是有讲究的。

_face => 2 字节

_arity => 2 字节

_name => 4 字节

_prioirty => 4 字节

若是颠倒 _arity 和 _name 的顺序,就会导致一个 Op 对象会在托管堆上占据多 4 字节的内存空间。你能回答为什么吗?

定义了一个数组,来存储所有的操作符:

private static readonly Op[][] OpTable = {
  new Op[] {
    new Op(OpName.PositiveSign,   '+',   OpArity.Unary),
    new Op(OpName.NegativeSign,   '-',   OpArity.Unary),
  },
 
  new Op[] {
    new Op(OpName.Exponential,   '^',   OpArity.Binary),
    new Op(OpName.Multiplication,  '*',   OpArity.Binary),
    new Op(OpName.Division,     '/',   OpArity.Binary),
    new Op(OpName.Modulus,     '%',   OpArity.Binary),
    new Op(OpName.Addition,     '+',   OpArity.Binary),
    new Op(OpName.Subtraction,   '-',   OpArity.Binary),
    /* new Op1(OpName.Assignment, '=', OpArity.Binary), */
  }
};

把一元运算符和二元运算符分开成两个数组,是为了方便查询。可能你会注意到,这个版本中,暂时还不支持赋值运算符 =;下个版本会支持。:)

二、截取单元指令 (Tokenize)

在这个部分,要考虑到识别一元运算符。怎么识别?

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

Tags:设计 实现 一个

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