Code/Operators/OperatorBase.cs
using Expressive.Expressions;
using System.Collections.Generic;
namespace Expressive.Operators
{
/// <summary>
/// Base class implementation of <see cref="IOperator"/>.
/// </summary>
public abstract class OperatorBase : IOperator
{
#region IOperator Members
/// <inheritdoc />
public abstract IEnumerable<string> Tags { get; }
/// <inheritdoc />
public abstract IExpression BuildExpression(Token previousToken, IExpression[] expressions, Context context);
/// <inheritdoc />
public virtual bool CanGetCaptiveTokens(Token previousToken, Token token, Queue<Token> remainingTokens)
{
return true;
}
/// <inheritdoc />
public virtual Token[] GetCaptiveTokens(Token previousToken, Token token, Queue<Token> remainingTokens)
{
return new[] { token };
}
/// <inheritdoc />
public virtual Token[] GetInnerCaptiveTokens(Token[] allCaptiveTokens)
{
#pragma warning disable CA1825 // Avoid zero-length array allocations. - Array.Empty does not exist in net 4.5
return new Token[0];
#pragma warning restore CA1825 // Avoid zero-length array allocations.
}
/// <inheritdoc />
public abstract OperatorPrecedence GetPrecedence(Token previousToken);
#endregion
}
}