Ejemplo n.º 1
0
        internal static int GetNextToken(string source, int position, out Token token, Token prevToken = null)
        {
            char symbol = source[position];
            token = null;
            if (DoubleToken.IsStartSymbol(symbol))
            {
                token = new DoubleToken().FromString(source, ref position);
                return position;
            }

            if (BracketToken.IsStartSymbol(symbol))
            {
                token = BracketToken.GetBracket(symbol, prevToken);
                return position + 1;
            }

            if (OperationToken.TryGetOperation(symbol, prevToken, out token))
            {
                return position + 1;
            }

            if (FunctionToken.IsStartSymbol(symbol))
            {
                token = new FunctionToken().FromString(source, ref position);
                return position;
            }

            throw new ArgumentOutOfRangeException("symbol", symbol, "Unexpected symbol");
        }
Ejemplo n.º 2
0
 public OpenBracket(Token prevToken)
 {
     if (prevToken != null && (prevToken.TokenType != TokenType.Operation && prevToken.TokenType != TokenType.OpenBracket))
     {
         throw new InvalidOperationException("Open bracket can't follow after: " + prevToken.TokenType);
     }
 }
Ejemplo n.º 3
0
 public static BracketToken GetBracket(char symbol, Token prevToken = null)
 {
     switch (symbol)
     {
         case '(': return new OpenBracket(prevToken);
         case ')': return new CloseBracket(prevToken);
         default: throw new ArgumentOutOfRangeException("symbol", symbol, string.Format("Have not this bracket: '{0}'", symbol));
     }
 }
Ejemplo n.º 4
0
            public CloseBracket(Token prevToken)
            {
                if (prevToken == null)
                    throw new InvalidOperationException("Close bracket be first in expression.");

                if (prevToken.TokenType != TokenType.Value && prevToken.TokenType != TokenType.CloseBracket)
                {
                    throw new InvalidOperationException("Close bracket can't follow after: " + prevToken.TokenType);
                }
            }
Ejemplo n.º 5
0
 protected static bool TryGetUnary(char symbol, Token prevToken, out Token unaryOperation)
 {
     unaryOperation = null;
     return (prevToken == null || prevToken.AllowUnaryAfter) && UnarySpecialChars.TryGetValue(symbol, out unaryOperation);
 }
Ejemplo n.º 6
0
 public static bool TryGetOperation(char symbol, Token prevToken, out Token token)
 {
     return TryGetUnary(symbol, prevToken, out token) || SpecialChars.TryGetValue(symbol, out token);
 }