Пример #1
0
        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));
        }
Пример #2
0
        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));
        }
Пример #3
0
        /// <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)));
        }
Пример #4
0
 private static Words toWords(WordsData data)
 {
     return(new Words(data.Tokens, Parsers.Plus(data.Lexers)));
 }