用 C# 设计与实现一个四则算术运算解释器
2009-05-29 08:31:32 来源:WEB开发网因为程序比较简单,只有 2 种单元指令:NumToken 和 OpToken。
我定义了一个基本类,叫做 Token,然后 NumToken 和 OpToken 继承了该基本类。
Class Token:什么也没有,暂时是空壳子。
internal abstract class Token
{
}
Class NumToken: 表述一个数。
internal sealed class NumToken : Token
{
public double Value { get; }
}
Class OpToken: 表述一个运算符。
internal sealed class OpToken : Token
{
public Op Value { get; }
public Prioirty Prioirty { get; }
}
Op 和 Priority 是 2 个 enum:
internal enum Op : int
{
Plus = '+',
Minus = '-',
Multiply = '*',
Divide = '/'
}
internal enum Prioirty
{
Lv2 = 2,
Lv1 = 1,
Lv0 = 0
}
截取的算法相对来说很简单,是由 Tokenizer 类来实现的。这个类是 internal sealed,因为外界不需要知道它的存在。Tokenizer 会被 Intepreter 类所使用。
internal sealed class Tokenizer
{
public Token[] Parse(string value);
}
在 Parse 函数里面,扫描输入字符串,从第一个字符开始,一直到最后一个字符。空白字符会被忽略掉。
我们定义了个缓冲 buffer,用来存储已经扫描到的数字。若是遇到了一个非数字,就把缓冲区所有的存储的字节转变成 double 类型,然后保存下来。值得注意的是,对小数点的处理。若是缓冲区里面已经存在了一个小数点,遇到一个新的小数点就应该抛出错误。
更多精彩
赞助商链接