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); } }