private SymbolPrecedence <SYMBOL_ENUM> findOperator(SymbolChunk <SYMBOL_ENUM> opSymbol)
        {
            List <SymbolPrecedence <SYMBOL_ENUM> > result;

            if (operators.TryGetValue(opSymbol, out result))
            {
                return(result.Single());
            }
            else
            {
                return(null);
            }
        }
        public ISymbolPrecedence <SYMBOL_ENUM> GetShiftOperator(SymbolChunk <SYMBOL_ENUM> input)
        {
            ISymbolPrecedence <SYMBOL_ENUM> prec;

            if (input.Count == 1)
            {
                prec = findOperator(input);
            }
            else
            {
                prec = findOperator(input.Symbols.First());
            }

            return(registerUse(prec));
        }
        /// <summary>
        /// Add from lower to highest, symbols in single call are equal
        /// </summary>
        public void AddOperator(AssociativityEnum assoc, params SYMBOL_ENUM[] opSymbols)
        {
            if (priorityGroupCounter == 0)
            {
                ++runningPriority;
            }

            foreach (SYMBOL_ENUM op_symbol in opSymbols)
            {
                addEntry(this.operators, new SymbolPrecedence <SYMBOL_ENUM>(SymbolPrecedence.ModeEnum.BasicOperatorSearch)
                {
                    Symbols       = SymbolChunk.Create(op_symbol),
                    Associativity = assoc,
                    Priority      = runningPriority
                }, symbolsRep);
            }
        }