Основы объектно-ориентированного программирования на языке C# book | Page 186
8 Вправи
messages.Add(
ErrorReason.MissingSymbol,
"Missing {0}"
);
messages.Add(
ErrorReason.UnexpectedToken,
"Unexpected token"
);
messages.Add(
ErrorReason.EmptyParentheses,
"Empty parentheses"
);
}
public ErrorReason Reason {
get { return reason; }
}
public int Where {
get { return Math.Max(where, 0); }
}
public ExpressionSyntaxError(ErrorReason reason, int where,
params object[] args)
: base(string.Format(messages[reason], args))
{
this.reason = reason;
this.where = where;
}
}
public static class Symbols
{
public const char Space = ’ ’;
public const char Tab = ’\t’;
public const char OpenBrace = ’(’;
public const char CloseBrace = ’)’;
public static bool IsWhite(char c)
{
return (c == Tab || c == Space);
}
public static bool IsReserved(char c)
{
return (IsWhite(c) || c == OpenBrace || c == CloseBrace ||
char.IsDigit(c));
}
}
internal interface IToken { }
public abstract class Operation : IToken
{
public abstract char Symbol { get; }
public abstract long Eval(params long[] args);
internal bool TryReadSymbol(IInput input)
{
186