private static Words instance <T>(Scanner wscanner, string[] ops, string[] keywords, bool cs, FromRange <string, T> toWord) { checkDup(ops, keywords, true); WordsData data = combine(Operators.instance(ops), Keywords.getInstance("word", wscanner, keywords, cs, toWord)); return(toWords(data)); }
private static WordsData combine(WordsData w1, WordsData w2) { TokenMap map1 = w1.Tokens; TokenMap map2 = w2.Tokens; Lexer[] l1 = w1.Lexers; Lexer[] l2 = w2.Lexers; TokenMap map = delegate(string n) { object t1 = map1(n); if (t1 != null) { return(t1); } return(map2(n)); }; Lexer[] l = new Lexer[l1.Length + l2.Length]; Array.Copy(l1, 0, l, 0, l1.Length); Array.Copy(l2, 0, l, l1.Length, l2.Length); return(new WordsData(map, l)); }
/// <summary> Creates a Words object for lexing the operators with names specified in ops. /// Operators are lexed as TokenReserved. /// </summary> /// <param name="ops">the operator names. /// </param> /// <returns> the Words instance. /// </returns> internal static Words getOperators(string[] ops) { WordsData data = Operators.instance(ops); return(new Words(data.Tokens, Parsers.Plus(data.Lexers))); }
private static Words toWords(WordsData data) { return(new Words(data.Tokens, Parsers.Plus(data.Lexers))); }