public IEnumerable<Token> Scan(string expression)
{
_reader = new StringReader(expression);
var tokens = new List<Token>();
while (_reader.Peek() != -1)
{
var c = (char)_reader.Peek();
if (Char.IsWhiteSpace(c))
{
_reader.Read();
continue;
}
if (Char.IsDigit(c))
{
var nr = ParseNumber();
tokens.Add(new NumberConstantToken(nr));
}
else if (c == '-')
{
tokens.Add(new MinusToken());
_reader.Read();
}
else if (c == '+')
{
tokens.Add(new PlusToken());
_reader.Read();
}
else
throw new Exception("Unknown character in expression: " + c);
}
return tokens;
}