用 C# 设计与实现一个算术运算解释器 2
2009-05-28 08:28:55 来源:WEB开发网这里定义了零元运算符,一元运算符,二元运算符,以及三元运算符。
注:变量可以认为是零元运算符。比如,我声明一个变量 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;
}
更多精彩
赞助商链接